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