You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
* Verify a proof of execution from an offline execution
1955
+
* Verify a proof from an offline execution. This is useful when it is desired to do offchain proving and verification.
1956
1956
*
1957
-
* @param {executionResponse} executionResponse
1957
+
* @param {executionResponse} executionResponse The response from an offline function execution (via the `programManager.run` method)
1958
+
* @param {ImportedPrograms} imports The imported programs used in the execution. Specified as { "programName": "programSourceCode", ... }
1959
+
* @param {ImportedVerifyingKeys} importedVerifyingKeys The verifying keys in the execution. Specified as { "programName": [["functionName", "verifyingKey"], ...], ... }
1958
1960
* @returns {boolean} True if the proof is valid, false otherwise
1961
+
*
1962
+
* @example
1963
+
* /// Import the mainnet version of the sdk used to build executions.
1964
+
* import { Account, ProgramManager } from "@provablehq/sdk/mainnet.js";
1965
+
*
1966
+
* /// Create the source for two programs.
1967
+
* const program = "import add_it_up.aleo; \n\n program mul_add.aleo;\n\nfunction mul_and_add:\n input r0 as u32.public;\n input r1 as u32.private;\n mul r0 r1 into r2;\n call add_it_up.aleo/add_it r1 r2 into r3; output r3 as u32.private;\n";
1968
+
* const program_import = "program add_it_up.aleo;\n\nfunction add_it:\n input r0 as u32.public;\n input r1 as u32.private;\n add r0 r1 into r2;\n output r2 as u32.private;\n";
1969
+
* const programManager = new ProgramManager(undefined, undefined, undefined);
1970
+
*
1971
+
* /// Create a temporary account for the execution of the program
constPROGRAM: string="import puzzle_arcade_coin_v002.aleo;\nimport puzzle_arcade_ticket_v002.aleo;\n\nprogram puzzle_spinner_v002.aleo;\n\nstruct Result:\n nonce as field;\n tickets as u64;\n\nmapping used_nonces:\n key as field.public;\n value as boolean.public;\n\nfunction spin:\n input r0 as puzzle_arcade_coin_v002.aleo/PuzzleArcadeCoin.record;\n input r1 as Result.public;\n input r2 as signature.private;\n sign.verify r2 aleo196a39wq9q8ea779cmlmff0c9pj2gl4f5e8fhjpvmufe5utuq7y8snz4h2l r1 into r3;\n assert.eq r3 true ;\n is.eq r1.tickets 1000000u64 into r4;\n is.eq r1.tickets 2000000u64 into r5;\n or r4 r5 into r6;\n is.eq r1.tickets 5000000u64 into r7;\n or r6 r7 into r8;\n is.eq r1.tickets 10000000u64 into r9;\n or r8 r9 into r10;\n assert.eq r10 true ;\n call puzzle_arcade_coin_v002.aleo/spend r0 1000000u64 into r11;\n call puzzle_arcade_ticket_v002.aleo/mint r0.owner r1.tickets into r12 r13;\n async spin r13 r1.nonce into r14;\n output r11 as puzzle_arcade_coin_v002.aleo/PuzzleArcadeCoin.record;\n output r12 as puzzle_arcade_ticket_v002.aleo/PuzzleArcadeTicket.record;\n output r14 as puzzle_spinner_v002.aleo/spin.future;\n\nfinalize spin:\n input r0 as puzzle_arcade_ticket_v002.aleo/mint.future;\n input r1 as field.public;\n get.or_use used_nonces[r1] false into r2;\n assert.eq r2 false ;\n set true into used_nonces[r1];\n await r0;\n";
6
+
constIMPORT_1: string="program puzzle_arcade_coin_v002.aleo;\n\nrecord PuzzleArcadeCoin:\n owner as address.private;\n amount as u64.private;\n\nfunction mint:\n input r0 as address.public;\n input r1 as u64.public;\n assert.eq self.caller self.signer ;\n assert.eq self.caller aleo196a39wq9q8ea779cmlmff0c9pj2gl4f5e8fhjpvmufe5utuq7y8snz4h2l ;\n cast r0 r1 into r2 as PuzzleArcadeCoin.record;\n output r2 as PuzzleArcadeCoin.record;\n\nfunction spend:\n input r0 as PuzzleArcadeCoin.record;\n input r1 as u64.public;\n gte r0.amount r1 into r2;\n assert.eq r2 true ;\n sub r0.amount r1 into r3;\n cast r0.owner r3 into r4 as PuzzleArcadeCoin.record;\n output r4 as PuzzleArcadeCoin.record;\n";
7
+
constIMPORT_2: string="program puzzle_arcade_ticket_v002.aleo;\n\nrecord PuzzleArcadeTicket:\n owner as address.private;\n amount as u64.private;\n\nmapping registry:\n key as address.public;\n value as boolean.public;\n\nfunction add_program_to_registry:\n input r0 as address.private;\n assert.eq self.caller self.signer ;\n assert.eq self.caller aleo196a39wq9q8ea779cmlmff0c9pj2gl4f5e8fhjpvmufe5utuq7y8snz4h2l ;\n async add_program_to_registry r0 into r1;\n output r1 as puzzle_arcade_ticket_v002.aleo/add_program_to_registry.future;\n\nfinalize add_program_to_registry:\n input r0 as address.public;\n set true into registry[r0];\n\nfunction mint:\n input r0 as address.public;\n input r1 as u64.public;\n cast r0 r1 into r2 as PuzzleArcadeTicket.record;\n async mint self.caller into r3;\n output r2 as PuzzleArcadeTicket.record;\n output r3 as puzzle_arcade_ticket_v002.aleo/mint.future;\n\nfinalize mint:\n input r0 as address.public;\n get.or_use registry[r0] false into r1;\n assert.eq r1 true ;\n\nfunction spend:\n input r0 as PuzzleArcadeTicket.record;\n input r1 as u64.public;\n gte r0.amount r1 into r2;\n assert.eq r2 true ;\n sub r0.amount r1 into r3;\n cast r0.owner r3 into r4 as PuzzleArcadeTicket.record;\n output r4 as PuzzleArcadeTicket.record;\n\nfunction join:\n input r0 as PuzzleArcadeTicket.record;\n input r1 as PuzzleArcadeTicket.record;\n gt r0.amount 0u64 into r2;\n assert.eq r2 true ;\n gt r1.amount 0u64 into r3;\n assert.eq r3 true ;\n add r0.amount r1.amount into r4;\n cast self.signer r4 into r5 as PuzzleArcadeTicket.record;\n output r5 as PuzzleArcadeTicket.record;\n\nfunction join3:\n input r0 as PuzzleArcadeTicket.record;\n input r1 as PuzzleArcadeTicket.record;\n input r2 as PuzzleArcadeTicket.record;\n gt r0.amount 0u64 into r3;\n assert.eq r3 true ;\n gt r1.amount 0u64 into r4;\n assert.eq r4 true ;\n gt r2.amount 0u64 into r5;\n assert.eq r5 true ;\n add r0.amount r1.amount into r6;\n add r6 r2.amount into r7;\n cast self.signer r7 into r8 as PuzzleArcadeTicket.record;\n output r8 as PuzzleArcadeTicket.record;\n\nfunction join4:\n input r0 as PuzzleArcadeTicket.record;\n input r1 as PuzzleArcadeTicket.record;\n input r2 as PuzzleArcadeTicket.record;\n input r3 as PuzzleArcadeTicket.record;\n gt r0.amount 0u64 into r4;\n assert.eq r4 true ;\n gt r1.amount 0u64 into r5;\n assert.eq r5 true ;\n gt r2.amount 0u64 into r6;\n assert.eq r6 true ;\n gt r3.amount 0u64 into r7;\n assert.eq r7 true ;\n add r0.amount r1.amount into r8;\n add r8 r2.amount into r9;\n add r9 r3.amount into r10;\n cast self.signer r10 into r11 as PuzzleArcadeTicket.record;\n output r11 as PuzzleArcadeTicket.record;\n\nfunction join5:\n input r0 as PuzzleArcadeTicket.record;\n input r1 as PuzzleArcadeTicket.record;\n input r2 as PuzzleArcadeTicket.record;\n input r3 as PuzzleArcadeTicket.record;\n input r4 as PuzzleArcadeTicket.record;\n gt r0.amount 0u64 into r5;\n assert.eq r5 true ;\n gt r1.amount 0u64 into r6;\n assert.eq r6 true ;\n gt r2.amount 0u64 into r7;\n assert.eq r7 true ;\n gt r3.amount 0u64 into r8;\n assert.eq r8 true ;\n gt r4.amount 0u64 into r9;\n assert.eq r9 true ;\n add r0.amount r1.amount into r10;\n add r10 r2.amount into r11;\n add r11 r3.amount into r12;\n add r12 r4.amount into r13;\n cast self.signer r13 into r14 as PuzzleArcadeTicket.record;\n output r14 as PuzzleArcadeTicket.record;\n";
0 commit comments