智能合约编写及部署
标签(空格分隔): 区块链
智能合约编写及部署
搭建开发环境
安装ethereumjs-testrpc
和truffle
框架
npm install -g ethereumjs-testrpc truffle
启动Testrpc
通过testrpc
命令来启动以太坊测试环境
testrpc
启动环境以后会返回
Available Accounts(自动生成的是个测试钱包地址)
==================
(0) 0x32800d037b4dfd8f8320f6fb0c838a653d3c6077
(1) 0xaf48606c5e631ea286c9b716cd4041d5fd3087f3
(2) 0xdeabcd9f5e099ef6643c382a9e791beba28b7fac
(3) 0x5a8bb792c081500d80e25de64ec28ad5e05aaf71
(4) 0x485c3f7cfbbe7914396cc1ece9d0f6569a11f670
(5) 0x8e97e5ca328e49332876a2a17a01d8e7ebda02ea
(6) 0x343523c0a5cb2b9d99dcc7dc7e52e8fbf88af3fd
(7) 0x116515201a3a29fa384f0cd00e971eeb607e47e9
(8) 0x78f0845496ce3c821498fd5992df68a7da81b35f
(9) 0x58063a2026e86b06cd8faa91de6c6ee7ef900a73
Private Keys(钱包的私钥)
==================
(0) a46e843998daa3df9b99362c405c7ce6614458e5abfac16832799df350af894a
(1) 639f8c6fdace297c00cf01036e501f761fe873499e603b1cbd16a313698540d1
(2) b3fba3c33c1611681bd3d9f9b533005e02b4d2d617fc76eefade2f65f096ed61
(3) d3b9dc7de1326ec12f14e55d1710a6b2610d8f81e6b09fe8f25812c5ad37f966
(4) efd0b1c9928c4578ac1ec19f8043a1a1e4a66b931f0fd5c97a25f10dacede7f0
(5) 2d5c53a8a1dfc6b1321a0480d6775fc076c3a2d713bafb4d6284e0234596f9a7
(6) 3af7794392313a3a3958ed9e0f35b822a52204a71a019697b051122b7eebc629
(7) fbdae4add706c1b61d93c9db22933fc0a978386e3fac566e23d6dc11b2cdcc57
(8) 0b40eb2190d284c42241bbbe260bbfcb89320fc80a9d169936dd466dc847d248
(9) 17885864f3e7ab339dadcf0a8b1aefc2fe36e01a45e41b855bc993ce0f05a257
此时测试环境终端不要关闭,重新启动一个终端来创建项目
创建项目
执行以下命令来创建项目
truffle init
执行完命令会生成以下项目目录
contracts:编写合约目录
migrations:部署合约配置的文件夹
test:测试目录
添加solidity代码
创建HelloWorld.sol
文件,添加以下合约代码
pragma solidity ^0.4.4;
contract HelloWorld {
function sayHello() returns (string) {
return ("hello world");
}
}
修改migrations/1_initial_migration.js
文件代码如下
var HelloWorld = artifacts.require("./HelloWorld.sol");
module.exports = function(deployer){
deployer.deploy(HelloWorld);
}
编译合约
定位到项目所在目录,运行以下命令进行合约部署
truffle compile
部署合约
定位到项目所在目录,运行以下命令进行合约部署
// 部署
truffle migrate
// 重新部署
truffle migrate --reset
如果部署过一次,再次部署的时候需要用重新部署的方式
与合约互动
truffle提供了命令行工具,执行truffle console
命令以后,可以用JS于刚才部署的合约进行互动
truffle console
> let contract // 声明变量,用于保存合约。相当于实例化了一个实例化对象
> HelloWorld.deployed().then(instance=>contract=instance)
> contract.sayHello.call() // 调用执行sayHello方法
call()
方法的使用,用了call()方法,相当于只是读取合约,不需要花费以太币。如果不使用call方法的话,如果涉及到写入的话,是需要支付一定的以太币的
遇到的错误问题
- 部署过程中遇到了一下错误
Error: No network specified. Cannot determine current network
解决方案; Error: No network specified. Cannot determine current network异常
导致上面异常的原因为是因为truffle.js里面未配置链接合约发布的环境地址,找到对应的truffle.js文件,修改代码为类似如下配置即可解决问题:
module.exports = {
networks: {
development: {
host: "localhost",
port: 8545,
network_id: "*" // 匹配任何network id
}
}
};
网友评论