Skip to main content
Version: v1.2

AccQueue

An Accumulator Queue which conforms to the implementation in AccQueue.sol. Each enqueue() operation updates a subtree, and a merge() operation combines all subtrees into a main tree.

Notice

It supports 2 or 5 elements per leaf.

Table of contents​

Constructors​

Properties​

Methods​

Constructors​

constructor​

• new AccQueue(subDepth, hashLength, zeroValue): AccQueue

Create a new instance of AccQueue

Parameters​

NameTypeDescription
subDepthnumberthe depth of the subtrees
hashLengthnumberthe number of leaves per node
zeroValuebigintthe default value for empty leaves

Returns​

AccQueue

Defined in​

crypto/ts/AccQueue.ts:76

Properties​

MAX_DEPTH​

• Private MAX_DEPTH: number = 32

Defined in​

crypto/ts/AccQueue.ts:17


currentSubtreeIndex​

• Private currentSubtreeIndex: number = 0

Defined in​

crypto/ts/AccQueue.ts:30


hashFunc​

• Readonly hashFunc: (leaves: bigint[]) => bigint

Type declaration​

▸ (leaves): bigint

Parameters​
NameType
leavesbigint[]
Returns​

bigint

Defined in​

crypto/ts/AccQueue.ts:68


hashLength​

• Private hashLength: number

Defined in​

crypto/ts/AccQueue.ts:23


leafQueue​

• Private leafQueue: Queue

Defined in​

crypto/ts/AccQueue.ts:36


mainRoots​

• Private mainRoots: bigint[] = []

Defined in​

crypto/ts/AccQueue.ts:55


nextSRindexToQueue​

• Private nextSRindexToQueue: number = 0

Defined in​

crypto/ts/AccQueue.ts:42


numLeaves​

• Private numLeaves: number = 0

Defined in​

crypto/ts/AccQueue.ts:33


smallSRTroot​

• Private smallSRTroot: bigint

Defined in​

crypto/ts/AccQueue.ts:44


subDepth​

• Private subDepth: number

Defined in​

crypto/ts/AccQueue.ts:20


subHashFunc​

• Readonly subHashFunc: (leaves: bigint[]) => bigint

Type declaration​

▸ (leaves): bigint

Parameters​
NameType
leavesbigint[]
Returns​

bigint

Defined in​

crypto/ts/AccQueue.ts:65


subRootQueue​

• Private subRootQueue: Queue

Defined in​

crypto/ts/AccQueue.ts:46


subRoots​

• Private subRoots: bigint[] = []

Defined in​

crypto/ts/AccQueue.ts:52


subTreesMerged​

• Private subTreesMerged: boolean = false

Defined in​

crypto/ts/AccQueue.ts:62


zeroValue​

• Private zeroValue: bigint

Defined in​

crypto/ts/AccQueue.ts:26


zeros​

• Private zeros: bigint[] = []

Defined in​

crypto/ts/AccQueue.ts:59

Methods​

arrayToMap​

▸ arrayToMap(array): Map<number, Map<number, bigint>>

Convert 2D array to its map representation

Parameters​

NameTypeDescription
arraybigint[][]2D array

Returns​

Map<number, Map<number, bigint>>

map representation of 2D array

Defined in​

crypto/ts/AccQueue.ts:614


calcSRTdepth​

▸ calcSRTdepth(): number

Calculate the depth of the smallest possible Merkle tree which fits all

Returns​

number

the depth of the smallest possible Merkle tree which fits all

Defined in​

crypto/ts/AccQueue.ts:343


copy​

▸ copy(): AccQueue

Returns​

AccQueue

a deep copy of this object

Notice

Deep-copies this object

Defined in​

crypto/ts/AccQueue.ts:572


enqueue​

▸ enqueue(leaf): number

Enqueue a leaf into the current subtree

Parameters​

NameTypeDescription
leafbigintThe leaf to insert.

Returns​

number

The index of the leaf

Defined in​

crypto/ts/AccQueue.ts:185


enqueueOp​

▸ enqueueOp(leaf, level): void

Private function that performs the actual enqueue operation

Parameters​

NameTypeDescription
leafbigintThe leaf to insert
levelnumberThe level of the subtree

Returns​

void

Defined in​

crypto/ts/AccQueue.ts:226


fill​

▸ fill(): void

Fill any empty leaves of the last subtree with zeros and store the resulting subroot.

Returns​

void

Defined in​

crypto/ts/AccQueue.ts:267


fillOp​

