mina-attestations
Version:
Private Attestations on Mina
125 lines (124 loc) • 4.9 kB
TypeScript
import { Bool, Field, type InferProvable, Option, Provable, UInt32, type InferValue, type From, type ProvablePure, type IsPure } from 'o1js';
import { type ProvableHashableWide, ProvableType } from '../o1js-missing.ts';
export { StaticArray };
type StaticArray<T = any, V = any> = StaticArrayBase<T, V>;
type StaticArrayClass<A, T, V> = typeof StaticArrayBase<T, V> & {
provable: ProvableHashableWide<StaticArrayBase<T, V>, V[], (T | From<A>)[]>;
/**
* Create a new StaticArray from an array of values.
*/
from(v: (T | From<A>)[] | StaticArrayBase<T, V>): StaticArrayBase<T, V>;
};
type StaticArrayClassPure<A, T, V> = typeof StaticArrayBase<T, V> & Omit<StaticArrayClass<A, T, V>, 'provable'> & {
provable: ProvableHashableWide<StaticArrayBase<T, V>, V[], (T | From<A>)[]> & Omit<ProvablePure<StaticArrayBase<T, V>, V[]>, 'fromValue'>;
};
/**
* Array with a fixed number of elements and several helper methods.
*
* ```ts
* const Bytes32 = StaticArray(UInt8, 32);
* ```
*
* The second parameter is the `length`. It can be any number from 0 to 2^16-1.
*/
declare function StaticArray<A extends ProvableType, T extends InferProvable<A> = InferProvable<A>, V extends InferValue<A> = InferValue<A>>(type: A, length: number): IsPure<A, Field> extends true ? StaticArrayClassPure<A, T, V> : StaticArrayClass<A, T, V>;
declare namespace StaticArray {
var from: <A extends ProvableType>(type: A, array: From<A>[]) => StaticArrayBase<import("node_modules/o1js/dist/node/bindings/lib/provable-generic.js").InferProvable<A, import("node_modules/o1js/dist/node/lib/provable/field.js").Field>, InferValue<A>>;
var Base: typeof StaticArrayBase;
}
declare class StaticArrayBase<T = any, V = any> {
/**
* The plain array
*/
array: T[];
get innerType(): Provable<T, V>;
static get length(): number;
get length(): number;
/**
* The `length` of the array. For compatibility with `DynamicArray`, we also provide it under `maxLength`.
*/
get maxLength(): number;
constructor(array: T[]);
[Symbol.iterator](): Generator<T, void, unknown>;
/**
* Asserts that 0 <= i < this.length, using a cached check that's not duplicated when doing it on the same variable multiple times.
*
* Handles constants without creating constraints.
*
* Cost: 1.5
*/
assertIndexInRange(i: UInt32 | number): void;
/**
* Gets value at index i, and proves that the index is in the array.
*
* Handles constant indices without creating constraints.
*
* Cost: TN + 1.5
*/
get(i: UInt32 | number): T;
/**
* Gets a value at index i, as an option that is None if the index is not in the array.
*
* Note: The correct type for `i` is actually UInt16 which doesn't exist. The method is not complete (but sound) for i >= 2^16.
*
* Cost: TN + 2.5
*/
getOption(i: UInt32 | number): Option<T>;
/**
* Gets a value at index i, ASSUMING that the index is in the array.
*
* If the index is in fact not in the array, the return value is completely unconstrained.
*
* **Warning**: Only use this if you already know/proved by other means that the index is within bounds.
*
* Cost: T*N where T = size of the type
*/
getOrUnconstrained(i: Field): T;
/**
* Sets a value at index i and proves that the index is in the array.
*
* Cost: 1.5(T + 1)N + 1.5
*/
set(i: UInt32 | number, value: T): void;
/**
* Sets a value at index i, or does nothing if the index is not in the array
*
* Cost: 1.5(T + 1)N
*/
setOrDoNothing(i: Field, value: T): void;
/**
* Map every element of the array to a new value.
*/
map<S>(type: ProvableType<S>, f: (t: T, i: number) => S): StaticArray<S>;
/**
* Iterate over all elements of the array.
*/
forEach(f: (t: T, i: number) => void): void;
/**
* Reduce the array to a single value.
*/
reduce<S>(state: S, f: (state: S, t: T) => S): S;
/**
* Split into a static number of fixed-size chunks.
* Requires that the length is a multiple of the chunk size.
*/
chunk(chunkSize: number): StaticArrayBase<StaticArrayBase<T, V>, V[]>;
/**
* Reverse the array.
*
* Returns a copy and does not modify the original array.
*/
toReversed(): StaticArrayBase<T, V>;
slice(start: number, end: number): StaticArrayBase<T, V>;
_indexMasks: Map<Field, Bool[]>;
_indicesInRange: Set<Field>;
/**
* Compute i.equals(j) for all indices j in the static-size array.
*
* Costs: 1.5N
*
* TODO: equals() could be optimized to just 1 double generic because j is constant, o1js doesn't do that
*/
_indexMask(i: Field): import("node_modules/o1js/dist/node/lib/provable/bool.js").Bool[];
toValue(): V[];
}