2

搭建私有链及部署智能合约

一、搭建以太坊私有链

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 地址

本课程并不探讨关于智能合约开发的话题. 智能合约可以使用开源的,地址如下:

智能合约地址

需要整理一下, 导入到 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客户端进行交互. 并学习如何调用合约中的方法.


church
3.6k 声望67 粉丝