相关阅读:
区块链项目——区块链网上安全商铺(合约代码、前端、后台)
<https://blog.csdn.net/Runner1st/article/details/88046851>



文章目录

* 1. 以太坊的安装、私有链创世区块搭建、私有链节点的加入
<https://blog.csdn.net/Runner1st/article/details/88046634#1__6>
* 1.1 以太坊的安装 <https://blog.csdn.net/Runner1st/article/details/88046634#11__7>
* 1.2 私有链创世区块搭建
<https://blog.csdn.net/Runner1st/article/details/88046634#12__11>
* 1.3 私有链节点的加入
<https://blog.csdn.net/Runner1st/article/details/88046634#13__34>
* 2. 对getBlock中所得区块的各个字段的解释
<https://blog.csdn.net/Runner1st/article/details/88046634#2_getBlock_52>
* 3. 对日志输出的解释 <https://blog.csdn.net/Runner1st/article/details/88046634#3__80>
* 4. 智能合约的部署 <https://blog.csdn.net/Runner1st/article/details/88046634#4__102>
* 5. 对交易的字段的解释
<https://blog.csdn.net/Runner1st/article/details/88046634#5__117>
* 6. 附:常用指令小记
<https://blog.csdn.net/Runner1st/article/details/88046634#6__133>


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

<>1.1 以太坊的安装

官方下载地址:https://geth.ethereum.org/downloads/
<https://geth.ethereum.org/downloads/>
下载相应系统版本的geth,安装成功后可以查看版本信息:


<>1.2 私有链创世区块搭建

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


*
使用geth --datadir “./chain” init ./genesis.json命令初始化创世区块
–datadir指定当前区块链网络数据存放的位置在chain目录中。


*
启用私有链

–nodiscover:私有链地址,不会被网上看到;
console:启动命令行模式,在Geth中执行命令;

在当前目录执行tail -f eth_output.log,可以看到输出日志:

