以太坊的安装、私有链创世区块搭建以及智能合约的部署

2022-06-23 13:21:00 浏览数 (1)

相关阅读:

区块链项目——区块链网上安全商铺(合约代码、前端、后台)

文章目录

代码语言: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启用私链,解锁账户地址:
代码语言:txt复制
- 开始挖矿产生新的区块,合约才能成功部署。开始挖矿后,把复制的代码粘贴进来,回车,过一会能看到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”)

一个相对完整的区块链项目:

区块链项目——区块链网上安全商铺(合约代码、前端、后台)

0 人点赞