以太坊源码研读0x02geth基本功能

要想研读以太坊源码,首先必须了解这些代码实现了哪些功能。这一篇我们通过联盟链的方式以两条链的交互来了解下以太坊核心的功能。

准备工作

创世区块配置文件

在之前的文章我们了解过创世区块的源码,知道其结构,也知道创世区块的产生需要一个叫做genesis.json的配置文件。该配置文件内容对应创世区块数据结构,如下:

{ 
    "config": {
          "chainId": 15,
          "homesteadBlock": 0,
          "eip155Block": 0,
          "eip158Block": 0
      },
      "coinbase" : "0x0000000000000000000000000000000000000000",
      "difficulty" : "0x40000",
      "extraData" : "",
      "gasLimit" : "0xffffffff",
      "nonce" : "0x0000000000000042",
      "mixhash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
      "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
      "timestamp" : "0x00",
      "alloc": {}
} 

联盟链环境构造

在自己的目录下新建两个目录aChain,bChain分别作为两条链的目录。并在各自的目录创建一个如上的genesis.json的配置文件。

接下来,我们需要利用以太坊的geth工具来初始化区块链。geth工具在之前搭建以太坊本地环境的文章中已经搭建好。

打开终端进入a链对应的目录,执行初始化命令:

// 根据配置文件初始化区块链
geth --datadir ./data-init1/ init genesis.json
genesis初始化

执行成功后,我们发现在a链目录下多了一个存储节点数据的目录data-init1,进入查看。

初始化目录

同理,同样的方法初始化bChain。

联盟链构造

启动控制台

初始化操作执行成功后需要启动geth控制台,使用下列命令:

// networkid 指定网络id,1-4为系统内置,不建议使用
// nodiscover 表示不去主动发现peers节点
geth --datadir ./data-init1/ --networkid 88 --nodiscover console

终端出现下列界面,表示启动成功:

启动geth成功

接着继续在bChain中启动geth,这时我们发现使用上面的命令会启动失败。这是为什么呢?

错误提示

根据错误提示我们知道,端口30303已经被绑定。因此,我们推测可能是aChain的geth占用了30303端口,其实从上一个图的椭圆标注中即可就看出geth端口号,但是我们在执行命令时并没有指定端口,所以得知不指定时默认端口30303.

这时,我们就需要手动指定端口号来启动bChain的geth控制台。

// port 指定geth端口号,默认30303
geth --datadir ./data-init2/ --port 30304 --networkid 88 --nodiscover console

这时发现,端口为30304的geth控制台启动成功。

启动成功

Coinbase账户

启动成功后,我们就可以给区块链添加一个账户。添加账户的命令在之前搭建以太坊环境时已经介绍过,这里回忆一下:

// 添加账户,密码为“chaors”
personal.newAccount("chaors")

// 列出当前所有账户
personal.listAccounts

// coinbase账户
eth.coinbase

// 钱包信息
personal.listWallets

为aChain创建一个密码为“chaors”的账户。

创建账户

这时,我们发现原来初始化生成的秘钥目录下多了两个文件,因为我们创造了两个用户。

秘钥文件

联盟链互通

现在已经存在两个相互独立的链,我们要做的就是将两个链互通。用到的命令有:

// 查看节点peers
admin.peers

// 查看节点信息
admin.nodeInfo.enode

// 添加节点参数为admin.nodeInfo.enode查询到信息内容
admin.addPeer("enode://e4b51e8bf54c82660e3123ff1d996cb4d9234bc1e8312b5144cc6e2d3538b33e8f8f438dad2f08cd968a408e31f5781535eaf1f1e5944e9af7c962ddd05a9594@[::]:30306?d
  iscport=0")

具体步骤如下:

联盟链互通

添加成功后,再次利用admin.peers查看来验证是否成功。

查看peers

挖矿

已经有了链和账户的概念了,接下来就可以在账户上搞事情了。查询账户余额发现为零,这个时候我们就需要通过挖矿来生成奖励,使得账户余额不为零。

用到的命令有:

// 查询余额 参数为账户地址,这里查询的是矿工地址
eth.getBalance(eth.coinbase)

// 挖矿开始
miner.start()

// 挖矿结束
miner.stop()

在aChain执行挖矿,当aChain挖到区块时,我们发现bChain控制台在不断地打印信息。

挖矿

由此可见,aChain在挖矿的同时,bChain在同步数据。

接下来,停止挖矿。分别在两个控制台查看矿工账户余额发现一致,说明挖矿的过程也同步成功。

查询余额

交易

转账

账户有了余额之后就可以搞大事情了,可以在两个账户之间进行转账。用到的命令有:

// 解锁账户
personal.unlockAccount(eth.accounts[0])

// 转账
eth.sendTransaction({from: eth.coinbase, to: '0x02b7344004c45465796f779b7b95d7912
  c2ef572', value: 100000000})

首先在aChain中解锁账户并给bChain账户发生转账,发现bChain账户余额仍然为零。这是为什么呢?

发起转账

因为,我们虽然发生了交易,但是并没有进行挖矿打包。aChain挖矿后进行查询发现bChain账户到账。

打包交易

知其所以然?

现在基本了解了geth的功能,可以算是知其然了。下一步需要做的就是深入到源码去,在了解大概功能的基础上知其所以然。

更多以太坊源码解析请移驾全球最大同性交友网,觉得有用记得给个小star哦😯😯😯

.
.
.
.

互联网颠覆世界,区块链颠覆互联网!

--------------------------------------------------20180905 23:28
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,284评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,115评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,614评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,671评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,699评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,562评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,309评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,223评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,668评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,859评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,981评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,705评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,310评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,904评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,023评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,146评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,933评论 2 355