bmt

package
v0.0.0-...-f8b7a73 Latest Latest
Warning

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

Go to latest
Published: Mar 16, 2019 License: GPL-3.0 Imports: 5 Imported by: 0

Documentation

Overview

包bmt提供了一个用于swarm块散列的二进制merkle树实现

包bmt是基于hashsize段的简单非当前引用实现 任意但固定的最大chunksize上的二进制merkle树哈希

此实现不利用任何并行列表和使用 内存远比需要的多,但很容易看出它是正确的。 它可以用于生成用于优化实现的测试用例。 在bmt_test.go中对引用散列器的正确性进行了额外的检查。 *TestFisher *测试bmthshercorrection函数

Index

Constants

View Source
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

type BaseHasherFunc func() hash.Hash

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 New

func New(p *TreePool) *Hasher

new创建一个可重用的bmt散列器, 从资源池中提取新的树,以便对每个块进行哈希处理

func (*Hasher) BlockSize

func (h *Hasher) BlockSize() int

块大小返回块大小

func (*Hasher) NewAsyncWriter

func (h *Hasher) NewAsyncWriter(double bool) *AsyncHasher

NewAsyncWriter使用一个接口扩展哈希,用于并发段/节写入

func (*Hasher) Reset

func (h *Hasher) Reset()

在写入哈希之前需要调用Reset。

func (*Hasher) ResetWithLength

func (h *Hasher) ResetWithLength(span []byte)

在写入哈希之前需要调用ResetWithLength 参数应该是的字节片二进制表示。 哈希下包含的数据长度,即跨度

func (*Hasher) Size

func (h *Hasher) Size() int

SIZE返回大小

func (*Hasher) Sum

func (h *Hasher) Sum(b []byte) (s []byte)

sum返回缓冲区的bmt根哈希 使用SUM预先假定顺序同步写入(io.writer接口) hash.hash接口sum方法将字节片附加到基础 在计算和返回块散列之前的数据 调用方必须确保SUM不与WRITE、WRITESECTION同时调用

func (*Hasher) Write

func (h *Hasher) Write(b []byte) (int, error)

按顺序写入调用,添加到要散列的缓冲区, 在Go例程中的每个完整段调用中都有writesection

type RefHasher

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

refhasher是BMT的非优化易读参考实现

func NewRefHasher

func NewRefHasher(hasher BaseHasherFunc, count int) *RefHasher

NewRefHasher返回新的RefHasher

func (*RefHasher) Hash

func (rh *RefHasher) Hash(data []byte) []byte

hash返回字节片的bmt哈希 实现swarmhash接口

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上,它重用空闲的树,或者在未达到容量时创建一个新的树。

func (*TreePool) Drain

func (p *TreePool) Drain(n int)

排干水池中的水,直到其资源不超过n个。

Jump to

Keyboard shortcuts

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