交易池

接口代码定义在这里
以下为核心功能的接口,开发者如有需求,可自行定制属于自己的交易池

func BaseCheck(*SignedTxn) error
func TripodsCheck(stxn *SignedTxn) error
func NecessaryCheck(stxn *SignedTxn) error

BaseCheck()插入交易数据到交易池的时候,会做一些基础检查,基础检查有: 交易数据是否过大,交易池容量是否已达上限,交易中的签名是否合法,是否有 交易重复。前三者如果检查不通过会返回错误, 交易重复的时候会忽略该条消息但是不会返回错误。
TripodsCheck() 基础检查完毕之后,会进行tripods检查,此为开发者自行定义的交易检查规则。
NecessaryCheck()表示必要性检查,只检查交易数据是否过大、签名是否合法以及 tripods检查。 在节点收到来自P2P网络的区块之后,同步 区块中的交易数据时做该检查,检查后直接存入yudb

func Insert(txn *SignedTxn) error

Insert()表示插入交易数据到交易池, 该功能内部带有 BaseCheckTripodsCheck两类检查, 只有通过检查才会被真正插入交易池,否则会返回错误。

func Pack(numLimit uint64) ([]*SignedTxn, error)
func PackFor(numLimit uint64, filter func(*SignedTxn) error) ([]*SignedTxn, error)

Pack(numLimit)表示从交易池最多打包numLimit个交易,被打包的交易会被标记, 但是不会立马从交易池中删除。
PackFor(numLimit, filter)Pack多一个过滤功能,所有被打包的交易必须通过filter的过滤,如果filter返回一个错误,则该交易不会被打包。

func GetTxn(hash Hash) (*SignedTxn, error)
func Reset(*CompactBlock) error

GetTxn(hash) 根据交易哈希值 获取交易数据。
Reset(*CompactBlock) 在交易池中清除给定区块中的交易,因为它们已经被打包。