使用truffle框架部署并测试以太坊智能合约
文章目录
安装solidity编译器
Mac下安装
brew tap ethereum/ethereum
brew install solidity
# 查看当前安装的solc编译器版本号
solc --version
安装 node
Mac下安装
brew install node
# 查看当前安装的node版本号
npm -v
安装 truffle
Mac下安装
npm install -g truffle
# 查看当前安装的truffle版本号
truffle version
安装 ganache
ganache是truffle官方推荐的一个以太私有链客户端,无缝继承truffle,并有完善的图形化界面供展示。
使用truffle官方示例合约进行测试
1. 为你的truffle工程新建一个空白的目录
mkdir MetaCoin
cd MetaCoin
2. 下载官方示例合约
truffle unbox metacoin
3. 编译示例合约
truffle compile
你会看到下面的输出:
Compiling .\contracts\ConvertLib.sol...
Compiling .\contracts\MetaCoin.sol...
Compiling .\contracts\Migrations.sol...
Writing artifacts to .\build\contracts
4. 启动ganache客户端
你会看到默认给你创建了10个账户,区块的生成是只有交易发生的时候才会产区块。
5. 导入当前truffle工程的配置文件
-
点击右上角的设置键
-
点击 ADD PROJECT导入当前truffle工程目录下的truffle-config.js文件
-
ganache主板上的CONTRACTS上会看到当前truffle目录下的合约文件
6. 部署合约到ganache私有链上
在MetaCoin目录下执行:
truffle migrate
会看到如下的输出:
Starting migrations...
======================
> Network name: 'develop'
> Network id: 4447
> Block gas limit: 6721975
1_initial_migration.js
======================
Deploying 'Migrations'
----------------------
> transaction hash: 0x3fd222279dad48583a3320decd0a2d12e82e728ba9a0f19bdaaff98c72a030a2
> Blocks: 0 Seconds: 0
> contract address: 0xa0AdaB6E829C818d50c75F17CFCc2e15bfd55a63
> account: 0x627306090abab3a6e1400e9345bc60c78a8bef57
> balance: 99.99445076
> gas used: 277462
> gas price: 20 gwei
> value sent: 0 ETH
> total cost: 0.00554924 ETH
> Saving migration to chain.
> Saving artifacts
-------------------------------------
> Total cost: 0.00554924 ETH
2_deploy_contracts.js
=====================
Deploying 'ConvertLib'
----------------------
> transaction hash: 0x97e8168f1c05fc40dd8ffc529b9a2bf45cc7c55b07b6b9a5a22173235ee247b6
> Blocks: 0 Seconds: 0
> contract address: 0xfb39FeaeF3ac3fd46e2123768e559BCe6bD638d6
> account: 0x627306090abab3a6e1400e9345bc60c78a8bef57
> balance: 99.9914458
> gas used: 108240
> gas price: 20 gwei
> value sent: 0 ETH
> total cost: 0.0021648 ETH
Linking
-------
* Contract: MetaCoin <--> Library: ConvertLib (at address: 0xfb39FeaeF3ac3fd46e2123768e559BCe6bD638d6)
Deploying 'MetaCoin'
--------------------
> transaction hash: 0xee4994097c10e7314cc83adf899d67f51f22e08b920e95b6d3f75c5eb498bde4
> Blocks: 0 Seconds: 0
> contract address: 0x6891Ac4E2EF3dA9bc88C96fEDbC9eA4d6D88F768
> account: 0x627306090abab3a6e1400e9345bc60c78a8bef57
> balance: 99.98449716
> gas used: 347432
> gas price: 20 gwei
> value sent: 0 ETH
> total cost: 0.00694864 ETH
> Saving migration to chain.
> Saving artifacts
-------------------------------------
> Total cost: 0.00911344 ETH
Summary
=======
> Total deployments: 3
> Final cost: 0.01466268 ETH
上面的信息显示了部署合约的交易id以及合约对应的地址。
7. 测试查看信息以及MetaCoin币的转账
-
打开链的终端交互界面
truffle console
-
和部署的合约进行交互
-
获取部署合约的实例以及私链上创建的所有账户
truffle(ganache)> let instance = await MetaCoin.deployed() truffle(ganache)> let accounts = await web3.eth.getAccounts()
-
检测部署合约账户下Metacoin币的余额
truffle(ganache)> let balance = await instance.getBalance(accounts[0]) truffle(ganache)> balance.toNumber()
-
转账Metacoin
truffle(ganache)> instance.sendCoin(accounts[1], 500)
-
检测接收Metacoin币账户下的余额是否正确
truffle(ganache)> let received = await instance.getBalance(accounts[1]) truffle(ganache)> received.toNumber()
-
检测转出Metacoin币账户下的余额是否正确
truffle(ganache)> let newBalance = await instance.getBalance(accounts[0]) truffle(ganache)> newBalance.toNumber()
-