From 7ebd6edc14f4f7a528669bd1caa0db491230767f Mon Sep 17 00:00:00 2001 From: David Date: Fri, 24 Feb 2023 19:48:33 +0800 Subject: [PATCH] feat: update PlonkVerifier --- .../libs/yul/PlonkVerifier_10_txs.yulp | 64 +++++++++---------- .../libs/yul/PlonkVerifier_80_txs.yulp | 62 +++++++++--------- packages/protocol/test/data/test_proof.json | 6 +- 3 files changed, 66 insertions(+), 66 deletions(-) diff --git a/packages/protocol/contracts/libs/yul/PlonkVerifier_10_txs.yulp b/packages/protocol/contracts/libs/yul/PlonkVerifier_10_txs.yulp index 2e90fef1586..edb031b0c52 100644 --- a/packages/protocol/contracts/libs/yul/PlonkVerifier_10_txs.yulp +++ b/packages/protocol/contracts/libs/yul/PlonkVerifier_10_txs.yulp @@ -46,7 +46,7 @@ object "plonk_verifier" { } mstore(0x20, mod(calldataload(0x0), f_q)) mstore(0x40, mod(calldataload(0x20), f_q)) -mstore(0x0, 17372798237753114595580418880396159109249363809265436712157434780866952855241) +mstore(0x0, 3067907949222900551913553498849892226635280613088758012043891418197569392443) { let x := calldataload(0x40) @@ -1776,8 +1776,8 @@ mstore(0x9bc0, mload(0x9ae0)) mstore(0x9c00, mload(0x9b60)) mstore(0x9c20, mload(0x9b80)) success := and(eq(staticcall(gas(), 0x6, 0x9bc0, 0x80, 0x9bc0, 0x40), 1), success) -mstore(0x9c40, 0x1b0b29c25c50d9867cc7c9842ccb5c04dbde02f64a1f3c99c044cb2759f83c83) - mstore(0x9c60, 0x237b62160acb880e9c6cdc7b55b159d41c89b8edac88fc529478afa21400ae5b) +mstore(0x9c40, 0x24142897d89fae71ddba98fbfd32aeb5ca58035fe36a2ce8ba1f220c04bfd2ed) + mstore(0x9c60, 0x2f6c0d7716b92b04ec8c8915af38d26e334e48b1cf0244c3f69a6e2fd0b66c14) mstore(0x9c80, mload(0x6d00)) success := and(eq(staticcall(gas(), 0x7, 0x9c40, 0x60, 0x9c40, 0x40), 1), success) mstore(0x9ca0, mload(0x9bc0)) @@ -1785,8 +1785,8 @@ mstore(0x9ca0, mload(0x9bc0)) mstore(0x9ce0, mload(0x9c40)) mstore(0x9d00, mload(0x9c60)) success := and(eq(staticcall(gas(), 0x6, 0x9ca0, 0x80, 0x9ca0, 0x40), 1), success) -mstore(0x9d20, 0x0ace1851a038ae306453d5bb714cd9ccd945c35c283ee4269eb451e624cefcd1) - mstore(0x9d40, 0x0f7c2530eeef28095d71e131d3223962c71b24c722bb5491c5409f566e4e26c6) +mstore(0x9d20, 0x02a8c8f304367570fb6ff09717c0c3489fd6fa0b18a43ec30f1738e23e44b7af) + mstore(0x9d40, 0x1630014e120ce66dc277145e1fa4508b450008e8b4761ff2095958af4594a8e0) mstore(0x9d60, mload(0x6d20)) success := and(eq(staticcall(gas(), 0x7, 0x9d20, 0x60, 0x9d20, 0x40), 1), success) mstore(0x9d80, mload(0x9ca0)) @@ -1794,8 +1794,8 @@ mstore(0x9d80, mload(0x9ca0)) mstore(0x9dc0, mload(0x9d20)) mstore(0x9de0, mload(0x9d40)) success := and(eq(staticcall(gas(), 0x6, 0x9d80, 0x80, 0x9d80, 0x40), 1), success) -mstore(0x9e00, 0x18c850fc70445314ae3c26ea43cfaea41d6365b400fa12131e20c130646226fd) - mstore(0x9e20, 0x0cdf5b9dacaf4d97ecd930cd080d09cf4648cb2786f3aa600d66772dc0fed219) +mstore(0x9e00, 0x1586c9888eeb27905be7f2344fe943d4b708c53a9ae1d6d659371ab13c5db842) + mstore(0x9e20, 0x03f3a8dab706905925bc52be8ecd37937b87c3688765969fa811fd6b8454b963) mstore(0x9e40, mload(0x6d40)) success := and(eq(staticcall(gas(), 0x7, 0x9e00, 0x60, 0x9e00, 0x40), 1), success) mstore(0x9e60, mload(0x9d80)) @@ -1803,8 +1803,8 @@ mstore(0x9e60, mload(0x9d80)) mstore(0x9ea0, mload(0x9e00)) mstore(0x9ec0, mload(0x9e20)) success := and(eq(staticcall(gas(), 0x6, 0x9e60, 0x80, 0x9e60, 0x40), 1), success) -mstore(0x9ee0, 0x2ff64dd0a085d9e112b3155dff7b9c4a28cb5539d48021b4bfcb6e61b8767983) - mstore(0x9f00, 0x25b3846e586e14946ce4ad4bc963b8b2efabfeebdefbd404e78de88d5d4b6df2) +mstore(0x9ee0, 0x06f43427764dc375d3827fa2765b7efb195c96c4e3a9f115913dbaef4b4605cd) + mstore(0x9f00, 0x214843cd8458f8b31330ffbda93d2fb8e8c92e3fc96f64e23f797f30fc9202ef) mstore(0x9f20, mload(0x6d60)) success := and(eq(staticcall(gas(), 0x7, 0x9ee0, 0x60, 0x9ee0, 0x40), 1), success) mstore(0x9f40, mload(0x9e60)) @@ -1812,8 +1812,8 @@ mstore(0x9f40, mload(0x9e60)) mstore(0x9f80, mload(0x9ee0)) mstore(0x9fa0, mload(0x9f00)) success := and(eq(staticcall(gas(), 0x6, 0x9f40, 0x80, 0x9f40, 0x40), 1), success) -mstore(0x9fc0, 0x2ef513095f4c531054c6c519442de199720857b5cfa6071c728355ae66c0591b) - mstore(0x9fe0, 0x0c19d9267979b9d715222e302296a2fb1aff01cf138e0177a0575d8c117cd536) +mstore(0x9fc0, 0x299e17546931ab9afbbf988216d73c1a0b7a886302299f9e756bcbb3ef8d4b77) + mstore(0x9fe0, 0x07d5b69d3b18c011b16d9f747f716fd5502b343c14f6d20b2d1f56a9ec95dc6d) mstore(0xa000, mload(0x6d80)) success := and(eq(staticcall(gas(), 0x7, 0x9fc0, 0x60, 0x9fc0, 0x40), 1), success) mstore(0xa020, mload(0x9f40)) @@ -1821,8 +1821,8 @@ mstore(0xa020, mload(0x9f40)) mstore(0xa060, mload(0x9fc0)) mstore(0xa080, mload(0x9fe0)) success := and(eq(staticcall(gas(), 0x6, 0xa020, 0x80, 0xa020, 0x40), 1), success) -mstore(0xa0a0, 0x1a066738c7bd0d43e754efadddfb3e5aca9bd4c7d2fde351382831c822bf19c0) - mstore(0xa0c0, 0x126c5fd21c6089a7153aaa043fcbbf887fc88b4740f12f9e955fda943be5770f) +mstore(0xa0a0, 0x00cf7441bfe23c289dc0ead64c4f446ff2f7056705f726048e4ce251f2b872db) + mstore(0xa0c0, 0x119e90dae672089175b8e619f66554864963becad6c98b6f076a44a58643b5be) mstore(0xa0e0, mload(0x6da0)) success := and(eq(staticcall(gas(), 0x7, 0xa0a0, 0x60, 0xa0a0, 0x40), 1), success) mstore(0xa100, mload(0xa020)) @@ -1830,8 +1830,8 @@ mstore(0xa100, mload(0xa020)) mstore(0xa140, mload(0xa0a0)) mstore(0xa160, mload(0xa0c0)) success := and(eq(staticcall(gas(), 0x6, 0xa100, 0x80, 0xa100, 0x40), 1), success) -mstore(0xa180, 0x27cf82489c0189a1d972d8b161021f0dbcd2dd3b67537bac1249e12e30547815) - mstore(0xa1a0, 0x0e71921fe0ac392e3c551c26dbd238ccc4663f6f511627a2e9da71346ef2dc27) +mstore(0xa180, 0x2855a61969e646e3ab0bf81a6fda391ae85d43675daf5c833d418a79566801ab) + mstore(0xa1a0, 0x1b5edecaff84a5748dca041b2f5be5f00aafc0b587f6abf9c978a861e85ae0cd) mstore(0xa1c0, mload(0x6dc0)) success := and(eq(staticcall(gas(), 0x7, 0xa180, 0x60, 0xa180, 0x40), 1), success) mstore(0xa1e0, mload(0xa100)) @@ -1839,8 +1839,8 @@ mstore(0xa1e0, mload(0xa100)) mstore(0xa220, mload(0xa180)) mstore(0xa240, mload(0xa1a0)) success := and(eq(staticcall(gas(), 0x6, 0xa1e0, 0x80, 0xa1e0, 0x40), 1), success) -mstore(0xa260, 0x1a0cf393bb856f1414baaae18658d9ce10b0a6c7b86bff9da766edc6a6ca7ade) - mstore(0xa280, 0x2d9ddf65bc706ec0f97f6a7d716bc44e9591c039febb27fe30988fcb66000a8e) +mstore(0xa260, 0x145f584377bc6ae8b501aef339707488d83d7c7264ade6443aa8b129435f0f03) + mstore(0xa280, 0x22054ed9c7da14500ca4c0a0ef50875365f86adf74ec5fb33318f06d13900962) mstore(0xa2a0, mload(0x6de0)) success := and(eq(staticcall(gas(), 0x7, 0xa260, 0x60, 0xa260, 0x40), 1), success) mstore(0xa2c0, mload(0xa1e0)) @@ -1848,8 +1848,8 @@ mstore(0xa2c0, mload(0xa1e0)) mstore(0xa300, mload(0xa260)) mstore(0xa320, mload(0xa280)) success := and(eq(staticcall(gas(), 0x6, 0xa2c0, 0x80, 0xa2c0, 0x40), 1), success) -mstore(0xa340, 0x09a32cd50c4ad8f06262a106b384418439838c2db89e46547936a6e9f55e1861) - mstore(0xa360, 0x1811dbce682f37fdcc5a5f73278223f72db464fd7e456573a78f7a3ca60e3d46) +mstore(0xa340, 0x008640f80880ee80d0a45a44184c03295c8461d1319a92d492aa9a9c5a06f906) + mstore(0xa360, 0x0dc16d263c5e24f8fdb0f31f0a19ab259be0581a35e068a9272e50f9dae6e1a4) mstore(0xa380, mload(0x6e00)) success := and(eq(staticcall(gas(), 0x7, 0xa340, 0x60, 0xa340, 0x40), 1), success) mstore(0xa3a0, mload(0xa2c0)) @@ -1857,8 +1857,8 @@ mstore(0xa3a0, mload(0xa2c0)) mstore(0xa3e0, mload(0xa340)) mstore(0xa400, mload(0xa360)) success := and(eq(staticcall(gas(), 0x6, 0xa3a0, 0x80, 0xa3a0, 0x40), 1), success) -mstore(0xa420, 0x2776df6ef17ec3218c44017548a49fb2cd0c2a858092f16651ddf103340b44e4) - mstore(0xa440, 0x17022d7c848db83c7f09ae48f7a91f98a891c9c0caf27f0e8c202c88b99903b2) +mstore(0xa420, 0x2b71958e4c46b43dac5a9e114648ce015d0ae18e0b554f5d652e2a2e46f8b719) + mstore(0xa440, 0x16eb2b964c384d0f73302c33c058864839e2edb805d2ab9420242d7867f06b2a) mstore(0xa460, mload(0x6e20)) success := and(eq(staticcall(gas(), 0x7, 0xa420, 0x60, 0xa420, 0x40), 1), success) mstore(0xa480, mload(0xa3a0)) @@ -1866,8 +1866,8 @@ mstore(0xa480, mload(0xa3a0)) mstore(0xa4c0, mload(0xa420)) mstore(0xa4e0, mload(0xa440)) success := and(eq(staticcall(gas(), 0x6, 0xa480, 0x80, 0xa480, 0x40), 1), success) -mstore(0xa500, 0x0127df15e164f40fb0f2577ddcf44bd6977bd37fd16c5238cb6c4679683f8c93) - mstore(0xa520, 0x305140fb6cf1094df4cc45fe89f765576f4ed96c6205a4db594566fbc3e20e3d) +mstore(0xa500, 0x2997a9015537f4e44a8e7633288a56fa1cc3521310d0156103346589ab214e99) + mstore(0xa520, 0x20cd7e98721ea1e2b93799024a840f0071612a5baa0e9ccab52c9b366bfcb96a) mstore(0xa540, mload(0x6e40)) success := and(eq(staticcall(gas(), 0x7, 0xa500, 0x60, 0xa500, 0x40), 1), success) mstore(0xa560, mload(0xa480)) @@ -1875,8 +1875,8 @@ mstore(0xa560, mload(0xa480)) mstore(0xa5a0, mload(0xa500)) mstore(0xa5c0, mload(0xa520)) success := and(eq(staticcall(gas(), 0x6, 0xa560, 0x80, 0xa560, 0x40), 1), success) -mstore(0xa5e0, 0x17ad80dc4e5b8aae96944d7eb00c5c7aacb0f023052728fa8678415f8f6a8e90) - mstore(0xa600, 0x2df63e304e1096fa8613e5353bcaa0b54baa3dd58b67c0c76b95ec6a73d69916) +mstore(0xa5e0, 0x206a6e4cef8214fe6edae0fb548fcf252de1ee7883f3541e2c44ebace7064016) + mstore(0xa600, 0x1d4041518e0e652ecabc0d5dcb503a30ffc2410def694377db33f4f0d9a69eca) mstore(0xa620, mload(0x6e60)) success := and(eq(staticcall(gas(), 0x7, 0xa5e0, 0x60, 0xa5e0, 0x40), 1), success) mstore(0xa640, mload(0xa560)) @@ -1884,8 +1884,8 @@ mstore(0xa640, mload(0xa560)) mstore(0xa680, mload(0xa5e0)) mstore(0xa6a0, mload(0xa600)) success := and(eq(staticcall(gas(), 0x6, 0xa640, 0x80, 0xa640, 0x40), 1), success) -mstore(0xa6c0, 0x03b5daead1eed111ab7c03d2d3a5d484552cd9754fed733a94250c233a8ef2d0) - mstore(0xa6e0, 0x1be5f76b62b04dd7cea6185161ae86fed9ec271717fe78a3a9b3c4734742bd7a) +mstore(0xa6c0, 0x129fb70a315e163344ed2808166e062289b5b90479420fde806c5ce2446560a3) + mstore(0xa6e0, 0x29f4eb812d6e1f999b96f899870af8e76fd9d06d0d76a1e6f8fb7810b23b64c6) mstore(0xa700, mload(0x6e80)) success := and(eq(staticcall(gas(), 0x7, 0xa6c0, 0x60, 0xa6c0, 0x40), 1), success) mstore(0xa720, mload(0xa640)) @@ -2135,10 +2135,10 @@ mstore(0xbea0, 0x198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c mstore(0xbf00, 0x12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa) mstore(0xbf20, mload(0xbde0)) mstore(0xbf40, mload(0xbe00)) -mstore(0xbf60, 0x14631798b621d5bd412c165d8abc38f46dead3be96362907e4912b28b6fd11bc) - mstore(0xbf80, 0x0e134e99deb76ba1c9bd801150a9894b048a1a275d6c469543f19a417a60c9da) - mstore(0xbfa0, 0x2904d8151b69e71a466ba4b6b46fce5a2b81857fac86ac132756f144a0a11e3a) - mstore(0xbfc0, 0x2c2ed8a68646af208c79efe7cfbb2bdf8d9b7e9b9e447eebababe9cf5fc61ac4) +mstore(0xbf60, 0x23154cd76fc1a1456722405944669193fa5bb5dca6bf2d82a753c2bd4a301844) + mstore(0xbf80, 0x08faab3e0053f08c27e98f5f55d9e6828d5bec3ca616b4f8014ba8a57f087bec) + mstore(0xbfa0, 0x2491c974cda41f8748723ea2e5235649e0b01b17471d0152d93be5a0865f3f3e) + mstore(0xbfc0, 0x078a2487b80fcbfd3b4036c306540ec111c685b7842bd153042a4357b30db70a) success := and(eq(staticcall(gas(), 0x8, 0xbe60, 0x180, 0xbe60, 0x20), 1), success) success := and(eq(mload(0xbe60), 1), success) @@ -2147,4 +2147,4 @@ success := and(eq(mload(0xbe60), 1), success) } } -} \ No newline at end of file +} diff --git a/packages/protocol/contracts/libs/yul/PlonkVerifier_80_txs.yulp b/packages/protocol/contracts/libs/yul/PlonkVerifier_80_txs.yulp index 0bd25834a43..db9ab392d12 100644 --- a/packages/protocol/contracts/libs/yul/PlonkVerifier_80_txs.yulp +++ b/packages/protocol/contracts/libs/yul/PlonkVerifier_80_txs.yulp @@ -46,7 +46,7 @@ object "plonk_verifier" { } mstore(0x20, mod(calldataload(0x0), f_q)) mstore(0x40, mod(calldataload(0x20), f_q)) -mstore(0x0, 7804635701739946657972686797502865190099854511026950215371292870019951750222) +mstore(0x0, 7962866457030187900449294305274824544206991306141733224825884861609114901166) { let x := calldataload(0x40) @@ -1778,8 +1778,8 @@ mstore(0x9c00, mload(0x9b20)) mstore(0x9c40, mload(0x9ba0)) mstore(0x9c60, mload(0x9bc0)) success := and(eq(staticcall(gas(), 0x6, 0x9c00, 0x80, 0x9c00, 0x40), 1), success) -mstore(0x9c80, 0x26b1da01fed1ba888fcfa30aaeab72e8214ec70fdb829b4ddba6e6f7b4a15818) - mstore(0x9ca0, 0x2f37b901947120f75469067844941ef2d809b74fe87f5305c24c368c08593476) +mstore(0x9c80, 0x24df3a8ab6d23ed7008fbc06251e90863a4315ffc6c1cb8709eaaa3cf263faa5) + mstore(0x9ca0, 0x1095bd5aa580d4456d7475fd0544191c4db8c131f5edbdb8526406874a2256fe) mstore(0x9cc0, mload(0x6d40)) success := and(eq(staticcall(gas(), 0x7, 0x9c80, 0x60, 0x9c80, 0x40), 1), success) mstore(0x9ce0, mload(0x9c00)) @@ -1787,8 +1787,8 @@ mstore(0x9ce0, mload(0x9c00)) mstore(0x9d20, mload(0x9c80)) mstore(0x9d40, mload(0x9ca0)) success := and(eq(staticcall(gas(), 0x6, 0x9ce0, 0x80, 0x9ce0, 0x40), 1), success) -mstore(0x9d60, 0x1709c16602e77e763422efcd98f83fbcf7dcd5317d2be5cc15e5057a1e953794) - mstore(0x9d80, 0x03ec53be9760a8a74a3c9c373ed984627aefbc836929a5424d15ced4c4ddb1c6) +mstore(0x9d60, 0x11e06a0924bc91df420cc28907921d96d30e06732532056355b159bfab487599) + mstore(0x9d80, 0x0146dba1ad065c26ee3890d2e260e0a486b77a7024b700a0c4d2f42546526a92) mstore(0x9da0, mload(0x6d60)) success := and(eq(staticcall(gas(), 0x7, 0x9d60, 0x60, 0x9d60, 0x40), 1), success) mstore(0x9dc0, mload(0x9ce0)) @@ -1796,8 +1796,8 @@ mstore(0x9dc0, mload(0x9ce0)) mstore(0x9e00, mload(0x9d60)) mstore(0x9e20, mload(0x9d80)) success := and(eq(staticcall(gas(), 0x6, 0x9dc0, 0x80, 0x9dc0, 0x40), 1), success) -mstore(0x9e40, 0x1634173d81bbd5df54fddf6e314c985484afd6217b6bb58d9c33a67bd7ffd001) - mstore(0x9e60, 0x064a71f19afbd878f47c3806566e99cfbc597b48cc1debe79cac5cd0b06ac321) +mstore(0x9e40, 0x2939459d1b84dfbd52b2e2b64f0a9e34a92f902561cfefa96e9c34dd7d24c5ed) + mstore(0x9e60, 0x0863a7b24ba92c51042ec70c09561f56de7508951df59c9b2405868b3fb1e398) mstore(0x9e80, mload(0x6d80)) success := and(eq(staticcall(gas(), 0x7, 0x9e40, 0x60, 0x9e40, 0x40), 1), success) mstore(0x9ea0, mload(0x9dc0)) @@ -1805,8 +1805,8 @@ mstore(0x9ea0, mload(0x9dc0)) mstore(0x9ee0, mload(0x9e40)) mstore(0x9f00, mload(0x9e60)) success := and(eq(staticcall(gas(), 0x6, 0x9ea0, 0x80, 0x9ea0, 0x40), 1), success) -mstore(0x9f20, 0x046adc115695ff6489265428e36ff9a6866b66e1e86d532538421819cf64ea3d) - mstore(0x9f40, 0x3058d13e47426861a6e1e753a94c20f0879bef97c5bd2587f5e9d60a5b1acbb0) +mstore(0x9f20, 0x2689485a8adaae5d72519b79d073c50281c6c6f2edb50dfc43381e6685b4ed48) + mstore(0x9f40, 0x010475e5addbb2801fe3e12bff0c16cd59dcbc00612e487225531caf1fe73384) mstore(0x9f60, mload(0x6da0)) success := and(eq(staticcall(gas(), 0x7, 0x9f20, 0x60, 0x9f20, 0x40), 1), success) mstore(0x9f80, mload(0x9ea0)) @@ -1814,8 +1814,8 @@ mstore(0x9f80, mload(0x9ea0)) mstore(0x9fc0, mload(0x9f20)) mstore(0x9fe0, mload(0x9f40)) success := and(eq(staticcall(gas(), 0x6, 0x9f80, 0x80, 0x9f80, 0x40), 1), success) -mstore(0xa000, 0x1718fb37596ea1c3444e88770cf3e3665f2e6e25d3f66ced9aee4ae755c80fff) - mstore(0xa020, 0x1c91328e778b9f7c3957cc9813b09f19ecd08c3d6cb63402cf88d8bf5a4406ed) +mstore(0xa000, 0x0c25af76635e4d86530f59602968f73c64d4e9321da480a656f8fdd45cc8f53d) + mstore(0xa020, 0x10a7b87fb011847118106b7ce456d3d82fbe5034bdb61ab81502d1eaa3c45fa3) mstore(0xa040, mload(0x6dc0)) success := and(eq(staticcall(gas(), 0x7, 0xa000, 0x60, 0xa000, 0x40), 1), success) mstore(0xa060, mload(0x9f80)) @@ -1823,8 +1823,8 @@ mstore(0xa060, mload(0x9f80)) mstore(0xa0a0, mload(0xa000)) mstore(0xa0c0, mload(0xa020)) success := and(eq(staticcall(gas(), 0x6, 0xa060, 0x80, 0xa060, 0x40), 1), success) -mstore(0xa0e0, 0x1a9767c2c2a115d6d8dfb93e2383e2ab84c2ac1af95429dcba0b30c0caa991fb) - mstore(0xa100, 0x1df22d4616ff1f1730f40c0dfd7b8a58d92d0a3e9e29eb25b8084c88465b6dc7) +mstore(0xa0e0, 0x12e077eb3e8e88c82880144d3f5894779a9584598fdda362831095fa1a6ba204) + mstore(0xa100, 0x2d45ffd9c2d2044b9fc213d2f2dbedacb1aebfff563660e84e5ad8b54cbcb693) mstore(0xa120, mload(0x6de0)) success := and(eq(staticcall(gas(), 0x7, 0xa0e0, 0x60, 0xa0e0, 0x40), 1), success) mstore(0xa140, mload(0xa060)) @@ -1832,8 +1832,8 @@ mstore(0xa140, mload(0xa060)) mstore(0xa180, mload(0xa0e0)) mstore(0xa1a0, mload(0xa100)) success := and(eq(staticcall(gas(), 0x6, 0xa140, 0x80, 0xa140, 0x40), 1), success) -mstore(0xa1c0, 0x1176abbd4222365c8309aa12e491612edd6668769a2d2a57e79d5b70d53b3d98) - mstore(0xa1e0, 0x2ee36ca43fbd62f6e5827f7c59d5861f3c2c48ffb1975df6766a1e0ec883539e) +mstore(0xa1c0, 0x2ccc53a35ecb8b9ba04f018af51c7105dbf1e843ff274293724d92af7e7b9a59) + mstore(0xa1e0, 0x1d0df54f408259311fa21d8b36cba2c62b3abe22df4e17bfe95563c5f879f66c) mstore(0xa200, mload(0x6e00)) success := and(eq(staticcall(gas(), 0x7, 0xa1c0, 0x60, 0xa1c0, 0x40), 1), success) mstore(0xa220, mload(0xa140)) @@ -1841,8 +1841,8 @@ mstore(0xa220, mload(0xa140)) mstore(0xa260, mload(0xa1c0)) mstore(0xa280, mload(0xa1e0)) success := and(eq(staticcall(gas(), 0x6, 0xa220, 0x80, 0xa220, 0x40), 1), success) -mstore(0xa2a0, 0x063c508c0c968f19f9fe8394df30158265cd0ee0af466d71f15c97f78635a588) - mstore(0xa2c0, 0x13408f8b23fed295b0d2882e4ad77bdec67e39b9a5a63dd921ca2a3ee3f829be) +mstore(0xa2a0, 0x25954e178b41c5a5ea51b78529c0347c55f74dbd9567e93f039da48a6c57ce4b) + mstore(0xa2c0, 0x281fcec79eaa4286501f23b19b0ee5862fa76e3d80e45f2ba39855348998421f) mstore(0xa2e0, mload(0x6e20)) success := and(eq(staticcall(gas(), 0x7, 0xa2a0, 0x60, 0xa2a0, 0x40), 1), success) mstore(0xa300, mload(0xa220)) @@ -1850,8 +1850,8 @@ mstore(0xa300, mload(0xa220)) mstore(0xa340, mload(0xa2a0)) mstore(0xa360, mload(0xa2c0)) success := and(eq(staticcall(gas(), 0x6, 0xa300, 0x80, 0xa300, 0x40), 1), success) -mstore(0xa380, 0x1e2d8eeded68c777c8e524821201f635cbdb2881b03ca95f01f9844bda2e87b5) - mstore(0xa3a0, 0x2486312dc432ed4e63ed30fc8153863b1d3db89c9153087e158c6ce67f41e1ae) +mstore(0xa380, 0x063db634d3b5aa1816c7aed5c6ca94aeec954fae84816926e7a4eb37d46d8b69) + mstore(0xa3a0, 0x305dffb58091ab4782b1acb501c30627debe6f65af453abccb629a9e831f7fd2) mstore(0xa3c0, mload(0x6e40)) success := and(eq(staticcall(gas(), 0x7, 0xa380, 0x60, 0xa380, 0x40), 1), success) mstore(0xa3e0, mload(0xa300)) @@ -1859,8 +1859,8 @@ mstore(0xa3e0, mload(0xa300)) mstore(0xa420, mload(0xa380)) mstore(0xa440, mload(0xa3a0)) success := and(eq(staticcall(gas(), 0x6, 0xa3e0, 0x80, 0xa3e0, 0x40), 1), success) -mstore(0xa460, 0x126e7b31ab400c93cbf2f356e7674a7ed90afd1a8a64e60899d3aca9629fdbf0) - mstore(0xa480, 0x0a489b986008f701dd3b69ffe56d51f6e4096fd69afea4c95a71e6e7efbf1f5e) +mstore(0xa460, 0x303421f60577d97ad890af5d687598764b4dbc7ebbd38f6f87141ab3d3c0c90d) + mstore(0xa480, 0x0c010206f470a5227883ef66d1812cf0c9e7bde01bec251d43babd9b9a5ece67) mstore(0xa4a0, mload(0x6e60)) success := and(eq(staticcall(gas(), 0x7, 0xa460, 0x60, 0xa460, 0x40), 1), success) mstore(0xa4c0, mload(0xa3e0)) @@ -1868,8 +1868,8 @@ mstore(0xa4c0, mload(0xa3e0)) mstore(0xa500, mload(0xa460)) mstore(0xa520, mload(0xa480)) success := and(eq(staticcall(gas(), 0x6, 0xa4c0, 0x80, 0xa4c0, 0x40), 1), success) -mstore(0xa540, 0x0c42cd05be2f52ac918223cd4304339fea08b63942d6bdae634563069401d8b3) - mstore(0xa560, 0x147c65ed796ec7fd1e221c680d05067d8c24e4b34fa29b51ba8b19b1ef35742e) +mstore(0xa540, 0x0ae9509ede46edc25972404ff41821a9b99feffc9fd2f6f03ee7998ad98b22ae) + mstore(0xa560, 0x17f2a82e6d096af1789755d8b76b086fbf847d30f57ca1e51961bab26f3edfde) mstore(0xa580, mload(0x6e80)) success := and(eq(staticcall(gas(), 0x7, 0xa540, 0x60, 0xa540, 0x40), 1), success) mstore(0xa5a0, mload(0xa4c0)) @@ -1877,8 +1877,8 @@ mstore(0xa5a0, mload(0xa4c0)) mstore(0xa5e0, mload(0xa540)) mstore(0xa600, mload(0xa560)) success := and(eq(staticcall(gas(), 0x6, 0xa5a0, 0x80, 0xa5a0, 0x40), 1), success) -mstore(0xa620, 0x292aa3336500b7b5d3c3c14ae45a64b7e93bbf8579654544e4fd420ec46fb22e) - mstore(0xa640, 0x12c0896a962f3eafca63202f303df9b8f5c9f52abeb5180707be4e9ac3f5217c) +mstore(0xa620, 0x1fe623708bdb08a3a91c99cbb2300524ddff5900478acc1c92a0ce667bd9bc96) + mstore(0xa640, 0x21f3a33809891f392e8b689bd3e297b9219eb277034f4b5382b17dc48c1f3179) mstore(0xa660, mload(0x6ea0)) success := and(eq(staticcall(gas(), 0x7, 0xa620, 0x60, 0xa620, 0x40), 1), success) mstore(0xa680, mload(0xa5a0)) @@ -1886,8 +1886,8 @@ mstore(0xa680, mload(0xa5a0)) mstore(0xa6c0, mload(0xa620)) mstore(0xa6e0, mload(0xa640)) success := and(eq(staticcall(gas(), 0x6, 0xa680, 0x80, 0xa680, 0x40), 1), success) -mstore(0xa700, 0x19ae08915ef65a1ca9da6668e14f8e27b19824ec5d50ac8d69880bc4fe6875fe) - mstore(0xa720, 0x098be6dd0c771fadd07da41b2023fdaf2393b22c9d21dbaa59a0c21ee9b40058) +mstore(0xa700, 0x2b5c7cd857cd49359078265f9adf88dd66c927e377518c197f93380702b1c3f3) + mstore(0xa720, 0x2fe1222224022cc639252fc4fb6acc20a4602140d123dcf64a7425d4091b1a39) mstore(0xa740, mload(0x6ec0)) success := and(eq(staticcall(gas(), 0x7, 0xa700, 0x60, 0xa700, 0x40), 1), success) mstore(0xa760, mload(0xa680)) @@ -2137,10 +2137,10 @@ mstore(0xbee0, 0x198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c mstore(0xbf40, 0x12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa) mstore(0xbf60, mload(0xbe20)) mstore(0xbf80, mload(0xbe40)) -mstore(0xbfa0, 0x1102991384f568e9c1a64164d06cd4e7cdd65392d758dfa7499a57f1a52e273c) - mstore(0xbfc0, 0x2ed6ae1c758a0efa8ce62e75d2c596f3b83586ff9f2e33139e6526a20f7e9cc9) - mstore(0xbfe0, 0x2d85ba3e31d4e33bdd16834a4479e5a03923494682dc74833efc0c5a2dee4b08) - mstore(0xc000, 0x2e92ee8c86b4fa11af10ecdc6dee7b7d57e363c011e14b1a9705910b98b96515) +mstore(0xbfa0, 0x03fecfd23d328341e7c37d832729014de9a532c74fa1e734832b9364afe54ff6) + mstore(0xbfc0, 0x1c409140357e6291196cff0168ffabc3272b2b7ff408e5e22698c7097abd3c8e) + mstore(0xbfe0, 0x26664eede2dc90d92950867bfd69fbb8e099bf8ad87665e7ae1b61ced474f8bb) + mstore(0xc000, 0x2b3f914b211ba74b0bb752fd46788410c534dff9de694623b784dbddd2f43858) success := and(eq(staticcall(gas(), 0x8, 0xbea0, 0x180, 0xbea0, 0x20), 1), success) success := and(eq(mload(0xbea0), 1), success) diff --git a/packages/protocol/test/data/test_proof.json b/packages/protocol/test/data/test_proof.json index 320d6f68bb3..e35722dc478 100644 --- a/packages/protocol/test/data/test_proof.json +++ b/packages/protocol/test/data/test_proof.json @@ -13,12 +13,12 @@ "circuit": { "duration": 291422, "instance": [ - "0x178088e2803cd970be75c496766c5f6d", - "0xb95a86e88dc107e8e5e661b1204c74f3" + "0xecbb89532da16c6aaba65173df994a0b", + "0xdc43ac5f0c4d96dda954d14935efd6a3" ], "k": 19, "label": "pi-600000", - "proof": "0x02f305df1f1057fb00521de477de9b5670721d249600fc075e53acde0a8f08a90b4f38a6cd7dbbcac0143142ebcf0217d9f6de0d5a54825618366e028c125dcd13684ab2551907a7d74855de1e8727ff9aa75adf1e1dbe4b02e58974cb0ba562188fd3e1fc72055b632c0adecd6b67a934a145d2e1faed0fbb2a0c77b60e781b2bd48a3fd170915cfbb2677abd9e9d9e972648f6c2726970f8a3c6de78978fa317d2faff167f512634f9a5642136ba649f392ecbcb5cd8f7f323db1582adff1515866c810153a2b0a6509b20cc892915bdc569b667e0707856127d2fb464f70000d1c1b1d7434838c3962fb842e59e8c141fb5f475b3c91bc2583224137668be24998ce4349eb6a6f994f6048a3a7431679b379a9339176e826eb5a42cc4fda2081682d3441d530a443e4a9e71100541729f94f9793a7d0fb56f14a929095f8600b6fe78a2679e95956a3b572727f176eb6bc5a0580cc86545e80183d1e4c3dc14047a8d27dc735858dcb25e48d606b6b8683540ba7b351bff9d67efc712da512f0a346876de52bb981022bacd4a58ecbff69cda8d892512f943d792cea240dc250da3d4579c2c793c4d27dd39c09cdde0f3c065bceb26fb082b8051e99a4dc0279c488940f442a1688f66e7085675e812fd94d08f53e6ca68e6cf0fcf4ec3cc0a2f83d43f0799486bbad707ec3e3b89f3bda76eea0a19616539b2d931f1fa4e04befcf5b4ccbc6d55be37894c7222d610ca10a0520639a99a69297c174704aa190d71186b3e08c2ef076f778b9f242706a7d2c840b8af3703ea47659e0614460dbc3cdad19eaf8bad396a078946d06126404796cb521798cf08afdbe017729a007779dff4431471b29f6a9751ce17dbb3eade45fb0249053628ed555782381119729890b437266ec5c6bdb781ed218077f6f7077ed0b5ad69b3b677c80e00722b2133d2c6eb452e0a2995e1c7353b3eea3c72692465fdb6e36ca057cb395cfd05c81af4b411d62fd647d0d67874fb72e86224f45ad81fea284cf471dfa55343077b6a00bfd028111d13d75a21179ed0741240a71c610fc5a8c6a52bc6ecfbc71416fbe85ab05013482cf38ad15862030c18e4dadaaf17bc79bfe7b4fe31eb2e286ce0dc90e34d6f484bfe128601ab933111294cf6ea9386e9a7965ac1b317d229706afe75cfc37ae2702bd5e2989c78de0890f65818ea941a98add75f911b98004324a3dd917b418dcbda7d4672aa2820dffedd9ebb0268f1b2b419bef0bcd812f90404ae05d7bba4cbfb46e9e4d3a3878bf5ba99a4f91c2c2f41426fa941ba1e96d77d62d6a0003a43e84f00faa7729b46e3f1defe408237c3a28b6c1951be2c9fb78a6278d75d231aa1d5263d349329ea680fcb5e74b8f8d79557ec406d2b07eccb59921b25376123d1729e17768ed8e4ea90821add56b7d4807b4114610c1820d4312e28205529d82f7ed0d73e619422caccca937787b345129ba3df34ca0aa4a9a3c3efcfa25f8c0be0c4857d49d6472d19f09b1aa36fb817a66b08fe970cf99e65972365f4e80d97760e11d418f83cfe080b5bab2a263d753340d089b806695ff21317412ba8feb4359b1e6177cf8893a027be8b9a97a0ec836c3913e22da62d9e1c2f2a3db5da45d5f30a7ce7da6c81cb394b01c5823e2b9d5bd37bf70178a6f06122c85277c46b245e74c1d6ff8d7a2154a2281f5c8c255d077baae92cd7baf156ba853a091e2fdb1f7b6c30713a96a26155a4d99a2c7b446d782e6b0ea77bbd8be80ebc356262f48f068c67d599c5de61ada81c646410c1f8f8897305cb815424c0eb6b08c3fd87377d95859f81d56d58dfb80b7084de57836f239e0f34ae474102956f1b7c0301b0e97dbcd81162cdf56068db40b9e143ee11723504bb20e3245aed720b275ad9dae857a2d5560e660de2d79c2c61fb85c96e48bd161df014fc2f5842d3340613f22f67f5c93dbe50aab636985084a51b98530f0f02935275d8c1bb0a5aa241267bef7d82033afd43d3e5f0835aa1c8532863e5bb147bdd2f5a6388bedd881d43db2b76f80583a004e36562804c3b51ed537cde5423c1048fa455bf6f997f86604182d9bfa2db8b8cba4185e5d659a67e7b3f4ba80690010aff41ade210a5a8c40cca99e2338356cebdc35bd7a73e89681d63baba0ccde96b4bc7324449dbff78ee00b97b31fe756c6014a94e6fc6dc056c71ce383010b33878fdab80a05772c8f9f7f73b9faaf8fd1bf5ff16ffdfb443fb34cf38263c5c08a446647a2f7247fbf6e244e6728ba405e49695a3ff8762a99b59205f2d24f45671da58afa7d1be9f5b6d1e075b196a53d306fcbccebf137df9ec16d61050c3bd741aaca2f7a60a659301ded2e5b1a1525edde4901ce6ef2b525cbd4016da400bd63a1300836495d34e690bf29de8efb00fc69225da3402a3641c25921ebd2173f80f82e834d665246066f87d71d25b8545268c2049b7848f958fb777240753e0558c83be68b6766accdac9da51846a86db7be8fbfa8a71ee7d94e34c0875628bcd935d1112497de258c2cd16529c58975c52fa59b204e3d160754d06161e1c2ccbf665ddbea93940ad45566c2e412e12517e882674fe1d73a4b1e09d090782b1309c6740b8af0b920040abb133b5db564c45cc72f9f67e406a1d12eb1f366a908ac9426d26ae3e16703d15d89280549f07d4417ac939c120082ee5e92411e18010dcba5b5f37c1f744fe0df7803322912940a1a9a2f2d6b40159eb3c0530a46a93de9f3b97a9e4eb07ce6322e8afde59c986ab443ced07c4150769f21657520fbb7fd962deb396f606d23a89716d93a7bb1690d98d55901de22e00f31f99f52b3dcc16492d9e1dfe07923284de629d0bde9aab347089d3ec69ed4ff0012dcc01f41ba6e40d3bba9c7621d193b7820e39c907d2047fe72263952daebe28abb33f259d9c543ff3d1f95bde4130960f0bb26ee9fa10ac60225c0198c36e187ef2cd63c0a7d6296ad2337d3776bf430cf4b9e3b6fb651edcec95c209829f0432515bb34554f5f4a92b40a3eedeeb13c81ab2c83e9ef7f79a2ede64e5e92500e866e2caf9e9c6795a0cfa40063fba1e82c0b7d913cd425af49445ad46f5ed15a9de8f6e75f2df7153802a4ac85b8bf6151f7dfd10612f377ff5ea24017df409561b5ab7def8c7e43b4e13172be80fbfe8ea833828528012bbb498ee2806a62d5336d215f1ddb0eec24eae0e411d47fda2e0a9ffc69eb874e745dff615892706847776982e66f8cae970a4294c4cfbbac97f70c357f57476c8c0758bb6511d22f8ef311cdef779b0afd050afb27bf0b761528e5d8fb9cc517983f5ca3c456e0ecaca01df8dbcb2625e36e6440518ea43e6277d3e85c1e21e5ef07c4d121b1d1d2ac686532a78a445edf8a6ee41e4caba43bb04d255a12429a8fa34c1e637772b31fa542401c017519e707621156759764b71b8d013fe0a18a0bbbb544cc1c72b8c235ba34000bb742861575d1a4f27b49d70f1f15634492939658958f63d3b1c3f5a60e59e2b0b81ae0f7cf298f58a6a7a07412e02da1809ac1f952f5904f21cd8e91a7445f5feca57f666e4b5cc3d690c9c3f2fb147d13c5d5117295231aa1d77ba3e62beaf6b5fee0efc94e7294ebf71a97784ce68dfb7da6f0456c1f0780e3094b7a8c1d9553081078b213c299c91bec404c8c4bfe8c4eac252a908e8e70a5fee9b42aef7072d171000d30cf67d47197fa8bfed53348e6afd6f2dd8b89e147bd161530fee8ec4fd46442cf67f447aef6a9b2bc9778a021dd1aa898bb62114ae58b408ad3388d19672cbef44131fc8bb7a5aff7f50286d496319c1f627fa2cbedf8534a5e678d66b1b910a5a0a71259c49bc1803e73af311207b632b696628ed5fd6bfd7ae21070c732f599627d9cbb0cffd47636a12da47b706176edb6c1fc60929d15fb9c217cf516e234badb1cac0a8dfdea4879ee38d9af05c6c8642169401a0c50ad7cd7c43763ce4c0560a74605e827604e6d303438470d2dfaaf01d62b45ba87989a1599a181d0a1b526f6630150d80dfa4c791a5122301d1463c081b324af86c92bfa79441127045407f348459bd27ae05772aec4b5e6cd7af6e16a37c3ab3909b4511e6a37310535b4e2bcf05d5b9fc2b3cdd890966a2735934250b32f708bc8e1c9f6d0cf211e63ed789532de69204dd176a0ac44b17c9769c1b26ec97f2df659dcd70cf81e2202311e89bdd4569efc68498d3d99281d383061cb895b219483a36fb23a15ec70824f3b008418b5f70219eb29487735a10c084025df0cebb25533528bab7e18dd2589cfc6a9572fba4b44ef6f4a553c647be9f20acf2be01e6c049acab6061a688269322e8407dc71bdffa9fe08de958d942a419b24689c13af8dc7d8977dcf75bf42815d09d08387d7cbc52985887ff799387176ba4a5e42f121c1702f292afb07bb010e686e9d789e497cffa270461b2c1b31b7e8aa475d8200efc3e9781ba3b8d009c46ddec9b9459bb45678cc19f283ade161d92640ae5e31fd6025dda502f081f2a1a16d0490133e961fdb255eb8bfbaa1d8a0de6a3bad063474f7e091267e5affe4ee2d174d09158161eac1e0b5f226416a24bb98fcef9c86e55817f30d60a5df399e2545ca688faabe0c5f364c402e916079e509f5575ae7a91862e85d1d6b3011183b88093226a4fd3486614d15c20297e4e364d618a33c5401366b6858a1c9eead71c957de2b18675fdec225ceaea17a172ef94dd5d0bff19d22445675032729246f7d52dcb1c7a455e642cd2f4aa27b7cd63c5a081cbc0557b7f32f88283a97b9ed1fe97d93bb0c313cb09ef84eb08367c48587b6cc3974fc608b8ba914e59f91cf37d16bb489034da8581aef3db02cab2ca765bb917b36a5687bbd41adac8d0e00c64755e2aa37e5ec82f092c7218aebfb5cf537ff9303ec3e19484b40f42052f8f8f35576b2d612ecc7e6677bc06678bbf1b3b42ba19a2680ceae0e6ccc52d0c073b60dd5bfac66dfc16d44f42202813b399db6a52ef99b802c8ae9d4bea6b38d3b7372299cf29e62b1d7f3de61efd3060cde9332ae8a1d5d6926f505c34a8ced7f81c6f5a272d290fae253bcc068db16f7c79045fd364cd8ac09b668242ca981d0daa707573cc2efe7bdb653d2aba1cdf8fb8b1879d13a1910015bd36c4dac3859266b6c7af8df515ca949c0618063143482189b9cb26d2dd3c2b92686439cddfa9fb991b98138dd03c30915a065c8a667c246b7d023f5506c5bfb572e14c0a0b022fcbd926e91a88fb5fee9d0912f21c916274ce61d9c380cc5b6174efc283ab61dce3c3f2132486921e26b20205062c75264f665cb7904f7feb697c826b5a8356bebf3a9ee0d9dbc7e6796f2ebdd528d7c5f952348b0507fee219cc06b59ad5800c1c42edfbe658e6710e7c234e8f721b93b94c77ef05e3e3629e7aa3fb29291f7c0bcc1eb45d9e0f625c720248497530005e475a43d88b6a80689f842d8ed77afcb71119a358065569526b22e011da4095811b4990a3f366b496729465d65858e4c76e32366ece88c31c2925fb685d544bbab9996a7d6b72256d245be34e97f775b7ea8ee872511f971ef9286a3f44514a4b63485f03244ca68500a7a63345d823792cd5dd2c77389cb43d0f6f485ab14e8d8901e881ece30b9d6d2f7058c26f84c40aae704fe5018358f7207a186bd6603e2b8a5509f9f7a7ba83d050857fcc5d7b50aaa22b4de0e9680d12e6e2619836f6a251d832cedf568c6da3ab3e056de07fdb567a0367af0a69e92e13379271aee66d176a330882717c58d528c34f4f74f7f71e6408531c9ba5ed2d6d0b907ffcefeeab8ebf3e01fa97bda8e15238b36e903c8c636d9564d50c640096a868e952ebf6f80102491bc801a47409bb7c73993b22ab05f16609714228017b85e0a22c109315e62b5f750dc5669ee5373dca427b72fceebf2d99b381c028d09f95a80771ef315441346ca3ddad1d337a61239d5a279e798ee42daef4f62b8abe620370fbed1215f50530ab23bf5a5a711c24b56de0724b9c9b347f290e2d19e4f31c38ea2c20d40a518e18219e19e62d2c47b8295e6f3cbed215d48f2e085221e9a4ea99c9a8fa797e8099565eed4428fdd80a6ddbea78ad62d39a192d2f9ab487c1b78c6f81a82642587603a6b3bab8fc9d9541a0856600bd295ec0df00e16f66a6a64dd2bb7c8f242a690e11b0e65480456e70e223d287458ed810470ac938475de552bc12ee0e76b850e5c29acfb9731d3fc6a4c410ec8ed0712d490f169a1e29bc41dc75b277163df257634ac00a1ef8cad825bdbeeaa2b74a1bd51ef7dfcce70856733b85c6e73995a772a4c0ebbddcc4143134d7288466b55c630dd696d0f8d8131a3ca591a1e375749af424a79901b6663547698d2105d9b37601aa957b6d6ba0967e9d35f0dddb87af090e830926c12b034ba89e7e168233fb1fd1c1436092799e8d7235264b052d708cb4a20a51d4b679f715101bcba532ba1cdc0077b6170abdcaa4ba7e241b6f2a04d9e1ebd96809f57f52f382933eb24d233fe6e6335331496d489e24f79df9a1743514632202fbadb86175aa1976e8eb17a42090b4e50593b2868ecdac0b598e94f3167460fb55e3777819df2c86b02f24e67d47ddf5b6f7b4b7bd3ad42d8550aa704f40f0369e31dcab0b99614496a71e3c9f924b442d448c51060afbe59a3a2c846d4cf0257a6b2f8489e4bab3f97c301b6891a465753b2e1c2db852b3e0ff948ca956ecd4dab51b186525b378ca442d4f9e244b45578f0c1f425008744ddbcf8d270791ced573c691b48bac53f44112a34143c8083752b48692d561509538b7864898aa3fc1b1ff96a91f6df88694029407445d2f90fb5fc3f23fdc6b025669553163b56cc9f08c7a4bb4637835b1128edcdc510aee77672a7a41b0852c0acd9b2d75861b9236234b1e225ab15eb2240b137ce7e9451e83d1c37e2801036fc026ce409418940c16a1b9065d6ee43b14b40cefb3593b045391422ccd1ecbf1aa5bfa580f6f4ad33a84f08da5dbfc7915a37e2ad86af858c406de5cea18a5bc8a2675eb27fddfbd9832e8b9594421ce1ac181bd43da5c9d141a3d7e44b9fbffb9bf8444f9f10f28a25b6fb685a10f0b09514337e7a9a3bea69a32ab52054c23ea01097ade75b210384d92893f71820118be06ddd51ef38874b37936fd6f155dd7aec68639fbdf7384c502a91c78f65b0d2708d9913b2a89d740670c469e3dbcfdcc2a50c1208fad863460350457f6531475591acacde39eb1590cab411f58fca0e7bdf81fee314cf958e7be315fc5f52617d73db800af408bf43833e03215fd1bca2eae63b559336f9cd570ccb77a2124cf718310e6158e61e9578368532dad6917bff04b3af240b4728895331d7e911f1b4e45b3d454613221ef3f126e7dee91590c4e13f79229cda6dcfd1b0d8aae1db273285edda6acd846a810fa1ca7be418a64a6b74c00a512d1711a3ac9e4b81aa9f22b7f5baaa991c055bbb6c8f71d5eef643838676ab85e933a8f68d87b1029dd8d16e18c126aa5b2fde482bbdfa22d306ec56ee2f9dcce31c4f48059624709640a30b896e092840a925b9e57535283ad50fb58df648d252be5b11a594cd01cd72697fccf64218515b748b6b1cc41b0bac066c184e173b6b6925ad9d7e2b92a42d9bb8a820521eb043cc89702530762747db4fc007692c81dccab4ae6d0e00c4385c28f959109b5032c8465d10a68348e22aaa0515794dcea1d02b0d8cc30031a7e525968e1b1420cdf89e3aeb719ce05ff350e37c8c70073abf2d6145d000ac7cc334463b023b306080285a580465474414dd5a80c4ba75ed20601349d4e2896fed72bb7bcb90648af73c532834ec7392a949087081ce4ed22f0c9ef859c2a5d3e0c33aab48f48d2e935a5b53b457e2e3b599828ab0b9ce74f3ebf5c9ddb12349c2c7185b465bf6dc1752a980143b99b040e49d843e1724d795dee79207c", + "proof": "0x2bf20ff78727f38ef16e03bfb3d4895f35cc626f97ede7cc99f48aeff8661fe32015ea8d62ec7a79e01cd398e85867bafdcf55cb6a7121b6fef097f5f5656a5d11ddf336b6879926ea2ae425e91c748a553c9a496cbe2ab556a91689f75ee2b01ad3c43aa774b50a9d8411a9f65be42d6cde781db1a1949a1e886f868917997b0ddf417d2fa8b5fb32dd641ef94ba838efb46de478000cc32c62367ea7f68f341ab25760acb25df78b85ffaf11edcaf986c0ed939c32989df7127129000e0bfb21f302010a7798aecee8552aa1c226cf9908e813008ee2f29e21784a3f32078a0ed17a8070ca28e6fb79356d372926921e08a609bfde3f9416a69da8cbf4faba1958b1d14fc9092e077af4e9c438857aa200afd32dcf7848a217fb187fa9e1bb2b88c35121977f4de6a34c88c2fe4678205292ca22683d073687f77a68070e1e227874e3cddb99c6347c7d47232d2aa51b32076e81b130e96dc0ca2ac7dcef601bfbd31520044ed64796953f3345b49ac812514aa3886a17e8eab324c8940abd220669e9b95d47ddc7774695be89576663bf96b0e6dea37abfbfb4620178b74e124862d1788641479260a68ebba6dbc9cd80e10ef9d7627966db2063222eb2751a9959e70854d3379c63eb3ec8177441f568d79ec82875aa36645f01bd53e10d302a9f8b678d6b09c54d072c7e9d6443a0aa89021ec0748568d3d5b5745c92b11f31c13d11b94f892bb9f96bd2931b66ffa5e22b104c549e7c0d5010e4e70e271d48c0bd6e4be68c920ea77af85d12eb155d9b25703eabbd0ede1909565a55f12f654ccc6771897acdaaf83e3674c7141927ac3a8e9915bf27f033779110c0ba0b635753acf8f53fed904adc20368c93691f8e49cf07e0b6f10a9d8a0bea4f3d259764b0f53960cd7b9a81fa4379d396364814249a5fddcf7efa7d2e68e729550a92392f5c23c73868961d6edfd9fc4f1379c8e34191c372cbebf13c2fa337fd1a0a0068708d0d60db275be717d35676c27cf58b5044adb1d764b8bcd6951a9f1c5c1a2fb96d6cecb1c153fbe082948de02930c0cdb295d8ac4df91ea2d34b442fd18f84509838c84d4ebc980c96be6d0667fc18cd949ac93b5dfb38d712bb2d29fcbac5bb3a620b2b5aadf1a4e2a3c254610dfffe7e216b4a9ecc93a8081b970d13d113582885390dfc9cc4ae10eca93a6c81003305c0a03213293e919e041712192fb8374c269bf5e3cbfd8cfc1fa4408c0a55fd98d8f57926aa9d9772e5b114ffe9e64acbf6e0543d3c55a5140116e8130f3369b0f819a21f5fa24980b11b2f12481042cbff8b2dec629f37fa4a64a4641656629fb11261a66a36e969b74a20753d54c05301075e315bdb0a39fd7665edd8d73fbfa6c4faaf6c66e6c8b1a830453b758b0047d93d9970b49c617dd582fbad0539f9f5eadeeb51e35775f98f2bfb750f3ca68d27197e3d86d4283f5859a6ef7bd66b68991f474e26317dc1df15d4acaa898abf97f2e5c1b4e560336e76ccbe2613d85454a095bbe5ae6b2a1212064ca8776f0f33bd9797c164a92c211167e81c6dc3418d096fecc989ae97d004e2bfa53207b036b5183468f4435e9df40413fd4f3fbb7c0e4080765a68d1e80b262e54ab27cdb4904018a73566c5f3fbf93e637081714ffbd106c3f03f69fb20444983ce2fed71bf96c17049506c3d667ccc7d29dac0a1830187c2f0f130a31166f5e0f55fdd7796be8c989e9c55b87e135356cabdb13314693c4f4cdb3a350524f7494c0b7c9679c651970b2076b58718cf6077b1d5bcd1193708faf3f1812a4811c5965495da8054c9a4a4447f50b08138ea05c6df2bdc444689b78b9a37196917eaed3edc25d1ddc1b60a8041330a4759ee8725c87234374c60b43ab7d8066fe95537bb96857a5357ff97dab62f0e56511d7cb8d3695d919db350eb949002f4fde22120e0e8d3023dbd46a7f0f4e5f84cb59a19c331806f71a381f72da81f27884447fe57e3271ebc651916dced06db9c7a51572c5ce7021eaff9c0bc7c02380abf987c89ba8029744c07e0eeab3a228793e9a69adba4ae42404fb2ce4d2495da393f0d0ac5a0178ca4720e8e6a193e3579a3ef50df7ed8a4b06ca54e33150ae76933a36e9979336b44461efbeaa9de08379687b1dd8ed6656438480d0c0237ca9000cca1bfd6adfdd043364af965aeea9b0571e2debb244e7b632d287011c7ff356c7cce34ad9f5e910280dedd1fae543c3e4405dd47648ae52e8793902beefdab93b509be5c3d84808db2186920e75fb6211f92e965cb901dcdf2ce9c14e21ebcbbc81a57784d0900fac3c31566ded583eb0867eefd75bbf3df363ef01b7932b70e7b068a2656173d241e8f20bb6be3a3a3767111aa6f459f84be961c2337f6e03ed3cc6c847a3683894288b471504cbdc43a78f856801a10a87c77322e36e0ca426ec67ad3a2a3b79bc5cb81928a79a67a0fb46bb967cbab73fd36022f92d920204de61717dde6a85b7bcf57584c11ce54ac92998f856bf042a01c5017345a34999a1048429a6ac79724c62d55446e80fe8fe17c45eee3fbff6d5adb18976d640fa9d0cdc20bed46b5c726df89e442099e0d5a7c7229c3c17dd878671c2794a56de602afc80c531d41f6239868a7f6c2eaf6ee31e765fccd39d9f8f20ca9299f4339b73796bdb401f68953f9b796798756c87db489cf79b7a29c4c6124b6cccd46862b0c28a6f2a03603cb6dfecf6a9b92a01f722b47b50d04963fc12cef50cc58129155b15f279e8bc71a20a663022516cd7c72b9c6cd3782569d150f046473cbb519f5719cd1c8edae7313d9869a20ef43cf2f668cbf98b904e421301b032acb7515be27039f0a02275eacac5600eb1df8d8e48096b31ecce40dbc1a462346830d8dee6311caec0a83aff85a70a0180b999bd3c1b2932596ef3c9524fbf7971c6d9e75ecdbd2ec7943b47d7feec6f26abe42c6aa6bc4f10085843712406bf56c20010ec8dbe8684e174894aa0b6471ef3d3a33ef77887fe5a6b33220a7a1991e56a31e51d2cd82555ccd8f31056d312d9f4c37ba7915a271ca814222616327752f8354ff401a5cf2efcc342752f919a11a0a7a35a1b574ea36637f2c6e14989ad2f7668502cebbd59b3346379d577daf4a0981f0a341d38d9ee58a0463484d31623127c09c6cec446a9ac9a53cb6841ca2a097ceef88e537e209880ffdcfd5033bc3f5a885c271e41ee332366345fa867780beb3c1d5eaa496ea09055c1664fe43a3cee202c7086555143481e8407952aacd465042664e99dc869d1d0641ba576f7351c66c4177418bde4d2e3146083e9362cdba7c0a0ddd2ef8c82b2db81d6fa83b980ab5eabd8a697cdea718c98148d907c2732a3912bfffb59b0a01f361062fc5eb023866f05f6f24277f2b862978b8be3a195787d83b2793092b2060ecd7e35d7ccc5588c367292d227e94b521736a89da3093cc26a45c4f450b64ff3e97f834e2e1303cb0abc9b31704c4b4f99a595e0b32e8632628a1b31f11caf94b127957d16938243e7b9da2c99131bfba20d052f1f741a4e724b4442008cd72dc748b9dd66eb047c4fe9768d0f752aac429c8dede3b8173d7d0e2e4f228985166aa6daa1e3e8bc8cec535cc49fb04cc983eef4b0489ca58d5127b7a4c110fbb8418e62e1086ceeeff2fcda91add54a78321104268324cb978846c129309e5c32019fbd8052926e9945847120ce2bd31a6fde1ad4a333d37c2d948d83b120b6b6d387a0f7fe5f7dfaf3ab3af823d4bb85236ba2d5e8887f5a322190296046eaa65541bce11841715fb8243c61739456c3219755317d0d2d3f84e58dcd115cfbbd8e41b40a6244082c566923dc347ecf89ff8683c7b56dc3af8dde4804f245883c795c063ca8f0e676f70a76e463b325f4754f992c72a18197c4265904822a7e3926f2a0b5e928982620244b3fa5a74a6d77cf3b212dc1cc738487604752fe83dadcc0a47916ef7c4643b82c068b50ccc27589a3d41e86d9b028236e94f24b13227d4df86f3fcb52c583b6feb799268050d2527a6ae8662735dcf14a07c0bc93053770d51f357c745e6c9c1546699eeda30310f3277630a023b5dcfb1a10f4155812cd16cc0048d8844187135ce6a6c90e81c4ecc3e503f26ea92dfe5a817cdd5cbaa3fe8bffacc2f6940eb0c5ba38eb739133532579194d745218102bb088ff27a05e9d5d857b8d131974574fa4a1511b0497e2b332ffe349571d59da52c2225198daa0e27f0e429523c3bd45bbd4d0bddee05003c953e5d22c42ade7f0e3b871be6eaf13236041a6ca2614ea28cb541352aa0eca871a852be7bbabfe30c3173bcbdd8733f8d0df021ee3a454551194d07518f936a2cfef1c0c1196ee50772aea8115ef7e2f2523c18cfb2dae0c60f04d13b7e8d4c8cde37759f5dc5270103f142f7085265670f065353108b482fc711c0ee1279cbc0c85811e3f58bf4199d7b1fdf06e516bd2b85ee9012c2cebf508a4d76779df91a1ab8481765c74c29c2afe960284cf26a0a917979539bc21cd620dab7d35e624a36f9c20baaa6d52ad980d965aed1dfb5495455fb68b41e3ba9ee06521960fe63d4441dbf3b7a352b28baec06f95a8cdcf4aa81ec02a44712a21202439c19409d137f22c115ff871297f0c3eee03f15cf46f9f786d3c7596084b24439d7b95ea61b357c24b967ae204113c1ec8cf103289aaa6b9436da1f572cb1972fe2305b74a88a74ee5353391c3f13a1d0fbc1e674fa13f385b34f7eda4a6ae60eb27aa02fdad51757820b7c0e7b2744e7782fe393581875b14e8d62cd51c6f5621d500f99216d1797dec34522f4baa9ee2ef08fa4338582f8a2ea1109715304d95690ad7141c02d4914b3482dbffd460e1bda19f0b4bcde737c899b5e8b149545611a69a51d121de0f404a62b9c5fe22a7eff88d9dc7625a2b421ea63fc4bd1c3de012179a2a896be077a35108e1b0cf51d88c6e57ab0bd702527959e9805d6f7c6628e337ac905df6bda5713c88ef0c3a2d7a54837f1313ceb899ec6cb96253c24ac94a87f2a0bd90373f81f84f10d4bba42c769ecea87a4bbf854c151772fd97e31bf3e531c8aee6d0dfe01f06fe15736edae5b11ac891cc8b5b847b6b0c7d9e09c5856d755a1d9ab15872e89bca1e7a253e547584b144e517daf9fe4824001d92a7bc355baaa421aa1f92ae543153ca763112d9181802212bd8cb1f7047fe09bff0bf17ad3acff6148d42de1d4b0ecf116b80ead2f02c118b6df97df4f56baf03f5955173f9d68f827ed27ad554f90aff457a8a23280e2be8885d5d3642f0ec59b3a1ec492ae8f4cdd85125ac43e978624cdb90de36025b6ac4e0d83e4735c67858b6afe1c72794b2f8f154e162a34beb4b7fb3bfbc1925cbc903321f47a70f532417d7eacde29cc747d1f7e85b9ebc9881281c08219b47f01dd25a0cabbbf682afdb25fa9e750f9159e120e9e372281d0859ed0b8977cf93eed7ae008b71e7fce7db5ead0d46065e90509dd2e820573d21adc9c48cad23b0b7d0feed2a8300e1e5dc489a61e4cd316ca29f60acd695b5630a10caa7c3d21c151f7e4dc343e98e1753a8e446c554859f02a8614476fea682a8e2ea573bb36dc88d7d8c51e14a11a22834fdd33cd6a077f00b5f8bdfef25b77c6f4985199b3b8dc039f385df28607fcdd45f64d745d5bde0cb5f17221f8335b58db4fd93a1aa6e16d091c66cdc903e4519eb95683c7eff018d47f14e841e216ef87942b3364ce60d94c2eba0a8d4d9909ad4be7e0a866dd0880a33e25c95afb6100f737083a761451047d59b753032e68cb591d1ba5a09d0ab6f9196887dc665035140aec389bfcb7e304dadf6509f4a8e466c8c52c124b1f9002e724d23e13f4bda538a4003a6b719e08075d4aea1a881f9c90fd34b4f22b9983e7ce125798e735db18dc08c49e95e20b685bf2a9ee2d6ea7cc1437e7b1201348d0d498e170c185f96a771a4642f444ec00ccf69fb94869926eb0f539f01be43ab9e8823c746bbf27bbc62081218eb728595fafd0f257bb0267468b4b2111636c36985b5450f724201f3cf862423ff099c177b53624f07a699b831a98ae06d21c2ed3ff85c918c27abb2fbe3266bce49d11de75b54a577ba0f4e1286fbe2523a04d1245a9940cf25efd5d2b4f1d9a38c939b439484964d1458ac5f63a8f0449ec481df725c09691bdd8b4605f2c378f4326055193cd7e0d4e625763da941c71f8ba138c652fc8b1230bb1ffc1d8649e883079d6f72154ee5e91c16b46e11f9de2cb6581ea13027a6445aa0f2dceb24de24e119b421f7718bff774bfd33c15bf1db21b36cd7ab8bcc97cbb2f79126640dfc5926290638e4c1099b7ca9673253fe95dbcfefad83574d6d3bb4934a57152a4dd598178900f8c4283dca089f71e1760d063de4d4e16ba091db51d7bcb31257831b78e74534f2d87fbc534ae09138bbbfa082932956596372c6f57c29cd18daecb33e2e40eff4fb23844b99dfc234258d2105be4f8f95ae781e8e5b105cacdb4bedcf319d548f75f53257041ed08b96961984cef1d11aeb686c928e12b5a2d8315d12fec299f6a47278af96e3a0ef706564615c35891a21d3e4c6ace3863ceb74eb610f6df878743d1126194ee21afc2f5121aed95c8b776bdd74536bee8708410ded1ef78400498c2b842e257214a9e7c186fd8cf719303653d6f0848de33d142161c9116e281efba4714f82c2049a208ab4cd5b9f98a1601b2cb0d4fbb7570938e1d536140d4cc4c05a69c20295367916c381f7f60e3589a2b6e1b9c8bfe57985ec74fd7ce9c8d311b2483dd28f5b53c50c6a1556d6bfc3ec7ad225939a0b0e87fc8ae3cf49c632c6f8d0f3b0e36cf8f44fa705719f1cc74949aa5c97866e2f8abb9a329700c64210cb701932c9f527bc4e2a83637f0eb868c700f66df7e6bde882c686a2832862366a4759c0920569110fa746596834284a02db15179d900454bf2d3a8f912ee1a62a32c071bb89c96cf82a3173caab9901b2ab1d005b21ff8dddf2e4a7c8b4174534648ce1f473f57ce66cb4877561212f1424b7808f47cb267d3a9f7c6122a23f146840529440cf04028b263e2432120acf949234e59b01b1c5edfe36968138f771db95b19bbdf7ac619ccc786132fc38687ab929fe10f7656b9b7f2f0f8ff1c2567e5d4092eeed98d0b457811d6516cf28c935606774c9676cc27d77b7229b13d5c7409064a369b568b597f7dabf1fee789328a6a216ebad1d827bea6f3dc73de73b8f00d2cbf971ea012fdfe667fa3c71827d0831e119023625038e5caeef9244e20e305834cecd12f46e2dfc4e73154ae503b431d62de912fadcd3785203a41d9457d291826033c13ccac3bc3a63425f14953eed324c08f03d2a5722c76ed44712720296c14474d1dab39626f11c0927c17fcab09040481732a9d13b976e8101836181591c892dfb24fd04250fb08bcca8d6649e4a17de62a9066bf74486cf09a1d01287c8535e17d8e466c2ea15ad5c300e1dd7a7d83470629a7e5f7f5151b1251161e1e75cb24c1e6ed7f99ae065b2dbcc5a96429445bbea9917571566a1d0defc601d76fb4390fe028274e98c82c78930ffdb30fb626bef3342d6f35994eb539a210af0e3ae6f3efdc7c5efcd287d7e699e6d1a402246a797d4db46fbbbbbb94cf257d65d7748f905906b74e7da9e8770e313ab08145e1f6b2eb684decf91fcd5a130e726c8d82850c78e1756542d52758a82d06f2839c79e9d13466b0477a0ab12743f4e1d5b347a5bbe7960af573d8ecaa19ecc2f467517a809b958502af98f42114752aa79a8fa137a23516ee6fceec1c2301dedb00ba071acdf7568266efad2a37a8884dbb5f76312429a2e4b0bdbe1131751b730e521b21693e5f0fb788fc21549886936f5608626170146dc1fb531f56ad7155510930cb19b33fdac1962009d7f1a7e779b32593404d855e10fa92b8c5db1daf63c8b36b00b8602f7e5a65", "randomness": "0x" }, "config": {