以太坊部署智能合约简单示例
继上次学习了一些基本的IPFS操作命令之后,在IPFS网络创建应用已经变得可行。
本文主要学习通过truffle来创建一个测试网络上的智能合约。
truffle
Dapp框架,可以让你快速进入写代码-编译-部署-测试-打包Dapp这个流程。而无须处理大量无光紧要的事情。
实践
主要分5个步骤:
a.安装truffle
b.初始化truffle工程
c.创建智能合约
d.部署智能合约
e.将智能合约部署到测试网络
a.安装truffle
安装truffle:npm install -g truffle
b. 创建项目框架:
- 输入truffle list来验证安装是否成功:truffle list
- 切换到你想要创建的目录,创建一个项目目录:truffle init
- 初始化npm:npm init.
- 导入zeppelin开发库: npm install zeppelin-solidity
c. 创建合约:
- 在contracts目录下创建合约:contractName.sol
pragma solidity ^0.4.16;
import "zeppelin-solidity/contracts/token/ERC20/StandardToken.sol";
contract contractName is StandardToken {
address public owner; // 所有人
string public name = "ContractName"; // 代币名称
string public symbol = "CNT"; // 代币符号
uint8 public decimals = 18; // 代币精度
uint256 public INITIAL_SUPPLY = 1000000000000000000000000000; // 总量10亿
constructor() public {
totalSupply_ = INITIAL_SUPPLY;
balances[msg.sender] = INITIAL_SUPPLY;
owner = msg.sender;
}
}
- 在migrations目录下添加migration文件:deploy_migration.js
var ContractName = artifacts.require("./contractName.sol");
module.exports = function (deployer) {
deployer.deploy(ContractName);
};
d.部署智能合约
-
调试部署:truffle develop/compile/migrate
develop.png
compile.png
- 验证合约是否已经部署:ERC20_A.deployed().then(instance => contract = instance)
- 部署成功,即可在之前的10个账户之间互相打币,也可以看到每个账户的余额。也就是可以开干了。而且还可以在develop模式下,调试所有的web3.js命令
e.将智能合约部署到测试网络
-
接下来将合约部署到ropsten测试网络当中:
-
注册infura账号,通过infura来部署,创建项目,获取infura的API KEY;
-
下载metamask钱包插件,安装进chrome浏览器,注册账号,去水龙头网站获取ETH,在setting中获取助记词,链接到测试网络
WX20180818-145540@2x.png -
安装truffle-hdwallet-provider模块:npm install truffle-hdwallet-provider --save
-
修改ruffle.js文件,将代码写入文件
var HDWalletProvider = require("truffle-hdwallet-provider");
var infura_apikey = "api_key";
var mnemonic = "metaMask助记词";
module.exports = {
networks: {
development: {
host: "127.0.0.1",
port: 8545,
network_id: "*", // Match any network id
gas: 1828127,
gasPrice: 10000000000,
},
opsten: {
provider:function() {
return new HDWalletProvider(mnemonic, "https://ropsten.infura.io/" + infura_apikey);
},
network_id: 3
}
}
};
-
truffle migrate --network ropsten,即可部署到ropsten测试网络,
ContractCreation.png
PS:
1.migrate 出现出现找不到地址错误,可以先migrate --reset ,再migrate;
2.truffle migrate --network ropsten时,出现 Error encountered, bailing. Network state unknown错误
此时需要查看truffle.js文件下的Gas是否设置在GasLimit下,
Gas for View:
https://user-images.githubusercontent.com/29991644/37694874-06c21628-2ca1-11e8-9c5f-1f43c60c0371.png