UNPKG

l1-lottery-contracts

Version:

This repo contains smart contracts and related scripts for ZkNoid L1 Lottery proposed [here](https://forums.minaprotocol.com/t/zknoid-l1-lottery/6269)

475 lines (474 loc) 20.7 kB
import { Field, MerkleList, SelfProof, UInt64 } from 'o1js'; import { Ticket } from '../Structs/Ticket.js'; import { MerkleMap20Witness } from '../Structs/CustomMerkleMap.js'; declare const LotteryAction_base: (new (value: { ticket: Ticket; }) => { ticket: Ticket; }) & { _isStruct: true; } & Omit<import("o1js/dist/node/lib/provable/types/provable-intf.js").Provable<{ ticket: Ticket; }, { ticket: { numbers: bigint[]; owner: { x: bigint; isOdd: boolean; }; amount: bigint; }; }>, "fromFields"> & { fromFields: (fields: import("o1js/dist/node/lib/provable/field.js").Field[]) => { ticket: Ticket; }; } & { fromValue: (value: { ticket: Ticket | { numbers: import("o1js").UInt32[] | bigint[]; owner: import("o1js").PublicKey | { x: Field | bigint; isOdd: import("o1js").Bool | boolean; }; amount: bigint | UInt64; }; }) => { ticket: Ticket; }; toInput: (x: { ticket: Ticket; }) => { fields?: Field[] | undefined; packed?: [Field, number][] | undefined; }; toJSON: (x: { ticket: Ticket; }) => { ticket: { numbers: string[]; owner: string; amount: string; }; }; fromJSON: (x: { ticket: { numbers: string[]; owner: string; amount: string; }; }) => { ticket: Ticket; }; empty: () => { ticket: Ticket; }; }; export declare class LotteryAction extends LotteryAction_base { } export declare const actionListAdd: (hash: Field, action: LotteryAction) => Field; declare const ActionList_base: { new ({ hash, data }: import("o1js/dist/node/lib/provable/merkle-list.js").MerkleListBase<{ ticket: Ticket; }>): MerkleList<{ ticket: Ticket; }>; create<T>(type: import("o1js/dist/node/lib/provable/types/provable-intf.js").WithProvable<import("o1js").ProvableHashable<T>>, nextHash?: (hash: Field, value: T) => Field, emptyHash_?: import("o1js/dist/node/lib/provable/field.js").Field): typeof MerkleList<T> & { empty: () => MerkleList<T>; from: (array: T[]) => MerkleList<T>; fromReverse: (array: T[]) => MerkleList<T>; provable: import("o1js").ProvableHashable<MerkleList<T>>; }; _nextHash: ((hash: Field, t: any) => Field) | undefined; _emptyHash: Field | undefined; _provable: import("o1js").ProvableHashable<MerkleList<any>> | undefined; _innerProvable: import("o1js").ProvableHashable<any> | undefined; readonly emptyHash: import("o1js/dist/node/lib/provable/field.js").Field; } & { empty: () => MerkleList<{ ticket: Ticket; }>; from: (array: { ticket: Ticket; }[]) => MerkleList<{ ticket: Ticket; }>; fromReverse: (array: { ticket: Ticket; }[]) => MerkleList<{ ticket: Ticket; }>; provable: import("o1js").ProvableHashable<MerkleList<{ ticket: Ticket; }>>; }; export declare class ActionList extends ActionList_base { } export declare const merkleActionsAdd: (hash: Field, actionsHash: Field) => Field; declare const MerkleActions_base: { new ({ hash, data }: import("o1js/dist/node/lib/provable/merkle-list.js").MerkleListBase<MerkleList<{ ticket: Ticket; }>>): MerkleList<MerkleList<{ ticket: Ticket; }>>; create<T>(type: import("o1js/dist/node/lib/provable/types/provable-intf.js").WithProvable<import("o1js").ProvableHashable<T>>, nextHash?: (hash: Field, value: T) => Field, emptyHash_?: import("o1js/dist/node/lib/provable/field.js").Field): typeof MerkleList<T> & { empty: () => MerkleList<T>; from: (array: T[]) => MerkleList<T>; fromReverse: (array: T[]) => MerkleList<T>; provable: import("o1js").ProvableHashable<MerkleList<T>>; }; _nextHash: ((hash: Field, t: any) => Field) | undefined; _emptyHash: Field | undefined; _provable: import("o1js").ProvableHashable<MerkleList<any>> | undefined; _innerProvable: import("o1js").ProvableHashable<any> | undefined; readonly emptyHash: import("o1js/dist/node/lib/provable/field.js").Field; } & { empty: () => MerkleList<MerkleList<{ ticket: Ticket; }>>; from: (array: MerkleList<{ ticket: Ticket; }>[]) => MerkleList<MerkleList<{ ticket: Ticket; }>>; fromReverse: (array: MerkleList<{ ticket: Ticket; }>[]) => MerkleList<MerkleList<{ ticket: Ticket; }>>; provable: import("o1js").ProvableHashable<MerkleList<MerkleList<{ ticket: Ticket; }>>>; }; export declare class MerkleActions extends MerkleActions_base { } declare const TicketReduceProofPublicInput_base: (new (value: { action: LotteryAction; ticketWitness: MerkleMap20Witness; }) => { action: LotteryAction; ticketWitness: MerkleMap20Witness; }) & { _isStruct: true; } & Omit<import("o1js/dist/node/lib/provable/types/provable-intf.js").Provable<{ action: LotteryAction; ticketWitness: MerkleMap20Witness; }, { action: { ticket: { numbers: bigint[]; owner: { x: bigint; isOdd: boolean; }; amount: bigint; }; }; ticketWitness: { isLefts: boolean[]; siblings: bigint[]; }; }>, "fromFields"> & { fromFields: (fields: import("o1js/dist/node/lib/provable/field.js").Field[]) => { action: LotteryAction; ticketWitness: MerkleMap20Witness; }; } & { fromValue: (value: { action: LotteryAction | { ticket: Ticket | { numbers: import("o1js").UInt32[] | bigint[]; owner: import("o1js").PublicKey | { x: Field | bigint; isOdd: import("o1js").Bool | boolean; }; amount: bigint | UInt64; }; }; ticketWitness: MerkleMap20Witness | { isLefts: import("o1js/dist/node/lib/provable/bool.js").Bool[] | boolean[]; siblings: import("o1js/dist/node/lib/provable/field.js").Field[] | bigint[]; }; }) => { action: LotteryAction; ticketWitness: MerkleMap20Witness; }; toInput: (x: { action: LotteryAction; ticketWitness: MerkleMap20Witness; }) => { fields?: Field[] | undefined; packed?: [Field, number][] | undefined; }; toJSON: (x: { action: LotteryAction; ticketWitness: MerkleMap20Witness; }) => { action: { ticket: { numbers: string[]; owner: string; amount: string; }; }; ticketWitness: { isLefts: boolean[]; siblings: string[]; }; }; fromJSON: (x: { action: { ticket: { numbers: string[]; owner: string; amount: string; }; }; ticketWitness: { isLefts: boolean[]; siblings: string[]; }; }) => { action: LotteryAction; ticketWitness: MerkleMap20Witness; }; empty: () => { action: LotteryAction; ticketWitness: MerkleMap20Witness; }; }; export declare class TicketReduceProofPublicInput extends TicketReduceProofPublicInput_base { } declare const TicketReduceProofPublicOutput_base: (new (value: { finalState: import("o1js/dist/node/lib/provable/field.js").Field; newTicketRoot: import("o1js/dist/node/lib/provable/field.js").Field; newBank: import("o1js/dist/node/lib/provable/field.js").Field; totalScore: UInt64; processedActionList: import("o1js/dist/node/lib/provable/field.js").Field; lastProcessedTicketId: import("o1js/dist/node/lib/provable/field.js").Field; winningNumbersPacked: import("o1js/dist/node/lib/provable/field.js").Field; }) => { finalState: import("o1js/dist/node/lib/provable/field.js").Field; newTicketRoot: import("o1js/dist/node/lib/provable/field.js").Field; newBank: import("o1js/dist/node/lib/provable/field.js").Field; totalScore: UInt64; processedActionList: import("o1js/dist/node/lib/provable/field.js").Field; lastProcessedTicketId: import("o1js/dist/node/lib/provable/field.js").Field; winningNumbersPacked: import("o1js/dist/node/lib/provable/field.js").Field; }) & { _isStruct: true; } & Omit<import("o1js/dist/node/lib/provable/types/provable-intf.js").Provable<{ finalState: import("o1js/dist/node/lib/provable/field.js").Field; newTicketRoot: import("o1js/dist/node/lib/provable/field.js").Field; newBank: import("o1js/dist/node/lib/provable/field.js").Field; totalScore: UInt64; processedActionList: import("o1js/dist/node/lib/provable/field.js").Field; lastProcessedTicketId: import("o1js/dist/node/lib/provable/field.js").Field; winningNumbersPacked: import("o1js/dist/node/lib/provable/field.js").Field; }, { finalState: bigint; newTicketRoot: bigint; newBank: bigint; totalScore: bigint; processedActionList: bigint; lastProcessedTicketId: bigint; winningNumbersPacked: bigint; }>, "fromFields"> & { fromFields: (fields: import("o1js/dist/node/lib/provable/field.js").Field[]) => { finalState: import("o1js/dist/node/lib/provable/field.js").Field; newTicketRoot: import("o1js/dist/node/lib/provable/field.js").Field; newBank: import("o1js/dist/node/lib/provable/field.js").Field; totalScore: UInt64; processedActionList: import("o1js/dist/node/lib/provable/field.js").Field; lastProcessedTicketId: import("o1js/dist/node/lib/provable/field.js").Field; winningNumbersPacked: import("o1js/dist/node/lib/provable/field.js").Field; }; } & { fromValue: (value: { finalState: string | number | bigint | import("o1js/dist/node/lib/provable/field.js").Field; newTicketRoot: string | number | bigint | import("o1js/dist/node/lib/provable/field.js").Field; newBank: string | number | bigint | import("o1js/dist/node/lib/provable/field.js").Field; totalScore: bigint | UInt64; processedActionList: string | number | bigint | import("o1js/dist/node/lib/provable/field.js").Field; lastProcessedTicketId: string | number | bigint | import("o1js/dist/node/lib/provable/field.js").Field; winningNumbersPacked: string | number | bigint | import("o1js/dist/node/lib/provable/field.js").Field; }) => { finalState: import("o1js/dist/node/lib/provable/field.js").Field; newTicketRoot: import("o1js/dist/node/lib/provable/field.js").Field; newBank: import("o1js/dist/node/lib/provable/field.js").Field; totalScore: UInt64; processedActionList: import("o1js/dist/node/lib/provable/field.js").Field; lastProcessedTicketId: import("o1js/dist/node/lib/provable/field.js").Field; winningNumbersPacked: import("o1js/dist/node/lib/provable/field.js").Field; }; toInput: (x: { finalState: import("o1js/dist/node/lib/provable/field.js").Field; newTicketRoot: import("o1js/dist/node/lib/provable/field.js").Field; newBank: import("o1js/dist/node/lib/provable/field.js").Field; totalScore: UInt64; processedActionList: import("o1js/dist/node/lib/provable/field.js").Field; lastProcessedTicketId: import("o1js/dist/node/lib/provable/field.js").Field; winningNumbersPacked: import("o1js/dist/node/lib/provable/field.js").Field; }) => { fields?: Field[] | undefined; packed?: [Field, number][] | undefined; }; toJSON: (x: { finalState: import("o1js/dist/node/lib/provable/field.js").Field; newTicketRoot: import("o1js/dist/node/lib/provable/field.js").Field; newBank: import("o1js/dist/node/lib/provable/field.js").Field; totalScore: UInt64; processedActionList: import("o1js/dist/node/lib/provable/field.js").Field; lastProcessedTicketId: import("o1js/dist/node/lib/provable/field.js").Field; winningNumbersPacked: import("o1js/dist/node/lib/provable/field.js").Field; }) => { finalState: string; newTicketRoot: string; newBank: string; totalScore: string; processedActionList: string; lastProcessedTicketId: string; winningNumbersPacked: string; }; fromJSON: (x: { finalState: string; newTicketRoot: string; newBank: string; totalScore: string; processedActionList: string; lastProcessedTicketId: string; winningNumbersPacked: string; }) => { finalState: import("o1js/dist/node/lib/provable/field.js").Field; newTicketRoot: import("o1js/dist/node/lib/provable/field.js").Field; newBank: import("o1js/dist/node/lib/provable/field.js").Field; totalScore: UInt64; processedActionList: import("o1js/dist/node/lib/provable/field.js").Field; lastProcessedTicketId: import("o1js/dist/node/lib/provable/field.js").Field; winningNumbersPacked: import("o1js/dist/node/lib/provable/field.js").Field; }; empty: () => { finalState: import("o1js/dist/node/lib/provable/field.js").Field; newTicketRoot: import("o1js/dist/node/lib/provable/field.js").Field; newBank: import("o1js/dist/node/lib/provable/field.js").Field; totalScore: UInt64; processedActionList: import("o1js/dist/node/lib/provable/field.js").Field; lastProcessedTicketId: import("o1js/dist/node/lib/provable/field.js").Field; winningNumbersPacked: import("o1js/dist/node/lib/provable/field.js").Field; }; }; export declare class TicketReduceProofPublicOutput extends TicketReduceProofPublicOutput_base { } export declare const init: (input: TicketReduceProofPublicInput, winningNumbersPacked: Field) => Promise<TicketReduceProofPublicOutput>; export declare const addTicket: (input: TicketReduceProofPublicInput, prevProof: SelfProof<TicketReduceProofPublicInput, TicketReduceProofPublicOutput>) => Promise<TicketReduceProofPublicOutput>; export declare const cutActions: (input: TicketReduceProofPublicInput, prevProof: SelfProof<TicketReduceProofPublicInput, TicketReduceProofPublicOutput>) => Promise<TicketReduceProofPublicOutput>; export declare const refund: (input: TicketReduceProofPublicInput, prevProof: SelfProof<TicketReduceProofPublicInput, TicketReduceProofPublicOutput>) => Promise<TicketReduceProofPublicOutput>; export declare const TicketReduceProgram: { name: string; compile: (options?: { cache?: import("o1js").Cache; forceRecompile?: boolean; proofsEnabled?: boolean; }) => Promise<{ verificationKey: { data: string; hash: Field; }; }>; verify: (proof: import("o1js").Proof<TicketReduceProofPublicInput, TicketReduceProofPublicOutput>) => Promise<boolean>; digest: () => Promise<string>; analyzeMethods: () => Promise<{ init: { rows: number; digest: string; gates: import("o1js/dist/node/snarky.js").Gate[]; publicInputSize: number; print(): void; summary(): Partial<Record<import("o1js/dist/node/snarky.js").GateType | "Total rows", number>>; }; addTicket: { rows: number; digest: string; gates: import("o1js/dist/node/snarky.js").Gate[]; publicInputSize: number; print(): void; summary(): Partial<Record<import("o1js/dist/node/snarky.js").GateType | "Total rows", number>>; }; cutActions: { rows: number; digest: string; gates: import("o1js/dist/node/snarky.js").Gate[]; publicInputSize: number; print(): void; summary(): Partial<Record<import("o1js/dist/node/snarky.js").GateType | "Total rows", number>>; }; refund: { rows: number; digest: string; gates: import("o1js/dist/node/snarky.js").Gate[]; publicInputSize: number; print(): void; summary(): Partial<Record<import("o1js/dist/node/snarky.js").GateType | "Total rows", number>>; }; }>; publicInputType: typeof TicketReduceProofPublicInput; publicOutputType: typeof TicketReduceProofPublicOutput; privateInputTypes: { init: [typeof import("o1js/dist/node/lib/provable/field.js").Field & ((x: string | number | bigint | import("o1js/dist/node/lib/provable/core/fieldvar.js").FieldConst | import("o1js/dist/node/lib/provable/core/fieldvar.js").FieldVar | import("o1js/dist/node/lib/provable/field.js").Field) => import("o1js/dist/node/lib/provable/field.js").Field)]; addTicket: [typeof SelfProof]; cutActions: [typeof SelfProof]; refund: [typeof SelfProof]; }; rawMethods: { init: (publicInput: TicketReduceProofPublicInput, ...args: [import("o1js/dist/node/lib/provable/field.js").Field] & any[]) => Promise<TicketReduceProofPublicOutput>; addTicket: (publicInput: TicketReduceProofPublicInput, ...args: [SelfProof<unknown, unknown>] & any[]) => Promise<TicketReduceProofPublicOutput>; cutActions: (publicInput: TicketReduceProofPublicInput, ...args: [SelfProof<unknown, unknown>] & any[]) => Promise<TicketReduceProofPublicOutput>; refund: (publicInput: TicketReduceProofPublicInput, ...args: [SelfProof<unknown, unknown>] & any[]) => Promise<TicketReduceProofPublicOutput>; }; proofsEnabled: boolean; setProofsEnabled(proofsEnabled: boolean): void; } & { init: (publicInput: TicketReduceProofPublicInput, ...args: [import("o1js/dist/node/lib/provable/field.js").Field] & any[]) => Promise<import("o1js").Proof<TicketReduceProofPublicInput, TicketReduceProofPublicOutput>>; addTicket: (publicInput: TicketReduceProofPublicInput, ...args: [SelfProof<unknown, unknown>] & any[]) => Promise<import("o1js").Proof<TicketReduceProofPublicInput, TicketReduceProofPublicOutput>>; cutActions: (publicInput: TicketReduceProofPublicInput, ...args: [SelfProof<unknown, unknown>] & any[]) => Promise<import("o1js").Proof<TicketReduceProofPublicInput, TicketReduceProofPublicOutput>>; refund: (publicInput: TicketReduceProofPublicInput, ...args: [SelfProof<unknown, unknown>] & any[]) => Promise<import("o1js").Proof<TicketReduceProofPublicInput, TicketReduceProofPublicOutput>>; }; declare const TicketReduceProof_base: { new ({ proof, publicInput, publicOutput, maxProofsVerified, }: { proof: unknown; publicInput: TicketReduceProofPublicInput; publicOutput: TicketReduceProofPublicOutput; maxProofsVerified: 0 | 2 | 1; }): { verify(): void; verifyIf(condition: import("o1js/dist/node/lib/provable/bool.js").Bool): void; publicInput: TicketReduceProofPublicInput; publicOutput: TicketReduceProofPublicOutput; proof: unknown; maxProofsVerified: 0 | 2 | 1; shouldVerify: import("o1js/dist/node/lib/provable/bool.js").Bool; toJSON(): import("o1js").JsonProof; }; publicInputType: typeof TicketReduceProofPublicInput; publicOutputType: typeof TicketReduceProofPublicOutput; tag: () => { name: string; publicInputType: typeof TicketReduceProofPublicInput; publicOutputType: typeof TicketReduceProofPublicOutput; }; fromJSON<S extends (new (...args: any) => import("o1js").Proof<unknown, unknown>) & { prototype: import("o1js").Proof<any, any>; fromJSON: typeof import("o1js").Proof.fromJSON; dummy: typeof import("o1js").Proof.dummy; publicInputType: import("o1js").FlexibleProvablePure<any>; publicOutputType: import("o1js").FlexibleProvablePure<any>; tag: () => { name: string; }; } & { prototype: import("o1js").Proof<unknown, unknown>; }>(this: S, { maxProofsVerified, proof: proofString, publicInput: publicInputJson, publicOutput: publicOutputJson, }: import("o1js").JsonProof): Promise<import("o1js").Proof<import("o1js").InferProvable<S["publicInputType"]>, import("o1js").InferProvable<S["publicOutputType"]>>>; dummy<Input, OutPut>(publicInput: Input, publicOutput: OutPut, maxProofsVerified: 0 | 2 | 1, domainLog2?: number): Promise<import("o1js").Proof<Input, OutPut>>; }; export declare class TicketReduceProof extends TicketReduceProof_base { } export {};