搭建私有链及部署智能合约
一、搭建以太坊私有链
1.1 安装以太坊客户端
假设你使用的ubuntu, 那么用以下方式安装go ethereum:
sudo apt-get install software-properties-common
sudo add-apt-repository -y ppa:ethereum/ethereum
sudo apt-get update
sudo apt-get install ethereum
1.2 创建genesis.json
{
"config": {
"chainId": 33,
"homesteadBlock": 0,
"eip155Block": 0,
"eip158Block": 0
},
"nonce": "0x0000000000000033",
"timestamp": "0x0",
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"gasLimit": "0x8000000",
"difficulty": "0x100",
"mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"coinbase": "0x3333333333333333333333333333333333333333",
"alloc": {}
}
1.3 搭建私有链
创建创世区块
mkdir mycoin
geth --datadir mycoin init genesis.json
连接私有网
geth --datadir mycoin --networkid 20 --rpc --rpcaddr 0.0.0.0 --rpccorsdomain "*" --rpcapi db,net,web3,admin,debug,miner,eth,personal console
- --datadir 指定目录
- --networkid 指定网络ID
- --rpc 开启rpc
- --rpcaddr RPC监听地址
- --rpccorsdomain 允许跨域访问
- --rpcapi 开启的API列表
- console 开启控制台
1.4 创建一个用户并挖矿
进入到控制台之后, 创建一个新用户, 密码设置为"password"
personal.newAccount('password')
启动挖矿, 第一次挖矿准备时间比较长,时间长短取决于机器的性能
miner.start()
当你看到如下图信息时, 恭喜你,挖矿成功:
挖了一会,就可以使用以下命令停止了
miner.stop()
查看用户余额
eth.getBalance(eth.coinbase)
二、布署智能合约
2.1 使用remix ide编译智能合约
本课程并不探讨关于智能合约开发的话题. 智能合约可以使用开源的,地址如下:
需要整理一下, 导入到 remix ide
.
导入成功后,进行编译。如果有黄色背景的警告,可以忽略。如果有红色背景的错误,可以更改智能合约版本重新编译,步骤为: "Settings->Solidity version", 在下拉列表选择另一个版本,IDE就会自动重新编译。
编译成功后,根据以下图片所示步骤进行操作:
先选择"StandardToken"(这里是不是StandardToken取决于你的合约代码), 再点击Details. 复制WEB3DEPLOY
复制后,粘贴到文本编辑器,对一些变量进行赋值
var name = "China Test Coin"; /* 代币全称 */
var symbol = "CTC"; /* 代币简称 */
var decimals = 18; /* 默认精度 */
var totalSupply = 100000000; /* 发行代币总额 */
var _owner = "0x...."; /* 代币拥有者地址, 如果你使用上面开源的合约地址,没有此项请忽略 */
...
编辑完成后,保存代码。
2.2 发布智能合约
转到geth的控制台上,
解锁用户, 这一步是必须的
personal.unlockAccount(eth.coinbase)
布署合约
把上面保存的代码复制粘贴到控制台上,回车,如果成功则会显示合约地址, 这里的合约地址一定要保存起来, 后面会用到. 如果失败,一般调整gas大小,再发布就可以了.
合约布署后,交易还没有写到区块上,启动挖矿,创建区块
miner.start()
当你看到transaction=
之类的信息, 表示交易已经写到区块上.
至此,私有链的搭建和智能合约的布署就完成了. 下一步我们将使用php与ethereum客户端进行交互. 并学习如何调用合约中的方法.
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。