Skip to main content

AccountUpdateForest

Class which represents a forest (list of trees) of account updates, in a compressed way which allows iterating and selectively witnessing the account updates.

The (recursive) type signature is:

type AccountUpdateForest = MerkleList<AccountUpdateTree>;
type AccountUpdateTree = {
accountUpdate: Hashed<AccountUpdate>;
children: AccountUpdateForest;
};

Extends​

  • MerkleList\<{"accountUpdate": HashedAccountUpdate; "children": MerkleListBase\<AccountUpdateTreeBase>; "id": RandomId; }, this>

Constructors​

new AccountUpdateForest()​

new AccountUpdateForest(__namedParameters: MerkleListBase<{
"accountUpdate": HashedAccountUpdate;
"children": MerkleListBase<AccountUpdateTreeBase>;
"id": RandomId;
}>): AccountUpdateForest

Parameters​

• __namedParameters: MerkleListBase\<{ "accountUpdate": HashedAccountUpdate; "children": MerkleListBase\<AccountUpdateTreeBase>; "id": RandomId; }>

Returns​

AccountUpdateForest

Inherited from​

MerkleList.constructor

Source​

lib/provable/merkle-list.ts:84

Properties​

data​

data: Unconstrained<WithHash<{
"accountUpdate": HashedAccountUpdate;
"children": MerkleListBase<AccountUpdateTreeBase>;
"id": RandomId;
}>[]>;

Inherited from​

MerkleList.data

Source​

lib/provable/merkle-list.ts:82


hash​

hash: Field;

Inherited from​

MerkleList.hash

Source​

lib/provable/merkle-list.ts:81


_emptyHash​

static _emptyHash: undefined | Field;

Inherited from​

MerkleList._emptyHash

Source​

lib/provable/merkle-list.ts:350


_innerProvable​

static _innerProvable: undefined | ProvableHashable<any>;

Inherited from​

MerkleList._innerProvable

Source​

lib/provable/merkle-list.ts:353


_nextHash​

static _nextHash: undefined | (hash: Field, t: any) => Field;

Inherited from​

MerkleList._nextHash

Source​

lib/provable/merkle-list.ts:349


_provable​

static _provable: undefined | ProvableHashable<MerkleList<any>>;

Inherited from​

MerkleList._provable

Source​

lib/provable/merkle-list.ts:352


provable​

static provable: {
"check": void;
"empty": AccountUpdateForest;
"fromFields": AccountUpdateForest;
"fromValue": AccountUpdateForest;
"sizeInFields": number;
"toAuxiliary": any[];
"toFields": Field[];
"toInput": HashInput;
"toValue": any;
};

check()​

Parameters​

• value: AccountUpdateForest | MerkleList\<{ "accountUpdate": HashedAccountUpdate; "children": MerkleListBase\<AccountUpdateTreeBase>; "id": RandomId; }>

Returns​

void

empty()​

Returns​

AccountUpdateForest

fromFields()​

Parameters​

• fields: Field[]

• aux: any[]

Returns​

AccountUpdateForest

fromValue()​

Parameters​

• value: any

Returns​

AccountUpdateForest

sizeInFields()​

Returns​

number

toAuxiliary()​

Parameters​

• value?: AccountUpdateForest | MerkleList\<{ "accountUpdate": HashedAccountUpdate; "children": MerkleListBase\<AccountUpdateTreeBase>; "id": RandomId; }>

Returns​

any[]

toFields()​

Parameters​

• value: AccountUpdateForest | MerkleList\<{ "accountUpdate": HashedAccountUpdate; "children": MerkleListBase\<AccountUpdateTreeBase>; "id": RandomId; }>

Returns​

Field[]

toInput()​

Parameters​

• value: AccountUpdateForest | MerkleList\<{ "accountUpdate": HashedAccountUpdate; "children": MerkleListBase\<AccountUpdateTreeBase>; "id": RandomId; }>

Returns​

HashInput

toValue()​

Parameters​

