以太坊geth结构解析和源码分析

如遇如初
如遇如初 2018-05-14 10:39
1 32432
作者:不折腾就闹心
<p>
来源:csdn
<p>
<p>原文链接:https://blog.csdn.net/ddffr/article/details/74389051
<p>
<p>著权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
第一部分 看看geth客户端的整体结构 创建私链的时候已经指定所有的信息都放在private-geth目录下,现在是已经有过挖矿的目录。
当时我们把创世文件genesis.json放在该目录下了、
进入真正的存放数据的目录private-geth/data/00 geth中保存的是区块链的相关数据 keystore中保存的是该链条中的用户信息
之前我们这个节点已经创建了两个账户,现在我们可以看到keystore里面有两个账户信息的文件
每个账户都由一对钥匙定义,一个私钥和一个公钥。 账户以地址为索引,地址由公钥衍生而来,取公钥的最后 20个字节。每对私钥 /地址都编码在一个钥匙文件里。钥匙文件是JSON文本文件,可以用任何文本编辑器打开和浏览。钥匙文件的关键部分,账户私钥,通常用你创建帐户时设置的密码进行加密。钥匙文件的文件名格式为UTC。账号列出时是按字母顺序排列,但是由于时间戳格式,实际上它是按创建顺序排列。如果把秘钥丢了钥匙文件可以在以太坊节点数据目录的keystore子目录下找到,接下来我们进入一个keystore目录文件看看他的信息:
警告:记住密码并”备份钥匙文件”。为了从账号发送交易,包括发送以太币,你必须同时有钥匙文件和密码。确保钥匙文件有个备份并牢记密码,尽可能安全地存储它们。这里没有逃亡路径,如果钥匙文件丢失或忘记密码,就会丢失所有的以太币。没有密码不可能进入账号,也没有忘记密码选项。所以一定不要忘记密码。
接下来进入geth可以看到chaindata,lightchaindata,nodes目录
进入nodes(我们这条私链有三个节点,所以这里有三个ldb文件)
进入chaindata,区块链最后的本地存储都是以ldb文件的形势(但这里是不是应该每个区块一个ldb文件呢?)
进入Lightchaindata
第二部分 看看源码的结构
1 Core/types/block.go 首先看到的是一个区块的结构
<p>
2 这是一个交易的结构体 Core/types/transaction.go
3 Receiptroot我们刚刚在区块头有看到,那他具体包含的是什么呢?它是一个交易的结果,主要包括了poststate,交易所花费的gas,bloom和logs
4 一个个交易被打包到区块上面,那区块又是怎么变成去快链的呢? Core/blockchain.go
注意:1. BlockChain无结构化查询需求,仅Hash查询, Key/Value数据库最方便; 2. 低层用LevelDB存储,性能好
5 stateDB用来存储世界状态 Core/state/statedb.go
文章发布只为分享区块链技术内容,版权归原作者所有,观点仅代表作者本人,绝不代表区块链兄弟赞同其观点或证实其描述。
1条回应 最新 最早
心有阳光
沙发# 心有阳光 2018-05-14 11:36
区块链技术在全球迅速兴起,以其“开放共识、去中心化、交易透明、不可篡改可追溯”的特征,成为众多行业人士眼中第四次工业革命的重要引擎。
游客
登录后才可以回帖,登录 或者 注册