200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > java以太坊源码分析_以太坊区块链Java(EthereumJ)学习笔记:区块链结构-Go语言中文社区...

java以太坊源码分析_以太坊区块链Java(EthereumJ)学习笔记:区块链结构-Go语言中文社区...

时间:2024-03-16 02:18:48

相关推荐

java以太坊源码分析_以太坊区块链Java(EthereumJ)学习笔记:区块链结构-Go语言中文社区...

本文对EthereumJ的区块链相关的代码做一个简单的介绍。

以太坊区块链

以太坊区块链是在Bitcoin区块链的基础上发展起来的。区块链的数据结构既保留了Bitcoin区块链验证数据的真实性和完整性的功能。同时,以太坊在区块链里保存了Account的State,如nonce,balance等,可以实现更加先进的功能(详情可以参考://11/15/merkling-in-ethereum/)。

以太坊区块链采用了Merkle Patricia Tree的数据结构来保存数据(详情可以参考:/ethereum/wiki/wiki/Patricia-Tree),简称为Trie结构。以太坊区块链采用Trie结构保存三种数据:

l Account state。

l 每一个block里的Transaction list。

l 每一个block里的TransactionReceipt list。

其中Transaction list和TransactionReceiptlist的Trie结构只需要临时创建以校验每一个block的真实性。而Account state的Trie结构需要保存起来。

Accountstate的Trie结构可以参考下面的简单示例图。

以太坊的区块链的block的组织结构可以参考下面的简单的示例图。

Block里的Prev Hash与Bitcoin的功能相似,用来建立一个真实完整的区块链。 State Root用来reference到data storage里保存的account states。Transaction Root和Receipt Root分别是本block里的Transaction list和TransactionReceipt list的hash root。

EthereumJ区块链管理

本文介绍一下EthereumJ里管理以太坊区块链数据结构的主要涉及到的Java Classes / Interfaces。

l CommonConfig,主要定义了很多data sources的spring bean作为数据保存/访问的基础。

n keyValueDataSource

n blockchainDB

n blockchainSource

n stateSource,保存account state。

l DefaultConfig,通过使用CommonConfig里的data source定义了

n blockStore(),保留Block的信息。

n transactionStore(),保留Transaction的信息。

l WorldManager,EthereumJ的主要管理模块,它负责启动EthereumJ一些主要的模块。

n init(),负责启动SyncManager。

n loadBlockchain(),负责加载repository,blockStore和blockChain的数据。

l BlockChain/BlockChainImpl,BlockChain定义了访问以太坊区块链block的接口,BlockChainImpl实现了该接口。

n getXXX()用于得到各种block的信息。

n tryToConnect(Block),用于将新的block加到区块链上。

l Repository/RepositoryRoot(RepositoryImpl),Repostiry定义了访问以太坊区块链的AccoutState的接口,RepositoryRoot(RepositoryImpl)实现了该接口。

n getXXX()用于得到各种account state的信息。

n getRoot()得到block里需要的stateroot信息。

n syncToRoot(byte[]),用于跟新repository到新的state root。

n getSnapshotTo(byte[]),用于得到基于新的state root的respository。

l PendingState/PendingSateImpl,由于以太坊区块链采用的是分布式的共识机制确认新的blocks,因此新的blocks的确认需要一个等待窗口,在窗口时间内,可能会有多个blocks分支。PendingState定义了接口来处理这种场景,PendingSateImpl实现了该接口。

n addPendingTransaction(Transaction),加入新的Transaction。processBest(Block,List),处理新的block。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。