• value: AccountUpdateForest | MerkleList\<{ "accountUpdate": HashedAccountUpdate; "children": MerkleListBase\<AccountUpdateTreeBase>; "id": RandomId; }>

Returns​

any

Overrides​

MerkleList.create( AccountUpdateTreeBase, merkleListHash ).provable

Source​

lib/mina/account-update.ts:1379

Accessors​

Constructor​

get Constructor(): typeof MerkleList

Returns​

typeof MerkleList

Source​

lib/provable/merkle-list.ts:355


innerProvable​

get innerProvable(): ProvableHashable<T>

Returns​

ProvableHashable\<T>

Source​

lib/provable/merkle-list.ts:372


emptyHash​

get static emptyHash(): Field

Returns​

Field

Source​

lib/provable/merkle-list.ts:367

Methods​

clone()​

clone(): MerkleList<{
"accountUpdate": HashedAccountUpdate;
"children": MerkleListBase<AccountUpdateTreeBase>;
"id": RandomId;
}>

Returns​

MerkleList\<{ "accountUpdate": HashedAccountUpdate; "children": MerkleListBase\<AccountUpdateTreeBase>; "id": RandomId; }>

accountUpdate​
accountUpdate: Hashed<AccountUpdate> = HashedAccountUpdate;
children​
children: MerkleListBase<AccountUpdateTreeBase>;
id​
id: number = RandomId;

Inherited from​

MerkleList.clone

Source​

lib/provable/merkle-list.ts:223


forEach()​

forEach(length: number, callback: (element: {
"accountUpdate": HashedAccountUpdate;
"children": MerkleListBase<AccountUpdateTreeBase>;
"id": RandomId;
}, isDummy: Bool, i: number) => void): void

Iterate through the list in a fixed number of steps any apply a given callback on each element.

Proves that the iteration traverses the entire list. Once past the last element, dummy elements will be passed to the callback.

Note: There are no guarantees about the contents of dummy elements, so the callback is expected to handle the isDummy flag separately.

Parameters​

• length: number

• callback

Returns​

void

Inherited from​

MerkleList.forEach

Source​

lib/provable/merkle-list.ts:237


isEmpty()​

isEmpty(): Bool

Returns​

Bool

Inherited from​

MerkleList.isEmpty

Source​

lib/provable/merkle-list.ts:89


lengthUnconstrained()​

lengthUnconstrained(): Unconstrained<number>

Returns​

Unconstrained\<number>

Inherited from​

MerkleList.lengthUnconstrained

Source​

lib/provable/merkle-list.ts:267


nextHash()​

nextHash(hash: Field, value: {
"accountUpdate": HashedAccountUpdate;
"children": MerkleListBase<AccountUpdateTreeBase>;
"id": RandomId;
}): Field

Parameters​

• hash: Field

• value

• value.accountUpdate: Hashed\<AccountUpdate>= HashedAccountUpdate

• value.children: MerkleListBase\<AccountUpdateTreeBase>= undefined

• value.id: number= RandomId

Returns​

Field

Inherited from​

MerkleList.nextHash

Source​

lib/provable/merkle-list.ts:359


pop()​

pop(): {
"accountUpdate": HashedAccountUpdate;
"children": MerkleListBase<AccountUpdateTreeBase>;
"id": RandomId;
}

Remove the last element from the list and return it.

If the list is empty, returns a dummy element.

Returns​

{
"accountUpdate": HashedAccountUpdate;
"children": MerkleListBase<AccountUpdateTreeBase>;
"id": RandomId;
}
accountUpdate​
accountUpdate: Hashed<AccountUpdate> = HashedAccountUpdate;
children​
children: MerkleListBase<AccountUpdateTreeBase>;
id​
id: number = RandomId;

Inherited from​

MerkleList.pop

Source​

lib/provable/merkle-list.ts:155


popExn()​

popExn(): {
"accountUpdate": HashedAccountUpdate;
"children": MerkleListBase<AccountUpdateTreeBase>;
"id": RandomId;
}

Remove the last element from the list and return it.

This proves that the list is non-empty, and fails otherwise.

Returns​

