未来已来,静待花开

(以太坊源码解读)第1讲-看前必读

  • 本项目是在IntelliJ idea 2017.3.1版中部署的,部署时候,需要注意项目结构,具体部署不是小编的重点,此处就不详细解释了,有需要的可以别的网站查阅,资料很多
  • 可以在此处参考小编从IntelliJ idea发布的以太坊项目来部署:https://github.com/bitxx/blockchain-analysis
  • 小编是基于ethereum 1.8.3阅读的(原先看的是1.8.1,看改动不大,这次编辑文章,就直接用1.8.3啦)
  • 源码解读最初参考自:https://github.com/ZtesoftCS/go-ethereum-code-analysis ,小编根据自己个人学习方式和理解能力做了大量修改,个人认为,更容易让初学者理解。

使用web3.js与智能合约交互

使用truffle编译并发布智能合约到以太坊私有网络后,接下来,就该开放接口给前端使用了。这时会面临个问题,怎样和以太坊的智能合约进行交互?
大体两种方式:

  1. 直接使用原生的web3.js与智能合约操作,小编尝试了以下,操作起来很麻烦,总之很别扭。
  2. 使用truffle-contract模块来操作智能合约,它将原生的web3.js进行了一些必要的封装,简化了操作方式,用着很顺手,基本类似于写truffle测试用例时候的语法格式。但是官方有些地方的使用方法讲的很模糊,小编在此进一步翻译一下。
阅读更多...

(truffle官翻)第14讲 各种配置文件(truffle.js、MochaJS、Solidity)

truffle.js配置

概述

当使用Windows的命令行时,默认的配置文件名与truffle冲突。这种情况下,我们推荐使用Windows的power Shell或Git BASH。你也可以将配置文件重命名为truffle-config.js来避免冲突。
这也是为什么truffle init时候,项目里会生成一个truffle.jstruffle_config.js

  1. 配置文件位置:
    它在项目根目录中,称为truffle.js
  2. 必须要配置这个文件,格式如下,默认是8545端口:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    module.exports = {
    networks: {
    development: {
    host: "127.0.0.1",
    port: 8545,
    network_id: "*" // Match any network id
    }
    }
    };

常规配置

  1. build设置
    就是说,将你的应用和Truffle结合在一起当应用(一般很少见),可参考:
    第16讲_将应用和truffle集成编译

  2. 合约发布时,可以指定使用哪个网络:

    1
    2
    //使用哪种网络,需要在truffle.js中配置
    migrate —network live
  3. 具体配置文件如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    module.exports = {
    networks: {
    development: {
    host: "127.0.0.1", // 默认为localhost
    port: 8545, // 默认为8545
    network_id: "*" // match any network
    },
    live: {
    host: "178.25.19.88", // Random IP for example purposes (do not use)
    port: 80,
    network_id: 1, // Ethereum public network
    // optional config values:
    // gas - 默认为4712388
    // gasPrice - 默认为100000000000(100Gwei)
    // from - default address to use for any transaction Truffle makes during migrations
    // provider - web3 provider instance Truffle should use to talk to the Ethereum network.
    // - function that returns a web3 provider instance (see below.)
    // - if specified, host and port are ignored.
    }
    }
    }
  4. 说明:

    1. 注意,networks中,每一个代表一个provider
    2. 设置网络参数,设置gas和地址等信息,
    3. truffle.js中的networks配置是必要的,默认给出的网络是可以连接在任意的network_id中的,在测试时候,这是有用的,但是在生产环境下,不建议。可通过network _id来指定多个网络。
    4. gas:gas最大值设置,默认为4712388(这个设置的大点,默认就好,)
    5. gasPrice:gas 价格,默认为100000000000wei(众筹一般:100Gwei就够了)
    6. from:移植期间,默认的第一个有效提供者(当前指定以太坊网络中)
    7. provider:默认是web3使用host和port提供:
      注意,在任意网络中,或者是设置host/port或者设置provider,不可以同时设置。
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
          new Web3.providers.HttpProvider("http://<host>:<port>");
      ```
      8. 管理多个providers,
      一个网络还不够用啊,非要搞一堆,具体自己看文档吧(http://truffleframework.com/docs/advanced/configuration),这里小编偷懒不翻译了,感觉没啥用。
      9. 设置.sol合约编译输出的默认路径(contracts_build_directory)
      默认就是输出来./build/contracts
      ```js
      module.exports = {
      contracts_build_directory: "./output",
      networks: {
      development: {
      host: "127.0.0.1",
      port: 8545,
      network_id: "*",
      }
      }
      };
  5. Mocha配置

    1. 可参考:http://mochajs.org/
    2. 例子:
      1
      2
      3
      mocha: {
      useColors: true
      }
  6. Solidity编译器配置
    可以设置solc:

    1
    2
    3
    4
    5
    6
    solc: {
    optimizer: {
    enabled: true,
    runs: 200
    }
    }

