私有链搭建,加入节点与remix下智能合约的部署

当时做这个作业时找了很多资料,写一下关于这个作业的过程吧。

 

内容:

以太坊的安装、私有链创世区块搭建、私有链节点的加入

对getBlock中所得区块的各个字段进行解释

对日志输出进行解释

编写简单的智能合约,在remix下进行调试,并部署在链上进行调用

对交易的字段进行解释

 

实现:

  • 以太坊的安装

私有链搭建,加入节点与remix下智能合约的部署

使用了geth作为以太坊客户端。

 

  • 私有链创世区块搭建

要先创建一个genesis.json文件,内容如下:

私有链搭建,加入节点与remix下智能合约的部署

其中参数解释如下:

私有链搭建,加入节点与remix下智能合约的部署

然后运行以下命令初始化:

私有链搭建,加入节点与remix下智能合约的部署

接着启动私有链,运行以下命令:geth --datadir data0 --networkid 1108 --nodiscover console 2>>geth.log

--datadir 代表文件夹地址,

--nodiscover 代表该链条不希望被其他节点发现,

--networkid 示这个私有链的网络id为1108,网络id在连接到其他节点的时候会用到

console >> geth.log 代表将控制台输出到文件geth.log中去

 

  • 私有链节点的加入

我们通过通过分享enode地址的方式来让两个节点建立链接。

私有链搭建,加入节点与remix下智能合约的部署

新建一个节点:

私有链搭建,加入节点与remix下智能合约的部署

使用不同的端口,记得要加—ipcdisable参数,否则会报错,因为同时打开两个geth进程:

两个不同结点命令

geth --datadir data0 --networkid 1108 --nodiscover --ipcdisable console 2>>geth.log

geth --datadir data1 --networkid 1108 --nodiscover --ipcdisable --port 30304 console 2>>other.log

 

私有链搭建,加入节点与remix下智能合约的部署

用addpeers加进来

私有链搭建,加入节点与remix下智能合约的部署

这样就连接上了

 

  • getBlock()所得区块的各个字段解释

私有链搭建,加入节点与remix下智能合约的部署

difficulty:大小4字节,存储格式为 难度系数的HASH值,该字段标记着当前区块被出来的难度(哈希碰撞出来的难度);

ExtraData:与此区块相关的附加数据

asLimit:当前区块允许使用的最大gas

gasUsed:当前区块累计使用的gas

Hash:区块的哈希值。如果区块没有被确认,这个字段会是null值。

LogsBloom:区块日志的布隆过滤器,区块没被确认是值为null

Miner:取得该区块记账权的矿工。

mixhash:与nonce配合用于挖矿,由上一个区块的一部分生成的hash

Nonce:大小4字节,当前区块工作量证明(Proof of Work)的参数(是以一坨0开头的数),存储格式为Hash值。hash计算的目标值,改值随机。当矿机节点经过Hash计算出的值为该随机数时,即为挖矿初步成果(经过后续六个区块的认证之后,才是真正的成果,终态)

Number:区块号

parentHash:前一个区块的哈希值

receiptsRoot:收据树的根哈希值

Sha3Uncles:数据块的哈希值

size: 区块大小

stateRoot:区块状态树的根哈希
Timestamps:大小4字节,核心字段,自1970-01-01T00:00 UTC之后开始的秒数;
totaldifficulty:截止到本块的链上总难度

transactions:交易对象数组

transactionsRoot:交易的区块数根哈希值

Uncles:叔哈希的数组

 

 

  • 对日志输出进行解释

 这个我乱写的,略

 

  • 编写简单的智能合约,在 remix 下进行调试

用remix编译一个简单的智能合约,如果找不到编译器,记得使用v*n,因为似乎有部分功能被墙了

私有链搭建,加入节点与remix下智能合约的部署

私有链搭建,加入节点与remix下智能合约的部署

Run:在run中点击deploy后就会显示可以调用的函数

私有链搭建,加入节点与remix下智能合约的部署

 

重新启动私有链,要在geth上加上rpc,将environment改成web3

geth --datadir data0 --networkid 1108 --rpc --rpcaddr 0.0.0.0 --rpcport 8545 --rpcapi "admin,debug,eth,miner,net,personal,shh,txpool,web3"  --rpccorsdomain "*" --nodiscover --ipcdisable console 2>>geth.log

私有链搭建,加入节点与remix下智能合约的部署

解锁账号,否则不能部署

personal.unlockAccount(eth.accounts[0],"密码",0)

私有链搭建,加入节点与remix下智能合约的部署

要先挖矿赚钱,否则没钱部署。。。

私有链搭建,加入节点与remix下智能合约的部署

然后点击deploy,需要注意的是remix似乎不支持带有library的合约。

私有链搭建,加入节点与remix下智能合约的部署

私有链搭建,加入节点与remix下智能合约的部署

 

在geth上调用合约

remix有一个复制abi的按钮(见下图),地址就在上图可以找到,abi要化为一行(百度查看在线json压缩)

私有链搭建,加入节点与remix下智能合约的部署

私有链搭建,加入节点与remix下智能合约的部署

私有链搭建,加入节点与remix下智能合约的部署

成功了!

 

  • 对交易的字段进行解释

在两个账号间发送一笔交易

私有链搭建,加入节点与remix下智能合约的部署

私有链搭建,加入节点与remix下智能合约的部署

私有链搭建,加入节点与remix下智能合约的部署

字段意思就不列了,接下来有时间的话可能会更新使用truffle.js部署一个带有library的智能合约。