core

package
v1.1.1-0...-780f384 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 29, 2024 License: MIT Imports: 23 Imported by: 0

Documentation

Overview

Package core @Description: 区块链类代码,主要作为单例使用 为了避免潜在的数据不一致的情况,任何情况下不要对一个 block 实例进行数据的修改 如果需要对区块进行校验或者哈希的修改,对数据进行深拷贝得到一份复制来进行处理

Package core @Description: v1.1.0 新增的数据处理功能,可以在 data 字段写入 set、append 类的指令来添加数据

Package core @Description: Merkle 树处理逻辑

Package core @Description: 交易池结构

Index

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 树的根哈希值

func LoadConfig

func LoadConfig(filepath string)

LoadConfig 在启动时运行一次,加载配置文件

Types

type BlockBuffer

type BlockBuffer struct {
	// contains filtered or unexported fields
}

BlockBuffer 维护一个树形结构的缓冲区,保存当前视图下的区块信息

func NewBlockBuffer

func NewBlockBuffer(latest *common.Block, popChan chan *common.Block) (*BlockBuffer, error)

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

func (bc *BlockChain) GetBlockByHash(hash *common.Hash) (*common.Block, error)

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 DataTask

type DataTask struct {
	Type    string      // 命令类型,当前有 set、append
	Hash    common.Hash // 该指令对应交易的哈希值
	Height  int64       // 该指令处理的高度
	Address []byte      // 存放、添加数据的地址
	Key     []byte      // 数据的 key
	Value   []byte      // 数据的 value
}

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

func (pool *TxPool) Contain(hash string) bool

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 - 交易数组

func (*TxPool) RemoveTx

func (pool *TxPool) RemoveTx(hash common.Hash)

RemoveTx

@Description: 从交易池中移除一笔交易
@receiver pool - 交易池实例
@param hash - 需要移除的交易

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL