Documentation ¶
Overview ¶
包bmt提供了一个用于swarm块散列的二进制merkle树实现
包bmt是基于hashsize段的简单非当前引用实现 任意但固定的最大chunksize上的二进制merkle树哈希
此实现不利用任何并行列表和使用 内存远比需要的多,但很容易看出它是正确的。 它可以用于生成用于优化实现的测试用例。 在bmt_test.go中对引用散列器的正确性进行了额外的检查。 *TestFisher *测试bmthshercorrection函数
Index ¶
Constants ¶
const ( //池大小是散列程序使用的最大BMT树数,即, //由同一哈希程序执行的最大并发BMT哈希操作数 PoolSize = 8 )
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type AsyncHasher ¶
type AsyncHasher struct { *Hasher //扩展哈希 // contains filtered or unexported fields }
AsyncHasher使用异步段/节编写器接口扩展BMT哈希器 AsyncHasher不安全,不检查索引和节数据长度 它必须与正确的索引和长度以及正确的节数一起使用
如果 *非最终截面比secsize短或长 *如果最后一部分与长度不匹配 *编写索引大于长度/秒大小的节 *当length/secsize<maxsec时,在sum调用中设置长度
*如果未对完全写入的哈希表调用sum()。 一个进程将阻塞,可通过重置终止。 *如果不是所有部分都写了,但它会阻塞,则不会泄漏进程。 并保留可释放的资源,调用reset()。
func (*AsyncHasher) SectionSize ¶
func (sw *AsyncHasher) SectionSize() int
SECTIONSIZE返回要使用的异步节单元的大小
func (*AsyncHasher) Sum ¶
func (sw *AsyncHasher) Sum(b []byte, length int, meta []byte) (s []byte)
一旦长度和跨度已知,可以随时调用sum。 甚至在所有段都被写入之前 在这种情况下,SUM将阻塞,直到所有段都存在,并且 可以计算长度的哈希值。
B:摘要附加到B 长度:输入的已知长度(不安全;超出范围时未定义) meta:要与最终摘要的bmt根一起哈希的元数据 例如,防止存在伪造的跨度
func (*AsyncHasher) Write ¶
func (sw *AsyncHasher) Write(i int, section []byte)
写入BMT基的第i部分 此函数可以并打算同时调用 它安全地设置最大段
type BaseHasherFunc ¶
basehasherfunc是用于bmt的基哈希的hash.hash构造函数函数。 由keccak256 sha3.newlegacykeccak256实施
type Hasher ¶
type Hasher struct {
// contains filtered or unexported fields
}
hasher用于表示BMT的固定最大大小块的可重用hasher -实现hash.hash接口 -重新使用一个树池进行缓冲内存分配和资源控制 -支持顺序不可知的并发段写入和段(双段)写入 以及顺序读写 -不能对多个块同时调用同一哈希实例 -同一哈希实例可同步重用 -SUM将树还给游泳池并保证离开 树及其自身处于可重用的状态,用于散列新块 -生成和验证段包含证明(TODO:)
func (*Hasher) NewAsyncWriter ¶
func (h *Hasher) NewAsyncWriter(double bool) *AsyncHasher
NewAsyncWriter使用一个接口扩展哈希,用于并发段/节写入
func (*Hasher) ResetWithLength ¶
在写入哈希之前需要调用ResetWithLength 参数应该是的字节片二进制表示。 哈希下包含的数据长度,即跨度
type RefHasher ¶
type RefHasher struct {
// contains filtered or unexported fields
}
refhasher是BMT的非优化易读参考实现
func NewRefHasher ¶
func NewRefHasher(hasher BaseHasherFunc, count int) *RefHasher
NewRefHasher返回新的RefHasher
type SectionWriter ¶
type SectionWriter interface { Reset() //在重用前调用标准init Write(index int, data []byte) //写入索引部分 Sum(b []byte, length int, span []byte) []byte //返回缓冲区的哈希值 SectionSize() int //要使用的异步节单元的大小 }
节编写器是异步段/节编写器接口
type TreePool ¶
type TreePool struct { SegmentSize int //叶段的大小,规定为=哈希大小 SegmentCount int //BMT基准面上的段数 Capacity int //池容量,控制并发性 Depth int //bmt树的深度=int(log2(segmentcount))+1 Size int //数据的总长度(计数*大小) // contains filtered or unexported fields }
Treepool提供了BMT哈希程序用作资源的一个树池。 从池中弹出的一棵树保证处于干净状态。 用于散列新块。
func NewTreePool ¶
func NewTreePool(hasher BaseHasherFunc, segmentCount, capacity int) *TreePool
newtreepool创建一个树池,其中包含哈希、段大小、段计数和容量 在hasher.gettree上,它重用空闲的树,或者在未达到容量时创建一个新的树。