1.以太坊的安装、私有链创世区块搭建、私有链节点的加入
安装以太坊:
$ apt-get install software-properties-common
$ add-apt-repository -y ppa:ethereum/ethereum
$ apt-get update
$ apt-get install ethereum
若无法安装,一般是网络问题,本文的解决方案是使用VPN:Baccloud
私有链创世区块的搭建:
初始化创世区块:
进入私有链的console,使用端口“30300”:
私有链节点的加入:
新建节点 node2,使用默认端口 “30303”
进入node2 的console:
查看node2的enode
在私有链的控制台添加node2
查看节点列表,从中可以看到私有链中增加了另一个节点的Address
2.对getBlock中所得区块的各个字段进行解释
获取Block 4的信息:
difficulty:挖到该区块的难度系数
extraData:当前区块的extra data
gasLimit: gas使用量上限
gasUsed: gas的实际使用量
hash: 区块的哈希值
logsBloom:布隆过滤器的日志,ps布隆过滤器是一种基于Hash的高效查找结构,能快速回答“某个元素是否在一个集合内”的问题
miner: 获得该区块奖励的矿工
mixHash:一个Hash值,当与nonce组合时,证明此区块已经执行了足够的计算
nonce: 随机数,用于挖矿
number:区块号
parentHash: 父区块的哈希值
receiptsRoot: 包含此区块所有交易的merkle树的根节点Hash值
sha3Uncles: 叔区块的哈希值
size: 区块的大小
stateRoot: 方便节点间状态的互相验证,保证在交易的每个区块中所有节点的状态是一致的
timestamp: 区块打包时的时间戳
totalDifficulty:创世区块到当前区块的所有区块难度总和
transactions: 交易信息
transactionsRoot: 区块交易前缀树的根
uncles:数组,叔块的哈希值数组
3.对日志输出进行解释
将控制台信息写入output.log中
使用 tail -f output.log
实时查看日志信息
数据分析:
挖矿:
- 找到重要的链,末尾区块号为58
- 进行挖矿,当前区块号为65
- 成功挖到66号区块,进行广播
- 66号区块打包成功
exit 步骤:
- 关闭 网络通信
- 将cache状态写入磁盘
- 停止区块链管理
- 停止以太坊协议
- 交易池停止接收交易请求
- 关闭数据库
4.编写简单的智能合约,在remix下进行调试,并部署在链上进行调用
remix 安装:
搭建智能合约开发环境Remix IDE及使用
编写一个wallet 程序,可以通过该程序收入,花费和查看wallet里面的余额
无编译错误后进行部署:
使用Web3 provider 连接本地私有链
出现连接不成功的区块,解决方案是 在命令行添加 参数
--rpccorsdomain "*"
geth --datadir data/ --port "30300" --rpc --rpcport 8545 --rpccorsdomain "*" console
此处参考: Remix无法连接私有链问题解决方案
点击Deploy 键进行部署:
部署不成功,需要对账户解锁
解锁账户
部署交易并启动挖矿,使得交易被处理
若不进行挖矿,则会卡在creation of wallet pending 这个步骤
通过transaction hash 获得交易信息
调用智能合约:
在下图的红框中打开函数调用栏
调用income(10)
,收入10,调用 get()
, 显示如下:
调用spend(5)
,支出5,调用get()
,显示如下:
5.对交易字段进行解释
status: 当前交易的状态
transaction hash:交易哈希值,可通过getTransaction 获取交易信息
from :交易发起方地址
to:交易接收方地址,即接收服务费,转账等
gas:交易估计需要消耗的gas
transaction cost:交易实际消耗的gas
hash:交易哈希值
input:输入值的哈希
decoded input:输入值的哈希解码
decoded output:输出
logs:日志
values:转账金额