相关阅读:
区块链项目——区块链网上安全商铺(合约代码、前端、后台)
文章目录
代码语言:txt复制- [1. 以太坊的安装、私有链创世区块搭建、私有链节点的加入](https://cloud.tencent.com/developer)
- [1.1 以太坊的安装](https://cloud.tencent.com/developer)
- [1.2 私有链创世区块搭建](https://cloud.tencent.com/developer)
- [1.3 私有链节点的加入](https://cloud.tencent.com/developer)
- [2. 对getBlock中所得区块的各个字段的解释](https://cloud.tencent.com/developer)
- [3. 对日志输出的解释](https://cloud.tencent.com/developer)
- [4. 智能合约的部署](https://cloud.tencent.com/developer)
- [5. 对交易的字段的解释](https://cloud.tencent.com/developer)
- [6. 附:常用指令小记](https://cloud.tencent.com/developer)
1. 以太坊的安装、私有链创世区块搭建、私有链节点的加入
1.1 以太坊的安装
官方下载地址: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:WindowsSystem32下,下载地址:http://files.cnblogs.com/hantianwei/tail.zip)
- 添加和查看账户
- 挖矿
这时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! 说明部署成功。
代码语言:txt复制- 现在可以在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.accounts0eth.getBalance[eth.accounts0] web3.fromWei(web3.eth.getBalance(acc0)) web3.toWei(3,“ether”)
- 创建与解锁账户 (web3.)personal.newAccount(“123456”) acc0 = web3.eth.accounts0personal.unlockAccount(acc0,“123456”)
- 挖矿 miner.start(1) miner.stop()
- 交易相关 eth.sendTransaction({from:acc0,to:acc1,value:web3.toWei(3,“ether”)}) eth.getTransaction(“0x78af0530e0e77c3b5b8a91a0720a11abe4436500a169953234ec987ebb3725c7”)
一个相对完整的区块链项目:
区块链项目——区块链网上安全商铺(合约代码、前端、后台)