0%

以太坊(ethereum)开发

不适合人类阅读的学习笔记

安装Truffle


Node.js安装

  • 先要进行node.js环境的安装,见上一篇博客。

命令行安装truffle

  • 执行命令 npm install -g truffle

创建工程


  • 执行命令 truffle init

  • truffle init会默认创建一个构建在以太坊内的代币demo应用。我们可以使用这个工程来进行快速的学习。

  • init 之后目录下就会有若干文件和文件夹。结构如下:

  • contracts目录中包含Solidity合约代码,其中Migrations.sol是必须有的,其他就是你自己写的合约代码了。

  • migrations目录中包含合约部署脚本,其中1_initial_migration.js就是用来部署Migrations.sol的,其他的脚本会按照顺序依次执行。

  • test目录保存用来测试应用和合约的测试文件

  • truffle.js - Truffle的配置文件

  • 官方文档(命令行指令,前面要加truffle):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Commands:
init //Initialize new and empty Ethereum project
compile //Compile contract source files
migrate //Run migrations to deploy contracts
deploy //(alias for migrate)
build //Execute build pipeline (if configuration present)
test //Run JavaScript and Solidity tests
debug //Interactively debug any transaction on the blockchain (experimental)
opcode //Print the compiled opcodes for a given contract
console //Run a console with contract abstractions and commands available
develop //Open a console with a local development blockchain
create //Helper to create new contracts, migrations and tests
install //Install a package from the Ethereum Package Registry
publish //Publish a package to the Ethereum Package Registry
networks //Show addresses for deployed contracts on each network
watch //Watch filesystem for changes and rebuild the project automatically
serve //Serve the build directory on localhost and watch for changes
exec //Execute a JS module within this Truffle environment
unbox //Download a Truffle Box, a pre-built Truffle project
version //Show version number and exit

终端输入truffle即可查看上述命令

安装以太坊客户端


  • 这里我们选择了Ganache——github项目

  • 图形版本下载地址(linux下载 XX.AppImage文件格式的)

  • 命令行版本(ganache-cli)下载 npm install -g ganache-cli

  • Ganache的前身是testRPC

编译和部署合约


  • Ganache默认运行在7545端口,可以在界面右上方的“设置”里进行更改。运行后默认创建10个账号,每个账号里有100ETH的余额。
    要部署到链上,需要把IP、端口、网络ID告诉truffle。

  • 若要修改,则修改truffle.js:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    module.exports = {  
    networks: {
    development: {
    host: 'localhost',
    port: '7545',
    network_id: '*' // Match any network id
    }
    }
    };

编译合约

合约位置

  • 所有你的合约应该位于./contracts目录。默认我们提供了一个合约文件,一个库文件,均以.sol结尾作为示例。尽管库文件有一定的特殊性,但为简单起见,当前均称之为合约。

  • truffle cmpile 仅默认编译自上次编译后被修改过的文件,来减少不必要的编译。如果你想编译全部文件,可以使用–compile-all选项。

约定

  • Truffle需要定义的合约名称和文件名准确匹配。例如,如果文件名为 MyContract.sol,那么合约文件须为如下两者之一(并且匹配 区分大小写):

    1
    2
    3
    4
    5
    6
    7
    contract MyContract {
    ...
    }
    // or
    library MyContract {
    ...
    }
  • 编译目录:编译的输出位于./build/contracts 目录。如果目录不存在会自动创建。这些编译文件对于Truffle框架能否正常工作至关重要。你不应该在正常的编译或发布以外手动修改这些文件。

移植

  • 命令 truffle migrate

  • 这个命令会执行所有的位于 migrations 目录内的移植脚本。如果你之前的移植是成功执行的。truffle migrate 仅会执行新创建的移植。如果没有新的移植脚本,这个命令不同执行任何操作。可以使用选项 --reset来从头执行移植脚本。

修改配置

  • Ganache默认运行在7545端口,可以在界面右上方的“设置”里进行更改。运行后默认创建10个账号,每个账号里有100ETH的余额。
    要部署到链上,需要把IP、端口、网络ID告诉truffle。修改truffle.js:

    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
    }
    }
    };
  • 详见官方文档

测试合约


  • 直接执行命令:truffle unbox metacoin ,创建这个项目。

  • 由于metacoin的示例代码里已经把测试代码写好了,按照上面的修改完truffle.js之后,我们就可以编译部署测试我们的代码了:

    1
    2
    3
    truffle compile
    truffle migrate
    truffle test
  • 结果如下:

  • 然后打开 ganache查看区块链的变化。 Accounts标签:第一个账户里ETH略有减少,因为交易消耗了gas;Blocks标签:Ganache是自动挖矿,生成了6个新区块,每个区块里有一个交易;Transactions标签:有6笔新交易,可以点开看交易详情;Logs标签:显示交易和挖矿日志


> 最后更新于2018.5.23