从2017年11月启动至今,经过历时近一年的研究、开发与测试,初链主网Beta版于新加坡时间2018年09月28日08:00正式上线,在此之前,07:56分PBFT委员会第一次共识出块和TrueChain fPOW创世区块被挖出。
前言:本人从12年毕业一直做的是web后台开发,虽然一直关注区块链开发但一直少有真正了解其中开发细节的欲望。因为一方面炒币的新闻实在是层出不穷,个人内心往往会把所有宣称区块链开发的公司都当作在炒作,出于对炒作的鄙视所以不愿意与之有什么瓜葛。另一方面我对devops的工作思路和微服务的概念很喜欢所以就放在对docker和k8s之类的技术上,并不想再多开一个技能分支免得啥都学不会。一年下来,终于看到炒币者出现了相当规模的失利退场,而我对整个devops的思路也理清觉得差不多可以把区块链开发的技能树点亮了,所以进行了一些线下meetup了解一下现在区块链发展的状态。机缘巧合之下了解了“初链”这个目前基于以太坊虚拟机的区块链方案。而“初链”社区对开发者是很友好的了,刚进群就给了40RMB的红包激励开发者对“初链”进行技术解析。由于本人对区块链开发也是相当基础对一些区块链的概念仅仅是了解机制的程度,所以解析难免有失误,献丑的地方希望大家不吝赐教。
本着只讲自己看懂了的部分进行讲解的原则,下面我就把我对“初链”beta版本的上线中对“初链”初始化的部分进行讲解,而其中水果链的快链和慢链之间的问题不是我现在能够理解的,且待后期学会之后慢慢道来。(说个题外话,“初链”这个名字真是绝了,中文真是博大精深^_^,听起来就像初恋,初又有初始的意思,可能是希望区块链开发都从初链开始吧,而且英文的truechain也是谐音又有“真实,认真”的意思,反正咋解释都很不错!)
讲一下查看代码的思路:根据log了解初链初始化到运行时所标记的内容->根据标记内容到源码中对应找到方法->把所有方法倒推到最起始的位置->理解代码的运行机制梳理出运行逻辑
感谢程序员写代码时提示的不同log内容,希望log能更加友好一点。
我们先看系统log提示了什么内容
Sanitizing cache to Go's GC limits
Maximum peer count
Committee Node info:
Starting peer-to-peer node
Allocated cache and file handles
Initialised chain configuration
Initialised chain configuration
Initialising Truechain protocol
Loaded most recent local header
Loaded most recent local full block
Loaded most recent local fast block
Loaded most recent local Fastheader
Loaded most recent local full Fastblock
Loaded most recent local fast Fastblock
Loaded local transaction journal
Regenerated local transaction journal
InitNodeInfo
init mineFruit
Starting P2P networking
get committee ..
IPC endpoint opened
Transaction pool price threshold updated
start miner --miner start function
Starting mining operation
RLPx listener up
singleloop start.
Committee Info
Committee member:
start to mine
FetchFastBlock
FetchFastBlock
FetchFastBlock
FetchFastBlock
FetchFastBlock
FetchFastBlock
如log所示,最后已经开始挖矿了。
运行之前还要执行一个命令$ getrue init path/to/genesis.json
{
"config": {
"chainId": 10,
"homesteadBlock": 0,
"eip155Block": 0,
"eip158Block": 0
},
"alloc":{
"0xbd54a6c8298a70e9636d0555a77ffa412abdd71a" : { "balance" : 90000000000000000000000},
"0x3c2e0a65a023465090aaedaa6ed2975aec9ef7f9" : { "balance" : 10000000000000000000000}
},
"committee":[
{
"address": "0x76ea2f3a002431fede1141b660dbb75c26ba6d97",
"publickey": "0x04044308742b61976de7344edb8662d6d10be1c477dd46e8e4c433c1288442a79183480894107299ff7b0706490f1fb9c9b7c9e62ae62d57bd84a1e469460d8ac1"