diff --git a/README.md b/README.md index d8f5bf2..9cceb94 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ forge install openvm-org/openvm-solidity-sdk If you are using a deployed instance of the verifier contract, then you can import the interfaces in your contract directly. ```solidity -import { IOpenVmHalo2Verifier } from "openvm-solidity-sdk/v1.1/interfaces/IOpenVmHalo2Verifier.sol"; +import { IOpenVmHalo2Verifier } from "openvm-solidity-sdk/v1.2/interfaces/IOpenVmHalo2Verifier.sol"; contract MyContract { function myFunction() public view { @@ -34,7 +34,7 @@ contract MyContract { If you want to deploy your own instance of the verifier contract, you can use `forge create`: ```bash -forge create src/v1.1/OpenVmHalo2Verifier.sol:OpenVmHalo2Verifier --rpc-url $RPC --private-key $PRIVATE_KEY --broadcast +forge create src/v1.2/OpenVmHalo2Verifier.sol:OpenVmHalo2Verifier --rpc-url $RPC --private-key $PRIVATE_KEY --broadcast ``` If you want to import the verifier contract into your own repository for testing purposes, note that it is locked to Solidity version `0.8.19`. If your project uses a different version, the import may not compile. As a workaround, you can compile the contract separately and use `vm.etch()` to inject the raw bytecode into your tests. diff --git a/foundry.toml b/foundry.toml index fddcd84..46876f4 100644 --- a/foundry.toml +++ b/foundry.toml @@ -8,7 +8,7 @@ optimizer = true optimizer_runs = 100000 evm_version = "paris" show_progress = true -fs_permissions = [{ access = "read", path = "./test/v1.1/evm.proof"}] +fs_permissions = [{ access = "read", path = "./test/v1.2/evm.proof"}] [profile.default.optimizer_details] constantOptimizer = false diff --git a/src/v1.1/Halo2Verifier.sol b/src/v1.2/Halo2Verifier.sol similarity index 99% rename from src/v1.1/Halo2Verifier.sol rename to src/v1.2/Halo2Verifier.sol index 71ce4bb..1e87431 100644 --- a/src/v1.1/Halo2Verifier.sol +++ b/src/v1.2/Halo2Verifier.sol @@ -75,7 +75,7 @@ contract Halo2Verifier { mstore(0x600, mod(calldataload(0x560), f_q)) mstore(0x620, mod(calldataload(0x580), f_q)) mstore(0x640, mod(calldataload(0x5a0), f_q)) - mstore(0x80, 19438946737798499885558692066632745375001658993335175299244276035086184769592) + mstore(0x80, 9514323097321245931419041477139106601771148851610395955023397192525359125626) { let x := calldataload(0x5c0) @@ -1864,8 +1864,8 @@ contract Halo2Verifier { mstore(0x54e0, mload(0x5440)) mstore(0x5500, mload(0x5460)) success := and(eq(staticcall(gas(), 0x6, 0x54a0, 0x80, 0x54a0, 0x40), 1), success) - mstore(0x5520, 0x1701d83c9ad410f3d61886c39b7b8a618f42219a1404264208f838c1672b8e71) - mstore(0x5540, 0x0868e69339d5d3bbd747b6e7772a9760a7277c0993a420c2848808b15de0424c) + mstore(0x5520, 0x215365efc7b867c1204aab35fb060db538521b93b08872e3a9700c7ee4a285c2) + mstore(0x5540, 0x26da76077e618e9351d4e53058afcb50f9ecb808ef537ffed4c95f1e964a8c58) mstore(0x5560, mload(0x4ee0)) success := and(eq(staticcall(gas(), 0x7, 0x5520, 0x60, 0x5520, 0x40), 1), success) mstore(0x5580, mload(0x54a0)) @@ -1900,8 +1900,8 @@ contract Halo2Verifier { mstore(0x5860, mload(0x57c0)) mstore(0x5880, mload(0x57e0)) success := and(eq(staticcall(gas(), 0x6, 0x5820, 0x80, 0x5820, 0x40), 1), success) - mstore(0x58a0, 0x26eaa658ef237183330c716cf9d5d978d8618788db2551142e1a9af837ecc810) - mstore(0x58c0, 0x1fa793c6b0f3df4a8a1017daa531a45fdfa8b5da433308f71716565f8b85aa7d) + mstore(0x58a0, 0x1e9efbe537998d8260c28c8e2ca8d83118f378f1e83daed033c2ae772806280a) + mstore(0x58c0, 0x15e04128b5f6b9bb6c758886eda92c27e8414c25809bd547e4987c332c38a430) mstore(0x58e0, mload(0x4f60)) success := and(eq(staticcall(gas(), 0x7, 0x58a0, 0x60, 0x58a0, 0x40), 1), success) mstore(0x5900, mload(0x5820)) @@ -1909,8 +1909,8 @@ contract Halo2Verifier { mstore(0x5940, mload(0x58a0)) mstore(0x5960, mload(0x58c0)) success := and(eq(staticcall(gas(), 0x6, 0x5900, 0x80, 0x5900, 0x40), 1), success) - mstore(0x5980, 0x186694283d847cec7609ca9b642f46fc751a61e3ac330841cdf6a938a3439c02) - mstore(0x59a0, 0x16eb0141342ab5f9ca76fcaef38c222f51dd1afd5d45943e3676ba0c2ceb4f6d) + mstore(0x5980, 0x2db56ede49a6f38ee215d1fa9557ac54cb085bbb6170e9a2cda8db3c996c496e) + mstore(0x59a0, 0x017bd7af014917e84cda777f32c3b586cf6de90f0d649cbbce320ee837513cb8) mstore(0x59c0, mload(0x4f80)) success := and(eq(staticcall(gas(), 0x7, 0x5980, 0x60, 0x5980, 0x40), 1), success) mstore(0x59e0, mload(0x5900)) diff --git a/src/v1.1/OpenVmHalo2Verifier.sol b/src/v1.2/OpenVmHalo2Verifier.sol similarity index 99% rename from src/v1.1/OpenVmHalo2Verifier.sol rename to src/v1.2/OpenVmHalo2Verifier.sol index ce26153..9bb6aaa 100644 --- a/src/v1.1/OpenVmHalo2Verifier.sol +++ b/src/v1.2/OpenVmHalo2Verifier.sol @@ -29,7 +29,7 @@ contract OpenVmHalo2Verifier is Halo2Verifier, IOpenVmHalo2Verifier { uint256 private constant FULL_PROOF_LENGTH = (12 + 2 + PUBLIC_VALUES_LENGTH + 43) * 32; /// @dev The version of OpenVM that generated this verifier. - string public constant OPENVM_VERSION = "1.1"; + string public constant OPENVM_VERSION = "1.2"; /// @notice A wrapper that constructs the proof into the right format for /// use with the `snark-verifier` verification. diff --git a/src/v1.1/interfaces/IOpenVmHalo2Verifier.sol b/src/v1.2/interfaces/IOpenVmHalo2Verifier.sol similarity index 100% rename from src/v1.1/interfaces/IOpenVmHalo2Verifier.sol rename to src/v1.2/interfaces/IOpenVmHalo2Verifier.sol diff --git a/test/v1.1/evm.proof b/test/v1.1/evm.proof deleted file mode 100644 index b39ce46..0000000 --- a/test/v1.1/evm.proof +++ /dev/null @@ -1,9 +0,0 @@ -{ - "app_exe_commit": "00303f848c4546ece61a1ad1732770e1c911aec4bdaa779b4a9ad97de58486ba", - "app_vm_commit": "00706079fa2dbd52e208154a90929c259c95b63a40d02cb1ceb4efc746011db5", - "user_public_values": "0000000000000000000000000000000000000000000000000000000000000000", - "proof_data": { - "accumulator": "0000000000000000000000000000000000000000005ac76df03787d3511e486d000000000000000000000000000000000000000000fed68872f2718456b3bff9000000000000000000000000000000000000000000000bae0013a4ee35394de00000000000000000000000000000000000000000008897a700820ac070db6ef60000000000000000000000000000000000000000004f05881a81153a01d008b0000000000000000000000000000000000000000000001df4dc4d3ea098837ba60000000000000000000000000000000000000000001082aeb50e030f8e0b23e9000000000000000000000000000000000000000000dfa8a1181b4df766ede2df0000000000000000000000000000000000000000000000e0fabcadb994fbd76f000000000000000000000000000000000000000000fcd115e1abcac231085342000000000000000000000000000000000000000000a64501938739672fdb04a20000000000000000000000000000000000000000000016417efaf8ee7458015d", - "proof": "14bcb42137535ded0fac649092ffc028e8fa0bf42f59313a57fcb499f6a663fe10d11afe94b79a56e4eac9eabc17111606e9c71d9ac269197c91c0a585422e2407ba6a1bfd7f192beb08332e7003c19547d670c1cdedbb7810fc6c43f142930d289206dbc2d6689ec4ba6f9585bea88fea56344ba2d6eac74d93d0a4cacbcc79210fbd74d80fba2e26207c12ac104e17ef047804fc3e93f7498ee1a1803f76fe1a395711b7608c24f6c487affe9f11e5a46499e2e7bd1f41005143c2ca0b006e166c8bb3c7351b0deabb70ebb86934794351570c672bb18a4e394ecd1a6e15ab1adfc1f1ec009ce7cc923ef7bc5e7f6d7d0ca328124f80f9eb821d6ec48c308a257f9cd698cea21fd0738049b105e848dc3d22faef26659359db4c1b7a42f0ec252138cee9f360d7921fa3fad485c48543cf9b0bf3fdc3baccd0d65ca289d97213b32b68397086286e62877868c907f034163fccbc22e27786968e12bdd93e82261ae437e1c146ab0e73a5ad68dfd36a5c8dacfa81148866e67f8e730168ce2e10de1dce95a6e1c87b0a4d5091c9894fd5338317a4eae7158c83c05861a73b37084c6c3aba9a21cd776a2fbceb19cc7f4597465c839c68ea67228a691ee9cd062a33c355ab039ab7b0ca6c314d77991271aa479b6a5e1e0b02a613ae072498eb1727575e4308aa74649fe935bfbb377aa1978ce0ba30ac7a5a091572aa03c958138c62fe2414cfefb821b072a90f3d9ce7954b7a6040ee3d1ba8a77d828e17212caa6b1c55ca92ed5f404d3d8fe1bcf4996e2cad3e56be0aa3a3b04a8d521f97213543a79e98baa7e4cc0b6be5ef6751c5ebe5cee508d10f21c1e3335de8bee11e5a44d3f854d60fc8209e9ae1d4fe91081b30783c2b8a6e0ac2eb2fc32a893a171dc6472fff4da48c7aacad8516051b4a4b98360419a11e5909c236ea1334ab0b3c7612184662aea1924a3209c13dc12c37c580933cd1fac2318636d78cd2c8017bd19a006ed698e22202109abe8e9c0afda9e60882aba0a866d7f3a75bcd630f4d461b787c7b3180144186320796b9141272780061a862a24d083db95a1db513a14115e571350d3114beb134851c0a5fb9361a36c1ffc88d2ce50b6f8597aa09360b81f8ede3820ea328b3844e5efe9649ddb4696e84fd45a78afd4c7063fa1fe23baf867e52475e3a66962ae16c7b2929f1947eb0b4db4bf9a27793cb71aa295a5bc0a3819d7fdfe8f135f049c06c2f9ce591e03c948d56911746c2ff097919e6e790f4c5c1804349017c0372cae6ec988fde5a853e319e84a1772ffb7a2d024b33f4d47d1d5c09b0dbf4c18a20fddbb44d119eb5a036a511b5efe17be69c0770c28bd2c411a82a083ca56cf0f53483e6eaf87f8fe1431ef0185e72a004cd22aeca87c28eab1966e894d83032ae2e7b1fdb0a7065747a7782f31443c333620657e528ec046b45fc84cbff90ede10a68b127b63e49871e5c1aff09469b101e055d71678c0a457861247f3d9097ed953fe970b84dac624793a5e5a85a1ed96522a6b03ed4970fe24b02de063fc420ebb1613d478d566b2104de1afdfeefc82e1d3c219655d4a824961d73c7701d2885cbf7d53a9d033273149623a7aa38eab90c3d09a92f9b760f0f9635517189d7cdad9a48afc92b6259c17992ad2ee443670d05dbcdcf7676695c57a87d56000c9cf930e848375707fe67b13f6fdff2be110315d6aff634cf9f5dbcecb4334583873b6e7b4a772b7635b6307bd2104f0e2c01348ccacb9bffac92356647270566426b435957b6bb0a929a1c10c45fd130ad1e0522d7efafd276fdebbce4c8fbd0d0bd9c591fb72a77a734cc82949e47975412f60616fdee9cf7cbb814e6d7966e7bbb1be1150f6eaa19418ee80525629d28000319eff4bb954d8bd74d24daedebb0827d60958fa40d0bd51413e1e13830fe" - } -} \ No newline at end of file diff --git a/test/v1.1/OpenVmHalo2Verifer.t.sol b/test/v1.2/OpenVmHalo2Verifer.t.sol similarity index 97% rename from test/v1.1/OpenVmHalo2Verifer.t.sol rename to test/v1.2/OpenVmHalo2Verifer.t.sol index c4071d9..ce87f8f 100644 --- a/test/v1.1/OpenVmHalo2Verifer.t.sol +++ b/test/v1.2/OpenVmHalo2Verifer.t.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity 0.8.19; -import { OpenVmHalo2Verifier } from "../../src/v1.1/OpenVmHalo2Verifier.sol"; +import { OpenVmHalo2Verifier } from "../../src/v1.2/OpenVmHalo2Verifier.sol"; import { LibString } from "../helpers/LibString.sol"; import { Test, console2, safeconsole as console } from "forge-std/Test.sol"; @@ -26,7 +26,7 @@ contract OpenVmHalo2VerifierTest is Test { } function test_ValidProofVerifies() public view { - string memory evmProofJson = vm.readFile("test/v1.1/evm.proof"); + string memory evmProofJson = vm.readFile("test/v1.2/evm.proof"); bytes32 _appExeCommit = vm.parseJsonBytes32(evmProofJson, ".app_exe_commit"); bytes32 _appVmCommit = vm.parseJsonBytes32(evmProofJson, ".app_vm_commit"); bytes memory _guestPvs = vm.parseJsonBytes(evmProofJson, ".user_public_values"); diff --git a/test/v1.2/evm.proof b/test/v1.2/evm.proof new file mode 100644 index 0000000..5048ca9 --- /dev/null +++ b/test/v1.2/evm.proof @@ -0,0 +1 @@ +{"app_exe_commit":"00303f848c4546ece61a1ad1732770e1c911aec4bdaa779b4a9ad97de58486ba","app_vm_commit":"0094295cb5d90deb2b28cab4d658dab0fdc2922c4e9c10305bbf277c8d29d881","user_public_values":"0000000000000000000000000000000000000000000000000000000000000000","proof_data":{"accumulator":"000000000000000000000000000000000000000000bace448d15c3d57cfde38f000000000000000000000000000000000000000000e0e60db460628acceff898000000000000000000000000000000000000000000000fef15e56ea1ee4bffa90000000000000000000000000000000000000000003aee52481ab88ccaad52ff000000000000000000000000000000000000000000eea3b94f90da101abb0840000000000000000000000000000000000000000000000c38014bffd629d87be4000000000000000000000000000000000000000000f258d435d75354789c52fc00000000000000000000000000000000000000000006eb3be0e6835e307ce786000000000000000000000000000000000000000000001f17bf0331fb267100470000000000000000000000000000000000000000009fe040d775be0ee16489d50000000000000000000000000000000000000000008e92d6ebb9ab4de44f348b000000000000000000000000000000000000000000000ba7d28a04279118c715","proof":"08720ceceda3f128e4f36b532e8cd079d983b2187f799f59ae0f85310a166cca1e48ee4302b5dc467e5f45e53ea6b4a55ea49e31a48a6b1c35569136c647fc3a0560baae1a0ee7e22da623b2d59d60e771f979a7391d9ecd067038be494bee192e024aa8c6b7225ae82085631646dcdc2113d29f68faa9e60520e2c657d4c2e30aad07f8ff521251bf3c8f06c202a921677b159d67413e131b56153172dba78c02fb2273e1768d493dd1305ee99825c7bdeddd09de12fec017ef6f32e36ddfcc1433b2fb12476ed619835eb72e077a2269b83d67f63ad29cf74c10a8effaa149174381ee94dd7db972bb2f3a450d99254f66636341f88b5aec7bed766514b2fb03299b121ce5f18538abf996341cb2f7df67f3b32e10e37f8aa001d41aa7624824a46b1e3d0dab848c6a40bbdd9bc84ac2e46432239f3957d530154a784989bd273eff04ec82a0614c523b292de864614ad989f2ae367625136892347a275c7223f69716f69239a9bb557f7d293b7f5fee4a1947a7520dee06847bb47b352df81e1ee7051717e1dc8e7aacfe4fd375b10623c92e4e23fd661eb3810dda4c5f3607dfed58d34c5974ee275adce6f7f4f65a399793e5ad182edf35e012bfa6ebf027ad4b5d2d069be618a63d6ac6b06990e7001f9807d2e237d2abd53bde8087bc02e4c101abedb7d29aec59b7299e81a8be059c0de02147a7387ddb249d6152722a6237d5bd04b82339ce4ade9a822413ac26eecfa709f5a61afad9723ada1d3e14364726d0fb69acfdd058eb487603311c9caf07ea782936786bab5e80944c4f02064f0476a88a6b0a91d5567100b7302ffd621695c6b7a89013fa929dba576005d84ffe3d8fac002341b7068a985bd50cf16ac42fa8834778509e3ba922b45c093c118ca684b339d47100421719574f7176f8d5635f7eec99b78ef5fdfa67fb1446d962e5c1183ba0a72e3e6bd783601e1b88dcf568ee3e0830a32a89c0fb522126c734128bf25743c4895a7929c15b29e02d9c5f2ecb345c41ba473db61ac5214fbf9f9de01888a1925e4e3895036bce363a9a26878e67b57e488b2d3382a00b4d6e467c6ee4dd963c1f179ab77323fa8eb7696d51d1991f8ead501af505a41df94716a54ade54f918d8efd0b7ae0f22f996e9641f4c0f7762ca464591ed811e4e2b0d57f92e889755d6261809798a87de86e74184205949c7c333d6a7de5319acdc149019c11f9da0e00efd0bbdfc889f3440c65e56a0e49a3510d708b35e211b62fdad2a77807b18dc3d987d1649ef5741d94cec17bd72b19106d092637c141046b0012a026f0efabca1db9a1e68c47cc9c4df629fc5392329f196ae211c27dbc468121edd5f5abf09eec244492e0718fff030f706cab7b36abcf54f63a22f8910c67f2b2e99ee87dc5c91385a73898f73f791aa429ba7a0efc2d3e4d24727ccc35f51e57a5be03be2b473dce3acf851efd1f34c22f86c52d7f8879e1d100bdeacde026aa99e0972d3fd2cb8fec7c6c29ac7b4850d0d2affd800b76aa17e05ab42d72d8dcc719ade24e481cd5ed98ab5e7d3914db9d8a6bd6edf5edcaeb20687c332b58b1577c0a72baaa430cf436dcec2ac515247a6503983c1aab219581a8103d3ebd9f6de1400b5450d97325ac03653fdbed7c89d2906ba9d5f2cf57c2875397de3d9ca0205603044bf9e92cec4a1f1d8a71d6e30a3c03d654cef696224428bc64e46a73bc8aeaea2a58f170503b4754d686d1a2572ba4949cc66b5de2d667186e12a438df1ff2ae6aaa16b3abd5566fe9c252af8af9b6505b3066b7a100f0d3123e9fe7c23abb54b8aec856a857185b1c2eb4a0b1c7f48fd359a009c209a96d625d401ae8607a6ea3a172d6707432d544bfad528a79c49f3e9fdd086131e2e6da0aa3febf0d782f4ec410c889287a008ad0d4932f60199becb396db7"}} \ No newline at end of file