0x00 Ethereum简介
Ethereum(以太坊)是运行智能合约去中心化的开源平台。用于数字货币,商业合同,众筹项目等,主要解决双方信任问题。
0x01 环境构建
参考 https://github.com/ethereum/go-ethereum
go语言构建,简单运行只要geth即可。
0x02 私有链搭建
命令参数
--ipcdisable
--nodiscover不会主动广播
--networkid网络标识,处于同一个网络和协议版本的才能进行连接
# 生成第一个实例
# 初始化,genesis.json记录创世纪块
geth --datadir "/home/xxx/blockchain" init genesis.json
# genesis.json配置如下:config用于升级,alloc用于预置账户
{
"config": {
"chainId": 0,
"homesteadBlock": 0,
"eip155Block": 0,
"eip158Block": 0
},
"alloc" : {},
"coinbase" : "0x0000000000000000000000000000000000000000",
"difficulty" : "0x20000",
"extraData" : "",
"gasLimit" : "0x2fefd8",
"nonce" : "0x0000000000000042",
"mixhash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
"parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
"timestamp" : "0x00"
}
# 运行
geth --datadir /home/xxx/blockchain --networkid 36101 --ipcdisable --nodiscover console
# 启动后通过admin.nodeInfo, eth.accounts等js函数查看当前数据
# 建立关联的账户,挖矿后所得存入当前账户
personal.newAccount("password")
# 开始挖矿,参数1表明1个线程
# miner.start(1)
# 停止挖矿
# miner.stop()
# 生成第二个实例,并与第一个实例建立连接
# 初始化,genesis.json记录创世纪块,这里要注意使用于第一个相同的配置文件,这样拥有相同的创世纪块才能连接
geth --datadir "/home/xxx/blockchain" init genesis.json
# 运行
geth --datadir /home/xxx/blockchain --networkid 36101 --ipcdisable --nodiscover console
# 连接第一个实例,ecodeuri为第一个实例的节点,通过admin.nodeInfo取得的ecode值,并将[::]替换为实例一的ip
admin.addPeer("ecodeuri")
# 查看当前连接的节点
admin.peers
# 挖矿一段时间后账户会存入eth币,block增加
# 日志打印mined potential block,则增加block,增加eth币
# 当前账户币值
# wei
eth.getBalance(eth.accounts[0]).toNumber()
# ether=1后面18个0的wei
web3.fromWei(eth.getBalance(eth.accounts[0]), "ether")
# 转账交易,from转给to 1个ether,from和to填写eth.accounts[0]对应值
eth.sendTransaction({from:'0xce417f51ebbc59e5cff597acecf10cedbf6075d3', to:'0x1b23bba8d4106cdfe8bb1d951c6b605db1ee750e',value:web3.toWei(1,"ether")})
# 转账时要求输入密码解锁账户
personal.unlockAccount('0xce417f51ebbc59e5cff597acecf10cedbf6075d3')
# 转账会等待矿工记录完成才算交易结束
# 查看未记账的交易
eth.getBlock("pending", true).transactions