(truffle官翻)第13讲 编写外部脚本

  1. 有时候想写个外部脚本来和合约交互,Truffle已经替你想好了,你只要这么做就行

  2. truffle develop环境中运行:

    1
    exec <path/to/file.js>
  3. 文件结构
    为了使得脚本能正常运行,需要它们能通过js模块导出一个函数,并且有一个回调函数:

    module.exports = function(callback){
       //perform actions
    }
    

    在脚本里,随便写,只要能运行就好。上面那个回调,当脚本结束后,会被执行

(truffle官翻)第12讲 Truffle的develop环境和console环境

概述

  1. 总之是很叼的东西,有时候方便测试
  2. 提供了两种方式
    1. Truffle console :一个基本的交互控制台,用于连接一个已有以太坊网络或者是已有的Truffle Develop环境
    2. Truffle Develop:一个基本的控制台,就是创建独立的一个测试环境(模拟以太坊)
  3. 为什么会有这两种方式
    1. 使用Truffle console
      1. 有一个真实的区块链网络
      2. 想要发布到以太坊公共测网络
      3. 想用别的账户名称
    2. 使用Truffle Develop
      1. 用于测试项目,并不急于发布
      2. 不需要特殊的账户操作
      3. 不想安装或者管理区块链客户端

命令

  1. 退出环境使用:control+c
  2. 所有的命令都需要在你项目的根目录下运行
    1. Truffle console环境,命令:

      truffle console
      

      他将会在配置文件truffle.js中查找命名为development的网络,并且连接。你也可以使用 —netwokr ,这样就会去truffle.js对应的networks的 name

    2. Truffle Develop环境

      1. 登陆环境:
      truffle develop
      
    3. 连接localhost:9545,这种方式不会去考虑truffle.js中配置的环境怎样

    4. Truffle console和Truffle Develop的环境的命令基本都一致

主要命令

如果命令不可用,说明该命令对该阶段的项目并不起作用

  1. build
  2. compile
  3. create
  4. debug
  5. exec
  6. install
  7. migrate
  8. networks
  9. opcode
  10. publish
  11. test
  12. version

(truffle官翻)第7.2讲 编写一个JavaScript测试文件

概述

呵呵

量真大,翻译不动了。。。。。。。。。。。。。。。

(truffle官翻)第7.1讲 合约测试

框架

  1. 可以用两种不同的方式编写简单且容易管理的测试:
    1. 在JavaScript中,执行合约就像运行一个应用一样简单
    2. 在Solidity 中,总之也是很方便
  2. test文件是从根目录中可以找打到,Truffle只会运行.js, .es, .es6, and .jsx, and .sol这几个文件,其他会被忽略

命令

  1. 运行
    1
    2
    truffle develop  //进入环境(若已经在项目根目录下进入该环境,则不需要执行该命令)
    test //该环境中测试
  2. 也可指定路径
    test ./path/to/test/file.js
    

独立的运行环境

运行测试文件时,Truffle提供了一个独立的环境,确保每个测试不会被干扰

快速和可靠性

一句话翻译:测试速度老快了,而且老安全了。

  • Copyrights © 2017-2023 Jason
  • Visitors: | Views:

谢谢打赏~

微信