{
"accountUpdate": HashedAccountUpdate;
"children": MerkleListBase<AccountUpdateTreeBase>;
"id": RandomId;
}
accountUpdate​
accountUpdate: Hashed<AccountUpdate> = HashedAccountUpdate;
children​
children: MerkleListBase<AccountUpdateTreeBase>;
id​
id: number = RandomId;

Inherited from​

MerkleList.popExn

Source​

lib/provable/merkle-list.ts:140


popIf()​

popIf(condition: Bool): {
"accountUpdate": HashedAccountUpdate;
"children": MerkleListBase<AccountUpdateTreeBase>;
"id": RandomId;
}

Return the last element, but only remove it if condition is true.

If the list is empty, returns a dummy element.

Parameters​

• condition: Bool

Returns​

{
"accountUpdate": HashedAccountUpdate;
"children": MerkleListBase<AccountUpdateTreeBase>;
"id": RandomId;
}
accountUpdate​
accountUpdate: Hashed<AccountUpdate> = HashedAccountUpdate;
children​
children: MerkleListBase<AccountUpdateTreeBase>;
id​
id: number = RandomId;

Inherited from​

MerkleList.popIf

Source​

lib/provable/merkle-list.ts:174


popIfUnsafe()​

popIfUnsafe(shouldPop: Bool): {
"accountUpdate": HashedAccountUpdate;
"children": MerkleListBase<AccountUpdateTreeBase>;
"id": RandomId;
}

Low-level, minimal version of pop() which lets the caller decide whether there is an element to pop.

I.e. this proves:

  • If the input condition is true, this returns the last element and removes it from the list.
  • If the input condition is false, the list is unchanged and the return value is garbage.

Note that if the caller passes true but the list is empty, this will fail. If the caller passes false but the list is non-empty, this succeeds and just doesn't pop off an element.

Parameters​

• shouldPop: Bool

Returns​

{
"accountUpdate": HashedAccountUpdate;
"children": MerkleListBase<AccountUpdateTreeBase>;
"id": RandomId;
}
accountUpdate​
accountUpdate: Hashed<AccountUpdate> = HashedAccountUpdate;
children​
children: MerkleListBase<AccountUpdateTreeBase>;
id​
id: number = RandomId;

Inherited from​

MerkleList.popIfUnsafe

Source​

lib/provable/merkle-list.ts:200


push()​

push(update: AccountUpdate | AccountUpdateTreeBase): void

Push a new element to the list.

Parameters​

• update: AccountUpdate | AccountUpdateTreeBase

Returns​

void

Overrides​

MerkleList.push

Source​

lib/mina/account-update.ts:1381


pushIf()​

pushIf(condition: Bool, update: AccountUpdate | AccountUpdateTreeBase): void

Push a new element to the list, if the condition is true.

Parameters​

• condition: Bool

• update: AccountUpdate | AccountUpdateTreeBase

Returns​

void

Overrides​

MerkleList.pushIf

Source​

lib/mina/account-update.ts:1386


startIterating()​

startIterating(): MerkleListIterator<{
"accountUpdate": HashedAccountUpdate;
"children": MerkleListBase<AccountUpdateTreeBase>;
"id": RandomId;
}>

Returns​

MerkleListIterator\<{ "accountUpdate": HashedAccountUpdate; "children": MerkleListBase\<AccountUpdateTreeBase>; "id": RandomId; }>

accountUpdate​
accountUpdate: Hashed<AccountUpdate> = HashedAccountUpdate;
children​
children: MerkleListBase<AccountUpdateTreeBase>;
id​
id: number = RandomId;

Inherited from​

MerkleList.startIterating

Source​

lib/provable/merkle-list.ts:251


startIteratingFromLast()​

startIteratingFromLast(): MerkleListIterator<{
"accountUpdate": HashedAccountUpdate;
"children": MerkleListBase<AccountUpdateTreeBase>;
"id": RandomId;
}>

Returns​

MerkleListIterator\<{ "accountUpdate": HashedAccountUpdate; "children": MerkleListBase\<AccountUpdateTreeBase>; "id": RandomId; }>

