From 5b503a79c75b641713484d11dd5d242670644760 Mon Sep 17 00:00:00 2001 From: agureev Date: Tue, 30 Sep 2025 21:34:41 +0400 Subject: [PATCH 1/3] Update Dependency To Support Constant-size Compliance Journals --- Cargo.lock | 18 ++++++++++-------- bindings/Cargo.toml | 5 +++-- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index dfdd9aec..73020c15 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1311,7 +1311,7 @@ dependencies = [ [[package]] name = "arm" version = "0.7.0" -source = "git+https://github.com/anoma/arm-risc0.git?rev=1379cbaa2db78e94c4d32fdcfd2c97cd7195d6d8#1379cbaa2db78e94c4d32fdcfd2c97cd7195d6d8" +source = "git+https://github.com/anoma/arm-risc0.git?rev=b4810fad7bb5dee1b0314d96854137d0e6bd5dbd#b4810fad7bb5dee1b0314d96854137d0e6bd5dbd" dependencies = [ "aes-gcm", "alloy-primitives", @@ -1324,6 +1324,7 @@ dependencies = [ "rand 0.8.5", "risc0-zkvm", "serde", + "serde_with", "sha3", "thiserror 2.0.16", ] @@ -2781,6 +2782,7 @@ dependencies = [ "alloy", "arm", "serde", + "serde_with", "sha2", "simple-transfer-app", "tokio", @@ -5980,9 +5982,9 @@ dependencies = [ [[package]] name = "serde_with" -version = "3.14.0" +version = "3.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2c45cd61fefa9db6f254525d46e392b852e0e61d9a1fd36e5bd183450a556d5" +checksum = "c522100790450cf78eeac1507263d0a350d4d5b30df0c8e1fe051a10c22b376e" dependencies = [ "base64", "chrono", @@ -6000,11 +6002,11 @@ dependencies = [ [[package]] name = "serde_with_macros" -version = "3.14.0" +version = "3.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de90945e6565ce0d9a25098082ed4ee4002e047cb59892c318d66821e14bb30f" +checksum = "327ada00f7d64abaac1e55a6911e90cf665aa051b9a561c7006c157f4633135e" dependencies = [ - "darling 0.20.11", + "darling 0.21.3", "proc-macro2", "quote", "syn 2.0.106", @@ -6087,7 +6089,7 @@ checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" [[package]] name = "simple-transfer-app" version = "0.1.0" -source = "git+https://github.com/anoma/arm-risc0.git?rev=1379cbaa2db78e94c4d32fdcfd2c97cd7195d6d8#1379cbaa2db78e94c4d32fdcfd2c97cd7195d6d8" +source = "git+https://github.com/anoma/arm-risc0.git?rev=b4810fad7bb5dee1b0314d96854137d0e6bd5dbd#b4810fad7bb5dee1b0314d96854137d0e6bd5dbd" dependencies = [ "arm", "hex", @@ -6101,7 +6103,7 @@ dependencies = [ [[package]] name = "simple-transfer-witness" version = "0.1.0" -source = "git+https://github.com/anoma/arm-risc0.git?rev=1379cbaa2db78e94c4d32fdcfd2c97cd7195d6d8#1379cbaa2db78e94c4d32fdcfd2c97cd7195d6d8" +source = "git+https://github.com/anoma/arm-risc0.git?rev=b4810fad7bb5dee1b0314d96854137d0e6bd5dbd#b4810fad7bb5dee1b0314d96854137d0e6bd5dbd" dependencies = [ "arm", "rand 0.8.5", diff --git a/bindings/Cargo.toml b/bindings/Cargo.toml index 5155d58f..7f67fc15 100644 --- a/bindings/Cargo.toml +++ b/bindings/Cargo.toml @@ -4,7 +4,7 @@ version = "1.0.0-beta" edition = "2024" [dependencies] -arm_risc0 = { git = "https://github.com/anoma/arm-risc0.git", rev = "1379cbaa2db78e94c4d32fdcfd2c97cd7195d6d8", package = "arm", features = [ +arm_risc0 = { git = "https://github.com/anoma/arm-risc0.git", rev = "b4810fad7bb5dee1b0314d96854137d0e6bd5dbd", package = "arm", features = [ #"groth16_prover", # Add this feature to generate regular transactions. Note that proof aggregation won't work. "groth16_aggregation", "bonsai", @@ -12,9 +12,10 @@ arm_risc0 = { git = "https://github.com/anoma/arm-risc0.git", rev = "1379cbaa2db ] } alloy = { version = "1.0.30", features = ["full", "eip712", "node-bindings"] } tokio = { version = "1.44", features = ["rt-multi-thread"] } +serde_with = "3.14.1" serde = { version = "1.0.197", default-features = false } sha2 = { version = "0.10.9" } -simple_transfer_app = { git = "https://github.com/anoma/arm-risc0.git", rev = "1379cbaa2db78e94c4d32fdcfd2c97cd7195d6d8", package = "simple-transfer-app" } +simple_transfer_app = { git = "https://github.com/anoma/arm-risc0.git", rev = "b4810fad7bb5dee1b0314d96854137d0e6bd5dbd", package = "simple-transfer-app" } From 113c486872a066fb6cc8a9507f6089a648ad9f04 Mon Sep 17 00:00:00 2001 From: agureev Date: Tue, 30 Sep 2025 21:35:16 +0400 Subject: [PATCH 2/3] Integrate Constant-size Compliance Journals to PA --- contracts/src/ProtocolAdapter.sol | 2 +- contracts/src/libs/RiscZeroUtils.sol | 6 ------ contracts/src/proving/Aggregation.sol | 2 +- .../examples/transactions/test_tx_agg_01.bin | Bin 3776 -> 3776 bytes .../examples/transactions/test_tx_agg_05.bin | Bin 16448 -> 16448 bytes .../examples/transactions/test_tx_agg_10.bin | Bin 32288 -> 32288 bytes .../examples/transactions/test_tx_agg_15.bin | Bin 48128 -> 48128 bytes .../examples/transactions/test_tx_agg_20.bin | Bin 63968 -> 63968 bytes contracts/test/proofs/RiscZeroUtils.t.sol | 14 -------------- 9 files changed, 2 insertions(+), 22 deletions(-) delete mode 100644 contracts/test/proofs/RiscZeroUtils.t.sol diff --git a/contracts/src/ProtocolAdapter.sol b/contracts/src/ProtocolAdapter.sol index 7f30065e..42e824c2 100644 --- a/contracts/src/ProtocolAdapter.sol +++ b/contracts/src/ProtocolAdapter.sol @@ -336,7 +336,7 @@ contract ProtocolAdapter is // Aggregate the compliance instance if (isProofAggregated) { - encodedJournal = abi.encodePacked(RiscZeroUtils._COMPLIANCE_INSTANCE_PADDING, journal); + encodedJournal = journal; } // Verify the compliance proof. else { diff --git a/contracts/src/libs/RiscZeroUtils.sol b/contracts/src/libs/RiscZeroUtils.sol index 3481c9c6..6f3e38c7 100644 --- a/contracts/src/libs/RiscZeroUtils.sol +++ b/contracts/src/libs/RiscZeroUtils.sol @@ -14,12 +14,6 @@ library RiscZeroUtils { using RiscZeroUtils for bytes; using RiscZeroUtils for bool; - /// @notice The RISC Zero padding bytes for the compliance instance obtained from its length (`7 * 32 bytes`) - /// divided by 4 (bytes) representing the number of RISC Zero words in little-endian order - /// (https://dev.risczero.com/api/zkvm/optimization#unaligned-data-access-is-significantly-more-expensive). - /// @dev `uint32(56).toRiscZero() = bytes4(0x38000000)` - bytes4 internal constant _COMPLIANCE_INSTANCE_PADDING = bytes4(0x38000000); - /// @notice Converts the compliance instance to the RISC Zero journal format. /// @param instance The compliance instance. /// @return journal The resulting RISC Zero journal. diff --git a/contracts/src/proving/Aggregation.sol b/contracts/src/proving/Aggregation.sol index d6292bac..6b7a411d 100644 --- a/contracts/src/proving/Aggregation.sol +++ b/contracts/src/proving/Aggregation.sol @@ -14,5 +14,5 @@ library Aggregation { /// @notice The aggregation verifying key. /// @dev The key is fixed as long as the aggregation circuit binary is not changed. - bytes32 internal constant _VERIFYING_KEY = 0x96dcbee66a8780979442bd2abc2f7373957e450336f377704041ba6f9b95ff6a; + bytes32 internal constant _VERIFYING_KEY = 0xa9c9a22ee9df47fd35ed2b319cd272c3f328a171ea04dab5e44ee15e33f5b9ce; } diff --git a/contracts/test/examples/transactions/test_tx_agg_01.bin b/contracts/test/examples/transactions/test_tx_agg_01.bin index 35b7ebc5c30a65197e7fff29e04b9088bc68d128..f25b0dc631396d974c9376d9a2da7f5396125587 100644 GIT binary patch delta 269 zcmV+o0rLL99l#y1qz!)nTW2|x?Nz*woPGffW0c>}hw1P!V*$Vx^z;!;hA{g9p#*SQ=ABYLz)dx8Fmyd*h`+WB72zIN% TT9QiX*O=Sx?@R)EW03(IdFO}- delta 269 zcmV+o0rLL99l#y1qz!*5c%u~vO$$Zb4y4?bAl7;PMj(~V`@PvYW7Ep5h!0x^<(_({ z$rfkA1L#g>FyjJ1oG~wtGdjzIX~n2yZwEgjJ`JBQe7{RhvYTF&=Mq@M9kz_~@WR`V z;$NRA-N$eMOU|49ORSlnsE(;D8({u8yZ3OlRJ_UFk+8*hsJ(wF0E=5%KNSuzb=PRr ze57}Fheu(K8dJZXev)8~pOE8&B9|@tHPuF0?(mSZMmqWnyS|iJC4ObTK~ntaH3&6- z1qVXD>gE=dYxQy#OLY@ryci$j*eQ{8EIjI!b{pjP1g|vou71q$(~0Q>A$zL;kTVst T!5?>UHWF#;Am328ysUU~(V(A?_bt8W zZqe7T-WlJUDHExb$r>(s@QZRDv6=W5)e#FnpQpe~>Bxlj+HHGq3jAO5zxVTUZWgB*O8VK$k$O4qm zMUoxSrgyjwNDjMnjD>j(4!fNCZRa~C)~I~qFDX>+TwcVFFs68gAlw7sp_$0K62 zH$C5Fdk}D8sceW=M|%=TdD}vSIAvzm8m!*U;4A?znJZdo&CX77Sxd7qbJx*M6-2Ck z>{%skLgn;R>Lkp|P!4PmU=XT8j-pt15b$|LJP%|`7SFvSnO;zcf2|QM6?Z;r1pgMx z^h&`BUzYiGp}0-XuKoSa0_=OtGVms*aI(xv*9|4g0e+*B8T$d4qGv4z%7AHp-spxiI=CoW~B1wBqVAXfF5 zOfU{`{}U4P?aV6HA&_Y`oHB<@ZyQ%)mBa=oOL#U^Au%di*QDm?Oz~^>;Cc1e?XP_s V=IV1OOO?F2&#Hk?0)dc`0UU0S5$7EfNN?(-GdW&pf6ipzn<#_l3(Z$&zm0e2S1%_7Z5c6LpA*@x+qP$=1 z{bDMXkVuobi;Pe8lBu+Va8eAjX(oP#R*)-b((}CSiFPXa(8}+xI$TBeFefSrUdiipJAfk8nRpu#y{0txVu0UT1=ho%4k delta 271 zcmV+q0r38S_yU0V0ugkQMLxvbB^c^nKcR6JB>#k8#3zyqDiL`W+-nx+NMtF6ZOnUW|j4L+Ync#Nxo+3f3pic1Kr*$qx?>!wY*oAyoj9FkRlK)skE(5xLQC<}xnvJX#>&$H z1kV!$W8Dd3)y~1KivAc{U%96(s@PHNu1z7Cwf;b3(ZVQ?CsqO;28xd`P_EExtqnGd VZ!J*C-uwM~>`EMy0#`nf0UX-1ea8R* diff --git a/contracts/test/examples/transactions/test_tx_agg_20.bin b/contracts/test/examples/transactions/test_tx_agg_20.bin index d461e8837d7e4eec0b92436aca1eef0e256082b2..7f0c40780fc10df8182a5d4bb6978972988409b2 100644 GIT binary patch delta 271 zcmV+q0r39d^8?`X1F*#Se*t~utdM`R_kE!q(vJ$~Xot*qmB6nHqg} zr|$~@-|9-^(j#7pNUJ&|M`kmf+raIh+F(789V{-x4*R!e1yCs8qL9tx+{tXqIgn-V zH`aH1GbKqr+8Ban=4Eu`jKuy`@Uk9cb$z(_?WdlfFcszRW^i82f1MPkprCMSJ7EEB zpwS&-Ns~jubAS>uNLJu9NYA3-z*-j+h|mZ`9{eL~waMbuhEF1XM`2~ie>GEAdaoKaL0ouPxN9Caq z`e+D&)H*r7E}zz&T*PK}tns$w*j9$Ptk(;P_>?K9_qq;}TO?0ei4%))lDJhxHUH#z V$JY`nzo|lMwb4h10_Rnc0UWVwg~$K^ diff --git a/contracts/test/proofs/RiscZeroUtils.t.sol b/contracts/test/proofs/RiscZeroUtils.t.sol deleted file mode 100644 index e515b055..00000000 --- a/contracts/test/proofs/RiscZeroUtils.t.sol +++ /dev/null @@ -1,14 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.30; - -import {Test} from "forge-std/Test.sol"; - -import {RiscZeroUtils} from "../../src/libs/RiscZeroUtils.sol"; - -contract RiscZeroUtilsTest is Test { - using RiscZeroUtils for *; - - function test_compliance_instance_length_constant() public pure { - assertEq(RiscZeroUtils._COMPLIANCE_INSTANCE_PADDING, uint32(56).toRiscZero()); - } -} From 153512befe9b004138d2dbc67166497282a51ba7 Mon Sep 17 00:00:00 2001 From: agureev Date: Tue, 30 Sep 2025 22:03:37 +0400 Subject: [PATCH 3/3] Remove serde-with Dependency --- Cargo.lock | 1 - bindings/Cargo.toml | 1 - 2 files changed, 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 73020c15..39a14dd4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2782,7 +2782,6 @@ dependencies = [ "alloy", "arm", "serde", - "serde_with", "sha2", "simple-transfer-app", "tokio", diff --git a/bindings/Cargo.toml b/bindings/Cargo.toml index 7f67fc15..92d7b4df 100644 --- a/bindings/Cargo.toml +++ b/bindings/Cargo.toml @@ -12,7 +12,6 @@ arm_risc0 = { git = "https://github.com/anoma/arm-risc0.git", rev = "b4810fad7bb ] } alloy = { version = "1.0.30", features = ["full", "eip712", "node-bindings"] } tokio = { version = "1.44", features = ["rt-multi-thread"] } -serde_with = "3.14.1" serde = { version = "1.0.197", default-features = false } sha2 = { version = "0.10.9" } simple_transfer_app = { git = "https://github.com/anoma/arm-risc0.git", rev = "b4810fad7bb5dee1b0314d96854137d0e6bd5dbd", package = "simple-transfer-app" }