UNPKG

@nori-zk/mina-token-bridge

Version:

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

67 lines 3.94 kB
import { AccountUpdate, Mina, PrivateKey, PublicKey } from 'o1js'; import { compileEcdsaEthereum, compileEcdsaSigPresentationVerifier, createEcdsaMinaCredential, createEcdsaSigPresentation, createEcdsaSigPresentationRequest, EcdsaSigPresentationVerifier, ProvableEcdsaSigPresentation, } from '../../credentialAttestation.js'; import { Presentation } from 'mina-attestations'; export class CredentialAttestationWorker { async compile() { // Compile programs / contracts console.time('compileEcdsaEthereum'); await compileEcdsaEthereum(); console.timeEnd('compileEcdsaEthereum'); // 1:20.330 (m:ss.mmm) console.time('compilePresentationVerifier'); await compileEcdsaSigPresentationVerifier(); console.timeEnd('compilePresentationVerifier'); // 11.507s } async computeEcdsaSigPresentationRequest(zkAppPublicKeyBase58) { const zkAppPublicKey = PublicKey.fromBase58(zkAppPublicKeyBase58); console.time('getPresentationRequest'); const presentationRequestJson = await createEcdsaSigPresentationRequest(zkAppPublicKey); console.timeEnd('getPresentationRequest'); // 1.348ms return presentationRequestJson; } async computeCredential(secret, ethSecretSignature, ethWalletAddress, minaPublicKeyBase58) { console.log('minaPublicKeyBase58', minaPublicKeyBase58); const minaPublicKey = PublicKey.fromBase58(minaPublicKeyBase58); console.time('createCredential'); const credentialJson = await createEcdsaMinaCredential(ethSecretSignature, ethWalletAddress, minaPublicKey, secret); console.timeEnd('createCredential'); // 2:02.513 (m:ss.mmm) return credentialJson; } async WALLET_computeEcdsaSigPresentation(presentationRequestJson, credentialJson, minaPrivateKeyBase58) { console.time('getPresentation'); const minaPrivateKey = PrivateKey.fromBase58(minaPrivateKeyBase58); const presentationJson = await createEcdsaSigPresentation(presentationRequestJson, credentialJson, minaPrivateKey); console.timeEnd('getPresentation'); // 46.801s return presentationJson; } // Remove this later! This was just for testing anyway async minaSetup() { const Network = Mina.Network({ networkId: 'devnet', mina: 'http://localhost:8080/graphql', }); Mina.setActiveInstance(Network); } async MOCK_deployAndVerifyEcdsaSigPresentationVerifier(zkAppPrivateKeyBase58, senderPrivateKeyBase58, presentationJSON) { await this.minaSetup(); const senderPrivateKey = PrivateKey.fromBase58(senderPrivateKeyBase58); const zkAppPrivateKey = PrivateKey.fromBase58(zkAppPrivateKeyBase58); const senderPublicKey = senderPrivateKey.toPublicKey(); const zkAppPublicKey = zkAppPrivateKey.toPublicKey(); const zkApp = new EcdsaSigPresentationVerifier(zkAppPublicKey); const deployTx = await Mina.transaction({ sender: senderPublicKey, fee: 0.01 * 1e9 }, async () => { AccountUpdate.fundNewAccount(senderPublicKey); await zkApp.deploy(); const presentation = Presentation.fromJSON(presentationJSON); const provablePresentation = ProvableEcdsaSigPresentation.from(presentation); const claims = await zkApp.verifyPresentation(provablePresentation); console.log('✅ ProvablePresentation verified!'); console.log('ProvableEcdsaSigPresentation claims:', claims); }); console.log('Deploy transaction created successfully. Proving...'); await deployTx.prove(); console.log('Transaction proved. Signing and sending the transaction...'); await deployTx.sign([senderPrivateKey, zkAppPrivateKey]).send().wait(); console.log('✅ EcdsaSigPresentationVerifier deployed and verified successfully.'); } } //# sourceMappingURL=worker.js.map