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
TypeScript
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 {};