(注:windows要执行tail命令首先先下载tail.exe,并把该文件加入到C:\Windows\System32下,下载地址:
http://files.cnblogs.com/hantianwei/tail.zip)
<http://files.cnblogs.com/hantianwei/tail.zip%EF%BC%89>

*
添加和查看账户


*
挖矿

这时eth_output.log可以看到挖矿的记录。
再次查询余额发现不再是0,这是挖矿所得。


<>1.3 私有链节点的加入

*
查看第一个节点的enode url信息


*
再打开另一个终端,以相同的方式初始化第二个节点:

启动第二个节点:

因为在同一台计算机上,所以要指定另一个端口。

*
把第一个节点作为peer添加进来


*
验证
在第二个节点中输入:

第一个节点输入:

peerCount为1,且该peer的node id与第二个节点相符,说明添加成功。

<>2. 对getBlock中所得区块的各个字段的解释



* difficulty:BigNumber,当前块的难度,会随着计算速度的变化而调整。
* extraData: 字符串,额外数据,可以包含个性信息,或者是附加说明。
* gasLimit:Number,设置对gas的消耗总量限制,用来限制区块能包含的交易信息总和。
* gasUsed:Number,当前区块累计使用的总的gas
* hash:字符串,区块的哈希值
* logsBloom:字符串,由日志信息组成的一个Bloom过滤器(数据结构)
* miner:字符串,20字节,挖出该区块(获得奖励)的矿工
* mixHash:一个Hash值,当与nonce组合时,证明此区块已经执行了足够的计算
* nonce:字符串,8字节,POW生成的哈希,当与mixHash组合时,证明此区块已经执行了足够的计算
* number:当前区块的计数(从创世区块0开始递增1)
* parentHash:字符串,32字节,父区块的Hash值
* receiptsRoot:此区块所有交易收据的树的根节点Hash值
* sha3Uncles:字符串,32字节,叔区块(父区块的兄弟区块)的哈希值
* size:Number,当前区块的字节大小
* stateRoot:字符串,32字节,此区块最终状态树根节点的Hash值
* timestamp:Number,此区块初始化时的unix的时间戳
* totalDifficulty:BigNumber,从区块链的第一个区块到此区块的难度的总和
* transactions:数组,交易对象,或32字节的交易哈希
* transactionsRoot:字符串,32字节,此区块的所有交易组成的树的根节点Hash值
* uncles:数组,叔哈希(父区块的兄弟区块)的数组
其他未在这里出现的值:

* ommerHash:当前区块ommers列表的Hash值
* beneficiary:接收挖此区块奖励的账户地址
<>3. 对日志输出的解释

*
启用时日志:
主要是一些配置、协议的初始化;
内存、缓存等的分配、生效和加载等。



*
挖矿日志:
Updated mining threads:每次开始挖矿时更新挖矿线程;
Transaction pool price threshold updated:每次开始挖矿时更新交易池的价格阈值;
Commit new mining work:提交新的挖矿工作;
Generating DAG in progress:挖矿一开始都要生成DAG(Directed Acyclic
Graph,有向无环图),从生成的DAG里面找随机数做hash,生成之后就正常挖矿了;
Successfully sealed new block:成功封装新区块;
block reached canonical chain:区块到达权威链,number是区块号;
mined potential block:挖矿,挖掘潜在区块。



*
其他
Seting new local account:设置新本地账户
Submitted transaction:提交交易


<>4. 智能合约的部署

* 编写简单智能合约

* 在Remix下编译合约

编译成功后,点击Details会弹出一个信息框,复制WEB3DEPLOY框中的代码:

* 部署合约
* 在geth启用私链,解锁账户地址:

* 开始挖矿产生新的区块,合约才能成功部署。开始挖矿后,把复制的代码粘贴进来,回车,过一会能看到Contract mined! 说明部署成功。

* 现在可以在geth中调用合约中的函数f:(3 * 8 = 24)

<>5. 对交易的字段的解释

解锁账户 --> 发送交易 --> 挖矿 --> 查询交易

blockHash:交易所在块的Hash;
blockNumber:交易所在块的块号;
from:交易发送者的地址;
gas:该交易允许消耗的最大gas数量;
gasPrice:交易发送者愿意支付给矿工的gas单价;
nonce:用来区别同一用户发出的不同交易的标记;
hash:该交易的哈希值,作为交易的ID;
input:存在的数据字段,如果存在,则表明该交易是一个创建或者调用智能合约交易;
to:交易接收者的地址;
r、s、v:交易签名的三个部分,由发送者的私钥对交易hash进行签名生成。
value:发送者要转移给接收者的以太币数量;

<>6. 附:常用指令小记

*
初始化一个创世区块,启用私链,显示输出日志
geth --datadir “./chain” init ./genesis.json
geth --datadir “./chain” --nodiscover console 2>>eth_output.log
tail -f eth_output.log

*
查看账户信息
(web3.)eth.accounts
(web3.)eth.accounts[0]
(web3.)eth.getBalance[eth.accounts[0]]
web3.fromWei(web3.eth.getBalance(acc0))
web3.toWei(3,“ether”)

*
创建与解锁账户
(web3.)personal.newAccount(“123456”)
acc0 = web3.eth.accounts[0]
(web3.)personal.unlockAccount(acc0,“123456”)

*
挖矿
miner.start(1)
miner.stop()

*
交易相关
eth.sendTransaction({from:acc0,to:acc1,value:web3.toWei(3,“ether”)})

eth.getTransaction(“0x78af0530e0e77c3b5b8a91a0720a11abe4436500a169953234ec987ebb3725c7”)

一个相对完整的区块链项目:
区块链项目——区块链网上安全商铺(合约代码、前端、后台)
<https://blog.csdn.net/Runner1st/article/details/88046851>

友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:ixiaoyang8@qq.com
QQ群:637538335
关注微信