Documentation ¶
Overview ¶
Package core @Description: 区块链类代码,主要作为单例使用 为了避免潜在的数据不一致的情况,任何情况下不要对一个 block 实例进行数据的修改 如果需要对区块进行校验或者哈希的修改,对数据进行深拷贝得到一份复制来进行处理
Package core @Description: v1.1.0 新增的数据处理功能,可以在 data 字段写入 set、append 类的指令来添加数据
Package core @Description: Merkle 树处理逻辑
Package core @Description: 交易池结构
Index ¶
- func BuildMerkleTree(txs []common.Transaction) []byte
- func LoadConfig(filepath string)
- type BlockBuffer
- type BlockChain
- func (bc *BlockChain) AppendBlockTask(block *common.Block)
- func (bc *BlockChain) BlockProcessRoutine()
- func (bc *BlockChain) BufferFull() bool
- func (bc *BlockChain) BufferedHeight() int64
- func (bc *BlockChain) GetBlockByHash(hash *common.Hash) (*common.Block, error)
- func (bc *BlockChain) GetBlockByHeight(height int64) (*common.Block, error)
- func (bc *BlockChain) GetLatestBlock() (*common.Block, error)
- func (bc *BlockChain) GetTransactionByHash(hash common.Hash) (*common.Transaction, error)
- func (bc *BlockChain) Height() int64
- func (bc *BlockChain) InsertBlock(block *common.Block)
- func (bc *BlockChain) NewGenesisBlock()
- func (bc *BlockChain) PackageNewBlock(txs []common.Transaction, timestamp int64, params *common.GeneralParams, ...) (*common.Block, error)
- func (bc *BlockChain) ReadAddressData(address, key string) ([]byte, error)
- type DataProcessor
- type DataTask
- type TxPool
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func BuildMerkleTree ¶
func BuildMerkleTree(txs []common.Transaction) []byte
BuildMerkleTree
@Description: Merkle 树构建程序 @param txs - 需要构建的交易列表 @return []byte - Merkle 树的根哈希值
Types ¶
type BlockBuffer ¶
type BlockBuffer struct {
// contains filtered or unexported fields
}
BlockBuffer 维护一个树形结构的缓冲区,保存当前视图下的区块信息
func NewBlockBuffer ¶
func (*BlockBuffer) AppendBlock ¶
func (b *BlockBuffer) AppendBlock(block *common.Block)
AppendBlock 添加区块到该缓冲区处理队列 传入一个区块,区块会被添加到 channel 中
func (*BlockBuffer) GetPriorityLeaf ¶
func (b *BlockBuffer) GetPriorityLeaf(nowHeight int64) *common.Block
GetPriorityLeaf 获取当前视图下的最优树叶
func (*BlockBuffer) PopSelectedBlock ¶
func (b *BlockBuffer) PopSelectedBlock() *common.Block
PopSelectedBlock 推出头部的最优区块什么时候触发? 应该来说是在 bufferedHeight - latestBlockHeight >= maxSize 的情况下触发? 以及,收到其他节点发来的已选取区块时触发该逻辑,但是需要确定一下高度和哈希值
func (*BlockBuffer) Process ¶
func (b *BlockBuffer) Process()
Process 是 BlockBuffer 的线程函数,它依次接收区块进行处理
type BlockChain ¶
type BlockChain struct {
// contains filtered or unexported fields
}
func NewBlockchain ¶
func NewBlockchain(db interfaces.DBInterface) *BlockChain
NewBlockchain
@Description: 创建一个 BlockChain ,需要传入一个 LevelDB 实例 db @param db - 已初始化的 levelDB 数据库实例 @return *BlockChain - 实例化的数据库处理对象,如果出错返回 nil
func (*BlockChain) AppendBlockTask ¶
func (bc *BlockChain) AppendBlockTask(block *common.Block)
AppendBlockTask
@Description: 向区块缓冲视图中添加区块处理任务 @receiver BlockChain 实例 @param block - 需要添加到任务队列的的区块
func (*BlockChain) BlockProcessRoutine ¶
func (bc *BlockChain) BlockProcessRoutine()
BlockProcessRoutine
@Description: 接收对应了缓冲区弹出的 channel中区块的协程,从 chan 中读取区块并且调用 insertBlock 进行处理 @receiver BlockChain 实例
func (*BlockChain) BufferFull ¶
func (bc *BlockChain) BufferFull() bool
BufferFull
@Description: 查询区块的缓冲区是否已满 @receiver BlockChain 实例 @return bool - 区块链缓冲区是否已满
func (*BlockChain) BufferedHeight ¶
func (bc *BlockChain) BufferedHeight() int64
BufferedHeight
@Description: 获取当前区块链缓冲区的最新高度 @receiver BlockChain 实例 @return int64 - 区块链缓冲区的最新高度
func (*BlockChain) GetBlockByHash ¶
GetBlockByHash
@Description: 通过哈希值获取区块,如果获取失败返回 nil @receiver BlockChain 实例 @param hash - 所需要获取区块的哈希值 @return *common.Block - 对应区块哈希值的区块, 如果不存在返回 nil 和对应的错误 @return error - 错误信息
func (*BlockChain) GetBlockByHeight ¶
func (bc *BlockChain) GetBlockByHeight(height int64) (*common.Block, error)
GetBlockByHeight
@Description: 根据高度拉取区块,需要考虑一下同步时是否换用其他的函数 @receiver BlockChain 实例 @param height - 需要获取的区块的高度 @return *common.Block - 对应高度的区块, 如果不存在返回 nil 和对应的错误 @return error - 错误信息
func (*BlockChain) GetLatestBlock ¶
func (bc *BlockChain) GetLatestBlock() (*common.Block, error)
GetLatestBlock
@Description: 获取当前的最新区块 @receiver BlockChain 对象 @return *common.Block - 当前区块链的最新区块 @return error - 错误信息
func (*BlockChain) GetTransactionByHash ¶
func (bc *BlockChain) GetTransactionByHash(hash common.Hash) (*common.Transaction, error)
GetTransactionByHash
@Description: 通过交易的哈希值来获取交易 @receiver BlockChain 实例 @param hash - 需要获取交易的哈希值 @return *common.Transaction - 对应哈希值的交易实例,如果不存在则返回 nil @return error - 错误信息
func (*BlockChain) Height ¶
func (bc *BlockChain) Height() int64
Height
@Description: 获取当前区块链的最新高度 @receiver BlockChain 实例 @return int64 - 区块链的最新高度
func (*BlockChain) InsertBlock ¶
func (bc *BlockChain) InsertBlock(block *common.Block)
InsertBlock
@Description: 向区块的缓冲区添加区块 @receiver BlockChain 实例 @param block - 需要添加到 BlochBuffer 进行处理的区块
func (*BlockChain) NewGenesisBlock ¶
func (bc *BlockChain) NewGenesisBlock()
NewGenesisBlock
@Description: 创建创世区块 @receiver BlockChain 实例
func (*BlockChain) PackageNewBlock ¶
func (bc *BlockChain) PackageNewBlock(txs []common.Transaction, timestamp int64, params *common.GeneralParams, packageInterval int64) (*common.Block, error)
PackageNewBlock
@Description: 打包新的区块,传入交易序列等信息 @receiver BlockChain 实例 @param txs - 选择好的交易数组 @param timestamp - 当前的逻辑时间戳 @param params - 当前的 VDF 计算信息 @param packageInterval - 打包的间隔 @return *common.Block - 完成打包的区块,如果出错返回为 nil @return error - 错误信息
func (*BlockChain) ReadAddressData ¶
func (bc *BlockChain) ReadAddressData(address, key string) ([]byte, error)
ReadAddressData
@Description: 读取某个地址下存放的数据,v1.1.0 新增的读写数据功能 @receiver BlockChain 实例 @param address - 数据存放地址 @param key - 数据的 key @return []byte - 对应地址、key下的数据 @return error - 错误信息
type DataProcessor ¶
type DataProcessor struct {
// contains filtered or unexported fields
}
func NewDataProcessor ¶
func NewDataProcessor() *DataProcessor
NewDataProcessor
@Description: 实例化数据处理器,接收 channel 传来的任务并进行处理 @return *DataProcessor - 数据处理器实例
func (*DataProcessor) Run ¶
func (dp *DataProcessor) Run()
Run
@Description: 数据处理器的运行函数 @receiver DataProcessor 实例
type TxPool ¶
type TxPool struct {
// contains filtered or unexported fields
}
func GetTxPoolInst ¶
func GetTxPoolInst() *TxPool
GetTxPoolInst
@Description: 获取交易池实例 @return *TxPool
func NewTxPool ¶
func NewTxPool(chain *BlockChain) *TxPool
NewTxPool
@Description: 获取一个交易池单例,如果有则直接返回 @param chain - 区块链实例 @return *TxPool - 交易池实例
func (*TxPool) Add ¶
func (pool *TxPool) Add(transaction *common.Transaction)
Add
@Description: 向交易池中添加交易 @receiver pool - 交易池实例 @param transaction - 一笔交易的实例
func (*TxPool) Contain ¶
Contain
@Description: 查询交易池中是否存在某个哈希值对应的交易 @receiver pool - 交易池实例 @param hash - 查询的交易哈希值 @return bool - 存在则返回 true
func (*TxPool) Get ¶
func (pool *TxPool) Get(hash string) *common.Transaction
Get
@Description: 获取交易池中的交易 @receiver pool - 交易池实例 @param hash - 所需要的交易的哈希值 @return *common.Transaction - 交易实例
func (*TxPool) Package ¶
func (pool *TxPool) Package() []common.Transaction
Package
@Description: 用于打包交易,这里返回的是 Transaction 的切片 @receiver pool - 交易池实例 @return []common.Transaction - 交易数组