From 2288a725d23b8446b471e790764eab5fd2ea2bf2 Mon Sep 17 00:00:00 2001 From: Daniil Polyakov Date: Sat, 24 Jan 2026 04:05:59 +0300 Subject: [PATCH 1/2] feat: implement indexer service skeleton --- Cargo.lock | 547 ++++++++++++++- Cargo.toml | 15 +- artifacts/program_methods/amm.bin | Bin 460392 -> 460392 bytes .../authenticated_transfer.bin | Bin 380124 -> 380112 bytes artifacts/program_methods/pinata.bin | Bin 382720 -> 382736 bytes artifacts/program_methods/pinata_token.bin | Bin 390412 -> 390380 bytes .../privacy_preserving_circuit.bin | Bin 501580 -> 501580 bytes artifacts/program_methods/token.bin | Bin 418660 -> 418724 bytes artifacts/test_program_methods/burner.bin | Bin 376928 -> 376928 bytes .../test_program_methods/chain_caller.bin | Bin 390632 -> 390632 bytes .../test_program_methods/changer_claimer.bin | Bin 380008 -> 380056 bytes artifacts/test_program_methods/claimer.bin | Bin 375816 -> 375844 bytes .../test_program_methods/data_changer.bin | Bin 378544 -> 378544 bytes .../test_program_methods/extra_output.bin | Bin 375924 -> 375924 bytes .../malicious_authorization_changer.bin | Bin 382160 -> 382160 bytes artifacts/test_program_methods/minter.bin | Bin 375844 -> 375856 bytes .../test_program_methods/missing_output.bin | Bin 376008 -> 375992 bytes .../modified_transfer.bin | Bin 379396 -> 379380 bytes .../test_program_methods/nonce_changer.bin | Bin 375944 -> 375960 bytes artifacts/test_program_methods/noop.bin | Bin 375640 -> 375656 bytes .../program_owner_changer.bin | Bin 375868 -> 375868 bytes .../simple_balance_transfer.bin | Bin 377756 -> 377740 bytes indexer_service/Cargo.toml | 17 + indexer_service/Dockerfile | 64 ++ indexer_service/docker-compose.yml | 9 + indexer_service/protocol/Cargo.toml | 18 + indexer_service/protocol/src/convert.rs | 648 ++++++++++++++++++ indexer_service/protocol/src/lib.rs | 230 +++++++ indexer_service/rpc/Cargo.toml | 15 + indexer_service/rpc/src/lib.rs | 40 ++ indexer_service/src/lib.rs | 1 + indexer_service/src/main.rs | 72 ++ indexer_service/src/service.rs | 36 + nssa/core/src/account.rs | 4 + nssa/core/src/encoding.rs | 20 + .../privacy_preserving_transaction/circuit.rs | 10 + .../privacy_preserving_transaction/message.rs | 8 +- .../transaction.rs | 2 +- .../witness_set.rs | 14 + .../program_deployment_transaction/message.rs | 4 + .../transaction.rs | 4 + nssa/src/public_transaction/message.rs | 8 +- nssa/src/public_transaction/witness_set.rs | 10 + nssa/src/signature/mod.rs | 2 +- 44 files changed, 1774 insertions(+), 24 deletions(-) create mode 100644 indexer_service/Cargo.toml create mode 100644 indexer_service/Dockerfile create mode 100644 indexer_service/docker-compose.yml create mode 100644 indexer_service/protocol/Cargo.toml create mode 100644 indexer_service/protocol/src/convert.rs create mode 100644 indexer_service/protocol/src/lib.rs create mode 100644 indexer_service/rpc/Cargo.toml create mode 100644 indexer_service/rpc/src/lib.rs create mode 100644 indexer_service/src/lib.rs create mode 100644 indexer_service/src/main.rs create mode 100644 indexer_service/src/service.rs diff --git a/Cargo.lock b/Cargo.lock index 16baf5a4..b71a3f2b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1177,6 +1177,12 @@ dependencies = [ "shlex", ] +[[package]] +name = "cesu8" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" + [[package]] name = "cexpr" version = "0.6.0" @@ -1310,6 +1316,16 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75" +[[package]] +name = "combine" +version = "4.6.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd" +dependencies = [ + "bytes", + "memchr", +] + [[package]] name = "common" version = "0.1.0" @@ -1399,6 +1415,16 @@ dependencies = [ "libc", ] +[[package]] +name = "core-foundation" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2a6cd9ae233e7f62ba4e9353e81a88df7fc8a5987b8d445b4d90c879bd156f6" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "core-foundation-sys" version = "0.8.7" @@ -1412,7 +1438,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "45390e6114f68f718cc7a830514a96f903cccd70d02a8f6d9f643ac4ba45afaf" dependencies = [ "bitflags 1.3.2", - "core-foundation", + "core-foundation 0.9.4", "libc", ] @@ -2151,6 +2177,10 @@ name = "futures-timer" version = "3.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f288b0a4f20f9a56b5d1da57e2227c661b7b16168e2f72365f57b63326e29b24" +dependencies = [ + "gloo-timers", + "send_wrapper", +] [[package]] name = "futures-util" @@ -2235,6 +2265,52 @@ version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" +[[package]] +name = "gloo-net" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c06f627b1a58ca3d42b45d6104bf1e1a03799df472df00988b6ba21accc10580" +dependencies = [ + "futures-channel", + "futures-core", + "futures-sink", + "gloo-utils", + "http 1.4.0", + "js-sys", + "pin-project", + "serde", + "serde_json", + "thiserror 1.0.69", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "gloo-timers" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b995a66bb87bebce9a0f4a95aed01daca4872c050bfcb21653361c03bc35e5c" +dependencies = [ + "futures-channel", + "futures-core", + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "gloo-utils" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b5555354113b18c547c1d3a98fbf7fb32a9ff4f6fa112ce823a21641a0ba3aa" +dependencies = [ + "js-sys", + "serde", + "serde_json", + "wasm-bindgen", + "web-sys", +] + [[package]] name = "governor" version = "0.6.3" @@ -2507,6 +2583,7 @@ dependencies = [ "http 1.4.0", "hyper", "hyper-util", + "log", "rustls", "rustls-pki-types", "tokio", @@ -2695,6 +2772,45 @@ version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4ee796ad498c8d9a1d68e477df8f754ed784ef875de1414ebdaf169f70a6a784" +[[package]] +name = "indexer_service" +version = "0.1.0" +dependencies = [ + "anyhow", + "async-trait", + "clap", + "env_logger", + "indexer_service_protocol", + "indexer_service_rpc", + "jsonrpsee", + "log", + "tokio", + "tokio-util", +] + +[[package]] +name = "indexer_service_protocol" +version = "0.1.0" +dependencies = [ + "base64", + "borsh", + "common", + "nssa", + "nssa_core", + "schemars 1.2.0", + "serde", +] + +[[package]] +name = "indexer_service_rpc" +version = "0.1.0" +dependencies = [ + "indexer_service_protocol", + "jsonrpsee", + "schemars 1.2.0", + "serde_json", +] + [[package]] name = "indexmap" version = "1.9.3" @@ -2855,6 +2971,28 @@ dependencies = [ "zeroize", ] +[[package]] +name = "jni" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97" +dependencies = [ + "cesu8", + "cfg-if", + "combine", + "jni-sys", + "log", + "thiserror 1.0.69", + "walkdir", + "windows-sys 0.45.0", +] + +[[package]] +name = "jni-sys" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" + [[package]] name = "jobserver" version = "0.1.34" @@ -2875,6 +3013,178 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "jsonrpsee" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f3f48dc3e6b8bd21e15436c1ddd0bc22a6a54e8ec46fedd6adf3425f396ec6a" +dependencies = [ + "jsonrpsee-client-transport", + "jsonrpsee-core", + "jsonrpsee-http-client", + "jsonrpsee-proc-macros", + "jsonrpsee-server", + "jsonrpsee-types", + "jsonrpsee-wasm-client", + "jsonrpsee-ws-client", + "tokio", + "tracing", +] + +[[package]] +name = "jsonrpsee-client-transport" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf36eb27f8e13fa93dcb50ccb44c417e25b818cfa1a481b5470cd07b19c60b98" +dependencies = [ + "base64", + "futures-channel", + "futures-util", + "gloo-net", + "http 1.4.0", + "jsonrpsee-core", + "pin-project", + "rustls", + "rustls-pki-types", + "rustls-platform-verifier", + "soketto", + "thiserror 2.0.17", + "tokio", + "tokio-rustls", + "tokio-util", + "tracing", + "url", +] + +[[package]] +name = "jsonrpsee-core" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "316c96719901f05d1137f19ba598b5fe9c9bc39f4335f67f6be8613921946480" +dependencies = [ + "async-trait", + "bytes", + "futures-timer", + "futures-util", + "http 1.4.0", + "http-body", + "http-body-util", + "jsonrpsee-types", + "parking_lot", + "pin-project", + "rand 0.9.2", + "rustc-hash", + "serde", + "serde_json", + "thiserror 2.0.17", + "tokio", + "tokio-stream", + "tower 0.5.2", + "tracing", + "wasm-bindgen-futures", +] + +[[package]] +name = "jsonrpsee-http-client" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "790bedefcec85321e007ff3af84b4e417540d5c87b3c9779b9e247d1bcc3dab8" +dependencies = [ + "base64", + "http-body", + "hyper", + "hyper-rustls", + "hyper-util", + "jsonrpsee-core", + "jsonrpsee-types", + "rustls", + "rustls-platform-verifier", + "serde", + "serde_json", + "thiserror 2.0.17", + "tokio", + "tower 0.5.2", + "url", +] + +[[package]] +name = "jsonrpsee-proc-macros" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2da3f8ab5ce1bb124b6d082e62dffe997578ceaf0aeb9f3174a214589dc00f07" +dependencies = [ + "heck", + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 2.0.111", +] + +[[package]] +name = "jsonrpsee-server" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c51b7c290bb68ce3af2d029648148403863b982f138484a73f02a9dd52dbd7f" +dependencies = [ + "futures-util", + "http 1.4.0", + "http-body", + "http-body-util", + "hyper", + "hyper-util", + "jsonrpsee-core", + "jsonrpsee-types", + "pin-project", + "route-recognizer", + "serde", + "serde_json", + "soketto", + "thiserror 2.0.17", + "tokio", + "tokio-stream", + "tokio-util", + "tower 0.5.2", + "tracing", +] + +[[package]] +name = "jsonrpsee-types" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc88ff4688e43cc3fa9883a8a95c6fa27aa2e76c96e610b737b6554d650d7fd5" +dependencies = [ + "http 1.4.0", + "serde", + "serde_json", + "thiserror 2.0.17", +] + +[[package]] +name = "jsonrpsee-wasm-client" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7902885de4779f711a95d82c8da2d7e5f9f3a7c7cfa44d51c067fd1c29d72a3c" +dependencies = [ + "jsonrpsee-client-transport", + "jsonrpsee-core", + "jsonrpsee-types", + "tower 0.5.2", +] + +[[package]] +name = "jsonrpsee-ws-client" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b6fceceeb05301cc4c065ab3bd2fa990d41ff4eb44e4ca1b30fa99c057c3e79" +dependencies = [ + "http 1.4.0", + "jsonrpsee-client-transport", + "jsonrpsee-core", + "jsonrpsee-types", + "tower 0.5.2", + "url", +] + [[package]] name = "k256" version = "0.13.4" @@ -3717,10 +4027,10 @@ dependencies = [ "libc", "log", "openssl", - "openssl-probe", + "openssl-probe 0.1.6", "openssl-sys", "schannel", - "security-framework", + "security-framework 2.11.1", "security-framework-sys", "tempfile", ] @@ -3967,6 +4277,12 @@ version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" +[[package]] +name = "openssl-probe" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c87def4c32ab89d880effc9e097653c8da5d6ef28e6b539d313baaacfbafcbe" + [[package]] name = "openssl-sys" version = "0.9.111" @@ -4324,7 +4640,7 @@ dependencies = [ "quinn-udp", "rustc-hash", "rustls", - "socket2 0.5.10", + "socket2 0.6.1", "thiserror 2.0.17", "tokio", "tracing", @@ -4829,6 +5145,12 @@ dependencies = [ "librocksdb-sys", ] +[[package]] +name = "route-recognizer" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "afab94fb28594581f62d981211a9a4d53cc8130bbcbbb89a0440d9b8e81a7746" + [[package]] name = "rpds" version = "1.2.0" @@ -4944,6 +5266,7 @@ version = "0.23.35" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "533f54bc6a7d4f647e46ad909549eda97bf5afc1585190ef692b4286b198bd8f" dependencies = [ + "log", "once_cell", "ring", "rustls-pki-types", @@ -4952,6 +5275,18 @@ dependencies = [ "zeroize", ] +[[package]] +name = "rustls-native-certs" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "612460d5f7bea540c490b2b6395d8e34a953e52b491accd6c86c8164c5932a63" +dependencies = [ + "openssl-probe 0.2.1", + "rustls-pki-types", + "schannel", + "security-framework 3.5.1", +] + [[package]] name = "rustls-pki-types" version = "1.13.2" @@ -4962,6 +5297,33 @@ dependencies = [ "zeroize", ] +[[package]] +name = "rustls-platform-verifier" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19787cda76408ec5404443dc8b31795c87cd8fec49762dc75fa727740d34acc1" +dependencies = [ + "core-foundation 0.10.1", + "core-foundation-sys", + "jni", + "log", + "once_cell", + "rustls", + "rustls-native-certs", + "rustls-platform-verifier-android", + "rustls-webpki", + "security-framework 3.5.1", + "security-framework-sys", + "webpki-root-certs 0.26.11", + "windows-sys 0.52.0", +] + +[[package]] +name = "rustls-platform-verifier-android" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f87165f0995f63a9fbeea62b64d10b4d9d8e78ec6d7d51fb2125fda7bb36788f" + [[package]] name = "rustls-webpki" version = "0.103.8" @@ -5004,6 +5366,15 @@ dependencies = [ "yaml-rust2", ] +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + [[package]] name = "schannel" version = "0.1.28" @@ -5027,16 +5398,29 @@ dependencies = [ [[package]] name = "schemars" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9558e172d4e8533736ba97870c4b2cd63f84b382a3d6eb063da41b91cce17289" +checksum = "54e910108742c57a770f492731f99be216a52fadd361b06c8fb59d74ccc267d2" dependencies = [ "dyn-clone", "ref-cast", + "schemars_derive", "serde", "serde_json", ] +[[package]] +name = "schemars_derive" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4908ad288c5035a8eb12cfdf0d49270def0a268ee162b75eeee0f85d155a7c45" +dependencies = [ + "proc-macro2", + "quote", + "serde_derive_internals", + "syn 2.0.111", +] + [[package]] name = "scopeguard" version = "1.2.0" @@ -5085,7 +5469,20 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" dependencies = [ "bitflags 2.10.0", - "core-foundation", + "core-foundation 0.9.4", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework" +version = "3.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3297343eaf830f66ede390ea39da1d462b6b0c1b000f420d0a83f898bbbe6ef" +dependencies = [ + "bitflags 2.10.0", + "core-foundation 0.10.1", "core-foundation-sys", "libc", "security-framework-sys", @@ -5111,6 +5508,12 @@ dependencies = [ "serde_core", ] +[[package]] +name = "send_wrapper" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f638d531eccd6e23b980caf34876660d38e265409d8e99b397ab71eb3612fad0" + [[package]] name = "sequencer_core" version = "0.1.0" @@ -5216,6 +5619,17 @@ dependencies = [ "syn 2.0.111", ] +[[package]] +name = "serde_derive_internals" +version = "0.29.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.111", +] + [[package]] name = "serde_json" version = "1.0.145" @@ -5273,7 +5687,7 @@ dependencies = [ "indexmap 1.9.3", "indexmap 2.12.1", "schemars 0.9.0", - "schemars 1.1.0", + "schemars 1.2.0", "serde_core", "serde_json", "serde_with_macros", @@ -5401,6 +5815,22 @@ dependencies = [ "windows-sys 0.60.2", ] +[[package]] +name = "soketto" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e859df029d160cb88608f5d7df7fb4753fd20fdfb4de5644f3d8b8440841721" +dependencies = [ + "base64", + "bytes", + "futures", + "http 1.4.0", + "httparse", + "log", + "rand 0.8.5", + "sha1", +] + [[package]] name = "spin" version = "0.9.8" @@ -5540,7 +5970,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" dependencies = [ "bitflags 1.3.2", - "core-foundation", + "core-foundation 0.9.4", "system-configuration-sys", ] @@ -5791,12 +6221,13 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.17" +version = "0.7.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2efa149fe76073d6e8fd97ef4f4eca7b67f599660115591483572e406e165594" +checksum = "9ae9cec805b01e8fc3fd2fe289f89149a9b66dd16786abd8b19cfa7b48cb0098" dependencies = [ "bytes", "futures-core", + "futures-io", "futures-sink", "pin-project-lite", "tokio", @@ -6125,6 +6556,16 @@ version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" +[[package]] +name = "walkdir" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" +dependencies = [ + "same-file", + "winapi-util", +] + [[package]] name = "wallet" version = "0.1.0" @@ -6270,6 +6711,24 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "webpki-root-certs" +version = "0.26.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75c7f0ef91146ebfb530314f5f1d24528d7f0767efbfd31dce919275413e393e" +dependencies = [ + "webpki-root-certs 1.0.5", +] + +[[package]] +name = "webpki-root-certs" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36a29fc0408b113f68cf32637857ab740edfafdf460c326cd2afaa2d84cc05dc" +dependencies = [ + "rustls-pki-types", +] + [[package]] name = "webpki-roots" version = "1.0.4" @@ -6380,6 +6839,15 @@ dependencies = [ "windows-link", ] +[[package]] +name = "windows-sys" +version = "0.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" +dependencies = [ + "windows-targets 0.42.2", +] + [[package]] name = "windows-sys" version = "0.52.0" @@ -6407,6 +6875,21 @@ dependencies = [ "windows-link", ] +[[package]] +name = "windows-targets" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" +dependencies = [ + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.2", +] + [[package]] name = "windows-targets" version = "0.52.6" @@ -6440,6 +6923,12 @@ dependencies = [ "windows_x86_64_msvc 0.53.1", ] +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" + [[package]] name = "windows_aarch64_gnullvm" version = "0.52.6" @@ -6452,6 +6941,12 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" +[[package]] +name = "windows_aarch64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" + [[package]] name = "windows_aarch64_msvc" version = "0.52.6" @@ -6464,6 +6959,12 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" +[[package]] +name = "windows_i686_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" + [[package]] name = "windows_i686_gnu" version = "0.52.6" @@ -6488,6 +6989,12 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" +[[package]] +name = "windows_i686_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" + [[package]] name = "windows_i686_msvc" version = "0.52.6" @@ -6500,6 +7007,12 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" +[[package]] +name = "windows_x86_64_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" + [[package]] name = "windows_x86_64_gnu" version = "0.52.6" @@ -6512,6 +7025,12 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" + [[package]] name = "windows_x86_64_gnullvm" version = "0.52.6" @@ -6524,6 +7043,12 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" +[[package]] +name = "windows_x86_64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" + [[package]] name = "windows_x86_64_msvc" version = "0.52.6" diff --git a/Cargo.toml b/Cargo.toml index f14f2559..3b1c9f12 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -2,16 +2,19 @@ resolver = "3" members = [ "integration_tests", - "sequencer_runner", "storage", "key_protocol", - "sequencer_rpc", "mempool", "wallet", - "sequencer_core", "common", "nssa", "nssa/core", + "sequencer_core", + "sequencer_rpc", + "sequencer_runner", + "indexer_service", + "indexer_service/protocol", + "indexer_service/rpc", "program_methods", "program_methods/guest", "test_program_methods", @@ -32,6 +35,9 @@ key_protocol = { path = "key_protocol" } sequencer_core = { path = "sequencer_core" } sequencer_rpc = { path = "sequencer_rpc" } sequencer_runner = { path = "sequencer_runner" } +indexer_service = { path = "indexer_service" } +indexer_service_protocol = { path = "indexer_service/protocol" } +indexer_service_rpc = { path = "indexer_service/rpc" } wallet = { path = "wallet" } test_program_methods = { path = "test_program_methods" } bedrock_client = { path = "bedrock_client" } @@ -42,6 +48,7 @@ tokio = { version = "1.28.2", features = [ "sync", "fs", ] } +tokio-util = "0.7.18" risc0-zkvm = { version = "3.0.3", features = ['std'] } risc0-build = "3.0.3" anyhow = "1.0.98" @@ -52,6 +59,7 @@ serde = { version = "1.0.60", default-features = false, features = ["derive"] } serde_json = "1.0.81" actix = "0.13.0" actix-cors = "0.6.1" +jsonrpsee = "0.26.0" futures = "0.3" actix-rt = "*" lazy_static = "1.5.0" @@ -78,6 +86,7 @@ borsh = "1.5.7" base58 = "0.2.0" itertools = "0.14.0" url = "2.5.4" +schemars = "1.2.0" logos-blockchain-common-http-client = { git = "https://github.com/logos-blockchain/logos-blockchain.git" } logos-blockchain-key-management-system-service = { git = "https://github.com/logos-blockchain/logos-blockchain.git" } diff --git a/artifacts/program_methods/amm.bin b/artifacts/program_methods/amm.bin index 1a2fabca8568da47267a038942e14d8ebf476f44..30cb7662bcb42bfeb9469c5a34e1e36a97043760 100644 GIT binary patch delta 977 zcmaFSBlDt1rlEzgg{g(Pg=Gut*Q>$?hUS(A7AD5#hGqsvh6aX4=BCpx*0PCAm$}Be z1e@&k%hy<0xv|MifBlek16B#f*R1N&rg}L!Wx0AlJ1}kh@QC#^R-G3wunJF~|CCi> zI^z@8^;nev4cCx1#$!0h_UXD$SvhfOSD#*hOBQCo1y;QLpLG2P}ZzQC`?Co5x$FQYs>$12nQ N>n-c{UvJs+BmfJw|K$Jx delta 977 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

1l`Wr2-m@xj(j3Tcm+kP z7W8L$X6xnvg0hQ&nvSLzN}O@boNNVoC)+KG*?$1s_;N##%?XjOvSfn<7*Jybo7+xWhC)H9TCw$3pF) zaA%F&|Hm09YcQMd_vL?}$o|ONm#;Rvk(`8+z9InSu=jKt(***Ejs&n3uHyyd?D_38 z_(=2zq)HWWk4N}5f!3U*0^A9&BxAL@GVnKR@=ks5p(}g!?wi%8PoKWM``*|mGc%q4 zNNC$Wy=!8R($eYEdi+8h`f0WQ!}wneTl;JMQ?*}?hwfbC&kW7~i@)EmdRkYnU)M47 zrr+>IDESBUu1V>?A-9d+_Di4EJ8S%1^Aw03xu->S=vD%Z5_R?dj1C6E0- Dda|Yz delta 8722 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 Dyh*Ih diff --git a/artifacts/program_methods/pinata.bin b/artifacts/program_methods/pinata.bin index 278e88f42488f973152721dbe0151153b495d13b..50d9648d13cc1dfb084fd2cc8c3ae1bfc64065f7 100644 GIT binary patch delta 8791 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 V$HiH7qvK|3T2JfIytr59{4X3%xW@nh delta 8794 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 diff --git a/artifacts/program_methods/pinata_token.bin b/artifacts/program_methods/pinata_token.bin index 4a4c8bb602d1fc1b06820338faf8b39b4124316a..57c73fbc0c3fbba749cff71aa664929e96bc9aef 100644 GIT binary patch delta 9817 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 delta 9807 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 V$0=Z?YjC|m4yhY1FvC?Nfgfu2NNoTB delta 1269 zcmaiz!Ak-`6voxux89<(qTTYSLS(bM?hX=3;G^ zqLUp8<|tiLgy`SskVN-Vx-~PMfA5>`?f1Rybi7ZdF)3R-3 znMqs2NJm&BuNM$i4LhF8?dId$0jzTe=ye*DG2YuTg|8&F6)to4CK&8gJOX}Hq$Q%N_Fu<35+|bS8h>Eq5oT!n7+OB=_Ns33_0MlGPQOl|#15@; z3XRdfWsv;2JVBPuV3P%#^U~@h-%_i=8gtnjSIP=>saq){z}W?%deGx+om2mSZVBmw zkbcw!7ouW8gMDiii;pCxh;L+$ndi@M9wf~+4AaCVe99p$k+8678n$KGD2Y%K8y?cz amLkgUdW->DxB}N3WRObS1sZqdaNrv*k4cCC diff --git a/artifacts/program_methods/token.bin b/artifacts/program_methods/token.bin index 5f6d3781756d1ac7fe3fe94d07cb875970b8bd19..3475c76764725b0e54f043c7af61482a5b95ac56 100644 GIT binary patch delta 9600 zcmai(eVk3z-oStR>~k0zVGPZfp}miZkz$4!uM;y24Iwl#p^Wk}?wvA<8ZUKJqYzQ# zP@d??6(ujBO^EK}$xF&qbX5wU)Q6Jh-aB2URL^&xv-a%m`3(Kx!*~7G`mNvF`mME( z)9)v)+LyR6S-bRHvld$J<2kc(v{^a6tvUMBy+a2th#XsD$RMAH&!>r5C6e%*A!!oj z=i&H`L1_SMKA+V2MPw)Qla+i5eCExdBq;eg*uTJ)FZxv^YoQ^AntuU4xvpAYNRD1Y zf&yoQ1HWOAhhu*i+3(@o;c^UWq&9pW_HS|xI10xuHsqw*@R2`6);w!SisA{nCL1v* z${|g@W}t$BR5f9aUz7YrhHO*(8JxPoH83%t$+i~^VK@@8MQ{cNwPC&;q0itHPs9>y zX|l(|BjGFzjyN1*!3qZU5|a8#!72Dt_!`A6YGa^BJ{B$_B6lnK8u+XALFudb2ly}s z_fp(8Mw3w(Fk0~>_#3!3+|ssq3j^OXP)|*`0AGOXD(+gx`ue_J znrW4<8==sn!RK}Zz9A~wC7RR#Nr45E0Qqy{)CILRJ zp;G~A`t4;Op` zaVnAX@G!Xa?}n79`G13rw}TP`+m83Sk%P0B%&AJz+fWkQoJil{lO+r+XTVu-3?Ad* zn42|efeeB5_aUdaA(i@^{_{ONaEXHzCkJM z-QW~F+p|Gjhs!s}fxR2N0Wba7kYmcgui#^!QJTuZqzp|4eaZzGk#ipmW}t$BlWM^n zxa1R;cfcEu(t4DFDtKkJ0!`Wx;qoKy{7dXqfx+99zP?>FnX%nTsZSERYLX5|+IM(X zp?+V(+1)fb>1itm!&QYO>E@2%exvn!v>n#k(RvSGD1mOa>I}uAM{}_VE;>#1(kAWL zH@%6_95}SF0 z@Px7YiO>n|nerdlM>(>%8FqN?x1(^mhg)UiIP;yz&Vs%7;rp=cbQ^N*9ONFm^5BKY zRRi`(g>_(@USA76LZe-Ypq4UtJG>f3UBtm(;d$;wDz{+xHsnq_Y0{jM`N=Kbr-Nh^ zPG-Gb5)ZZDbi!$hXSb#Tc2%zr$_EULVL(|X59DfckPYmPYDajJHMK~esA=1+vlH|` z0@@4K*@=4nnDp*>9K$O2F53(*z384A=}Sc4b@e_GZe6Oc(0W=2O7-h~p-H!LRsLc~ zt}kk5CA*gw!)KU(qe{eKxZr))j)p@xn=aog z`3xNL7`g;bU<0R*eFN`x7f8!HG?~TxT(vJxp5L#^S@ z=+A0H?i-4M$)+q+DLe=lCJ+GSz;AF#q8os<1g;Doqt0C7FrI+>T!&%`tgiF*^L0ZF z#}SDeOqr)5_u>TFSehy46n_Di9&{Hb|Ap5Y?3{^v;4L0r31_66azw2^2^V?R2mh)` zF5Ds-h&UO;z-$Jb(60_}U#kB!c<>l9#v{kBG0hi{Fl=-%C0hkxFP!j!YgetY)HrIA zqIx9{mOd@i*$&9dR@E|ngFm!yIDyL~P)bky2-4KRr)ABl*#yF#+^znh2!6I zyZsJ$zh~W)5}H&mQ@wRG*#T$gR%cE+Od_zJih3I^WBs)%PF3)^JX2;y&1)}l578z) z_u5c+ISX!53zov31@fiUcMaWt^l&>4x0zBDRU{pWLs~ymQdFFtgNyr`vRBEQPv)8Z zksE+faDj(c!pGRx=`E+M#Mku|`sfFzV2@|sX1Ms;pIQSreg;SONLH0S4@ACL?ogMm#hUMdN zYaAzDxqZ&6+M(~R9eTSC53dJJ>8zHIK>e`^ZU=jkb-5lhvgu%Jijk{UxV@Om6nV5R z0(Ho zR_KTQITxOy$DeiUV93)H`1fudl*7em%*dT$UurF8^ZxtVwR5bs{bzlYui<@iG%;>Xo$d3^eQ31PaJ{>wESluwbgR@%%<(x{)R|~l!Jay6h zIZZl!8Wi%wo30ralu8xdZ>+>7{=<6c zUyP3&9h3@{m3E7`7w+K&q4=?|CY#Q?o4*IofXQRTSbeD`fuG#y_JM1`jx%#$zej!u zuH(vkO8sU0s^pn41m401&M|la-V5KXHarGbdgP_n+NS=Afl%=hZdCL*>xRBWyShJE z{p-`K@Gt)kM*6UQe7=SIRpJN%vANZ9%KT@(dlXNA&s7AaK<)bmocqt9lq>!bj{jFs zzKhP+rQLs7FB<-LeL2N*3E|YBOje<;^$Z>7f@|6Ha0c8|X-b->$zNgTjZtDPYvJ#q zX%*JzDgIC`U+b5x;cfiubziMpth(*|>ou*OwLQ)MQ$RZqUfa>XLYrpw?c}fT3myB9 zNZK+(3Q-(Ky^rH}=8DInH-pV#SRM^VZa$l9UF3J-3PboSGC!VwjOKBK-F&SDBoiLg zG5Y0Y&o6=}|2MznP>D9LhG+gj=ZLNk$=3`R^`l3}o-nLRWK1X+>3KFEg$r0KorLTd; zC(AjP`KXfAHo?f-A}++_)eM}>3JO&o+2ABx%GsQ(6eRg*dM#+yif6)QH<*!c9DBo_ z{4ic{UG&)6JiyQCm>HD*O5dY(*boO})cWIap-NfE&RMW7&nz(|UoBV-FTUU|I1NwE zjD8{58+=$FM!_Hy+UtD{@YrX{MzujGnRgy3%u~D$PNgQC6pm`nwU3@{ zSDRyD-1VGS%~iMv&c>j8rLd04{Ktb%5lIzX*(xaZt!5jT9i&cf2v!$qL%xQWvz}6j z$n_K&3=X8QKOXochZDT9B_1jT*WSnjtQGGbRaDF1jr$ET6!&gJXZ+HTElOejO&G+6 zg^K6Hsa+{*RrLqqY*M^Z$)|K={b7FWV*iLmml!A;8|@sn2OT?6*=f;>&gRG9&Yn}U z8;5uVDPqsDTMQrZoPtWY_(wBTeN6Iu@k2r)=U#<)KD>NCJK*EwyjXGbftTm}G1#ClbXM|z zz*};ok6+utdbev5%4+W(lN<)Tjc6LYw3ivV&g=zWz}_70pkWlWF=dsip%KIQCI6Qo zccUG0pS%Iz#Hny1+OL3!v@j#rtF3QCffkZ&G?o%&VS~G{FeUl{YEO6vF1(@ovXF7Z zDMAz^sQD+y@m_v{Uaz>xc%ET{cy_83n8n<;(Nqo|z5z<)LzFhXh85lTE$(POKCHpdsN)=tZ z$2sS7U>4XRUTib^vef+JuuP7A%G>gkC-~tLE{Mp&IQp?}%X8p)@NBg{eip}iDh}BZw(tMh4D6le zT6_$S4e?`y>V$Qk!pIUDjq$%+j=S|tGHaG;A(s))X1M+x$j`_DKGx&YMo__>Bsd1n4AJI17jVtkSZX?x7m&4D4g7bN2uB`$h&=M ze+=NiEo}qdgv)twI63bbCaNQOqS+xvp7bI=CyaGF;XCj;BDPLf3f{8%=K9-QNKS9x zA-z*tT8H-OnVDTOGdgtW+^MsS8a^;Rt>dWhrau0JaPyvly4J>Sf!)6NnkI)I?;bc@ zqr|$mN1%;XqbO|l3#2w}TU`9`{cUShdLlb;u;!JMdIdU!&*ucz*DN-B1X7dIucDa= zt&%gk{Mn4m4p*6h4gG4~9!W-6%MFZbT9aFLU^CLf>!t^cuyNR5-+C=KutRTD!_;ur z9f98AZFzy~YToBmUSLYi65GGr+v8}wpfGa9T loSgZmRh#)|{wHT%EdZ0!0?AgLfq~siv`yB5(}9;B`#-5lS2+Lx delta 9537 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 K)z_h?@A(%Fuum@l diff --git a/artifacts/test_program_methods/burner.bin b/artifacts/test_program_methods/burner.bin index 96e339c2a998e1eedde88178b78416daa0ac5baa..f21a5499b9f36938b8e9d12ac924273121052802 100644 GIT binary patch delta 478 zcmaFRApW31yrG4$g{g&k3yaQt5kpH;V@nGQOG6`b17jmILrWu5hUtYTnAN0=^>T8` za`mt%nBFj-<&-cMiS4lqSTY%Ln>lR}3kNoR(*>`w7*F?G#3GJc@AUaV&A6qd4UKTS z7i9c){lzRln6MkL@ieo#ByQ~v%ULv}a7sghOWM!?r;6!d1I+Qt>thWUutrPV8X4tT QW!fJsXW9N>IctLi0Qg9Hg#Z8m delta 478 zcmaFRApW31yrG4$g{g&k3yaQt5i=80b0Y%_BST{g6H8MdFtlWtUU-68P0Cm=C#Nh| z4~v574f9z}31gAi9=m`glM%O>(-yICVAD5U@EVKpbiYL`;<)urpAXcGTUy%C2)BDd z#&6eO%<_W?y8#FEiAHEgiQ@C%*;(K42;bU4J{2V42>-fr#IeaQI|5+%gHIr z)x#!Vc!lK@HjUf;uCin@3SnxQevqHlWcuH0EDqSTf$ftvvBYg5#6iZm6hMq;zriAo z&G_wxH(2VJvB^L@YJ$sHXh4|ZmzOp)!mnWZ+B+;9IIW-l9-pkVDIUW&hOo-CXWV7k Ko^hA8K>`4E7l1tg delta 477 zcmaFyTKvUp@rD-07N!>FEiAHEgbj_13@i-I3@r?Sl!2jvrK#EU#@j6FQl@%2Ic2$e z*yIbZu$;oCal7ADmP|%$GSl;~vKUYQdyT~bt1QSuX%kD_Hi8wH8sk;~HlO_li#Rs( zw;SGIsbj__1M#W}ZgaswVTNB`+RzBUg6V7TuyEkCe)@ZSveKq_4Br^SD$|~Emt}j# IUDgH(0ROOn9RL6T diff --git a/artifacts/test_program_methods/changer_claimer.bin b/artifacts/test_program_methods/changer_claimer.bin index 692d152bcb8130a3dbb08caedf7e7a216e3a073f..024480a1790e7af67c5365fc04dee3da466cb86b 100644 GIT binary patch delta 8765 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 j#OR(kf72gxNhrf^vo5U2# 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 TwdN6CIfC%Mws54^hCluXu&<|P delta 8673 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 G$^QjbGMBsn diff --git a/artifacts/test_program_methods/data_changer.bin b/artifacts/test_program_methods/data_changer.bin index 86fde894fd910a0af2b203b71324b31aa906148c..2443b1d4df4b847cbc0b603b790d9f2db98a5fdb 100644 GIT binary patch delta 463 zcmdncE54yuyrG4$g{g&k3(JQkf=0#$mWF0#hUSJw7KWC_rsmTbm$DdO5q4V2at2d) zyZkbiY(`A+>4|q(jHjPl&f4|q(jHjPl&fFEiC%8MGTFM4J}PA%ni+fw4t$qiGc~j^o@s^)ufH}a&pRY z^$fA7nBFp*<+LysiS0>qSh5(g$xK(6!=fQ=fXB>>Dy+iOFEiC%8MT|_042>)ejm!)U4UEjqjm=Fh7^ZJL%&aDDte2Bh zmaAuoMaA@%*(|4pu}ExBn!}RCh)rg?!Wcp Wv4%~+L>8I$AB$PG|5(ggBLM(k7l01{ diff --git a/artifacts/test_program_methods/malicious_authorization_changer.bin b/artifacts/test_program_methods/malicious_authorization_changer.bin index 8f80ab581394fc23c3d96e9b5414b71c4cbf888c..e6882add9af5201377337d8eca9cf8874577df72 100644 GIT binary patch delta 488 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 S{iA)dgz)Gqp72@w`hNh&b+df{ delta 8678 zcmaKxeRvhc)xgj0y&;Hv1p)*J&F%#i1u;Ryhr$152Hq#dV_*R ziV~>yMnS%x7t~llXg6)K;6t=nDUymb$Y(S{&{zTn1p#?~yLUFb^r8JL`OTR*bIzGF zXJ+Y*^Z@&TJhp;-L=X&>GRUHKcws1c7)gO7uhv9ByB}R({-8mxk$Z_<)BFA z5KsOByv4^m;j*D2X|Kk&ID|epL2(A0-Pe$#u&!$|nSVB-zfDv=R@Tt4jfShE4N?mq z^g75jH6mF|I8n(Th2Lg^SjBI`@4~GVe`8fu>O(Z`pH|$5`XxPlp_U1Ug`}5~5Bf@E zCG0xNBV{_W}Qg! z2tzKYdFOm1l5+=Y6vx$zT>bNqv{1uN!Si9)@2US5se`Xl^3NhQf7d@TtG*T4dzT?2 zm6}l}MT+h;BwJbY*GSdJ`l9p+L^bgq!_E%Jsj+B3m}$r^)vYgT&W<*OZjSsdW?Mhj zkmgF>$y&8bzbP1Ad5YD!*N`5nU(#uj)GRMu-hvax8M0lCI|OeX;jL!UcOv6QdS2zi z`959)m($<%`YU*(Cm$=|gH4k0Na!GNeoy_``XT<0#C5?fo+S zqDW?SNcuS(luBz=mA)t@JnefXev|+x!_A*W8qrgz^h||^=NgV-_Pm?nEFWKl^Wc`M z|ENnMGkyFjTnrCX@*{BhWJAiM9F~!yNd+A;REH&SkPhn=pNC8C^fu}sO_O{dhvD%L z8!}V%{|7vBR7je`w&N=Tn#`ZV%Be)jCZF@}awC1OE+=WIq`@7K5~ImNALlmHWH1Wd z1l-7)~v(&5IvlBPNa4|sS=1T#b4m{bIILclpiNEmK7UPpyaE` zjC|yVGNe_kCOv)pB)sK$Z|T;-MXT!#T^ z%HzXuaCAuGltQz!CeLG#T@CCB^590Ff$QKw=$oMAC*bbLb8HSWpm!wY3;jqqma5ct zA@e9lw!)>p!|fux$Hz0e;5hx=$o>QNSI5>}SsCnf57*If0^C;FQ3_XhtV^o3_)9i+ zctxYgP6W+V#~OGyOsYB#c0VK1V_4HEDpTO2$lYQx_y>_?i@e<3Kv^z<6B%#s=A{=X z%dlGwHqw@y*)%>R-_fv;2G`PkNt&Ey0=u5t5$IsFxE;x zt8Z(W(mGj_v-f+|HWSVt?@bibmtq0mr{XihN{I=q(86)OHCegIJI5Y`H^TACp@nd8 zf|t3w;kJMD%J%g)Qj|6uQbZi=h0BB6(*FiE&;P+Cu)9umaH+?WrB@%eg3r+D@c2J? z3-V{U-Wwnn;dkgiTum_KCQSw)cX z06eexCXa8DkVuW88ib?AK?0i#2?GN1-do#X|y#{e9KT}K~i$y7wGSmcS)&vYM{N z-N=0z^%7jp_}0kn%Do5feZr8EX#c));vO>Fcc}Fq&6Z?9Z#7^B>>D8OT5;E~<8xC+ z5r=O$^`nZU6@JhBnrn=TQ$AeIM3qW@20aYq8{4VSJFNFp1KVQ5k9@()u$?KXYItAN zC$un|D%b;zEAW}oiHcR%61l2`rKDLA^5%}&G4e~oJ+QgS!zDUT%{cBJSD8|vxZ4A~ z52m>N^}g~D4e>O%J2L4(N~rISkPBDjg`}G^fiA19l=MKjd0ZYlEUl|4ErZdClC1Yf z1s26K|NvQ8BSX2fdGSh>Z4Ma^@! zPhowwn<6S;$x|r^d(Ea7%X@Ii4pZvY!fYwv==9~q8F*4rNMe-!{?pl@pPEhYfx*_8 zd4WkW;e=mka*lqu>ujJ0;j=Jm9bOKf_i+t;!PmdXH2jC%Qv3+~y-)roe91Sy9{$PW zu-t^9Cw&8E!P?WF0WUnJiSFZeGda@fPh1=Wv*7Q1{5$xRPhT}GzVTgWvEh%Hs-jrG z|4pD>toba_ng1hcu2%gJT=#=1jVii-wrZ9HJ_&?B!kA@RNE+0tG@HSF<0n>I@wmq| z*+0jNW*NK|4k=?lhi`n&bFN#VCVgPnnH;#cPre3D@#I707!Cb=9j|QZOSh*_$eDV96wQ5x$+)NY8Tp!pF(C)FS-VSWg_&evF zz{wcxkC9oMxw4M2;;Wg?ojanRd~D7-EK=}+>6}wGzX(@;5WU;meAf{su%a1j^K7`{BU3gKN1H3)tYPRQ zqiy~k-i|>%9D}%l^f}5mr26RH)$VZP7koU!BfBEoybzx6i$MIBJi=BQlBFgngZD$(qMLZpd#o&h^enX5d`htIMkjt7jt?E;@Y8P6XlV!bYk^u{4O#Bmaosg(bQ4~d8x z-#@_J1qZl#gq;D8+6_BNqCix^X}EN%A%^1RL8{O%4cVe5cqfKUiUB!_kHPt$o06c` zxI5`za?q5OO1`@d@{djDE@wL&)0RX(WJ($N=NK@AhKj?c^Ig*J@C;lxBl;D}W-X4( zNlbKC+k87*xF>oD+59|Qv;hOugq3iPk7L_$4fb&ceDEAe%lwW38)z8*vMI|Hw`tFV zq1@XAd*NDmYcSgX`gqD8?B>WC*l+N0cw-Scpd#{eM@}bSl2&!qWG*=pZmA}GI*|#! zH=UP~?a=|7*(PO5KA@W>#S1-t4ffZG3vm2Po;>?!9REJv3RnM$dyHDrGjQD+BkWw9 z>68?!P}|cc*`hyazY<VE)E zY(~~AeI2?J@~fg30=xgxYc7w_MYufd3(=%&c?_~ola<0(;i3*9NmD$EGv+J?W-DF- zCvsL7C_V%Gb7rO6 zHC~deN!iCd=2TMly_sV65=%e?;zXC{V1Ma0`w@{HhI6*s`d;YA{yY1b>3m(c8;;YV zu`>Glw0ZF@MC1eB8p`59{mE(+xZBJc%3<2wThnjh`Ubu$sU>JobN2E?P0Ttd|JB!W`NDpY>qdZvV1d~2Ir~q=i#;Rc!yd4VGpt9H1t#* zUV@kTlIkSfqk~u322H{P_^9eX6TU!ycUvBZmv!`RPzgEI6?net{|#K!8Hel$+voqJ zTrB1#=I+Z4a7L2p+^uboj>6?_L$XVG++{M=3wGv$%ANCH9$^v=pGq~s8n}YOvr^USB(9oke``uH9~W$c-iD3UM66Ym`{i>@d)F&O z3*hZOJ`DHX?8(!3EHvzMDr@xoUr)o9{btko{>UsIy-#!Z<K$6GW^$pcK4lo!TC_u)lq3 zzgurk>3>V#zJ2@MoSKqyYw~TkM6{*BK35bBTN?cPl?0Z#EI3uWk|a`76}&l8^+qu5 ziqbJ_f;}U5FAv6EQHmYcMHVd&Hov0O(R_G$u+x>K)>SKl$Mq{oZ11k?(zj1R!IRVb zT*-UKrpHzXoBh|(kqxW=i%s^}F1P+~-Ca`ur~IZXPW%4iV4}5gO)$SK((o%i)=C^0 QQ>1D0tyc%dEPeL>0eqXRWB>pF diff --git a/artifacts/test_program_methods/missing_output.bin b/artifacts/test_program_methods/missing_output.bin index 4994ae3f16f692b6e8e09af0fb958d2ad4d89f1d..873f61a87eeb4698c16f40703498f31db11a14d2 100644 GIT binary patch delta 8702 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 h?_V4tT1A(?u;U_J9jPt*i{~x$DwGjXS delta 8717 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 LOdb{c!V~`sBU88J diff --git a/artifacts/test_program_methods/nonce_changer.bin b/artifacts/test_program_methods/nonce_changer.bin index 017de8b3bb5eda6b393c4bb2d8cbbadcd6c2e5b6..6a11964735dad4073cc4c8229c6706743eb0084e 100644 GIT binary patch delta 8698 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 delta 8695 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 diff --git a/artifacts/test_program_methods/noop.bin b/artifacts/test_program_methods/noop.bin index 23195ef2ddb854f396062d1f0c0291a6b2fb8398..ecb1662df5f7343f9938161a6afe2d89b1530b4e 100644 GIT binary patch delta 8703 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 delta 8703 zcmai(e^^#kw#U~w=S9#^0nrpO&v~UpqXNXh!VrHnsH7l{*{BIg6BQ~Z{_65{#7v!r zQM{V3mWue;#A7s~qQ_gNqGVQPtNrp{Oq;&+H0@9 z*4lfYx8Z7!nyWnuL#49Sefr7QAITs7+Hh&laC!4#{kLz4TtnRyKtz%()0xvmVGf>D zOH?(?P2E_&9_&hVQ%~m8;Hl9n)q!PMqS&)UjgIk)z&9Pd7#$np-PF|@KY=RHa19N2 zSq&tAPZW#++<``b3&7J@{u=lK4Dx0E82mH1Gjm5{=MgzUlA4W{O8K^|hx|a4Jlsw9 zvwR9T9_(H4MsTfz&w~Ajs924)pqGBc{3G0i7Slny!8Fny-wO7BRHat#Uw9Gy;UJgQ ze*#sbL48c6a5M-Ht^A273G9+A_WcIz$axh)Mc$JQGw-l&}7^f1tnet

lLvP0_bukO9KePz_>Cxhno7B>=OB3Dbk#Im%-iuc(FzBr zf!BlmxqlIOn}aWb%fRt0A50R}rK?nGu}+)O(1;Gn+@S#+hYlsosggvYqwP#y19mz1 zYj8n^N;%xWAB?PrXZ^rp;a3!i_Rql1aiHuH0X@d+`81hE`AC$G2Je97;BW^U9V9vp zh29A4(N&@n7%+(^m<$d;e{ZRI)01&Z9xpv*>^vnBI}`S_&Qhr-J2<_gMCJ2Uie!6_ zf|r8D^uoadJ7GOwm3a*~a;9o-oRC+7tFmqRWpJru{It8;>DTE98k`gK_isNzA^0W~ zipUTXRDhimG=rTJ{He1<{y8euaQ^~u@;pQ)FYr@v1X zSiuY6uv}CgR!{;CMt@6zMBjl&&b9l$*$w*Ok$pV=B6!$X?~cl}H&~)8*pShXOP&X6 ziKaUEIJhC-_UtWiDcHN!5vVfz?fyD>(2!?05Q$iED2M`Y zb11mbU80C5?3HiFGUH!SDNC^o&bV8m!em?i5Aa0r0J3tU89cI0uFDjSC|%svAX6?l z#=(2Rp)hb56o^=f=_Sz?7!b$`7l8YM{h8kf7di~Q1^yOW^%Tn!LL@o}{po^T$krvE z!0+XA`ZQFfk*{MOUP#b2lxfH5mIlst@JG-SkN#fI_UnxpcgQorm9XP}p7(8Vxx=m> z!4t=|IZCFL#+>tVS4qFpN|Xsf2Ob!Eh3Ew^Le;D;i@=BMW0XDs=RqzE5!Gic46XW` z9lJg#%jMuu$b|!2z)QiA%pFjzj@#oA#ApZ~-)0#_s5qL@LDW+*!E8gTmuE{-u(A3F z`L>U=%vgO%?&=ryVi;EJu@AC3us_(FG!NX1-Al3c?(kG!mW!m>#++8UudHwGCsED@ zl}2*a)G#~-tg@X^{UOJ2uS4g8(;e#efGO2he+}%yc<(wBkn9t|UO#*QE`LjL5{(>#+*_SD8G$aPNYbB+km%$N`yAT| zt_KJ6g3g1tK#wz-o1dY4 zG!!}vJpwM+ZEr}xLlUj92T&S#H2RO^3ElvI5mPEA1YNU zV84Al3N`Etl^U6SA4f5sYWra{ct6;i5Pt>dIrwvM$qAKC^7zhwz;WjoKOXE4?q|6n zh*qN^1r1)uf91&tR+>^@879&CQ*JZBB-w{5!E38gL3sTw;5vuiL5au@aBoX5%>y69 zc(@07jOc?RodV@t6dM+=W!DH>!IpU6sV{@Nw%om700t*wNUs?+~)=iB4mYa**dS zCxA=9$;`7nT3=;H(EW(m;OVx5ZjCk0_f?)&^k+sQWgzf+@@;U<1aC;l)BrAY4BVQG zd&qhFp3(p=2YYK=`V$BZM@U@&Cu4jUcGP|2P%|&8wAivQni9sNgX7d%0?x#M2p;ee z*fD_ojFx^#`Hbbl5kKMBw-nKgF}Nl);2y({IsmT2M3pQbnA6I=Q;6Bu-(o)Wqzk|yhhhqac8RNV2dIqGy!43z_ zF)9WqsPRWoV`^LMH^VhJsvI27_K(NBNtbP2>)H9RaxU=J2$TSqM#yxtME5d^W0ixx z`qJ}w8U|<-$HP}ZeX^g{R>I0K&cDXH&ptF00TOx_eys)oCBI%t%{ z`eG-c68mbD%{=!{I2vYn`^$r<91Z1Y@TTOvDM&f{kS7B?8S*|*AkOsbQ;eWt$}4_> z?<2=@duinFvQ{+DC{9vV`AA_#)Hvl_@4z8=?Jj*pqhsvwnTGa)@{lYYH&U~e6RyOt z8OWaHT3aCKV86d;ZGmtLT(?X!&lqv2rDQ^1j&10F8yRzy>2lynw68<^F*b0XQ9W0g z?JHFoiT|an^2_M)XDsl5M#LUl_B@^xUutbnif%7JUZGJV?@Xte@Q@=g#)5Cpcasn6 zF94TRYi%!rwMNuZWx9_(3wkyza1)kmI%+3)Js4_DZUw*P;Mf-tkdFQ@gLA>&TDl*+ z&LO`IE^>??o-NU4n{|2(4XYdjJ_Z-t9jJDeL|Yx4m4ibb48NELZU?V%a3gp%*t?(y z=OFVO zcV#NL;3jsP`Q5n^Em~|({!j2ou$zsI%$4YKu-ChD!C!#Ai`ff4?vURASKIR86h9AV zr=x=o&I5b%;4ruV`~XkrGan0c$lo?n*D14o^bIdbl$~#nTe1KX-{o%m^i%~t{F>W* zFpB&MS}0M_GAsm^3!Vs$S&nB9^Ez<(5;sled27J_uezy1aAj#Iii^dmEd#W>qo5Hz2M?=m|%})My%jt z;Kq+NDuW*dcd3K^MCe0A3r+@?{cK%Ug9vw!vFC|4Vg;fEiw@ht;f@tYUmyxDQfVS9 z+za+wXZLRfH+*FkIx#-69v<4SnYUxXIpDIDDqUy&)eZRi3jHbIKpiga@Dn}_6suIm z9qz&Rz?wd8v*rs0AL5GO6&(7q zO65F((g8_|m`G=i2XCy=s3-67B5?U>jkd5nECBLPH1jqm^iKg#JfqQi#Gg6g8)#^( z)yyxGqC*up6d%@VSizHlc(Eu}Rtx!RaLE_eAtd-)aOrz6fcu98;f3JfY2Z8uZv_X4 zGK=|51AMySYF?nxM&@V1Q@7h$FfbVRgm+ci@3Q*q;4H|!F>?d#Gu?dv3&CX$ZUQ^&#DsgWZGW}}>K@ep#j~&=PhTa9Q-DBNNg#oVn@ww-Mb@dhe2v{$x zvh#Qr8mzRiJn#XEt(h9Hz@IWB$9W`KQ>0S^6 zj~rIbvsLJ;jY0lJU{7**1w#kJ!XwuEQ*^ipJ_#0uMDQ9snCmO>;e@&K2$WaN-qR6a zwFzIAcniiQVG>6SXXK-k{Ck>o@S(n8$w!UPzkxOPVmi5ATP49Z}4ZDqRKdf*mxC)%h-03M?^k6`YR}Nk)A!vC)hrrE>=Jl{n z4QS{Yq>;)4lJKCp4ws6;B=Y(SxWrd8UsS??qj;Aj55@WJvOF|(8h+CW2V;PcR|tl_ zc-GhPY23@fnaru+8t`P3vHu&;5ZTQ>J}-c)G&`t9O~(rga&IME18xS_vBIO^NNk}u zEr+IKe6W3kngyor8m-{|i5W=iyRjhQVI3ClK|@?G+hU(*P?`E@=G|JX=wWbO7dIW} z73YA=6Ym|qt3t|E(3w2@(Jl5Ib*TE~w>_SurZgp_X^Ae@+wB_sYSP1*ttgP1g z{~H<_PHAoD`~ErD^98v3;?X7wiTo03`B@mi6OIS_UxESn!BQA>8a(nI>%+C+*>iDM z{uNg+4&tQw_?Up>JC3*DB3MOfE>&2;IivcZGU0T$=pln5qvN8642g}5jf;tn8Zs!_ zvwEYezvt;UUB167UG%2w)87*qPrl`PUiv+Wsj&Cp$Op5t=g)lb_h$V5D_1v9m(4EK zGiHy4C0eexvfJLB_spSNE5KO$SS>i_@% diff --git a/artifacts/test_program_methods/program_owner_changer.bin b/artifacts/test_program_methods/program_owner_changer.bin index db1f87fad394c77e82426eb258f53c6782651e0c..9d3364258f56e93655bbbbf267c7b32cb30393f0 100644 GIT binary patch delta 463 zcmdnFEiAug37eUlTUuBcn;Kb~8=IJ#m>L)xPB)y#qAqQ$my=VL zt7nK!f&Xll)7W%w*PX+X#fVL2y5AfYFEiAug2^$z#T3Q;JSz4Nyni-o|npqfIOgEgzqAqQ$my=VL zt7nK!f&Xll)7W%w*PX+X#fVL2y5AfY566*a$o&N?~A^Wpi6?_PVo?6uck zd!L)~SKF4n+O{-WI=ifWC#mQBq~9e;e@>Doe5$uPMpQJ=M=gm+l4Ys`uW|9T6GUl) zebkEO{|hbxM>1amkL{yUEm)Q%NDnrJ2lnz6y* z;N{K)Dg}qaz&Ms40#8B!jhS1YA({$q&OFM<-zN`{q(_Y{`{moRKII#tvJ@ZnVEKA* zG1y-41#rv|hr54ERMB6>YODqA1|NkSBW8l=JW=Ws&io{BMWRaAc>W3SQN-i1=8vEb z7l^jGMg@KKz} z9_no*eIcLn>PLRUIhlq8aNs4kiK-{6RKRu)gQK5S&A^1;4kS@e7w3Qzz@a>U8#u+q zBuNwiC$RhpaM5IyHd?IHRt%J4LMl(V1wIa5&pa7UbA~$yc|ADI#ovMbQ&h_1`SA*P zn2$ohV&P4_5@kMzo#R6J1e}^?XL_VeV;V`c5d*eDIk>>Z)r}?U0)ut|_Gl^5H3Tq< z9Xt;ni}`k^*&NJ2DG!&{8GBEPb3F_36uhWXBq#XArV_=?Rmsos9s_&8!o5iFfMybf zf>q}A;EESibK`{kOK=+4mWPC5LtOeZz%Khb9mRm#K|=F89jpb@#ZjYJ=%`)CN{Qt;6;@}%%b+Df#?)l}vNx15oO z%a>aQ<+Jj5X_%39RvsYh8-76#UW{5%ti9-R6PLzoC|-}nCs7({^Hs`ad2_UhXvkHL zq!4_(*x}RQ9I!ZaV(%iFAeCTyuam$Dj=oMCF;MR^&_)!C%fKLTXP1E+_eoSY(pma$ ztaE3PN;w?hOQ^blOa6CoB)A&_5{JWkzeFJoa$Tmu7)Wjykm)t>4R>zA

~=S2QFF zdl~RiI2$YhpMkz;2g1PtZ~$_Atu*=6CoFYhy=WcK+~2x#T$jb90!huT$Ds3 z^kom&ZU^mf-IhA~J{pgKix{von50QG0-V4Oij3Ir<>`{t%~*X=zU`IXHdbGeTZF{U zdjLE6N9QKH4lY^YoSMhFU}r};b}NIYf00*8MaKM_az|O;+8LF#Ql(^Wn-4>M8(8JI z2jR5Fjdl`R4DJlJ!`uh1ba7}m^nK{t>kNPogY7)jfaCt8Ql_=x5#;ZF=MK&=VtHs(o^SiU3@ZJ*Dg6%j)g6kZfNN-{w;0(}Fa3~zuZR`O* zE~W{NfgEsi%ui+q?}OiR@kKCU{t%Y;4z6ylOqZT9!o!rMQu^9H=tX-~D&-9fMP35C zuzrqz066=v&icOx7lO0-#61&-6Xgo$3FC4L7dAoQ@$Rl3L= zJs1uqIm;Lio&&ZI#42!ti@yfP98u{o>-$oWw~3B^HniS3L6=NwnX^V(ehJK(evc!+Xd>%e6vokD-4AL;^rBH7PeaFt75CDJgj$EgwFi_!|5Cq4ZYIs3W>LYNN?Id_9coo<##6#f2n2%f14A_$((fL}39|qT- zb~p#z@{CGr%mw29{s{xyFks(euRIC^;7m5yrauCL!~1!K8Q>(aeFEPWa#z5y1McLi z|HBg!U2-o2`fi!HT>sAYbJ42x-D|`iZDNuVu z>VYGlRW9;Shil(5M1@14cM0zp&eLb$%pX;%WO-&f^5j~`YH+QKzXoT5?bg!CIM`EJ zsbp;%0lQP21Y8FvUU9yz`iw*Zuc}nUXXP*8dgmLHZh=Fg--g%IKOoMEonSA$VjT1< z=`!DfjZi;krS~$n^jCH_)(@T` z>e*JKcvfEl^VMNmLks&yGT0Ty0@O!&ION<4Z=&puLLOpSb3+@f=po?;vhb-dP+IfE_~QHynK^1s^WYvFk;1^e?4jffNW_EhxzFSUk_5i_)4|A#8Q^a4NEb^pBuWR{3mOQ{bm_kW zu05mitI7D|G9{w1b^+N*xQ#OBT~C42@_LP~adsat4wfkg6g@5v?W&QF>UdZ3!J!Hs z6wG@HBoSnisz9Gn2Q zkHHt-qMjq!nzzD~h!etnE(?<#sDX_^tfN!hGO9~pbM zD4Qkxo4-}L*f zL5)=OA)zn^Jg3U~(MRxZu)0q(?T0-XCVjVh2w!JST{ zK@WyKRJ7nMZ~+49Z0h3)@&^p~FI$gSF`?`XQDT4Vb5HP3;Pb8w=x6bB+FF%xznBIU z{0vxJ?#xdD=X_-~KB2z^yykD3`B)ab3+(?Nm2QXtbPRO(j;J0E(l8)WJQ7^?u1XbV zgc41=LX^?jXI=rqKm@*DTY|+EA$R~d`k0gAE3llr%laA-@(Dj9Lo1yC*MiTlv+V0) zLYH6g-G~(g*kJihD0K00if|C?p-`<+5wG|&@J4KjxdP~~xkXe8eGHocz4s%P^j8!u{F?zp zwZ^UWdyUGOXM>MdIHzDh8x-aim3Dfp`OCrQA-8KJ?7lk#9s$mtiyGjJ{EQ!O+(nwu zUZVJ2D(Ru@@GJ((ZffSIl33B84&YLxh~;a+{$&n(IwC8sJ~0Jc<&u8_&cuRj{jMtN z=&zdj^Omrm2`*o+>gK~q419)xl=V&#exhLy-%{Zo)eiZ;z~)cq%(dXulh%(T;?#6P zN3I21^Su-UPIJj~z{xlznV2B_eG8@sbRVU1Rd(tm(YzX`(JTNbV-G7ig&%@rj%a2K z!oY3tSkyo@8ywVGq8ii){xKcQ!+(mytOtRZ->B=I8Oi}?>aG;+!$1J%)XxUR6QyUA zj}n=;b;pf>0LL=l0@wVClrm@bxU+`#fLo(8#HU3y^_uygPmXyIXfjUt|QWUF8g2 z?u+xc5v?+h9gKJw5q@fYeu@a|!2$Go(MSZZ{|%}d1|pe#$#^Vxb@ns^yy`lBSYij0 z@VG8_)xewJN*7lR(Xk@eK)<2*9F)*C ze{cQ8L&#qqj%MStE_J~Nz`3n_RLKDz(F3^kyCDNS@X%9GK~(OYqR~8N{Sypq3v)VC^9(q|1V0-Lf^T>< z^LZ`|Mn8>TyS=#0*uWpaX>e$F&W>Y{VsM--2e%GE(ei>m2j?|y2tcP>7$}R>NM(g_ z_@3F0l#0eA&UI6Kzr-NG5|$quhX>U_-0xg;`QtIa7Z?g6z$1cTFM;QGn1D9}IGcGg zIOBeeiyHgC2?G@vuwN)Qz-ci~QH{yO7aHVtCtDBBi_*+LIS7Zxz!jKpAIlM0&~N9w zpcaDXfr~kSQ4?{jJ77T~!{Ywmhk@-Kort3*LDE?>-`2vxP;h1&A64^;e+Tx1?LP50 za6B4K8at4)vEpWUi*w3*Oh$%Xt-Km+w{r9TpEd<=={L~n*g+Vcnz?8^tN8j|1kNba zXbyf{5CPry9QwpMWURTxE5RX#(}=Ev3tT(|pKP@*-hgUfbIk0l*8SfqANT!9t>Jz@ zI0O7L-o9R|k+gjQKO3Dz0PHXuTyhx!G`0e`1g^x3$lmj!0zCF5AC+zWL&7AeX0^*syE3Gio!MJA)ad2IY}Y5SGPOd6Uf zg`?pmeg|0wC!%1Sl2^kMaUfo?RV#82+*EO~J^f?-CQZw=H|)?a>XC=O7OBVyOBW@# z;WF5p@Hsebkk7rp5vlBFGMm_hK7sckr^O9W^J5~pxBC6_;L84{oK^i#!u#+i6ze}+ zx*ZqUHo%lL8k`87I3aQp4rwu-_^n7?wkau!cfyH(GR0K<@JW#maCm}pU~_cdPJR8b zWvI;`Y)ZYdd!BB+2BAjrli!K_fS--kuzSB3nKsz>yY`gGF8DGf9~zyvOW$b?rg_~^ zQ*xA=59(O|A*PH~-t>x2->omq`sY!Rv%^d|pe9v?wT=0vRH<(3u(s=VQ;sNkDr)AA zG$ldF7u#8%>eq%M?SEi3MwybT`YnZ96!__sdY0h8@2PR4;MKYQYA%KQ-{#M1Kb#lf zjz5x3^!HYKJe=;!hs%pJRNi4qFY?J*oqcd{xs&Qejun|wp&Xq4tH@3i7Q)Vc`Q`%S z4~8Yv<&gBVvp&}k#YK+(i+yr00Z@)FyC_mM!IV;^rxs4R%XA%c>~<4Px(0YA+y_on z{Xc+n0^D5FBp>dh<#u0g+hDCJ9RUHyBasYls@q_T>q5ej;;k*F<45v>r zWt!?g(13@8B>{FO-Y!m)!YQnrN|e2DZk`wE+jW`JNRxFmcmrOCO9Q+=UXxBJ^b+vK z7Mh&Jfsx9<9C$4Ky-M>=bb7TuRD09jTJ7xXGW;oh(3E5q;Q5U;$$Zq5bmi{}I0QT9 zod6GMqDdlbDz@Ru8K%2%j{F#$2Yd3ii7ZH9{5&|IKO*1I5Hv8j>7@oX!gB%!j>16$ zt(#qH;4!%TAyf7#2P@&KN61Vy!SCVhS*GN<@`xs>%{4hfLya0R7A~IY^HcEZ*%Th7 zpbB2npg72E*E+dq%x7K-ZAAfvA{+ovSfPz#fSpo`1z^MTR@yx64 zc7N)hz;DktWwLVcFJxVQK>jJ540pyMXLGb}r%6JCJfh1;8nPQ2bg6*P1!D^@$ASK8 zMg{Fz%lxn;DTT}6TE;u&z%ft_=Og#(n$sRQJ_fyHN7fi`kW%Cx) zZG=tb_Xu`t<|sd)Q8*R$-24LG7T^w@sr!ug<~b4G1AB2e1ZTcvN?~llTgpw>T)Kku z?2HTgyNMZP8JZM~^ULkW@OIcU9Jx-DY4AuDpRKml#CSoAJlTy*{JVdUeFhi9t<{7Y zb%*ctGdBm`w%M=StKcP@Oqr#sR5d(}{?{lw=CzvCz@8ry;5wft$Ql~*{Ra64PQ-v$ z#xm16n8y1GX2MPBpREkM1wR+y^RUo=kdpU{zSz{5s@-EJH8U1!!#4Jy7Hu_Uky^kG z#3g?V^H=^4fs5bq=l=^l3oceW?w(9`RKT6l_UY!vsm75B1Bk=Nrj%pWN#Jk)L=F4Q zl#`0P48*`he;W6}b6{^ntcUvq_%xih*OWbKd`1p&o8XV10aw9SB4O`mMdm3+yB-JLT~9fc$fZ z1M+q^vM+skM2cys40KovryXjzLCKhZ$6&D^;OF6$u$PF3;XU-{)N~iDRUa-9H9p@0 z*B|zICfuUdl-2G8IlmkAW$V-6onp_z$KXPxFtr~JVX&Q=;UqW<_IBWFjy&LS|C=u5 z&;JkK-#;LaBgGQ3?61N`Gb5|_AnsCMn^LDNkGYl0=23Fibybt@xm@MoIf^I3Y4p!k z{B$&wnF`dcaLsq7%#FF%Lnh|2lz~%iEu6}Lu4=$>I50rE z+FBR3e9`Mp9O^jsV~XVQ!Hhe_Jx0apE4c7`Q?@Dj)M3OaFp)~QCcvlRLf9)UJ?!0G zjTelf4~C<6k{^K3?V9vI#+1Z-0>Jn-YCgBY6@dUfYwu1s zsPW%WW5%BI9}OLtcP5;s{GWjz+kf_XQ*>)z<4}^tdL=ipg#2+cy|2BYpYd*dq^4G+ zYg9S?A?R$WXHl}#-v zQ5+qkNy$B4f4zt7qoI@rFL9QRC2sy9FZL$L`h zwKohk7RG5gcGd{vP=};(g=K!#?DYyPBAt9DXSq5R>5Tp zt%f|X?qZ!6Snd(y)bdg|d#3N_-|gwMjPZKXIoe0kzFqmZ)IL1hm>RF0wTJ!LSeQ_B z<0RJSAC`y;*lYJt^S`hfD#i`>BHwPwNwqND@2AEE@?t9d?xSIeQ~E36w0%~?i(r$T z^`tRAF7h;bMn4u7rt4m=K7$Kj)ViEpqRE&5kAcSq`ach6!d@+|fky`9SKg<|_`vwP z;X8ef$g4CA4Gj1eF7i9@d*TGNV+XLL<0ZoR%-h_t3g@N(U!Zo#) zx;5F)FE(1nTjz*QpNpiqTJ=#=N!NNy&Z_8U+Pf=^oknB;&g3-;OPyMkxp1Pvg+lSp zQcZe4?i+9UAlU?mm9zQq0@#ag6n+Z!Ci5j+9*}o@NR!3B{AMYnVM(CFD!32qZG*4j zT)3Mu*m)*t6Oeyo7p*X+#znTwaGp*6xV5tw*D~Dj<>@T^=kl=o;&krZJs;NOQ#g$0 z4$p$mF5uOpcr#r3L|6)x-FmnR-le$TYy$dUVfi}NUzfS|uvNypde#>5Jn{0d5IDEM zjG9axUFbVj3%?DwSBgreXz~N>-7&V>!`2#n^UJaqzidPrX|wI5zZ&ZeZM(g7gRx%Y z@ANl}Q*l~)wCFAFtUGLNvvE<2jNH$+ohK~!z-`HLEPzW`@N~>LoOwXx_`%phC9#P{ zz^fNn@}80}g>(AFjt8fI{6Rj7Sz-5>bofR%cM;o7_1{-5QoPJ`)~145mS`HcWN;3b}VBZ`BAv!6H6+Iqr+VeQ=kW; zkBoMB3S5dqsqT2LATQF8emZt}bvnFUE7HGT?78P~qa#Ep5P_%QC2LIKd~p@F!tKjr!O*!W{5TT*l36XjXr@fyMi^1?(IV4iAA-_WL2$eiq5z5_^p}^84Z37kmdd!pGLe^hcZy*Yjy2 zlNsbIg|DAyK&P+@ktWOP8Bk@(d^O{*;B_pCI|IhQ@vF!p#?$ONwB~|HITLb1oW$$3 z*5D(|4kDt)SBALTT9NkYEMa_@4Ez6iVrc?J3B8hDF_5^7}{43mbBMzwX{aW!r2=F|({taLLA-w1UNsE2gfzGWt zwVt+Qx#B0_1C{L0Gpdylx%;_9R(!m`y z>9xg_NTM?M0}U1DE%&M9%xJ{r@FGH_tHL#F>%9_P41Wx}pS6>>TnQ&nw5TY+=$Y-CXD}~L|NUHW> z>96>MYd8^baIE6QE*QK(NEJ_ogE_PlZcSzErQ~T{HF@QD?B?q@bSE51|J>ilPty?F z7O@%ZfXjJ<6etB z_TM^6VBW(#cIGMrTXQeX;)%CWsD3it89EO29m0|X#_xjbzm5Ik z;m8*ZLq z>@u3K-Eo{|O5rPT9tOS2+5HYe3}dgrK@>Tmo+* zq)uUS_H{enFKIYfuH+}iafA-wd=JI?&%KlW-C+he4jy$FeSK8_ZsWP2!NrOngbUhP zDydojEi_cp;N4K-3z<=xpHx%eeaO8^X2a9kTkcN|j=>XfCH=i^SyaUM4*m`5X?QMN zrX09y0?Tqa6LKQ#oc~|Yu;~ilLVn}jL^x2&_rqQ(chCRXlekMiL#0y&I&#%4q42C!$L~_Opu&I4y6 zXC%ZF7?0RzJ~SrnZ`~`sNAI2)8NGX6m)WytW{;jdGJ8sN?c+cir>}QDcW^S=(67$814H-=(_0aHKF7`7`%hQe;{tU_78O1W7dX# z)_;3+&8NoI(WhPw#s9XLV04Op@@gpI55&!1`y for AccountId { + fn from(value: nssa_core::account::AccountId) -> Self { + Self { + value: value.into_value(), + } + } +} + +impl From for nssa_core::account::AccountId { + fn from(value: AccountId) -> Self { + let AccountId { value } = value; + nssa_core::account::AccountId::new(value) + } +} + +impl From for Account { + fn from(value: nssa_core::account::Account) -> Self { + let nssa_core::account::Account { + program_owner, + balance, + data, + nonce, + } = value; + + Self { + program_owner, + balance, + data: data.into(), + nonce, + } + } +} + +impl TryFrom for nssa_core::account::Account { + type Error = nssa_core::account::data::DataTooBigError; + + fn try_from(value: Account) -> Result { + let Account { + program_owner, + balance, + data, + nonce, + } = value; + + Ok(nssa_core::account::Account { + program_owner, + balance, + data: data.try_into()?, + nonce, + }) + } +} + +impl From for Data { + fn from(value: nssa_core::account::Data) -> Self { + Self(value.into_inner()) + } +} + +impl TryFrom for nssa_core::account::Data { + type Error = nssa_core::account::data::DataTooBigError; + + fn try_from(value: Data) -> Result { + nssa_core::account::Data::try_from(value.0) + } +} + +// ============================================================================ +// Commitment and Nullifier conversions +// ============================================================================ + +impl From for Commitment { + fn from(value: nssa_core::Commitment) -> Self { + Self(value.to_byte_array()) + } +} + +impl From for nssa_core::Commitment { + fn from(value: Commitment) -> Self { + nssa_core::Commitment::from_byte_array(value.0) + } +} + +impl From for Nullifier { + fn from(value: nssa_core::Nullifier) -> Self { + Self(value.to_byte_array()) + } +} + +impl From for nssa_core::Nullifier { + fn from(value: Nullifier) -> Self { + nssa_core::Nullifier::from_byte_array(value.0) + } +} + +impl From for CommitmentSetDigest { + fn from(value: nssa_core::CommitmentSetDigest) -> Self { + Self(value) + } +} + +impl From for nssa_core::CommitmentSetDigest { + fn from(value: CommitmentSetDigest) -> Self { + value.0 + } +} + +// ============================================================================ +// Encryption-related conversions +// ============================================================================ + +impl From for Ciphertext { + fn from(value: nssa_core::encryption::Ciphertext) -> Self { + Self(value.into_inner()) + } +} + +impl From for nssa_core::encryption::Ciphertext { + fn from(value: Ciphertext) -> Self { + nssa_core::encryption::Ciphertext::from_inner(value.0) + } +} + +impl From for EphemeralPublicKey { + fn from(value: nssa_core::encryption::EphemeralPublicKey) -> Self { + Self(value.0) + } +} + +impl From for nssa_core::encryption::EphemeralPublicKey { + fn from(value: EphemeralPublicKey) -> Self { + nssa_core::encryption::shared_key_derivation::Secp256k1Point(value.0) + } +} + +// ============================================================================ +// Signature and PublicKey conversions +// ============================================================================ + +impl From for Signature { + fn from(value: nssa::Signature) -> Self { + let nssa::Signature { value } = value; + Self(value) + } +} + +impl From for nssa::Signature { + fn from(value: Signature) -> Self { + let Signature(sig_value) = value; + nssa::Signature { value: sig_value } + } +} + +impl From for PublicKey { + fn from(value: nssa::PublicKey) -> Self { + Self(*value.value()) + } +} + +impl TryFrom for nssa::PublicKey { + type Error = nssa::error::NssaError; + + fn try_from(value: PublicKey) -> Result { + nssa::PublicKey::try_new(value.0) + } +} + +// ============================================================================ +// Proof conversions +// ============================================================================ + +impl From for Proof { + fn from(value: nssa::privacy_preserving_transaction::circuit::Proof) -> Self { + Self(value.into_inner()) + } +} + +impl From for nssa::privacy_preserving_transaction::circuit::Proof { + fn from(value: Proof) -> Self { + nssa::privacy_preserving_transaction::circuit::Proof::from_inner(value.0) + } +} + +// ============================================================================ +// EncryptedAccountData conversions +// ============================================================================ + +impl From + for EncryptedAccountData +{ + fn from(value: nssa::privacy_preserving_transaction::message::EncryptedAccountData) -> Self { + Self { + ciphertext: value.ciphertext.into(), + epk: value.epk.into(), + view_tag: value.view_tag, + } + } +} + +impl From + for nssa::privacy_preserving_transaction::message::EncryptedAccountData +{ + fn from(value: EncryptedAccountData) -> Self { + Self { + ciphertext: value.ciphertext.into(), + epk: value.epk.into(), + view_tag: value.view_tag, + } + } +} + +// ============================================================================ +// Transaction Message conversions +// ============================================================================ + +impl From for PublicMessage { + fn from(value: nssa::public_transaction::Message) -> Self { + let nssa::public_transaction::Message { + program_id, + account_ids, + nonces, + instruction_data, + } = value; + Self { + program_id, + account_ids: account_ids.into_iter().map(Into::into).collect(), + nonces, + instruction_data, + } + } +} + +impl From for nssa::public_transaction::Message { + fn from(value: PublicMessage) -> Self { + let PublicMessage { + program_id, + account_ids, + nonces, + instruction_data, + } = value; + Self::new_preserialized( + program_id, + account_ids.into_iter().map(Into::into).collect(), + nonces, + instruction_data, + ) + } +} + +impl From for PrivacyPreservingMessage { + fn from(value: nssa::privacy_preserving_transaction::message::Message) -> Self { + let nssa::privacy_preserving_transaction::message::Message { + public_account_ids, + nonces, + public_post_states, + encrypted_private_post_states, + new_commitments, + new_nullifiers, + } = value; + Self { + public_account_ids: public_account_ids.into_iter().map(Into::into).collect(), + nonces, + public_post_states: public_post_states.into_iter().map(Into::into).collect(), + encrypted_private_post_states: encrypted_private_post_states + .into_iter() + .map(Into::into) + .collect(), + new_commitments: new_commitments.into_iter().map(Into::into).collect(), + new_nullifiers: new_nullifiers + .into_iter() + .map(|(n, d)| (n.into(), d.into())) + .collect(), + } + } +} + +impl TryFrom for nssa::privacy_preserving_transaction::message::Message { + type Error = nssa_core::account::data::DataTooBigError; + + fn try_from(value: PrivacyPreservingMessage) -> Result { + let PrivacyPreservingMessage { + public_account_ids, + nonces, + public_post_states, + encrypted_private_post_states, + new_commitments, + new_nullifiers, + } = value; + Ok(Self { + public_account_ids: public_account_ids.into_iter().map(Into::into).collect(), + nonces, + public_post_states: public_post_states + .into_iter() + .map(TryInto::try_into) + .collect::, _>>()?, + encrypted_private_post_states: encrypted_private_post_states + .into_iter() + .map(Into::into) + .collect(), + new_commitments: new_commitments.into_iter().map(Into::into).collect(), + new_nullifiers: new_nullifiers + .into_iter() + .map(|(n, d)| (n.into(), d.into())) + .collect(), + }) + } +} + +impl From for ProgramDeploymentMessage { + fn from(value: nssa::program_deployment_transaction::Message) -> Self { + Self { + bytecode: value.into_bytecode(), + } + } +} + +impl From for nssa::program_deployment_transaction::Message { + fn from(value: ProgramDeploymentMessage) -> Self { + let ProgramDeploymentMessage { bytecode } = value; + Self::new(bytecode) + } +} + +// ============================================================================ +// WitnessSet conversions +// ============================================================================ + +impl TryFrom for WitnessSet { + type Error = (); + + fn try_from(_value: nssa::public_transaction::WitnessSet) -> Result { + // Public transaction witness sets don't have proofs, so we can't convert them directly + Err(()) + } +} + +impl From for WitnessSet { + fn from(value: nssa::privacy_preserving_transaction::witness_set::WitnessSet) -> Self { + let (sigs_and_pks, proof) = value.into_raw_parts(); + Self { + signatures_and_public_keys: sigs_and_pks + .into_iter() + .map(|(sig, pk)| (sig.into(), pk.into())) + .collect(), + proof: proof.into(), + } + } +} + +impl TryFrom for nssa::privacy_preserving_transaction::witness_set::WitnessSet { + type Error = nssa::error::NssaError; + + fn try_from(value: WitnessSet) -> Result { + let WitnessSet { + signatures_and_public_keys, + proof, + } = value; + let signatures_and_public_keys = signatures_and_public_keys + .into_iter() + .map(|(sig, pk)| Ok((sig.into(), pk.try_into()?))) + .collect::, Self::Error>>()?; + + Ok(Self::from_raw_parts( + signatures_and_public_keys, + proof.into(), + )) + } +} + +// ============================================================================ +// Transaction conversions +// ============================================================================ + +impl From for PublicTransaction { + fn from(value: nssa::PublicTransaction) -> Self { + Self { + message: value.message().clone().into(), + witness_set: WitnessSet { + signatures_and_public_keys: value + .witness_set() + .signatures_and_public_keys() + .iter() + .map(|(sig, pk)| (sig.clone().into(), pk.clone().into())) + .collect(), + proof: Proof(vec![]), // Public transactions don't have proofs + }, + } + } +} + +impl TryFrom for nssa::PublicTransaction { + type Error = nssa::error::NssaError; + + fn try_from(value: PublicTransaction) -> Result { + let PublicTransaction { + message, + witness_set, + } = value; + let WitnessSet { + signatures_and_public_keys, + proof: _, + } = witness_set; + Ok(Self::new( + message.into(), + nssa::public_transaction::WitnessSet::from_raw_parts( + signatures_and_public_keys + .into_iter() + .map(|(sig, pk)| Ok((sig.into(), pk.try_into()?))) + .collect::, Self::Error>>()?, + ), + )) + } +} + +impl From for PrivacyPreservingTransaction { + fn from(value: nssa::PrivacyPreservingTransaction) -> Self { + Self { + message: value.message().clone().into(), + witness_set: value.witness_set().clone().into(), + } + } +} + +impl TryFrom for nssa::PrivacyPreservingTransaction { + type Error = nssa::error::NssaError; + + fn try_from(value: PrivacyPreservingTransaction) -> Result { + let PrivacyPreservingTransaction { + message, + witness_set, + } = value; + Ok(Self::new( + message.try_into().map_err(|_| { + nssa::error::NssaError::InvalidInput("Data too big error".to_string()) + })?, + witness_set.try_into()?, + )) + } +} + +impl From for ProgramDeploymentTransaction { + fn from(value: nssa::ProgramDeploymentTransaction) -> Self { + Self { + message: value.into_message().into(), + } + } +} + +impl From for nssa::ProgramDeploymentTransaction { + fn from(value: ProgramDeploymentTransaction) -> Self { + let ProgramDeploymentTransaction { message } = value; + Self::new(message.into()) + } +} + +impl From for Transaction { + fn from(value: common::transaction::NSSATransaction) -> Self { + match value { + common::transaction::NSSATransaction::Public(tx) => Transaction::Public(tx.into()), + common::transaction::NSSATransaction::PrivacyPreserving(tx) => { + Transaction::PrivacyPreserving(tx.into()) + } + common::transaction::NSSATransaction::ProgramDeployment(tx) => { + Transaction::ProgramDeployment(tx.into()) + } + } + } +} + +impl TryFrom for common::transaction::NSSATransaction { + type Error = nssa::error::NssaError; + + fn try_from(value: Transaction) -> Result { + match value { + Transaction::Public(tx) => { + Ok(common::transaction::NSSATransaction::Public(tx.try_into()?)) + } + Transaction::PrivacyPreserving(tx) => Ok( + common::transaction::NSSATransaction::PrivacyPreserving(tx.try_into()?), + ), + Transaction::ProgramDeployment(tx) => Ok( + common::transaction::NSSATransaction::ProgramDeployment(tx.into()), + ), + } + } +} + +// ============================================================================ +// Block conversions +// ============================================================================ + +impl From for BlockHeader { + fn from(value: common::block::BlockHeader) -> Self { + let common::block::BlockHeader { + block_id, + prev_block_hash, + hash, + timestamp, + signature, + } = value; + Self { + block_id, + prev_block_hash: Hash(prev_block_hash), + hash: Hash(hash), + timestamp, + signature: signature.into(), + } + } +} + +impl TryFrom for common::block::BlockHeader { + type Error = nssa::error::NssaError; + + fn try_from(value: BlockHeader) -> Result { + let BlockHeader { + block_id, + prev_block_hash, + hash, + timestamp, + signature, + } = value; + Ok(Self { + block_id, + prev_block_hash: prev_block_hash.0, + hash: hash.0, + timestamp, + signature: signature.into(), + }) + } +} + +impl TryFrom for BlockBody { + type Error = std::io::Error; + + fn try_from(value: common::block::BlockBody) -> Result { + // Note: EncodedTransaction doesn't have a direct conversion to NSSATransaction + // This conversion will decode and re-encode the transactions + use borsh::BorshDeserialize as _; + + let common::block::BlockBody { transactions } = value; + + let transactions = transactions + .into_iter() + .map(|encoded_tx| match encoded_tx.tx_kind { + common::transaction::TxKind::Public => { + nssa::PublicTransaction::try_from_slice(&encoded_tx.encoded_transaction_data) + .map(|tx| Transaction::Public(tx.into())) + } + common::transaction::TxKind::PrivacyPreserving => { + nssa::PrivacyPreservingTransaction::try_from_slice( + &encoded_tx.encoded_transaction_data, + ) + .map(|tx| Transaction::PrivacyPreserving(tx.into())) + } + common::transaction::TxKind::ProgramDeployment => { + nssa::ProgramDeploymentTransaction::try_from_slice( + &encoded_tx.encoded_transaction_data, + ) + .map(|tx| Transaction::ProgramDeployment(tx.into())) + } + }) + .collect::, _>>()?; + + Ok(Self { transactions }) + } +} + +impl TryFrom for common::block::BlockBody { + type Error = nssa::error::NssaError; + + fn try_from(value: BlockBody) -> Result { + let BlockBody { transactions } = value; + + let transactions = transactions + .into_iter() + .map(|tx| { + let nssa_tx: common::transaction::NSSATransaction = tx.try_into()?; + Ok::<_, nssa::error::NssaError>(nssa_tx.into()) + }) + .collect::, _>>()?; + + Ok(Self { transactions }) + } +} + +impl TryFrom for Block { + type Error = std::io::Error; + + fn try_from(value: common::block::Block) -> Result { + let common::block::Block { + header, + body, + bedrock_status, + } = value; + + Ok(Self { + header: header.into(), + body: body.try_into()?, + bedrock_status: bedrock_status.into(), + }) + } +} + +impl TryFrom for common::block::Block { + type Error = nssa::error::NssaError; + + fn try_from(value: Block) -> Result { + let Block { + header, + body, + bedrock_status, + } = value; + + Ok(Self { + header: header.try_into()?, + body: body.try_into()?, + bedrock_status: bedrock_status.into(), + }) + } +} + +impl From for BedrockStatus { + fn from(value: common::block::BedrockStatus) -> Self { + match value { + common::block::BedrockStatus::Pending => Self::Pending, + common::block::BedrockStatus::Safe => Self::Safe, + common::block::BedrockStatus::Finalized => Self::Finalized, + } + } +} + +impl From for common::block::BedrockStatus { + fn from(value: BedrockStatus) -> Self { + match value { + BedrockStatus::Pending => Self::Pending, + BedrockStatus::Safe => Self::Safe, + BedrockStatus::Finalized => Self::Finalized, + } + } +} diff --git a/indexer_service/protocol/src/lib.rs b/indexer_service/protocol/src/lib.rs new file mode 100644 index 00000000..8189f7d8 --- /dev/null +++ b/indexer_service/protocol/src/lib.rs @@ -0,0 +1,230 @@ +//! This crate defines the protocol types used by the indexer service. +//! +//! Currently it mostly mimics types from `nssa_core`, but it's important to have a separate crate +//! to define a stable interface for the indexer service RPCs which evolves in its own way. + +use schemars::JsonSchema; +use serde::{Deserialize, Serialize}; + +#[cfg(feature = "convert")] +mod convert; + +pub type Nonce = u128; + +pub type ProgramId = [u32; 8]; + +#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash, Serialize, Deserialize, JsonSchema)] +pub struct AccountId { + #[serde(with = "base64::arr")] + #[schemars(with = "String", description = "base64-encoded account ID")] + pub value: [u8; 32], +} + +#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize, JsonSchema)] +pub struct Account { + pub program_owner: ProgramId, + pub balance: u128, + pub data: Data, + pub nonce: Nonce, +} + +pub type BlockId = u64; +pub type TimeStamp = u64; + +#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize, JsonSchema)] +pub struct Block { + pub header: BlockHeader, + pub body: BlockBody, + pub bedrock_status: BedrockStatus, +} + +#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize, JsonSchema)] +pub struct BlockHeader { + pub block_id: BlockId, + pub prev_block_hash: Hash, + pub hash: Hash, + pub timestamp: TimeStamp, + pub signature: Signature, +} + +#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize, JsonSchema)] +pub struct Signature( + #[serde(with = "base64::arr")] + #[schemars(with = "String", description = "base64-encoded signature")] + pub [u8; 64], +); + +#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize, JsonSchema)] +pub struct BlockBody { + pub transactions: Vec, +} + +#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize, JsonSchema)] +pub enum Transaction { + Public(PublicTransaction), + PrivacyPreserving(PrivacyPreservingTransaction), + ProgramDeployment(ProgramDeploymentTransaction), +} + +#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize, JsonSchema)] +pub struct PublicTransaction { + pub message: PublicMessage, + pub witness_set: WitnessSet, +} + +#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize, JsonSchema)] +pub struct PrivacyPreservingTransaction { + pub message: PrivacyPreservingMessage, + pub witness_set: WitnessSet, +} + +#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize, JsonSchema)] +pub struct PublicMessage { + pub program_id: ProgramId, + pub account_ids: Vec, + pub nonces: Vec, + pub instruction_data: InstructionData, +} + +pub type InstructionData = Vec; + +#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize, JsonSchema)] +pub struct PrivacyPreservingMessage { + pub public_account_ids: Vec, + pub nonces: Vec, + pub public_post_states: Vec, + pub encrypted_private_post_states: Vec, + pub new_commitments: Vec, + pub new_nullifiers: Vec<(Nullifier, CommitmentSetDigest)>, +} + +#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize, JsonSchema)] +pub struct WitnessSet { + pub signatures_and_public_keys: Vec<(Signature, PublicKey)>, + pub proof: Proof, +} + +#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize, JsonSchema)] +pub struct Proof( + #[serde(with = "base64")] + #[schemars(with = "String", description = "base64-encoded proof")] + pub Vec, +); + +#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize, JsonSchema)] +pub struct EncryptedAccountData { + pub ciphertext: Ciphertext, + pub epk: EphemeralPublicKey, + pub view_tag: ViewTag, +} + +#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize, JsonSchema)] +pub struct ProgramDeploymentTransaction { + pub message: ProgramDeploymentMessage, +} + +pub type ViewTag = u8; + +#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize, JsonSchema)] +pub struct Ciphertext( + #[serde(with = "base64")] + #[schemars(with = "String", description = "base64-encoded ciphertext")] + pub Vec, +); + +#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize, JsonSchema)] +pub struct PublicKey( + #[serde(with = "base64::arr")] + #[schemars(with = "String", description = "base64-encoded public key")] + pub [u8; 32], +); + +#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize, JsonSchema)] +pub struct EphemeralPublicKey( + #[serde(with = "base64")] + #[schemars(with = "String", description = "base64-encoded ephemeral public key")] + pub Vec, +); + +#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize, JsonSchema)] +pub struct Commitment( + #[serde(with = "base64::arr")] + #[schemars(with = "String", description = "base64-encoded commitment")] + pub [u8; 32], +); + +#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize, JsonSchema)] +pub struct Nullifier( + #[serde(with = "base64::arr")] + #[schemars(with = "String", description = "base64-encoded nullifier")] + pub [u8; 32], +); + +#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize, JsonSchema)] +pub struct CommitmentSetDigest( + #[serde(with = "base64::arr")] + #[schemars(with = "String", description = "base64-encoded commitment set digest")] + pub [u8; 32], +); + +#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize, JsonSchema)] +pub struct ProgramDeploymentMessage { + #[serde(with = "base64")] + #[schemars(with = "String", description = "base64-encoded program bytecode")] + pub bytecode: Vec, +} + +#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize, JsonSchema)] +pub struct Data( + #[serde(with = "base64")] + #[schemars(with = "String", description = "base64-encoded account data")] + pub Vec, +); + +#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize, JsonSchema)] +pub struct Hash( + #[serde(with = "base64::arr")] + #[schemars(with = "String", description = "base64-encoded hash")] + pub [u8; 32], +); + +#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize, JsonSchema)] +pub enum BedrockStatus { + Pending, + Safe, + Finalized, +} + +mod base64 { + use base64::prelude::{BASE64_STANDARD, Engine as _}; + use serde::{Deserialize, Deserializer, Serialize, Serializer}; + + pub mod arr { + use super::*; + + pub fn serialize(v: &[u8], s: S) -> Result { + super::serialize(v, s) + } + + pub fn deserialize<'de, const N: usize, D: Deserializer<'de>>( + d: D, + ) -> Result<[u8; N], D::Error> { + let vec = super::deserialize(d)?; + vec.try_into().map_err(|_| { + serde::de::Error::custom(format!("Invalid length, expected {N} bytes")) + }) + } + } + + pub fn serialize(v: &[u8], s: S) -> Result { + let base64 = BASE64_STANDARD.encode(v); + String::serialize(&base64, s) + } + + pub fn deserialize<'de, D: Deserializer<'de>>(d: D) -> Result, D::Error> { + let base64 = String::deserialize(d)?; + BASE64_STANDARD + .decode(base64.as_bytes()) + .map_err(serde::de::Error::custom) + } +} diff --git a/indexer_service/rpc/Cargo.toml b/indexer_service/rpc/Cargo.toml new file mode 100644 index 00000000..f77c5abf --- /dev/null +++ b/indexer_service/rpc/Cargo.toml @@ -0,0 +1,15 @@ +[package] +name = "indexer_service_rpc" +version = "0.1.0" +edition = "2024" + +[dependencies] +indexer_service_protocol = { workspace = true } + +jsonrpsee = { workspace = true, features = ["macros"] } +serde_json.workspace = true +schemars.workspace = true + +[features] +client = ["jsonrpsee/client"] +server = ["jsonrpsee/server"] diff --git a/indexer_service/rpc/src/lib.rs b/indexer_service/rpc/src/lib.rs new file mode 100644 index 00000000..c1c4a560 --- /dev/null +++ b/indexer_service/rpc/src/lib.rs @@ -0,0 +1,40 @@ +use indexer_service_protocol::{Account, AccountId, Block, BlockId, Hash, Transaction}; +use jsonrpsee::{core::SubscriptionResult, proc_macros::rpc, types::ErrorObjectOwned}; + +#[cfg(all(not(feature = "server"), not(feature = "client")))] +compile_error!("At least one of `server` or `client` features must be enabled."); + +#[cfg_attr(feature = "server", rpc(server))] +#[cfg_attr(feature = "client", rpc(client))] +pub trait Rpc { + #[method(name = "get_schema")] + fn get_schema(&self) -> Result { + // TODO: Canonical solution would be to provide `describe` method returning OpenRPC spec, + // But for now it's painful to implement, although can be done if really needed. + // Currently we can wait until we can auto-generated it: https://github.com/paritytech/jsonrpsee/issues/737 + // and just return JSON schema. + + // Block schema contains all other types used in the protocol, so it's sufficient to return + // its schema. + let block_schema = schemars::schema_for!(Block); + Ok(serde_json::to_value(block_schema).expect("Schema serialization should not fail")) + } + + #[subscription(name = "subscribeToBlocks", item = Vec)] + async fn subscribe_to_blocks(&self, from: BlockId) -> SubscriptionResult; + + #[method(name = "getBlockById")] + async fn get_block_by_id(&self, block_id: BlockId) -> Result; + + #[method(name = "getBlockByHash")] + async fn get_block_by_hash(&self, block_hash: Hash) -> Result; + + #[method(name = "getLastBlockId")] + async fn get_last_block_id(&self) -> Result; + + #[method(name = "getAccount")] + async fn get_account(&self, account_id: AccountId) -> Result; + + #[method(name = "getTransaction")] + async fn get_transaction(&self, tx_hash: Hash) -> Result; +} diff --git a/indexer_service/src/lib.rs b/indexer_service/src/lib.rs new file mode 100644 index 00000000..1f278a4d --- /dev/null +++ b/indexer_service/src/lib.rs @@ -0,0 +1 @@ +pub mod service; diff --git a/indexer_service/src/main.rs b/indexer_service/src/main.rs new file mode 100644 index 00000000..bfdd3259 --- /dev/null +++ b/indexer_service/src/main.rs @@ -0,0 +1,72 @@ +use std::net::SocketAddr; + +use anyhow::{Context as _, Result}; +use clap::Parser; +use indexer_service_rpc::RpcServer as _; +use jsonrpsee::server::Server; +use log::{error, info}; +use tokio_util::sync::CancellationToken; + +#[derive(Debug, Parser)] +#[clap(version)] +struct Args { + #[clap(short, long, default_value = "8779")] + port: u16, +} + +#[tokio::main] +async fn main() -> Result<()> { + env_logger::init(); + + let args = Args::parse(); + + let cancellation_token = listen_for_shutdown_signal(); + + let handle = run_server(args.port).await?; + let handle_clone = handle.clone(); + + tokio::select! { + _ = cancellation_token.cancelled() => { + info!("Shutting down server..."); + } + _ = handle_clone.stopped() => { + error!("Server stopped unexpectedly"); + } + } + + info!("Server shutdown complete"); + + Ok(()) +} + +async fn run_server(port: u16) -> Result { + let server = Server::builder() + .build(SocketAddr::from(([0, 0, 0, 0], port))) + .await + .context("Failed to build RPC server")?; + + let addr = server + .local_addr() + .context("Failed to get local address of RPC server")?; + + info!("Starting Indexer Service RPC server on {addr}"); + + let handle = server.start(indexer_service::service::IndexerService.into_rpc()); + Ok(handle) +} + +fn listen_for_shutdown_signal() -> CancellationToken { + let cancellation_token = CancellationToken::new(); + let cancellation_token_clone = cancellation_token.clone(); + + tokio::spawn(async move { + if let Err(err) = tokio::signal::ctrl_c().await { + error!("Failed to listen for Ctrl-C signal: {err}"); + return; + } + info!("Received Ctrl-C signal"); + cancellation_token_clone.cancel(); + }); + + cancellation_token +} diff --git a/indexer_service/src/service.rs b/indexer_service/src/service.rs new file mode 100644 index 00000000..46c5fb2d --- /dev/null +++ b/indexer_service/src/service.rs @@ -0,0 +1,36 @@ +use indexer_service_protocol::{Account, AccountId, Block, BlockId, Hash, Transaction}; +use jsonrpsee::{core::SubscriptionResult, types::ErrorObjectOwned}; + +pub struct IndexerService; + +// `async_trait` is required by `jsonrpsee` +#[async_trait::async_trait] +impl indexer_service_rpc::RpcServer for IndexerService { + async fn subscribe_to_blocks( + &self, + _subscription_sink: jsonrpsee::PendingSubscriptionSink, + _from: BlockId, + ) -> SubscriptionResult { + todo!() + } + + async fn get_block_by_id(&self, _block_id: BlockId) -> Result { + todo!() + } + + async fn get_block_by_hash(&self, _block_hash: Hash) -> Result { + todo!() + } + + async fn get_last_block_id(&self) -> Result { + todo!() + } + + async fn get_account(&self, _account_id: AccountId) -> Result { + todo!() + } + + async fn get_transaction(&self, _tx_hash: Hash) -> Result { + todo!() + } +} diff --git a/nssa/core/src/account.rs b/nssa/core/src/account.rs index 55ab0ded..b1f41b65 100644 --- a/nssa/core/src/account.rs +++ b/nssa/core/src/account.rs @@ -68,6 +68,10 @@ impl AccountId { pub fn value(&self) -> &[u8; 32] { &self.value } + + pub fn into_value(self) -> [u8; 32] { + self.value + } } impl AsRef<[u8]> for AccountId { diff --git a/nssa/core/src/encoding.rs b/nssa/core/src/encoding.rs index 24ac050c..34be3782 100644 --- a/nssa/core/src/encoding.rs +++ b/nssa/core/src/encoding.rs @@ -69,6 +69,11 @@ impl Commitment { self.0 } + #[cfg(feature = "host")] + pub fn from_byte_array(bytes: [u8; 32]) -> Self { + Self(bytes) + } + #[cfg(feature = "host")] pub fn from_cursor(cursor: &mut Cursor<&[u8]>) -> Result { let mut bytes = [0u8; 32]; @@ -89,6 +94,11 @@ impl Nullifier { self.0 } + #[cfg(feature = "host")] + pub fn from_byte_array(bytes: [u8; 32]) -> Self { + Self(bytes) + } + pub fn from_cursor(cursor: &mut Cursor<&[u8]>) -> Result { let mut bytes = [0u8; 32]; cursor.read_exact(&mut bytes)?; @@ -106,6 +116,16 @@ impl Ciphertext { bytes } + #[cfg(feature = "host")] + pub fn into_inner(self) -> Vec { + self.0 + } + + #[cfg(feature = "host")] + pub fn from_inner(inner: Vec) -> Self { + Self(inner) + } + #[cfg(feature = "host")] pub fn from_cursor(cursor: &mut Cursor<&[u8]>) -> Result { let mut u32_bytes = [0; 4]; diff --git a/nssa/src/privacy_preserving_transaction/circuit.rs b/nssa/src/privacy_preserving_transaction/circuit.rs index 1b490de8..1ebe90f3 100644 --- a/nssa/src/privacy_preserving_transaction/circuit.rs +++ b/nssa/src/privacy_preserving_transaction/circuit.rs @@ -20,6 +20,16 @@ use crate::{ #[derive(Debug, Clone, PartialEq, Eq, BorshSerialize, BorshDeserialize)] pub struct Proof(pub(crate) Vec); +impl Proof { + pub fn into_inner(self) -> Vec { + self.0 + } + + pub fn from_inner(inner: Vec) -> Self { + Self(inner) + } +} + #[derive(Clone)] pub struct ProgramWithDependencies { pub program: Program, diff --git a/nssa/src/privacy_preserving_transaction/message.rs b/nssa/src/privacy_preserving_transaction/message.rs index 6d195321..f507e65c 100644 --- a/nssa/src/privacy_preserving_transaction/message.rs +++ b/nssa/src/privacy_preserving_transaction/message.rs @@ -45,12 +45,12 @@ impl EncryptedAccountData { #[derive(Debug, Clone, PartialEq, Eq, BorshSerialize, BorshDeserialize)] pub struct Message { - pub(crate) public_account_ids: Vec, - pub(crate) nonces: Vec, - pub(crate) public_post_states: Vec, + pub public_account_ids: Vec, + pub nonces: Vec, + pub public_post_states: Vec, pub encrypted_private_post_states: Vec, pub new_commitments: Vec, - pub(crate) new_nullifiers: Vec<(Nullifier, CommitmentSetDigest)>, + pub new_nullifiers: Vec<(Nullifier, CommitmentSetDigest)>, } impl Message { diff --git a/nssa/src/privacy_preserving_transaction/transaction.rs b/nssa/src/privacy_preserving_transaction/transaction.rs index 2cb0889b..34649d2d 100644 --- a/nssa/src/privacy_preserving_transaction/transaction.rs +++ b/nssa/src/privacy_preserving_transaction/transaction.rs @@ -16,7 +16,7 @@ use crate::{ #[derive(Debug, Clone, PartialEq, Eq, BorshSerialize, BorshDeserialize)] pub struct PrivacyPreservingTransaction { pub message: Message, - witness_set: WitnessSet, + pub witness_set: WitnessSet, } impl PrivacyPreservingTransaction { diff --git a/nssa/src/privacy_preserving_transaction/witness_set.rs b/nssa/src/privacy_preserving_transaction/witness_set.rs index b38b0fb9..365b61b9 100644 --- a/nssa/src/privacy_preserving_transaction/witness_set.rs +++ b/nssa/src/privacy_preserving_transaction/witness_set.rs @@ -46,4 +46,18 @@ impl WitnessSet { pub fn proof(&self) -> &Proof { &self.proof } + + pub fn into_raw_parts(self) -> (Vec<(Signature, PublicKey)>, Proof) { + (self.signatures_and_public_keys, self.proof) + } + + pub fn from_raw_parts( + signatures_and_public_keys: Vec<(Signature, PublicKey)>, + proof: Proof, + ) -> Self { + Self { + signatures_and_public_keys, + proof, + } + } } diff --git a/nssa/src/program_deployment_transaction/message.rs b/nssa/src/program_deployment_transaction/message.rs index 65e9ec27..41c4e10a 100644 --- a/nssa/src/program_deployment_transaction/message.rs +++ b/nssa/src/program_deployment_transaction/message.rs @@ -9,4 +9,8 @@ impl Message { pub fn new(bytecode: Vec) -> Self { Self { bytecode } } + + pub fn into_bytecode(self) -> Vec { + self.bytecode + } } diff --git a/nssa/src/program_deployment_transaction/transaction.rs b/nssa/src/program_deployment_transaction/transaction.rs index c5f31a1c..6002aded 100644 --- a/nssa/src/program_deployment_transaction/transaction.rs +++ b/nssa/src/program_deployment_transaction/transaction.rs @@ -14,6 +14,10 @@ impl ProgramDeploymentTransaction { Self { message } } + pub fn into_message(self) -> Message { + self.message + } + pub(crate) fn validate_and_produce_public_state_diff( &self, state: &V02State, diff --git a/nssa/src/public_transaction/message.rs b/nssa/src/public_transaction/message.rs index d8bd2da0..36a20fbb 100644 --- a/nssa/src/public_transaction/message.rs +++ b/nssa/src/public_transaction/message.rs @@ -9,10 +9,10 @@ use crate::{AccountId, error::NssaError, program::Program}; #[derive(Debug, Clone, PartialEq, Eq, BorshSerialize, BorshDeserialize)] pub struct Message { - pub(crate) program_id: ProgramId, - pub(crate) account_ids: Vec, - pub(crate) nonces: Vec, - pub(crate) instruction_data: InstructionData, + pub program_id: ProgramId, + pub account_ids: Vec, + pub nonces: Vec, + pub instruction_data: InstructionData, } impl Message { diff --git a/nssa/src/public_transaction/witness_set.rs b/nssa/src/public_transaction/witness_set.rs index 09a35a4e..9b9cd290 100644 --- a/nssa/src/public_transaction/witness_set.rs +++ b/nssa/src/public_transaction/witness_set.rs @@ -37,6 +37,16 @@ impl WitnessSet { pub fn signatures_and_public_keys(&self) -> &[(Signature, PublicKey)] { &self.signatures_and_public_keys } + + pub fn into_raw_parts(self) -> Vec<(Signature, PublicKey)> { + self.signatures_and_public_keys + } + + pub fn from_raw_parts(signatures_and_public_keys: Vec<(Signature, PublicKey)>) -> Self { + Self { + signatures_and_public_keys, + } + } } #[cfg(test)] diff --git a/nssa/src/signature/mod.rs b/nssa/src/signature/mod.rs index 780ad634..f76c480a 100644 --- a/nssa/src/signature/mod.rs +++ b/nssa/src/signature/mod.rs @@ -8,7 +8,7 @@ use rand::{RngCore, rngs::OsRng}; #[derive(Debug, Clone, PartialEq, Eq, BorshSerialize, BorshDeserialize)] pub struct Signature { - value: [u8; 64], + pub value: [u8; 64], } impl Signature { From 1b04c5326a40d9eef5ffc7c381a541954a6c8dfe Mon Sep 17 00:00:00 2001 From: Pravdyvy Date: Wed, 28 Jan 2026 05:50:49 +0200 Subject: [PATCH 2/2] fix: arts fix --- artifacts/program_methods/amm.bin | Bin 460412 -> 460380 bytes .../authenticated_transfer.bin | Bin 380156 -> 380144 bytes artifacts/program_methods/pinata.bin | Bin 382736 -> 382736 bytes artifacts/program_methods/pinata_token.bin | Bin 390440 -> 390412 bytes .../privacy_preserving_circuit.bin | Bin 501560 -> 501560 bytes artifacts/program_methods/token.bin | Bin 418708 -> 418708 bytes artifacts/test_program_methods/burner.bin | Bin 376948 -> 376948 bytes .../test_program_methods/chain_caller.bin | Bin 390636 -> 390652 bytes .../test_program_methods/changer_claimer.bin | Bin 380056 -> 380056 bytes artifacts/test_program_methods/claimer.bin | Bin 375844 -> 375860 bytes .../test_program_methods/data_changer.bin | Bin 378564 -> 378564 bytes .../test_program_methods/extra_output.bin | Bin 375940 -> 375940 bytes .../malicious_authorization_changer.bin | Bin 382160 -> 382176 bytes artifacts/test_program_methods/minter.bin | Bin 375876 -> 375876 bytes .../test_program_methods/missing_output.bin | Bin 376012 -> 376028 bytes .../modified_transfer.bin | Bin 379412 -> 379400 bytes .../test_program_methods/nonce_changer.bin | Bin 375960 -> 375960 bytes artifacts/test_program_methods/noop.bin | Bin 375656 -> 375672 bytes .../program_owner_changer.bin | Bin 375872 -> 375872 bytes .../simple_balance_transfer.bin | Bin 377772 -> 377756 bytes 20 files changed, 0 insertions(+), 0 deletions(-) diff --git a/artifacts/program_methods/amm.bin b/artifacts/program_methods/amm.bin index 138a9924ab678dcf15c00d649ff6a155562e4809..179e4c95b603a8badf971191064331a9fc2c3b9a 100644 GIT binary patch delta 9731 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 F{|`BwZ;}82 delta 9774 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 j-FA?yv=JWDK?D2 diff --git a/artifacts/program_methods/pinata_token.bin b/artifacts/program_methods/pinata_token.bin index b53c77d2f97dbda6ec5cd1495b0b46bcd4667ebd..b07f307df19925d14d7e17a0b441365797b66316 100644 GIT binary patch delta 9721 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 diff --git a/artifacts/program_methods/privacy_preserving_circuit.bin b/artifacts/program_methods/privacy_preserving_circuit.bin index dbd2271c1972345b259dfe0fe558285c6920dc72..57284dfda580e80700bccab25d1b898b614f8245 100644 GIT binary patch delta 8407 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 F{{ssdlq~=N delta 8707 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 PP}9y?(;tj^X8At>h2D&? diff --git a/artifacts/test_program_methods/changer_claimer.bin b/artifacts/test_program_methods/changer_claimer.bin index 83253542df1ec1e22fe5eafc39405fa478b7a2fb..842ab16c0aa4563f9a33fe65fd41ecbf29713578 100644 GIT binary patch delta 466 zcmbO+Q+&ou@rD-07N!>FEi8vu37Z;QSX!7_m>FAInweUd8e5tfOb=YgqCWlaDi(IE zvf`^*PGOVS{$({wCL=Z(uz}L1MtV6pWx0CTY|MSeVm$rnS{89!+BKx`=mxr1AFD=? zvD=TWV`*c?Dh=`{0dv)*OmMsU;U*mRf(({6vBa$t9Kt=DSvYXIYx+4{vI*L(GVQEe MShllnVVx`i07T<^a{vGU delta 466 zcmbO+Q+&ou@rD-07N!>FEi8vu2^$$38km?^8Um4#g@uK&v5Cp_z;!I@)BmnwVaF;f zzMAC}Hi_+DRVv_+IC~az_my=VLtB1|T+-EGt)1R(o5yz!nLkf>>pnLVPY6Ka( z{n$E|HfF5SAb%1tS6#{kx2qp+!eKASU}+Oe+&aM_+_Ra51E;&DpTi}apv@}N&bozV KJL?wK$r1oDp?Ns~ diff --git a/artifacts/test_program_methods/claimer.bin b/artifacts/test_program_methods/claimer.bin index 9c0b11682d69662396eb6934809bda61a126718d..b3bd2fe70da8d8423d789a949e0b532954e9d80a 100644 GIT binary patch delta 8722 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 QxKd5~i~Z=(xMlPH4{9r~b^rhX delta 8689 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 K>#t*-Dggk?v47zJ diff --git a/artifacts/test_program_methods/extra_output.bin b/artifacts/test_program_methods/extra_output.bin index b534f5b0ba7c1eead0fb6c8ce468048ced980c9b..7ce3cd265a021d43b79c4b7dc409101ef3cf021d 100644 GIT binary patch delta 473 zcmZqqDc15+tf7Umg{g&k3ya=tVPkVc6LU*rLvs^TLlX-FGZPc@>5j8m^s!1b&t^G| zO=5fE9F{CbY%5j8m^s!1b&t^G| zO=5fE9F{CbY%VwY diff --git a/artifacts/test_program_methods/malicious_authorization_changer.bin b/artifacts/test_program_methods/malicious_authorization_changer.bin index 1594b9cddd618ed56a8c70d1001d5298134408c6..9a4244ad3e6dcb30787fc280b048d13edbce1709 100644 GIT binary patch delta 8734 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 delta 484 zcmX@|L+r>8v4$4L7N!>FEi7+m2^$)j8=D%Nm>64_n46ke8W~xdO>dmXqAqQ$my=VL zt7nK!fzxc3)7W%wSD3?+#fVJ?Y^IE<0Ukpg=dc)07oNu=flI%Jv>_htKt~&3)d@0p z`}cV)Kbf#fgFS16-(dCWIg400aB0_=z8;UPx{QfA0n=qnEC{Nw#G~TCL>8I$^@~}y KuV2hMRRRFaOMid> diff --git a/artifacts/test_program_methods/missing_output.bin b/artifacts/test_program_methods/missing_output.bin index 611676c03ef0e803faa3d5425a7476872f0362eb..1eac8cc6238e7bc9c676fe82c4901c892459d89a 100644 GIT binary patch delta 8713 zcmaKxeOOgh*1*>}=klRxiXVuIg0GSKQn7=#z{--^kIoJXpSz)Cf+&@&;7SZ$t?k)B^;nCxB-sn>z~s9CR3VK|J85_{`j2!W2Byj;vuH= zrNNHC>d!=$!9LC5gwI7PGfhcUJRjaV)D%EJmX$s39p4EJYD;#4=jp|m&a1}YG&@C*l!))0oQ(~3; zcFX@a{Tg5Jz!{b&*OVmHFXt! za`){4iG}TnA2c+Hy^obsiL#W0Zor;8eKs5i*l;Z3kb0JC>RGJJx$!sc*GVmKX zztw;y@4=hldNtsj&M*$YrFa*dbZ2Bmb@^QvO%AhwwmSCMZs%PlIhtE?S7LqE4Gm|E`?*eky=kNwHV}6Ax#Y%pN%xIkNF2&Fo zO*VM=kFdb@p0guU2cP@3yVRFZWn!^!I`W{*reU|oz%e-0W1u6s(&RDl=dOf$lsogM zm}cT*rW7d$hj!DXbfha^45z_Y+L2*z?1%fd%7eOeCQA!j8+5q~PVjIDF2bQ9j>poq zI}yQwIAt&oHekCN*aNJ9OFa%Ah2LYT#w)qmgM`L@zRf-q?hU{*g@-)svL+$Zvx;;78{f%5v~70v1JalB)h?&iGwEzMpt(U;-cH{1pJ z8ZLGfWY9I5TuuKhH9#5sj)&iYP5Ot+9GUQaXke@{UAxkHA=X%|<;)sL%D-pI619Lw zVDoL}ul#RMoRZ&h=l?dG1sAF9#@tP~x!5ltn6Tf4GGrw%?Rf zia&?Vd)#UEzg3f!aAZe31W)krX1E#sgG#>%?^xlNN(69dx62}36-r6HLPk-)zh z(&CNNIR!(=i^G9%f@yk`{2s3Vh!Udae-N(n*p1KBWIf!|u`7A-2J{IJ8!Jj)wKBUI zn|#4TgP6}hiIcLEbUih>)|5u&?+iHcFc(o3*Z1MVBW|L%NkcHn&DT5NWghu*xDh`R zlpnQlwJQ%wpTU#~PlqXRGaWW62YTF~$y*E%3GhU?3XbI2T6pcpOh7q!0Nz^XvhPL? zoljgI1lJukWqsH_=l4z;Dvr6wSZ+E7;CyB9U+{1S?5<{T`AwP>z>yvJ0PJ=6!vFB{ zn=h7Mo#A00TkQjDMlYj-k$H}lA9BK!CN*%6+coKOoRn3O_;Lg(0GBHc+<_rDTX9Zk zhiPnzyOa!V&UXV;Z_V=?lZ@akS(>C5xPg2E-j*B52wnEVCCDRzU64(!ZirlTG}#Nw zNq6Ok-HF_jQM=&&=wFIEcIj?2Qj?9JnNs1nmm+~tWVYwjngVB`&|fKRfISNGg|+lD zc6`Bub{tM|>^p|!R^rg~IrkV9rx)Pkr zjDp8=@W<2dFL1m6xQ{CtLn_1b)mB*uFY_FZd*S}*cUALgHHk4)-S`Ay&mJZe6;aPvEp%e z^FWvq>940qh=ye}L=q?OSCmlqkeBD-G~~T7U?;}M)@zwYFg9)#JFKdwU)uSc3FTRt zBaFpSddx)Yz$oKr&$vWhyZh4pvRegww6$ZZagDBRvd&C1KJ;bA+)F||>2FPh$#Cvd z{?#2Tv5uD;i(?DU zPa)(x{30r14?I9c_=mss;`Zl(;72{&V=8YaPydNWOR!0TSO=JJMvtudOU*`o%2hxitg7|!L!DPMv!YEpIHLZq*f&ZuKj`4R{YE? zO~ya&4!$2wf&e$AB+mEI3?PO!pF#PfuImb-xLOU!3;-ISYRU2k_kH z>&vK*3wib^o&ztNACNpX?z`|Qc%S0$;cW{7@^7cVE*aMGRmOHbv;00H*gYUjG+bfg z@28MH={mL!u7i6hL;Z?0>HL&?$EdK5uQf6>T^_Ll>x{Y4+FnD8msqu?R zC9)Md9OYS5?R@pIxfDLN(;q&mY<>mK;*yxC3{E}90B<=dYs-HNr|t2}W&&w*Eqrho z_DE@)2IxQ3!Ut>g`4x^>J|6@();jue zd~=mb*bZIc5V{0J^8H)X3D;6xO= z6bJGZ_l)LtaKtYOYK`+?`NS`4mE2%$8~6Idw>jJX4e(mzmE>R8fl?aMD2Am8oc|ydoK#v(}YOL=fM4OFv5r7!vFfiZ!0?jH~s=bFG;~?-CgF1?Yq;EGc(NJ!TAO3}QT#ew%&s9I;azjqmLCZy zd6aw$mw4ni_{ph5Zq7`DYs_FkveC00c!h>+3K3Zu=DVoz9XE5MQ6XFiH}Cg{eX#o< zfcwHVs(<%B95LiblCn1z&TZ@52<-lcF1t9QgD)qdK~G3m&|tDpBc*pge6DLihNuA^ z=a4DG!3m1@!YfIlV#Nclx;TfPf$J^ja%wy9DO`Hex%=AOs~=aAmILlS&Y{8C7ET17 zg!3BA@L^^vd=7haVsA3ru!iTHO3JC%a?g8)B_INETs+=|y`}r^R3cJsh7VWU-u6`X zUm2CFM9sjw4i9%a?@znK9@wPTCn@>tL1Z-s5)?NLL z4iv%-9$r42`rqhjh#A4HjfNIckQK0k|tE77m_J+LoT^Bnv56)`gyRp)L z1FqKn;eVys1AYPf+EBXHgvO5}0zbGD4E~OWinea$`WRkzfh1H0r~DFw!aG12_#9rO zahfTuk&h<{4U$$(=tVd^+8>Eh* zYvE>Qut>>YnV?B!2IsraNz#mod|bNHNiKm0!fd%#!Va{5QMrJ0X@H}?jW182ieD0@i- zZ0qh!$d0gm{#Vj4pSM`V<3_lqw?BNjwg>1wnKh3KNR68DSh%I5^Et|vFM)j&n$c>2 zeQ;F_U-wkV&lmnrX`bSi=J5GH_&!bY7gOof0CjL$d_dN!TAjz;GijM$%K5xt57+>& zT}Q;)J3OsOlY_6jh3GHvkS#8Edw|=#hv)EGC^^J-J+K zTa{~kjrvcR)|h6`pEOJyY~OmO{&bH}(<)!z&`mG;Vt!(T@Z{#c__LD>RsFm?F?I0I pcyM8V?XU*k9JONZ{{y>Inm+&l delta 8703 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 SL>8HLmL)9PS(dO)kpKYj2YBfK delta 469 zcmbR7Q*6dhv4$4L7N!>FEi8evg^etYEDX)fOiay<%?(TpOw7#~rZ*mER+BQ;%gHIr z)icIaFn!5vmeWF*;@cbNuw*e}k(ll$ucJ9ICVmdp5DEfg%hX#>1Tnm*urz+ SL>8HLmL)9PS(dO)kpKXR26%t~ diff --git a/artifacts/test_program_methods/noop.bin b/artifacts/test_program_methods/noop.bin index 8a20a78970b28a8275e8b8efe3703d949c87f25b..856dbe7b1fa944b34cbcd48f12d8a2745799dcb5 100644 GIT binary patch delta 8703 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 diff --git a/artifacts/test_program_methods/program_owner_changer.bin b/artifacts/test_program_methods/program_owner_changer.bin index 6d08ff3d0a36c1c244523c43bfb03883cff02400..d17d6cdff6cec5e2f6df46e137168050dcba0cf7 100644 GIT binary patch delta 487 zcmX@`L+rp0v4$4L7N!>FEi6A~iI|%jn3@?|7#JHFnVT3Io0^yyFiclG&a5V7te2Bh zmaB(F!E~S5ET@FANNm@f!;;B}+sx@_=CW{L(>VS0MHb`fQuA2EacWkVHpJ;5u#45F zubaohj??t*zvr?1V8Us<+H~DTEbMrs^YBTlPv3w~T202p9KYj%Dl7=7kT$Wzsbc!V Si7YbhYZkL?U$dBXiUa^rJbe5B delta 487 zcmX@`L+rp0v4$4L7N!>FEi6A~iI`a$7#Nxv8Cn=y7#mp{nwppzF-%uH&a5V7te2Bh zmaB(F!E~S5ET@FANNm@f!;;B}+sx@_=CW{L(>VS0MHb`fQuA2EacWkVHpJ;5u#45F zubaohj??t*zvr?1V8Us<+H~DTEbMrs^YBTlPv3w~T202p9KYj%Dl7=7kT$Wzsbc!V Si7YbhYZkL?U$dBXiUa_pd3{y@ diff --git a/artifacts/test_program_methods/simple_balance_transfer.bin b/artifacts/test_program_methods/simple_balance_transfer.bin index 555c9f669d7bb2874c8753df62fee376a3d0d478..f6105e5a2cbc68813deaad0315e2550a8fc28406 100644 GIT binary patch delta 8701 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 ZJrtdn6&JEs_Kz#kG~G_TDejpE{vV~+p6~zw delta 8716 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