UNPKG

@nori-zk/mina-token-bridge

Version:

A Mina zk-program contract allowing users to mint tokens on Nori Bridge.

232 lines (231 loc) 12 kB
import { Cache, Field, PrivateKey, PublicKey, SmartContract } from 'o1js'; import { Presentation, PresentationSpec } from 'mina-attestations'; type CharArray<S extends string> = S extends `${infer First}${infer Rest}` ? [First, ...CharArray<Rest>] : []; type CountChars<S extends string> = CharArray<S>['length']; type ArrayOfLength<Length extends number, Collected extends unknown[] = []> = Collected['length'] extends Length ? Collected : ArrayOfLength<Length, [unknown, ...Collected]>; type IsAtMost<S extends string, Max extends number> = ArrayOfLength<Max> extends [...ArrayOfLength<CountChars<S>>, ...unknown[]] ? true : false; type LengthMismatchError<Expected extends number> = { expectedLength: Expected; }; export type EnforceMaxLength<S extends string, Max extends number> = IsAtMost<S, Max> extends true ? S : LengthMismatchError<Max>; declare const secretMaxLength: 20; export type SecretMaxLength = typeof secretMaxLength; export declare const EcdsaCredential: Omit<{ spec: import("mina-attestations").CredentialSpec<import("mina-attestations").ImportedWitness<{ signerAddress: import("node_modules/o1js/dist/node/lib/provable/bytes.js").Bytes; }>, { message: import("mina-attestations/build/src/dynamic.js").DynamicBytesBase; }>; program: { publicInputType: import("o1js").Provable<{ signerAddress: import("node_modules/o1js/dist/node/lib/provable/bytes.js").Bytes; }, { signerAddress: { bytes: { value: bigint; }[]; }; }>; publicOutputType: import("mina-attestations/build/src/o1js-missing.js").ProvableType<import("mina-attestations/build/src/credential.js").Credential<{ message: import("mina-attestations/build/src/dynamic.js").DynamicBytesBase; }>>; analyzeMethods(): Promise<Record<string, any>>; maxProofsVerified(): Promise<0 | 1 | 2>; compile: (options?: { cache?: import("o1js").Cache; forceRecompile?: boolean; proofsEnabled?: boolean; }) => Promise<{ verificationKey: import("o1js").VerificationKey; }>; run(...inputs: any): Promise<{ proof: import("o1js").Proof<{ signerAddress: import("node_modules/o1js/dist/node/lib/provable/bytes.js").Bytes; }, import("mina-attestations/build/src/credential.js").Credential<{ message: import("mina-attestations/build/src/dynamic.js").DynamicBytesBase; }>>; auxiliaryOutput: undefined; }>; }; isCompiled: boolean; verificationKey: import("o1js").VerificationKey | undefined; create(...inputs: any): Promise<import("mina-attestations/build/src/credential-imported.js").Imported<{ message: import("mina-attestations/build/src/dynamic.js").DynamicBytesBase; }, { signerAddress: import("node_modules/o1js/dist/node/lib/provable/bytes.js").Bytes; }>>; fromProof(proof: import("o1js").Proof<{ signerAddress: import("node_modules/o1js/dist/node/lib/provable/bytes.js").Bytes; }, import("mina-attestations/build/src/credential.js").Credential<{ message: import("mina-attestations/build/src/dynamic.js").DynamicBytesBase; }>>, vk: import("o1js").VerificationKey): Promise<import("mina-attestations/build/src/credential-imported.js").Imported<{ message: import("mina-attestations/build/src/dynamic.js").DynamicBytesBase; }, { signerAddress: import("node_modules/o1js/dist/node/lib/provable/bytes.js").Bytes; }>>; compile(options?: { cache?: import("o1js").Cache; forceRecompile?: boolean; proofsEnabled?: boolean; } | undefined): Promise<import("o1js").VerificationKey>; dummy({ owner, data, }: import("mina-attestations/build/src/credential.js").Credential<{ message: import("mina-attestations/build/src/dynamic.js").DynamicBytesBase; } | { message: Uint8Array<ArrayBufferLike>; }>): Promise<import("mina-attestations/build/src/credential-imported.js").Imported<{ message: import("mina-attestations/build/src/dynamic.js").DynamicBytesBase; }, { signerAddress: import("node_modules/o1js/dist/node/lib/provable/bytes.js").Bytes; }>>; }, "create"> & { create(inputs: { publicInput: { signerAddress: import("node_modules/o1js/dist/node/lib/provable/bytes.js").Bytes | { bytes: { value: bigint; }[]; }; }; privateInput: { message: Uint8Array<ArrayBufferLike> | import("mina-attestations/build/src/dynamic.js").DynamicBytesBase; signature: import("o1js").EcdsaSignature | { r: bigint; s: bigint; }; parityBit: boolean | import("o1js").Unconstrained<boolean>; }; owner: import("o1js").PublicKey; }): Promise<import("mina-attestations/build/src/credential-imported.js").Imported<{ message: import("mina-attestations/build/src/dynamic.js").DynamicBytesBase; }, { signerAddress: import("node_modules/o1js/dist/node/lib/provable/bytes.js").Bytes; }>>; }; declare let EcdsaSigPresentationSpecPreCompile: { spec: PresentationSpec<{ owner: PublicKey; issuer: { signerAddress: import("node_modules/o1js/dist/node/lib/provable/bytes.js").Bytes; }; messageHash: import("o1js/dist/node/lib/provable/field.js").Field; }, { credential: import("mina-attestations").CredentialSpec<import("mina-attestations").ImportedWitness<{ signerAddress: import("node_modules/o1js/dist/node/lib/provable/bytes.js").Bytes; }>, { message: import("mina-attestations/build/src/dynamic.js").DynamicBytesBase; }>; }>; program: import("mina-attestations/build/src/program.js").Program<{ owner: PublicKey; issuer: { signerAddress: import("node_modules/o1js/dist/node/lib/provable/bytes.js").Bytes; }; messageHash: import("o1js/dist/node/lib/provable/field.js").Field; }, { credential: import("mina-attestations").CredentialSpec<import("mina-attestations").ImportedWitness<{ signerAddress: import("node_modules/o1js/dist/node/lib/provable/bytes.js").Bytes; }>, { message: import("mina-attestations/build/src/dynamic.js").DynamicBytesBase; }>; }>; verificationKey: import("o1js").VerificationKey; ProvablePresentation: { new (input: { claims: import("mina-attestations/build/src/types.js").ExcludeFromRecord<{ credential: never; }, never>; outputClaim: { owner: PublicKey; issuer: { signerAddress: import("node_modules/o1js/dist/node/lib/provable/bytes.js").Bytes; }; messageHash: import("o1js/dist/node/lib/provable/field.js").Field; }; clientNonce: Field; serverNonce: import("o1js").Unconstrained<bigint>; proof: import("o1js").Unconstrained<string>; }): import("mina-attestations/build/src/presentation.js").ProvablePresentation<{ owner: PublicKey; issuer: { signerAddress: import("node_modules/o1js/dist/node/lib/provable/bytes.js").Bytes; }; messageHash: import("o1js/dist/node/lib/provable/field.js").Field; }, { credential: import("mina-attestations").CredentialSpec<import("mina-attestations").ImportedWitness<{ signerAddress: import("node_modules/o1js/dist/node/lib/provable/bytes.js").Bytes; }>, { message: import("mina-attestations/build/src/dynamic.js").DynamicBytesBase; }>; }>; readonly provable: import("o1js").Provable<import("mina-attestations/build/src/presentation.js").ProvablePresentation, Presentation<any, any>>; } & { from(input: Presentation): import("mina-attestations/build/src/presentation.js").ProvablePresentation<{ owner: PublicKey; issuer: { signerAddress: import("node_modules/o1js/dist/node/lib/provable/bytes.js").Bytes; }; messageHash: import("o1js/dist/node/lib/provable/field.js").Field; }, { credential: import("mina-attestations").CredentialSpec<import("mina-attestations").ImportedWitness<{ signerAddress: import("node_modules/o1js/dist/node/lib/provable/bytes.js").Bytes; }>, { message: import("mina-attestations/build/src/dynamic.js").DynamicBytesBase; }>; }>; provable: import("o1js").Provable<import("mina-attestations/build/src/presentation.js").ProvablePresentation<{ owner: PublicKey; issuer: { signerAddress: import("node_modules/o1js/dist/node/lib/provable/bytes.js").Bytes; }; messageHash: import("o1js/dist/node/lib/provable/field.js").Field; }, { credential: import("mina-attestations").CredentialSpec<import("mina-attestations").ImportedWitness<{ signerAddress: import("node_modules/o1js/dist/node/lib/provable/bytes.js").Bytes; }>, { message: import("mina-attestations/build/src/dynamic.js").DynamicBytesBase; }>; }>, Presentation<{ owner: PublicKey; issuer: { signerAddress: import("node_modules/o1js/dist/node/lib/provable/bytes.js").Bytes; }; messageHash: import("o1js/dist/node/lib/provable/field.js").Field; }, { credential: import("mina-attestations").CredentialSpec<import("mina-attestations").ImportedWitness<{ signerAddress: import("node_modules/o1js/dist/node/lib/provable/bytes.js").Bytes; }>, { message: import("mina-attestations/build/src/dynamic.js").DynamicBytesBase; }>; }>>; }; }; export declare class ProvableEcdsaSigPresentation extends EcdsaSigPresentationSpecPreCompile.ProvablePresentation { } export declare class EcdsaSigPresentationVerifier extends SmartContract { verifyPresentation(presentation: ProvableEcdsaSigPresentation): Promise<{ owner: PublicKey; issuer: { signerAddress: import("node_modules/o1js/dist/node/lib/provable/bytes.js").Bytes; }; messageHash: import("o1js/dist/node/lib/provable/field.js").Field; }>; } export declare function compileEcdsaEthereum(cache?: Cache): Promise<void>; export declare function compileEcdsaSigPresentationVerifier(cache?: Cache): Promise<void>; export declare function createEcdsaMinaCredential<FixedString extends string>(ethSignature: string, ethWalletAddress: string, minaPubKey: PublicKey, secret: EnforceMaxLength<FixedString, SecretMaxLength>): Promise<string>; export declare function createEcdsaSigPresentationRequest(zkAppAddress: PublicKey): Promise<string>; export declare function createEcdsaSigPresentation(presentationRequestJson: string, credentialJson: string, owner: PrivateKey): Promise<string>; export declare function verifyEcdsaSigPresentation(presentationJson: string, zkAppAddress: PublicKey): Promise<{ owner: PublicKey; issuer: { signerAddress: import("node_modules/o1js/dist/node/lib/provable/bytes.js").Bytes; }; messageHash: import("o1js/dist/node/lib/provable/field.js").Field; }>; export declare function hashSecret<FixedString extends string>(secret: EnforceMaxLength<FixedString, SecretMaxLength>): Field; export declare function getSecretHashFromPresentationJson(presentationJson: string): { credentialAttestationBEHex: string; credentialAttestationHashField: import("o1js/dist/node/lib/provable/field.js").Field; credentialAttestationBigInt: bigint; }; export {};