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

这篇具有很好参考价值的文章主要介绍了以太坊私链搭建(二)——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文件解析。文章来源地址https://www.toymoban.com/news/detail-446008.html

到了这里,关于以太坊私链搭建(二)——genesis.json字段解读的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 在本地以太坊私链上,使用go调用智能合约,获取事件日志

    完整go项目文件目录      

    2024年02月11日
    浏览(44)
  • PoA以太私链搭建

    学习记录 根据需要下载相应版本的geth。 这里我用的是64位Windows版本,也就是图片上第三个。下载完成后,点开,在电脑上完成安装,并根据需要进行环境变量的配置。 (1)验证geth是否安装完成 win+R打开cmd窗口,输入 如果安装成功,就会出现如下显示 (2)创建账户 由于我

    2024年02月01日
    浏览(74)
  • 以太坊私钥介绍及生成与验证

    1)私钥格式 Bitcoin私钥(或其他加密货币私钥)有32 bytes,(或256个bit),或者其他形式表示,Base64 string、a WIF key、助记词 2)为什么是32bytes 3)生成方法 3.1)原生方法 该方法不适合用于加密货币,因为该方法不安全;该方法基于随机数种子生成,如果知道生成时的时间,容

    2024年02月15日
    浏览(36)
  • 【以太坊】私链搭上后无法MetaMask无法访问localhost8545的问题

    私链搭好在Linux中,配置好ChianID和networkid等参数之后,使用MetaMask连接localhost8545仍然无法访问: 这个问题找了很久的资料,最后发现学习的资料是一年前的,文档更新的速度赶不上以太坊更新的速度,原因是跑私链的命令行中缺失浏览器限制访问项,之前的命令: 改之后的

    2024年02月11日
    浏览(28)
  • Geth搭建私链(最新)

    puppeth 是 Geth 中一个非常有用的命令,它允许您使用一个交互式的命令行界面来创建、配置和管理您的私有链。但是在最新版本的Geth中已经删除了用于以动开发的库和puppeth工具,这也就给我们搭建私链增加了负担。 1、Geth正确安装,并且配置了环境变量等 2、Go安装正确,并

    2024年02月04日
    浏览(33)
  • 利用geth搭建私链

    OS:ubuntu 18.04 需要有go环境!! JSON-rpc

    2024年02月11日
    浏览(42)
  • 以太坊中nonce深入解读

    目录 前言 用户事务nonce 从一个集群的AB节点试验说起。 总结 区块nonce 参考 以太坊中的主要有2类nonce,一类是和矿工比较密切的区块nonce,即挖矿时使用;另一类和普通使用提交提交的关系比较密切的用户事务nonce。 为了防⽌交易重播,ETH节点要求每笔交易必须有⼀个nonce数

    2024年02月10日
    浏览(32)
  • 填充字段(以太网帧和IP数据报)

    要求是确保数据字段的长度在46到1500字节之间 。 以太网帧是网络通信中的基本单位,它的结构包括前导码、定界符、目的地址(DA)、源地址(SA)、类型/长度字段、数据、帧校验序列(FCS)等部分。其中,数据字段是用于承载上层数据的部分,而填充字段则是为了确保数据

    2024年02月21日
    浏览(31)
  • HIVE获取json字段特定值(单个json或者json数组)

    1.获取单个json字符串里的某一特定值 函数:get_json_object(单个json,‘$.要获取的字段’) 示例: 代码:SELECT get_json_object(‘{“NAME”:“张三”,“ID”:“1”}’,‘$.NAME’) as name; SELECT get_json_object(‘{“NAME”:“张三”,“ID”:“1”}’,‘$.NAME’); 2. json_tuple 语法:json_tuple(json_string,

    2024年02月08日
    浏览(29)
  • package.json字段说明

    main :包的主要入口文件。当其他项目使用您的包时,它们将引入您指定的 main 文件。通常,这是一个 JavaScript 文件,用于导出包的功能、类或模块。 publishConfig :用于配置发布到npm相关的配置。 main :commonjs模块文件入口, 当包被发布后,会用该字段替换掉上一级的 main 字

    2024年02月06日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包