以太坊私链搭建(二)——genesis.json字段解读

genesis.json文件用于配置生成以太坊私链网络的创世区块,当我们需要去创建一个创世区块时,我们可以通过修改genesis.json文件内的初始参数将这些数据写入创世区块。下面是以太坊官方文档给出的一个例子:

{
  "config": {
    "chainId": 15,
    "homesteadBlock": 0,
    "eip150Block": 0,
    "eip155Block": 0,
    "eip158Block": 0,
    "byzantiumBlock": 0,
    "constantinopleBlock": 0,
    "petersburgBlock": 0,
    "ethash": {}
  },
  "difficulty": "1",
  "gasLimit": "8000000",
  "alloc": {
    "7df9a875a174b3bc565e6424a0050ebc1b2d1d82": { "balance": "300000" },
    "f41c74c9ae680c1aa78f42e5647a62f353b7bdde": { "balance": "400000" }
  }
}

字段解读

config

config是决定私链设置的核心配置。

chainId:链ID,用于标识当前这条链,主要用于重放保护。

homesteadBlock:以太坊“家园”版本启用的区块高度,homesteadBlock被设置为0则意味着我们将直接使用以太坊的“家园”版本,在以太坊主网中此设置为0.

eip150Block:第150号以太坊改进提案(EIP150)启用的区块高度,该提案主要用于解决因denial-of-service问题导致gas价格提高的问题主网中其启用高度为2463000。

eip155Block:EIP155提案启用的区块高度,该提案主要是为了预防重放攻击。

eip158Block:EIP158提案启用的区块高度,该提案的提出主要是为了改变以太坊客户端处理空账户的方式。在EIP158提案中以太坊客户端会将空账户视为不存在的对象,这能有效节省区块链上的存储空间。

byzantiumBlock:拜占庭硬分叉启用的区块高度,最大的改动是将出块奖励从5ETH减少到了3ETH,主网中该分叉的启用区块高度为4370000。

constantinopleBlock:君士坦丁堡硬分叉启用的区块高度,该分叉的目的是提高以太坊的运行效率,并移除/推迟难度炸弹,同时将出块奖励从拜占庭硬分叉后的3ETH减少为2ETH。主网中君士坦丁堡硬分叉的启用区块高度为7280000。

petersburgBlock:圣彼得堡硬分叉启用的区块高度,该硬分叉是为解决君士坦丁堡硬分叉中的安全漏洞问题,将EIP1283提案移除。主网中圣彼得堡和君士坦丁堡分叉同时激活,区块高度为7280000。

ethash:标识当前私链使用的共识算法为ethash。

mixhash

一个256为的哈希散列,结合nonce一同证明已在此区块上执行了足够量的计算(POW)。nonce和mixhash的组合必须满足黄皮书4.3.4中描述的数学条件,即区块头有效性(44)。它允许验证该区块是否被加密挖掘。

 nonce

一个用于标记发送方发送的交易数量的值,是一个64位哈希值,与mixhash值一起证明已在区块上进行了足够量的计算。

difficulty

出块难度,对应发现该区块的nonce期间所应用的难度级别,难度越高,矿工发现有效区块所需的计算就越多。该值主要用于控制出块时间,使得出块效率保持在目标范围之内。

alloc

预定义的钱包列表,可以通过该字段预先在指定钱包地址内预存一定数量得原生代币。这是以太坊预售期间所执行得特定功能。

coinbase

一个160位地址,用于标识出块奖励的收益地址。

timestamp

时间戳,相当于Unix中的time()函数的输出。引入时间戳的机制能够在时间方面实现出块的稳态,时间戳还允许验证出块顺序。(黄皮书,4.3.4.(43))。

parentHash

整个父块头的Keccak256位哈希(包括父块头的nonce和mixhash),若区块是创世区块,则该值为0。

extraData

一个可以自由设置的选项,最大32个byte。该字段用于将数据保存在区块链上

gasLimit

每个区块的gas消耗限制。每个区块所消耗的gas不能超过这个值。

参考资料

https://github.com/ethereum/go-ethereum/tree/feeccdf4ec1084b38dac112ff4f86809efd7c0e5/params

Ethereum private network configuration guide. · GitHub

第一个为以太坊相关源码,第二个为genesis.json文件解析。

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
搭建本地以太坊私链并连接钱包实现转账,你需要按照以下步骤进行操作: 1. 安装以太坊客户端软件,比如 Geth、Parity、Quorum 等。 2. 创建私有网络,可以使用以下命令: ``` geth --datadir=./chaindata init ./genesis.json ``` 其中,`./chaindata` 是指定数据目录,`./genesis.json` 是指定创世区块文件。 3. 启动私有网络,可以使用以下命令: ``` geth --datadir=./chaindata --networkid=8888 --rpc --rpcaddr "0.0.0.0" --rpcport 8545 --rpcapi="eth,net,web3,personal" console ``` 其中,`--networkid` 是指定网络 ID,`--rpc` 是启用 JSON-RPC 接口,`--rpcaddr` 是指定 JSON-RPC 接口的 IP,`--rpcport` 是指定 JSON-RPC 接口的端口号,`--rpcapi` 是启用 JSON-RPC 接口的 API 列表。 4. 创建钱包地址,可以使用以下命令: ``` personal.newAccount("password") ``` 其中,`password` 是指定钱包密码。 5. 解锁钱包,可以使用以下命令: ``` personal.unlockAccount("address", "password", 0) ``` 其中,`address` 是指定钱包地址,`password` 是钱包密码,`0` 是指定解锁时间。 6. 发送转账交易,可以使用以下命令: ``` eth.sendTransaction({from:"from_address", to:"to_address", value: web3.toWei(1, "ether")}) ``` 其中,`from_address` 是发送方钱包地址,`to_address` 是接收方钱包地址,`1` 是转账金额,`ether` 是转账单位。 7. 确认交易状态,可以使用以下命令: ``` eth.getTransactionReceipt("transaction_hash") ``` 其中,`transaction_hash` 是指定交易哈希值。 以上是搭建本地以太坊私链并连接钱包实现转账的大致步骤,具体操作还需要根据实际情况进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

llsForest

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值