Minimal Anti Collusion Infrastructure (MACI) v2.4.0 / AccQueue
Class: 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.
Constructors
new AccQueue()
new AccQueue(
subDepth
,hashLength
,zeroValue
):AccQueue
Create a new instance of AccQueue
Parameters
• subDepth: number
the depth of the subtrees
• hashLength: number
the number of leaves per node
• zeroValue: bigint
the default value for empty leaves
Returns
Defined in
packages/crypto/ts/AccQueue.ts:76
Properties
hashFunc()
readonly
hashFunc: (leaves
) =>bigint
Parameters
• leaves: bigint
[]
Returns
bigint
Defined in
packages/crypto/ts/AccQueue.ts:68
subHashFunc()
readonly
subHashFunc: (leaves
) =>bigint
Parameters
• leaves: bigint
[]
Returns
bigint
Defined in
packages/crypto/ts/AccQueue.ts:65
Methods
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
packages/crypto/ts/AccQueue.ts:343
copy()
copy():
AccQueue
Returns
a deep copy of this object
Notice
Deep-copies this object
Defined in
packages/crypto/ts/AccQueue.ts:572
enqueue()
enqueue(
leaf
):number
Enqueue a leaf into the current subtree
Parameters
• leaf: bigint
The leaf to insert.
Returns
number
The index of the leaf
Defined in
packages/crypto/ts/AccQueue.ts:185
fill()
fill():
void
Fill any empty leaves of the last subtree with zeros and store the resulting subroot.
Returns
void
Defined in
packages/crypto/ts/AccQueue.ts:267
getHashLength()
getHashLength():
number
Get the number of inputs per hash function
Returns
number
the number of inputs
Defined in
packages/crypto/ts/AccQueue.ts:176
getMainRoots()
getMainRoots():
bigint
[]
Get the root of merged subtrees
Returns
bigint
[]
the root of merged subtrees
Defined in
packages/crypto/ts/AccQueue.ts:149
getRoot()
getRoot(
depth
):undefined
|null
|bigint
Get the root at a certain depth
Parameters
• depth: number
The depth of the tree
Returns
undefined
| null
| bigint
the root
Defined in
packages/crypto/ts/AccQueue.ts:554
getSmallSRTroot()
getSmallSRTroot():
bigint
Get the small SRT root
Returns
bigint
small SRT root
Defined in
packages/crypto/ts/AccQueue.ts:125
getSubDepth()
getSubDepth():
number
Get the subdepth
Returns
number
subdepth
Defined in
packages/crypto/ts/AccQueue.ts:141
getSubRoot()
getSubRoot(
index
):bigint
Get the subroot at a given index
Parameters
• index: number
The index of the subroot
Returns
bigint
the subroot
Defined in
packages/crypto/ts/AccQueue.ts:167
getSubRoots()
getSubRoots():
bigint
[]
Get the subroots
Returns
bigint
[]
subroots
Defined in
packages/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
packages/crypto/ts/AccQueue.ts:158
hash()
hash(
leaves
):bigint
Hash an array of leaves
Parameters
• leaves: bigint
[]
The leaves to hash
Returns
bigint
the hash value of the leaves
Defined in
packages/crypto/ts/AccQueue.ts:623
hasRoot()
hasRoot(
depth
):boolean
Check if the root at a certain depth exists (subtree root)
Parameters
• depth: number
the depth of the tree
Returns
boolean
whether the root exists
Defined in
packages/crypto/ts/AccQueue.ts:563
insertSubTree()
insertSubTree(
subRoot
):void
Insert a subtree into the queue. This is used when the subtree is already computed.
Parameters
• subRoot: bigint
The root of the subtree
Returns
void
Defined in
packages/crypto/ts/AccQueue.ts:359
merge()
merge(
depth
):void
Merge all the subroots into a tree of a specified depth. It requires this.mergeSubRoots() to be run first.
Parameters
• depth: number
Returns
void
Defined in
packages/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
• depth: number
Returns
void
Defined in
packages/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
• numSrQueueOps: number
= 0
The number of subroots to queue into the SRT
Returns
void
Defined in
packages/crypto/ts/AccQueue.ts:462