accountUpdate​
accountUpdate: Hashed<AccountUpdate> = HashedAccountUpdate;
children​
children: MerkleListBase<AccountUpdateTreeBase>;
id​
id: number = RandomId;

Inherited from​

MerkleList.startIteratingFromLast

Source​

lib/provable/merkle-list.ts:256


toArrayUnconstrained()​

toArrayUnconstrained(): Unconstrained<{
"accountUpdate": HashedAccountUpdate;
"children": MerkleListBase<AccountUpdateTreeBase>;
"id": RandomId;
}[]>

Returns​

Unconstrained\<{ "accountUpdate": HashedAccountUpdate; "children": MerkleListBase\<AccountUpdateTreeBase>; "id": RandomId; }[]>

Inherited from​

MerkleList.toArrayUnconstrained

Source​

lib/provable/merkle-list.ts:261


toFlatArray()​

toFlatArray(mutate: boolean, depth: number): AccountUpdate[]

Parameters​

• mutate: boolean= true

• depth: number= 0

Returns​

AccountUpdate[]

Source​

lib/mina/account-update.ts:1398


assertConstant()​

static assertConstant(forest: AccountUpdateForestBase): void

Parameters​

• forest: AccountUpdateForestBase

Returns​

void

Source​

lib/mina/account-update.ts:1429


create()​

static create<T>(
type: WithProvable<ProvableHashable<T>>,
nextHash: (hash: Field, value: T) => Field,
emptyHash_: Field): typeof MerkleList & {
"empty": () => MerkleList<T>;
"from": (array: T[]) => MerkleList<T>;
"fromReverse": (array: T[]) => MerkleList<T>;
"provable": ProvableHashable<MerkleList<T>>;
}

Create a Merkle list type

Optionally, you can tell create() how to do the hash that pushes a new list element, by passing a nextHash function.

Type parameters​

• T

Parameters​

• type: WithProvable\<ProvableHashable\<T>>

• nextHash= undefined

• emptyHash_: Field= emptyHash

Returns​

typeof MerkleList & { "empty": () => MerkleList\<T>; "from": (array: T[]) => MerkleList\<T>; "fromReverse": (array: T[]) => MerkleList\<T>; "provable": ProvableHashable\<MerkleList\<T>>; }

Inherited from​

MerkleList.create

Example​

class MyList extends MerkleList.create(Field, (hash, x) =>
Poseidon.hashWithPrefix('custom', [hash, x])
) {}

Source​

lib/provable/merkle-list.ts:283


empty()​

static empty(): AccountUpdateForest

Returns​

AccountUpdateForest

Overrides​

MerkleList.create( AccountUpdateTreeBase, merkleListHash ).empty

Source​

lib/mina/account-update.ts:1442


from()​

static from(array: AccountUpdateTreeBase[]): AccountUpdateForest

Parameters​

• array: AccountUpdateTreeBase[]

Returns​

AccountUpdateForest

Overrides​

MerkleList.create( AccountUpdateTreeBase, merkleListHash ).from

Source​

lib/mina/account-update.ts:1445


fromFlatArray()​

static fromFlatArray(updates: AccountUpdate[]): AccountUpdateForest

Parameters​

• updates: AccountUpdate[]

Returns​

AccountUpdateForest

Source​

lib/mina/account-update.ts:1393


fromReverse()​

static fromReverse(array: AccountUpdateTreeBase[]): AccountUpdateForest

Parameters​

• array: AccountUpdateTreeBase[]

Returns​

AccountUpdateForest

Overrides​

MerkleList.create( AccountUpdateTreeBase, merkleListHash ).fromReverse

Source​

lib/mina/account-update.ts:1448


toFlatArray()​

static toFlatArray(
forest: AccountUpdateForestBase,
mutate: boolean,
depth: number): AccountUpdate[]

Parameters​

• forest: AccountUpdateForestBase

• mutate: boolean= true

• depth: number= 0

Returns​

AccountUpdate[]

Source​

lib/mina/account-update.ts:1402