首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

创建创世块的代码解析

创建创世块的代码解析

在cmd的geth目录下的main.go中

init函数先于main函数执行,做命令的初始化,其中比较重要的有三个地方,app.Action=geth,app.Commands中consoleCommand,以及App.Before指向的匿名函数

main函数中的内容比较简单,这里不多做任何解释。

通过gopkg.in/urfave/cli.v1包中的代码来衔接到cmd/geth/chaincmd包中的代码,APP包中中HandleAction函数action的类型是「func(*Context) error」,此时将执行a(context)方法,那么此时调用那个Action呢,就是我们前面提到的App.init()初始化命令时的initCommand,接下来我们来看看cmd/geth/chaincmd中的initCommand:

指定数据的存储目录命令行参数 --datadir的代码

当用户没有指定存储目录,下面代码是数据存储默认存放指定的代码:

获取用户当前目录的地址

这允许使用现有的配置功能。当所有标志被迁移时,该功能可以被删除,并且必须改变现有的配置功能,即使用本地标志

根据给定的JSon格式文件初始化创世块

将初始创世块存储

涉及到的Core层次的代码

创世块的数据结构

检查创世块的相关处理逻辑,符合逻辑写创世块,或者反馈控制台相应的问题

ToBlock, 这个方法使用genesis的数据,使用基于内存的数据库,然后创建了一个block并返回。

Commit方法和MustCommit方法, Commit方法把给定的genesis的block和state写入数据库, 这个block被认为是规范的区块链头。

返回各种模式的默认Genesis

由于代码分析者水平有限,如果其中有问题,欢迎大家一起交流

GitHub地址:https://github.com/guoshijiang/go-ethereum-code-analysis

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180513G0GZ3300?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券