智能合约环境搭建
1 编辑器
vscode + solidity插件
2 编译器solc
npm install -g solc// 前提安装node和npm,需要sudo权限sudo apt install nodejs/npm
或者
sudo add-apt-repository ppa:ethereum/ethereum
sudo apt-get update
sudo apt-get install solc
参考
http://solidity.readthedocs.io/en/v0.4.23/installing-solidity.html
3 测试testrpc
//pip installeth-testrpc // 前提sudoapt install python-pip, --这个是错误的
sudo npm install -g ethereumjs-testrpc
4 开发框架Truffle
npm install -gtruffle
5 truffle命令
1. 创建项目目录
mkdir conference
cd conference
2. 创建项目
truffle init
3. 部署
truffle migrate / deploy
//在另一个终端里通过执行testrpc来启动一个节点(你也可以用geth):
回到之前的终端中,输入truffledeploy。这条命令会部署之前truffleinit产生的模板合约到网络上。任何你可能遇到的错误信息都会在testrpc的终端或者执行truffle的终端中输出。
在使用trufflemigrate进行智能合约test环境发布时如果未配置正确会出现以下异常:
truffle migrate
Error: No network specified. Cannotdetermine current networkat Object.detect (/usr/local/lib/node_modules/truffle/build/cli.bundled.js:43157:23)at /usr/local/lib/node_modules/truffle/build/cli.bundled.js:200497:19atfinished (/usr/local/lib/node_modules/truffle/build/cli.bundled.js:43085:9)at/usr/local/lib/node_modules/truffle/build/cli.bundled.js:198408:14at/usr/local/lib/node_modules/truffle/build/cli.bundled.js:68162:7at/usr/local/lib/node_modules/truffle/build/cli.bundled.js:163793: at/usr/local/lib/node_modules/truffle/build/cli.bundled.js:160353:16at replenish(/usr/local/lib/node_modules/truffle/build/cli.bundled.js:160873:25)atiterateeCallback(/usr/local/lib/node_modules/truffle/build/cli.bundled.js:160863:17)at/usr/local/lib/node_modules/truffle/build/cli.bundled.js:160838:16
导致上面异常的原因为是因为truffle.js里面未配置链接合约发布的环境地址,找到对应的truffle.js文件,修改代码为类似如下配置即可解决问题:
module.exports = {networks: {development:{ host: "localhost", port: 8545, network_id: "*" //匹配任何NETID}}
};
4. 编译
truffle compile
5. 测试
truffle test
6. 交互 truffle console
6 Sample
1. 创建项目
mkdir HelloWorld
cd HelloWorld
truffle init
目录如下:contractsmigrations testtruffle-config.js truffle.js
2. 编写代码
在contracts目录下
vim HelloWorld.sol
内容如下:
pragmasolidity^0.4.4;
contract HelloWorld {
functionsayHello()returns (string){
return("HelloWorld");
}
}
3. 编写部署脚本:migrations/2_deploy_contracts.js
4. var HelloWorld =artifacts.require("HelloWorld");
module.exports = function(deployer) {
deployer.deploy(HelloWorld);
}
5. 编译:truffle compile
6. 修改部署文件truffle.js,内容如下:
module.exports={
// See
//to customize your Truffle configuration!
networks:{
live:{
host:"localhost",
port:8545,
network_id:"*"
from : “0x2a04129f0c9d8c62ab639952d9f9bb4919d96bdf”
gas: 3000000
}
}
};
7. 在另一个终端启动testrpc
testrpc
8. 部署:trufflemigrates 或deploy
Truffle migrates --network live //对应truffle.js中的live
9. truffle console
输入:
HelloWorld.deployed().then(instance=>{
contract=instance
});
10. 执行合约
contract.sayHello()