▸ fillOp(level): void

Private function that performs the actual fill operation

Parameters​

NameTypeDescription
levelnumberThe level of the subtree

Returns​

void

Defined in​

crypto/ts/AccQueue.ts:307


getHashLength​

▸ getHashLength(): number

Get the number of inputs per hash function

Returns​

number

the number of inputs

Defined in​

crypto/ts/AccQueue.ts:176


getMainRoots​

▸ getMainRoots(): bigint[]

Get the root of merged subtrees

Returns​

bigint[]

the root of merged subtrees

Defined in​

crypto/ts/AccQueue.ts:149


getRoot​

▸ getRoot(depth): undefined | null | bigint

Get the root at a certain depth

Parameters​

NameTypeDescription
depthnumberThe depth of the tree

Returns​

undefined | null | bigint

the root

Defined in​

crypto/ts/AccQueue.ts:554


getSmallSRTroot​

▸ getSmallSRTroot(): bigint

Get the small SRT root

Returns​

bigint

small SRT root

Defined in​

crypto/ts/AccQueue.ts:125


getSubDepth​

▸ getSubDepth(): number

Get the subdepth

Returns​

number

subdepth

Defined in​

crypto/ts/AccQueue.ts:141


getSubRoot​

▸ getSubRoot(index): bigint

Get the subroot at a given index

Parameters​

NameTypeDescription
indexnumberThe index of the subroot

Returns​

bigint

the subroot

Defined in​

crypto/ts/AccQueue.ts:167


getSubRoots​

▸ getSubRoots(): bigint[]

Get the subroots

Returns​

bigint[]

subroots

Defined in​

crypto/ts/AccQueue.ts:133


getZeros​

▸ getZeros(): bigint[]

Get the zero values per level. i.e. zeros[0] is zeroValue, zeros[1] is the hash of leavesPerNode zeros, and so on.

Returns​

bigint[]

zeros

Defined in​

crypto/ts/AccQueue.ts:158


hasRoot​

▸ hasRoot(depth): boolean

Check if the root at a certain depth exists (subtree root)

Parameters​

NameTypeDescription
depthnumberthe depth of the tree

Returns​

boolean

whether the root exists

Defined in​

crypto/ts/AccQueue.ts:563


hash​

▸ hash(leaves): bigint

Hash an array of leaves

Parameters​

NameTypeDescription
leavesbigint[]The leaves to hash

Returns​

bigint

the hash value of the leaves

Defined in​

crypto/ts/AccQueue.ts:623


insertSubTree​

▸ insertSubTree(subRoot): void

Insert a subtree into the queue. This is used when the subtree is already computed.

Parameters​

NameTypeDescription
subRootbigintThe root of the subtree

Returns​

void

Defined in​

crypto/ts/AccQueue.ts:359


mapToArray​

▸ mapToArray(map): bigint[][]

Convert map to 2D array

Parameters​

NameTypeDescription
mapMap<number, Map<number, bigint>>map representation of 2D array

Returns​

bigint[][]

2D array

Defined in​

crypto/ts/AccQueue.ts:604


merge​

▸ merge(depth): void

Merge all the subroots into a tree of a specified depth. It requires this.mergeSubRoots() to be run first.

Parameters​

NameType
depthnumber

Returns​

void

Defined in​

crypto/ts/AccQueue.ts:381


mergeDirect​

▸ mergeDirect(depth): void

Merge all the subroots into a tree of a specified depth. Uses an IncrementalQuinTree instead of the two-step method that AccQueue.sol uses.

Parameters​

NameType
depthnumber

Returns​

void

Defined in​

crypto/ts/AccQueue.ts:415


mergeSubRoots​

▸ mergeSubRoots(numSrQueueOps?): void

Merge all subroots into the smallest possible Merkle tree which fits them. e.g. if there are 5 subroots and hashLength == 2, the tree depth is 3 since 2 ** 3 = 8 which is the next power of 2.

Parameters​

NameTypeDefault valueDescription
numSrQueueOpsnumber0The number of subroots to queue into the SRT

Returns​

void

Defined in​

crypto/ts/AccQueue.ts:462


queueSubRoot​

▸ queueSubRoot(leaf, level, maxDepth): void

Queues the leaf (a subroot) into queuedSRTlevels

Parameters​

NameTypeDescription
leafbigintThe leaf to insert
levelnumberThe level of the subtree
maxDepthnumberThe maximum depth of the tree

Returns​

void

Defined in​

crypto/ts/AccQueue.ts:523