diff --git a/.gitignore b/.gitignore index 7f1e63cd..8196c671 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,15 @@ +.env* +.idea + test-ledger/ # Added by cargo /target /.cargo + +.DS_Store + +minio +test.db +docker-compose.yml diff --git a/Cargo.lock b/Cargo.lock index 8836f866..ee17d50c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1,6 +1,6 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -version = 3 +version = 4 [[package]] name = "Inflector" @@ -14,18 +14,18 @@ dependencies = [ [[package]] name = "addr2line" -version = "0.21.0" +version = "0.24.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" +checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" dependencies = [ "gimli", ] [[package]] -name = "adler" -version = "1.0.2" +name = "adler2" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" +checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" [[package]] name = "aead" @@ -69,7 +69,7 @@ version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "891477e0c6a8957309ee5c45a6368af3ae14bb510732d2684ffa19af310920f9" dependencies = [ - "getrandom 0.2.14", + "getrandom 0.2.15", "once_cell", "version_check", ] @@ -81,10 +81,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" dependencies = [ "cfg-if", - "getrandom 0.2.14", + "getrandom 0.2.15", "once_cell", "version_check", - "zerocopy", + "zerocopy 0.7.35", ] [[package]] @@ -105,12 +105,11 @@ checksum = "250f629c0161ad8107cf89319e990051fae62832fd343083bea452d93e2205fd" [[package]] name = "aligned-sized" version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48a526ec4434d531d488af59fe866f36b310fe8906691c75dffa664450a3800a" +source = "git+https://github.com/Lightprotocol/light-protocol?rev=368f9f08272db78c74b2ade1a1c2fead27dd0a96#368f9f08272db78c74b2ade1a1c2fead27dd0a96" dependencies = [ "proc-macro2", "quote", - "syn 2.0.59", + "syn 2.0.100", ] [[package]] @@ -130,9 +129,9 @@ dependencies = [ [[package]] name = "allocator-api2" -version = "0.2.18" +version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f" +checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" [[package]] name = "anchor-attribute-access-control" @@ -222,7 +221,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f4e2e5be518ec6053d90a2a7f26843dbee607583c779e6c8395951b9739bdfbe" dependencies = [ "anchor-syn", - "borsh-derive-internal 0.10.3", + "borsh-derive-internal 0.10.4", "proc-macro2", "quote", "syn 1.0.109", @@ -257,11 +256,11 @@ dependencies = [ "arrayref", "base64 0.13.1", "bincode", - "borsh 0.10.3", + "borsh 0.10.4", "bytemuck", - "getrandom 0.2.14", - "solana-program", - "thiserror", + "getrandom 0.2.15", + "solana-program 1.18.22", + "thiserror 1.0.69", ] [[package]] @@ -279,7 +278,7 @@ dependencies = [ "serde_json", "sha2 0.10.8", "syn 1.0.109", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -308,71 +307,59 @@ dependencies = [ [[package]] name = "anstream" -version = "0.6.13" +version = "0.6.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d96bd03f33fe50a863e394ee9718a706f988b9079b20c3784fb726e7678b62fb" +checksum = "8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b" dependencies = [ "anstyle", "anstyle-parse", "anstyle-query", "anstyle-wincon", "colorchoice", + "is_terminal_polyfill", "utf8parse", ] [[package]] name = "anstyle" -version = "1.0.6" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8901269c6307e8d93993578286ac0edf7f195079ffff5ebdeea6a59ffb7e36bc" +checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9" [[package]] name = "anstyle-parse" -version = "0.2.3" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c75ac65da39e5fe5ab759307499ddad880d724eed2f6ce5b5e8a26f4f387928c" +checksum = "3b2d16507662817a6a20a9ea92df6652ee4f94f914589377d69f3b21bc5798a9" dependencies = [ "utf8parse", ] [[package]] name = "anstyle-query" -version = "1.0.2" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e28923312444cdd728e4738b3f9c9cac739500909bb3d3c94b43551b16517648" +checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] name = "anstyle-wincon" -version = "3.0.2" +version = "3.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cd54b81ec8d6180e24654d0b371ad22fc3dd083b6ff8ba325b72e00c87660a7" +checksum = "ca3534e77181a9cc07539ad51f2141fe32f6c3ffd4df76db8ad92346b003ae4e" dependencies = [ "anstyle", - "windows-sys 0.52.0", + "once_cell", + "windows-sys 0.59.0", ] [[package]] name = "anyhow" -version = "1.0.82" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f538837af36e6f6a9be0faa67f9a314f8119e4e4b5867c6ab40ed60360142519" - -[[package]] -name = "aquamarine" -version = "0.3.3" +version = "1.0.97" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1da02abba9f9063d786eab1509833ebb2fac0f966862ca59439c76b9c566760" -dependencies = [ - "include_dir", - "itertools 0.10.5", - "proc-macro-error", - "proc-macro2", - "quote", - "syn 1.0.109", -] +checksum = "dcfed56ad506cb2c684a14971b8861fdc3baaaae314b9e5f9bb532cbe3ba7a4f" [[package]] name = "ark-bn254" @@ -380,28 +367,20 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a22f4561524cd949590d78d7d4c5df8f592430d221f7f3c9497bbafd8972120f" dependencies = [ - "ark-ec", - "ark-ff", - "ark-std", + "ark-ec 0.4.2", + "ark-ff 0.4.2", + "ark-std 0.4.0", ] [[package]] -name = "ark-crypto-primitives" -version = "0.4.0" +name = "ark-bn254" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f3a13b34da09176a8baba701233fdffbaa7c1b1192ce031a3da4e55ce1f1a56" +checksum = "d69eab57e8d2663efa5c63135b2af4f396d66424f88954c21104125ab6b3e6bc" dependencies = [ - "ark-ec", - "ark-ff", - "ark-relations", - "ark-serialize", - "ark-snark", - "ark-std", - "blake2", - "derivative", - "digest 0.10.7", - "rayon", - "sha2 0.10.8", + "ark-ec 0.5.0", + "ark-ff 0.5.0", + "ark-std 0.5.0", ] [[package]] @@ -410,15 +389,35 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "defd9a439d56ac24968cca0571f598a61bc8c55f71d50a89cda591cb750670ba" dependencies = [ - "ark-ff", - "ark-poly", - "ark-serialize", - "ark-std", + "ark-ff 0.4.2", + "ark-poly 0.4.2", + "ark-serialize 0.4.2", + "ark-std 0.4.0", "derivative", "hashbrown 0.13.2", "itertools 0.10.5", "num-traits", - "rayon", + "zeroize", +] + +[[package]] +name = "ark-ec" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43d68f2d516162846c1238e755a7c4d131b892b70cc70c471a8e3ca3ed818fce" +dependencies = [ + "ahash 0.8.11", + "ark-ff 0.5.0", + "ark-poly 0.5.0", + "ark-serialize 0.5.0", + "ark-std 0.5.0", + "educe", + "fnv", + "hashbrown 0.15.2", + "itertools 0.13.0", + "num-bigint 0.4.6", + "num-integer", + "num-traits", "zeroize", ] @@ -428,21 +427,40 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec847af850f44ad29048935519032c33da8aa03340876d351dfab5660d2966ba" dependencies = [ - "ark-ff-asm", - "ark-ff-macros", - "ark-serialize", - "ark-std", + "ark-ff-asm 0.4.2", + "ark-ff-macros 0.4.2", + "ark-serialize 0.4.2", + "ark-std 0.4.0", "derivative", "digest 0.10.7", "itertools 0.10.5", "num-bigint 0.4.6", "num-traits", "paste", - "rayon", "rustc_version", "zeroize", ] +[[package]] +name = "ark-ff" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a177aba0ed1e0fbb62aa9f6d0502e9b46dad8c2eab04c14258a1212d2557ea70" +dependencies = [ + "ark-ff-asm 0.5.0", + "ark-ff-macros 0.5.0", + "ark-serialize 0.5.0", + "ark-std 0.5.0", + "arrayvec", + "digest 0.10.7", + "educe", + "itertools 0.13.0", + "num-bigint 0.4.6", + "num-traits", + "paste", + "zeroize", +] + [[package]] name = "ark-ff-asm" version = "0.4.2" @@ -453,6 +471,16 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "ark-ff-asm" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62945a2f7e6de02a31fe400aa489f0e0f5b2502e69f95f853adb82a96c7a6b60" +dependencies = [ + "quote", + "syn 2.0.100", +] + [[package]] name = "ark-ff-macros" version = "0.4.2" @@ -467,19 +495,16 @@ dependencies = [ ] [[package]] -name = "ark-groth16" -version = "0.4.0" +name = "ark-ff-macros" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20ceafa83848c3e390f1cbf124bc3193b3e639b3f02009e0e290809a501b95fc" +checksum = "09be120733ee33f7693ceaa202ca41accd5653b779563608f1234f78ae07c4b3" dependencies = [ - "ark-crypto-primitives", - "ark-ec", - "ark-ff", - "ark-poly", - "ark-relations", - "ark-serialize", - "ark-std", - "rayon", + "num-bigint 0.4.6", + "num-traits", + "proc-macro2", + "quote", + "syn 2.0.100", ] [[package]] @@ -488,24 +513,26 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d320bfc44ee185d899ccbadfa8bc31aab923ce1558716e1997a1e74057fe86bf" dependencies = [ - "ark-ff", - "ark-serialize", - "ark-std", + "ark-ff 0.4.2", + "ark-serialize 0.4.2", + "ark-std 0.4.0", "derivative", "hashbrown 0.13.2", - "rayon", ] [[package]] -name = "ark-relations" -version = "0.4.0" +name = "ark-poly" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00796b6efc05a3f48225e59cb6a2cda78881e7c390872d5786aaf112f31fb4f0" +checksum = "579305839da207f02b89cd1679e50e67b4331e2f9294a57693e5051b7703fe27" dependencies = [ - "ark-ff", - "ark-std", - "tracing", - "tracing-subscriber 0.2.25", + "ahash 0.8.11", + "ark-ff 0.5.0", + "ark-serialize 0.5.0", + "ark-std 0.5.0", + "educe", + "fnv", + "hashbrown 0.15.2", ] [[package]] @@ -514,8 +541,21 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5" dependencies = [ - "ark-serialize-derive", - "ark-std", + "ark-serialize-derive 0.4.2", + "ark-std 0.4.0", + "digest 0.10.7", + "num-bigint 0.4.6", +] + +[[package]] +name = "ark-serialize" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f4d068aaf107ebcd7dfb52bc748f8030e0fc930ac8e360146ca54c1203088f7" +dependencies = [ + "ark-serialize-derive 0.5.0", + "ark-std 0.5.0", + "arrayvec", "digest 0.10.7", "num-bigint 0.4.6", ] @@ -532,15 +572,14 @@ dependencies = [ ] [[package]] -name = "ark-snark" -version = "0.4.0" +name = "ark-serialize-derive" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84d3cc6833a335bb8a600241889ead68ee89a3cf8448081fb7694c0fe503da63" +checksum = "213888f660fddcca0d257e88e54ac05bca01885f258ccdf695bafd77031bb69d" dependencies = [ - "ark-ff", - "ark-relations", - "ark-serialize", - "ark-std", + "proc-macro2", + "quote", + "syn 2.0.100", ] [[package]] @@ -551,20 +590,29 @@ checksum = "94893f1e0c6eeab764ade8dc4c0db24caf4fe7cbbaafc0eba0a9030f447b5185" dependencies = [ "num-traits", "rand 0.8.5", - "rayon", +] + +[[package]] +name = "ark-std" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "246a225cc6131e9ee4f24619af0f19d67761fff15d7ccc22e42b80846e69449a" +dependencies = [ + "num-traits", + "rand 0.8.5", ] [[package]] name = "arrayref" -version = "0.3.7" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545" +checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" [[package]] name = "arrayvec" -version = "0.7.4" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" +checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" [[package]] name = "ascii" @@ -584,7 +632,7 @@ dependencies = [ "nom", "num-traits", "rusticata-macros", - "thiserror", + "thiserror 1.0.69", "time", ] @@ -597,7 +645,7 @@ dependencies = [ "proc-macro2", "quote", "syn 1.0.109", - "synstructure", + "synstructure 0.12.6", ] [[package]] @@ -640,13 +688,12 @@ dependencies = [ [[package]] name = "async-channel" -version = "2.2.1" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "136d4d23bcc79e27423727b36823d86233aad06dfea531837b038394d11e9928" +checksum = "89b47800b0be77592da0afd425cc03468052844aff33b84e33cc696f64e77b6a" dependencies = [ "concurrent-queue", - "event-listener 5.3.0", - "event-listener-strategy 0.5.1", + "event-listener-strategy", "futures-core", "pin-project-lite", ] @@ -667,11 +714,11 @@ dependencies = [ [[package]] name = "async-compression" -version = "0.4.8" +version = "0.4.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07dbbf24db18d609b1462965249abdf49129ccad073ec257da372adc83259c60" +checksum = "59a194f9d963d8099596278594b3107448656ba73831c9d8c783e613ce86da64" dependencies = [ - "brotli 4.0.0", + "brotli 7.0.0", "flate2", "futures-core", "memchr", @@ -681,14 +728,14 @@ dependencies = [ [[package]] name = "async-executor" -version = "1.11.0" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b10202063978b3351199d68f8b22c4e47e4b1b822f8d43fd862d5ea8c006b29a" +checksum = "30ca9a001c1e8ba5149f91a74362376cc6bc5b919d92d988668657bd570bdcec" dependencies = [ "async-task", "concurrent-queue", - "fastrand 2.0.2", - "futures-lite 2.3.0", + "fastrand", + "futures-lite", "slab", ] @@ -698,100 +745,71 @@ version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "05b1b633a2115cd122d73b955eadd9916c18c8f510ec9cd1686404c60ad1c29c" dependencies = [ - "async-channel 2.2.1", + "async-channel 2.3.1", "async-executor", - "async-io 2.3.2", - "async-lock 3.3.0", + "async-io", + "async-lock", "blocking", - "futures-lite 2.3.0", + "futures-lite", "once_cell", "tokio", ] [[package]] name = "async-io" -version = "1.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fc5b45d93ef0529756f812ca52e44c221b35341892d3dcc34132ac02f3dd2af" -dependencies = [ - "async-lock 2.8.0", - "autocfg", - "cfg-if", - "concurrent-queue", - "futures-lite 1.13.0", - "log", - "parking", - "polling 2.8.0", - "rustix 0.37.27", - "slab", - "socket2 0.4.10", - "waker-fn", -] - -[[package]] -name = "async-io" -version = "2.3.2" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcccb0f599cfa2f8ace422d3555572f47424da5648a4382a9dd0310ff8210884" +checksum = "43a2b323ccce0a1d90b449fd71f2a06ca7faa7c54c2751f06c9bd851fc061059" dependencies = [ - "async-lock 3.3.0", + "async-lock", "cfg-if", "concurrent-queue", "futures-io", - "futures-lite 2.3.0", + "futures-lite", "parking", - "polling 3.6.0", - "rustix 0.38.32", + "polling", + "rustix 0.38.44", "slab", "tracing", - "windows-sys 0.52.0", -] - -[[package]] -name = "async-lock" -version = "2.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "287272293e9d8c41773cec55e365490fe034813a2f172f502d6ddcf75b2f582b" -dependencies = [ - "event-listener 2.5.3", + "windows-sys 0.59.0", ] [[package]] name = "async-lock" -version = "3.3.0" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d034b430882f8381900d3fe6f0aaa3ad94f2cb4ac519b429692a1bc2dda4ae7b" +checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18" dependencies = [ - "event-listener 4.0.3", - "event-listener-strategy 0.4.0", + "event-listener 5.4.0", + "event-listener-strategy", "pin-project-lite", ] [[package]] name = "async-mutex" -version = "1.4.0" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "479db852db25d9dbf6204e6cb6253698f175c15726470f78af0d918e99d6156e" +checksum = "73112ce9e1059d8604242af62c7ec8e5975ac58ac251686c8403b45e8a6fe778" dependencies = [ "event-listener 2.5.3", ] [[package]] name = "async-std" -version = "1.12.0" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62565bb4402e926b29953c785397c6dc0391b7b446e45008b0049eb43cec6f5d" +checksum = "730294c1c08c2e0f85759590518f6333f0d5a0a766a27d519c1b244c3dfd8a24" dependencies = [ "async-attributes", "async-channel 1.9.0", "async-global-executor", - "async-io 1.13.0", - "async-lock 2.8.0", + "async-io", + "async-lock", "crossbeam-utils", "futures-channel", "futures-core", "futures-io", - "futures-lite 1.13.0", + "futures-lite", "gloo-timers", "kv-log-macro", "log", @@ -805,9 +823,9 @@ dependencies = [ [[package]] name = "async-stream" -version = "0.3.5" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd56dd203fef61ac097dd65721a419ddccb106b2d2b70ba60a6b529f03961a51" +checksum = "0b5a71a6f37880a80d1d7f19efd781e4b5de42c88f0722cc13bcb6cc2cfe8476" dependencies = [ "async-stream-impl", "futures-core", @@ -816,30 +834,30 @@ dependencies = [ [[package]] name = "async-stream-impl" -version = "0.3.5" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" +checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.59", + "syn 2.0.100", ] [[package]] name = "async-task" -version = "4.7.0" +version = "4.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbb36e985947064623dbd357f727af08ffd077f93d696782f3c56365fa2e2799" +checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" [[package]] name = "async-trait" -version = "0.1.83" +version = "0.1.88" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "721cae7de5c34fbb2acd27e21e6d2cf7b886dce0c27388d46c4e6c47ea4318dd" +checksum = "e539d3fca749fcee5236ab05e93a52867dd549cc157c8cb7f99595f3cedffdb5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.59", + "syn 2.0.100", ] [[package]] @@ -884,9 +902,9 @@ dependencies = [ [[package]] name = "autocfg" -version = "1.2.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1fdabc7756949593fe60f30ec81974b613357de856987752631dea1e3394c80" +checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" [[package]] name = "autotools" @@ -909,18 +927,18 @@ dependencies = [ "quick-xml", "rust-ini", "serde", - "thiserror", + "thiserror 1.0.69", "time", "url", ] [[package]] name = "aws-region" -version = "0.25.4" +version = "0.25.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42fed2b9fca70f2908268d057a607f2a906f47edbf856ea8587de9038d264e22" +checksum = "e9aed3f9c7eac9be28662fdb3b0f4d1951e812f7c64fed4f0327ba702f459b3b" dependencies = [ - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -936,7 +954,7 @@ dependencies = [ "futures-util", "http 0.2.12", "http-body 0.4.6", - "hyper 0.14.28", + "hyper 0.14.32", "itoa", "matchit", "memchr", @@ -970,17 +988,17 @@ dependencies = [ [[package]] name = "backtrace" -version = "0.3.71" +version = "0.3.74" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26b05800d2e817c8b3b4b54abd461726265fa9789ae34330622f2db9ee696f9d" +checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" dependencies = [ "addr2line", - "cc", "cfg-if", "libc", "miniz_oxide", "object", "rustc-demangle", + "windows-targets 0.52.6", ] [[package]] @@ -1016,27 +1034,15 @@ checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" [[package]] name = "base64" -version = "0.22.0" +version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9475866fec1451be56a3c2400fd081ff546538961565ccb5b7142cbd22bc7a51" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" [[package]] name = "base64ct" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" - -[[package]] -name = "bb8" -version = "0.8.5" +version = "1.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b10cf871f3ff2ce56432fddc2615ac7acc3aa22ca321f8fea800846fbb32f188" -dependencies = [ - "async-trait", - "futures-util", - "parking_lot 0.12.1", - "tokio", -] +checksum = "89e25b6adfb930f02d1981565a6e5d9c547ac15a96606256d3b59040e5cd4ca3" [[package]] name = "beef" @@ -1064,9 +1070,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.5.0" +version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" +checksum = "5c8214115b7bf84099f1309324e63141d4c5d7cc26862f97a0a857dbefe165bd" dependencies = [ "serde", ] @@ -1092,20 +1098,11 @@ dependencies = [ "wyz", ] -[[package]] -name = "blake2" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" -dependencies = [ - "digest 0.10.7", -] - [[package]] name = "blake3" -version = "1.5.1" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30cca6d3674597c30ddf2c587bf8d9d65c9a84d2326d941cc79c9842dfe0ef52" +checksum = "34a796731680be7931955498a16a10b2270c7762963d5d570fdbfe02dcbf314f" dependencies = [ "arrayref", "arrayvec", @@ -1142,18 +1139,15 @@ checksum = "8d696c370c750c948ada61c69a0ee2cbbb9c50b1019ddb86d9317157a99c2cae" [[package]] name = "blocking" -version = "1.5.1" +version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a37913e8dc4ddcc604f0c6d3bf2887c995153af3611de9e23c352b44c1b9118" +checksum = "703f41c54fc768e63e091340b424302bb1c29ef4aa0c7f10fe849dfb114d29ea" dependencies = [ - "async-channel 2.2.1", - "async-lock 3.3.0", + "async-channel 2.3.1", "async-task", - "fastrand 2.0.2", "futures-io", - "futures-lite 2.3.0", + "futures-lite", "piper", - "tracing", ] [[package]] @@ -1168,21 +1162,21 @@ dependencies = [ [[package]] name = "borsh" -version = "0.10.3" +version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4114279215a005bc675e386011e594e1d9b800918cea18fcadadcce864a2046b" +checksum = "115e54d64eb62cdebad391c19efc9dce4981c690c85a33a12199d99bb9546fee" dependencies = [ - "borsh-derive 0.10.3", + "borsh-derive 0.10.4", "hashbrown 0.13.2", ] [[package]] name = "borsh" -version = "1.4.0" +version = "1.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0901fc8eb0aca4c83be0106d6f2db17d86a08dfc2c25f0e84464bf381158add6" +checksum = "ad8646f98db542e39fc66e68a20b2144f6a732636df7c2354e74645faaa433ce" dependencies = [ - "borsh-derive 1.4.0", + "borsh-derive 1.5.7", "cfg_aliases", ] @@ -1201,12 +1195,12 @@ dependencies = [ [[package]] name = "borsh-derive" -version = "0.10.3" +version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0754613691538d51f329cce9af41d7b7ca150bc973056f1156611489475f54f7" +checksum = "831213f80d9423998dd696e2c5345aba6be7a0bd8cd19e31c5243e13df1cef89" dependencies = [ - "borsh-derive-internal 0.10.3", - "borsh-schema-derive-internal 0.10.3", + "borsh-derive-internal 0.10.4", + "borsh-schema-derive-internal 0.10.4", "proc-macro-crate 0.1.5", "proc-macro2", "syn 1.0.109", @@ -1214,16 +1208,15 @@ dependencies = [ [[package]] name = "borsh-derive" -version = "1.4.0" +version = "1.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51670c3aa053938b0ee3bd67c3817e471e626151131b934038e83c5bf8de48f5" +checksum = "fdd1d3c0c2f5833f22386f252fe8ed005c7f59fdcddeef025c01b4c3b9fd9ac3" dependencies = [ "once_cell", - "proc-macro-crate 3.1.0", + "proc-macro-crate 3.3.0", "proc-macro2", "quote", - "syn 2.0.59", - "syn_derive", + "syn 2.0.100", ] [[package]] @@ -1239,9 +1232,9 @@ dependencies = [ [[package]] name = "borsh-derive-internal" -version = "0.10.3" +version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afb438156919598d2c7bad7e1c0adf3d26ed3840dbc010db1a882a65583ca2fb" +checksum = "65d6ba50644c98714aa2a70d13d7df3cd75cd2b523a2b452bf010443800976b3" dependencies = [ "proc-macro2", "quote", @@ -1261,9 +1254,9 @@ dependencies = [ [[package]] name = "borsh-schema-derive-internal" -version = "0.10.3" +version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "634205cc43f74a1b9046ef87c4540ebda95696ec0f315024860cad7c5b0f5ccd" +checksum = "276691d96f063427be83e6692b86148e488ebba9f48f77788724ca027ba3b6d4" dependencies = [ "proc-macro2", "quote", @@ -1283,13 +1276,13 @@ dependencies = [ [[package]] name = "brotli" -version = "4.0.0" +version = "7.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "125740193d7fee5cc63ab9e16c2fdc4e07c74ba755cc53b327d6ea029e9fc569" +checksum = "cc97b8f16f944bba54f0433f07e30be199b6dc2bd25937444bbad560bcea29bd" dependencies = [ "alloc-no-stdlib", "alloc-stdlib", - "brotli-decompressor 3.0.0", + "brotli-decompressor 4.0.2", ] [[package]] @@ -1304,9 +1297,9 @@ dependencies = [ [[package]] name = "brotli-decompressor" -version = "3.0.0" +version = "4.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65622a320492e09b5e0ac436b14c54ff68199bac392d0e89a6832c4518eea525" +checksum = "74fa05ad7d803d413eb8380983b092cbbaf9a85f151b871360e7b00cd7060b37" dependencies = [ "alloc-no-stdlib", "alloc-stdlib", @@ -1329,9 +1322,9 @@ dependencies = [ [[package]] name = "bstr" -version = "1.9.1" +version = "1.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05efc5cfd9110c8416e471df0e96702d58690178e206e61b7173706673c93706" +checksum = "531a9155a481e2ee699d4f98f43c0ca4ff8ee1bfd55c31e9e98fb29d2b176fe0" dependencies = [ "memchr", "serde", @@ -1339,9 +1332,9 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.16.0" +version = "3.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" +checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf" [[package]] name = "bv" @@ -1377,22 +1370,22 @@ dependencies = [ [[package]] name = "bytemuck" -version = "1.19.0" +version = "1.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8334215b81e418a0a7bdb8ef0849474f40bb10c8b71f1c4ed315cff49f32494d" +checksum = "b6b1fc10dbac614ebc03540c9dbd60e83887fda27794998c6528f1782047d540" dependencies = [ "bytemuck_derive", ] [[package]] name = "bytemuck_derive" -version = "1.6.0" +version = "1.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4da9a32f3fed317401fa3c862968128267c3106685286e15d5aaa3d7389c2f60" +checksum = "7ecc273b49b3205b83d648f0690daa588925572cc5063745bfe547fe7ec8e1a1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.59", + "syn 2.0.100", ] [[package]] @@ -1403,45 +1396,24 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8318a53db07bb3f8dca91a600466bdb3f2eaadeedfdbcf02e1accbad9271ba50" - -[[package]] -name = "bzip2" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bdb116a6ef3f6c3698828873ad02c3014b3c85cadb88496095628e3ef1e347f8" -dependencies = [ - "bzip2-sys", - "libc", -] - -[[package]] -name = "bzip2-sys" -version = "0.1.11+1.0.8" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "736a955f3fa7875102d57c82b8cac37ec45224a07fd32d58f9f7a186b6cd4cdc" -dependencies = [ - "cc", - "libc", - "pkg-config", -] +checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" [[package]] name = "cadence" -version = "1.4.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f338b979d9ebfff4bb9801ae8f3af0dc3615f7f1ca963f2e4782bcf9acb3753" +checksum = "62fd689c825a93386a2ac05a46f88342c6df9ec3e79416f665650614e92e7475" dependencies = [ "crossbeam-channel", ] [[package]] name = "cadence-macros" -version = "1.3.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d142d6f7317ce530e6eb6ee64d3ca48d120421f724e135c87efabd6182d026c4" +checksum = "6b08e5cc30b127719e11db43f0906974c6b5a2110e1000db65d54cc76e3f246e" dependencies = [ "cadence", ] @@ -1453,14 +1425,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "190baaad529bcfbde9e1a19022c42781bdb6ff9de25721abdb8fd98c0807730b" dependencies = [ "libc", - "thiserror", + "thiserror 1.0.69", ] [[package]] name = "cc" -version = "1.1.30" +version = "1.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b16803a61b81d9eabb7eae2588776c4c1e584b738ede45fdbb4c972cec1e9945" +checksum = "1fcb57c740ae1daf453ae85f16e37396f672b039e00d9d866e07ddb24e328e3a" dependencies = [ "jobserver", "libc", @@ -1475,15 +1447,15 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "cfg_aliases" -version = "0.1.1" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e" +checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" [[package]] name = "chrono" -version = "0.4.38" +version = "0.4.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" +checksum = "1a7964611d71df112cb1730f2ee67324fcf4d0fc6606acbbe9bfe06df124637c" dependencies = [ "android-tzdata", "iana-time-zone", @@ -1491,16 +1463,7 @@ dependencies = [ "num-traits", "serde", "wasm-bindgen", - "windows-targets 0.52.5", -] - -[[package]] -name = "chrono-humanize" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "799627e6b4d27827a814e837b9d8a504832086081806d45b1afa34dc982b023b" -dependencies = [ - "chrono", + "windows-link", ] [[package]] @@ -1523,7 +1486,7 @@ dependencies = [ "bitflags 1.3.2", "strsim 0.8.0", "textwrap 0.11.0", - "unicode-width", + "unicode-width 0.1.14", "vec_map", ] @@ -1541,28 +1504,28 @@ dependencies = [ "once_cell", "strsim 0.10.0", "termcolor", - "textwrap 0.16.1", + "textwrap 0.16.2", ] [[package]] name = "clap" -version = "4.5.4" +version = "4.5.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90bc066a67923782aa8515dbaea16946c5bcc5addbd668bb80af688e53e548a0" +checksum = "d8aa86934b44c19c50f87cc2790e19f54f7a67aedb64101c2e1a2e5ecfb73944" dependencies = [ "clap_builder", - "clap_derive 4.5.4", + "clap_derive 4.5.32", ] [[package]] name = "clap_builder" -version = "4.5.2" +version = "4.5.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae129e2e766ae0ec03484e609954119f123cc1fe650337e155d03b022f24f7b4" +checksum = "2414dbb2dd0695280da6ea9261e327479e9d37b0630f6b53ba2a11c60c679fd9" dependencies = [ "anstream", "anstyle", - "clap_lex 0.7.0", + "clap_lex 0.7.4", "strsim 0.11.1", ] @@ -1581,14 +1544,14 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.4" +version = "4.5.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "528131438037fd55894f62d6e9f068b8f45ac57ffa77517819645d10aed04f64" +checksum = "09176aae279615badda0765c0c0b3f6ed53f4709118af73cf4655d85d1530cd7" dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.59", + "syn 2.0.100", ] [[package]] @@ -1602,42 +1565,15 @@ dependencies = [ [[package]] name = "clap_lex" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98cc8fbded0c607b7ba9dd60cd98df59af97e84d24e49c8557331cfc26d301ce" - -[[package]] -name = "color-eyre" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55146f5e46f237f7423d74111267d4597b59b0dad0ffaf7303bce9945d843ad5" -dependencies = [ - "backtrace", - "color-spantrace", - "eyre", - "indenter", - "once_cell", - "owo-colors", - "tracing-error", -] - -[[package]] -name = "color-spantrace" -version = "0.2.1" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd6be1b2a7e382e2b98b43b2adcca6bb0e465af0bdd38123873ae61eb17a72c2" -dependencies = [ - "once_cell", - "owo-colors", - "tracing-core", - "tracing-error", -] +checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6" [[package]] name = "colorchoice" -version = "1.0.0" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" +checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" [[package]] name = "combine" @@ -1654,24 +1590,24 @@ dependencies = [ [[package]] name = "concurrent-queue" -version = "2.4.0" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d16048cd947b08fa32c24458a22f5dc5e835264f689f4f5653210c69fd107363" +checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" dependencies = [ "crossbeam-utils", ] [[package]] name = "console" -version = "0.15.8" +version = "0.15.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e1f83fc076bd6dd27517eacdf25fef6c4dfe5f1d7448bafaaf3a26f13b5e4eb" +checksum = "054ccb5b10f9f2cbf51eb355ca1d05c2d279ce1804688d0db74b4733a5aeafd8" dependencies = [ "encode_unicode", - "lazy_static", "libc", - "unicode-width", - "windows-sys 0.52.0", + "once_cell", + "unicode-width 0.2.0", + "windows-sys 0.59.0", ] [[package]] @@ -1715,16 +1651,16 @@ version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f9d839f2a20b0aee515dc581a6172f2321f96cab76c1a38a4c584a194955390e" dependencies = [ - "getrandom 0.2.14", + "getrandom 0.2.15", "once_cell", "tiny-keccak", ] [[package]] name = "constant_time_eq" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7144d30dcf0fafbce74250a3963025d8d52177934239851c917d29f1df280c2" +checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6" [[package]] name = "core-foundation" @@ -1738,15 +1674,15 @@ dependencies = [ [[package]] name = "core-foundation-sys" -version = "0.8.6" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] name = "cpufeatures" -version = "0.2.12" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" dependencies = [ "libc", ] @@ -1768,27 +1704,27 @@ checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" [[package]] name = "crc32fast" -version = "1.4.0" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3855a8a784b474f333699ef2bbca9db2c4a1f6d9088a90a2d25b1eb53111eaa" +checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" dependencies = [ "cfg-if", ] [[package]] name = "crossbeam-channel" -version = "0.5.12" +version = "0.5.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab3db02a9c5b5121e1e42fbdb1aeb65f5e02624cc58c43f2884c6ccac0b82f95" +checksum = "06ba6d68e24814cb8de6bb986db8222d3a027d15872cabc0d18817bc3c0e4471" dependencies = [ "crossbeam-utils", ] [[package]] name = "crossbeam-deque" -version = "0.8.5" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" +checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" dependencies = [ "crossbeam-epoch", "crossbeam-utils", @@ -1805,24 +1741,24 @@ dependencies = [ [[package]] name = "crossbeam-queue" -version = "0.3.11" +version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df0346b5d5e76ac2fe4e327c5fd1118d6be7c51dfb18f9b7922923f287471e35" +checksum = "0f58bbc28f91df819d0aa2a2c00cd19754769c2fad90579b3592b1c9ba7a3115" dependencies = [ "crossbeam-utils", ] [[package]] name = "crossbeam-utils" -version = "0.8.19" +version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345" +checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" [[package]] name = "crunchy" -version = "0.2.2" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" +checksum = "43da5946c66ffcc7745f48db692ffbb10a83bfe0afd96235c5c2a4fb23994929" [[package]] name = "crypto-common" @@ -1868,38 +1804,66 @@ dependencies = [ ] [[package]] -name = "darling" -version = "0.20.8" +name = "curve25519-dalek" +version = "4.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54e36fcd13ed84ffdfda6f5be89b31287cbb80c439841fe69e04841435464391" +checksum = "97fb8b7c4503de7d6ae7b42ab72a5a59857b4c937ec27a3d4539dba95b5ab2be" dependencies = [ - "darling_core", - "darling_macro", -] + "cfg-if", + "cpufeatures", + "curve25519-dalek-derive", + "digest 0.10.7", + "fiat-crypto", + "rand_core 0.6.4", + "rustc_version", + "subtle", + "zeroize", +] + +[[package]] +name = "curve25519-dalek-derive" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.100", +] + +[[package]] +name = "darling" +version = "0.20.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee" +dependencies = [ + "darling_core", + "darling_macro", +] [[package]] name = "darling_core" -version = "0.20.8" +version = "0.20.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c2cf1c23a687a1feeb728783b993c4e1ad83d99f351801977dd809b48d0a70f" +checksum = "0d00b9596d185e565c2207a0b01f8bd1a135483d02d9b7b0a54b11da8d53412e" dependencies = [ "fnv", "ident_case", "proc-macro2", "quote", - "strsim 0.10.0", - "syn 2.0.59", + "strsim 0.11.1", + "syn 2.0.100", ] [[package]] name = "darling_macro" -version = "0.20.8" +version = "0.20.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a668eda54683121533a393014d8692171709ff57a7d61f187b6e782719f8933f" +checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" dependencies = [ "darling_core", "quote", - "syn 2.0.59", + "syn 2.0.100", ] [[package]] @@ -1909,18 +1873,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" dependencies = [ "cfg-if", - "hashbrown 0.14.2", + "hashbrown 0.14.5", "lock_api", "once_cell", - "parking_lot_core 0.9.9", - "rayon", + "parking_lot_core 0.9.10", ] [[package]] name = "data-encoding" -version = "2.6.0" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8566979429cf69b49a5c740c60791108e86440e8be149bbea4fe54d2c32d6e2" +checksum = "575f75dfd25738df5b91b8e43e14d44bda14637a58fae779fd2b064f8bf3e010" [[package]] name = "der" @@ -1947,9 +1910,9 @@ dependencies = [ [[package]] name = "deranged" -version = "0.3.11" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" +checksum = "28cfac68e08048ae1883171632c2aef3ebc555621ae56fbccce1cbf22dd7f058" dependencies = [ "powerfmt", "serde", @@ -1984,12 +1947,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "difflib" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6184e33543162437515c2e2b48714794e37845ec9851711914eec9d308f6ebe8" - [[package]] name = "digest" version = "0.9.0" @@ -2010,15 +1967,6 @@ dependencies = [ "subtle", ] -[[package]] -name = "dir-diff" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7ad16bf5f84253b50d6557681c58c3ab67c47c77d39fed9aeb56e947290bd10" -dependencies = [ - "walkdir", -] - [[package]] name = "dirs" version = "4.0.0" @@ -2068,7 +2016,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.59", + "syn 2.0.100", ] [[package]] @@ -2091,7 +2039,7 @@ checksum = "a6cbae11b3de8fce2a456e8ea3dada226b35fe791f0dc1d360c0941f0bb681f3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.59", + "syn 2.0.100", ] [[package]] @@ -2109,12 +2057,6 @@ version = "0.15.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b" -[[package]] -name = "downcast" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1435fa1053d8b2fbbe9be7e97eca7f33d37b28409959813daefc1446a14247f1" - [[package]] name = "eager" version = "0.1.0" @@ -2136,7 +2078,7 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c762bae6dcaf24c4c84667b8579785430908723d5c889f469d76a41d59cc7a9d" dependencies = [ - "curve25519-dalek", + "curve25519-dalek 3.2.1", "ed25519", "rand 0.7.3", "serde", @@ -2158,36 +2100,36 @@ dependencies = [ [[package]] name = "educe" -version = "0.4.23" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f0042ff8246a363dbe77d2ceedb073339e85a804b9a47636c6e016a9a32c05f" +checksum = "1d7bc049e1bd8cdeb31b68bbd586a9464ecf9f3944af3958a7a9d0f8b9799417" dependencies = [ "enum-ordinalize", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.100", ] [[package]] name = "either" -version = "1.11.0" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a47c1c47d2f5964e29c61246e81db715514cd532db6b5116a25ea3c03d6780a2" +checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" dependencies = [ "serde", ] [[package]] name = "encode_unicode" -version = "0.3.6" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f" +checksum = "34aa73646ffb006b8f5147f3dc182bd4bcb190227ce861fc4a4844bf8e3cb2c0" [[package]] name = "encoding_rs" -version = "0.8.34" +version = "0.8.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b45de904aa0b010bce2ab45264d0631681847fa7b6f2eaa7dab7619943bc4f59" +checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" dependencies = [ "cfg-if", ] @@ -2203,36 +2145,33 @@ dependencies = [ [[package]] name = "enum-iterator-derive" -version = "1.3.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03cdc46ec28bd728e67540c528013c6a10eb69a02eb31078a1bda695438cbfb8" +checksum = "a1ab991c1362ac86c61ab6f556cff143daa22e5a15e4e189df818b2fd19fe65b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.59", + "syn 2.0.100", ] [[package]] name = "enum-ordinalize" -version = "3.1.15" +version = "4.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bf1fa3f06bbff1ea5b1a9c7b14aa992a39657db60a2759457328d7e058f49ee" +checksum = "fea0dcfa4e54eeb516fe454635a95753ddd39acda650ce703031c6973e315dd5" dependencies = [ - "num-bigint 0.4.6", - "num-traits", - "proc-macro2", - "quote", - "syn 2.0.59", + "enum-ordinalize-derive", ] [[package]] -name = "env_filter" -version = "0.1.2" +name = "enum-ordinalize-derive" +version = "4.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f2c92ceda6ceec50f43169f9ee8424fe2db276791afde7b2cd8bc084cb376ab" +checksum = "0d28318a75d4aead5c4db25382e8ef717932d0346600cacae6357eb5941bc5ff" dependencies = [ - "log", - "regex", + "proc-macro2", + "quote", + "syn 2.0.100", ] [[package]] @@ -2248,46 +2187,20 @@ dependencies = [ "termcolor", ] -[[package]] -name = "env_logger" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cd405aab171cb85d6735e5c8d9db038c17d3ca007a4d2c25f337935c3d90580" -dependencies = [ - "humantime", - "is-terminal", - "log", - "regex", - "termcolor", -] - -[[package]] -name = "env_logger" -version = "0.11.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e13fa619b91fb2381732789fc5de83b45675e882f66623b7d8cb4f643017018d" -dependencies = [ - "anstream", - "anstyle", - "env_filter", - "humantime", - "log", -] - [[package]] name = "equivalent" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" [[package]] name = "errno" -version = "0.3.8" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" +checksum = "33d852cb9b869c2a9b3df2f71a3074817f01e1844f839a144f5fcef059a4eb5d" dependencies = [ "libc", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -2298,20 +2211,9 @@ checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" [[package]] name = "event-listener" -version = "4.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67b215c49b2b248c855fb73579eb1f4f26c38ffdc12973e20e07b91d78d5646e" -dependencies = [ - "concurrent-queue", - "parking", - "pin-project-lite", -] - -[[package]] -name = "event-listener" -version = "5.3.0" +version = "5.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d9944b8ca13534cdfb2800775f8dd4902ff3fc75a50101466decadfdf322a24" +checksum = "3492acde4c3fc54c845eaab3eed8bd00c7a7d881f78bfc801e43a93dec1331ae" dependencies = [ "concurrent-queue", "parking", @@ -2320,48 +2222,25 @@ dependencies = [ [[package]] name = "event-listener-strategy" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "958e4d70b6d5e81971bebec42271ec641e7ff4e170a6fa605f2b8a8b65cb97d3" -dependencies = [ - "event-listener 4.0.3", - "pin-project-lite", -] - -[[package]] -name = "event-listener-strategy" -version = "0.5.1" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "332f51cb23d20b0de8458b86580878211da09bcd4503cb579c225b3d124cabb3" +checksum = "8be9f3dfaaffdae2972880079a491a1a8bb7cbed0b8dd7a347f668b4150a3b93" dependencies = [ - "event-listener 5.3.0", + "event-listener 5.4.0", "pin-project-lite", ] [[package]] -name = "eyre" -version = "0.6.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cd915d99f24784cdc19fd37ef22b97e3ff0ae756c7e492e9fbfe897d61e2aec" -dependencies = [ - "indenter", - "once_cell", -] - -[[package]] -name = "fastrand" -version = "1.9.0" +name = "fastmurmur3" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" -dependencies = [ - "instant", -] +checksum = "2d7e9bc68be4cdabbb8938140b01a8b5bc1191937f2c7e7ecc2fcebbe2d749df" [[package]] name = "fastrand" -version = "2.0.2" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "658bd65b1cf4c852a3cc96f18a8ce7b5640f6b703f905c7d74532294c2a63984" +checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" [[package]] name = "feature-probe" @@ -2370,22 +2249,25 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "835a3dc7d1ec9e75e2b5fb4ba75396837112d2060b03f7d43bc1897c7f7211da" [[package]] -name = "filetime" -version = "0.2.23" +name = "fiat-crypto" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ee447700ac8aa0b2f2bd7bc4462ad686ba06baa6727ac149a2d6277f0d240fd" +checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" + +[[package]] +name = "five8_const" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26dec3da8bc3ef08f2c04f61eab298c3ab334523e55f076354d6d6f613799a7b" dependencies = [ - "cfg-if", - "libc", - "redox_syscall 0.4.1", - "windows-sys 0.52.0", + "five8_core", ] [[package]] -name = "finl_unicode" -version = "1.2.0" +name = "five8_core" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fcfdc7a0362c9f4444381a9e697c79d435fe65b52a37466fc2c1184cee9edc6" +checksum = "2551bf44bc5f776c15044b9b94153a00198be06743e262afaaa61f11ac7523a5" [[package]] name = "fixedbitset" @@ -2395,23 +2277,14 @@ checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" [[package]] name = "flate2" -version = "1.0.28" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e" +checksum = "7ced92e76e966ca2fd84c8f7aa01a4aea65b0eb6648d72f7c8f3e2764a67fece" dependencies = [ "crc32fast", "miniz_oxide", ] -[[package]] -name = "float-cmp" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98de4bbd547a563b716d8dfa9aad1cb19bfab00f4fa09a6a4ed21dbcf44ce9c4" -dependencies = [ - "num-traits", -] - [[package]] name = "flume" version = "0.10.14" @@ -2454,12 +2327,6 @@ dependencies = [ "percent-encoding", ] -[[package]] -name = "fragile" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c2141d6d6c8512188a7891b4b01590a45f6dac67afb4f255c4124dbb86d4eaa" - [[package]] name = "function_name" version = "0.3.0" @@ -2483,9 +2350,9 @@ checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" [[package]] name = "futures" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" +checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" dependencies = [ "futures-channel", "futures-core", @@ -2498,9 +2365,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" +checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" dependencies = [ "futures-core", "futures-sink", @@ -2508,15 +2375,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" [[package]] name = "futures-executor" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" +checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" dependencies = [ "futures-core", "futures-task", @@ -2536,32 +2403,17 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" - -[[package]] -name = "futures-lite" -version = "1.13.0" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce" -dependencies = [ - "fastrand 1.9.0", - "futures-core", - "futures-io", - "memchr", - "parking", - "pin-project-lite", - "waker-fn", -] +checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" [[package]] name = "futures-lite" -version = "2.3.0" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52527eb5074e35e9339c6b4e8d12600c7128b68fb25dcb9fa9dec18f7c25f3a5" +checksum = "f5edaec856126859abb19ed65f39e90fea3a9574b9707f13539acf4abf7eb532" dependencies = [ - "fastrand 2.0.2", + "fastrand", "futures-core", "futures-io", "parking", @@ -2570,26 +2422,26 @@ dependencies = [ [[package]] name = "futures-macro" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" +checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.59", + "syn 2.0.100", ] [[package]] name = "futures-sink" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" +checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" [[package]] name = "futures-task" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" +checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" [[package]] name = "futures-timer" @@ -2599,9 +2451,9 @@ checksum = "f288b0a4f20f9a56b5d1da57e2227c661b7b16168e2f72365f57b63326e29b24" [[package]] name = "futures-util" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" dependencies = [ "futures-channel", "futures-core", @@ -2651,9 +2503,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.14" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94b22e06ecb0110981051723910cbf0b5f5e09a2062dd7663334ee79a9d1286c" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" dependencies = [ "cfg-if", "js-sys", @@ -2662,36 +2514,48 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "getrandom" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73fea8450eea4bac3940448fb7ae50d91f034f941199fcd9d909a5a07aa455f0" +dependencies = [ + "cfg-if", + "libc", + "r-efi", + "wasi 0.14.2+wasi-0.2.4", +] + [[package]] name = "gimli" -version = "0.28.1" +version = "0.31.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" +checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" [[package]] name = "glob" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" +checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2" [[package]] name = "globset" -version = "0.4.14" +version = "0.4.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57da3b9b5b85bd66f31093f8c408b90a74431672542466497dcbdfdc02034be1" +checksum = "54a1028dfc5f5df5da8a56a73e6c153c9a9708ec57232470703592a3f18e49f5" dependencies = [ "aho-corasick", "bstr", "log", - "regex-automata 0.4.6", - "regex-syntax 0.8.3", + "regex-automata 0.4.9", + "regex-syntax 0.8.5", ] [[package]] name = "gloo-timers" -version = "0.2.6" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b995a66bb87bebce9a0f4a95aed01daca4872c050bfcb21653361c03bc35e5c" +checksum = "bbb143cf96099802033e0d4f4963b19fd2e0b728bcf076cd9cf7f6634f092994" dependencies = [ "futures-channel", "futures-core", @@ -2712,16 +2576,17 @@ dependencies = [ [[package]] name = "groth16-solana" -version = "0.0.3" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acc65a9ef90161a41b67cd4611e113d09f3819a1d488e4effafde92fca70861d" +checksum = "e88b742ab45083ea752bcece9bb0a1f8b9bdff52013a5f6b4dce77ac2b59f34c" dependencies = [ - "ark-bn254", - "ark-ec", - "ark-ff", - "ark-serialize", - "solana-program", - "thiserror", + "ark-bn254 0.5.0", + "ark-ec 0.5.0", + "ark-ff 0.5.0", + "ark-serialize 0.5.0", + "num-bigint 0.4.6", + "solana-bn254", + "thiserror 1.0.69", ] [[package]] @@ -2736,29 +2601,29 @@ dependencies = [ "futures-sink", "futures-util", "http 0.2.12", - "indexmap 2.2.6", + "indexmap 2.8.0", "slab", "tokio", - "tokio-util 0.7.10", + "tokio-util", "tracing", ] [[package]] name = "h2" -version = "0.4.4" +version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "816ec7294445779408f36fe57bc5b7fc1cf59664059096c65f905c1c61f58069" +checksum = "5017294ff4bb30944501348f6f8e42e6ad28f42c8bbef7a74029aff064a4e3c2" dependencies = [ + "atomic-waker", "bytes", "fnv", "futures-core", "futures-sink", - "futures-util", - "http 1.1.0", - "indexmap 2.2.6", + "http 1.3.1", + "indexmap 2.8.0", "slab", "tokio", - "tokio-util 0.7.10", + "tokio-util", "tracing", ] @@ -2800,21 +2665,30 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.14.2" +version = "0.14.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f93e7192158dbcda357bdec5fb5788eebf8bbac027f3f33e719d29135ae84156" +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" dependencies = [ "ahash 0.8.11", "allocator-api2", ] +[[package]] +name = "hashbrown" +version = "0.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" +dependencies = [ + "allocator-api2", +] + [[package]] name = "hashlink" version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e8094feaf31ff591f651a2664fb9cfd92bba7a60ce3197265e9482ebe753c8f7" dependencies = [ - "hashbrown 0.14.2", + "hashbrown 0.14.5", ] [[package]] @@ -2866,6 +2740,12 @@ version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" +[[package]] +name = "hermit-abi" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbf6a919d6cf397374f7dfeeea91d974c7c0a7221d0d0f4f20d859d329e53fcc" + [[package]] name = "hex" version = "0.4.3" @@ -2919,11 +2799,11 @@ dependencies = [ [[package]] name = "home" -version = "0.5.9" +version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" +checksum = "589533453244b0995c858700322199b2becb13b627df2851f64a2775d024abcf" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -2939,9 +2819,9 @@ dependencies = [ [[package]] name = "http" -version = "1.1.0" +version = "1.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21b9ddb458710bc376481b842f5da65cdf31522de232c1ca8146abce2a358258" +checksum = "f4a85d31aea989eead29a3aaf9e1115a180df8282431156e533de47660892565" dependencies = [ "bytes", "fnv", @@ -2961,24 +2841,24 @@ dependencies = [ [[package]] name = "http-body" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cac85db508abc24a2e48553ba12a996e87244a0395ce011e62b37158745d643" +checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" dependencies = [ "bytes", - "http 1.1.0", + "http 1.3.1", ] [[package]] name = "http-body-util" -version = "0.1.1" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0475f8b2ac86659c21b64320d5d653f9efe42acd2a4e560073ec61a155a34f1d" +checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" dependencies = [ "bytes", "futures-core", - "http 1.1.0", - "http-body 1.0.0", + "http 1.3.1", + "http-body 1.0.1", "pin-project-lite", ] @@ -2990,9 +2870,9 @@ checksum = "add0ab9360ddbd88cfeb3bd9574a1d85cfdfa14db10b3e21d3700dbc4328758f" [[package]] name = "httparse" -version = "1.8.0" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" +checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" [[package]] name = "httpdate" @@ -3002,15 +2882,15 @@ checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" [[package]] name = "humantime" -version = "2.1.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" +checksum = "9b112acc8b3adf4b107a8ec20977da0273a8c386765a3ec0229bd500a1443f9f" [[package]] name = "hyper" -version = "0.14.28" +version = "0.14.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf96e135eb83a2a8ddf766e426a841d8ddd7449d5f00d34ea02b41d2f19eef80" +checksum = "41dfc780fdec9373c01bae43289ea34c972e40ee3c9f6b3c8801a35f35586ce7" dependencies = [ "bytes", "futures-channel", @@ -3023,7 +2903,7 @@ dependencies = [ "httpdate", "itoa", "pin-project-lite", - "socket2 0.5.6", + "socket2", "tokio", "tower-service", "tracing", @@ -3032,16 +2912,16 @@ dependencies = [ [[package]] name = "hyper" -version = "1.3.1" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe575dd17d0862a9a33781c8c4696a55c320909004a67a00fb286ba8b1bc496d" +checksum = "cc2b571658e38e0c01b1fdca3bbbe93c00d3d71693ff2770043f8c29bc7d6f80" dependencies = [ "bytes", "futures-channel", "futures-util", - "h2 0.4.4", - "http 1.1.0", - "http-body 1.0.0", + "h2 0.4.8", + "http 1.3.1", + "http-body 1.0.1", "httparse", "itoa", "pin-project-lite", @@ -3058,7 +2938,7 @@ checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" dependencies = [ "futures-util", "http 0.2.12", - "hyper 0.14.28", + "hyper 0.14.32", "rustls 0.21.12", "tokio", "tokio-rustls 0.24.1", @@ -3070,7 +2950,7 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbb958482e8c7be4bc3cf272a766a2b0bf1a6755e7a6ae777f017a31d11b13b1" dependencies = [ - "hyper 0.14.28", + "hyper 0.14.32", "pin-project-lite", "tokio", "tokio-io-timeout", @@ -3083,7 +2963,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" dependencies = [ "bytes", - "hyper 0.14.28", + "hyper 0.14.32", "native-tls", "tokio", "tokio-native-tls", @@ -3097,7 +2977,7 @@ checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" dependencies = [ "bytes", "http-body-util", - "hyper 1.3.1", + "hyper 1.6.0", "hyper-util", "native-tls", "tokio", @@ -3107,36 +2987,37 @@ dependencies = [ [[package]] name = "hyper-util" -version = "0.1.3" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca38ef113da30126bbff9cd1705f9273e15d45498615d138b0c20279ac7a76aa" +checksum = "497bbc33a26fdd4af9ed9c70d63f61cf56a938375fbb32df34db9b1cd6d643f2" dependencies = [ "bytes", "futures-channel", "futures-util", - "http 1.1.0", - "http-body 1.0.0", - "hyper 1.3.1", + "http 1.3.1", + "http-body 1.0.1", + "hyper 1.6.0", + "libc", "pin-project-lite", - "socket2 0.5.6", + "socket2", "tokio", - "tower", "tower-service", "tracing", ] [[package]] name = "iana-time-zone" -version = "0.1.60" +version = "0.1.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" +checksum = "b0c919e5debc312ad217002b8048a17b7d83f80703865bbfcfebb0458b0b27d8" dependencies = [ "android_system_properties", "core-foundation-sys", "iana-time-zone-haiku", "js-sys", + "log", "wasm-bindgen", - "windows-core 0.52.0", + "windows-core", ] [[package]] @@ -3149,140 +3030,228 @@ dependencies = [ ] [[package]] -name = "ident_case" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" - -[[package]] -name = "idna" -version = "0.5.0" +name = "icu_collections" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" +checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" dependencies = [ - "unicode-bidi", - "unicode-normalization", + "displaydoc", + "yoke", + "zerofrom", + "zerovec", ] [[package]] -name = "im" -version = "15.1.0" +name = "icu_locid" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0acd33ff0285af998aaf9b57342af478078f53492322fafc47450e09397e0e9" +checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" dependencies = [ - "bitmaps", - "rand_core 0.6.4", - "rand_xoshiro", - "rayon", - "serde", - "sized-chunks", - "typenum", - "version_check", + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", ] [[package]] -name = "include_dir" -version = "0.7.4" +name = "icu_locid_transform" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "923d117408f1e49d914f1a379a309cffe4f18c05cf4e3d12e613a15fc81bd0dd" +checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" dependencies = [ - "include_dir_macros", + "displaydoc", + "icu_locid", + "icu_locid_transform_data", + "icu_provider", + "tinystr", + "zerovec", ] [[package]] -name = "include_dir_macros" -version = "0.7.4" +name = "icu_locid_transform_data" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cab85a7ed0bd5f0e76d93846e0147172bed2e2d3f859bcc33a8d9699cad1a75" -dependencies = [ - "proc-macro2", - "quote", -] +checksum = "7515e6d781098bf9f7205ab3fc7e9709d34554ae0b21ddbcb5febfa4bc7df11d" [[package]] -name = "indenter" -version = "0.3.3" +name = "icu_normalizer" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683" +checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "utf16_iter", + "utf8_iter", + "write16", + "zerovec", +] [[package]] -name = "index_list" -version = "0.2.13" +name = "icu_normalizer_data" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e6ba961c14e98151cd6416dd3685efe786a94c38bc1a535c06ceff0a1600813" +checksum = "c5e8338228bdc8ab83303f16b797e177953730f601a96c25d10cb3ab0daa0cb7" [[package]] -name = "indexmap" -version = "1.9.3" +name = "icu_properties" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" dependencies = [ - "autocfg", - "hashbrown 0.12.3", + "displaydoc", + "icu_collections", + "icu_locid_transform", + "icu_properties_data", + "icu_provider", + "tinystr", + "zerovec", ] [[package]] -name = "indexmap" -version = "2.2.6" +name = "icu_properties_data" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" +checksum = "85fb8799753b75aee8d2a21d7c14d9f38921b54b3dbda10f5a3c7a7b82dba5e2" + +[[package]] +name = "icu_provider" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" +dependencies = [ + "displaydoc", + "icu_locid", + "icu_provider_macros", + "stable_deref_trait", + "tinystr", + "writeable", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_provider_macros" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.100", +] + +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "idna" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" +dependencies = [ + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71" +dependencies = [ + "icu_normalizer", + "icu_properties", +] + +[[package]] +name = "im" +version = "15.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0acd33ff0285af998aaf9b57342af478078f53492322fafc47450e09397e0e9" +dependencies = [ + "bitmaps", + "rand_core 0.6.4", + "rand_xoshiro", + "rayon", + "serde", + "sized-chunks", + "typenum", + "version_check", +] + +[[package]] +name = "indexmap" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +dependencies = [ + "autocfg", + "hashbrown 0.12.3", +] + +[[package]] +name = "indexmap" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3954d50fe15b02142bf25d3b8bdadb634ec3948f103d04ffe3031bc8fe9d7058" dependencies = [ "equivalent", - "hashbrown 0.14.2", + "hashbrown 0.15.2", "serde", ] [[package]] name = "indicatif" -version = "0.17.8" +version = "0.17.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "763a5a8f45087d6bcea4222e7b72c291a054edf80e4ef6efd2a4979878c7bea3" +checksum = "183b3088984b400f4cfac3620d5e076c84da5364016b4f49473de574b2586235" dependencies = [ "console", - "instant", "number_prefix", "portable-atomic", - "unicode-width", + "unicode-width 0.2.0", + "web-time", ] [[package]] name = "insta" -version = "1.39.0" +version = "1.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "810ae6042d48e2c9e9215043563a58a80b877bc863228a74cf10c49d4620a6f5" +checksum = "50259abbaa67d11d2bcafc7ba1d094ed7a0c70e3ce893f0d0997f73558cb3084" dependencies = [ "console", - "lazy_static", "linked-hash-map", + "once_cell", + "pin-project", "serde", "similar", ] [[package]] name = "instant" -version = "0.1.12" +version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" +checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" dependencies = [ "cfg-if", ] -[[package]] -name = "io-lifetimes" -version = "1.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" -dependencies = [ - "hermit-abi 0.3.9", - "libc", - "windows-sys 0.48.0", -] - [[package]] name = "ipnet" -version = "2.9.0" +version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" +checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" [[package]] name = "iri-string" @@ -3294,15 +3263,10 @@ dependencies = [ ] [[package]] -name = "is-terminal" -version = "0.4.12" +name = "is_terminal_polyfill" +version = "1.70.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f23ff5ef2b80d608d61efee834934d862cd92461afc0560dedf493e4c033738b" -dependencies = [ - "hermit-abi 0.3.9", - "libc", - "windows-sys 0.52.0", -] +checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" [[package]] name = "itertools" @@ -3322,27 +3286,38 @@ dependencies = [ "either", ] +[[package]] +name = "itertools" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" +dependencies = [ + "either", +] + [[package]] name = "itoa" -version = "1.0.11" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" +checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" [[package]] name = "jobserver" -version = "0.1.30" +version = "0.1.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "685a7d121ee3f65ae4fddd72b25a04bb36b6af81bc0828f7d5434c0fe60fa3a2" +checksum = "38f262f097c174adebe41eb73d66ae9c06b2844fb0da69969647bbddd9b0538a" dependencies = [ + "getrandom 0.3.2", "libc", ] [[package]] name = "js-sys" -version = "0.3.69" +version = "0.3.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d" +checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" dependencies = [ + "once_cell", "wasm-bindgen", ] @@ -3387,15 +3362,15 @@ dependencies = [ "futures-channel", "futures-util", "globset", - "hyper 0.14.28", + "hyper 0.14.32", "jsonrpsee-types", - "parking_lot 0.12.1", + "parking_lot 0.12.3", "rand 0.8.5", "rustc-hash", "serde", "serde_json", "soketto", - "thiserror", + "thiserror 1.0.69", "tokio", "tracing", ] @@ -3422,7 +3397,7 @@ dependencies = [ "futures-channel", "futures-util", "http 0.2.12", - "hyper 0.14.28", + "hyper 0.14.32", "jsonrpsee-core", "jsonrpsee-types", "serde", @@ -3430,7 +3405,7 @@ dependencies = [ "soketto", "tokio", "tokio-stream", - "tokio-util 0.7.10", + "tokio-util", "tower", "tracing", ] @@ -3445,7 +3420,7 @@ dependencies = [ "beef", "serde", "serde_json", - "thiserror", + "thiserror 1.0.69", "tracing", ] @@ -3469,15 +3444,15 @@ dependencies = [ [[package]] name = "lazy_static" -version = "1.4.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] name = "libc" -version = "0.2.153" +version = "0.2.171" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd" +checksum = "c19937216e9d3aa9956d9bb8dfc0b0c8beb6058fc4f7a4dc4d850edf86a237d6" [[package]] name = "libredox" @@ -3485,7 +3460,7 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.9.0", "libc", ] @@ -3548,125 +3523,150 @@ dependencies = [ "vcpkg", ] +[[package]] +name = "light-account-checks" +version = "0.1.0" +source = "git+https://github.com/Lightprotocol/light-protocol?rev=368f9f08272db78c74b2ade1a1c2fead27dd0a96#368f9f08272db78c74b2ade1a1c2fead27dd0a96" +dependencies = [ + "solana-account-info", + "solana-program-error", + "solana-pubkey", + "solana-sysvar", + "thiserror 2.0.12", +] + +[[package]] +name = "light-batched-merkle-tree" +version = "0.1.0" +source = "git+https://github.com/Lightprotocol/light-protocol?rev=368f9f08272db78c74b2ade1a1c2fead27dd0a96#368f9f08272db78c74b2ade1a1c2fead27dd0a96" +dependencies = [ + "aligned-sized", + "borsh 0.10.4", + "light-account-checks", + "light-bloom-filter", + "light-compressed-account", + "light-hasher", + "light-macros", + "light-merkle-tree-metadata", + "light-verifier", + "light-zero-copy", + "solana-program 2.2.1", + "thiserror 2.0.12", + "zerocopy 0.8.24", +] + +[[package]] +name = "light-bloom-filter" +version = "0.1.0" +source = "git+https://github.com/Lightprotocol/light-protocol?rev=368f9f08272db78c74b2ade1a1c2fead27dd0a96#368f9f08272db78c74b2ade1a1c2fead27dd0a96" +dependencies = [ + "bitvec", + "fastmurmur3", + "num-bigint 0.4.6", + "solana-program 2.2.1", + "thiserror 2.0.12", +] + [[package]] name = "light-bounded-vec" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47ced86d6f1b163a04d5d0be44f8bbeedb11d32f73af27812bbd144e0f1f1a42" +version = "1.2.0" +source = "git+https://github.com/lightprotocol/program-libs?rev=cf87f3e002d8a7dd40dd19d9387e73398cdcfef8#cf87f3e002d8a7dd40dd19d9387e73398cdcfef8" dependencies = [ "bytemuck", "memoffset 0.9.1", - "thiserror", + "thiserror 1.0.69", ] [[package]] -name = "light-client" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e99913b31571d870184f3d19e6486a0749a93997a191597a648ef1b768a99398" +name = "light-compressed-account" +version = "0.1.0" +source = "git+https://github.com/Lightprotocol/light-protocol?rev=368f9f08272db78c74b2ade1a1c2fead27dd0a96#368f9f08272db78c74b2ade1a1c2fead27dd0a96" dependencies = [ - "async-trait", - "bb8", - "borsh 0.10.3", - "light-concurrent-merkle-tree", + "borsh 0.10.4", + "bytemuck", "light-hasher", - "light-indexed-merkle-tree", - "light-merkle-tree-reference", - "light-prover-client", - "light-sdk 0.10.0", - "log", - "num-bigint 0.4.6", - "num-traits", - "reqwest 0.11.27", - "solana-banks-client", - "solana-client", - "solana-program", - "solana-program-test", - "solana-sdk", - "solana-transaction-status", - "thiserror", - "tokio", + "light-macros", + "light-zero-copy", + "rand 0.8.5", + "solana-program 2.2.1", + "thiserror 2.0.12", + "zerocopy 0.8.24", ] [[package]] name = "light-concurrent-merkle-tree" version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44d84ffa991f38260b12f9fb60e7087aeb2d696513936eaee249e6f3e739651a" +source = "git+https://github.com/Lightprotocol/light-protocol?rev=368f9f08272db78c74b2ade1a1c2fead27dd0a96#368f9f08272db78c74b2ade1a1c2fead27dd0a96" dependencies = [ - "borsh 0.10.3", - "bytemuck", + "borsh 0.10.4", "light-bounded-vec", "light-hasher", - "light-utils", "memoffset 0.9.1", - "thiserror", + "thiserror 2.0.12", ] [[package]] name = "light-hasher" version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e932ed98282fa564ff4518416de688593a0f425c81d68cfa70e98da21a17a36f" +source = "git+https://github.com/Lightprotocol/light-protocol?rev=368f9f08272db78c74b2ade1a1c2fead27dd0a96#368f9f08272db78c74b2ade1a1c2fead27dd0a96" dependencies = [ - "ark-bn254", - "light-poseidon", + "ark-bn254 0.5.0", + "ark-ff 0.5.0", + "arrayvec", + "borsh 0.10.4", + "light-poseidon 0.3.0", + "num-bigint 0.4.6", "sha2 0.10.8", "sha3 0.10.8", - "solana-program", - "thiserror", -] - -[[package]] -name = "light-heap" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7304b9ef6e32c540b685fb3cb13081db831b8f4ea03d1d5d54491dee19100eb5" -dependencies = [ - "anchor-lang", + "solana-program 2.2.1", + "thiserror 2.0.12", ] [[package]] -name = "light-indexed-merkle-tree" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3df875b906d10c2146c66906eef3b40b42d8f9c14b539b4ed5860c6347a3bb1" +name = "light-indexed-array" +version = "0.1.0" +source = "git+https://github.com/Lightprotocol/light-protocol?rev=368f9f08272db78c74b2ade1a1c2fead27dd0a96#368f9f08272db78c74b2ade1a1c2fead27dd0a96" dependencies = [ - "borsh 0.10.3", - "light-bounded-vec", - "light-concurrent-merkle-tree", "light-hasher", - "light-merkle-tree-reference", - "light-utils", - "memoffset 0.9.1", "num-bigint 0.4.6", "num-traits", - "thiserror", + "thiserror 2.0.12", ] [[package]] name = "light-macros" version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bed4a94c8fe3f5bb30d537dbf7148018229a2aa7191a8be41905cf39c7e24a6" +source = "git+https://github.com/Lightprotocol/light-protocol?rev=368f9f08272db78c74b2ade1a1c2fead27dd0a96#368f9f08272db78c74b2ade1a1c2fead27dd0a96" dependencies = [ - "bs58 0.4.0", - "light-hasher", + "bs58 0.5.1", "proc-macro2", "quote", - "syn 2.0.59", + "syn 2.0.100", +] + +[[package]] +name = "light-merkle-tree-metadata" +version = "0.1.0" +source = "git+https://github.com/Lightprotocol/light-protocol?rev=368f9f08272db78c74b2ade1a1c2fead27dd0a96#368f9f08272db78c74b2ade1a1c2fead27dd0a96" +dependencies = [ + "borsh 0.10.4", + "bytemuck", + "light-compressed-account", + "solana-program 2.2.1", + "thiserror 2.0.12", + "zerocopy 0.8.24", ] [[package]] name = "light-merkle-tree-reference" version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb9153fd97f1bdba3ec1de6f4c4f20134c6e5e1285676bcb9ef5ebe493f41afa" +source = "git+https://github.com/Lightprotocol/light-protocol?rev=368f9f08272db78c74b2ade1a1c2fead27dd0a96#368f9f08272db78c74b2ade1a1c2fead27dd0a96" dependencies = [ - "light-bounded-vec", "light-hasher", - "log", - "thiserror", + "light-indexed-array", + "num-bigint 0.4.6", + "num-traits", + "thiserror 2.0.12", ] [[package]] @@ -3675,149 +3675,73 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c9a85a9752c549ceb7578064b4ed891179d20acd85f27318573b64d2d7ee7ee" dependencies = [ - "ark-bn254", - "ark-ff", - "num-bigint 0.4.6", - "thiserror", -] - -[[package]] -name = "light-prover-client" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e109ed16bfc5faaa7aed6989f2717a76e68cd771430580b910c4a1cf3d04a20" -dependencies = [ - "ark-bn254", - "ark-crypto-primitives", - "ark-ec", - "ark-ff", - "ark-groth16", - "ark-relations", - "ark-serialize", - "ark-std", - "borsh 0.10.3", - "bytemuck", - "color-eyre", - "env_logger 0.11.5", - "groth16-solana", - "light-hasher", - "light-indexed-merkle-tree", - "light-merkle-tree-reference", - "light-utils", - "log", + "ark-bn254 0.4.0", + "ark-ff 0.4.2", "num-bigint 0.4.6", - "num-traits", - "once_cell", - "reqwest 0.11.27", - "serde", - "serde_json", - "solana-program", - "sysinfo", - "thiserror", - "tokio", - "zeroize", + "thiserror 1.0.69", ] [[package]] -name = "light-sdk" -version = "0.10.0" +name = "light-poseidon" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c6c8085cb040a2f6ae36da2c58b9f8795b788a9bdd92787d1e61bda974b3685" +checksum = "39e3d87542063daaccbfecd78b60f988079b6ec4e089249658b9455075c78d42" dependencies = [ - "aligned-sized", - "anchor-lang", - "borsh 0.10.3", - "bytemuck", - "groth16-solana", - "light-concurrent-merkle-tree", - "light-hasher", - "light-heap", - "light-indexed-merkle-tree", - "light-macros", - "light-sdk-macros 0.3.0", - "light-utils", - "light-verifier", + "ark-bn254 0.5.0", + "ark-ff 0.5.0", "num-bigint 0.4.6", - "solana-program", - "solana-sdk", + "thiserror 1.0.69", ] [[package]] name = "light-sdk" version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c14007770c1de79cf9e1c8fcba6df563bd80cab959f59d7bbb1cc4e972be86f5" +source = "git+https://github.com/Lightprotocol/light-protocol?rev=368f9f08272db78c74b2ade1a1c2fead27dd0a96#368f9f08272db78c74b2ade1a1c2fead27dd0a96" dependencies = [ - "aligned-sized", - "anchor-lang", - "borsh 0.10.3", - "bytemuck", - "groth16-solana", - "light-concurrent-merkle-tree", + "borsh 0.10.4", + "light-account-checks", + "light-compressed-account", "light-hasher", - "light-heap", - "light-indexed-merkle-tree", "light-macros", - "light-sdk-macros 0.4.0", - "light-utils", + "light-sdk-macros", "light-verifier", "num-bigint 0.4.6", - "solana-program", - "solana-sdk", -] - -[[package]] -name = "light-sdk-macros" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f38c8f908e4fe074fdf6eb6c7b2702e0575435ce6f22dcb3ffea62283b2d7911" -dependencies = [ - "bs58 0.4.0", - "light-hasher", - "proc-macro2", - "quote", - "syn 2.0.59", + "solana-program 2.2.1", + "thiserror 2.0.12", ] [[package]] name = "light-sdk-macros" version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d91a0e4002b8250f57d7f7f25db3d059fdbb268e84024c369af1110a3df3fea9" +source = "git+https://github.com/Lightprotocol/light-protocol?rev=368f9f08272db78c74b2ade1a1c2fead27dd0a96#368f9f08272db78c74b2ade1a1c2fead27dd0a96" dependencies = [ - "bs58 0.4.0", + "ark-bn254 0.5.0", "light-hasher", + "light-poseidon 0.3.0", "proc-macro2", "quote", - "syn 2.0.59", + "syn 2.0.100", ] [[package]] -name = "light-utils" +name = "light-verifier" version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19e2b5a4959cb0456b483a20b4f3930920949137c00e76b5d0f9bf8d701a3c6a" +source = "git+https://github.com/Lightprotocol/light-protocol?rev=368f9f08272db78c74b2ade1a1c2fead27dd0a96#368f9f08272db78c74b2ade1a1c2fead27dd0a96" dependencies = [ - "anyhow", - "ark-bn254", - "ark-ff", - "light-bounded-vec", - "num-bigint 0.4.6", - "rand 0.8.5", - "solana-program", - "thiserror", + "groth16-solana", + "light-compressed-account", + "solana-program 2.2.1", + "thiserror 2.0.12", ] [[package]] -name = "light-verifier" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebbf2f91b484ba90724a72915ffa4faa7e039b369096df90724e78305d615fd0" +name = "light-zero-copy" +version = "0.1.0" +source = "git+https://github.com/Lightprotocol/light-protocol?rev=368f9f08272db78c74b2ade1a1c2fead27dd0a96#368f9f08272db78c74b2ade1a1c2fead27dd0a96" dependencies = [ - "borsh 0.10.3", - "groth16-solana", - "solana-program", - "thiserror", + "solana-program 2.2.1", + "thiserror 2.0.12", + "zerocopy 0.8.24", ] [[package]] @@ -3828,21 +3752,27 @@ checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" [[package]] name = "linux-raw-sys" -version = "0.3.8" +version = "0.4.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" +checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" [[package]] name = "linux-raw-sys" -version = "0.4.13" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe7db12097d22ec582439daf8618b8fdd1a7bef6270e9af3b1ebcd30893cf413" + +[[package]] +name = "litemap" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01cda141df6706de531b6c46c3a33ecca755538219bd484262fa09410c13539c" +checksum = "23fb14cb19457329c82206317a5663005a4d404783dc74f4252769b0d5f42856" [[package]] name = "lock_api" -version = "0.4.11" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45" +checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" dependencies = [ "autocfg", "scopeguard", @@ -3850,74 +3780,37 @@ dependencies = [ [[package]] name = "log" -version = "0.4.21" +version = "0.4.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" +checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" dependencies = [ "value-bag", ] [[package]] -name = "lru" -version = "0.7.8" +name = "matchers" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e999beba7b6e8345721bd280141ed958096a2e4abdf74f67ff4ce49b4b54e47a" +checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" dependencies = [ - "hashbrown 0.12.3", + "regex-automata 0.1.10", ] [[package]] -name = "lru" -version = "0.12.4" +name = "matchit" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37ee39891760e7d94734f6f63fedc29a2e4a152f836120753a72503f09fcf904" -dependencies = [ - "hashbrown 0.14.2", -] +checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94" [[package]] -name = "lz4" -version = "1.28.0" +name = "maybe-async" +version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d1febb2b4a79ddd1980eede06a8f7902197960aa0383ffcfdd62fe723036725" -dependencies = [ - "lz4-sys", -] - -[[package]] -name = "lz4-sys" -version = "1.11.1+lz4-1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bd8c0d6c6ed0cd30b3652886bb8711dc4bb01d637a68105a3d5158039b418e6" -dependencies = [ - "cc", - "libc", -] - -[[package]] -name = "matchers" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" -dependencies = [ - "regex-automata 0.1.10", -] - -[[package]] -name = "matchit" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94" - -[[package]] -name = "maybe-async" -version = "0.2.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cf92c10c7e361d6b99666ec1c6f9805b0bea2c3bd8c78dc6fe98ac5bd78db11" +checksum = "5cf92c10c7e361d6b99666ec1c6f9805b0bea2c3bd8c78dc6fe98ac5bd78db11" dependencies = [ "proc-macro2", "quote", - "syn 2.0.59", + "syn 2.0.100", ] [[package]] @@ -3938,9 +3831,9 @@ checksum = "490cc448043f947bae3cbee9c203358d62dbee0db12107a74be5c30ccfd09771" [[package]] name = "memchr" -version = "2.7.2" +version = "2.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c8640c5d730cb13ebd907d8d04b52f55ac9a2eec55b440c8892f40d56c76c1d" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" [[package]] name = "memmap2" @@ -3989,9 +3882,9 @@ checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" [[package]] name = "mime_guess" -version = "2.0.4" +version = "2.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4192263c238a5f0d0c6bfd21f336a313a4ce1c450542449ca191bb657b4642ef" +checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e" dependencies = [ "mime", "unicase", @@ -4014,73 +3907,24 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" -version = "0.7.2" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d811f3e15f28568be3407c8e7fdb6514c1cda3cb30683f15b6a1a1dc4ea14a7" +checksum = "8e3e04debbb59698c15bacbb6d93584a8c0ca9cc3213cb423d31f760d8843ce5" dependencies = [ - "adler", + "adler2", ] [[package]] name = "mio" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80e04d1dcff3aae0704555fe5fee3bcfaf3d1fdf8a7e521d5b9d2b42acb52cec" +checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" dependencies = [ - "hermit-abi 0.3.9", "libc", "wasi 0.11.0+wasi-snapshot-preview1", "windows-sys 0.52.0", ] -[[package]] -name = "mockall" -version = "0.11.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c84490118f2ee2d74570d114f3d0493cbf02790df303d2707606c3e14e07c96" -dependencies = [ - "cfg-if", - "downcast", - "fragile", - "lazy_static", - "mockall_derive", - "predicates", - "predicates-tree", -] - -[[package]] -name = "mockall_derive" -version = "0.11.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22ce75669015c4f47b289fd4d4f56e894e4c96003ffdf3ac51313126f94c6cbb" -dependencies = [ - "cfg-if", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "modular-bitfield" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a53d79ba8304ac1c4f9eb3b9d281f21f7be9d4626f72ce7df4ad8fbde4f38a74" -dependencies = [ - "modular-bitfield-impl", - "static_assertions", -] - -[[package]] -name = "modular-bitfield-impl" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a7d5f7076603ebc68de2dc6a650ec331a062a13abaa346975be747bbfa4b789" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - [[package]] name = "multimap" version = "0.10.0" @@ -4089,11 +3933,10 @@ checksum = "defc4c55412d89136f966bbb339008b474350e5e6e78d2714439c386b3137a03" [[package]] name = "native-tls" -version = "0.2.11" +version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e" +checksum = "87de3442987e9dbec73158d5c715e7ad9072fda936bb03d19d7fa10e00520f0e" dependencies = [ - "lazy_static", "libc", "log", "openssl", @@ -4128,21 +3971,6 @@ dependencies = [ "minimal-lexical", ] -[[package]] -name = "normalize-line-endings" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61807f77802ff30975e01f4f071c8ba10c022052f98b3294119f3e615d13e5be" - -[[package]] -name = "ntapi" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8a3895c6391c39d7fe7ebc444a87eb2991b2a0bc718fdabd071eec617fc68e4" -dependencies = [ - "winapi", -] - [[package]] name = "nu-ansi-term" version = "0.46.0" @@ -4186,8 +4014,6 @@ checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" dependencies = [ "num-integer", "num-traits", - "rand 0.8.5", - "serde", ] [[package]] @@ -4225,7 +4051,7 @@ checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" dependencies = [ "proc-macro2", "quote", - "syn 2.0.59", + "syn 2.0.100", ] [[package]] @@ -4239,9 +4065,9 @@ dependencies = [ [[package]] name = "num-iter" -version = "0.1.44" +version = "0.1.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d869c01cc0c455284163fd0092f1f93835385ccab5a98a0dcc497b2f8bf055a9" +checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" dependencies = [ "autocfg", "num-integer", @@ -4290,11 +4116,11 @@ dependencies = [ [[package]] name = "num_enum" -version = "0.7.2" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02339744ee7253741199f897151b38e72257d13802d4ee837285cc2990a90845" +checksum = "4e613fc340b2220f734a8595782c551f1250e969d87d3be1ae0579e8d4065179" dependencies = [ - "num_enum_derive 0.7.2", + "num_enum_derive 0.7.3", ] [[package]] @@ -4306,19 +4132,19 @@ dependencies = [ "proc-macro-crate 1.3.1", "proc-macro2", "quote", - "syn 2.0.59", + "syn 2.0.100", ] [[package]] name = "num_enum_derive" -version = "0.7.2" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "681030a937600a36906c185595136d26abfebb4aa9c65701cefcaf8578bb982b" +checksum = "af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56" dependencies = [ - "proc-macro-crate 3.1.0", + "proc-macro-crate 3.3.0", "proc-macro2", "quote", - "syn 2.0.59", + "syn 2.0.100", ] [[package]] @@ -4329,9 +4155,9 @@ checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3" [[package]] name = "object" -version = "0.32.2" +version = "0.36.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441" +checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" dependencies = [ "memchr", ] @@ -4347,9 +4173,9 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.19.0" +version = "1.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" +checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" [[package]] name = "opaque-debug" @@ -4359,11 +4185,11 @@ checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" [[package]] name = "openssl" -version = "0.10.64" +version = "0.10.71" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95a0481286a310808298130d22dd1fef0fa571e05a8f44ec801801e84b216b1f" +checksum = "5e14130c6a98cd258fdcb0fb6d744152343ff729cbfcb28c656a9d12b999fbcd" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.9.0", "cfg-if", "foreign-types", "libc", @@ -4380,20 +4206,20 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.59", + "syn 2.0.100", ] [[package]] name = "openssl-probe" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" +checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" [[package]] name = "openssl-sys" -version = "0.9.102" +version = "0.9.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c597637d56fbc83893a35eb0dd04b2b8e7a50c91e64e9493e398b5df4fb45fa2" +checksum = "8bb61ea9811cc39e3c2069f40b8b8e2e70d8569b361f879786cc7ed48b777cdd" dependencies = [ "cc", "libc", @@ -4401,25 +4227,6 @@ dependencies = [ "vcpkg", ] -[[package]] -name = "opentelemetry" -version = "0.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6105e89802af13fdf48c49d7646d3b533a70e536d818aae7e78ba0433d01acb8" -dependencies = [ - "async-trait", - "crossbeam-channel", - "futures-channel", - "futures-executor", - "futures-util", - "js-sys", - "lazy_static", - "percent-encoding", - "pin-project", - "rand 0.8.5", - "thiserror", -] - [[package]] name = "option-ext" version = "0.2.0" @@ -4471,17 +4278,11 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" -[[package]] -name = "owo-colors" -version = "3.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1b04fb49957986fdce4d6ee7a65027d55d4b6d2265e5848bbb507b58ccfdb6f" - [[package]] name = "parking" -version = "2.2.0" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb813b8af86854136c6922af0598d719255ecb2179515e6e7730d468f05c9cae" +checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" [[package]] name = "parking_lot" @@ -4496,12 +4297,12 @@ dependencies = [ [[package]] name = "parking_lot" -version = "0.12.1" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" +checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" dependencies = [ "lock_api", - "parking_lot_core 0.9.9", + "parking_lot_core 0.9.10", ] [[package]] @@ -4520,22 +4321,22 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.9" +version = "0.9.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e" +checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" dependencies = [ "cfg-if", "libc", - "redox_syscall 0.4.1", + "redox_syscall 0.5.10", "smallvec", - "windows-targets 0.48.5", + "windows-targets 0.52.6", ] [[package]] name = "paste" -version = "1.0.14" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" [[package]] name = "pbkdf2" @@ -4586,7 +4387,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" dependencies = [ "fixedbitset", - "indexmap 2.2.6", + "indexmap 2.8.0", ] [[package]] @@ -4595,40 +4396,42 @@ version = "0.50.0" dependencies = [ "anchor-lang", "anyhow", - "ark-bn254", + "ark-bn254 0.5.0", + "ark-serialize 0.5.0", "async-std", "async-stream", "async-trait", "base64 0.21.7", "bincode", - "borsh 0.10.3", + "borsh 0.10.4", "bs58 0.4.0", "byteorder", "bytes", "cadence", "cadence-macros", - "clap 4.5.4", + "clap 4.5.35", "dirs 5.0.1", - "env_logger 0.10.2", "function_name", "futures", "hex", - "hyper 0.14.28", - "indexmap 2.2.6", + "hyper 0.14.32", "insta", "itertools 0.12.1", "jsonrpsee", "jsonrpsee-core", "lazy_static", - "light-client", + "light-batched-merkle-tree", + "light-compressed-account", "light-concurrent-merkle-tree", - "light-poseidon", - "light-sdk 0.11.0", + "light-hasher", + "light-merkle-tree-metadata", + "light-merkle-tree-reference", + "light-poseidon 0.3.0", + "light-sdk", "log", - "lru 0.12.4", "num-bigint 0.4.6", "num-traits", - "num_enum 0.7.2", + "num_enum 0.7.3", "once_cell", "rand 0.8.5", "reqwest 0.12.4", @@ -4640,17 +4443,17 @@ dependencies = [ "serde_json", "serial_test", "solana-client", - "solana-program", + "solana-program 1.18.22", + "solana-pubkey", "solana-sdk", "solana-transaction-status", "sqlx", - "thiserror", - "time", + "thiserror 1.0.69", "tokio", "tower", "tower-http", "tracing", - "tracing-subscriber 0.3.18", + "tracing-subscriber", "utoipa", "yellowstone-grpc-client", "yellowstone-grpc-proto", @@ -4658,29 +4461,29 @@ dependencies = [ [[package]] name = "pin-project" -version = "1.1.5" +version = "1.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bf43b791c5b9e34c3d182969b4abb522f9343702850a2e57f460d00d09b4b3" +checksum = "677f1add503faace112b9f1373e43e9e054bfdd22ff1a63c1bc485eaec6a6a8a" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.1.5" +version = "1.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" +checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" dependencies = [ "proc-macro2", "quote", - "syn 2.0.59", + "syn 2.0.100", ] [[package]] name = "pin-project-lite" -version = "0.2.14" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" +checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" [[package]] name = "pin-utils" @@ -4690,12 +4493,12 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "piper" -version = "0.2.1" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "668d31b1c4eba19242f2088b2bf3316b82ca31082a8335764db4e083db7485d4" +checksum = "96c8c490f422ef9a4efd2cb5b42b76c8613d7e7dfc1caf667b8a3350a5acc066" dependencies = [ "atomic-waker", - "fastrand 2.0.2", + "fastrand", "futures-io", ] @@ -4712,9 +4515,9 @@ dependencies = [ [[package]] name = "pkg-config" -version = "0.3.30" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" +checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" [[package]] name = "plain" @@ -4724,33 +4527,17 @@ checksum = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6" [[package]] name = "polling" -version = "2.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b2d323e8ca7996b3e23126511a523f7e62924d93ecd5ae73b333815b0eb3dce" -dependencies = [ - "autocfg", - "bitflags 1.3.2", - "cfg-if", - "concurrent-queue", - "libc", - "log", - "pin-project-lite", - "windows-sys 0.48.0", -] - -[[package]] -name = "polling" -version = "3.6.0" +version = "3.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0c976a60b2d7e99d6f229e414670a9b85d13ac305cc6d1e9c134de58c5aaaf6" +checksum = "a604568c3202727d1507653cb121dbd627a58684eb09a820fd746bee38b4442f" dependencies = [ "cfg-if", "concurrent-queue", - "hermit-abi 0.3.9", + "hermit-abi 0.4.0", "pin-project-lite", - "rustix 0.38.32", + "rustix 0.38.44", "tracing", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -4767,9 +4554,9 @@ dependencies = [ [[package]] name = "portable-atomic" -version = "1.6.0" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7170ef9988bc169ba16dd36a7fa041e5c4cbeb6a35b76d4c03daded371eae7c0" +checksum = "350e9b48cbc6b0e028b0473b114454c6316e57336ee184ceab6e53f72c178b3e" [[package]] name = "powerfmt" @@ -4779,48 +4566,21 @@ checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" [[package]] name = "ppv-lite86" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" - -[[package]] -name = "predicates" -version = "2.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59230a63c37f3e18569bdb90e4a89cbf5bf8b06fea0b84e65ea10cc4df47addd" -dependencies = [ - "difflib", - "float-cmp", - "itertools 0.10.5", - "normalize-line-endings", - "predicates-core", - "regex", -] - -[[package]] -name = "predicates-core" -version = "1.0.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae8177bee8e75d6846599c6b9ff679ed51e882816914eec639944d7c9aa11931" - -[[package]] -name = "predicates-tree" -version = "1.0.11" +version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41b740d195ed3166cd147c8047ec98db0e22ec019eb8eeb76d343b795304fb13" +checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" dependencies = [ - "predicates-core", - "termtree", + "zerocopy 0.8.24", ] [[package]] name = "prettyplease" -version = "0.2.20" +version = "0.2.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f12335488a2f3b0a83b14edad48dca9879ce89b2edd10e80237e4e852dd645e" +checksum = "5316f57387668042f561aae71480de936257848f9c43ce528e311d89a07cadeb" dependencies = [ "proc-macro2", - "syn 2.0.59", + "syn 2.0.100", ] [[package]] @@ -4844,11 +4604,11 @@ dependencies = [ [[package]] name = "proc-macro-crate" -version = "3.1.0" +version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d37c51ca738a55da99dc0c4a34860fd675453b8b36209178c2249bb13651284" +checksum = "edce586971a4dfaa28950c6f18ed55e0406c1ab88bbce2c6f6293a7aaba73d35" dependencies = [ - "toml_edit 0.21.1", + "toml_edit 0.22.24", ] [[package]] @@ -4877,9 +4637,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.80" +version = "1.0.94" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a56dea16b0a29e94408b9aa5e2940a4eedbd128a1ba20e8f7ae60fd3d465af0e" +checksum = "a31971752e70b8b2686d7e46ec17fb38dad4051d94024c88df49b667caea9c84" dependencies = [ "unicode-ident", ] @@ -4911,7 +4671,7 @@ dependencies = [ "prost", "prost-types", "regex", - "syn 2.0.59", + "syn 2.0.100", "tempfile", ] @@ -4925,7 +4685,7 @@ dependencies = [ "itertools 0.12.1", "proc-macro2", "quote", - "syn 2.0.59", + "syn 2.0.100", ] [[package]] @@ -4983,7 +4743,7 @@ checksum = "9e2e25ee72f5b24d773cae88422baddefff7714f97aab68d96fe2b6fc4a28fb2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.59", + "syn 2.0.100", ] [[package]] @@ -5008,7 +4768,7 @@ dependencies = [ "quinn-udp", "rustc-hash", "rustls 0.21.12", - "thiserror", + "thiserror 1.0.69", "tokio", "tracing", ] @@ -5026,7 +4786,7 @@ dependencies = [ "rustls 0.21.12", "rustls-native-certs", "slab", - "thiserror", + "thiserror 1.0.69", "tinyvec", "tracing", ] @@ -5039,20 +4799,26 @@ checksum = "055b4e778e8feb9f93c4e439f71dc2156ef13360b432b799e179a8c4cdf0b1d7" dependencies = [ "bytes", "libc", - "socket2 0.5.6", + "socket2", "tracing", "windows-sys 0.48.0", ] [[package]] name = "quote" -version = "1.0.36" +version = "1.0.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" +checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" dependencies = [ "proc-macro2", ] +[[package]] +name = "r-efi" +version = "5.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74765f6d916ee2faa39bc8e68e4f3ed8949b48cccdac59983d287a7cb71ce9c5" + [[package]] name = "radium" version = "0.7.0" @@ -5118,7 +4884,7 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom 0.2.14", + "getrandom 0.2.15", ] [[package]] @@ -5182,34 +4948,34 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.4.1" +version = "0.5.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" +checksum = "0b8c0c260b63a8219631167be35e6a988e9554dbd323f8bd08439c8ed1302bd1" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.9.0", ] [[package]] name = "redox_users" -version = "0.4.5" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd283d9651eeda4b2a83a43c1c91b266c40fd76ecd39a50a8c630ae69dc72891" +checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" dependencies = [ - "getrandom 0.2.14", + "getrandom 0.2.15", "libredox", - "thiserror", + "thiserror 1.0.69", ] [[package]] name = "regex" -version = "1.10.4" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c117dbdfde9c8308975b6a18d71f3f385c89461f7b3fb054288ecf2a2058ba4c" +checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" dependencies = [ "aho-corasick", "memchr", - "regex-automata 0.4.6", - "regex-syntax 0.8.3", + "regex-automata 0.4.9", + "regex-syntax 0.8.5", ] [[package]] @@ -5223,13 +4989,13 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.6" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86b83b8b9847f9bf95ef68afb0b8e6cdb80f498442f5179a29fad448fcc1eaea" +checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" dependencies = [ "aho-corasick", "memchr", - "regex-syntax 0.8.3", + "regex-syntax 0.8.5", ] [[package]] @@ -5240,15 +5006,15 @@ checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" [[package]] name = "regex-syntax" -version = "0.8.3" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adad44e29e4c806119491a7f06f03de4d1af22c3a680dd47f1e6e179439d1f56" +checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" [[package]] name = "relative-path" -version = "1.9.2" +version = "1.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e898588f33fdd5b9420719948f9f2a32c922a246964576f71ba7f24f80610fbc" +checksum = "ba39f3699c378cd8970968dcbff9c43159ea4cfbd88d43c00b22f2ef10a435d2" [[package]] name = "rend" @@ -5265,7 +5031,7 @@ version = "0.11.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dd67538700a17451e7cba03ac727fb961abb7607553461627b97de0b89cf4a62" dependencies = [ - "async-compression 0.4.8", + "async-compression 0.4.22", "base64 0.21.7", "bytes", "encoding_rs", @@ -5274,14 +5040,12 @@ dependencies = [ "h2 0.3.26", "http 0.2.12", "http-body 0.4.6", - "hyper 0.14.28", + "hyper 0.14.32", "hyper-rustls", - "hyper-tls 0.5.0", "ipnet", "js-sys", "log", "mime", - "native-tls", "once_cell", "percent-encoding", "pin-project-lite", @@ -5293,9 +5057,8 @@ dependencies = [ "sync_wrapper", "system-configuration", "tokio", - "tokio-native-tls", "tokio-rustls 0.24.1", - "tokio-util 0.7.10", + "tokio-util", "tower-service", "url", "wasm-bindgen", @@ -5311,16 +5074,16 @@ version = "0.12.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "566cafdd92868e0939d3fb961bd0dc25fcfaaed179291093b3d43e6b3150ea10" dependencies = [ - "base64 0.22.0", + "base64 0.22.1", "bytes", "encoding_rs", "futures-core", "futures-util", - "h2 0.4.4", - "http 1.1.0", - "http-body 1.0.0", + "h2 0.4.8", + "http 1.3.1", + "http-body 1.0.1", "http-body-util", - "hyper 1.3.1", + "hyper 1.6.0", "hyper-tls 0.6.0", "hyper-util", "ipnet", @@ -5331,7 +5094,7 @@ dependencies = [ "once_cell", "percent-encoding", "pin-project-lite", - "rustls-pemfile 2.1.2", + "rustls-pemfile 2.2.0", "serde", "serde_json", "serde_urlencoded", @@ -5339,7 +5102,7 @@ dependencies = [ "system-configuration", "tokio", "tokio-native-tls", - "tokio-util 0.7.10", + "tokio-util", "tower-service", "url", "wasm-bindgen", @@ -5366,24 +5129,23 @@ dependencies = [ [[package]] name = "ring" -version = "0.17.8" +version = "0.17.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" +checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" dependencies = [ "cc", "cfg-if", - "getrandom 0.2.14", + "getrandom 0.2.15", "libc", - "spin 0.9.8", "untrusted 0.9.0", "windows-sys 0.52.0", ] [[package]] name = "rkyv" -version = "0.7.44" +version = "0.7.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cba464629b3394fc4dbc6f940ff8f5b4ff5c7aef40f29166fd4ad12acbc99c0" +checksum = "9008cd6385b9e161d8229e1f6549dd23c3d022f132a2ea37ac3a10ac4935779b" dependencies = [ "bitvec", "bytecheck", @@ -5399,9 +5161,9 @@ dependencies = [ [[package]] name = "rkyv_derive" -version = "0.7.44" +version = "0.7.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7dddfff8de25e6f62b9d64e6e432bf1c6736c57d20323e15ee10435fbda7c65" +checksum = "503d1d27590a2b0a3a4ca4c94755aa2875657196ecbf401a42eff41d7de532c0" dependencies = [ "proc-macro2", "quote", @@ -5444,7 +5206,7 @@ dependencies = [ "regex", "relative-path", "rustc_version", - "syn 2.0.59", + "syn 2.0.100", "unicode-ident", ] @@ -5484,7 +5246,7 @@ dependencies = [ "hex", "hmac 0.12.1", "http 0.2.12", - "hyper 0.14.28", + "hyper 0.14.32", "hyper-tls 0.5.0", "log", "maybe-async", @@ -5497,7 +5259,7 @@ dependencies = [ "serde_derive", "serde_json", "sha2 0.10.8", - "thiserror", + "thiserror 1.0.69", "time", "tokio", "tokio-native-tls", @@ -5507,12 +5269,12 @@ dependencies = [ [[package]] name = "rust_decimal" -version = "1.35.0" +version = "1.37.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1790d1c4c0ca81211399e0e0af16333276f375209e71a37b67698a373db5b47a" +checksum = "faa7de2ba56ac291bd90c6b9bece784a52ae1411f9506544b3eae36dd2356d50" dependencies = [ "arrayvec", - "borsh 1.4.0", + "borsh 1.5.7", "bytes", "num-traits", "rand 0.8.5", @@ -5523,9 +5285,9 @@ dependencies = [ [[package]] name = "rustc-demangle" -version = "0.1.23" +version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" +checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" [[package]] name = "rustc-hash" @@ -5535,9 +5297,9 @@ checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" [[package]] name = "rustc_version" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" dependencies = [ "semver", ] @@ -5553,29 +5315,28 @@ dependencies = [ [[package]] name = "rustix" -version = "0.37.27" +version = "0.38.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fea8ca367a3a01fe35e6943c400addf443c0f57670e6ec51196f71a4b8762dd2" +checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.9.0", "errno", - "io-lifetimes", "libc", - "linux-raw-sys 0.3.8", - "windows-sys 0.48.0", + "linux-raw-sys 0.4.15", + "windows-sys 0.59.0", ] [[package]] name = "rustix" -version = "0.38.32" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65e04861e65f21776e67888bfbea442b3642beaa0138fdb1dd7a84a52dffdb89" +checksum = "d97817398dd4bb2e6da002002db259209759911da105da92bec29ccb12cf58bf" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.9.0", "errno", "libc", - "linux-raw-sys 0.4.13", - "windows-sys 0.52.0", + "linux-raw-sys 0.9.3", + "windows-sys 0.59.0", ] [[package]] @@ -5597,7 +5358,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" dependencies = [ "log", - "ring 0.17.8", + "ring 0.17.14", "rustls-webpki", "sct", ] @@ -5625,19 +5386,18 @@ dependencies = [ [[package]] name = "rustls-pemfile" -version = "2.1.2" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29993a25686778eb88d4189742cd713c9bce943bc54251a33509dc63cbacf73d" +checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50" dependencies = [ - "base64 0.22.0", "rustls-pki-types", ] [[package]] name = "rustls-pki-types" -version = "1.5.0" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "beb461507cee2c2ff151784c52762cf4d9ff6a61f3e80968600ed24fa837fa54" +checksum = "917ce264624a4b4db1c364dcc35bfca9ded014d0a958cd47ad3e960e988ea51c" [[package]] name = "rustls-webpki" @@ -5645,15 +5405,15 @@ version = "0.101.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" dependencies = [ - "ring 0.17.8", + "ring 0.17.14", "untrusted 0.9.0", ] [[package]] name = "rustversion" -version = "1.0.15" +version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80af6f9131f277a45a3fba6ce8e2258037bb0477a67e610d3c1fe046ab31de47" +checksum = "eded382c5f5f786b989652c49544c4877d9f015cc22e145a5ea8ea66c2921cd2" [[package]] name = "rxml" @@ -5674,26 +5434,17 @@ checksum = "22a197350ece202f19a166d1ad6d9d6de145e1d2a8ef47db299abe164dbd7530" [[package]] name = "ryu" -version = "1.0.17" +version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e86697c916019a8588c99b5fac3cead74ec0b4b819707a682fd4d23fa0ce1ba1" - -[[package]] -name = "same-file" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" -dependencies = [ - "winapi-util", -] +checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" [[package]] name = "schannel" -version = "0.1.23" +version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbc91545643bcf3a0bbb6569265615222618bdf33ce4ffbbd13c4bbd4c093534" +checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -5719,7 +5470,7 @@ checksum = "1db149f81d46d2deba7cd3c50772474707729550221e69588478ebf9ada425ae" dependencies = [ "proc-macro2", "quote", - "syn 2.0.59", + "syn 2.0.100", ] [[package]] @@ -5728,7 +5479,7 @@ version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" dependencies = [ - "ring 0.17.8", + "ring 0.17.14", "untrusted 0.9.0", ] @@ -5753,7 +5504,7 @@ dependencies = [ "serde", "serde_json", "sqlx", - "thiserror", + "thiserror 1.0.69", "time", "tracing", "url", @@ -5772,7 +5523,7 @@ dependencies = [ "regex", "sea-schema", "tracing", - "tracing-subscriber 0.3.18", + "tracing-subscriber", "url", ] @@ -5802,7 +5553,7 @@ dependencies = [ "sea-orm-cli", "sea-schema", "tracing", - "tracing-subscriber 0.3.18", + "tracing-subscriber", ] [[package]] @@ -5844,7 +5595,7 @@ dependencies = [ "proc-macro2", "quote", "syn 1.0.109", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -5900,11 +5651,11 @@ checksum = "1c107b6f4780854c8b126e228ea8869f4d7b71260f962fefb57b996b8959ba6b" [[package]] name = "security-framework" -version = "2.10.0" +version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "770452e37cad93e0a50d5abc3990d2bc351c36d0328f86cefec2f2fb206eaef6" +checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.9.0", "core-foundation", "core-foundation-sys", "libc", @@ -5913,9 +5664,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.10.0" +version = "2.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41f3cc463c0ef97e11c3461a9d3787412d30e8e7eb907c79180c4a57bf7c04ef" +checksum = "49db231d56a190491cb4aeda9527f1ad45345af50b0851622a7adb8c03b01c32" dependencies = [ "core-foundation-sys", "libc", @@ -5923,55 +5674,47 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92d43fe69e652f3df9bdc2b85b2854a0825b86e4fb76bc44d945137d053639ca" - -[[package]] -name = "seqlock" -version = "0.2.0" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5c67b6f14ecc5b86c66fa63d76b5092352678545a8a3cdae80aef5128371910" -dependencies = [ - "parking_lot 0.12.1", -] +checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0" [[package]] name = "serde" -version = "1.0.197" +version = "1.0.219" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fb1c873e1b9b056a4dc4c0c198b24c3ffa059243875552b2bd0933b1aee4ce2" +checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" dependencies = [ "serde_derive", ] [[package]] name = "serde_bytes" -version = "0.11.14" +version = "0.11.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b8497c313fd43ab992087548117643f6fcd935cbf36f176ffda0aacf9591734" +checksum = "8437fd221bde2d4ca316d61b90e337e9e702b3820b87d63caa9ba6c02bd06d96" dependencies = [ "serde", ] [[package]] name = "serde_derive" -version = "1.0.197" +version = "1.0.219" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7eb0b34b42edc17f6b7cac84a52a1c5f0e1bb2227e997ca9011ea3dd34e8610b" +checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" dependencies = [ "proc-macro2", "quote", - "syn 2.0.59", + "syn 2.0.100", ] [[package]] name = "serde_json" -version = "1.0.115" +version = "1.0.140" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12dc5c46daa8e9fdf4f5e71b6cf9a53f2487da0e86e55808e2d35539666497dd" +checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373" dependencies = [ "itoa", + "memchr", "ryu", "serde", ] @@ -6007,7 +5750,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.59", + "syn 2.0.100", ] [[package]] @@ -6016,7 +5759,7 @@ version = "0.9.34+deprecated" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" dependencies = [ - "indexmap 2.2.6", + "indexmap 2.8.0", "itoa", "ryu", "serde", @@ -6033,7 +5776,7 @@ dependencies = [ "futures", "lazy_static", "log", - "parking_lot 0.12.1", + "parking_lot 0.12.3", "serial_test_derive", ] @@ -6045,7 +5788,7 @@ checksum = "91d129178576168c589c9ec973feedf7d3126c01ac2bf08795109aa35b69fb8f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.59", + "syn 2.0.100", ] [[package]] @@ -6141,9 +5884,9 @@ checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" [[package]] name = "signal-hook-registry" -version = "1.4.1" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1" +checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" dependencies = [ "libc", ] @@ -6156,15 +5899,15 @@ checksum = "74233d3b3b2f6d4b006dc19dee745e73e2a6bfb6f93607cd3b02bd5b00797d7c" [[package]] name = "simdutf8" -version = "0.1.4" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f27f6278552951f1f2b8cf9da965d10969b2efdea95a6ec47987ab46edfe263a" +checksum = "e3a9fe34e3e7a50316060351f37187a3f546bce95496156754b601a5fa71b76e" [[package]] name = "similar" -version = "2.5.0" +version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa42c91313f1d05da9b26f267f931cf178d4aba455b4c4622dd7355eb80c6640" +checksum = "bbbb5d9659141646ae647b42fe094daf6c6192d1620870b449d9557f748b2daa" [[package]] name = "siphasher" @@ -6193,9 +5936,9 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.13.2" +version = "1.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" +checksum = "7fcf8323ef1faaee30a44a340193b1ac6814fd9b7b4e88e9d4519a3e4abe1cfd" [[package]] name = "smartstring" @@ -6210,19 +5953,9 @@ dependencies = [ [[package]] name = "socket2" -version = "0.4.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d" -dependencies = [ - "libc", - "winapi", -] - -[[package]] -name = "socket2" -version = "0.5.6" +version = "0.5.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05ffd9c0a93b7543e062e759284fcf5f5e3b098501104bfbdde4d404db792871" +checksum = "4f5fd57c80058a56cf5c777ab8a126398ece8e442983605d280a44ce79d0edef" dependencies = [ "libc", "windows-sys 0.52.0", @@ -6244,6 +5977,19 @@ dependencies = [ "sha-1", ] +[[package]] +name = "solana-account" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f949fe4edaeaea78c844023bfc1c898e0b1f5a100f8a8d2d0f85d0a7b090258" +dependencies = [ + "solana-account-info", + "solana-clock", + "solana-instruction", + "solana-pubkey", + "solana-sdk-ids", +] + [[package]] name = "solana-account-decoder" version = "1.18.22" @@ -6265,175 +6011,106 @@ dependencies = [ "spl-token-2022", "spl-token-group-interface", "spl-token-metadata-interface", - "thiserror", + "thiserror 1.0.69", "zstd", ] [[package]] -name = "solana-accounts-db" -version = "1.18.22" +name = "solana-account-info" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c156ddd42a2746e14fe267f85a2f802567dfa7c1702836b0ce69ea3be15a3c3" +checksum = "e0c17d606a298a205fae325489fbed88ee6dc4463c111672172327e741c8905d" +dependencies = [ + "bincode", + "serde", + "solana-program-error", + "solana-program-memory", + "solana-pubkey", +] + +[[package]] +name = "solana-address-lookup-table-interface" +version = "2.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1673f67efe870b64a65cb39e6194be5b26527691ce5922909939961a6e6b395" dependencies = [ - "arrayref", "bincode", - "blake3", - "bv", "bytemuck", - "byteorder", - "bzip2", - "crossbeam-channel", - "dashmap", - "flate2", - "fnv", - "im", - "index_list", - "itertools 0.10.5", - "lazy_static", - "log", - "lz4", - "memmap2", - "modular-bitfield", - "num-derive 0.4.2", - "num-traits", - "num_cpus", - "num_enum 0.7.2", - "ouroboros", - "percentage", - "qualifier_attr", - "rand 0.8.5", - "rayon", - "regex", - "rustc_version", - "seqlock", "serde", "serde_derive", - "smallvec", - "solana-bucket-map", - "solana-config-program", - "solana-frozen-abi", - "solana-frozen-abi-macro", - "solana-measure", - "solana-metrics", - "solana-nohash-hasher", - "solana-program-runtime", - "solana-rayon-threadlimit", - "solana-sdk", - "solana-stake-program", - "solana-system-program", - "solana-vote-program", - "static_assertions", - "strum", - "strum_macros", - "tar", - "tempfile", - "thiserror", + "solana-clock", + "solana-instruction", + "solana-pubkey", + "solana-sdk-ids", + "solana-slot-hashes", ] [[package]] -name = "solana-address-lookup-table-program" -version = "1.18.22" +name = "solana-atomic-u64" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7f5967c234aa8281f36999ded250403ddacb77863e2a1e157a3203884a13cfa" +checksum = "d52e52720efe60465b052b9e7445a01c17550666beec855cce66f44766697bc2" dependencies = [ - "bincode", - "bytemuck", - "log", - "num-derive 0.4.2", - "num-traits", - "rustc_version", - "serde", - "solana-frozen-abi", - "solana-frozen-abi-macro", - "solana-program", - "solana-program-runtime", - "solana-sdk", - "thiserror", + "parking_lot 0.12.3", ] [[package]] -name = "solana-banks-client" -version = "1.18.22" +name = "solana-big-mod-exp" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d78204433cdb1945ef3622905f806423f5536cc91205dc8e325efe521394d3ca" +checksum = "75db7f2bbac3e62cfd139065d15bcda9e2428883ba61fc8d27ccb251081e7567" dependencies = [ - "borsh 1.4.0", - "futures", - "solana-banks-interface", - "solana-program", - "solana-sdk", - "tarpc", - "thiserror", - "tokio", - "tokio-serde", + "num-bigint 0.4.6", + "num-traits", + "solana-define-syscall", ] [[package]] -name = "solana-banks-interface" -version = "1.18.22" +name = "solana-bincode" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f959539e11afaa554c0ae445bb3c726ad658aa33d8b577b76ab7e0ad6e313405" +checksum = "19a3787b8cf9c9fe3dd360800e8b70982b9e5a8af9e11c354b6665dd4a003adc" dependencies = [ + "bincode", "serde", - "solana-sdk", - "tarpc", + "solana-instruction", ] [[package]] -name = "solana-banks-server" -version = "1.18.22" +name = "solana-blake3-hasher" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5224477dc90857c98bec8ff746926facf525e0216fdfbde51e28d92d5b11b236" +checksum = "a1a0801e25a1b31a14494fc80882a036be0ffd290efc4c2d640bfcca120a4672" dependencies = [ - "bincode", - "crossbeam-channel", - "futures", - "solana-accounts-db", - "solana-banks-interface", - "solana-client", - "solana-runtime", - "solana-sdk", - "solana-send-transaction-service", - "tarpc", - "tokio", - "tokio-serde", + "blake3", + "solana-define-syscall", + "solana-hash", + "solana-sanitize", ] [[package]] -name = "solana-bpf-loader-program" -version = "1.18.22" +name = "solana-bn254" +version = "2.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfab3aa028e4feac760f28e7fb24760813d451e7cff5a13584509ddab4a94311" +checksum = "4420f125118732833f36facf96a27e7b78314b2d642ba07fa9ffdacd8d79e243" dependencies = [ - "bincode", - "byteorder", - "libsecp256k1", - "log", - "scopeguard", - "solana-measure", - "solana-program-runtime", - "solana-sdk", - "solana-zk-token-sdk", - "solana_rbpf", - "thiserror", + "ark-bn254 0.4.0", + "ark-ec 0.4.2", + "ark-ff 0.4.2", + "ark-serialize 0.4.2", + "bytemuck", + "solana-define-syscall", + "thiserror 2.0.12", ] [[package]] -name = "solana-bucket-map" -version = "1.18.22" +name = "solana-borsh" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06f781213cf76d8840e688d52fbc3876ae8522d2ac594c1c11ab9b982d7f0336" +checksum = "718333bcd0a1a7aed6655aa66bef8d7fb047944922b2d3a18f49cbc13e73d004" dependencies = [ - "bv", - "bytemuck", - "log", - "memmap2", - "modular-bitfield", - "num_enum 0.7.2", - "rand 0.8.5", - "solana-measure", - "solana-sdk", - "tempfile", + "borsh 0.10.4", + "borsh 1.5.7", ] [[package]] @@ -6447,7 +6124,7 @@ dependencies = [ "rpassword", "solana-remote-wallet", "solana-sdk", - "thiserror", + "thiserror 1.0.69", "tiny-bip39", "uriparse", "url", @@ -6464,7 +6141,7 @@ dependencies = [ "dashmap", "futures", "futures-util", - "indexmap 2.2.6", + "indexmap 2.8.0", "indicatif", "log", "quinn", @@ -6482,18 +6159,21 @@ dependencies = [ "solana-thin-client", "solana-tpu-client", "solana-udp-client", - "thiserror", + "thiserror 1.0.69", "tokio", ] [[package]] -name = "solana-compute-budget-program" -version = "1.18.22" +name = "solana-clock" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b176bad40620d1c443365daf24e19fbfccafe8daff60eb3ddd6cbd9cf0fbec58" +checksum = "67c2177a1b9fe8326004f1151a5acd124420b737811080b1035df31349e4d892" dependencies = [ - "solana-program-runtime", - "solana-sdk", + "serde", + "serde_derive", + "solana-sdk-ids", + "solana-sdk-macro 2.2.1", + "solana-sysvar-id", ] [[package]] @@ -6520,7 +6200,7 @@ dependencies = [ "bincode", "crossbeam-channel", "futures-util", - "indexmap 2.2.6", + "indexmap 2.8.0", "log", "rand 0.8.5", "rayon", @@ -6528,32 +6208,115 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-sdk", - "thiserror", + "thiserror 1.0.69", "tokio", ] [[package]] -name = "solana-cost-model" -version = "1.18.22" +name = "solana-cpi" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c4564996ef9f2983efeedb14a38315fa606d3d2cc0a2c8d899c507c5893fe79" +checksum = "8dc71126edddc2ba014622fc32d0f5e2e78ec6c5a1e0eb511b85618c09e9ea11" +dependencies = [ + "solana-account-info", + "solana-define-syscall", + "solana-instruction", + "solana-program-error", + "solana-pubkey", + "solana-stable-layout", +] + +[[package]] +name = "solana-decode-error" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10a6a6383af236708048f8bd8d03db8ca4ff7baf4a48e5d580f4cce545925470" +dependencies = [ + "num-traits", +] + +[[package]] +name = "solana-define-syscall" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf784bb2cb3e02cac9801813c30187344228d2ae952534902108f6150573a33d" + +[[package]] +name = "solana-epoch-rewards" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86b575d3dd323b9ea10bb6fe89bf6bf93e249b215ba8ed7f68f1a3633f384db7" +dependencies = [ + "serde", + "serde_derive", + "solana-hash", + "solana-sdk-ids", + "solana-sdk-macro 2.2.1", + "solana-sysvar-id", +] + +[[package]] +name = "solana-epoch-schedule" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fce071fbddecc55d727b1d7ed16a629afe4f6e4c217bc8d00af3b785f6f67ed" +dependencies = [ + "serde", + "serde_derive", + "solana-sdk-ids", + "solana-sdk-macro 2.2.1", + "solana-sysvar-id", +] + +[[package]] +name = "solana-example-mocks" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84461d56cbb8bb8d539347151e0525b53910102e4bced875d49d5139708e39d3" +dependencies = [ + "serde", + "serde_derive", + "solana-address-lookup-table-interface", + "solana-clock", + "solana-hash", + "solana-instruction", + "solana-keccak-hasher", + "solana-message", + "solana-nonce", + "solana-pubkey", + "solana-sdk-ids", + "solana-system-interface", + "thiserror 2.0.12", +] + +[[package]] +name = "solana-feature-gate-interface" +version = "2.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43f5c5382b449e8e4e3016fb05e418c53d57782d8b5c30aa372fc265654b956d" +dependencies = [ + "bincode", + "serde", + "serde_derive", + "solana-account", + "solana-account-info", + "solana-instruction", + "solana-program-error", + "solana-pubkey", + "solana-rent", + "solana-sdk-ids", + "solana-system-interface", +] + +[[package]] +name = "solana-fee-calculator" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d89bc408da0fb3812bc3008189d148b4d3e08252c79ad810b245482a3f70cd8d" dependencies = [ - "lazy_static", "log", - "rustc_version", - "solana-address-lookup-table-program", - "solana-bpf-loader-program", - "solana-compute-budget-program", - "solana-config-program", - "solana-frozen-abi", - "solana-frozen-abi-macro", - "solana-loader-v4-program", - "solana-metrics", - "solana-program-runtime", - "solana-sdk", - "solana-stake-program", - "solana-system-program", - "solana-vote-program", + "serde", + "serde_derive", ] [[package]] @@ -6578,7 +6341,7 @@ dependencies = [ "sha2 0.10.8", "solana-frozen-abi-macro", "subtle", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -6590,20 +6353,129 @@ dependencies = [ "proc-macro2", "quote", "rustc_version", - "syn 2.0.59", + "syn 2.0.100", ] [[package]] -name = "solana-loader-v4-program" -version = "1.18.22" +name = "solana-hash" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3fde1ab49eb031882f4803bf5a8008dca84356717e120ba9276d229ff24633c" +checksum = "cf7bcb14392900fe02e4e34e90234fbf0c673d4e327888410ba99fa2ba0f4e99" dependencies = [ - "log", - "solana-measure", - "solana-program-runtime", - "solana-sdk", - "solana_rbpf", + "borsh 1.5.7", + "bs58 0.5.1", + "bytemuck", + "bytemuck_derive", + "js-sys", + "serde", + "serde_derive", + "solana-atomic-u64", + "solana-sanitize", + "wasm-bindgen", +] + +[[package]] +name = "solana-instruction" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ce496a475e5062ba5de97215ab39d9c358f9c9df4bb7f3a45a1f1a8bd9065ed" +dependencies = [ + "bincode", + "borsh 1.5.7", + "getrandom 0.2.15", + "js-sys", + "num-traits", + "serde", + "serde_derive", + "solana-define-syscall", + "solana-pubkey", + "wasm-bindgen", +] + +[[package]] +name = "solana-instructions-sysvar" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "427f2d0d6dc0bb49f16cef5e7f975180d2e80aab9bdd3b2af68e2d029ec63f43" +dependencies = [ + "bitflags 2.9.0", + "solana-account-info", + "solana-instruction", + "solana-program-error", + "solana-pubkey", + "solana-sanitize", + "solana-sdk-ids", + "solana-serialize-utils", + "solana-sysvar-id", +] + +[[package]] +name = "solana-keccak-hasher" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7aeb957fbd42a451b99235df4942d96db7ef678e8d5061ef34c9b34cae12f79" +dependencies = [ + "sha3 0.10.8", + "solana-define-syscall", + "solana-hash", + "solana-sanitize", +] + +[[package]] +name = "solana-last-restart-slot" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a6360ac2fdc72e7463565cd256eedcf10d7ef0c28a1249d261ec168c1b55cdd" +dependencies = [ + "serde", + "serde_derive", + "solana-sdk-ids", + "solana-sdk-macro 2.2.1", + "solana-sysvar-id", +] + +[[package]] +name = "solana-loader-v2-interface" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8ab08006dad78ae7cd30df8eea0539e207d08d91eaefb3e1d49a446e1c49654" +dependencies = [ + "serde", + "serde_bytes", + "serde_derive", + "solana-instruction", + "solana-pubkey", + "solana-sdk-ids", +] + +[[package]] +name = "solana-loader-v3-interface" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa4be76cfa9afd84ca2f35ebc09f0da0f0092935ccdac0595d98447f259538c2" +dependencies = [ + "serde", + "serde_bytes", + "serde_derive", + "solana-instruction", + "solana-pubkey", + "solana-sdk-ids", + "solana-system-interface", +] + +[[package]] +name = "solana-loader-v4-interface" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "706a777242f1f39a83e2a96a2a6cb034cb41169c6ecbee2cf09cb873d9659e7e" +dependencies = [ + "serde", + "serde_bytes", + "serde_derive", + "solana-instruction", + "solana-pubkey", + "solana-sdk-ids", + "solana-system-interface", ] [[package]] @@ -6612,7 +6484,7 @@ version = "1.18.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b129da15193f26db62d62ae6bb9f72361f361bcdc36054be3ab8bc04cc7a4f31" dependencies = [ - "env_logger 0.9.3", + "env_logger", "lazy_static", "log", ] @@ -6627,6 +6499,29 @@ dependencies = [ "solana-sdk", ] +[[package]] +name = "solana-message" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c6bf99c4570173710107a1f233f3bee226feea5fc817308707d4f7cb100a72d" +dependencies = [ + "bincode", + "blake3", + "lazy_static", + "serde", + "serde_derive", + "solana-bincode", + "solana-hash", + "solana-instruction", + "solana-pubkey", + "solana-sanitize", + "solana-sdk-ids", + "solana-short-vec", + "solana-system-interface", + "solana-transaction-error", + "wasm-bindgen", +] + [[package]] name = "solana-metrics" version = "1.18.22" @@ -6639,9 +6534,24 @@ dependencies = [ "log", "reqwest 0.11.27", "solana-sdk", - "thiserror", + "thiserror 1.0.69", ] +[[package]] +name = "solana-msg" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f36a1a14399afaabc2781a1db09cb14ee4cc4ee5c7a5a3cfcc601811379a8092" +dependencies = [ + "solana-define-syscall", +] + +[[package]] +name = "solana-native-token" +version = "2.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "307fb2f78060995979e9b4f68f833623565ed4e55d3725f100454ce78a99a1a3" + [[package]] name = "solana-net-utils" version = "1.18.22" @@ -6656,7 +6566,7 @@ dependencies = [ "rand 0.8.5", "serde", "serde_derive", - "socket2 0.5.6", + "socket2", "solana-logger", "solana-sdk", "solana-version", @@ -6665,10 +6575,18 @@ dependencies = [ ] [[package]] -name = "solana-nohash-hasher" -version = "0.2.1" +name = "solana-nonce" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b8a731ed60e89177c8a7ab05fe0f1511cedd3e70e773f288f9de33a9cfdc21e" +checksum = "703e22eb185537e06204a5bd9d509b948f0066f2d1d814a6f475dafb3ddf1325" +dependencies = [ + "serde", + "serde_derive", + "solana-fee-calculator", + "solana-hash", + "solana-pubkey", + "solana-sha256-hasher", +] [[package]] name = "solana-perf" @@ -6680,7 +6598,7 @@ dependencies = [ "bincode", "bv", "caps", - "curve25519-dalek", + "curve25519-dalek 3.2.1", "dlopen2", "fnv", "lazy_static", @@ -6705,37 +6623,37 @@ version = "1.18.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fb2b2c8babfae4cace1a25b6efa00418f3acd852cf55d7cecc0360d3c5050479" dependencies = [ - "ark-bn254", - "ark-ec", - "ark-ff", - "ark-serialize", + "ark-bn254 0.4.0", + "ark-ec 0.4.2", + "ark-ff 0.4.2", + "ark-serialize 0.4.2", "base64 0.21.7", "bincode", - "bitflags 2.5.0", + "bitflags 2.9.0", "blake3", - "borsh 0.10.3", + "borsh 0.10.4", "borsh 0.9.3", - "borsh 1.4.0", + "borsh 1.5.7", "bs58 0.4.0", "bv", "bytemuck", "cc", "console_error_panic_hook", "console_log", - "curve25519-dalek", - "getrandom 0.2.14", + "curve25519-dalek 3.2.1", + "getrandom 0.2.15", "itertools 0.10.5", "js-sys", "lazy_static", "libc", "libsecp256k1", - "light-poseidon", + "light-poseidon 0.2.0", "log", "memoffset 0.9.1", "num-bigint 0.4.6", "num-derive 0.4.2", "num-traits", - "parking_lot 0.12.1", + "parking_lot 0.12.3", "rand 0.8.5", "rustc_version", "rustversion", @@ -6747,13 +6665,146 @@ dependencies = [ "sha3 0.10.8", "solana-frozen-abi", "solana-frozen-abi-macro", - "solana-sdk-macro", - "thiserror", + "solana-sdk-macro 1.18.22", + "thiserror 1.0.69", "tiny-bip39", "wasm-bindgen", "zeroize", ] +[[package]] +name = "solana-program" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "586469467e93ceb79048f8d8e3a619bf61d05396ee7de95cb40280301a589d05" +dependencies = [ + "bincode", + "blake3", + "borsh 0.10.4", + "borsh 1.5.7", + "bs58 0.5.1", + "bytemuck", + "console_error_panic_hook", + "console_log", + "getrandom 0.2.15", + "lazy_static", + "log", + "memoffset 0.9.1", + "num-bigint 0.4.6", + "num-derive 0.4.2", + "num-traits", + "rand 0.8.5", + "serde", + "serde_bytes", + "serde_derive", + "solana-account-info", + "solana-address-lookup-table-interface", + "solana-atomic-u64", + "solana-big-mod-exp", + "solana-bincode", + "solana-blake3-hasher", + "solana-borsh", + "solana-clock", + "solana-cpi", + "solana-decode-error", + "solana-define-syscall", + "solana-epoch-rewards", + "solana-epoch-schedule", + "solana-example-mocks", + "solana-feature-gate-interface", + "solana-fee-calculator", + "solana-hash", + "solana-instruction", + "solana-instructions-sysvar", + "solana-keccak-hasher", + "solana-last-restart-slot", + "solana-loader-v2-interface", + "solana-loader-v3-interface", + "solana-loader-v4-interface", + "solana-message", + "solana-msg", + "solana-native-token", + "solana-nonce", + "solana-program-entrypoint", + "solana-program-error", + "solana-program-memory", + "solana-program-option", + "solana-program-pack", + "solana-pubkey", + "solana-rent", + "solana-sanitize", + "solana-sdk-ids", + "solana-sdk-macro 2.2.1", + "solana-secp256k1-recover", + "solana-serde-varint", + "solana-serialize-utils", + "solana-sha256-hasher", + "solana-short-vec", + "solana-slot-hashes", + "solana-slot-history", + "solana-stable-layout", + "solana-stake-interface", + "solana-system-interface", + "solana-sysvar", + "solana-sysvar-id", + "solana-vote-interface", + "thiserror 2.0.12", + "wasm-bindgen", +] + +[[package]] +name = "solana-program-entrypoint" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "473ffe73c68d93e9f2aa726ad2985fe52760052709aaab188100a42c618060ec" +dependencies = [ + "solana-account-info", + "solana-msg", + "solana-program-error", + "solana-pubkey", +] + +[[package]] +name = "solana-program-error" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8ae2c1a8d0d4ae865882d5770a7ebca92bab9c685e43f0461682c6c05a35bfa" +dependencies = [ + "borsh 1.5.7", + "num-traits", + "serde", + "serde_derive", + "solana-decode-error", + "solana-instruction", + "solana-msg", + "solana-pubkey", +] + +[[package]] +name = "solana-program-memory" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b0268f6c89825fb634a34bd0c3b8fdaeaecfc3728be1d622a8ee6dd577b60d4" +dependencies = [ + "num-traits", + "solana-define-syscall", +] + +[[package]] +name = "solana-program-option" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc677a2e9bc616eda6dbdab834d463372b92848b2bfe4a1ed4e4b4adba3397d0" + +[[package]] +name = "solana-program-pack" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "319f0ef15e6e12dc37c597faccb7d62525a509fec5f6975ecb9419efddeb277b" +dependencies = [ + "solana-program-error", +] + [[package]] name = "solana-program-runtime" version = "1.18.22" @@ -6779,37 +6830,33 @@ dependencies = [ "solana-metrics", "solana-sdk", "solana_rbpf", - "thiserror", + "thiserror 1.0.69", ] [[package]] -name = "solana-program-test" -version = "1.18.22" +name = "solana-pubkey" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c76274336971f37dbbd3508aaaa4c98ca0061abd31fb309ad1c6ad132f0c6c0e" +checksum = "cad77cf9f30b971a1eec48dde6a863dcac60ba005a34dfde23736afa5c7ac667" dependencies = [ - "assert_matches", - "async-trait", - "base64 0.21.7", - "bincode", - "chrono-humanize", - "crossbeam-channel", - "log", + "borsh 0.10.4", + "borsh 1.5.7", + "bs58 0.5.1", + "bytemuck", + "bytemuck_derive", + "curve25519-dalek 4.1.3", + "five8_const", + "getrandom 0.2.15", + "js-sys", + "num-traits", "serde", - "solana-accounts-db", - "solana-banks-client", - "solana-banks-interface", - "solana-banks-server", - "solana-bpf-loader-program", - "solana-logger", - "solana-program-runtime", - "solana-runtime", - "solana-sdk", - "solana-vote-program", - "solana_rbpf", - "test-case", - "thiserror", - "tokio", + "serde_derive", + "solana-atomic-u64", + "solana-decode-error", + "solana-define-syscall", + "solana-sanitize", + "solana-sha256-hasher", + "wasm-bindgen", ] [[package]] @@ -6829,7 +6876,7 @@ dependencies = [ "solana-account-decoder", "solana-rpc-client-api", "solana-sdk", - "thiserror", + "thiserror 1.0.69", "tokio", "tokio-stream", "tokio-tungstenite", @@ -6860,7 +6907,7 @@ dependencies = [ "solana-rpc-client-api", "solana-sdk", "solana-streamer", - "thiserror", + "thiserror 1.0.69", "tokio", ] @@ -6885,14 +6932,27 @@ dependencies = [ "log", "num-derive 0.4.2", "num-traits", - "parking_lot 0.12.1", + "parking_lot 0.12.3", "qstring", "semver", "solana-sdk", - "thiserror", + "thiserror 1.0.69", "uriparse", ] +[[package]] +name = "solana-rent" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1aea8fdea9de98ca6e8c2da5827707fb3842833521b528a713810ca685d2480" +dependencies = [ + "serde", + "serde_derive", + "solana-sdk-ids", + "solana-sdk-macro 2.2.1", + "solana-sysvar-id", +] + [[package]] name = "solana-rpc-client" version = "1.18.22" @@ -6938,7 +6998,7 @@ dependencies = [ "solana-transaction-status", "solana-version", "spl-token-2022", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -6951,85 +7011,14 @@ dependencies = [ "solana-clap-utils", "solana-rpc-client", "solana-sdk", - "thiserror", + "thiserror 1.0.69", ] [[package]] -name = "solana-runtime" -version = "1.18.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7c4b50b29b6f5938d2c9b151e9187d4687ca9c26be2c6ebe53ba34826283441" -dependencies = [ - "aquamarine", - "arrayref", - "base64 0.21.7", - "bincode", - "blake3", - "bv", - "bytemuck", - "byteorder", - "bzip2", - "crossbeam-channel", - "dashmap", - "dir-diff", - "flate2", - "fnv", - "im", - "index_list", - "itertools 0.10.5", - "lazy_static", - "log", - "lru 0.7.8", - "lz4", - "memmap2", - "mockall", - "modular-bitfield", - "num-derive 0.4.2", - "num-traits", - "num_cpus", - "num_enum 0.7.2", - "ouroboros", - "percentage", - "qualifier_attr", - "rand 0.8.5", - "rayon", - "regex", - "rustc_version", - "serde", - "serde_derive", - "serde_json", - "solana-accounts-db", - "solana-address-lookup-table-program", - "solana-bpf-loader-program", - "solana-bucket-map", - "solana-compute-budget-program", - "solana-config-program", - "solana-cost-model", - "solana-frozen-abi", - "solana-frozen-abi-macro", - "solana-loader-v4-program", - "solana-measure", - "solana-metrics", - "solana-perf", - "solana-program-runtime", - "solana-rayon-threadlimit", - "solana-sdk", - "solana-stake-program", - "solana-system-program", - "solana-version", - "solana-vote", - "solana-vote-program", - "solana-zk-token-proof-program", - "solana-zk-token-sdk", - "static_assertions", - "strum", - "strum_macros", - "symlink", - "tar", - "tempfile", - "thiserror", - "zstd", -] +name = "solana-sanitize" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61f1bc1357b8188d9c4a3af3fc55276e56987265eb7ad073ae6f8180ee54cecf" [[package]] name = "solana-sdk" @@ -7040,8 +7029,8 @@ dependencies = [ "assert_matches", "base64 0.21.7", "bincode", - "bitflags 2.5.0", - "borsh 1.4.0", + "bitflags 2.9.0", + "borsh 1.5.7", "bs58 0.4.0", "bytemuck", "byteorder", @@ -7060,7 +7049,7 @@ dependencies = [ "memmap2", "num-derive 0.4.2", "num-traits", - "num_enum 0.7.2", + "num_enum 0.7.3", "pbkdf2 0.11.0", "qstring", "qualifier_attr", @@ -7079,13 +7068,22 @@ dependencies = [ "solana-frozen-abi", "solana-frozen-abi-macro", "solana-logger", - "solana-program", - "solana-sdk-macro", - "thiserror", + "solana-program 1.18.22", + "solana-sdk-macro 1.18.22", + "thiserror 1.0.69", "uriparse", "wasm-bindgen", ] +[[package]] +name = "solana-sdk-ids" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c5d8b9cc68d5c88b062a33e23a6466722467dde0035152d8fb1afbcdf350a5f" +dependencies = [ + "solana-pubkey", +] + [[package]] name = "solana-sdk-macro" version = "1.18.22" @@ -7096,7 +7094,30 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.59", + "syn 2.0.100", +] + +[[package]] +name = "solana-sdk-macro" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86280da8b99d03560f6ab5aca9de2e38805681df34e0bb8f238e69b29433b9df" +dependencies = [ + "bs58 0.5.1", + "proc-macro2", + "quote", + "syn 2.0.100", +] + +[[package]] +name = "solana-secp256k1-recover" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baa3120b6cdaa270f39444f5093a90a7b03d296d362878f7a6991d6de3bbe496" +dependencies = [ + "libsecp256k1", + "solana-define-syscall", + "thiserror 2.0.12", ] [[package]] @@ -7106,34 +7127,100 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "468aa43b7edb1f9b7b7b686d5c3aeb6630dc1708e86e31343499dd5c4d775183" [[package]] -name = "solana-send-transaction-service" -version = "1.18.22" +name = "solana-serde-varint" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7c5fc9df712efd671a5a5b68e58a448dc13b70f59ef16bdd0e8d644813eb67a" +checksum = "bcc07d00200d82e6def2f7f7a45738e3406b17fe54a18adcf0defa16a97ccadb" dependencies = [ - "crossbeam-channel", - "log", - "solana-client", - "solana-measure", - "solana-metrics", - "solana-runtime", - "solana-sdk", - "solana-tpu-client", + "serde", ] [[package]] -name = "solana-stake-program" -version = "1.18.22" +name = "solana-serialize-utils" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "624f6d0c84c19a17bf882259303e99e1ed2562a0316c989f847a067aa99d4940" +checksum = "817a284b63197d2b27afdba829c5ab34231da4a9b4e763466a003c40ca4f535e" dependencies = [ - "bincode", - "log", - "rustc_version", - "solana-config-program", - "solana-program-runtime", - "solana-sdk", - "solana-vote-program", + "solana-instruction", + "solana-pubkey", + "solana-sanitize", +] + +[[package]] +name = "solana-sha256-hasher" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0037386961c0d633421f53560ad7c80675c0447cba4d1bb66d60974dd486c7ea" +dependencies = [ + "sha2 0.10.8", + "solana-define-syscall", + "solana-hash", +] + +[[package]] +name = "solana-short-vec" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c54c66f19b9766a56fa0057d060de8378676cb64987533fa088861858fc5a69" +dependencies = [ + "serde", +] + +[[package]] +name = "solana-slot-hashes" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c8691982114513763e88d04094c9caa0376b867a29577939011331134c301ce" +dependencies = [ + "serde", + "serde_derive", + "solana-hash", + "solana-sdk-ids", + "solana-sysvar-id", +] + +[[package]] +name = "solana-slot-history" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97ccc1b2067ca22754d5283afb2b0126d61eae734fc616d23871b0943b0d935e" +dependencies = [ + "bv", + "serde", + "serde_derive", + "solana-sdk-ids", + "solana-sysvar-id", +] + +[[package]] +name = "solana-stable-layout" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f14f7d02af8f2bc1b5efeeae71bc1c2b7f0f65cd75bcc7d8180f2c762a57f54" +dependencies = [ + "solana-instruction", + "solana-pubkey", +] + +[[package]] +name = "solana-stake-interface" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5269e89fde216b4d7e1d1739cf5303f8398a1ff372a81232abbee80e554a838c" +dependencies = [ + "borsh 0.10.4", + "borsh 1.5.7", + "num-traits", + "serde", + "serde_derive", + "solana-clock", + "solana-cpi", + "solana-decode-error", + "solana-instruction", + "solana-program-error", + "solana-pubkey", + "solana-system-interface", + "solana-sysvar-id", ] [[package]] @@ -7147,7 +7234,7 @@ dependencies = [ "crossbeam-channel", "futures-util", "histogram", - "indexmap 2.2.6", + "indexmap 2.8.0", "itertools 0.10.5", "libc", "log", @@ -7164,23 +7251,72 @@ dependencies = [ "solana-metrics", "solana-perf", "solana-sdk", - "thiserror", + "thiserror 1.0.69", "tokio", "x509-parser", ] [[package]] -name = "solana-system-program" -version = "1.18.22" +name = "solana-system-interface" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94d7c18cb1a91c6be5f5a8ac9276a1d7c737e39a21beba9ea710ab4b9c63bc90" +dependencies = [ + "js-sys", + "num-traits", + "serde", + "serde_derive", + "solana-decode-error", + "solana-instruction", + "solana-pubkey", + "wasm-bindgen", +] + +[[package]] +name = "solana-sysvar" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a449f40a516a8e83dcc2ce07643bb3feec4da690f170d438849af06c503cc28" +checksum = "bf6b44740d7f0c9f375d045c165bc0aab4a90658f92d6835aeb0649afaeaff9a" dependencies = [ + "base64 0.22.1", "bincode", - "log", + "bytemuck", + "bytemuck_derive", + "lazy_static", "serde", "serde_derive", - "solana-program-runtime", - "solana-sdk", + "solana-account-info", + "solana-clock", + "solana-define-syscall", + "solana-epoch-rewards", + "solana-epoch-schedule", + "solana-fee-calculator", + "solana-hash", + "solana-instruction", + "solana-instructions-sysvar", + "solana-last-restart-slot", + "solana-program-entrypoint", + "solana-program-error", + "solana-program-memory", + "solana-pubkey", + "solana-rent", + "solana-sanitize", + "solana-sdk-ids", + "solana-sdk-macro 2.2.1", + "solana-slot-hashes", + "solana-slot-history", + "solana-stake-interface", + "solana-sysvar-id", +] + +[[package]] +name = "solana-sysvar-id" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5762b273d3325b047cfda250787f8d796d781746860d5d0a746ee29f3e8812c1" +dependencies = [ + "solana-pubkey", + "solana-sdk-ids", ] [[package]] @@ -7207,7 +7343,7 @@ dependencies = [ "async-trait", "bincode", "futures-util", - "indexmap 2.2.6", + "indexmap 2.8.0", "indicatif", "log", "rayon", @@ -7218,10 +7354,20 @@ dependencies = [ "solana-rpc-client", "solana-rpc-client-api", "solana-sdk", - "thiserror", + "thiserror 1.0.69", "tokio", ] +[[package]] +name = "solana-transaction-error" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "222a9dc8fdb61c6088baab34fc3a8b8473a03a7a5fd404ed8dd502fa79b67cb1" +dependencies = [ + "solana-instruction", + "solana-sanitize", +] + [[package]] name = "solana-transaction-status" version = "1.18.22" @@ -7231,7 +7377,7 @@ dependencies = [ "Inflector", "base64 0.21.7", "bincode", - "borsh 0.10.3", + "borsh 0.10.4", "bs58 0.4.0", "lazy_static", "log", @@ -7244,7 +7390,7 @@ dependencies = [ "spl-memo", "spl-token", "spl-token-2022", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -7258,7 +7404,7 @@ dependencies = [ "solana-net-utils", "solana-sdk", "solana-streamer", - "thiserror", + "thiserror 1.0.69", "tokio", ] @@ -7279,22 +7425,27 @@ dependencies = [ ] [[package]] -name = "solana-vote" -version = "1.18.22" +name = "solana-vote-interface" +version = "2.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ae2a4908ac4df02a4adb78f09fe938b31c75f42ba64401b8ac88193eb446943" +checksum = "78f039b0788337bedc6c5450d2f237718f938defb5ce0e0ad8ef507e78dcd370" dependencies = [ - "crossbeam-channel", - "itertools 0.10.5", - "log", - "rustc_version", + "bincode", + "num-derive 0.4.2", + "num-traits", "serde", "serde_derive", - "solana-frozen-abi", - "solana-frozen-abi-macro", - "solana-sdk", - "solana-vote-program", - "thiserror", + "solana-clock", + "solana-decode-error", + "solana-hash", + "solana-instruction", + "solana-pubkey", + "solana-rent", + "solana-sdk-ids", + "solana-serde-varint", + "solana-serialize-utils", + "solana-short-vec", + "solana-system-interface", ] [[package]] @@ -7313,24 +7464,10 @@ dependencies = [ "solana-frozen-abi", "solana-frozen-abi-macro", "solana-metrics", - "solana-program", - "solana-program-runtime", - "solana-sdk", - "thiserror", -] - -[[package]] -name = "solana-zk-token-proof-program" -version = "1.18.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5813dc267bea898ff40d3bd662a0a7659170dd19ae5e7c46e8dc0a414a205868" -dependencies = [ - "bytemuck", - "num-derive 0.4.2", - "num-traits", + "solana-program 1.18.22", "solana-program-runtime", "solana-sdk", - "solana-zk-token-sdk", + "thiserror 1.0.69", ] [[package]] @@ -7344,7 +7481,7 @@ dependencies = [ "bincode", "bytemuck", "byteorder", - "curve25519-dalek", + "curve25519-dalek 3.2.1", "getrandom 0.1.16", "itertools 0.10.5", "lazy_static", @@ -7355,10 +7492,10 @@ dependencies = [ "serde", "serde_json", "sha3 0.9.1", - "solana-program", + "solana-program 1.18.22", "solana-sdk", "subtle", - "thiserror", + "thiserror 1.0.69", "zeroize", ] @@ -7377,7 +7514,7 @@ dependencies = [ "rand 0.8.5", "rustc-demangle", "scroll", - "thiserror", + "thiserror 1.0.69", "winapi", ] @@ -7413,13 +7550,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "992d9c64c2564cc8f63a4b508bf3ebcdf2254b0429b13cd1d31adb6162432a5f" dependencies = [ "assert_matches", - "borsh 0.10.3", + "borsh 0.10.4", "num-derive 0.4.2", "num-traits", - "solana-program", + "solana-program 1.18.22", "spl-token", "spl-token-2022", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -7429,7 +7566,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cce5d563b58ef1bb2cdbbfe0dfb9ffdc24903b10ae6a4df2d8f425ece375033f" dependencies = [ "bytemuck", - "solana-program", + "solana-program 1.18.22", "spl-discriminator-derive", ] @@ -7441,7 +7578,7 @@ checksum = "07fd7858fc4ff8fb0e34090e41d7eb06a823e1057945c26d480bfc21d2338a93" dependencies = [ "quote", "spl-discriminator-syn", - "syn 2.0.59", + "syn 2.0.100", ] [[package]] @@ -7453,8 +7590,8 @@ dependencies = [ "proc-macro2", "quote", "sha2 0.10.8", - "syn 2.0.59", - "thiserror", + "syn 2.0.100", + "thiserror 1.0.69", ] [[package]] @@ -7463,7 +7600,7 @@ version = "4.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0f180b03318c3dbab3ef4e1e4d46d5211ae3c780940dd0a28695aba4b59a75a" dependencies = [ - "solana-program", + "solana-program 1.18.22", ] [[package]] @@ -7472,9 +7609,9 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2881dddfca792737c0706fa0175345ab282b1b0879c7d877bad129645737c079" dependencies = [ - "borsh 0.10.3", + "borsh 0.10.4", "bytemuck", - "solana-program", + "solana-program 1.18.22", "solana-zk-token-sdk", "spl-program-error", ] @@ -7487,9 +7624,9 @@ checksum = "249e0318493b6bcf27ae9902600566c689b7dfba9f1bdff5893e92253374e78c" dependencies = [ "num-derive 0.4.2", "num-traits", - "solana-program", + "solana-program 1.18.22", "spl-program-error-derive", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -7501,7 +7638,7 @@ dependencies = [ "proc-macro2", "quote", "sha2 0.10.8", - "syn 2.0.59", + "syn 2.0.100", ] [[package]] @@ -7511,7 +7648,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "615d381f48ddd2bb3c57c7f7fb207591a2a05054639b18a62e785117dd7a8683" dependencies = [ "bytemuck", - "solana-program", + "solana-program 1.18.22", "spl-discriminator", "spl-pod", "spl-program-error", @@ -7529,8 +7666,8 @@ dependencies = [ "num-derive 0.3.3", "num-traits", "num_enum 0.6.1", - "solana-program", - "thiserror", + "solana-program 1.18.22", + "thiserror 1.0.69", ] [[package]] @@ -7543,8 +7680,8 @@ dependencies = [ "bytemuck", "num-derive 0.4.2", "num-traits", - "num_enum 0.7.2", - "solana-program", + "num_enum 0.7.3", + "solana-program 1.18.22", "solana-security-txt", "solana-zk-token-sdk", "spl-memo", @@ -7554,7 +7691,7 @@ dependencies = [ "spl-token-metadata-interface", "spl-transfer-hook-interface", "spl-type-length-value", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -7564,7 +7701,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b889509d49fa74a4a033ca5dae6c2307e9e918122d97e58562f5c4ffa795c75d" dependencies = [ "bytemuck", - "solana-program", + "solana-program 1.18.22", "spl-discriminator", "spl-pod", "spl-program-error", @@ -7576,8 +7713,8 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4c16ce3ba6979645fb7627aa1e435576172dd63088dc7848cb09aa331fa1fe4f" dependencies = [ - "borsh 0.10.3", - "solana-program", + "borsh 0.10.4", + "solana-program 1.18.22", "spl-discriminator", "spl-pod", "spl-program-error", @@ -7592,7 +7729,7 @@ checksum = "7aabdb7c471566f6ddcee724beb8618449ea24b399e58d464d6b5bc7db550259" dependencies = [ "arrayref", "bytemuck", - "solana-program", + "solana-program 1.18.22", "spl-discriminator", "spl-pod", "spl-program-error", @@ -7607,7 +7744,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a468e6f6371f9c69aae760186ea9f1a01c2908351b06a5e0026d21cfc4d7ecac" dependencies = [ "bytemuck", - "solana-program", + "solana-program 1.18.22", "spl-discriminator", "spl-pod", "spl-program-error", @@ -7615,11 +7752,10 @@ dependencies = [ [[package]] name = "sqlformat" -version = "0.2.3" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce81b7bd7c4493975347ef60d8c7e8b742d4694f4c49f93e0a12ea263938176c" +checksum = "7bba3a93db0cc4f7bdece8bb09e77e2e785c20bfebf79eb8340ed80708048790" dependencies = [ - "itertools 0.12.1", "nom", "unicode_categories", ] @@ -7686,7 +7822,7 @@ dependencies = [ "sqlformat", "sqlx-rt", "stringprep", - "thiserror", + "thiserror 1.0.69", "time", "tokio-stream", "url", @@ -7728,6 +7864,12 @@ dependencies = [ "tokio-rustls 0.23.4", ] +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + [[package]] name = "static_assertions" version = "1.1.0" @@ -7736,13 +7878,13 @@ checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" [[package]] name = "stringprep" -version = "0.1.4" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb41d74e231a107a1b4ee36bd1214b11285b77768d2e3824aedafa988fd36ee6" +checksum = "7b4df3d392d81bd458a8a621b8bffbd2302a12ffe288a9d931670948749463b1" dependencies = [ - "finl_unicode", "unicode-bidi", "unicode-normalization", + "unicode-properties", ] [[package]] @@ -7763,40 +7905,12 @@ version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" -[[package]] -name = "strum" -version = "0.24.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "063e6045c0e62079840579a7e47a355ae92f60eb74daaf156fb1e84ba164e63f" -dependencies = [ - "strum_macros", -] - -[[package]] -name = "strum_macros" -version = "0.24.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e385be0d24f186b4ce2f9982191e7101bb737312ad61c1f2f984f34bcf85d59" -dependencies = [ - "heck 0.4.1", - "proc-macro2", - "quote", - "rustversion", - "syn 1.0.109", -] - [[package]] name = "subtle" version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" -[[package]] -name = "symlink" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7973cce6668464ea31f176d85b13c7ab3bba2cb3b77a2ed26abd7801688010a" - [[package]] name = "syn" version = "1.0.109" @@ -7810,27 +7924,15 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.59" +version = "2.0.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a6531ffc7b071655e4ce2e04bd464c4830bb585a61cabb96cf808f05172615a" +checksum = "b09a44accad81e1ba1cd74a32461ba89dee89095ba17b32f5d03683b1b1fc2a0" dependencies = [ "proc-macro2", "quote", "unicode-ident", ] -[[package]] -name = "syn_derive" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1329189c02ff984e9736652b1631330da25eaa6bc639089ed4915d25446cbe7b" -dependencies = [ - "proc-macro-error", - "proc-macro2", - "quote", - "syn 2.0.59", -] - [[package]] name = "sync_wrapper" version = "0.1.2" @@ -7850,17 +7952,14 @@ dependencies = [ ] [[package]] -name = "sysinfo" -version = "0.31.4" +name = "synstructure" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "355dbe4f8799b304b05e1b0f05fc59b2a18d36645cf169607da45bde2f69a1be" +checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" dependencies = [ - "core-foundation-sys", - "libc", - "memchr", - "ntapi", - "rayon", - "windows", + "proc-macro2", + "quote", + "syn 2.0.100", ] [[package]] @@ -7890,62 +7989,17 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" -[[package]] -name = "tar" -version = "0.4.42" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ff6c40d3aedb5e06b57c6f669ad17ab063dd1e63d977c6a88e7f4dfa4f04020" -dependencies = [ - "filetime", - "libc", - "xattr", -] - -[[package]] -name = "tarpc" -version = "0.29.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c38a012bed6fb9681d3bf71ffaa4f88f3b4b9ed3198cda6e4c8462d24d4bb80" -dependencies = [ - "anyhow", - "fnv", - "futures", - "humantime", - "opentelemetry", - "pin-project", - "rand 0.8.5", - "serde", - "static_assertions", - "tarpc-plugins", - "thiserror", - "tokio", - "tokio-serde", - "tokio-util 0.6.10", - "tracing", - "tracing-opentelemetry", -] - -[[package]] -name = "tarpc-plugins" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ee42b4e559f17bce0385ebf511a7beb67d5cc33c12c96b7f4e9789919d9c10f" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - [[package]] name = "tempfile" -version = "3.10.1" +version = "3.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1" +checksum = "7437ac7763b9b123ccf33c338a5cc1bac6f69b45a136c19bdd8a65e3916435bf" dependencies = [ - "cfg-if", - "fastrand 2.0.2", - "rustix 0.38.32", - "windows-sys 0.52.0", + "fastrand", + "getrandom 0.3.2", + "once_cell", + "rustix 1.0.5", + "windows-sys 0.59.0", ] [[package]] @@ -7958,77 +8012,58 @@ dependencies = [ ] [[package]] -name = "termtree" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3369f5ac52d5eb6ab48c6b4ffdc8efbcad6b89c765749064ba298f2c68a16a76" - -[[package]] -name = "test-case" -version = "3.3.1" +name = "textwrap" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb2550dd13afcd286853192af8601920d959b14c401fcece38071d53bf0768a8" +checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060" dependencies = [ - "test-case-macros", + "unicode-width 0.1.14", ] [[package]] -name = "test-case-core" -version = "3.3.1" +name = "textwrap" +version = "0.16.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adcb7fd841cd518e279be3d5a3eb0636409487998a4aff22f3de87b81e88384f" -dependencies = [ - "cfg-if", - "proc-macro2", - "quote", - "syn 2.0.59", -] +checksum = "c13547615a44dc9c452a8a534638acdf07120d4b6847c8178705da06306a3057" [[package]] -name = "test-case-macros" -version = "3.3.1" +name = "thiserror" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c89e72a01ed4c579669add59014b9a524d609c0c88c6a585ce37485879f6ffb" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.59", - "test-case-core", + "thiserror-impl 1.0.69", ] [[package]] -name = "textwrap" -version = "0.11.0" +name = "thiserror" +version = "2.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060" +checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708" dependencies = [ - "unicode-width", + "thiserror-impl 2.0.12", ] [[package]] -name = "textwrap" -version = "0.16.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23d434d3f8967a09480fb04132ebe0a3e088c173e6d0ee7897abbdf4eab0f8b9" - -[[package]] -name = "thiserror" -version = "1.0.58" +name = "thiserror-impl" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03468839009160513471e86a034bb2c5c0e4baae3b43f79ffc55c4a5427b3297" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ - "thiserror-impl", + "proc-macro2", + "quote", + "syn 2.0.100", ] [[package]] name = "thiserror-impl" -version = "1.0.58" +version = "2.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c61f3ba182994efc43764a46c018c347bc492c79f024e705f46567b418f6d4f7" +checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.59", + "syn 2.0.100", ] [[package]] @@ -8043,9 +8078,9 @@ dependencies = [ [[package]] name = "time" -version = "0.3.36" +version = "0.3.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885" +checksum = "8a7619e19bc266e0f9c5e6686659d394bc57973859340060a69221e57dbc0c40" dependencies = [ "deranged", "itoa", @@ -8058,15 +8093,15 @@ dependencies = [ [[package]] name = "time-core" -version = "0.1.2" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" +checksum = "c9e9a38711f559d9e3ce1cdb06dd7c5b8ea546bc90052da6d06bb76da74bb07c" [[package]] name = "time-macros" -version = "0.2.18" +version = "0.2.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf" +checksum = "3526739392ec93fd8b359c8e98514cb3e8e021beb4e5f597b00a0221f8ed8a49" dependencies = [ "num-conv", "time-core", @@ -8085,7 +8120,7 @@ dependencies = [ "rand 0.7.3", "rustc-hash", "sha2 0.9.9", - "thiserror", + "thiserror 1.0.69", "unicode-normalization", "wasm-bindgen", "zeroize", @@ -8095,16 +8130,26 @@ dependencies = [ name = "tiny-keccak" version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237" +checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237" +dependencies = [ + "crunchy", +] + +[[package]] +name = "tinystr" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" dependencies = [ - "crunchy", + "displaydoc", + "zerovec", ] [[package]] name = "tinyvec" -version = "1.6.0" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" +checksum = "09b3661f17e86524eccd4371ab0429194e0d7c008abb45f7a7495b1719463c71" dependencies = [ "tinyvec_macros", ] @@ -8117,18 +8162,18 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.40.0" +version = "1.44.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2b070231665d27ad9ec9b8df639893f46727666c6767db40317fbe920a5d998" +checksum = "f382da615b842244d4b8738c82ed1275e6c5dd90c459a30941cd07080b06c91a" dependencies = [ "backtrace", "bytes", "libc", "mio", - "parking_lot 0.12.1", + "parking_lot 0.12.3", "pin-project-lite", "signal-hook-registry", - "socket2 0.5.6", + "socket2", "tokio-macros", "windows-sys 0.52.0", ] @@ -8145,13 +8190,13 @@ dependencies = [ [[package]] name = "tokio-macros" -version = "2.4.0" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" +checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.59", + "syn 2.0.100", ] [[package]] @@ -8185,27 +8230,11 @@ dependencies = [ "tokio", ] -[[package]] -name = "tokio-serde" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "911a61637386b789af998ee23f50aa30d5fd7edcec8d6d3dedae5e5815205466" -dependencies = [ - "bincode", - "bytes", - "educe", - "futures-core", - "futures-sink", - "pin-project", - "serde", - "serde_json", -] - [[package]] name = "tokio-stream" -version = "0.1.15" +version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "267ac89e0bec6e691e5813911606935d77c476ff49024f98abcea3e7b15e37af" +checksum = "eca58d7bba4a75707817a2c44174253f9236b2d5fbd055602e9d5c07c139a047" dependencies = [ "futures-core", "pin-project-lite", @@ -8229,24 +8258,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.6.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36943ee01a6d67977dd3f84a5a1d2efeb4ada3a1ae771cadfaa535d9d9fc6507" -dependencies = [ - "bytes", - "futures-core", - "futures-sink", - "log", - "pin-project-lite", - "slab", - "tokio", -] - -[[package]] -name = "tokio-util" -version = "0.7.10" +version = "0.7.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15" +checksum = "6b9590b93e6fcc1739458317cccd391ad3955e2bde8913edf6f95f9e65a8f034" dependencies = [ "bytes", "futures-core", @@ -8254,7 +8268,6 @@ dependencies = [ "futures-sink", "pin-project-lite", "tokio", - "tracing", ] [[package]] @@ -8268,9 +8281,9 @@ dependencies = [ [[package]] name = "toml_datetime" -version = "0.6.5" +version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1" +checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" [[package]] name = "toml_edit" @@ -8278,20 +8291,20 @@ version = "0.19.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" dependencies = [ - "indexmap 2.2.6", + "indexmap 2.8.0", "toml_datetime", - "winnow", + "winnow 0.5.40", ] [[package]] name = "toml_edit" -version = "0.21.1" +version = "0.22.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1" +checksum = "17b4795ff5edd201c7cd6dca065ae59972ce77d1b80fa0a84d94950ece7d1474" dependencies = [ - "indexmap 2.2.6", + "indexmap 2.8.0", "toml_datetime", - "winnow", + "winnow 0.7.4", ] [[package]] @@ -8308,7 +8321,7 @@ dependencies = [ "h2 0.3.26", "http 0.2.12", "http-body 0.4.6", - "hyper 0.14.28", + "hyper 0.14.32", "hyper-timeout", "percent-encoding", "pin-project", @@ -8335,7 +8348,7 @@ dependencies = [ "proc-macro2", "prost-build", "quote", - "syn 2.0.59", + "syn 2.0.100", ] [[package]] @@ -8366,7 +8379,7 @@ dependencies = [ "rand 0.8.5", "slab", "tokio", - "tokio-util 0.7.10", + "tokio-util", "tower-layer", "tower-service", "tracing", @@ -8394,7 +8407,7 @@ dependencies = [ "percent-encoding", "pin-project-lite", "tokio", - "tokio-util 0.7.10", + "tokio-util", "tower", "tower-layer", "tower-service", @@ -8404,21 +8417,21 @@ dependencies = [ [[package]] name = "tower-layer" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0" +checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" [[package]] name = "tower-service" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" [[package]] name = "tracing" -version = "0.1.40" +version = "0.1.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" dependencies = [ "log", "pin-project-lite", @@ -8428,35 +8441,25 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.27" +version = "0.1.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" +checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.59", + "syn 2.0.100", ] [[package]] name = "tracing-core" -version = "0.1.32" +version = "0.1.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" +checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c" dependencies = [ "once_cell", "valuable", ] -[[package]] -name = "tracing-error" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d686ec1c0f384b1277f097b2f279a2ecc11afe8c133c1aabf036a27cb4cd206e" -dependencies = [ - "tracing", - "tracing-subscriber 0.3.18", -] - [[package]] name = "tracing-log" version = "0.2.0" @@ -8468,24 +8471,11 @@ dependencies = [ "tracing-core", ] -[[package]] -name = "tracing-opentelemetry" -version = "0.17.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbbe89715c1dbbb790059e2565353978564924ee85017b5fff365c872ff6721f" -dependencies = [ - "once_cell", - "opentelemetry", - "tracing", - "tracing-core", - "tracing-subscriber 0.3.18", -] - [[package]] name = "tracing-serde" -version = "0.1.3" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc6b213177105856957181934e4920de57730fc69bf42c37ee5bb664d406d9e1" +checksum = "704b1aeb7be0d0a84fc9828cae51dab5970fee5088f83d1dd7ee6f6246fc6ff1" dependencies = [ "serde", "tracing-core", @@ -8493,18 +8483,9 @@ dependencies = [ [[package]] name = "tracing-subscriber" -version = "0.2.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e0d2eaa99c3c2e41547cfa109e910a68ea03823cccad4a0525dcbc9b01e8c71" -dependencies = [ - "tracing-core", -] - -[[package]] -name = "tracing-subscriber" -version = "0.3.18" +version = "0.3.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" +checksum = "e8189decb5ac0fa7bc8b96b7cb9b2701d60d48805aca84a238004d665fcc4008" dependencies = [ "matchers", "nu-ansi-term", @@ -8542,7 +8523,7 @@ dependencies = [ "rand 0.8.5", "rustls 0.21.12", "sha1", - "thiserror", + "thiserror 1.0.69", "url", "utf-8", "webpki-roots 0.24.0", @@ -8550,57 +8531,66 @@ dependencies = [ [[package]] name = "typenum" -version = "1.17.0" +version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" +checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" [[package]] name = "unicase" -version = "2.7.0" +version = "2.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7d2d4dafb69621809a81864c9c1b864479e1235c0dd4e199924b9742439ed89" -dependencies = [ - "version_check", -] +checksum = "75b844d17643ee918803943289730bec8aac480150456169e647ed0b576ba539" [[package]] name = "unicode-bidi" -version = "0.3.15" +version = "0.3.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" +checksum = "5c1cb5db39152898a79168971543b1cb5020dff7fe43c8dc468b0885f5e29df5" [[package]] name = "unicode-ident" -version = "1.0.12" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" +checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" [[package]] name = "unicode-normalization" -version = "0.1.23" +version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5" +checksum = "5033c97c4262335cded6d6fc3e5c18ab755e1a3dc96376350f3d8e9f009ad956" dependencies = [ "tinyvec", ] +[[package]] +name = "unicode-properties" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e70f2a8b45122e719eb623c01822704c4e0907e7e426a05927e1a1cfff5b75d0" + [[package]] name = "unicode-segmentation" -version = "1.11.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4c87d22b6e3f4a18d4d40ef354e97c90fcb14dd91d7dc0aa9d8a1172ebf7202" +checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" [[package]] name = "unicode-width" -version = "0.1.11" +version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85" +checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" + +[[package]] +name = "unicode-width" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fc81956842c57dac11422a97c3b8195a1ff727f06e85c84ed2e8aa277c9a0fd" [[package]] name = "unicode-xid" -version = "0.2.4" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" +checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" [[package]] name = "unicode_categories" @@ -8657,9 +8647,9 @@ dependencies = [ [[package]] name = "url" -version = "2.5.0" +version = "2.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633" +checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" dependencies = [ "form_urlencoded", "idna", @@ -8672,19 +8662,31 @@ version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" +[[package]] +name = "utf16_iter" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" + +[[package]] +name = "utf8_iter" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" + [[package]] name = "utf8parse" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" +checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "utoipa" -version = "4.2.0" +version = "4.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "272ebdfbc99111033031d2f10e018836056e4d2c8e2acda76450ec7974269fa7" +checksum = "c5afb1a60e207dca502682537fefcfd9921e71d0b83e9576060f09abc6efab23" dependencies = [ - "indexmap 2.2.6", + "indexmap 2.8.0", "serde", "serde_json", "serde_yaml", @@ -8693,37 +8695,37 @@ dependencies = [ [[package]] name = "utoipa-gen" -version = "4.2.0" +version = "4.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3c9f4d08338c1bfa70dde39412a040a884c6f318b3d09aaaf3437a1e52027fc" +checksum = "20c24e8ab68ff9ee746aad22d39b5535601e6416d1b0feeabf78be986a5c4392" dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.59", + "syn 2.0.100", ] [[package]] name = "uuid" -version = "1.8.0" +version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a183cf7feeba97b4dd1c0d46788634f6221d87fa961b305bed08c851829efcc0" +checksum = "458f7a779bf54acc9f347480ac654f68407d3aab21269a6e3c9f922acd9e2da9" dependencies = [ - "getrandom 0.2.14", + "getrandom 0.3.2", "serde", ] [[package]] name = "valuable" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" +checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" [[package]] name = "value-bag" -version = "1.8.1" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74797339c3b98616c009c7c3eb53a0ce41e85c8ec66bd3db96ed132d20cfdee8" +checksum = "943ce29a8a743eb10d6082545d861b24f9d1b160b7d741e0f2cdf726bec909c5" [[package]] name = "vcpkg" @@ -8739,9 +8741,9 @@ checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" [[package]] name = "version_check" -version = "0.9.4" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" [[package]] name = "void" @@ -8749,22 +8751,6 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" -[[package]] -name = "waker-fn" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3c4517f54858c779bbcbf228f4fca63d121bf85fbecb2dc578cdf4a39395690" - -[[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 = "want" version = "0.3.1" @@ -8786,6 +8772,15 @@ version = "0.11.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" +[[package]] +name = "wasi" +version = "0.14.2+wasi-0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" +dependencies = [ + "wit-bindgen-rt", +] + [[package]] name = "wasite" version = "0.1.0" @@ -8794,46 +8789,48 @@ checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b" [[package]] name = "wasm-bindgen" -version = "0.2.92" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8" +checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" dependencies = [ "cfg-if", + "once_cell", + "rustversion", "wasm-bindgen-macro", ] [[package]] name = "wasm-bindgen-backend" -version = "0.2.92" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da" +checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" dependencies = [ "bumpalo", "log", - "once_cell", "proc-macro2", "quote", - "syn 2.0.59", + "syn 2.0.100", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.42" +version = "0.4.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76bc14366121efc8dbb487ab05bcc9d346b3b5ec0eaa76e46594cabbe51762c0" +checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61" dependencies = [ "cfg-if", "js-sys", + "once_cell", "wasm-bindgen", "web-sys", ] [[package]] name = "wasm-bindgen-macro" -version = "0.2.92" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726" +checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -8841,28 +8838,31 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.92" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" +checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" dependencies = [ "proc-macro2", "quote", - "syn 2.0.59", + "syn 2.0.100", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.92" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" +checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" +dependencies = [ + "unicode-ident", +] [[package]] name = "wasm-streams" -version = "0.4.0" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b65dc4c90b63b118468cf747d8bf3566c1913ef60be765b5730ead9e0a3ba129" +checksum = "15053d8d85c7eccdbefef60f06769760a563c7f0a9d6902a13d35c7800b0ad65" dependencies = [ "futures-util", "js-sys", @@ -8873,9 +8873,19 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.69" +version = "0.3.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77afa9a11836342370f4817622a2f0f418b134426d91a82dfb48f532d2ec13ef" +checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "web-time" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" dependencies = [ "js-sys", "wasm-bindgen", @@ -8887,7 +8897,7 @@ version = "0.22.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed63aea5ce73d0ff405984102c42de94fc55a6b75765d621c65262469b3c9b53" dependencies = [ - "ring 0.17.8", + "ring 0.17.14", "untrusted 0.9.0", ] @@ -8917,11 +8927,11 @@ checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" [[package]] name = "whoami" -version = "1.5.1" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a44ab49fad634e88f55bf8f9bb3abd2f27d7204172a112c7c9987e01c1c94ea9" +checksum = "6994d13118ab492c3c80c1f81928718159254c53c472bf9ce36f8dae4add02a7" dependencies = [ - "redox_syscall 0.4.1", + "redox_syscall 0.5.10", "wasite", "web-sys", ] @@ -8944,11 +8954,11 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" -version = "0.1.6" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596" +checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" dependencies = [ - "winapi", + "windows-sys 0.59.0", ] [[package]] @@ -8957,66 +8967,63 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" -[[package]] -name = "windows" -version = "0.57.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12342cb4d8e3b046f3d80effd474a7a02447231330ef77d71daa6fbc40681143" -dependencies = [ - "windows-core 0.57.0", - "windows-targets 0.52.5", -] - -[[package]] -name = "windows-core" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" -dependencies = [ - "windows-targets 0.52.5", -] - [[package]] name = "windows-core" -version = "0.57.0" +version = "0.61.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2ed2439a290666cd67ecce2b0ffaad89c2a56b976b736e6ece670297897832d" +checksum = "4763c1de310c86d75a878046489e2e5ba02c649d185f21c67d4cf8a56d098980" dependencies = [ "windows-implement", "windows-interface", + "windows-link", "windows-result", - "windows-targets 0.52.5", + "windows-strings", ] [[package]] name = "windows-implement" -version = "0.57.0" +version = "0.60.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9107ddc059d5b6fbfbffdfa7a7fe3e22a226def0b2608f72e9d552763d3e1ad7" +checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836" dependencies = [ "proc-macro2", "quote", - "syn 2.0.59", + "syn 2.0.100", ] [[package]] name = "windows-interface" -version = "0.57.0" +version = "0.59.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29bee4b38ea3cde66011baa44dba677c432a78593e202392d1e9070cf2a7fca7" +checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.59", + "syn 2.0.100", ] +[[package]] +name = "windows-link" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76840935b766e1b0a05c0066835fb9ec80071d4c09a16f6bd5f7e655e3c14c38" + [[package]] name = "windows-result" -version = "0.1.2" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c64fd11a4fd95df68efcfee5f44a294fe71b8bc6a91993e2791938abcc712252" +dependencies = [ + "windows-link", +] + +[[package]] +name = "windows-strings" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e383302e8ec8515204254685643de10811af0ed97ea37210dc26fb0032647f8" +checksum = "7a2ba9642430ee452d5a7aa78d72907ebe8cfda358e8cb7918a2050581322f97" dependencies = [ - "windows-targets 0.52.5", + "windows-link", ] [[package]] @@ -9034,7 +9041,16 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" dependencies = [ - "windows-targets 0.52.5", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +dependencies = [ + "windows-targets 0.52.6", ] [[package]] @@ -9054,18 +9070,18 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f0713a46559409d202e70e28227288446bf7841d3211583a4b53e3f6d96e7eb" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" dependencies = [ - "windows_aarch64_gnullvm 0.52.5", - "windows_aarch64_msvc 0.52.5", - "windows_i686_gnu 0.52.5", + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", "windows_i686_gnullvm", - "windows_i686_msvc 0.52.5", - "windows_x86_64_gnu 0.52.5", - "windows_x86_64_gnullvm 0.52.5", - "windows_x86_64_msvc 0.52.5", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", ] [[package]] @@ -9076,9 +9092,9 @@ checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" [[package]] name = "windows_aarch64_gnullvm" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7088eed71e8b8dda258ecc8bac5fb1153c5cffaf2578fc8ff5d61e23578d3263" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" [[package]] name = "windows_aarch64_msvc" @@ -9088,9 +9104,9 @@ checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" [[package]] name = "windows_aarch64_msvc" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9985fd1504e250c615ca5f281c3f7a6da76213ebd5ccc9561496568a2752afb6" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" [[package]] name = "windows_i686_gnu" @@ -9100,15 +9116,15 @@ checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" [[package]] name = "windows_i686_gnu" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88ba073cf16d5372720ec942a8ccbf61626074c6d4dd2e745299726ce8b89670" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" [[package]] name = "windows_i686_gnullvm" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87f4261229030a858f36b459e748ae97545d6f1ec60e5e0d6a3d32e0dc232ee9" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" [[package]] name = "windows_i686_msvc" @@ -9118,9 +9134,9 @@ checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" [[package]] name = "windows_i686_msvc" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db3c2bf3d13d5b658be73463284eaf12830ac9a26a90c717b7f771dfe97487bf" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" [[package]] name = "windows_x86_64_gnu" @@ -9130,9 +9146,9 @@ checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" [[package]] name = "windows_x86_64_gnu" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e4246f76bdeff09eb48875a0fd3e2af6aada79d409d33011886d3e1581517d9" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" [[package]] name = "windows_x86_64_gnullvm" @@ -9142,9 +9158,9 @@ checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" [[package]] name = "windows_x86_64_gnullvm" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "852298e482cd67c356ddd9570386e2862b5673c85bd5f88df9ab6802b334c596" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" [[package]] name = "windows_x86_64_msvc" @@ -9154,9 +9170,9 @@ checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" [[package]] name = "windows_x86_64_msvc" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "winnow" @@ -9167,6 +9183,15 @@ dependencies = [ "memchr", ] +[[package]] +name = "winnow" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e97b544156e9bebe1a0ffbc03484fc1ffe3100cbce3ffb17eac35f7cdd7ab36" +dependencies = [ + "memchr", +] + [[package]] name = "winreg" version = "0.50.0" @@ -9187,6 +9212,27 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "wit-bindgen-rt" +version = "0.39.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" +dependencies = [ + "bitflags 2.9.0", +] + +[[package]] +name = "write16" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" + +[[package]] +name = "writeable" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" + [[package]] name = "wyz" version = "0.5.1" @@ -9210,21 +9256,10 @@ dependencies = [ "nom", "oid-registry", "rusticata-macros", - "thiserror", + "thiserror 1.0.69", "time", ] -[[package]] -name = "xattr" -version = "1.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8da84f1a25939b27f6820d92aed108f83ff920fdf11a7b19366c27c4cda81d4f" -dependencies = [ - "libc", - "linux-raw-sys 0.4.13", - "rustix 0.38.32", -] - [[package]] name = "yasna" version = "0.5.2" @@ -9236,13 +9271,13 @@ dependencies = [ [[package]] name = "yellowstone-grpc-client" -version = "1.15.0" +version = "1.15.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "978d1379db10aa5e430e305f5a01598439d3414ef808443f9f92d1201dacda65" +checksum = "b7945d9c2fee7b5bb2da9d472223f693c68448f56183b25cc80b746e9562a81c" dependencies = [ "bytes", "futures", - "thiserror", + "thiserror 1.0.69", "tonic", "tonic-health", "yellowstone-grpc-proto", @@ -9265,24 +9300,89 @@ dependencies = [ "tonic-build", ] +[[package]] +name = "yoke" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40" +dependencies = [ + "serde", + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.100", + "synstructure 0.13.1", +] + +[[package]] +name = "zerocopy" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" +dependencies = [ + "zerocopy-derive 0.7.35", +] + [[package]] name = "zerocopy" -version = "0.7.32" +version = "0.8.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2586fea28e186957ef732a5f8b3be2da217d65c5969d4b1e17f973ebbe876879" +dependencies = [ + "zerocopy-derive 0.8.24", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74d4d3961e53fa4c9a25a8637fc2bfaf2595b3d3ae34875568a5cf64787716be" +checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ - "zerocopy-derive", + "proc-macro2", + "quote", + "syn 2.0.100", ] [[package]] name = "zerocopy-derive" -version = "0.7.32" +version = "0.8.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a996a8f63c5c4448cd959ac1bab0aaa3306ccfd060472f85943ee0750f0169be" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.100", +] + +[[package]] +name = "zerofrom" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6" +checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" dependencies = [ "proc-macro2", "quote", - "syn 2.0.59", + "syn 2.0.100", + "synstructure 0.13.1", ] [[package]] @@ -9302,7 +9402,29 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.59", + "syn 2.0.100", +] + +[[package]] +name = "zerovec" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.100", ] [[package]] @@ -9326,9 +9448,9 @@ dependencies = [ [[package]] name = "zstd-sys" -version = "2.0.10+zstd.1.5.6" +version = "2.0.15+zstd.1.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c253a4914af5bafc8fa8c86ee400827e83cf6ec01195ec1f1ed8441bf00d65aa" +checksum = "eb81183ddd97d0c74cedf1d50d85c8d08c1b8b68ee863bdee9e706eedba1a237" dependencies = [ "cc", "pkg-config", diff --git a/Cargo.toml b/Cargo.toml index c5422c9f..a1a5eeca 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -34,10 +34,13 @@ name = "photon-tree-validator" path = "src/tools/tree_validator/main.rs" [dependencies] +ark-serialize = "0.5" +ark-bn254 = "0.5" + anchor-lang = "0.29.0" anyhow = "1.0.79" async-std = { version = "1", features = ["attributes", "tokio1"] } -async-trait = "0.1.53" +async-trait = "0.1.85" base64 = "0.21.0" borsh = "0.10.3" bs58 = "0.4.0" @@ -45,68 +48,77 @@ byteorder = "1.5.0" cadence-macros = "1.2.0" clap = { "version" = "4.5.2", features = ["derive"] } dirs = "5.0.1" -env_logger = "0.10.0" futures = "0.3.30" hyper = "0.14.23" -indexmap = "2.2.6" insta = { version = "1.34.0", features = ["json"] } itertools = "0.12.1" jsonrpsee = { version = "0.16.2", features = ["server", "macros"] } jsonrpsee-core = { version = "0.16.2", features = ["server"] } lazy_static = "1.4.0" -light-poseidon = "0.2.0" log = "0.4.17" once_cell = "1.19.0" rstest = "0.18.2" sea-orm = { version = "0.10.6", features = [ - "macros", - "runtime-tokio-rustls", - "sqlx-postgres", - "sqlx-sqlite", - "with-chrono", - "mock", + "macros", + "runtime-tokio-rustls", + "sqlx-postgres", + "sqlx-sqlite", + "with-chrono", + "mock", ] } bytes = "1.7.1" sea-orm-migration = { version = "0.10.6", features = [ - "runtime-tokio-rustls", - "sqlx-postgres", + "runtime-tokio-rustls", + "sqlx-postgres", ] } -serde = "1.0.140" +serde = { version = "1.0.217", features = ["derive"] } serde_json = "1.0.82" + solana-client = "1.18.0" solana-program = "1.18.0" solana-sdk = "1.18.0" +solana-pubkey = "2.3.0" + solana-transaction-status = "1.18.0" -light-concurrent-merkle-tree = "=1.1.0" -light-sdk = "0.11.0" + +light-poseidon = "0.3.0" +light-batched-merkle-tree = { git = "https://github.com/Lightprotocol/light-protocol", rev = "368f9f08272db78c74b2ade1a1c2fead27dd0a96" } +light-compressed-account = { git = "https://github.com/Lightprotocol/light-protocol", rev = "368f9f08272db78c74b2ade1a1c2fead27dd0a96" } +light-concurrent-merkle-tree = { git = "https://github.com/Lightprotocol/light-protocol", rev = "368f9f08272db78c74b2ade1a1c2fead27dd0a96" } +light-hasher = { git = "https://github.com/Lightprotocol/light-protocol", rev = "368f9f08272db78c74b2ade1a1c2fead27dd0a96" } +light-merkle-tree-metadata = { git = "https://github.com/Lightprotocol/light-protocol", rev = "368f9f08272db78c74b2ade1a1c2fead27dd0a96" } +light-sdk = { git = "https://github.com/Lightprotocol/light-protocol", rev = "368f9f08272db78c74b2ade1a1c2fead27dd0a96" } + sqlx = { version = "0.6.2", features = [ - "macros", - "runtime-tokio-rustls", - "postgres", - "sqlite", - "uuid", - "offline", - "json", + "macros", + "runtime-tokio-rustls", + "postgres", + "sqlite", + "uuid", + "offline", + "json", ] } thiserror = "1.0.31" # time pinned because of https://github.com/launchbadge/sqlx/issues/3189 -ark-bn254 = "0.4.0" hex = "0.4.3" num-bigint = "0.4.4" num-traits = "0.2.18" num_enum = "0.7.2" reqwest = { version = "0.12.4", features = ["stream"] } -time = "0.3.36" -tokio = { version = "1.23.0", features = ["full"] } +tokio = { version = "1.43.0", features = ["full"] } tower = { version = "0.4.13", features = ["full"] } tower-http = { version = "0.3.5", features = ["full"] } -tracing = "0.1.35" +tracing = "0.1.41" tracing-subscriber = { version = "0.3.16", features = [ - "json", - "env-filter", - "ansi", + "json", + "env-filter", + "ansi", +] } +utoipa = { version = "4.2.0", features = [ + "yaml", + "chrono", + "non_strict_integers", ] } -utoipa = { version = "4.2.0", features = ["yaml", "chrono"] } yellowstone-grpc-client = "1.15.0" yellowstone-grpc-proto = "1.14.0" cadence = "1.4.0" @@ -114,13 +126,12 @@ async-stream = "0.3.5" rand = "0.8.5" bincode = "1.3.3" rust-s3 = "0.34.0" -lru = "0.12.0" -light-client = "0.9.1" + [dev-dependencies] function_name = "0.3.0" serial_test = "2.0.0" - +light-merkle-tree-reference = { git = "https://github.com/Lightprotocol/light-protocol", rev = "368f9f08272db78c74b2ade1a1c2fead27dd0a96" } [profile.dev] # Do not produce debug info for ~40% faster incremental compilation. diff --git a/generate_api.sh b/generate_api.sh new file mode 100755 index 00000000..b95d79d1 --- /dev/null +++ b/generate_api.sh @@ -0,0 +1,9 @@ +#!/bin/bash + +rm -rf ../light-protocol/sdk-libs/photon-api + +npx @openapitools/openapi-generator-cli generate \ + -i src/openapi/specs/api.yaml \ + -g rust \ + -o ../light-protocol/sdk-libs/photon-api \ + --additional-properties=preferUnsignedInt=true,packageName=photon-api diff --git a/openapitools.json b/openapitools.json new file mode 100644 index 00000000..cfe74d51 --- /dev/null +++ b/openapitools.json @@ -0,0 +1,7 @@ +{ + "$schema": "./node_modules/@openapitools/openapi-generator-cli/config.schema.json", + "spaces": 2, + "generator-cli": { + "version": "7.5.0" + } +} diff --git a/src/api/api.rs b/src/api/api.rs index 3ad4ff8d..faf5f835 100644 --- a/src/api/api.rs +++ b/src/api/api.rs @@ -1,21 +1,19 @@ -use std::sync::Arc; - -use sea_orm::{ConnectionTrait, DatabaseConnection, Statement}; -use solana_client::nonblocking::rpc_client::RpcClient; -use utoipa::openapi::{ObjectBuilder, RefOr, Schema, SchemaType}; -use utoipa::ToSchema; - -use crate::api::method::get_validity_proof::GetValidityProofRequestDocumentation; -use crate::api::method::utils::GetNonPaginatedSignaturesResponse; -use crate::common::typedefs::unsigned_integer::UnsignedInteger; - -use super::method::get_compressed_account::AccountResponse; +use super::method::get_compressed_account::{ + get_compressed_account, get_compressed_account_v2, AccountResponse, AccountResponseV2, +}; use super::method::get_compressed_balance_by_owner::{ get_compressed_balance_by_owner, GetCompressedBalanceByOwnerRequest, }; use super::method::get_compressed_mint_token_holders::{ get_compressed_mint_token_holders, GetCompressedMintTokenHoldersRequest, OwnerBalancesResponse, }; +use super::method::get_compressed_token_accounts_by_delegate::{ + get_compressed_account_token_accounts_by_delegate, + get_compressed_account_token_accounts_by_delegate_v2, +}; +use super::method::get_compressed_token_accounts_by_owner::{ + get_compressed_token_accounts_by_owner, get_compressed_token_accounts_by_owner_v2, +}; use super::method::get_compressed_token_balances_by_owner::{ get_compressed_token_balances_by_owner, get_compressed_token_balances_by_owner_v2, GetCompressedTokenBalancesByOwnerRequest, TokenBalancesResponse, TokenBalancesResponseV2, @@ -32,53 +30,73 @@ use super::method::get_compression_signatures_for_token_owner::{ }; use super::method::get_latest_compression_signatures::get_latest_compression_signatures; use super::method::get_latest_non_voting_signatures::get_latest_non_voting_signatures; +use super::method::get_multiple_compressed_accounts::{ + get_multiple_compressed_accounts, get_multiple_compressed_accounts_v2, + GetMultipleCompressedAccountsRequest, GetMultipleCompressedAccountsResponse, + GetMultipleCompressedAccountsResponseV2, +}; use super::method::get_multiple_new_address_proofs::{ get_multiple_new_address_proofs, get_multiple_new_address_proofs_v2, AddressList, AddressListWithTrees, GetMultipleNewAddressProofsResponse, }; use super::method::get_transaction_with_compression_info::{ - get_transaction_with_compression_info, GetTransactionRequest, GetTransactionResponse, + get_transaction_with_compression_info, get_transaction_with_compression_info_v2, + GetTransactionRequest, GetTransactionResponse, GetTransactionResponseV2, }; -use super::method::get_validity_proof::{ - get_validity_proof, GetValidityProofRequest, GetValidityProofResponse, -}; -use super::method::utils::{AccountBalanceResponse, GetPaginatedSignaturesResponse, HashRequest}; use super::method::utils::{ - GetLatestSignaturesRequest, GetNonPaginatedSignaturesResponseWithError, + CompressedAccountRequest, GetCompressedTokenAccountsByDelegate, + GetCompressedTokenAccountsByOwner, }; use super::{ error::PhotonApiError, method::{ - get_compressed_account::get_compressed_account, get_compressed_account_balance::get_compressed_account_balance, get_compressed_account_proof::{ get_compressed_account_proof, GetCompressedAccountProofResponse, }, - get_compressed_accounts_by_owner::{ - get_compressed_accounts_by_owner, GetCompressedAccountsByOwnerRequest, - GetCompressedAccountsByOwnerResponse, - }, get_compressed_token_account_balance::{ get_compressed_token_account_balance, GetCompressedTokenAccountBalanceResponse, }, - get_compressed_token_accounts_by_delegate::get_compressed_account_token_accounts_by_delegate, - get_compressed_token_accounts_by_owner::get_compressed_token_accounts_by_owner, get_indexer_health::get_indexer_health, get_indexer_slot::get_indexer_slot, - get_multiple_compressed_account_proofs::{ - get_multiple_compressed_account_proofs, GetMultipleCompressedAccountProofsResponse, - HashList, - }, - get_multiple_compressed_accounts::{ - get_multiple_compressed_accounts, GetMultipleCompressedAccountsRequest, - GetMultipleCompressedAccountsResponse, - }, - utils::{ - CompressedAccountRequest, GetCompressedTokenAccountsByDelegate, - GetCompressedTokenAccountsByOwner, TokenAccountListResponse, - }, }, }; +use crate::api::method::get_batch_address_update_info::{ + get_batch_address_update_info, GetBatchAddressUpdateInfoRequest, + GetBatchAddressUpdateInfoResponse, +}; +use crate::api::method::get_compressed_account_proof::{ + get_compressed_account_proof_v2, GetCompressedAccountProofResponseV2, +}; +use crate::api::method::get_compressed_accounts_by_owner::{ + get_compressed_accounts_by_owner, get_compressed_accounts_by_owner_v2, + GetCompressedAccountsByOwnerRequest, GetCompressedAccountsByOwnerResponse, + GetCompressedAccountsByOwnerResponseV2, +}; +use crate::api::method::get_multiple_compressed_account_proofs::{ + get_multiple_compressed_account_proofs, get_multiple_compressed_account_proofs_v2, + GetMultipleCompressedAccountProofsResponse, GetMultipleCompressedAccountProofsResponseV2, + HashList, +}; +use crate::api::method::get_queue_elements::{ + get_queue_elements, GetQueueElementsRequest, GetQueueElementsResponse, +}; +use crate::api::method::get_validity_proof::{ + get_validity_proof, get_validity_proof_v2, GetValidityProofRequest, + GetValidityProofRequestDocumentation, GetValidityProofRequestV2, GetValidityProofResponse, + GetValidityProofResponseV2, +}; +use crate::api::method::utils::{ + AccountBalanceResponse, GetLatestSignaturesRequest, GetNonPaginatedSignaturesResponse, + GetNonPaginatedSignaturesResponseWithError, GetPaginatedSignaturesResponse, HashRequest, + TokenAccountListResponse, TokenAccountListResponseV2, +}; +use crate::common::typedefs::unsigned_integer::UnsignedInteger; +use sea_orm::{ConnectionTrait, DatabaseConnection, Statement}; +use solana_client::nonblocking::rpc_client::RpcClient; +use std::sync::Arc; +use utoipa::openapi::{ObjectBuilder, RefOr, Schema, SchemaType}; +use utoipa::ToSchema; pub struct PhotonApi { db_conn: Arc, @@ -129,6 +147,13 @@ impl PhotonApi { get_compressed_account(&self.db_conn, request).await } + pub async fn get_compressed_account_v2( + &self, + request: CompressedAccountRequest, + ) -> Result { + get_compressed_account_v2(&self.db_conn, request).await + } + pub async fn get_compressed_account_proof( &self, request: HashRequest, @@ -136,6 +161,13 @@ impl PhotonApi { get_compressed_account_proof(&self.db_conn, request).await } + pub async fn get_compressed_account_proof_v2( + &self, + request: HashRequest, + ) -> Result { + get_compressed_account_proof_v2(&self.db_conn, request).await + } + pub async fn get_multiple_compressed_account_proofs( &self, request: HashList, @@ -143,6 +175,13 @@ impl PhotonApi { get_multiple_compressed_account_proofs(self.db_conn.as_ref(), request).await } + pub async fn get_multiple_compressed_account_proofs_v2( + &self, + request: HashList, + ) -> Result { + get_multiple_compressed_account_proofs_v2(self.db_conn.as_ref(), request).await + } + pub async fn get_multiple_new_address_proofs( &self, request: AddressList, @@ -164,6 +203,13 @@ impl PhotonApi { get_compressed_token_accounts_by_owner(&self.db_conn, request).await } + pub async fn get_compressed_token_accounts_by_owner_v2( + &self, + request: GetCompressedTokenAccountsByOwner, + ) -> Result { + get_compressed_token_accounts_by_owner_v2(&self.db_conn, request).await + } + pub async fn get_compressed_token_accounts_by_delegate( &self, request: GetCompressedTokenAccountsByDelegate, @@ -171,6 +217,13 @@ impl PhotonApi { get_compressed_account_token_accounts_by_delegate(&self.db_conn, request).await } + pub async fn get_compressed_token_accounts_by_delegate_v2( + &self, + request: GetCompressedTokenAccountsByDelegate, + ) -> Result { + get_compressed_account_token_accounts_by_delegate_v2(&self.db_conn, request).await + } + pub async fn get_compressed_balance_by_owner( &self, request: GetCompressedBalanceByOwnerRequest, @@ -214,6 +267,13 @@ impl PhotonApi { get_indexer_slot(self.db_conn.as_ref()).await } + pub async fn get_queue_elements( + &self, + request: GetQueueElementsRequest, + ) -> Result { + get_queue_elements(self.db_conn.as_ref(), request).await + } + pub async fn get_compressed_accounts_by_owner( &self, request: GetCompressedAccountsByOwnerRequest, @@ -221,6 +281,13 @@ impl PhotonApi { get_compressed_accounts_by_owner(self.db_conn.as_ref(), request).await } + pub async fn get_compressed_accounts_by_owner_v2( + &self, + request: GetCompressedAccountsByOwnerRequest, + ) -> Result { + get_compressed_accounts_by_owner_v2(self.db_conn.as_ref(), request).await + } + pub async fn get_compressed_mint_token_holders( &self, request: GetCompressedMintTokenHoldersRequest, @@ -235,6 +302,13 @@ impl PhotonApi { get_multiple_compressed_accounts(self.db_conn.as_ref(), request).await } + pub async fn get_multiple_compressed_accounts_v2( + &self, + request: GetMultipleCompressedAccountsRequest, + ) -> Result { + get_multiple_compressed_accounts_v2(self.db_conn.as_ref(), request).await + } + pub async fn get_compression_signatures_for_account( &self, request: HashRequest, @@ -271,6 +345,14 @@ impl PhotonApi { .await } + pub async fn get_transaction_with_compression_info_v2( + &self, + request: GetTransactionRequest, + ) -> Result { + get_transaction_with_compression_info_v2(self.db_conn.as_ref(), &self.rpc_client, request) + .await + } + pub async fn get_validity_proof( &self, request: GetValidityProofRequest, @@ -278,6 +360,13 @@ impl PhotonApi { get_validity_proof(self.db_conn.as_ref(), &self.prover_url, request).await } + pub async fn get_validity_proof_v2( + &self, + request: GetValidityProofRequestV2, + ) -> Result { + get_validity_proof_v2(self.db_conn.as_ref(), &self.prover_url, request).await + } + pub async fn get_latest_compression_signatures( &self, request: GetLatestSignaturesRequest, @@ -292,13 +381,35 @@ impl PhotonApi { get_latest_non_voting_signatures(self.db_conn.as_ref(), request).await } + pub async fn get_batch_address_update_info( + &self, + request: GetBatchAddressUpdateInfoRequest, + ) -> Result { + get_batch_address_update_info(self.db_conn.as_ref(), request).await + } + pub fn method_api_specs() -> Vec { vec![ + OpenApiSpec { + name: "getBatchAddressUpdateInfo".to_string(), + request: Some(GetBatchAddressUpdateInfoRequest::schema().1), + response: GetBatchAddressUpdateInfoResponse::schema().1, + }, + OpenApiSpec { + name: "getQueueElements".to_string(), + request: Some(GetQueueElementsRequest::schema().1), + response: GetQueueElementsResponse::schema().1, + }, OpenApiSpec { name: "getCompressedAccount".to_string(), request: Some(CompressedAccountRequest::adjusted_schema()), response: AccountResponse::schema().1, }, + OpenApiSpec { + name: "getCompressedAccountV2".to_string(), + request: Some(CompressedAccountRequest::adjusted_schema()), + response: AccountResponseV2::schema().1, + }, OpenApiSpec { name: "getCompressedAccountBalance".to_string(), request: Some(CompressedAccountRequest::adjusted_schema()), @@ -329,6 +440,11 @@ impl PhotonApi { request: Some(GetCompressedAccountsByOwnerRequest::schema().1), response: GetCompressedAccountsByOwnerResponse::schema().1, }, + OpenApiSpec { + name: "getCompressedAccountsByOwnerV2".to_string(), + request: Some(GetCompressedAccountsByOwnerRequest::schema().1), + response: GetCompressedAccountsByOwnerResponseV2::schema().1, + }, OpenApiSpec { name: "getCompressedMintTokenHolders".to_string(), request: Some(GetCompressedMintTokenHoldersRequest::schema().1), @@ -339,31 +455,61 @@ impl PhotonApi { request: Some(GetMultipleCompressedAccountsRequest::adjusted_schema()), response: GetMultipleCompressedAccountsResponse::schema().1, }, + OpenApiSpec { + name: "getMultipleCompressedAccountsV2".to_string(), + request: Some(GetMultipleCompressedAccountsRequest::adjusted_schema()), + response: GetMultipleCompressedAccountsResponseV2::schema().1, + }, OpenApiSpec { name: "getCompressedTokenAccountsByOwner".to_string(), request: Some(GetCompressedTokenAccountsByOwner::schema().1), response: TokenAccountListResponse::schema().1, }, + OpenApiSpec { + name: "getCompressedTokenAccountsByOwnerV2".to_string(), + request: Some(GetCompressedTokenAccountsByOwner::schema().1), + response: TokenAccountListResponseV2::schema().1, + }, OpenApiSpec { name: "getCompressedTokenAccountsByDelegate".to_string(), request: Some(GetCompressedTokenAccountsByDelegate::schema().1), response: TokenAccountListResponse::schema().1, }, + OpenApiSpec { + name: "getCompressedTokenAccountsByDelegateV2".to_string(), + request: Some(GetCompressedTokenAccountsByDelegate::schema().1), + response: TokenAccountListResponseV2::schema().1, + }, OpenApiSpec { name: "getTransactionWithCompressionInfo".to_string(), request: Some(GetTransactionRequest::schema().1), response: GetTransactionResponse::schema().1, }, + OpenApiSpec { + name: "getTransactionWithCompressionInfoV2".to_string(), + request: Some(GetTransactionRequest::schema().1), + response: GetTransactionResponseV2::schema().1, + }, OpenApiSpec { name: "getCompressedAccountProof".to_string(), request: Some(HashRequest::schema().1), response: GetCompressedAccountProofResponse::schema().1, }, + OpenApiSpec { + name: "getCompressedAccountProofV2".to_string(), + request: Some(HashRequest::schema().1), + response: GetCompressedAccountProofResponseV2::schema().1, + }, OpenApiSpec { name: "getMultipleCompressedAccountProofs".to_string(), request: Some(HashList::schema().1), response: GetMultipleCompressedAccountProofsResponse::schema().1, }, + OpenApiSpec { + name: "getMultipleCompressedAccountProofsV2".to_string(), + request: Some(HashList::schema().1), + response: GetMultipleCompressedAccountProofsResponseV2::schema().1, + }, OpenApiSpec { name: "getMultipleNewAddressProofs".to_string(), request: Some(AddressList::schema().1), @@ -379,6 +525,11 @@ impl PhotonApi { request: Some(GetValidityProofRequestDocumentation::schema().1), response: GetValidityProofResponse::schema().1, }, + OpenApiSpec { + name: "getValidityProofV2".to_string(), + request: Some(GetValidityProofRequestDocumentation::schema().1), + response: GetValidityProofResponseV2::schema().1, + }, OpenApiSpec { name: "getCompressionSignaturesForAccount".to_string(), request: Some(HashRequest::schema().1), diff --git a/src/api/error.rs b/src/api/error.rs index 2bf6ff11..dd2670b9 100644 --- a/src/api/error.rs +++ b/src/api/error.rs @@ -4,6 +4,7 @@ use cadence_macros::statsd_count; use jsonrpsee::core::Error as RpcError; use jsonrpsee::types::error::CallError; use log::error; +use solana_pubkey::ParsePubkeyError as SolanaPubkeyParseError; use solana_sdk::pubkey::ParsePubkeyError; use thiserror::Error; @@ -84,6 +85,12 @@ impl From for PhotonApiError { } } +impl From for PhotonApiError { + fn from(_error: SolanaPubkeyParseError) -> Self { + PhotonApiError::UnexpectedError("Invalid public key in database".to_string()) + } +} + fn invalid_request(e: PhotonApiError) -> RpcError { RpcError::Call(CallError::from_std_error(e)) } diff --git a/src/api/method/get_batch_address_update_info.rs b/src/api/method/get_batch_address_update_info.rs new file mode 100644 index 00000000..f88a9bbe --- /dev/null +++ b/src/api/method/get_batch_address_update_info.rs @@ -0,0 +1,155 @@ +use sea_orm::{ConnectionTrait, DatabaseBackend, DatabaseConnection, Statement, TransactionTrait}; +use serde::{Deserialize, Serialize}; +use utoipa::ToSchema; + +use crate::api::error::PhotonApiError; +use crate::api::method::get_multiple_new_address_proofs::{ + get_multiple_new_address_proofs_helper, AddressWithTree, MerkleContextWithNewAddressProof, +}; +use crate::common::typedefs::context::Context; +use crate::common::typedefs::hash::Hash; +use crate::common::typedefs::serializable_pubkey::SerializablePubkey; +use crate::ingester::parser::tree_info::TreeInfo; +use crate::ingester::persist::persisted_indexed_merkle_tree::format_bytes; +use crate::ingester::persist::persisted_state_tree::get_subtrees; + +#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, ToSchema, Default)] +#[serde(deny_unknown_fields, rename_all = "camelCase")] +pub struct GetBatchAddressUpdateInfoRequest { + pub tree: SerializablePubkey, + pub start_offset: Option, + pub batch_size: u16, +} + +#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, ToSchema, Default)] +#[serde(deny_unknown_fields, rename_all = "camelCase")] +pub struct AddressQueueIndex { + pub address: SerializablePubkey, + pub queue_index: u64, +} + +#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, ToSchema)] +#[serde(deny_unknown_fields, rename_all = "camelCase")] +pub struct GetBatchAddressUpdateInfoResponse { + pub context: Context, + pub start_index: u64, + pub addresses: Vec, + pub non_inclusion_proofs: Vec, + pub subtrees: Vec<[u8; 32]>, +} + +#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, ToSchema)] +#[serde(deny_unknown_fields, rename_all = "camelCase")] +pub struct GetBatchAddressUpdateInfoResponseValue { + pub proof: Vec, + pub root: Hash, + pub leaf_index: u64, + pub leaf: Hash, + pub tree: Hash, + pub root_seq: u64, + pub tx_hash: Option, + pub account_hash: Hash, +} + +pub async fn get_batch_address_update_info( + conn: &DatabaseConnection, + request: GetBatchAddressUpdateInfoRequest, +) -> Result { + let batch_size = request.batch_size; + let merkle_tree_pubkey = request.tree; + let tree_info = TreeInfo::get(&merkle_tree_pubkey.to_string()) + .ok_or_else(|| PhotonApiError::UnexpectedError("Failed to get tree info".to_string()))? + .clone(); + + let merkle_tree = SerializablePubkey::from(merkle_tree_pubkey.0).to_bytes_vec(); + + let context = Context::extract(conn).await?; + let tx = conn.begin().await?; + if tx.get_database_backend() == DatabaseBackend::Postgres { + tx.execute(Statement::from_string( + tx.get_database_backend(), + "SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;".to_string(), + )) + .await?; + } + + // 1. Get batch_start_index + let max_index_stmt = Statement::from_string( + tx.get_database_backend(), + format!( + "SELECT COALESCE(MAX(leaf_index + 1), 1) as max_index FROM indexed_trees WHERE tree = {}", + format_bytes(merkle_tree.clone(), tx.get_database_backend()) + ), + ); + let max_index_result = tx.query_one(max_index_stmt).await?; + let batch_start_index = match max_index_result { + Some(row) => row.try_get::("", "max_index")? as usize, + None => 1, + }; + + let offset_condition = match request.start_offset { + Some(start_offset) => format!("AND queue_index >= {}", start_offset), + None => String::new(), + }; + + // 2. Get queue elements from the address_queues table + let address_queue_stmt = Statement::from_string( + tx.get_database_backend(), + format!( + "SELECT tree, address, queue_index FROM address_queues + WHERE tree = {} + {} + ORDER BY queue_index ASC + LIMIT {}", + format_bytes(merkle_tree.clone(), tx.get_database_backend()), + offset_condition, + batch_size + ), + ); + + let queue_results = tx.query_all(address_queue_stmt).await?; + + // Early exit if no elements in the queue + if queue_results.is_empty() { + tx.commit().await?; + return Ok(GetBatchAddressUpdateInfoResponse { + context, + addresses: Vec::new(), + non_inclusion_proofs: Vec::new(), + subtrees: Vec::new(), + start_index: batch_start_index as u64, + }); + } + + // 3. Build arrays for addresses and addresses with trees. + let mut addresses = Vec::new(); + let mut addresses_with_trees = Vec::new(); + let serializable_tree = SerializablePubkey::try_from(merkle_tree.clone())?; + + for row in &queue_results { + let address: Vec = row.try_get("", "address")?; + let queue_index: i64 = row.try_get("", "queue_index")?; + let address_pubkey = SerializablePubkey::try_from(address.clone())?; + addresses_with_trees.push(AddressWithTree { + address: address_pubkey, + tree: serializable_tree, + }); + addresses.push(AddressQueueIndex { + address: address_pubkey, + queue_index: queue_index as u64, + }); + } + + // 4. Get non-inclusion proofs for each address. + let non_inclusion_proofs = + get_multiple_new_address_proofs_helper(&tx, addresses_with_trees, false).await?; + let subtrees = get_subtrees(&tx, merkle_tree, tree_info.height as usize).await?; + + Ok(GetBatchAddressUpdateInfoResponse { + context, + start_index: batch_start_index as u64, + addresses, + non_inclusion_proofs, + subtrees, + }) +} diff --git a/src/api/method/get_compressed_account.rs b/src/api/method/get_compressed_account.rs index 9f7f8c6c..be46bbf0 100644 --- a/src/api/method/get_compressed_account.rs +++ b/src/api/method/get_compressed_account.rs @@ -1,13 +1,13 @@ -use crate::common::typedefs::account::Account; +use crate::common::typedefs::account::{Account, AccountV2}; use crate::dao::generated::accounts; +use super::super::error::PhotonApiError; +use super::utils::{AccountDataTable, CompressedAccountRequest}; +use crate::common::typedefs::context::Context; use sea_orm::{DatabaseConnection, EntityTrait, QueryFilter}; use serde::Serialize; use utoipa::ToSchema; -use super::super::error::PhotonApiError; -use super::utils::{parse_account_model, AccountDataTable, CompressedAccountRequest, Context}; - // We do not use generics to simply documentation generation. #[derive(Debug, Clone, PartialEq, Eq, Serialize, ToSchema)] #[serde(deny_unknown_fields, rename_all = "camelCase")] @@ -27,10 +27,36 @@ pub async fn get_compressed_account( .one(conn) .await?; - let account = account_model.map(parse_account_model).transpose()?; + let account = account_model.map(TryFrom::try_from).transpose()?; Ok(AccountResponse { value: { account }, context, }) } + +#[derive(Debug, Clone, PartialEq, Eq, Serialize, ToSchema)] +#[serde(deny_unknown_fields, rename_all = "camelCase")] +pub struct AccountResponseV2 { + pub context: Context, + pub value: Option, +} + +pub async fn get_compressed_account_v2( + conn: &DatabaseConnection, + request: CompressedAccountRequest, +) -> Result { + let context = Context::extract(conn).await?; + let id = request.parse_id()?; + let account_model = accounts::Entity::find() + .filter(id.filter(AccountDataTable::Accounts)) + .one(conn) + .await?; + + let account = account_model.map(TryFrom::try_from).transpose()?; + + Ok(AccountResponseV2 { + value: { account }, + context, + }) +} diff --git a/src/api/method/get_compressed_account_balance.rs b/src/api/method/get_compressed_account_balance.rs index 131f9b25..418d5c4b 100644 --- a/src/api/method/get_compressed_account_balance.rs +++ b/src/api/method/get_compressed_account_balance.rs @@ -1,12 +1,12 @@ +use super::super::error::PhotonApiError; +use super::utils::CompressedAccountRequest; +use super::utils::{parse_decimal, AccountBalanceResponse, AccountDataTable, LamportModel}; +use crate::common::typedefs::context::Context; use crate::common::typedefs::unsigned_integer::UnsignedInteger; use crate::dao::generated::accounts; use sea_orm::{DatabaseConnection, EntityTrait, QueryFilter, QuerySelect}; use sqlx::types::Decimal; -use super::super::error::PhotonApiError; -use super::utils::{parse_decimal, AccountBalanceResponse, AccountDataTable, LamportModel}; -use super::utils::{CompressedAccountRequest, Context}; - pub async fn get_compressed_account_balance( conn: &DatabaseConnection, request: CompressedAccountRequest, diff --git a/src/api/method/get_compressed_account_proof/mod.rs b/src/api/method/get_compressed_account_proof/mod.rs new file mode 100644 index 00000000..0084e99f --- /dev/null +++ b/src/api/method/get_compressed_account_proof/mod.rs @@ -0,0 +1,11 @@ +mod v1; +mod v2; + +pub use v1::{ + get_compressed_account_proof, GetCompressedAccountProofResponse, + GetCompressedAccountProofResponseValue, +}; +pub use v2::{ + get_compressed_account_proof_v2, GetCompressedAccountProofResponseV2, + GetCompressedAccountProofResponseValueV2, +}; diff --git a/src/api/method/get_compressed_account_proof.rs b/src/api/method/get_compressed_account_proof/v1.rs similarity index 50% rename from src/api/method/get_compressed_account_proof.rs rename to src/api/method/get_compressed_account_proof/v1.rs index c08228e5..a62b47cd 100644 --- a/src/api/method/get_compressed_account_proof.rs +++ b/src/api/method/get_compressed_account_proof/v1.rs @@ -1,21 +1,43 @@ +use crate::api::error::PhotonApiError; +use crate::api::method::utils::HashRequest; +use crate::common::typedefs::context::Context; +use crate::common::typedefs::hash::Hash; +use crate::common::typedefs::serializable_pubkey::SerializablePubkey; +use crate::ingester::persist::{get_multiple_compressed_leaf_proofs, MerkleProofWithContext}; use sea_orm::{ConnectionTrait, DatabaseBackend, DatabaseConnection, Statement, TransactionTrait}; use serde::{Deserialize, Serialize}; use utoipa::ToSchema; -use crate::ingester::persist::persisted_state_tree::{ - get_multiple_compressed_leaf_proofs, MerkleProofWithContext, -}; - -use super::{ - super::error::PhotonApiError, - utils::{Context, HashRequest}, -}; - #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, ToSchema)] #[serde(deny_unknown_fields, rename_all = "camelCase")] pub struct GetCompressedAccountProofResponse { pub context: Context, - pub value: MerkleProofWithContext, + pub value: GetCompressedAccountProofResponseValue, +} + +#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, ToSchema)] +#[serde(deny_unknown_fields, rename_all = "camelCase")] +#[allow(non_snake_case)] +pub struct GetCompressedAccountProofResponseValue { + pub proof: Vec, + pub root: Hash, + pub leaf_index: u32, + pub hash: Hash, + pub merkle_tree: SerializablePubkey, + pub root_seq: u64, +} + +impl From for GetCompressedAccountProofResponseValue { + fn from(proof: MerkleProofWithContext) -> Self { + GetCompressedAccountProofResponseValue { + proof: proof.proof, + root: proof.root, + leaf_index: proof.leaf_index, + hash: proof.hash, + merkle_tree: proof.merkle_tree, + root_seq: proof.root_seq, + } + } } pub async fn get_compressed_account_proof( @@ -37,7 +59,7 @@ pub async fn get_compressed_account_proof( .into_iter() .next() .map(|account| GetCompressedAccountProofResponse { - value: account, + value: account.into(), context, }) .ok_or(PhotonApiError::RecordNotFound( diff --git a/src/api/method/get_compressed_account_proof/v2.rs b/src/api/method/get_compressed_account_proof/v2.rs new file mode 100644 index 00000000..5aa35342 --- /dev/null +++ b/src/api/method/get_compressed_account_proof/v2.rs @@ -0,0 +1,141 @@ +use crate::api::error::PhotonApiError; +use crate::api::method::get_validity_proof::TreeContextInfo; +use crate::api::method::utils::HashRequest; +use crate::common::typedefs::context::Context; +use crate::common::typedefs::hash::Hash; +use crate::common::typedefs::serializable_pubkey::SerializablePubkey; +use crate::dao::generated::{accounts, state_trees}; +use crate::ingester::persist::{ + get_multiple_compressed_leaf_proofs, get_multiple_compressed_leaf_proofs_by_indices, + MerkleProofWithContext, +}; +use jsonrpsee_core::Serialize; +use sea_orm::{ + ColumnTrait, ConnectionTrait, DatabaseBackend, DatabaseConnection, EntityTrait, QueryFilter, + Statement, TransactionTrait, +}; +use serde::Deserialize; +use utoipa::ToSchema; + +#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, ToSchema)] +#[serde(deny_unknown_fields, rename_all = "camelCase")] +pub struct GetCompressedAccountProofResponseV2 { + pub context: Context, + pub value: GetCompressedAccountProofResponseValueV2, +} + +#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, ToSchema)] +#[serde(deny_unknown_fields, rename_all = "camelCase")] +pub struct GetCompressedAccountProofResponseValueV2 { + pub proof: Vec, + pub root: Hash, + pub leaf_index: u32, + pub hash: Hash, + pub root_seq: u64, + pub prove_by_index: bool, + pub tree_context: TreeContextInfo, +} + +impl From for GetCompressedAccountProofResponseValueV2 { + fn from(proof: MerkleProofWithContext) -> Self { + GetCompressedAccountProofResponseValueV2 { + proof: proof.proof, + root: proof.root, + leaf_index: proof.leaf_index, + hash: proof.hash, + root_seq: proof.root_seq, + prove_by_index: false, + // Default values to be overridden as needed + tree_context: TreeContextInfo { + tree_type: 0, + tree: proof.merkle_tree, + queue: Default::default(), + cpi_context: None, + }, + } + } +} + +pub async fn get_compressed_account_proof_v2( + conn: &DatabaseConnection, + request: HashRequest, +) -> Result { + let context = Context::extract(conn).await?; + let hash = request.hash; + let tx = conn.begin().await?; + if tx.get_database_backend() == DatabaseBackend::Postgres { + tx.execute(Statement::from_string( + tx.get_database_backend(), + "SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;".to_string(), + )) + .await?; + } + + let account = accounts::Entity::find() + .filter(accounts::Column::Hash.eq(hash.to_vec())) + .one(&tx) + .await?; + + if account.is_none() { + return Err(PhotonApiError::RecordNotFound( + "Account not found".to_string(), + )); + } + + let leaf_node = state_trees::Entity::find() + .filter( + state_trees::Column::Hash + .eq(hash.to_vec()) + .and(state_trees::Column::Level.eq(0)), + ) + .one(&tx) + .await?; + + // Determine how to generate the proof based on available data + let mut result: GetCompressedAccountProofResponseValueV2 = if leaf_node.is_some() { + let mut response: GetCompressedAccountProofResponseValueV2 = + get_multiple_compressed_leaf_proofs(&tx, vec![hash]) + .await? + .into_iter() + .next() + .ok_or(PhotonApiError::RecordNotFound( + "Account not found by hash".to_string(), + ))? + .into(); + response.prove_by_index = false; + response + } else if let Some(account) = account.clone() { + // Use index-based proof if we found the account in a queue but not in state_trees + let leaf_index = account.leaf_index as u64; + let merkle_tree = SerializablePubkey::try_from(account.tree.clone())?; + let mut response: GetCompressedAccountProofResponseValueV2 = + get_multiple_compressed_leaf_proofs_by_indices(&tx, merkle_tree, vec![leaf_index]) + .await? + .into_iter() + .next() + .ok_or(PhotonApiError::RecordNotFound( + "Account not found by index".to_string(), + ))? + .into(); + response.prove_by_index = true; + response + } else { + return Err(PhotonApiError::RecordNotFound( + "Account not found".to_string(), + )); + }; + + // Enrich with account data if available + if let Some(account) = account { + result.tree_context.tree_type = account.tree_type as u16; + result.tree_context.queue = SerializablePubkey::try_from(account.queue)?; + } + + let response = GetCompressedAccountProofResponseV2 { + value: result, + context, + }; + + tx.commit().await?; + Ok(response) +} diff --git a/src/api/method/get_compressed_accounts_by_owner.rs b/src/api/method/get_compressed_accounts_by_owner.rs deleted file mode 100644 index 3743ea93..00000000 --- a/src/api/method/get_compressed_accounts_by_owner.rs +++ /dev/null @@ -1,266 +0,0 @@ -use crate::{ - common::typedefs::{account::Account, bs58_string::Base58String}, - dao::generated::accounts, - ingester::persist::bytes_to_sql_format, -}; -use sea_orm::{ConnectionTrait, DatabaseConnection, FromQueryResult, Statement}; -use serde::{Deserialize, Serialize}; -use utoipa::ToSchema; - -use super::{ - super::error::PhotonApiError, - utils::{Context, Limit, PAGE_LIMIT}, -}; -use crate::common::typedefs::{hash::Hash, serializable_pubkey::SerializablePubkey}; - -use super::utils::parse_account_model; - -// Max filters allowed constant value of 5 -const MAX_FILTERS: usize = 5; -const MAX_CHILD_ACCOUNTS_WITH_FILTERS: usize = 1_000_000; -const SOL_LAYER_ACCOUNTS: [&str; 4] = [ - "S1ay5sk6FVkvsNFZShMw2YK3nfgJZ8tpBBGuHWDZ266", - "2sYfW81EENCMe415CPhE2XzBA5iQf4TXRs31W1KP63YT", - "ARDPkhymCbfdan375FCgPnBJQvUfHeb7nHVdBfwWSxrp", - "2sYfW81EENCMe415CPhE2XzBA5iQf4TXRs31W1KP63YT" -]; - -#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, ToSchema, Default)] -#[serde(deny_unknown_fields, rename_all = "camelCase")] -pub struct Options { - pub cursor: Option, - pub limit: Option, -} - -#[derive(Serialize, Deserialize, Debug, Clone, ToSchema)] -pub struct Memcmp { - pub offset: usize, - pub bytes: Base58String, -} - -#[derive(Serialize, Deserialize, Debug)] -enum FilterInstance { - Memcmp(Memcmp), -} - -#[derive(Serialize, Deserialize, Debug, Clone, ToSchema)] -pub struct FilterSelector { - pub memcmp: Option, -} - -impl FilterSelector { - fn into_filter_instance(self) -> Result { - if let Some(memcmp) = self.memcmp { - Ok(FilterInstance::Memcmp(memcmp)) - } else { - Err(PhotonApiError::ValidationError( - "Filter instance cannot be null".to_string(), - )) - } - } -} - -#[derive(Serialize, Deserialize, Debug, Clone, ToSchema)] -pub struct DataSlice { - pub offset: usize, - pub length: usize, -} - -#[derive(Debug, Clone, Serialize, Deserialize, ToSchema, Default)] -#[serde(deny_unknown_fields, rename_all = "camelCase")] -#[allow(non_snake_case)] -pub struct GetCompressedAccountsByOwnerRequest { - pub owner: SerializablePubkey, - #[serde(default)] - pub filters: Vec, - #[serde(default)] - pub dataSlice: Option, - #[serde(default)] - pub cursor: Option, - #[serde(default)] - pub limit: Option, -} - -#[derive(Debug, Clone, PartialEq, Eq, Serialize, ToSchema, Default)] -#[serde(deny_unknown_fields, rename_all = "camelCase")] -pub struct PaginatedAccountList { - pub items: Vec, - pub cursor: Option, -} - -#[derive(Debug, Clone, PartialEq, Eq, Serialize, ToSchema)] -#[serde(deny_unknown_fields, rename_all = "camelCase")] -pub struct GetCompressedAccountsByOwnerResponse { - pub context: Context, - pub value: PaginatedAccountList, -} - -pub async fn get_compressed_accounts_by_owner( - conn: &DatabaseConnection, - request: GetCompressedAccountsByOwnerRequest, -) -> Result { - let context = Context::extract(conn).await?; - let GetCompressedAccountsByOwnerRequest { - owner, - cursor, - limit, - filters, - dataSlice, - } = request; - - if filters.len() > MAX_FILTERS { - return Err(PhotonApiError::ValidationError(format!( - "Too many filters. The maximum number of filters allowed is {}", - MAX_FILTERS - ))); - } - - - let owner_string = bytes_to_sql_format(conn.get_database_backend(), owner.into()); - if !filters.is_empty() && !SOL_LAYER_ACCOUNTS.contains(&owner.to_string().as_str()) { - let raw_sql = format!( - " - SELECT CASE - WHEN COUNT(*) = {MAX_CHILD_ACCOUNTS_WITH_FILTERS} THEN true - ELSE false - END AS has_too_many_rows - FROM ( - SELECT 1 - FROM accounts - WHERE owner = {owner_string} - AND spent = false - LIMIT {MAX_CHILD_ACCOUNTS_WITH_FILTERS} - ) AS subquery; - " - ); - - let stmt = Statement::from_string(conn.get_database_backend(), raw_sql); - - let result = conn.query_one(stmt).await?; - - match result { - Some(row) => { - let has_too_many_rows: bool = row.try_get("", "has_too_many_rows")?; - if has_too_many_rows { - return Err(PhotonApiError::ValidationError(format!( - "Owner has too many children accounts. The maximum number of accounts allowed with filters is {}", - MAX_CHILD_ACCOUNTS_WITH_FILTERS - ))); - } - } - None => { - return Err(PhotonApiError::UnexpectedError( - "Failed to check if there are more than 100k rows".to_string(), - )); - } - } - } - - let mut filters_strings = vec![]; - filters_strings.push(format!("owner = {owner_string}")); - filters_strings.push("spent = false".to_string()); - - for filter_selector in filters { - match filter_selector.into_filter_instance()? { - FilterInstance::Memcmp(memcmp) => { - let Memcmp { offset, bytes } = memcmp; - let one_based_offset = offset + 1; - let bytes = bytes.0; - let bytes_len = bytes.len(); - let bytes_string = bytes_to_sql_format(conn.get_database_backend(), bytes); - let filter_string = match conn.get_database_backend() { - sea_orm::DatabaseBackend::Postgres => { - format!( - "SUBSTRING(data FROM {one_based_offset} FOR {bytes_len}) = {bytes_string}" - ) - } - sea_orm::DatabaseBackend::Sqlite => { - format!("SUBSTR(data, {one_based_offset}, {bytes_len}) = {bytes_string}") - } - _ => { - panic!("Unsupported database backend"); - } - }; - filters_strings.push(filter_string); - } - } - } - - if let Some(cursor) = cursor { - let cursor_string = bytes_to_sql_format(conn.get_database_backend(), cursor.into()); - filters_strings.push(format!("hash > {cursor_string}")); - } - - let mut query_limit = PAGE_LIMIT; - if let Some(limit) = limit { - query_limit = limit.value(); - } - - let filters = &filters_strings.join(" AND "); - - let data_column = dataSlice - .map(|slice| { - let DataSlice { offset, length } = slice; - let one_based_offset = offset + 1; - match conn.get_database_backend() { - sea_orm::DatabaseBackend::Postgres => { - format!( - "SUBSTRING(data FROM {} FOR {}) AS data", - one_based_offset, length - ) - } - sea_orm::DatabaseBackend::Sqlite => { - format!("SUBSTR(data, {}, {}) AS data", one_based_offset, length) - } - _ => { - panic!("Unsupported database backend"); - } - } - }) - .unwrap_or("data".to_string()); - - let raw_sql = format!( - " - SELECT - hash, - {data_column}, - data_hash, - address, - owner, - tree, - leaf_index, - seq, - slot_created, - spent, - prev_spent, - lamports, - discriminator - FROM accounts - WHERE {filters} - ORDER BY accounts.hash ASC - LIMIT {query_limit} - " - ); - - let result: Vec = accounts::Model::find_by_statement(Statement::from_string( - conn.get_database_backend(), - raw_sql, - )) - .all(conn) - .await?; - - let items = result - .into_iter() - .map(parse_account_model) - .collect::, PhotonApiError>>()?; - - let mut cursor = items.last().map(|u| u.hash.clone()); - if items.len() < query_limit as usize { - cursor = None; - } - - Ok(GetCompressedAccountsByOwnerResponse { - context, - value: PaginatedAccountList { items, cursor }, - }) -} diff --git a/src/api/method/get_compressed_accounts_by_owner/common.rs b/src/api/method/get_compressed_accounts_by_owner/common.rs new file mode 100644 index 00000000..8264787f --- /dev/null +++ b/src/api/method/get_compressed_accounts_by_owner/common.rs @@ -0,0 +1,245 @@ +use crate::api::error::PhotonApiError; +use crate::api::method::get_compressed_accounts_by_owner::indexed_accounts::IndexedAccounts; +use crate::api::method::utils::PAGE_LIMIT; +use crate::common::typedefs::limit::Limit; +use crate::common::typedefs::{hash::Hash, serializable_pubkey::SerializablePubkey}; +use crate::{common::typedefs::bs58_string::Base58String, ingester::persist::bytes_to_sql_format}; +use sea_orm::{ConnectionTrait, DatabaseConnection, Statement}; +use serde::{Deserialize, Serialize}; +use utoipa::ToSchema; + +// Max filters allowed constant value of 5 +const MAX_FILTERS: usize = 5; +const MAX_CHILD_ACCOUNTS_WITH_FILTERS: usize = 1_000_000; + +#[derive(Debug, Clone, Serialize, Deserialize, ToSchema, Default)] +#[serde(deny_unknown_fields, rename_all = "camelCase")] +#[allow(non_snake_case)] +pub struct GetCompressedAccountsByOwnerRequest { + pub owner: SerializablePubkey, + #[serde(default)] + pub filters: Vec, + #[serde(default)] + pub dataSlice: Option, + #[serde(default)] + pub cursor: Option, + #[serde(default)] + pub limit: Option, +} + +#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, ToSchema, Default)] +#[serde(deny_unknown_fields, rename_all = "camelCase")] +pub struct Options { + pub cursor: Option, + pub limit: Option, +} + +#[derive(Serialize, Deserialize, Debug, Clone, ToSchema)] +pub struct Memcmp { + pub offset: usize, + pub bytes: Base58String, +} + +#[derive(Serialize, Deserialize, Debug)] +pub(crate) enum FilterInstance { + Memcmp(Memcmp), +} + +#[derive(Serialize, Deserialize, Debug, Clone, ToSchema)] +pub struct FilterSelector { + pub memcmp: Option, +} + +impl FilterSelector { + pub(crate) fn into_filter_instance(self) -> Result { + if let Some(memcmp) = self.memcmp { + Ok(FilterInstance::Memcmp(memcmp)) + } else { + Err(PhotonApiError::ValidationError( + "Filter instance cannot be null".to_string(), + )) + } + } +} + +#[derive(Serialize, Deserialize, Debug, Clone, ToSchema)] +pub struct DataSlice { + pub offset: usize, + pub length: usize, +} + +pub struct QueryBuilder { + filters: Vec, + pub(crate) query_limit: u64, + pub(crate) data_column: String, +} + +impl Default for QueryBuilder { + fn default() -> Self { + Self::new() + } +} + +impl QueryBuilder { + pub fn new() -> Self { + Self { + filters: Vec::new(), + query_limit: PAGE_LIMIT, + data_column: "data".to_string(), + } + } + + pub fn build_base_query( + &mut self, + conn: &DatabaseConnection, + request: &GetCompressedAccountsByOwnerRequest, + ) -> Result<(), PhotonApiError> { + let owner_string = bytes_to_sql_format(conn.get_database_backend(), request.owner.into()); + + self.filters.push(format!("owner = {owner_string}")); + self.filters.push("spent = false".to_string()); + + for filter_selector in &request.filters { + match filter_selector.clone().into_filter_instance()? { + FilterInstance::Memcmp(memcmp) => { + let filter_string = self.build_memcmp_filter(conn, memcmp)?; + self.filters.push(filter_string); + } + } + } + + if let Some(cursor) = &request.cursor { + let cursor_string = + bytes_to_sql_format(conn.get_database_backend(), cursor.clone().into()); + self.filters.push(format!("hash > {cursor_string}")); + } + + if let Some(limit) = &request.limit { + self.query_limit = limit.value(); + } + + if let Some(slice) = &request.dataSlice { + self.data_column = self.build_data_slice_column(conn, slice); + } + + Ok(()) + } + + fn build_memcmp_filter( + &self, + conn: &DatabaseConnection, + memcmp: Memcmp, + ) -> Result { + let Memcmp { offset, bytes } = memcmp; + let one_based_offset = offset + 1; + let bytes = bytes.0; + let bytes_len = bytes.len(); + let bytes_string = bytes_to_sql_format(conn.get_database_backend(), bytes); + + Ok(match conn.get_database_backend() { + sea_orm::DatabaseBackend::Postgres => { + format!("SUBSTRING(data FROM {one_based_offset} FOR {bytes_len}) = {bytes_string}") + } + sea_orm::DatabaseBackend::Sqlite => { + format!("SUBSTR(data, {one_based_offset}, {bytes_len}) = {bytes_string}") + } + _ => { + return Err(PhotonApiError::UnexpectedError( + "Unsupported database backend".to_string(), + )) + } + }) + } + + fn build_data_slice_column(&self, conn: &DatabaseConnection, slice: &DataSlice) -> String { + let DataSlice { offset, length } = slice; + let one_based_offset = offset + 1; + + match conn.get_database_backend() { + sea_orm::DatabaseBackend::Postgres => { + format!( + "SUBSTRING(data FROM {} FOR {}) AS data", + one_based_offset, length + ) + } + sea_orm::DatabaseBackend::Sqlite => { + format!("SUBSTR(data, {}, {}) AS data", one_based_offset, length) + } + _ => panic!("Unsupported database backend"), + } + } + + pub async fn check_account_limits( + conn: &DatabaseConnection, + owner_string: &str, + has_filters: bool, + ) -> Result<(), PhotonApiError> { + if !has_filters || T::is_indexed_account(owner_string) { + return Ok(()); + } + + let owner_string = bytes_to_sql_format(conn.get_database_backend(), owner_string.into()); + let raw_sql = format!( + " + SELECT CASE + WHEN COUNT(*) = {MAX_CHILD_ACCOUNTS_WITH_FILTERS} THEN true + ELSE false + END AS has_too_many_rows + FROM ( + SELECT 1 + FROM accounts + WHERE owner = {owner_string} + AND spent = false + LIMIT {MAX_CHILD_ACCOUNTS_WITH_FILTERS} + ) AS subquery; + " + ); + + let stmt = Statement::from_string(conn.get_database_backend(), raw_sql); + let result = conn.query_one(stmt).await?; + + match result { + Some(row) => { + let has_too_many_rows: bool = row.try_get("", "has_too_many_rows")?; + if has_too_many_rows { + return Err(PhotonApiError::ValidationError(format!( + "Owner has too many children accounts. The maximum number of accounts allowed with filters is {}", + MAX_CHILD_ACCOUNTS_WITH_FILTERS + ))); + } + } + None => { + return Err(PhotonApiError::UnexpectedError( + "Failed to check if there are more than 100k rows".to_string(), + )); + } + } + + Ok(()) + } + + pub fn get_query(&self, columns: &str) -> String { + format!( + " + SELECT + {columns} + FROM accounts + WHERE {} + ORDER BY accounts.leaf_index, accounts.hash ASC + LIMIT {} + ", + self.filters.join(" AND "), + self.query_limit + ) + } +} + +pub fn validate_filters(filters: &[FilterSelector]) -> Result<(), PhotonApiError> { + if filters.len() > MAX_FILTERS { + return Err(PhotonApiError::ValidationError(format!( + "Too many filters. The maximum number of filters allowed is {}", + MAX_FILTERS + ))); + } + Ok(()) +} diff --git a/src/api/method/get_compressed_accounts_by_owner/indexed_accounts.rs b/src/api/method/get_compressed_accounts_by_owner/indexed_accounts.rs new file mode 100644 index 00000000..b0860d3f --- /dev/null +++ b/src/api/method/get_compressed_accounts_by_owner/indexed_accounts.rs @@ -0,0 +1,18 @@ +pub trait IndexedAccounts { + fn get_accounts() -> &'static [&'static str]; + fn is_indexed_account(account: &str) -> bool { + Self::get_accounts().contains(&account) + } +} + +pub struct Solayer; +impl IndexedAccounts for Solayer { + fn get_accounts() -> &'static [&'static str] { + &[ + "S1ay5sk6FVkvsNFZShMw2YK3nfgJZ8tpBBGuHWDZ266", + "2sYfW81EENCMe415CPhE2XzBA5iQf4TXRs31W1KP63YT", + "ARDPkhymCbfdan375FCgPnBJQvUfHeb7nHVdBfwWSxrp", + "2sYfW81EENCMe415CPhE2XzBA5iQf4TXRs31W1KP63YT", + ] + } +} diff --git a/src/api/method/get_compressed_accounts_by_owner/mod.rs b/src/api/method/get_compressed_accounts_by_owner/mod.rs new file mode 100644 index 00000000..be3963e0 --- /dev/null +++ b/src/api/method/get_compressed_accounts_by_owner/mod.rs @@ -0,0 +1,13 @@ +mod common; +mod indexed_accounts; +mod v1; +mod v2; + +pub use common::{DataSlice, FilterSelector, GetCompressedAccountsByOwnerRequest, Memcmp}; +pub use v1::{ + get_compressed_accounts_by_owner, GetCompressedAccountsByOwnerResponse, PaginatedAccountList, +}; +pub use v2::{ + get_compressed_accounts_by_owner_v2, GetCompressedAccountsByOwnerResponseV2, + PaginatedAccountListV2, +}; diff --git a/src/api/method/get_compressed_accounts_by_owner/v1.rs b/src/api/method/get_compressed_accounts_by_owner/v1.rs new file mode 100644 index 00000000..19decc47 --- /dev/null +++ b/src/api/method/get_compressed_accounts_by_owner/v1.rs @@ -0,0 +1,69 @@ +use crate::api::error::PhotonApiError; +use crate::api::method::get_compressed_accounts_by_owner::common::{ + validate_filters, GetCompressedAccountsByOwnerRequest, QueryBuilder, +}; +use crate::api::method::get_compressed_accounts_by_owner::indexed_accounts::Solayer; +use crate::common::typedefs::context::Context; +use crate::common::typedefs::hash::Hash; +use crate::{common::typedefs::account::Account, dao::generated::accounts}; +use sea_orm::{ConnectionTrait, DatabaseConnection, FromQueryResult, Statement}; +use serde::Serialize; +use utoipa::ToSchema; + +#[derive(Debug, Clone, PartialEq, Eq, Serialize, ToSchema, Default)] +#[serde(deny_unknown_fields, rename_all = "camelCase")] +pub struct PaginatedAccountList { + pub items: Vec, + pub cursor: Option, +} + +#[derive(Debug, Clone, PartialEq, Eq, Serialize, ToSchema)] +#[serde(deny_unknown_fields, rename_all = "camelCase")] +pub struct GetCompressedAccountsByOwnerResponse { + pub context: Context, + pub value: PaginatedAccountList, +} + +pub async fn get_compressed_accounts_by_owner( + conn: &DatabaseConnection, + request: GetCompressedAccountsByOwnerRequest, +) -> Result { + let context = Context::extract(conn).await?; + validate_filters(&request.filters)?; + + let owner_str = request.owner.to_string(); + QueryBuilder::check_account_limits::(conn, &owner_str, !request.filters.is_empty()) + .await?; + + let mut query_builder = QueryBuilder::new(); + query_builder.build_base_query(conn, &request)?; + + let columns = format!( + "hash, {}, data_hash, address, owner, tree, leaf_index, seq, slot_created, spent, prev_spent, lamports, discriminator, queue, in_output_queue, nullifier_queue_index, nullified_in_tree, nullifier, tx_hash, tree_type", + query_builder.data_column + ); + + let raw_sql = query_builder.get_query(&columns); + + let result: Vec = accounts::Model::find_by_statement(Statement::from_string( + conn.get_database_backend(), + raw_sql, + )) + .all(conn) + .await?; + + let items = result + .into_iter() + .map(TryFrom::try_from) + .collect::, PhotonApiError>>()?; + + let mut cursor = items.last().map(|u| u.hash.clone()); + if items.len() < query_builder.query_limit as usize { + cursor = None; + } + + Ok(GetCompressedAccountsByOwnerResponse { + context, + value: PaginatedAccountList { items, cursor }, + }) +} diff --git a/src/api/method/get_compressed_accounts_by_owner/v2.rs b/src/api/method/get_compressed_accounts_by_owner/v2.rs new file mode 100644 index 00000000..c7f86684 --- /dev/null +++ b/src/api/method/get_compressed_accounts_by_owner/v2.rs @@ -0,0 +1,70 @@ +use crate::api::error::PhotonApiError; +use crate::api::method::get_compressed_accounts_by_owner::common::{ + validate_filters, GetCompressedAccountsByOwnerRequest, QueryBuilder, +}; +use crate::api::method::get_compressed_accounts_by_owner::indexed_accounts::Solayer; +use crate::common::typedefs::account::AccountV2; +use crate::common::typedefs::context::Context; +use crate::common::typedefs::hash::Hash; +use crate::dao::generated::accounts; +use sea_orm::{ConnectionTrait, DatabaseConnection, FromQueryResult, Statement}; +use serde::Serialize; +use utoipa::ToSchema; + +#[derive(Debug, Clone, PartialEq, Eq, Serialize, ToSchema, Default)] +#[serde(deny_unknown_fields, rename_all = "camelCase")] +pub struct PaginatedAccountListV2 { + pub items: Vec, + pub cursor: Option, +} + +#[derive(Debug, Clone, PartialEq, Eq, Serialize, ToSchema)] +#[serde(deny_unknown_fields, rename_all = "camelCase")] +pub struct GetCompressedAccountsByOwnerResponseV2 { + pub context: Context, + pub value: PaginatedAccountListV2, +} + +pub async fn get_compressed_accounts_by_owner_v2( + conn: &DatabaseConnection, + request: GetCompressedAccountsByOwnerRequest, +) -> Result { + let context = Context::extract(conn).await?; + + validate_filters(&request.filters)?; + + let owner_str = request.owner.to_string(); + QueryBuilder::check_account_limits::(conn, &owner_str, !request.filters.is_empty()) + .await?; + + let mut query_builder = QueryBuilder::new(); + query_builder.build_base_query(conn, &request)?; + + let columns = format!( + "hash, {}, data_hash, address, owner, tree, queue, in_output_queue, nullifier_queue_index, tx_hash, nullifier, leaf_index, seq, slot_created, spent, prev_spent, lamports, discriminator, nullified_in_tree, tree_type", + query_builder.data_column + ); + + let raw_sql = query_builder.get_query(&columns); + + let result: Vec = accounts::Model::find_by_statement(Statement::from_string( + conn.get_database_backend(), + raw_sql, + )) + .all(conn) + .await?; + let items = result + .into_iter() + .map(TryFrom::try_from) + .collect::, PhotonApiError>>()?; + + let mut cursor = items.last().map(|u| u.hash.clone()); + if items.len() < query_builder.query_limit as usize { + cursor = None; + } + + Ok(GetCompressedAccountsByOwnerResponseV2 { + context, + value: PaginatedAccountListV2 { items, cursor }, + }) +} diff --git a/src/api/method/get_compressed_balance_by_owner.rs b/src/api/method/get_compressed_balance_by_owner.rs index f5f3590a..e5ebfebd 100644 --- a/src/api/method/get_compressed_balance_by_owner.rs +++ b/src/api/method/get_compressed_balance_by_owner.rs @@ -1,3 +1,6 @@ +use super::super::error::PhotonApiError; +use super::utils::{parse_decimal, AccountBalanceResponse, LamportModel}; +use crate::common::typedefs::context::Context; use crate::common::typedefs::serializable_pubkey::SerializablePubkey; use crate::common::typedefs::unsigned_integer::UnsignedInteger; use crate::dao::generated::owner_balances; @@ -5,10 +8,6 @@ use sea_orm::{ColumnTrait, DatabaseConnection, EntityTrait, QueryFilter, QuerySe use serde::{Deserialize, Serialize}; use utoipa::ToSchema; -use super::super::error::PhotonApiError; -use super::utils::Context; -use super::utils::{parse_decimal, AccountBalanceResponse, LamportModel}; - #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, ToSchema, Default)] #[serde(rename_all = "camelCase")] pub struct GetCompressedBalanceByOwnerRequest { diff --git a/src/api/method/get_compressed_mint_token_holders.rs b/src/api/method/get_compressed_mint_token_holders.rs index 085e73ba..c2ae1e98 100644 --- a/src/api/method/get_compressed_mint_token_holders.rs +++ b/src/api/method/get_compressed_mint_token_holders.rs @@ -4,12 +4,14 @@ use serde::{Deserialize, Serialize}; use utoipa::ToSchema; use crate::common::typedefs::bs58_string::Base58String; +use crate::common::typedefs::context::Context; +use crate::common::typedefs::limit::Limit; use crate::common::typedefs::serializable_pubkey::SerializablePubkey; use crate::common::typedefs::unsigned_integer::UnsignedInteger; use crate::dao::generated::token_owner_balances; use super::super::error::PhotonApiError; -use super::utils::{parse_decimal, Context, Limit, PAGE_LIMIT}; +use super::utils::{parse_decimal, PAGE_LIMIT}; #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, ToSchema)] pub struct OwnerBalance { @@ -64,7 +66,7 @@ pub async fn get_compressed_mint_token_holders( bytes.len() ))); }; - let balance = LittleEndian::read_u64(&balance); + let balance = LittleEndian::read_u64(balance); filter = filter.and( token_owner_balances::Column::Amount.lt(balance).or( diff --git a/src/api/method/get_compressed_token_account_balance.rs b/src/api/method/get_compressed_token_account_balance.rs index ea10a6c7..a6fbbdd0 100644 --- a/src/api/method/get_compressed_token_account_balance.rs +++ b/src/api/method/get_compressed_token_account_balance.rs @@ -3,12 +3,12 @@ use crate::dao::generated::token_accounts; use sea_orm::{DatabaseConnection, EntityTrait, QueryFilter, QuerySelect}; use serde::{Deserialize, Serialize}; -use sqlx::types::Decimal; -use utoipa::ToSchema; - use super::super::error::PhotonApiError; use super::utils::{parse_decimal, AccountDataTable}; -use super::utils::{BalanceModel, CompressedAccountRequest, Context}; +use super::utils::{BalanceModel, CompressedAccountRequest}; +use crate::common::typedefs::context::Context; +use sqlx::types::Decimal; +use utoipa::ToSchema; #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, ToSchema)] #[serde(deny_unknown_fields, rename_all = "camelCase")] diff --git a/src/api/method/get_compressed_token_accounts_by_delegate.rs b/src/api/method/get_compressed_token_accounts_by_delegate.rs index 5af4ab36..f9cf78ae 100644 --- a/src/api/method/get_compressed_token_accounts_by_delegate.rs +++ b/src/api/method/get_compressed_token_accounts_by_delegate.rs @@ -3,8 +3,9 @@ use sea_orm::DatabaseConnection; use super::{ super::error::PhotonApiError, utils::{ - fetch_token_accounts, Authority, GetCompressedTokenAccountsByAuthorityOptions, - GetCompressedTokenAccountsByDelegate, TokenAccountListResponse, + fetch_token_accounts, fetch_token_accounts_v2, Authority, + GetCompressedTokenAccountsByAuthorityOptions, GetCompressedTokenAccountsByDelegate, + TokenAccountListResponse, TokenAccountListResponseV2, }, }; @@ -25,3 +26,21 @@ pub async fn get_compressed_account_token_accounts_by_delegate( }; fetch_token_accounts(conn, Authority::Delegate(delegate), options).await } + +pub async fn get_compressed_account_token_accounts_by_delegate_v2( + conn: &DatabaseConnection, + request: GetCompressedTokenAccountsByDelegate, +) -> Result { + let GetCompressedTokenAccountsByDelegate { + delegate, + mint, + cursor, + limit, + } = request; + let options = GetCompressedTokenAccountsByAuthorityOptions { + mint, + cursor, + limit, + }; + fetch_token_accounts_v2(conn, Authority::Delegate(delegate), options).await +} diff --git a/src/api/method/get_compressed_token_accounts_by_owner.rs b/src/api/method/get_compressed_token_accounts_by_owner.rs index 160bb859..d37aaf67 100644 --- a/src/api/method/get_compressed_token_accounts_by_owner.rs +++ b/src/api/method/get_compressed_token_accounts_by_owner.rs @@ -1,8 +1,8 @@ use sea_orm::DatabaseConnection; use super::utils::{ - Authority, GetCompressedTokenAccountsByAuthorityOptions, GetCompressedTokenAccountsByOwner, - TokenAccountListResponse, + fetch_token_accounts_v2, Authority, GetCompressedTokenAccountsByAuthorityOptions, + GetCompressedTokenAccountsByOwner, TokenAccountListResponse, TokenAccountListResponseV2, }; use super::{super::error::PhotonApiError, utils::fetch_token_accounts}; @@ -23,3 +23,21 @@ pub async fn get_compressed_token_accounts_by_owner( }; fetch_token_accounts(conn, Authority::Owner(owner), options).await } + +pub async fn get_compressed_token_accounts_by_owner_v2( + conn: &DatabaseConnection, + request: GetCompressedTokenAccountsByOwner, +) -> Result { + let GetCompressedTokenAccountsByOwner { + owner, + mint, + cursor, + limit, + } = request; + let options = GetCompressedTokenAccountsByAuthorityOptions { + mint, + cursor, + limit, + }; + fetch_token_accounts_v2(conn, Authority::Owner(owner), options).await +} diff --git a/src/api/method/get_compressed_token_balances_by_owner.rs b/src/api/method/get_compressed_token_balances_by_owner.rs index 732a32c2..4f888fd4 100644 --- a/src/api/method/get_compressed_token_balances_by_owner.rs +++ b/src/api/method/get_compressed_token_balances_by_owner.rs @@ -3,12 +3,14 @@ use serde::{Deserialize, Serialize}; use utoipa::ToSchema; use crate::common::typedefs::bs58_string::Base58String; +use crate::common::typedefs::context::Context; +use crate::common::typedefs::limit::Limit; use crate::common::typedefs::serializable_pubkey::SerializablePubkey; use crate::common::typedefs::unsigned_integer::UnsignedInteger; use crate::dao::generated::token_owner_balances; use super::super::error::PhotonApiError; -use super::utils::{parse_decimal, Context, Limit, PAGE_LIMIT}; +use super::utils::{parse_decimal, PAGE_LIMIT}; #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, ToSchema)] pub struct TokenBalance { diff --git a/src/api/method/get_compression_signatures_for_account.rs b/src/api/method/get_compression_signatures_for_account.rs index abfe2129..d461edd2 100644 --- a/src/api/method/get_compression_signatures_for_account.rs +++ b/src/api/method/get_compression_signatures_for_account.rs @@ -1,12 +1,12 @@ -use sea_orm::DatabaseConnection; - use super::{ super::error::PhotonApiError, utils::{ - search_for_signatures, Context, GetNonPaginatedSignaturesResponse, HashRequest, - SignatureFilter, SignatureInfoList, SignatureSearchType, + search_for_signatures, GetNonPaginatedSignaturesResponse, HashRequest, SignatureFilter, + SignatureInfoList, SignatureSearchType, }, }; +use crate::common::typedefs::context::Context; +use sea_orm::DatabaseConnection; pub async fn get_compression_signatures_for_account( conn: &DatabaseConnection, diff --git a/src/api/method/get_compression_signatures_for_address.rs b/src/api/method/get_compression_signatures_for_address.rs index 7720a928..8168ce76 100644 --- a/src/api/method/get_compression_signatures_for_address.rs +++ b/src/api/method/get_compression_signatures_for_address.rs @@ -1,15 +1,15 @@ -use sea_orm::DatabaseConnection; -use serde::{Deserialize, Serialize}; -use utoipa::ToSchema; - use super::{ super::error::PhotonApiError, utils::{ - search_for_signatures, Context, GetPaginatedSignaturesResponse, Limit, SignatureFilter, - SignatureSearchType, + search_for_signatures, GetPaginatedSignaturesResponse, SignatureFilter, SignatureSearchType, }, }; +use crate::common::typedefs::context::Context; +use crate::common::typedefs::limit::Limit; use crate::common::typedefs::serializable_pubkey::SerializablePubkey; +use sea_orm::DatabaseConnection; +use serde::{Deserialize, Serialize}; +use utoipa::ToSchema; #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, ToSchema, Default)] #[serde(deny_unknown_fields, rename_all = "camelCase")] diff --git a/src/api/method/get_compression_signatures_for_owner.rs b/src/api/method/get_compression_signatures_for_owner.rs index 1d78bef7..7b8ea2d4 100644 --- a/src/api/method/get_compression_signatures_for_owner.rs +++ b/src/api/method/get_compression_signatures_for_owner.rs @@ -1,15 +1,15 @@ -use sea_orm::DatabaseConnection; -use serde::{Deserialize, Serialize}; -use utoipa::ToSchema; - use super::{ super::error::PhotonApiError, utils::{ - search_for_signatures, Context, GetPaginatedSignaturesResponse, Limit, SignatureFilter, - SignatureSearchType, + search_for_signatures, GetPaginatedSignaturesResponse, SignatureFilter, SignatureSearchType, }, }; +use crate::common::typedefs::context::Context; +use crate::common::typedefs::limit::Limit; use crate::common::typedefs::serializable_pubkey::SerializablePubkey; +use sea_orm::DatabaseConnection; +use serde::{Deserialize, Serialize}; +use utoipa::ToSchema; #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, ToSchema, Default)] #[serde(deny_unknown_fields, rename_all = "camelCase")] diff --git a/src/api/method/get_compression_signatures_for_token_owner.rs b/src/api/method/get_compression_signatures_for_token_owner.rs index 4e0f64f5..65f06aed 100644 --- a/src/api/method/get_compression_signatures_for_token_owner.rs +++ b/src/api/method/get_compression_signatures_for_token_owner.rs @@ -1,15 +1,15 @@ -use sea_orm::DatabaseConnection; -use serde::{Deserialize, Serialize}; -use utoipa::ToSchema; - use super::{ super::error::PhotonApiError, utils::{ - search_for_signatures, Context, GetPaginatedSignaturesResponse, Limit, SignatureFilter, - SignatureSearchType, + search_for_signatures, GetPaginatedSignaturesResponse, SignatureFilter, SignatureSearchType, }, }; +use crate::common::typedefs::context::Context; +use crate::common::typedefs::limit::Limit; use crate::common::typedefs::serializable_pubkey::SerializablePubkey; +use sea_orm::DatabaseConnection; +use serde::{Deserialize, Serialize}; +use utoipa::ToSchema; #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, ToSchema)] #[serde(deny_unknown_fields, rename_all = "camelCase")] @@ -21,7 +21,6 @@ pub struct GetCompressionSignaturesForTokenOwnerRequest { pub cursor: Option, } - pub async fn get_compression_signatures_for_token_owner( conn: &DatabaseConnection, request: GetCompressionSignaturesForTokenOwnerRequest, diff --git a/src/api/method/get_indexer_health.rs b/src/api/method/get_indexer_health.rs index eb438ab3..40d5a55e 100644 --- a/src/api/method/get_indexer_health.rs +++ b/src/api/method/get_indexer_health.rs @@ -1,9 +1,8 @@ use sea_orm::DatabaseConnection; -use solana_client::nonblocking::rpc_client::RpcClient; - use super::super::error::PhotonApiError; -use super::utils::Context; +use crate::common::typedefs::context::Context; +use solana_client::nonblocking::rpc_client::RpcClient; // TODO: Make this an environment variable. pub const HEALTH_CHECK_SLOT_DISTANCE: i64 = 20; diff --git a/src/api/method/get_indexer_slot.rs b/src/api/method/get_indexer_slot.rs index 5a675556..43bd9967 100644 --- a/src/api/method/get_indexer_slot.rs +++ b/src/api/method/get_indexer_slot.rs @@ -1,12 +1,13 @@ -use sea_orm::DatabaseConnection; - +use crate::common::typedefs::context::Context; use crate::common::typedefs::unsigned_integer::UnsignedInteger; +use sea_orm::DatabaseConnection; use super::super::error::PhotonApiError; -use super::utils::Context; pub async fn get_indexer_slot( conn: &DatabaseConnection, ) -> Result { - Ok(UnsignedInteger(Context::extract(conn).await?.slot)) + let slot = Context::extract(conn).await?.slot; + + Ok(UnsignedInteger(slot)) } diff --git a/src/api/method/get_latest_compression_signatures.rs b/src/api/method/get_latest_compression_signatures.rs index 3b7ab826..acff6508 100644 --- a/src/api/method/get_latest_compression_signatures.rs +++ b/src/api/method/get_latest_compression_signatures.rs @@ -1,10 +1,10 @@ use super::utils::{GetLatestSignaturesRequest, GetPaginatedSignaturesResponse}; -use sea_orm::DatabaseConnection; - use super::{ super::error::PhotonApiError, - utils::{search_for_signatures, Context, SignatureSearchType}, + utils::{search_for_signatures, SignatureSearchType}, }; +use crate::common::typedefs::context::Context; +use sea_orm::DatabaseConnection; pub async fn get_latest_compression_signatures( conn: &DatabaseConnection, diff --git a/src/api/method/get_latest_non_voting_signatures.rs b/src/api/method/get_latest_non_voting_signatures.rs index ecc57832..728edc2a 100644 --- a/src/api/method/get_latest_non_voting_signatures.rs +++ b/src/api/method/get_latest_non_voting_signatures.rs @@ -2,12 +2,12 @@ use super::utils::{ GetLatestSignaturesRequest, GetNonPaginatedSignaturesResponseWithError, SignatureInfoListWithError, }; -use sea_orm::DatabaseConnection; - use super::{ super::error::PhotonApiError, - utils::{search_for_signatures, Context, SignatureSearchType}, + utils::{search_for_signatures, SignatureSearchType}, }; +use crate::common::typedefs::context::Context; +use sea_orm::DatabaseConnection; pub async fn get_latest_non_voting_signatures( conn: &DatabaseConnection, diff --git a/src/api/method/get_multiple_compressed_account_proofs.rs b/src/api/method/get_multiple_compressed_account_proofs/mod.rs similarity index 75% rename from src/api/method/get_multiple_compressed_account_proofs.rs rename to src/api/method/get_multiple_compressed_account_proofs/mod.rs index 18f366cf..edd91af9 100644 --- a/src/api/method/get_multiple_compressed_account_proofs.rs +++ b/src/api/method/get_multiple_compressed_account_proofs/mod.rs @@ -1,23 +1,23 @@ -use crate::ingester::persist::persisted_state_tree::{ - get_multiple_compressed_leaf_proofs, MerkleProofWithContext, +mod v2; +pub use v2::{ + get_multiple_compressed_account_proofs_v2, GetMultipleCompressedAccountProofsResponseV2, }; +use super::get_compressed_account_proof::GetCompressedAccountProofResponseValue; +use super::{super::error::PhotonApiError, utils::PAGE_LIMIT}; +use crate::common::typedefs::context::Context; +use crate::common::typedefs::hash::Hash; +use crate::ingester::persist::get_multiple_compressed_leaf_proofs; use sea_orm::{ConnectionTrait, DatabaseBackend, DatabaseConnection, Statement, TransactionTrait}; use serde::{Deserialize, Serialize}; use utoipa::ToSchema; -use super::{ - super::error::PhotonApiError, - utils::{Context, PAGE_LIMIT}, -}; -use crate::common::typedefs::hash::Hash; - // We do not use generics to simplify documentation generation. #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, ToSchema)] #[serde(deny_unknown_fields, rename_all = "camelCase")] pub struct GetMultipleCompressedAccountProofsResponse { pub context: Context, - pub value: Vec, + pub value: Vec, } #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, ToSchema)] @@ -47,7 +47,7 @@ pub async fn get_multiple_compressed_account_proofs( let proofs = get_multiple_compressed_leaf_proofs(&tx, request).await?; tx.commit().await?; Ok(GetMultipleCompressedAccountProofsResponse { - value: proofs, + value: proofs.into_iter().map(Into::into).collect(), context, }) } diff --git a/src/api/method/get_multiple_compressed_account_proofs/v2.rs b/src/api/method/get_multiple_compressed_account_proofs/v2.rs new file mode 100644 index 00000000..9db92439 --- /dev/null +++ b/src/api/method/get_multiple_compressed_account_proofs/v2.rs @@ -0,0 +1,177 @@ +use crate::api::error::PhotonApiError; +use crate::api::method::get_compressed_account_proof::GetCompressedAccountProofResponseValueV2; +use crate::api::method::get_multiple_compressed_account_proofs::HashList; +use crate::api::method::get_validity_proof::TreeContextInfo; +use crate::api::method::utils::PAGE_LIMIT; +use crate::common::typedefs::context::Context; +use crate::common::typedefs::hash::Hash; +use crate::common::typedefs::serializable_pubkey::SerializablePubkey; +use crate::dao::generated::{accounts, state_trees}; +use crate::ingester::persist::{ + get_multiple_compressed_leaf_proofs, get_multiple_compressed_leaf_proofs_by_indices, +}; +use jsonrpsee_core::Serialize; +use sea_orm::{ + ColumnTrait, ConnectionTrait, DatabaseBackend, DatabaseConnection, EntityTrait, QueryFilter, + Statement, TransactionTrait, +}; +use serde::Deserialize; +use std::collections::HashMap; +use utoipa::ToSchema; + +#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, ToSchema)] +#[serde(deny_unknown_fields, rename_all = "camelCase")] +pub struct GetMultipleCompressedAccountProofsResponseV2 { + pub context: Context, + pub value: Vec, +} + +pub async fn get_multiple_compressed_account_proofs_v2( + conn: &DatabaseConnection, + request: HashList, +) -> Result { + let hashes = request.0; + + // Validate input size + if hashes.len() > PAGE_LIMIT as usize { + return Err(PhotonApiError::ValidationError(format!( + "Too many hashes requested {}. Maximum allowed: {}", + hashes.len(), + PAGE_LIMIT + ))); + } + + let context = Context::extract(conn).await?; + let tx = conn.begin().await?; + + // Set transaction isolation level for PostgreSQL + if tx.get_database_backend() == DatabaseBackend::Postgres { + tx.execute(Statement::from_string( + tx.get_database_backend(), + "SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;".to_string(), + )) + .await?; + } + + // Find accounts for all hashes + let accounts = accounts::Entity::find() + .filter(accounts::Column::Hash.is_in(hashes.iter().map(|h| h.to_vec()).collect::>())) + .all(&tx) + .await?; + + if accounts.len() != hashes.len() { + return Err(PhotonApiError::RecordNotFound( + "Some accounts not found".to_string(), + )); + } + + // Create a map from hash to account for easy lookup + let account_map: HashMap, accounts::Model> = accounts + .into_iter() + .map(|acc| (acc.hash.clone(), acc)) + .collect(); + + // Find leaf nodes in state_trees for all hashes + let leaf_nodes = state_trees::Entity::find() + .filter( + state_trees::Column::Hash + .is_in(hashes.iter().map(|h| h.to_vec()).collect::>()) + .and(state_trees::Column::Level.eq(0)), + ) + .all(&tx) + .await?; + + // Create a set of hashes found in state_trees + let state_tree_hashes: std::collections::HashSet> = + leaf_nodes.iter().map(|node| node.hash.clone()).collect(); + + // Split hashes into those found in state_trees (for hash-based proofs) + // and those only found in accounts (for index-based proofs) + let mut hash_based_proofs: Vec = Vec::new(); + let mut index_based_proofs: Vec<(Hash, SerializablePubkey, u64)> = Vec::new(); + + for hash in &hashes { + if state_tree_hashes.contains(&hash.to_vec()) { + // Found in state_trees, use hash-based proof + hash_based_proofs.push(hash.clone()); + } else if let Some(account) = account_map.get(&hash.to_vec()) { + // Found in accounts but not in state_trees, use index-based proof + let merkle_tree = SerializablePubkey::try_from(account.tree.clone())?; + let leaf_index = account.leaf_index as u64; + index_based_proofs.push((hash.clone(), merkle_tree, leaf_index)); + } + } + + // Get proofs for both methods + let mut hash_based_result = if !hash_based_proofs.is_empty() { + get_multiple_compressed_leaf_proofs(&tx, hash_based_proofs) + .await? + .into_iter() + .map(|proof| { + let mut response_value: GetCompressedAccountProofResponseValueV2 = proof.into(); + response_value.prove_by_index = false; + response_value + }) + .collect::>() + } else { + Vec::new() + }; + + // Process index-based proofs + let mut index_based_result = Vec::new(); + for (merkle_tree, indices) in index_based_proofs + .iter() + .map(|(_, tree, idx)| (tree, idx)) + .fold(HashMap::new(), |mut acc, (tree, idx)| { + acc.entry(*tree).or_insert_with(Vec::new).push(*idx); + acc + }) + { + let proofs = + get_multiple_compressed_leaf_proofs_by_indices(&tx, merkle_tree, indices).await?; + + for proof in proofs { + let mut response_value: GetCompressedAccountProofResponseValueV2 = proof.into(); + response_value.prove_by_index = true; + index_based_result.push(response_value); + } + } + + // Combine results + let mut result = Vec::new(); + result.append(&mut hash_based_result); + result.append(&mut index_based_result); + + // Enrich with account data + for value in &mut result { + if let Some(account) = account_map.get(&value.hash.to_vec()) { + value.tree_context = TreeContextInfo { + tree_type: account.tree_type as u16, + tree: SerializablePubkey::try_from(account.tree.clone())?, + queue: SerializablePubkey::try_from(account.queue.clone())?, + cpi_context: None, + }; + } + } + + // Sort the result to match the original request order + let hash_to_index: HashMap, usize> = hashes + .iter() + .enumerate() + .map(|(i, hash)| (hash.to_vec(), i)) + .collect(); + + result.sort_by_key(|value| { + hash_to_index + .get(&value.hash.to_vec()) + .cloned() + .unwrap_or(usize::MAX) + }); + + tx.commit().await?; + + Ok(GetMultipleCompressedAccountProofsResponseV2 { + value: result, + context, + }) +} diff --git a/src/api/method/get_multiple_compressed_accounts.rs b/src/api/method/get_multiple_compressed_accounts.rs index 648f7387..9d925765 100644 --- a/src/api/method/get_multiple_compressed_accounts.rs +++ b/src/api/method/get_multiple_compressed_accounts.rs @@ -1,6 +1,11 @@ use std::collections::HashMap; -use crate::{common::typedefs::account::Account, dao::generated::accounts}; +use super::{super::error::PhotonApiError, utils::PAGE_LIMIT}; +use crate::common::typedefs::account::{Account, AccountV2}; +use crate::common::typedefs::context::Context; +use crate::common::typedefs::hash::Hash; +use crate::common::typedefs::serializable_pubkey::SerializablePubkey; +use crate::dao::generated::accounts; use sea_orm::{ColumnTrait, DatabaseConnection, EntityTrait, QueryFilter}; use serde::{Deserialize, Serialize}; use utoipa::{ @@ -8,15 +13,6 @@ use utoipa::{ ToSchema, }; -use super::{ - super::error::PhotonApiError, - utils::{Context, PAGE_LIMIT}, -}; -use crate::common::typedefs::hash::Hash; -use crate::common::typedefs::serializable_pubkey::SerializablePubkey; - -use super::utils::parse_account_model; - #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, ToSchema, Default)] #[serde(deny_unknown_fields, rename_all = "camelCase")] pub struct GetMultipleCompressedAccountsRequest { @@ -53,6 +49,11 @@ pub struct AccountList { pub items: Vec>, } +#[derive(Debug, Clone, PartialEq, Eq, Serialize, ToSchema, Default)] +pub struct AccountListV2 { + pub items: Vec>, +} + #[derive(Debug, Clone, PartialEq, Eq, Serialize, ToSchema)] // We do not use generics in order to simplify documentation generation #[serde(deny_unknown_fields, rename_all = "camelCase")] @@ -61,6 +62,13 @@ pub struct GetMultipleCompressedAccountsResponse { pub value: AccountList, } +#[derive(Debug, Clone, PartialEq, Eq, Serialize, ToSchema)] +#[serde(deny_unknown_fields, rename_all = "camelCase")] +pub struct GetMultipleCompressedAccountsResponseV2 { + pub context: Context, + pub value: AccountListV2, +} + pub async fn fetch_accounts_from_hashes( conn: &DatabaseConnection, hashes: Vec, @@ -148,7 +156,50 @@ pub async fn get_multiple_compressed_accounts( value: AccountList { items: accounts .into_iter() - .map(|x| x.map(parse_account_model).transpose()) + .map(|x| x.map(TryFrom::try_from).transpose()) + .collect::, _>>()?, + }, + }) +} + +pub async fn get_multiple_compressed_accounts_v2( + conn: &DatabaseConnection, + request: GetMultipleCompressedAccountsRequest, +) -> Result { + let context = Context::extract(conn).await?; + + let accounts = match (request.hashes, request.addresses) { + (Some(hashes), None) => { + if hashes.len() > PAGE_LIMIT as usize { + return Err(PhotonApiError::ValidationError(format!( + "Too many hashes requested {}. Maximum allowed: {}", + hashes.len(), + PAGE_LIMIT + ))); + } + fetch_accounts_from_hashes(conn, hashes, false).await? + } + (None, Some(addresses)) => { + if addresses.len() > PAGE_LIMIT as usize { + return Err(PhotonApiError::ValidationError(format!( + "Too many addresses requested {}. Maximum allowed: {}", + addresses.len(), + PAGE_LIMIT + ))); + } + fetch_account_from_addresses(conn, addresses).await? + } + _ => Err(PhotonApiError::ValidationError( + "Either hashes or addresses must be provided".to_string(), + ))?, + }; + + Ok(GetMultipleCompressedAccountsResponseV2 { + context, + value: AccountListV2 { + items: accounts + .into_iter() + .map(|x| x.map(TryFrom::try_from).transpose()) .collect::, _>>()?, }, }) diff --git a/src/api/method/get_multiple_new_address_proofs.rs b/src/api/method/get_multiple_new_address_proofs.rs index 728a4b42..7b82f66a 100644 --- a/src/api/method/get_multiple_new_address_proofs.rs +++ b/src/api/method/get_multiple_new_address_proofs.rs @@ -1,22 +1,23 @@ +use light_compressed_account::TreeType; use sea_orm::{ ConnectionTrait, DatabaseBackend, DatabaseConnection, DatabaseTransaction, Statement, TransactionTrait, }; use serde::{Deserialize, Serialize}; -use solana_program::pubkey; -use solana_sdk::pubkey::Pubkey; +use solana_pubkey::{pubkey, Pubkey}; use utoipa::ToSchema; use crate::api::error::PhotonApiError; +use crate::common::typedefs::context::Context; use crate::common::typedefs::hash::Hash; use crate::common::typedefs::serializable_pubkey::SerializablePubkey; -use crate::ingester::persist::persisted_indexed_merkle_tree::get_exclusion_range_with_proof; +use crate::ingester::parser::tree_info::TreeInfo; +use crate::ingester::persist::persisted_indexed_merkle_tree::{ + format_bytes, get_exclusion_range_with_proof_v1, get_exclusion_range_with_proof_v2, +}; -pub const ADDRESS_TREE_HEIGHT: u32 = 27; -pub const ADDRESS_TREE_ADDRESS: Pubkey = pubkey!("amt1Ayt45jfbdw5YSo7iz6WZxUmnZsQTYXy82hVwyC2"); pub const MAX_ADDRESSES: usize = 50; - -use super::utils::Context; +pub const ADDRESS_TREE_V1: Pubkey = pubkey!("amt1Ayt45jfbdw5YSo7iz6WZxUmnZsQTYXy82hVwyC2"); #[derive(Debug, Clone, Serialize, Deserialize, ToSchema, PartialEq, Eq)] #[serde(deny_unknown_fields, rename_all = "camelCase")] @@ -26,7 +27,7 @@ pub struct AddressWithTree { pub tree: SerializablePubkey, } -#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)] +#[derive(Debug, Clone, Eq, PartialEq, Serialize, Deserialize, ToSchema)] #[serde(deny_unknown_fields, rename_all = "camelCase")] #[allow(non_snake_case)] pub struct MerkleContextWithNewAddressProof { @@ -51,6 +52,7 @@ pub struct GetMultipleNewAddressProofsResponse { pub async fn get_multiple_new_address_proofs_helper( txn: &DatabaseTransaction, addresses: Vec, + check_queue: bool, ) -> Result, PhotonApiError> { if addresses.is_empty() { return Err(PhotonApiError::ValidationError( @@ -72,13 +74,71 @@ pub async fn get_multiple_new_address_proofs_helper( let mut new_address_proofs: Vec = Vec::new(); for AddressWithTree { address, tree } in addresses { - let (model, proof) = get_exclusion_range_with_proof( - txn, - tree.to_bytes_vec(), - ADDRESS_TREE_HEIGHT, - address.to_bytes_vec(), - ) - .await?; + let tree_and_queue = TreeInfo::get(&tree.to_string()) + .ok_or(PhotonApiError::InvalidPubkey { + field: tree.to_string(), + })? + .clone(); + + // For V2 trees, check if the address is in the queue but not yet in the tree + if check_queue && tree_and_queue.tree_type == TreeType::AddressV2 { + // Check if the address is in the queue + let address_queue_stmt = Statement::from_string( + txn.get_database_backend(), + format!( + "SELECT COUNT(*) as count FROM address_queues + WHERE tree = {} AND address = {}", + format_bytes(tree.to_bytes_vec(), txn.get_database_backend()), + format_bytes(address.to_bytes_vec(), txn.get_database_backend()) + ), + ); + + let queue_result = txn.query_one(address_queue_stmt).await.map_err(|e| { + PhotonApiError::UnexpectedError(format!("Failed to query address queue: {}", e)) + })?; + + let in_queue = match queue_result { + Some(row) => { + let count: i64 = row.try_get("", "count").map_err(|e| { + PhotonApiError::UnexpectedError(format!("Failed to get count: {}", e)) + })?; + count > 0 + } + None => false, + }; + + if in_queue { + return Err(PhotonApiError::ValidationError(format!( + "Address {} is in the queue for tree {} but not yet in the tree", + address.to_string(), + tree.to_string() + ))); + } + } + + let (model, proof) = match tree_and_queue.tree_type { + TreeType::AddressV1 => { + let address = address.to_bytes_vec(); + let tree = tree.to_bytes_vec(); + get_exclusion_range_with_proof_v1(txn, tree, tree_and_queue.height + 1, address) + .await? + } + TreeType::AddressV2 => { + get_exclusion_range_with_proof_v2( + txn, + tree.to_bytes_vec(), + tree_and_queue.height + 1, + address.to_bytes_vec(), + ) + .await? + } + _ => { + return Err(PhotonApiError::UnexpectedError( + "Invalid tree type".to_string(), + )); + } + }; + let new_address_proof = MerkleContextWithNewAddressProof { root: proof.root, address, @@ -88,7 +148,7 @@ pub async fn get_multiple_new_address_proofs_helper( proof: proof.proof, lowElementLeafIndex: model.leaf_index as u32, merkleTree: tree, - rootSeq: proof.rootSeq, + rootSeq: proof.root_seq, }; new_address_proofs.push(new_address_proof); } @@ -108,7 +168,7 @@ pub async fn get_multiple_new_address_proofs( .into_iter() .map(|address| AddressWithTree { address, - tree: SerializablePubkey::from(ADDRESS_TREE_ADDRESS), + tree: SerializablePubkey::from(ADDRESS_TREE_V1), }) .collect(), ); @@ -135,7 +195,7 @@ pub async fn get_multiple_new_address_proofs_v2( } let new_address_proofs = - get_multiple_new_address_proofs_helper(&tx, addresses_with_trees.0).await?; + get_multiple_new_address_proofs_helper(&tx, addresses_with_trees.0, true).await?; tx.commit().await?; Ok(GetMultipleNewAddressProofsResponse { diff --git a/src/api/method/get_queue_elements.rs b/src/api/method/get_queue_elements.rs new file mode 100644 index 00000000..d2433fc6 --- /dev/null +++ b/src/api/method/get_queue_elements.rs @@ -0,0 +1,175 @@ +use light_compressed_account::QueueType; +use sea_orm::{ + ColumnTrait, Condition, ConnectionTrait, DatabaseBackend, DatabaseConnection, EntityTrait, + FromQueryResult, QueryFilter, QueryOrder, QuerySelect, Statement, TransactionTrait, +}; + +use serde::{Deserialize, Serialize}; +use utoipa::ToSchema; + +use crate::api::error::PhotonApiError; +use crate::common::typedefs::context::Context; +use crate::common::typedefs::hash::Hash; +use crate::common::typedefs::serializable_pubkey::SerializablePubkey; +use crate::dao::generated::accounts; +use crate::ingester::persist::get_multiple_compressed_leaf_proofs_by_indices; + +#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, ToSchema, Default)] +#[serde(deny_unknown_fields, rename_all = "camelCase")] +pub struct GetQueueElementsRequest { + pub tree: Hash, + pub start_offset: Option, + pub num_elements: u16, + pub queue_type: u8, +} + +#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, ToSchema)] +#[serde(deny_unknown_fields, rename_all = "camelCase")] +pub struct GetQueueElementsResponse { + pub context: Context, + pub value: Vec, + pub first_value_queue_index: u64, +} + +#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, ToSchema)] +#[serde(deny_unknown_fields, rename_all = "camelCase")] +pub struct GetQueueElementsResponseValue { + pub proof: Vec, + pub root: Hash, + pub leaf_index: u64, + pub leaf: Hash, + pub tree: Hash, + pub root_seq: u64, + pub tx_hash: Option, + pub account_hash: Hash, +} + +#[derive(FromQueryResult, Debug)] +struct QueueElement { + leaf_index: i64, + hash: Vec, + tx_hash: Option>, + nullifier_queue_index: Option, +} + +pub async fn get_queue_elements( + conn: &DatabaseConnection, + request: GetQueueElementsRequest, +) -> Result { + let queue_type = QueueType::from(request.queue_type as u64); + let num_elements = request.num_elements; + let context = Context::extract(conn).await?; + let tx = conn.begin().await?; + if tx.get_database_backend() == DatabaseBackend::Postgres { + tx.execute(Statement::from_string( + tx.get_database_backend(), + "SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;".to_string(), + )) + .await?; + } + + let mut query_condition = + Condition::all().add(accounts::Column::Tree.eq(request.tree.to_vec())); + + match queue_type { + QueueType::InputStateV2 => { + query_condition = + query_condition.add(accounts::Column::NullifierQueueIndex.is_not_null()); + if let Some(start_offset) = request.start_offset { + query_condition = query_condition + .add(accounts::Column::NullifierQueueIndex.gte(start_offset as i64)); + } + } + QueueType::OutputStateV2 => { + query_condition = query_condition.add(accounts::Column::InOutputQueue.eq(true)); + if let Some(start_offset) = request.start_offset { + query_condition = + query_condition.add(accounts::Column::LeafIndex.gte(start_offset as i64)); + } + } + _ => { + return Err(PhotonApiError::ValidationError(format!( + "Invalid queue type: {:?}", + queue_type + ))) + } + } + + let query = match queue_type { + QueueType::InputStateV2 => accounts::Entity::find() + .filter(query_condition) + .order_by_asc(accounts::Column::NullifierQueueIndex), + QueueType::OutputStateV2 => accounts::Entity::find() + .filter(query_condition) + .order_by_asc(accounts::Column::LeafIndex), + _ => { + return Err(PhotonApiError::ValidationError(format!( + "Invalid queue type: {:?}", + queue_type + ))) + } + }; + + let queue_elements: Vec = query + .limit(num_elements as u64) + .into_model::() + .all(&tx) + .await + .map_err(|e| { + PhotonApiError::UnexpectedError(format!("DB error fetching queue elements: {}", e)) + })?; + let indices: Vec = queue_elements.iter().map(|e| e.leaf_index as u64).collect(); + let (proofs, first_value_queue_index) = if !indices.is_empty() { + let first_value_queue_index = match queue_type { + QueueType::InputStateV2 => Ok(queue_elements[0].nullifier_queue_index.ok_or( + PhotonApiError::ValidationError("Nullifier queue index is missing".to_string()), + )? as u64), + QueueType::OutputStateV2 => Ok(queue_elements[0].leaf_index as u64), + _ => Err(PhotonApiError::ValidationError(format!( + "Invalid queue type: {:?}", + queue_type + ))), + }?; + ( + get_multiple_compressed_leaf_proofs_by_indices( + &tx, + SerializablePubkey::from(request.tree.0), + indices, + ) + .await?, + first_value_queue_index, + ) + } else { + (vec![], 0) + }; + + tx.commit().await?; + + let result: Vec = proofs + .into_iter() + .zip(queue_elements.iter()) + .map(|(proof, queue_element)| { + let tx_hash = queue_element + .tx_hash + .as_ref() + .map(|tx_hash| Hash::new(tx_hash.as_slice()).unwrap()); + let account_hash = Hash::new(queue_element.hash.as_slice()).unwrap(); + Ok(GetQueueElementsResponseValue { + proof: proof.proof, + root: proof.root, + leaf_index: proof.leaf_index as u64, + leaf: proof.hash, + tree: Hash::from(proof.merkle_tree.0.to_bytes()), + root_seq: proof.root_seq, + tx_hash, + account_hash, + }) + }) + .collect::>()?; + + Ok(GetQueueElementsResponse { + context, + value: result, + first_value_queue_index, + }) +} diff --git a/src/api/method/get_transaction_with_compression_info.rs b/src/api/method/get_transaction_with_compression_info.rs index edf41cfa..6c2c4fb6 100644 --- a/src/api/method/get_transaction_with_compression_info.rs +++ b/src/api/method/get_transaction_with_compression_info.rs @@ -1,9 +1,18 @@ -use crate::common::typedefs::serializable_signature::SerializableSignature; +use super::{ + super::error::PhotonApiError, get_multiple_compressed_accounts::fetch_accounts_from_hashes, +}; +use crate::api::method::get_validity_proof::MerkleContextV2; +use crate::common::typedefs::account::AccountV2; +use crate::common::typedefs::account::AccountWithContext; +use crate::common::typedefs::hash::Hash; use crate::common::typedefs::token_data::TokenData; +use crate::common::typedefs::{account::Account, serializable_signature::SerializableSignature}; +use crate::dao::generated::accounts::Model; +use crate::ingester::error::IngesterError; use crate::ingester::parser::parse_transaction; use crate::ingester::persist::parse_token_data; -use crate::{common::typedefs::account::Account, dao::generated::accounts::Model}; - +use crate::ingester::persist::COMPRESSED_TOKEN_PROGRAM; +use borsh::BorshDeserialize; use sea_orm::DatabaseConnection; use serde::{Deserialize, Serialize}; use solana_client::nonblocking::rpc_client::RpcClient; @@ -11,16 +20,12 @@ use solana_client::rpc_config::RpcTransactionConfig; use solana_client::rpc_request::RpcRequest; use solana_sdk::commitment_config::{CommitmentConfig, CommitmentLevel}; use solana_transaction_status::{EncodedConfirmedTransactionWithStatusMeta, UiTransactionEncoding}; +use std::convert::TryFrom; use utoipa::{ openapi::{ObjectBuilder, RefOr, Schema, SchemaType}, ToSchema, }; -use super::{ - super::error::PhotonApiError, get_multiple_compressed_accounts::fetch_accounts_from_hashes, - utils::parse_account_model, -}; - const RPC_CONFIG: RpcTransactionConfig = RpcTransactionConfig { encoding: Some(UiTransactionEncoding::Base64), commitment: Some(CommitmentConfig { @@ -85,10 +90,73 @@ impl<'__s> ToSchema<'__s> for GetTransactionResponse { ("GetTransactionResponse", RefOr::T(schema)) } - fn aliases() -> Vec<(&'static str, utoipa::openapi::schema::Schema)> { + fn aliases() -> Vec<(&'static str, Schema)> { Vec::new() } } + +#[derive(Debug, Clone, PartialEq, Eq, Serialize, ToSchema)] +#[serde(deny_unknown_fields, rename_all = "camelCase")] +#[allow(non_snake_case)] +pub struct AccountWithOptionalTokenDataV2 { + pub account: AccountV2, + pub optionalTokenData: Option, +} + +#[derive(Debug, Clone, PartialEq, Eq, Serialize, ToSchema)] +#[serde(deny_unknown_fields, rename_all = "camelCase")] +#[allow(non_snake_case)] +pub struct ClosedAccountWithOptionalTokenDataV2 { + pub account: ClosedAccountV2, + pub optionalTokenData: Option, +} + +#[derive(Debug, Clone, PartialEq, Eq, Serialize, ToSchema)] +#[serde(deny_unknown_fields, rename_all = "camelCase")] +#[allow(non_snake_case)] +pub struct CompressionInfoV2 { + pub closedAccounts: Vec, + pub openedAccounts: Vec, +} + +#[derive(Debug, PartialEq, Serialize)] +#[serde(deny_unknown_fields, rename_all = "camelCase")] +#[allow(non_snake_case)] +pub struct GetTransactionResponseV2 { + pub transaction: EncodedConfirmedTransactionWithStatusMeta, + pub compressionInfo: CompressionInfoV2, +} + +impl<'__s> ToSchema<'__s> for GetTransactionResponseV2 { + fn schema() -> (&'__s str, RefOr) { + let schema = Schema::Object( + ObjectBuilder::new() + .schema_type(SchemaType::Object) + .description(Some( + "A Solana transaction with additional compression information", + )) + // TODO: Improve OpenAPI documentation here. + .property( + "transaction", + ObjectBuilder::new() + .schema_type(SchemaType::Object) + .description(Some( + "An encoded confirmed transaction with status meta".to_string(), + )) + .build(), + ) + .property("compression_info", CompressionInfoV2::schema().1) + .build(), + ); + + ("GetTransactionResponseV2", RefOr::T(schema)) + } + + fn aliases() -> Vec<(&'static str, Schema)> { + Vec::new() + } +} + fn parse_optional_token_data( account: Account, ) -> Result { @@ -132,7 +200,7 @@ pub async fn get_transaction_helper( let meta = txn.transaction.meta.as_ref(); if meta.is_none() { return Err(PhotonApiError::ValidationError( - "Transaction missing metatada information".to_string(), + "Transaction missing metadata information".to_string(), )); } let slot = txn.slot; @@ -161,16 +229,25 @@ pub async fn get_transaction_helper( }) .collect::, PhotonApiError>>()? .into_iter() - .map(parse_account_model) - .collect::, PhotonApiError>>()?; + .map(TryFrom::try_from) + .collect::, PhotonApiError>>()?; + + let closed_accounts = closed_accounts + .into_iter() + .map(|x| x.account) + .collect::>(); + + let out_accounts = status_update + .out_accounts + .into_iter() + .map(|x| x.account) + .collect::>(); Ok(GetTransactionResponse { transaction: txn, compressionInfo: CompressionInfo { closedAccounts: parse_optional_token_data_for_multiple_accounts(closed_accounts)?, - openedAccounts: parse_optional_token_data_for_multiple_accounts( - status_update.out_accounts, - )?, + openedAccounts: parse_optional_token_data_for_multiple_accounts(out_accounts)?, }, }) } @@ -194,3 +271,194 @@ pub async fn get_transaction_with_compression_info( })?; get_transaction_helper(conn, request.signature, txn).await } + +fn parse_optional_token_data_v2( + account: AccountV2, +) -> Result { + let hash = account.hash.clone(); + Ok(AccountWithOptionalTokenDataV2 { + optionalTokenData: parse_token_data_v2(&account).map_err(|e| { + PhotonApiError::UnexpectedError(format!( + "Failed to parse token data for account {}: {}", + hash, e + )) + })?, + account, + }) +} + +fn parse_optional_token_data_for_multiple_closed_accounts_v2( + accounts: Vec, +) -> Result, PhotonApiError> { + accounts + .into_iter() + .map(parse_optional_token_data_closed_account_v2) + .collect() +} + +fn parse_optional_token_data_closed_account_v2( + account: ClosedAccountV2, +) -> Result { + let hash = account.account.hash.clone(); + Ok(ClosedAccountWithOptionalTokenDataV2 { + optionalTokenData: parse_token_data_v2(&account.account).map_err(|e| { + PhotonApiError::UnexpectedError(format!( + "Failed to parse token data for account {}: {}", + hash, e + )) + })?, + account, + }) +} + +pub fn parse_token_data_v2(account: &AccountV2) -> Result, IngesterError> { + match account.data.clone() { + Some(data) if account.owner.0 == COMPRESSED_TOKEN_PROGRAM => { + let data_slice = data.data.0.as_slice(); + let token_data = TokenData::try_from_slice(data_slice).map_err(|e| { + IngesterError::ParserError(format!("Failed to parse token data: {:?}", e)) + })?; + Ok(Some(token_data)) + } + _ => Ok(None), + } +} + +fn parse_optional_token_data_for_multiple_accounts_v2( + accounts: Vec, +) -> Result, PhotonApiError> { + accounts + .into_iter() + .map(parse_optional_token_data_v2) + .collect() +} + +#[derive(Debug, Clone, PartialEq, Eq, Serialize, ToSchema)] +#[serde(deny_unknown_fields, rename_all = "camelCase")] +pub struct ClosedAccountV2 { + pub account: AccountV2, + pub nullifier: Hash, + pub tx_hash: Hash, +} + +pub async fn get_transaction_helper_v2( + conn: &DatabaseConnection, + signature: SerializableSignature, + txn: EncodedConfirmedTransactionWithStatusMeta, +) -> Result { + // Ignore if tx failed or meta is missed + let meta = txn.transaction.meta.as_ref(); + if meta.is_none() { + return Err(PhotonApiError::ValidationError( + "Transaction missing metadata information".to_string(), + )); + } + let slot = txn.slot; + + let status_update = parse_transaction( + &clone_tx(&txn).try_into().map_err(|_e| { + PhotonApiError::UnexpectedError(format!("Failed to parse transaction {}", signature.0)) + })?, + slot, + ) + .map_err(|_e| { + PhotonApiError::UnexpectedError(format!("Failed to parse transaction {}", signature.0)) + })?; + + let closed_accounts = fetch_accounts_from_hashes( + conn, + status_update.in_accounts.iter().cloned().collect(), + true, + ) + .await? + .into_iter() + .map(|x| { + x.ok_or(PhotonApiError::RecordNotFound( + "Account not found".to_string(), + )) + }) + .collect::, PhotonApiError>>()? + .into_iter() + .map(TryFrom::try_from) + .collect::, PhotonApiError>>()?; + let closed_accounts = closed_accounts + .into_iter() + .map(|x| -> Result { + Ok(ClosedAccountV2 { + account: AccountV2 { + hash: x.account.hash, + address: x.account.address, + data: x.account.data, + owner: x.account.owner, + lamports: x.account.lamports, + leaf_index: x.account.leaf_index, + seq: x.account.seq, + slot_created: x.account.slot_created, + prove_by_index: x.context.in_output_queue, + merkle_context: MerkleContextV2 { + tree_type: x.context.tree_type, + tree: x.account.tree, + queue: x.context.queue, + cpi_context: None, + next_tree_context: None, + }, + }, + nullifier: x.context.nullifier.unwrap_or_default(), + tx_hash: x.context.tx_hash.unwrap_or_default(), + }) + }) + .collect::, PhotonApiError>>()?; + + let out_accounts = status_update + .out_accounts + .into_iter() + .map(|x| AccountV2 { + hash: x.account.hash, + address: x.account.address, + data: x.account.data, + owner: x.account.owner, + lamports: x.account.lamports, + leaf_index: x.account.leaf_index, + seq: x.account.seq, + slot_created: x.account.slot_created, + prove_by_index: x.context.in_output_queue, + merkle_context: MerkleContextV2 { + tree_type: x.context.tree_type, + tree: x.account.tree, + queue: x.context.queue, + cpi_context: None, + next_tree_context: None, + }, + }) + .collect::>(); + + Ok(GetTransactionResponseV2 { + transaction: txn, + compressionInfo: CompressionInfoV2 { + closedAccounts: parse_optional_token_data_for_multiple_closed_accounts_v2( + closed_accounts, + )?, + openedAccounts: parse_optional_token_data_for_multiple_accounts_v2(out_accounts)?, + }, + }) +} + +pub async fn get_transaction_with_compression_info_v2( + conn: &DatabaseConnection, + rpc_client: &RpcClient, + request: GetTransactionRequest, +) -> Result { + let txn: EncodedConfirmedTransactionWithStatusMeta = rpc_client + .send( + RpcRequest::GetTransaction, + serde_json::json!([request.signature.0.to_string(), RPC_CONFIG,]), + ) + .await + .map_err(|e| { + PhotonApiError::UnexpectedError(format!( + "Failed to fetch transaction {}: {}", + request.signature.0, e + )) + })?; + get_transaction_helper_v2(conn, request.signature, txn).await +} diff --git a/src/api/method/get_validity_proof.rs b/src/api/method/get_validity_proof.rs deleted file mode 100644 index b5b322f5..00000000 --- a/src/api/method/get_validity_proof.rs +++ /dev/null @@ -1,419 +0,0 @@ -use crate::{ - api::error::PhotonApiError, - common::typedefs::{hash::Hash, serializable_pubkey::SerializablePubkey}, - ingester::persist::persisted_state_tree::{ - get_multiple_compressed_leaf_proofs, MerkleProofWithContext, - }, -}; -use lazy_static::lazy_static; -use num_bigint::BigUint; -use reqwest::Client; -use sea_orm::{ConnectionTrait, DatabaseBackend, DatabaseConnection, Statement, TransactionTrait}; -use serde::{Deserialize, Serialize}; -use std::str::FromStr; -use utoipa::ToSchema; - -use super::{ - get_multiple_new_address_proofs::{ - get_multiple_new_address_proofs_helper, AddressWithTree, MerkleContextWithNewAddressProof, - ADDRESS_TREE_ADDRESS, - }, - utils::Context, -}; - -lazy_static! { - pub static ref FIELD_SIZE: BigUint = BigUint::from_str( - "21888242871839275222246405745257275088548364400416034343698204186575808495616" - ) - .unwrap(); -} - -pub const STATE_TREE_QUEUE_SIZE: u64 = 2400; - -#[derive(Serialize, Deserialize)] -#[serde(rename_all = "camelCase")] -struct InclusionHexInputsForProver { - root: String, - path_index: u32, - path_elements: Vec, - leaf: String, -} - -#[derive(Serialize, Deserialize)] -#[serde(rename_all = "camelCase")] -struct NonInclusionHexInputsForProver { - root: String, - value: String, - path_index: u32, - path_elements: Vec, - leaf_lower_range_value: String, - leaf_higher_range_value: String, - next_index: u32, -} - -fn convert_non_inclusion_merkle_proof_to_hex( - non_inclusion_merkle_proof_inputs: Vec, -) -> Vec { - let mut inputs: Vec = Vec::new(); - for i in 0..non_inclusion_merkle_proof_inputs.len() { - let input = NonInclusionHexInputsForProver { - root: hash_to_hex(&non_inclusion_merkle_proof_inputs[i].root), - value: pubkey_to_hex(&non_inclusion_merkle_proof_inputs[i].address), - path_index: non_inclusion_merkle_proof_inputs[i].lowElementLeafIndex, - path_elements: non_inclusion_merkle_proof_inputs[i] - .proof - .iter() - .map(hash_to_hex) - .collect(), - next_index: non_inclusion_merkle_proof_inputs[i].nextIndex, - leaf_lower_range_value: pubkey_to_hex( - &non_inclusion_merkle_proof_inputs[i].lowerRangeAddress, - ), - leaf_higher_range_value: pubkey_to_hex( - &non_inclusion_merkle_proof_inputs[i].higherRangeAddress, - ), - }; - inputs.push(input); - } - inputs -} - -fn convert_inclusion_proofs_to_hex( - inclusion_proof_inputs: Vec, -) -> Vec { - let mut inputs: Vec = Vec::new(); - for i in 0..inclusion_proof_inputs.len() { - let input = InclusionHexInputsForProver { - root: hash_to_hex(&inclusion_proof_inputs[i].root), - path_index: inclusion_proof_inputs[i].leafIndex, - path_elements: inclusion_proof_inputs[i] - .proof - .iter() - .map(hash_to_hex) - .collect(), - leaf: hash_to_hex(&inclusion_proof_inputs[i].hash), - }; - inputs.push(input); - } - inputs -} - -#[derive(Serialize, Deserialize)] -#[serde(rename_all = "camelCase")] -struct HexBatchInputsForProver { - #[serde( - rename = "input-compressed-accounts", - skip_serializing_if = "Vec::is_empty" - )] - input_compressed_accounts: Vec, - #[serde(rename = "new-addresses", skip_serializing_if = "Vec::is_empty")] - new_addresses: Vec, -} - -#[derive(Serialize, Deserialize, ToSchema)] -#[serde(rename_all = "camelCase")] -#[allow(non_snake_case)] -pub struct CompressedProofWithContext { - pub compressedProof: CompressedProof, - roots: Vec, - rootIndices: Vec, - leafIndices: Vec, - leaves: Vec, - merkleTrees: Vec, -} - -fn hash_to_hex(hash: &Hash) -> String { - let bytes = hash.to_vec(); - let hex = hex::encode(bytes); - format!("0x{}", hex) -} - -fn pubkey_to_hex(pubkey: &SerializablePubkey) -> String { - let bytes = pubkey.to_bytes_vec(); - let hex = hex::encode(bytes); - format!("0x{}", hex) -} - -#[derive(Serialize, Deserialize, Debug)] -struct GnarkProofJson { - ar: [String; 2], - bs: [[String; 2]; 2], - krs: [String; 2], -} - -#[derive(Debug)] -struct ProofABC { - a: Vec, - b: Vec, - c: Vec, -} - -#[derive(Serialize, Deserialize, ToSchema, Default)] -pub struct CompressedProof { - a: Vec, - b: Vec, - c: Vec, -} - -fn deserialize_hex_string_to_bytes(hex_str: &str) -> Vec { - let hex_str = if hex_str.starts_with("0x") { - &hex_str[2..] - } else { - hex_str - }; - - // Left pad with 0s if the length is not 64 - let hex_str = format!("{:0>64}", hex_str); - - hex::decode(&hex_str).expect("Failed to decode hex string") -} - -fn proof_from_json_struct(json: GnarkProofJson) -> ProofABC { - let proof_ax = deserialize_hex_string_to_bytes(&json.ar[0]); - let proof_ay = deserialize_hex_string_to_bytes(&json.ar[1]); - let proof_a = [proof_ax, proof_ay].concat(); - - let proof_bx0 = deserialize_hex_string_to_bytes(&json.bs[0][0]); - let proof_bx1 = deserialize_hex_string_to_bytes(&json.bs[0][1]); - let proof_by0 = deserialize_hex_string_to_bytes(&json.bs[1][0]); - let proof_by1 = deserialize_hex_string_to_bytes(&json.bs[1][1]); - let proof_b = [proof_bx0, proof_bx1, proof_by0, proof_by1].concat(); - - let proof_cx = deserialize_hex_string_to_bytes(&json.krs[0]); - let proof_cy = deserialize_hex_string_to_bytes(&json.krs[1]); - let proof_c = [proof_cx, proof_cy].concat(); - - ProofABC { - a: proof_a, - b: proof_b, - c: proof_c, - } -} - -fn y_element_is_positive_g1(y_element: &BigUint) -> bool { - y_element <= &(FIELD_SIZE.clone() - y_element) -} - -fn y_element_is_positive_g2(y_element1: &BigUint, y_element2: &BigUint) -> bool { - let field_midpoint = FIELD_SIZE.clone() / 2u32; - - if y_element1 < &field_midpoint { - true - } else if y_element1 > &field_midpoint { - false - } else { - y_element2 < &field_midpoint - } -} - -fn add_bitmask_to_byte(mut byte: u8, y_is_positive: bool) -> u8 { - if !y_is_positive { - byte |= 1 << 7; - } - byte -} - -fn negate_and_compress_proof(proof: ProofABC) -> CompressedProof { - let proof_a = &proof.a; - let proof_b = &proof.b; - let proof_c = &proof.c; - - let a_x_element = &mut proof_a[0..32].to_vec(); - let a_y_element = BigUint::from_bytes_be(&proof_a[32..64]); - - let proof_a_is_positive = !y_element_is_positive_g1(&a_y_element); - a_x_element[0] = add_bitmask_to_byte(a_x_element[0], proof_a_is_positive); - - let b_x_element = &mut proof_b[0..64].to_vec(); - let b_y_element = &proof_b[64..128]; - let b_y1_element = BigUint::from_bytes_be(&b_y_element[0..32]); - let b_y2_element = BigUint::from_bytes_be(&b_y_element[32..64]); - - let proof_b_is_positive = y_element_is_positive_g2(&b_y1_element, &b_y2_element); - b_x_element[0] = add_bitmask_to_byte(b_x_element[0], proof_b_is_positive); - - let c_x_element = &mut proof_c[0..32].to_vec(); - let c_y_element = BigUint::from_bytes_be(&proof_c[32..64]); - - let proof_c_is_positive = y_element_is_positive_g1(&c_y_element); - c_x_element[0] = add_bitmask_to_byte(c_x_element[0], proof_c_is_positive); - - CompressedProof { - a: a_x_element.clone(), - b: b_x_element.clone(), - c: c_x_element.clone(), - } -} - -#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, ToSchema)] -#[serde(deny_unknown_fields, rename_all = "camelCase")] -#[allow(non_snake_case)] -pub struct GetValidityProofRequest { - #[serde(default)] - pub hashes: Vec, - #[serde(default)] - #[schema(deprecated = true)] - pub newAddresses: Vec, - #[serde(default)] - pub newAddressesWithTrees: Vec, -} - -#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, ToSchema)] -#[serde(deny_unknown_fields, rename_all = "camelCase")] -#[allow(non_snake_case)] -// Create to hide the deprecated newAddresses field from the documentation -pub struct GetValidityProofRequestDocumentation { - #[serde(default)] - pub hashes: Vec, - #[serde(default)] - pub newAddressesWithTrees: Vec, -} - -#[derive(Serialize, Deserialize, ToSchema)] -#[serde(deny_unknown_fields, rename_all = "camelCase")] -pub struct GetValidityProofResponse { - pub value: CompressedProofWithContext, - pub context: Context, -} - -pub async fn get_validity_proof( - conn: &DatabaseConnection, - prover_url: &str, - mut request: GetValidityProofRequest, -) -> Result { - if request.hashes.is_empty() - && request.newAddresses.is_empty() - && request.newAddressesWithTrees.is_empty() - { - return Err(PhotonApiError::ValidationError( - "No hashes or new addresses provided for proof generation".to_string(), - )); - } - if !request.newAddressesWithTrees.is_empty() && !request.newAddresses.is_empty() { - return Err(PhotonApiError::ValidationError( - "Cannot provide both newAddresses and newAddressesWithTree".to_string(), - )); - } - if !request.newAddresses.is_empty() { - request.newAddressesWithTrees = request - .newAddresses - .iter() - .map(|new_address| AddressWithTree { - address: *new_address, - tree: SerializablePubkey::from(ADDRESS_TREE_ADDRESS), - }) - .collect(); - } - - let context = Context::extract(conn).await?; - let client = Client::new(); - let tx = conn.begin().await?; - if tx.get_database_backend() == DatabaseBackend::Postgres { - tx.execute(Statement::from_string( - tx.get_database_backend(), - "SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;".to_string(), - )) - .await?; - } - - let account_proofs = match !request.hashes.is_empty() { - true => get_multiple_compressed_leaf_proofs(&tx, request.hashes).await?, - false => { - vec![] - } - }; - let new_address_proofs = match !request.newAddressesWithTrees.is_empty() { - true => get_multiple_new_address_proofs_helper(&tx, request.newAddressesWithTrees).await?, - false => { - vec![] - } - }; - tx.commit().await?; - - let batch_inputs = HexBatchInputsForProver { - input_compressed_accounts: convert_inclusion_proofs_to_hex(account_proofs.clone()), - new_addresses: convert_non_inclusion_merkle_proof_to_hex(new_address_proofs.clone()), - }; - - let inclusion_proof_url = format!("{}/prove", prover_url); - let json_body = serde_json::to_string(&batch_inputs).map_err(|e| { - PhotonApiError::UnexpectedError(format!("Got an error while serializing the request {}", e)) - })?; - let res = client - .post(&inclusion_proof_url) - .body(json_body.clone()) - .header("Content-Type", "application/json") - .send() - .await - .map_err(|e| PhotonApiError::UnexpectedError(format!("Error fetching proof {}", e)))?; - - if !res.status().is_success() { - return Err(PhotonApiError::UnexpectedError(format!( - "Error fetching proof {:?}", - res.text().await, - ))); - } - - let text = res - .text() - .await - .map_err(|e| PhotonApiError::UnexpectedError(format!("Error fetching proof {}", e)))?; - - let proof: GnarkProofJson = serde_json::from_str(&text).map_err(|e| { - PhotonApiError::UnexpectedError(format!( - "Got an error while deserializing the response {}", - e - )) - })?; - - let proof = proof_from_json_struct(proof); - // Allow non-snake case - #[allow(non_snake_case)] - let compressedProof = negate_and_compress_proof(proof); - - let compressed_proof_with_context = CompressedProofWithContext { - compressedProof, - roots: account_proofs - .iter() - .map(|x| x.root.clone().to_string()) - .chain( - new_address_proofs - .iter() - .map(|x| x.root.clone().to_string()), - ) - .collect(), - rootIndices: account_proofs - .iter() - .map(|x| x.rootSeq) - .chain(new_address_proofs.iter().map(|x| x.rootSeq)) - .map(|x| x % STATE_TREE_QUEUE_SIZE) - .collect(), - leafIndices: account_proofs - .iter() - .map(|x| x.leafIndex) - .chain(new_address_proofs.iter().map(|x| x.lowElementLeafIndex)) - .collect(), - leaves: account_proofs - .iter() - .map(|x| x.hash.clone().to_string()) - .chain( - new_address_proofs - .iter() - .map(|x| x.address.clone().to_string()), - ) - .collect(), - merkleTrees: account_proofs - .iter() - .map(|x| x.merkleTree.clone().to_string()) - .chain( - new_address_proofs - .iter() - .map(|x| x.merkleTree.clone().to_string()), - ) - .collect(), - }; - Ok(GetValidityProofResponse { - value: compressed_proof_with_context, - context, - }) -} diff --git a/src/api/method/get_validity_proof/mod.rs b/src/api/method/get_validity_proof/mod.rs new file mode 100644 index 00000000..c586066c --- /dev/null +++ b/src/api/method/get_validity_proof/mod.rs @@ -0,0 +1,13 @@ +mod prover; +mod v1; +mod v2; + +pub use prover::CompressedProof; +pub use v1::{ + get_validity_proof, CompressedProofWithContext, GetValidityProofRequest, + GetValidityProofRequestDocumentation, GetValidityProofResponse, +}; +pub use v2::{ + get_validity_proof_v2, CompressedProofWithContextV2, GetValidityProofRequestV2, + GetValidityProofResponseV2, MerkleContextV2, RootIndex, TreeContextInfo, +}; diff --git a/src/api/method/get_validity_proof/prover/gnark.rs b/src/api/method/get_validity_proof/prover/gnark.rs new file mode 100644 index 00000000..61e3ab7d --- /dev/null +++ b/src/api/method/get_validity_proof/prover/gnark.rs @@ -0,0 +1,103 @@ +use crate::api::method::get_validity_proof::prover::structs::{CompressedProof, ProofABC}; +use ark_serialize::{CanonicalDeserialize, CanonicalSerialize, Compress, Validate}; +use std::ops::Neg; +use crate::api::error::PhotonApiError; + +type G1 = ark_bn254::g1::G1Affine; + +/// Changes the endianness of the given slice of bytes by reversing the order of every 32-byte chunk. +/// +/// # Arguments +/// +/// * `bytes` - A reference to a slice of bytes whose endianness will be changed. +/// +/// # Returns +/// +/// A `Vec` containing the bytes with their order reversed in chunks of 32 bytes. If the number +/// of bytes in the slice is not a multiple of 32, the remaining bytes at the end will also be reversed. +/// +/// # Examples +/// +/// ``` +/// let input = vec![0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, +/// 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, +/// 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, +/// 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20]; +/// let output = change_endianness(&input); +/// assert_eq!(output, vec![0x20, 0x1F, 0x1E, 0x1D, 0x1C, 0x1B, 0x1A, 0x19, +/// 0x18, 0x17, 0x16, 0x15, 0x14, 0x13, 0x12, 0x11, +/// 0x10, 0x0F, 0x0E, 0x0D, 0x0C, 0x0B, 0x0A, 0x09, +/// 0x08, 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01]); +/// +/// let input = vec![0x01, 0x02, 0x03]; +/// let output = change_endianness(&input); +/// assert_eq!(output, vec![0x03, 0x02, 0x01]); +/// ``` +fn change_endianness(bytes: &[u8]) -> Vec { + let mut vec = Vec::new(); + for b in bytes.chunks(32) { + for byte in b.iter().rev() { + vec.push(*byte); + } + } + vec +} + +/// Negates the `a` component of the given proof and compresses the proof into a `CompressedProof`. +/// +/// # Arguments +/// +/// * `proof` - A `ProofABC` structure containing three components: `a`, `b`, and `c`. +/// +/// - `a` is negated and serialized in big-endian format. +/// - `b` and `c` are trimmed and included as-is in the compressed form. +/// +/// # Returns +/// +/// A `CompressedProof` containing: +/// +/// * The negated and serialized `a` component as a vector of bytes. +/// * The first 64 bytes of the `b` component. +/// * The first 32 bytes of the `c` component. +/// +/// # Panics +/// +/// This function will panic if: +/// +/// * The deserialization or serialization of the `G1` point fails. +/// * The `proof.a` slice length is insufficient to produce a valid G1 when adding padding for deserialization. +/// +/// # Note +/// +/// The function assumes that the `ProofABC` structure contains its `a`, `b`, and `c` components in valid formats +/// necessary for transformation and compression. +pub fn negate_proof(proof: ProofABC) -> Result { + let mut proof_a_neg = [0u8; 65]; + + let proof_a: G1 = G1::deserialize_with_mode( + &*[&change_endianness(&proof.a), &[0u8][..]].concat(), + Compress::No, + Validate::No, + ).map_err(|e| PhotonApiError::UnexpectedError(format!("Failed to deserialize G1 point: {}", e)))?; + + proof_a + .neg() + .x + .serialize_with_mode(&mut proof_a_neg[..32], Compress::No) + .map_err(|e| PhotonApiError::UnexpectedError(format!("Failed to serialize x coordinate: {}", e)))?; + + proof_a + .neg() + .y + .serialize_with_mode(&mut proof_a_neg[32..], Compress::No) + .map_err(|e| PhotonApiError::UnexpectedError(format!("Failed to serialize y coordinate: {}", e)))?; + + let compressed_proof = CompressedProof { + a: proof_a_neg[0..32].to_vec(), + b: proof.b[0..64].to_vec(), + c: proof.c[0..32].to_vec(), + }; + + Ok(compressed_proof) +} + diff --git a/src/api/method/get_validity_proof/prover/helpers.rs b/src/api/method/get_validity_proof/prover/helpers.rs new file mode 100644 index 00000000..91c9b2cb --- /dev/null +++ b/src/api/method/get_validity_proof/prover/helpers.rs @@ -0,0 +1,136 @@ +use crate::api::method::get_multiple_new_address_proofs::MerkleContextWithNewAddressProof; +use crate::api::method::get_validity_proof::prover::structs::{ + GnarkProofJson, InclusionHexInputsForProver, NonInclusionHexInputsForProver, ProofABC, +}; +use crate::common::typedefs::hash::Hash; +use crate::common::typedefs::serializable_pubkey::SerializablePubkey; +use crate::ingester::persist::MerkleProofWithContext; +use borsh::BorshSerialize; +use light_compressed_account::hash_chain::create_two_inputs_hash_chain; + +pub fn convert_non_inclusion_merkle_proof_to_hex( + non_inclusion_merkle_proof_inputs: Vec, +) -> Vec { + let mut inputs: Vec = Vec::new(); + for i in 0..non_inclusion_merkle_proof_inputs.len() { + let input = NonInclusionHexInputsForProver { + root: hash_to_hex(&non_inclusion_merkle_proof_inputs[i].root), + value: pubkey_to_hex(&non_inclusion_merkle_proof_inputs[i].address), + path_index: non_inclusion_merkle_proof_inputs[i].lowElementLeafIndex, + path_elements: non_inclusion_merkle_proof_inputs[i] + .proof + .iter() + .map(hash_to_hex) + .collect(), + next_index: non_inclusion_merkle_proof_inputs[i].nextIndex, + leaf_lower_range_value: pubkey_to_hex( + &non_inclusion_merkle_proof_inputs[i].lowerRangeAddress, + ), + leaf_higher_range_value: pubkey_to_hex( + &non_inclusion_merkle_proof_inputs[i].higherRangeAddress, + ), + }; + inputs.push(input); + } + inputs +} + +pub fn convert_inclusion_proofs_to_hex( + inclusion_proof_inputs: Vec, +) -> Vec { + let mut inputs: Vec = Vec::new(); + for i in 0..inclusion_proof_inputs.len() { + let input = InclusionHexInputsForProver { + root: hash_to_hex(&inclusion_proof_inputs[i].root), + path_index: inclusion_proof_inputs[i].leaf_index, + path_elements: inclusion_proof_inputs[i] + .proof + .iter() + .map(hash_to_hex) + .collect(), + leaf: hash_to_hex(&inclusion_proof_inputs[i].hash), + }; + inputs.push(input); + } + inputs +} + +pub fn hash_to_hex(hash: &Hash) -> String { + let bytes = hash.to_vec(); + let hex = hex::encode(bytes); + format!("0x{}", hex) +} + +fn pubkey_to_hex(pubkey: &SerializablePubkey) -> String { + let bytes = pubkey.to_bytes_vec(); + let hex = hex::encode(bytes); + format!("0x{}", hex) +} + +fn deserialize_hex_string_to_bytes(hex_str: &str) -> Vec { + let hex_str = if hex_str.starts_with("0x") { + &hex_str[2..] + } else { + hex_str + }; + + // Left pad with 0s if the length is not 64 + let hex_str = format!("{:0>64}", hex_str); + + hex::decode(&hex_str).expect("Failed to decode hex string") +} + +pub fn proof_from_json_struct(json: GnarkProofJson) -> ProofABC { + let proof_ax = deserialize_hex_string_to_bytes(&json.ar[0]); + let proof_ay = deserialize_hex_string_to_bytes(&json.ar[1]); + let proof_a = [proof_ax, proof_ay].concat(); + + let proof_bx0 = deserialize_hex_string_to_bytes(&json.bs[0][0]); + let proof_bx1 = deserialize_hex_string_to_bytes(&json.bs[0][1]); + let proof_by0 = deserialize_hex_string_to_bytes(&json.bs[1][0]); + let proof_by1 = deserialize_hex_string_to_bytes(&json.bs[1][1]); + let proof_b = [proof_bx0, proof_bx1, proof_by0, proof_by1].concat(); + + let proof_cx = deserialize_hex_string_to_bytes(&json.krs[0]); + let proof_cy = deserialize_hex_string_to_bytes(&json.krs[1]); + let proof_c = [proof_cx, proof_cy].concat(); + + ProofABC { + a: proof_a, + b: proof_b, + c: proof_c, + } +} + +pub fn get_public_input_hash( + account_proofs: &[MerkleProofWithContext], + new_address_proofs: &[MerkleContextWithNewAddressProof], +) -> [u8; 32] { + let account_hashes: Vec<[u8; 32]> = account_proofs + .iter() + .map(|x| x.hash.to_vec().clone().try_into().unwrap()) + .collect::>(); + let account_roots: Vec<[u8; 32]> = account_proofs + .iter() + .map(|x| x.root.to_vec().clone().try_into().unwrap()) + .collect::>(); + let inclusion_hash_chain: [u8; 32] = + create_two_inputs_hash_chain(&account_roots, &account_hashes).unwrap(); + let new_address_hashes: Vec<[u8; 32]> = new_address_proofs + .iter() + .map(|x| x.address.try_to_vec().unwrap().clone().try_into().unwrap()) + .collect::>(); + let new_address_roots: Vec<[u8; 32]> = new_address_proofs + .iter() + .map(|x| x.root.to_vec().clone().try_into().unwrap()) + .collect::>(); + let non_inclusion_hash_chain = + create_two_inputs_hash_chain(&new_address_roots, &new_address_hashes).unwrap(); + if non_inclusion_hash_chain != [0u8; 32] { + non_inclusion_hash_chain + } else if inclusion_hash_chain != [0u8; 32] { + inclusion_hash_chain + } else { + create_two_inputs_hash_chain(&[inclusion_hash_chain], &[non_inclusion_hash_chain]).unwrap() + } +} diff --git a/src/api/method/get_validity_proof/prover/mod.rs b/src/api/method/get_validity_proof/prover/mod.rs new file mode 100644 index 00000000..3d263c8c --- /dev/null +++ b/src/api/method/get_validity_proof/prover/mod.rs @@ -0,0 +1,6 @@ +mod gnark; +mod helpers; +pub mod prove; +mod structs; + +pub use structs::CompressedProof; diff --git a/src/api/method/get_validity_proof/prover/prove.rs b/src/api/method/get_validity_proof/prover/prove.rs new file mode 100644 index 00000000..766d11fe --- /dev/null +++ b/src/api/method/get_validity_proof/prover/prove.rs @@ -0,0 +1,187 @@ +use crate::api::error::PhotonApiError; +use crate::api::method::get_multiple_new_address_proofs::MerkleContextWithNewAddressProof; +use crate::api::method::get_validity_proof::prover::gnark::negate_proof; +use crate::api::method::get_validity_proof::prover::helpers::{ + convert_inclusion_proofs_to_hex, convert_non_inclusion_merkle_proof_to_hex, + get_public_input_hash, hash_to_hex, proof_from_json_struct, +}; +use crate::api::method::get_validity_proof::prover::structs::{ + AccountProofDetail, AddressProofDetail, CircuitType, GnarkProofJson, HexBatchInputsForProver, + ProverResult, +}; +use crate::common::typedefs::hash::Hash; +use crate::ingester::parser::tree_info::TreeInfo; +use crate::ingester::persist::MerkleProofWithContext; +use light_batched_merkle_tree::constants::{ + DEFAULT_BATCH_ADDRESS_TREE_HEIGHT, DEFAULT_BATCH_STATE_TREE_HEIGHT, +}; +use light_batched_merkle_tree::merkle_tree_metadata::BatchedMerkleTreeMetadata; +use light_sdk::STATE_MERKLE_TREE_HEIGHT; + +use reqwest::Client; + +const STATE_TREE_QUEUE_SIZE: u64 = 2400; + +pub(crate) async fn generate_proof( + db_account_proofs: Vec, + db_new_address_proofs: Vec, + prover_url: &str, +) -> Result { + let state_tree_height = if db_account_proofs.is_empty() { + 0 + } else { + db_account_proofs[0].proof.len() + }; + if !db_account_proofs + .iter() + .all(|x| x.proof.len() == state_tree_height) + { + return Err(PhotonApiError::ValidationError( + "All state trees for account proofs must have the same height".to_string(), + )); + } + + let address_tree_height = if db_new_address_proofs.is_empty() { + 0 + } else { + db_new_address_proofs[0].proof.len() + }; + + if !db_new_address_proofs + .iter() + .all(|x| x.proof.len() == address_tree_height) + { + return Err(PhotonApiError::ValidationError( + "All address trees for new address proofs must have the same height".to_string(), + )); + } + + let circuit_type = match ( + db_account_proofs.is_empty(), + db_new_address_proofs.is_empty(), + ) { + (false, true) => CircuitType::Inclusion, + (true, false) => CircuitType::NonInclusion, + (false, false) => CircuitType::Combined, + (true, true) => { + return Err(PhotonApiError::ValidationError( + "No proofs provided to generate_proof_and_details_internal.".to_string(), + )); + } + }; + + let is_v2_tree_height = (state_tree_height == DEFAULT_BATCH_STATE_TREE_HEIGHT as usize) + || (address_tree_height == DEFAULT_BATCH_ADDRESS_TREE_HEIGHT as usize); + + let public_input_hash_bytes = get_public_input_hash(&db_account_proofs, &db_new_address_proofs); + let public_input_hash_str = if is_v2_tree_height || circuit_type == CircuitType::Combined { + hash_to_hex(&Hash(public_input_hash_bytes)) + } else { + String::new() // V1 circuits might not use this if not combined or V2 height + }; + + // Use state_tree_height for queue_size if accounts are present, otherwise assume batched default. + // This logic might need refinement if address_tree_height should dictate queue_size for non-inclusion only. + let queue_determining_height = if state_tree_height != 0 { + state_tree_height + } else { + address_tree_height + }; + let queue_size = if queue_determining_height == STATE_MERKLE_TREE_HEIGHT { + STATE_TREE_QUEUE_SIZE + } else if queue_determining_height == 0 { + // No proofs, default for batched (should ideally not hit if circuit_type is determined) + BatchedMerkleTreeMetadata::default().root_history_capacity as u64 + } else { + // Batched trees + BatchedMerkleTreeMetadata::default().root_history_capacity as u64 + }; + + let batch_inputs = HexBatchInputsForProver { + circuit_type: circuit_type.to_string(), + state_tree_height: state_tree_height as u32, + address_tree_height: address_tree_height as u32, + public_input_hash: public_input_hash_str.clone(), + input_compressed_accounts: convert_inclusion_proofs_to_hex(db_account_proofs.clone()), + new_addresses: convert_non_inclusion_merkle_proof_to_hex(db_new_address_proofs.clone()), + }; + + let client = Client::new(); + let prover_request_url = format!("{}/prove", prover_url); + let json_body = serde_json::to_string(&batch_inputs).map_err(|e| { + PhotonApiError::UnexpectedError(format!("Error serializing prover request: {}", e)) + })?; + + let res = client + .post(&prover_request_url) + .body(json_body) + .header("Content-Type", "application/json") + .send() + .await + .map_err(|e| { + PhotonApiError::UnexpectedError(format!("Error sending request to prover: {}", e)) + })?; + + if !res.status().is_success() { + return Err(PhotonApiError::UnexpectedError(format!( + "Error fetching proof {:?}", + res.text().await, + ))); + } + + let response_text = res.text().await.map_err(|e| { + PhotonApiError::UnexpectedError(format!("Error reading prover response: {}", e)) + })?; + + let proof_json: GnarkProofJson = serde_json::from_str(&response_text).map_err(|e| { + PhotonApiError::UnexpectedError(format!( + "Error deserializing prover response: {}. Response text: '{}'", + e, response_text + )) + })?; + + let proof_abc = proof_from_json_struct(proof_json); + let compressed_gnark_proof = negate_proof(proof_abc); + + let mut account_details = Vec::with_capacity(db_account_proofs.len()); + for acc_proof in db_account_proofs.iter() { + let tree_info = TreeInfo::get(&acc_proof.merkle_tree.to_string().as_str()) + .ok_or(PhotonApiError::UnexpectedError(format!( + "Failed to parse TreeInfo for account tree '{}'", + acc_proof.merkle_tree + )))? + .clone(); + account_details.push(AccountProofDetail { + hash: acc_proof.hash.to_string(), + root: acc_proof.root.to_string(), + root_index_mod_queue: acc_proof.root_seq % queue_size, + leaf_index: acc_proof.leaf_index, + merkle_tree_id: acc_proof.merkle_tree.to_string(), + tree_info, + }); + } + + let mut address_details = Vec::with_capacity(db_new_address_proofs.len()); + for addr_proof in db_new_address_proofs.iter() { + let tree_info = TreeInfo::get(&addr_proof.merkleTree.to_string().as_str()) + .ok_or(PhotonApiError::UnexpectedError(format!( + "Failed to parse TreeInfo for address tree '{}'", + addr_proof.merkleTree + )))? + .clone(); + address_details.push(AddressProofDetail { + address: addr_proof.address.to_string(), + root: addr_proof.root.to_string(), + root_index_mod_queue: addr_proof.rootSeq % queue_size, + path_index: addr_proof.lowElementLeafIndex, + merkle_tree_id: addr_proof.merkleTree.to_string(), + tree_info, + }); + } + + Ok(ProverResult { + compressed_proof: compressed_gnark_proof?, + account_proof_details: account_details, + address_proof_details: address_details, + }) +} diff --git a/src/api/method/get_validity_proof/prover/structs.rs b/src/api/method/get_validity_proof/prover/structs.rs new file mode 100644 index 00000000..2f175c6a --- /dev/null +++ b/src/api/method/get_validity_proof/prover/structs.rs @@ -0,0 +1,116 @@ +use crate::ingester::parser::tree_info::TreeInfo; +use jsonrpsee_core::Serialize; +use num_traits::identities::Zero; +use serde::Deserialize; +use utoipa::ToSchema; + +#[derive(Debug, Clone)] +pub(crate) struct AccountProofDetail { + pub hash: String, + pub root: String, + pub root_index_mod_queue: u64, + pub leaf_index: u32, + pub merkle_tree_id: String, + pub tree_info: TreeInfo, +} + +#[derive(Debug, Clone)] +pub(crate) struct AddressProofDetail { + pub address: String, + pub root: String, + pub root_index_mod_queue: u64, + pub path_index: u32, // from lowElementLeafIndex, needed for v1 + pub merkle_tree_id: String, + pub tree_info: TreeInfo, + // pub next_index: u32, + // pub lower_range_address_hex: String, // Store as hex string + // pub higher_range_address_hex: String, // Store as hex string + // pub original_proof_context: MerkleContextWithNewAddressProof, // Option +} + +#[derive(Debug, Clone)] +pub(crate) struct ProverResult { + pub compressed_proof: CompressedProof, + pub account_proof_details: Vec, + pub address_proof_details: Vec, +} + +#[derive(Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub(crate) struct InclusionHexInputsForProver { + pub root: String, + pub path_index: u32, + pub path_elements: Vec, + pub leaf: String, +} + +#[derive(Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub(crate) struct NonInclusionHexInputsForProver { + pub root: String, + pub value: String, + pub path_index: u32, + pub path_elements: Vec, + pub leaf_lower_range_value: String, + pub leaf_higher_range_value: String, + pub next_index: u32, +} + +#[derive(Serialize, Deserialize, Debug)] +pub(crate) struct GnarkProofJson { + pub ar: [String; 2], + pub bs: [[String; 2]; 2], + pub krs: [String; 2], +} + +#[derive(Debug)] +pub(crate) struct ProofABC { + pub a: Vec, + pub b: Vec, + pub c: Vec, +} + +#[derive(Serialize, Deserialize, ToSchema, Default, Debug, Clone)] +pub struct CompressedProof { + pub a: Vec, + pub b: Vec, + pub c: Vec, +} + +#[derive(Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct HexBatchInputsForProver { + #[serde(rename = "circuitType")] + pub circuit_type: String, + #[serde(rename = "stateTreeHeight", skip_serializing_if = "u32::is_zero")] + pub state_tree_height: u32, + #[serde(rename = "addressTreeHeight", skip_serializing_if = "u32::is_zero")] + pub address_tree_height: u32, + #[serde(rename = "publicInputHash", skip_serializing_if = "String::is_empty")] + pub public_input_hash: String, + #[serde( + rename = "inputCompressedAccounts", + skip_serializing_if = "Vec::is_empty" + )] + pub input_compressed_accounts: Vec, + #[serde(rename = "newAddresses", skip_serializing_if = "Vec::is_empty")] + pub new_addresses: Vec, +} + +#[derive(Debug, PartialEq, Eq)] +pub enum CircuitType { + Combined, + Inclusion, + NonInclusion, +} + +impl CircuitType { + #[allow(clippy::inherent_to_string)] + pub fn to_string(&self) -> String { + match self { + Self::Combined => "combined".to_string(), + Self::Inclusion => "inclusion".to_string(), + Self::NonInclusion => "non-inclusion".to_string(), + } + } +} diff --git a/src/api/method/get_validity_proof/v1.rs b/src/api/method/get_validity_proof/v1.rs new file mode 100644 index 00000000..5340e775 --- /dev/null +++ b/src/api/method/get_validity_proof/v1.rs @@ -0,0 +1,183 @@ +use crate::api::method::get_multiple_new_address_proofs::{ + get_multiple_new_address_proofs_helper, AddressWithTree, ADDRESS_TREE_V1, +}; +use crate::api::method::get_validity_proof::prover::prove::generate_proof; +use crate::api::method::get_validity_proof::CompressedProof; +use crate::common::typedefs::context::Context; +use crate::common::typedefs::hash::Hash; +use crate::ingester::persist::get_multiple_compressed_leaf_proofs; +use crate::{ + api::error::PhotonApiError, common::typedefs::serializable_pubkey::SerializablePubkey, +}; +use jsonrpsee_core::Serialize; +use sea_orm::{ConnectionTrait, DatabaseBackend, DatabaseConnection, Statement, TransactionTrait}; +use serde::Deserialize; +use utoipa::ToSchema; + +#[derive(Serialize, Deserialize, Default, ToSchema, Debug)] +#[serde(rename_all = "camelCase")] +pub struct CompressedProofWithContext { + pub compressed_proof: CompressedProof, + pub roots: Vec, + pub root_indices: Vec, + pub leaf_indices: Vec, + pub leaves: Vec, + pub merkle_trees: Vec, +} + +#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, ToSchema)] +#[serde(deny_unknown_fields, rename_all = "camelCase")] +pub struct GetValidityProofRequest { + #[serde(default)] + pub hashes: Vec, + #[serde(default)] + #[schema(deprecated = true)] + pub new_addresses: Vec, + #[serde(default)] + pub new_addresses_with_trees: Vec, +} + +#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, ToSchema)] +#[serde(deny_unknown_fields, rename_all = "camelCase")] +pub struct GetValidityProofRequestDocumentation { + #[serde(default)] + pub hashes: Vec, + #[serde(default)] + pub new_addresses_with_trees: Vec, +} + +#[derive(Serialize, Deserialize, Default, ToSchema, Debug)] +#[serde(deny_unknown_fields, rename_all = "camelCase")] +pub struct GetValidityProofResponse { + pub value: CompressedProofWithContext, + pub context: Context, +} + +pub async fn get_validity_proof( + conn: &DatabaseConnection, + prover_url: &str, + mut request: GetValidityProofRequest, +) -> Result { + if request.hashes.is_empty() + && request.new_addresses.is_empty() + && request.new_addresses_with_trees.is_empty() + { + return Err(PhotonApiError::ValidationError( + "No hashes or new addresses provided for proof generation".to_string(), + )); + } + if !request.new_addresses_with_trees.is_empty() && !request.new_addresses.is_empty() { + return Err(PhotonApiError::ValidationError( + "Cannot provide both newAddresses and newAddressesWithTree".to_string(), + )); + } + if !request.new_addresses.is_empty() { + request.new_addresses_with_trees = request + .new_addresses + .iter() + .map(|new_address| AddressWithTree { + address: *new_address, + tree: SerializablePubkey::from(ADDRESS_TREE_V1), + }) + .collect(); + request.new_addresses.clear(); + } + + let context = Context::extract(conn).await?; + + let tx = conn.begin().await?; + if tx.get_database_backend() == DatabaseBackend::Postgres { + tx.execute(Statement::from_string( + tx.get_database_backend(), + "SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;".to_string(), + )) + .await?; + } + + let db_account_proofs = if !request.hashes.is_empty() { + get_multiple_compressed_leaf_proofs(&tx, request.hashes.clone()).await? + } else { + Vec::new() + }; + + let db_new_address_proofs = if !request.new_addresses_with_trees.is_empty() { + get_multiple_new_address_proofs_helper(&tx, request.new_addresses_with_trees.clone(), true) + .await? + } else { + Vec::new() + }; + tx.commit().await?; + + if db_account_proofs.is_empty() && db_new_address_proofs.is_empty() { + return Err(PhotonApiError::ValidationError( + "No valid proofs found for the provided hashes or new addresses after DB check." + .to_string(), + )); + } + + let proof_result = generate_proof(db_account_proofs, db_new_address_proofs, prover_url).await?; + + let v1_value = CompressedProofWithContext { + compressed_proof: proof_result.compressed_proof, + roots: proof_result + .account_proof_details + .iter() + .map(|d| d.root.clone()) + .chain( + proof_result + .address_proof_details + .iter() + .map(|d| d.root.clone()), + ) + .collect(), + root_indices: proof_result + .account_proof_details + .iter() + .map(|d| d.root_index_mod_queue) + .chain( + proof_result + .address_proof_details + .iter() + .map(|d| d.root_index_mod_queue), + ) + .collect(), + leaf_indices: proof_result + .account_proof_details + .iter() + .map(|d| d.leaf_index) + .chain( + proof_result + .address_proof_details + .iter() + .map(|d| d.path_index), + ) + .collect(), + leaves: proof_result + .account_proof_details + .iter() + .map(|d| d.hash.clone()) + .chain( + proof_result + .address_proof_details + .iter() + .map(|d| d.address.clone()), + ) + .collect(), + merkle_trees: proof_result + .account_proof_details + .iter() + .map(|d| d.merkle_tree_id.clone()) + .chain( + proof_result + .address_proof_details + .iter() + .map(|d| d.merkle_tree_id.clone()), + ) + .collect(), + }; + + Ok(GetValidityProofResponse { + value: v1_value, + context, + }) +} diff --git a/src/api/method/get_validity_proof/v2.rs b/src/api/method/get_validity_proof/v2.rs new file mode 100644 index 00000000..2057124b --- /dev/null +++ b/src/api/method/get_validity_proof/v2.rs @@ -0,0 +1,305 @@ +use crate::api::method::get_multiple_new_address_proofs::{ + get_multiple_new_address_proofs_helper, AddressWithTree, +}; +use crate::api::method::get_validity_proof::prover::prove::generate_proof; +use crate::api::method::get_validity_proof::v1::GetValidityProofRequest; +use crate::api::method::get_validity_proof::CompressedProof; +use crate::common::typedefs::context::Context; +use crate::common::typedefs::hash::Hash; +use crate::dao::generated::accounts; +use crate::ingester::persist::get_multiple_compressed_leaf_proofs; +use crate::{ + api::error::PhotonApiError, common::typedefs::serializable_pubkey::SerializablePubkey, +}; +use borsh::BorshDeserialize; +use itertools::Itertools; +use jsonrpsee_core::Serialize; +use sea_orm::{ColumnTrait, ConnectionTrait, EntityTrait, QueryFilter}; +use sea_orm::{DatabaseBackend, DatabaseConnection, Statement, TransactionTrait}; +use serde::Deserialize; +use utoipa::ToSchema; + +#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, ToSchema)] +#[serde(deny_unknown_fields, rename_all = "camelCase")] +pub struct GetValidityProofRequestV2 { + #[serde(default)] + pub hashes: Vec, + #[serde(default)] + pub new_addresses_with_trees: Vec, +} + +impl From for GetValidityProofRequest { + fn from(value: GetValidityProofRequestV2) -> Self { + GetValidityProofRequest { + hashes: value.hashes, + new_addresses: vec![], + new_addresses_with_trees: value.new_addresses_with_trees, + } + } +} + +#[derive(Serialize, Deserialize, Default, ToSchema, Debug)] +#[serde(deny_unknown_fields, rename_all = "camelCase")] +pub struct GetValidityProofResponseV2 { + pub value: CompressedProofWithContextV2, + pub context: Context, +} + +#[derive(Serialize, Deserialize, ToSchema, Debug, Clone, Eq, PartialEq, Default)] +#[serde(rename_all = "camelCase")] +#[allow(non_snake_case)] +pub struct MerkleContextV2 { + pub tree_type: u16, + pub tree: SerializablePubkey, + // nullifier_queue in V1 trees, output_queue in V2 trees. + pub queue: SerializablePubkey, + pub cpi_context: Option, + pub next_tree_context: Option, +} + +#[derive(Serialize, Deserialize, ToSchema, Debug, Default, Clone, Eq, PartialEq)] +#[serde(rename_all = "camelCase")] +#[allow(non_snake_case)] +pub struct TreeContextInfo { + pub tree_type: u16, + pub tree: SerializablePubkey, + pub queue: SerializablePubkey, + pub cpi_context: Option, +} + +#[derive(Serialize, Deserialize, ToSchema, Debug, Default)] +#[serde(rename_all = "camelCase")] +pub struct CompressedProofWithContextV2 { + pub compressed_proof: Option, + pub accounts: Vec, + pub addresses: Vec, +} + +#[derive(Serialize, Deserialize, ToSchema, Debug, Clone, Default)] +#[serde(rename_all = "camelCase")] +pub struct AccountProofInputs { + pub hash: String, + pub root: String, + pub root_index: RootIndex, + pub leaf_index: u64, + pub merkle_context: MerkleContextV2, +} + +#[derive(Serialize, Deserialize, ToSchema, Debug, Default)] +#[serde(rename_all = "camelCase")] +pub struct AddressProofInputs { + pub address: String, + pub root: String, + pub root_index: RootIndex, + pub merkle_context: MerkleContextV2, +} + +#[derive(Serialize, Deserialize, ToSchema, Debug, Clone, Default)] +#[serde(rename_all = "camelCase")] +pub struct RootIndex { + pub root_index: u64, + // if prove_by_index is true, ignore root_index and use 0 + pub prove_by_index: bool, +} + +impl From for Option { + fn from(val: RootIndex) -> Option { + match val.prove_by_index { + true => None, + false => Some(val.root_index), + } + } +} + +impl From> for RootIndex { + fn from(val: Option) -> RootIndex { + match val { + Some(root_index) => RootIndex { + root_index, + prove_by_index: false, + }, + None => RootIndex { + root_index: 0, + prove_by_index: true, + }, + } + } +} + +pub async fn get_validity_proof_v2( + conn: &DatabaseConnection, + prover_url: &str, + request: GetValidityProofRequestV2, +) -> Result { + if request.hashes.is_empty() && request.new_addresses_with_trees.is_empty() { + return Ok(GetValidityProofResponseV2::default()); + } + + let v2_context = Context::extract(conn).await?; + + let tx = conn.begin().await?; + if tx.get_database_backend() == DatabaseBackend::Postgres { + tx.execute(Statement::from_string( + tx.get_database_backend(), + "SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;".to_string(), + )) + .await?; + } + + let mut accounts_for_prove_by_index_inputs: Vec> = + vec![None; request.hashes.len()]; + let mut hashes_needing_full_proof: Vec = Vec::new(); + let mut original_indices_for_full_proof_hashes: Vec = Vec::new(); + + if !request.hashes.is_empty() { + let input_hashes_as_bytes: Vec> = + request.hashes.iter().map(|h| h.to_vec()).collect(); + let db_account_models = accounts::Entity::find() + .filter( + accounts::Column::Hash + .is_in(input_hashes_as_bytes) + .and(accounts::Column::Spent.eq(false)), + ) + .all(&tx) + .await?; + + let sorted_db_account_models = db_account_models + .into_iter() + .sorted_by_key(|model| { + request + .hashes + .iter() + .position(|h_req| h_req.0.as_slice() == model.hash) + .unwrap_or(usize::MAX) + }) + .collect::>(); + + if sorted_db_account_models.len() != request.hashes.len() { + tx.rollback().await?; + let found_hashes_dbg = sorted_db_account_models + .iter() + .map(|m| Hash::new(m.hash.as_slice()).unwrap_or_default().to_string()) + .collect::>(); + let req_hashes_dbg = request + .hashes + .iter() + .map(|h| h.to_string()) + .collect::>(); + return Err(PhotonApiError::ValidationError(format!( + "Not all requested account hashes exist or are available (might be spent). Requested: {:?}, Found in DB: {:?}", + req_hashes_dbg, found_hashes_dbg + ))); + } + + for (original_idx, acc_model) in sorted_db_account_models.iter().enumerate() { + if acc_model.in_output_queue { + accounts_for_prove_by_index_inputs[original_idx] = Some(AccountProofInputs { + hash: Hash::new(acc_model.hash.as_slice())?.to_string(), + root: "".to_string(), + root_index: None.into(), // prove_by_index = true + leaf_index: acc_model.leaf_index as u64, + merkle_context: MerkleContextV2 { + tree_type: acc_model.tree_type as u16, + tree: SerializablePubkey::try_from_slice(&acc_model.tree) + .unwrap_or_default(), + queue: SerializablePubkey::try_from_slice(&acc_model.queue) + .unwrap_or_default(), + cpi_context: None, + next_tree_context: None, + }, + }); + } else { + hashes_needing_full_proof.push(request.hashes[original_idx].clone()); + original_indices_for_full_proof_hashes.push(original_idx); + } + } + } + + let new_addresses_needing_full_proof = request.new_addresses_with_trees.clone(); + + let db_account_proofs_for_prover = if !hashes_needing_full_proof.is_empty() { + get_multiple_compressed_leaf_proofs(&tx, hashes_needing_full_proof.clone()).await? + } else { + Vec::new() + }; + + let db_new_address_proofs_for_prover = if !new_addresses_needing_full_proof.is_empty() { + get_multiple_new_address_proofs_helper(&tx, new_addresses_needing_full_proof.clone(), true) + .await? + } else { + Vec::new() + }; + tx.commit().await?; + + let mut v2_accounts_from_prover: Vec = Vec::new(); + let mut v2_addresses_from_prover: Vec = Vec::new(); + let mut resulting_compressed_proof: Option = None; + + if !db_account_proofs_for_prover.is_empty() || !db_new_address_proofs_for_prover.is_empty() { + let internal_result = generate_proof( + db_account_proofs_for_prover, + db_new_address_proofs_for_prover, + prover_url, + ) + .await?; + + resulting_compressed_proof = Some(internal_result.compressed_proof); + + for detail in internal_result.account_proof_details { + v2_accounts_from_prover.push(AccountProofInputs { + hash: detail.hash, + root: detail.root, + root_index: Some(detail.root_index_mod_queue).into(), + leaf_index: detail.leaf_index as u64, + merkle_context: MerkleContextV2 { + tree_type: detail.tree_info.tree_type as u16, + tree: SerializablePubkey::from(detail.tree_info.tree), + queue: SerializablePubkey::from(detail.tree_info.queue), + cpi_context: None, + next_tree_context: None, + }, + }); + } + + for detail in internal_result.address_proof_details { + v2_addresses_from_prover.push(AddressProofInputs { + address: detail.address, + root: detail.root, + root_index: Some(detail.root_index_mod_queue).into(), + merkle_context: MerkleContextV2 { + tree_type: detail.tree_info.tree_type as u16, + tree: SerializablePubkey::from(detail.tree_info.tree), + queue: SerializablePubkey::from(detail.tree_info.queue), + cpi_context: None, + next_tree_context: None, + }, + // If AddressProofInputs was expanded to include next_index, etc.: + // next_index: Some(detail.next_index), + // leaf_lower_range_value: Some(detail.lower_range_address_hex), + // leaf_higher_range_value: Some(detail.higher_range_address_hex), + }); + } + } + + // Combine "prove by index" accounts with accounts from prover + for (i, original_idx) in original_indices_for_full_proof_hashes.iter().enumerate() { + // Ensure we don't panic if v2_accounts_from_prover has fewer items than expected (shouldn't happen with correct logic) + if i < v2_accounts_from_prover.len() { + accounts_for_prove_by_index_inputs[*original_idx] = + Some(v2_accounts_from_prover[i].clone()); + } + } + let final_accounts_list: Vec = accounts_for_prove_by_index_inputs + .into_iter() + .flatten() + .collect(); + + Ok(GetValidityProofResponseV2 { + value: CompressedProofWithContextV2 { + compressed_proof: resulting_compressed_proof, + accounts: final_accounts_list, + addresses: v2_addresses_from_prover, + }, + context: v2_context, + }) +} diff --git a/src/api/method/mod.rs b/src/api/method/mod.rs index 9774cfd4..2498ec62 100644 --- a/src/api/method/mod.rs +++ b/src/api/method/mod.rs @@ -18,7 +18,12 @@ pub mod get_latest_compression_signatures; pub mod get_latest_non_voting_signatures; pub mod get_multiple_compressed_account_proofs; pub mod get_multiple_compressed_accounts; + pub mod get_multiple_new_address_proofs; +pub mod get_queue_elements; pub mod get_transaction_with_compression_info; pub mod get_validity_proof; + +pub mod get_batch_address_update_info; + pub mod utils; diff --git a/src/api/method/utils.rs b/src/api/method/utils.rs index a6f69d73..bcd5d828 100644 --- a/src/api/method/utils.rs +++ b/src/api/method/utils.rs @@ -1,11 +1,11 @@ -use crate::common::typedefs::account::{Account, AccountData}; +use crate::common::typedefs::account::{Account, AccountV2}; use crate::common::typedefs::bs58_string::Base58String; use crate::common::typedefs::bs64_string::Base64String; use crate::common::typedefs::serializable_signature::SerializableSignature; use crate::common::typedefs::token_data::{AccountState, TokenData}; use crate::common::typedefs::unix_timestamp::UnixTimestamp; use crate::common::typedefs::unsigned_integer::UnsignedInteger; -use crate::dao::generated::{accounts, blocks, token_accounts}; +use crate::dao::generated::{accounts, token_accounts}; use byteorder::{ByteOrder, LittleEndian}; use sea_orm::sea_query::SimpleExpr; @@ -13,18 +13,18 @@ use sea_orm::{ ColumnTrait, ConnectionTrait, DatabaseConnection, EntityTrait, FromQueryResult, QueryFilter, QueryOrder, QuerySelect, Statement, Value, }; -use serde::{de, Deserialize, Deserializer, Serialize}; +use serde::{Deserialize, Serialize}; use solana_sdk::signature::Signature; -use sqlx::types::Decimal; -use utoipa::openapi::{ObjectBuilder, RefOr, Schema, SchemaType}; -use utoipa::ToSchema; - +use crate::common::typedefs::context::Context; use crate::common::typedefs::hash::Hash; +use crate::common::typedefs::limit::Limit; use crate::common::typedefs::serializable_pubkey::SerializablePubkey; +use sqlx::types::Decimal; +use utoipa::openapi::{RefOr, Schema}; +use utoipa::ToSchema; use super::super::error::PhotonApiError; -use sea_orm_migration::sea_query::Expr; pub const PAGE_LIMIT: u64 = 1000; @@ -35,133 +35,12 @@ pub fn parse_decimal(value: Decimal) -> Result { .map_err(|_| PhotonApiError::UnexpectedError("Invalid decimal value".to_string())) } -#[derive(Debug, Clone, PartialEq, Eq, Serialize, ToSchema)] -pub struct Limit(u64); - -impl Limit { - pub fn new(value: u64) -> Result { - if value > PAGE_LIMIT { - Err("Value must be less than or equal to 1000") - } else { - Ok(Limit(value)) - } - } - - pub fn value(&self) -> u64 { - self.0 - } -} - -impl Default for Limit { - fn default() -> Self { - Limit(PAGE_LIMIT) - } -} - -impl<'de> Deserialize<'de> for Limit { - fn deserialize(deserializer: D) -> Result - where - D: Deserializer<'de>, - { - let value = u64::deserialize(deserializer)?; - if value > PAGE_LIMIT { - Err(de::Error::invalid_value( - de::Unexpected::Unsigned(value), - &"a value less than or equal to 1000", - )) - } else { - Ok(Limit(value)) - } - } -} - -#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, FromQueryResult)] -#[serde(deny_unknown_fields, rename_all = "camelCase")] -pub struct Context { - pub slot: u64, -} - -impl<'__s> ToSchema<'__s> for Context { - fn schema() -> (&'__s str, RefOr) { - let schema = Schema::Object( - ObjectBuilder::new() - .schema_type(SchemaType::Object) - .property("slot", UnsignedInteger::schema().1) - .required("slot") - .build(), - ); - ("Context", RefOr::T(schema)) - } - - fn aliases() -> Vec<(&'static str, utoipa::openapi::schema::Schema)> { - Vec::new() - } -} - -#[derive(FromQueryResult)] -pub struct ContextModel { - // Postgres and SQLlite do not support u64 as return type. We need to use i64 and cast it to u64. - pub slot: i64, -} - -impl Context { - pub async fn extract(db: &DatabaseConnection) -> Result { - let context = blocks::Entity::find() - .select_only() - .column_as(Expr::col(blocks::Column::Slot).max(), "slot") - .into_model::() - .one(db) - .await? - .ok_or(PhotonApiError::RecordNotFound( - "No data has been indexed".to_string(), - ))?; - Ok(Context { - slot: context.slot as u64, - }) - } -} - -pub fn parse_discriminator(discriminator: Option>) -> Option { - discriminator.map(|discriminator| LittleEndian::read_u64(&discriminator)) -} - -fn parse_leaf_index(leaf_index: i64) -> Result { +pub(crate) fn parse_leaf_index(leaf_index: i64) -> Result { leaf_index .try_into() .map_err(|_| PhotonApiError::UnexpectedError("Invalid leaf index".to_string())) } -pub fn parse_account_model(account: accounts::Model) -> Result { - let data = match (account.data, account.data_hash, account.discriminator) { - (Some(data), Some(data_hash), Some(discriminator)) => Some(AccountData { - data: Base64String(data), - data_hash: data_hash.try_into()?, - discriminator: UnsignedInteger(parse_decimal(discriminator)?), - }), - (None, None, None) => None, - _ => { - return Err(PhotonApiError::UnexpectedError( - "Invalid account data".to_string(), - )) - } - }; - - Ok(Account { - hash: account.hash.try_into()?, - address: account - .address - .map(SerializablePubkey::try_from) - .transpose()?, - data, - owner: account.owner.try_into()?, - tree: account.tree.try_into()?, - leaf_index: UnsignedInteger(parse_leaf_index(account.leaf_index)? as u64), - lamports: UnsignedInteger(parse_decimal(account.lamports)?), - slot_created: UnsignedInteger(account.slot_created as u64), - seq: UnsignedInteger(account.seq as u64), - }) -} - // We do not use generics to simplify documentation generation. #[derive(Debug, Clone, PartialEq, Eq, Serialize, ToSchema)] #[serde(deny_unknown_fields, rename_all = "camelCase")] @@ -172,7 +51,7 @@ pub struct TokenAccountListResponse { #[derive(Debug, Clone, PartialEq, Eq, Serialize, ToSchema, Default)] #[serde(deny_unknown_fields, rename_all = "camelCase")] -pub struct TokenAcccount { +pub struct TokenAccount { pub account: Account, pub token_data: TokenData, } @@ -180,7 +59,7 @@ pub struct TokenAcccount { #[derive(Debug, Clone, PartialEq, Eq, Serialize, ToSchema, Default)] #[serde(rename_all = "camelCase")] pub struct TokenAccountList { - pub items: Vec, + pub items: Vec, pub cursor: Option, } @@ -243,7 +122,7 @@ pub struct EnrichedTokenAccountModel { } pub async fn fetch_token_accounts( - conn: &sea_orm::DatabaseConnection, + conn: &DatabaseConnection, owner_or_delegate: Authority, options: GetCompressedTokenAccountsByAuthorityOptions, ) -> Result { @@ -299,8 +178,8 @@ pub async fn fetch_token_accounts( let account = account.ok_or(PhotonApiError::RecordNotFound( "Base account not found for token account".to_string(), ))?; - Ok(TokenAcccount { - account: parse_account_model(account)?, + Ok(TokenAccount { + account: account.try_into()?, token_data: TokenData { mint: token_account.mint.try_into()?, owner: token_account.owner.try_into()?, @@ -309,7 +188,7 @@ pub async fn fetch_token_accounts( .delegate .map(SerializablePubkey::try_from) .transpose()?, - state: (AccountState::try_from(token_account.state as u8)).map_err(|e| { + state: AccountState::try_from(token_account.state as u8).map_err(|e| { PhotonApiError::UnexpectedError(format!( "Unable to parse account state {}", e @@ -319,7 +198,7 @@ pub async fn fetch_token_accounts( }, }) }) - .collect::, PhotonApiError>>()?; + .collect::, PhotonApiError>>()?; let mut cursor = items.last().map(|item| { Base58String({ @@ -580,11 +459,12 @@ fn compute_cursor_filter( PhotonApiError::ValidationError("Invalid signature in cursor".to_string()) })?; + let cursor_filter = format!( + "AND (transactions.slot < ${} OR (transactions.slot = ${} AND transactions.signature < ${}))", + num_preceding_args + 1, num_preceding_args + 2, num_preceding_args + 3 + ); Ok(( - format!( - "AND (transactions.slot < ${} OR (transactions.slot = ${} AND transactions.signature < ${}))", - num_preceding_args + 1, num_preceding_args + 2, num_preceding_args + 3 - ), + cursor_filter, vec![ slot.into(), slot.into(), @@ -755,3 +635,123 @@ pub struct GetNonPaginatedSignaturesResponseWithError { pub context: Context, pub value: SignatureInfoListWithError, } + +#[derive(Debug, Clone, PartialEq, Eq, Serialize, ToSchema)] +#[serde(deny_unknown_fields, rename_all = "camelCase")] +pub struct TokenAccountListResponseV2 { + pub context: Context, + pub value: TokenAccountListV2, +} + +#[derive(Debug, Clone, PartialEq, Eq, Serialize, ToSchema)] +#[serde(deny_unknown_fields, rename_all = "camelCase")] +pub struct TokenAccountV2 { + pub account: AccountV2, + pub token_data: TokenData, +} + +#[derive(Debug, Clone, PartialEq, Eq, Serialize, ToSchema, Default)] +#[serde(rename_all = "camelCase")] +pub struct TokenAccountListV2 { + pub items: Vec, + pub cursor: Option, +} + +// Adds queue to the token account +pub async fn fetch_token_accounts_v2( + conn: &DatabaseConnection, + owner_or_delegate: Authority, + options: GetCompressedTokenAccountsByAuthorityOptions, +) -> Result { + let context = Context::extract(conn).await?; + let mut filter = match owner_or_delegate { + Authority::Owner(owner) => token_accounts::Column::Owner.eq::>(owner.into()), + Authority::Delegate(delegate) => { + token_accounts::Column::Delegate.eq::>(delegate.into()) + } + } + .and(token_accounts::Column::Spent.eq(false)); + + let mut limit = PAGE_LIMIT; + if let Some(mint) = options.mint { + filter = filter.and(token_accounts::Column::Mint.eq::>(mint.into())); + } + if let Some(cursor) = options.cursor { + let bytes = cursor.0; + let expected_cursor_length = 64; + if bytes.len() != expected_cursor_length { + return Err(PhotonApiError::ValidationError(format!( + "Invalid cursor length. Expected {}. Received {}.", + expected_cursor_length, + bytes.len() + ))); + } + let (mint, hash) = bytes.split_at(32); + + filter = filter.and( + token_accounts::Column::Mint.gt::>(mint.into()).or( + token_accounts::Column::Mint + .eq::>(mint.into()) + .and(token_accounts::Column::Hash.gt::>(hash.into())), + ), + ); + } + if let Some(l) = options.limit { + limit = l.value(); + } + + let items = token_accounts::Entity::find() + .find_also_related(accounts::Entity) + .filter(filter) + .order_by(token_accounts::Column::Mint, sea_orm::Order::Asc) + .order_by(token_accounts::Column::Hash, sea_orm::Order::Asc) + .limit(limit) + .order_by(token_accounts::Column::Mint, sea_orm::Order::Asc) + .order_by(token_accounts::Column::Hash, sea_orm::Order::Asc) + .all(conn) + .await? + .drain(..) + .map(|(token_account, account)| { + let account = account.ok_or(PhotonApiError::RecordNotFound( + "Base account not found for token account".to_string(), + ))?; + Ok(TokenAccountV2 { + account: account.try_into()?, + token_data: TokenData { + mint: token_account.mint.try_into()?, + owner: token_account.owner.try_into()?, + amount: UnsignedInteger(parse_decimal(token_account.amount)?), + delegate: token_account + .delegate + .map(SerializablePubkey::try_from) + .transpose()?, + state: AccountState::try_from(token_account.state as u8).map_err(|e| { + PhotonApiError::UnexpectedError(format!( + "Unable to parse account state {}", + e + )) + })?, + tlv: token_account.tlv.map(Base64String), + }, + }) + }) + .collect::, PhotonApiError>>()?; + + let mut cursor = items.last().map(|item| { + Base58String({ + let item = item.clone(); + let mut bytes: Vec = item.token_data.mint.into(); + let hash_bytes: Vec = item.account.hash.into(); + bytes.extend_from_slice(hash_bytes.as_slice()); + bytes + }) + }); + if items.len() < limit as usize { + cursor = None; + } + + Ok(TokenAccountListResponseV2 { + value: TokenAccountListV2 { items, cursor }, + context, + }) +} diff --git a/src/api/mod.rs b/src/api/mod.rs index dc43af60..cf2ae3c3 100644 --- a/src/api/mod.rs +++ b/src/api/mod.rs @@ -1,3 +1,4 @@ +#[allow(clippy::module_inception)] pub mod api; pub mod error; pub mod method; diff --git a/src/api/rpc_server.rs b/src/api/rpc_server.rs index 34ba9f37..f29678aa 100644 --- a/src/api/rpc_server.rs +++ b/src/api/rpc_server.rs @@ -65,6 +65,17 @@ fn build_rpc_module(api_and_indexer: PhotonApi) -> Result, }, )?; + module.register_async_method( + "getCompressedAccountProofV2", + |rpc_params, rpc_context| async move { + let api = rpc_context.as_ref(); + let payload = rpc_params.parse()?; + api.get_compressed_account_proof_v2(payload) + .await + .map_err(Into::into) + }, + )?; + module.register_async_method( "getMultipleCompressedAccountProofs", |rpc_params, rpc_context| async move { @@ -76,6 +87,17 @@ fn build_rpc_module(api_and_indexer: PhotonApi) -> Result, }, )?; + module.register_async_method( + "getMultipleCompressedAccountProofsV2", + |rpc_params, rpc_context| async move { + let api = rpc_context.as_ref(); + let payload = rpc_params.parse()?; + api.get_multiple_compressed_account_proofs_v2(payload) + .await + .map_err(Into::into) + }, + )?; + module.register_async_method( "getCompressedTokenAccountsByOwner", |rpc_params, rpc_context| async move { @@ -166,6 +188,23 @@ fn build_rpc_module(api_and_indexer: PhotonApi) -> Result, api.get_indexer_slot().await.map_err(Into::into) })?; + module.register_async_method("getQueueElements", |rpc_params, rpc_context| async move { + let api = rpc_context.as_ref(); + let payload = rpc_params.parse()?; + api.get_queue_elements(payload).await.map_err(Into::into) + })?; + + module.register_async_method( + "getBatchAddressUpdateInfo", + |rpc_params, rpc_context| async move { + let api = rpc_context.as_ref(); + let payload = rpc_params.parse()?; + api.get_batch_address_update_info(payload) + .await + .map_err(Into::into) + }, + )?; + module.register_async_method( "getCompressedAccountsByOwner", |rpc_params, rpc_context| async move { @@ -177,6 +216,17 @@ fn build_rpc_module(api_and_indexer: PhotonApi) -> Result, }, )?; + module.register_async_method( + "getCompressedAccountsByOwnerV2", + |rpc_params, rpc_context| async move { + let api = rpc_context.as_ref(); + let payload = rpc_params.parse()?; + api.get_compressed_accounts_by_owner_v2(payload) + .await + .map_err(Into::into) + }, + )?; + module.register_async_method( "getMultipleCompressedAccounts", |rpc_params, rpc_context| async move { @@ -242,12 +292,19 @@ fn build_rpc_module(api_and_indexer: PhotonApi) -> Result, .map_err(Into::into) }, )?; + module.register_async_method("getValidityProof", |rpc_params, rpc_context| async move { let api = rpc_context.as_ref(); let payload = rpc_params.parse()?; api.get_validity_proof(payload).await.map_err(Into::into) })?; + module.register_async_method("getValidityProofV2", |rpc_params, rpc_context| async move { + let api = rpc_context.as_ref(); + let payload = rpc_params.parse()?; + api.get_validity_proof_v2(payload).await.map_err(Into::into) + })?; + module.register_async_method( "getLatestCompressionSignatures", |rpc_params, rpc_context| async move { @@ -313,5 +370,60 @@ fn build_rpc_module(api_and_indexer: PhotonApi) -> Result, }, )?; + module.register_async_method( + "getCompressedAccountV2", + |rpc_params, rpc_context| async move { + let api = rpc_context.as_ref(); + let payload = rpc_params.parse()?; + api.get_compressed_account_v2(payload) + .await + .map_err(Into::into) + }, + )?; + + module.register_async_method( + "getMultipleCompressedAccountsV2", + |rpc_params, rpc_context| async move { + let api = rpc_context.as_ref(); + let payload = rpc_params.parse()?; + api.get_multiple_compressed_accounts_v2(payload) + .await + .map_err(Into::into) + }, + )?; + + module.register_async_method( + "getCompressedTokenAccountsByOwnerV2", + |rpc_params, rpc_context| async move { + let api = rpc_context.as_ref(); + let payload = rpc_params.parse()?; + api.get_compressed_token_accounts_by_owner_v2(payload) + .await + .map_err(Into::into) + }, + )?; + + module.register_async_method( + "getCompressedTokenAccountsByDelegateV2", + |rpc_params, rpc_context| async move { + let api = rpc_context.as_ref(); + let payload = rpc_params.parse()?; + api.get_compressed_token_accounts_by_delegate_v2(payload) + .await + .map_err(Into::into) + }, + )?; + + module.register_async_method( + "getTransactionWithCompressionInfoV2", + |rpc_params, rpc_context| async move { + let api = rpc_context.as_ref(); + let payload = rpc_params.parse()?; + api.get_transaction_with_compression_info_v2(payload) + .await + .map_err(Into::into) + }, + )?; + Ok(module) } diff --git a/src/common/mod.rs b/src/common/mod.rs index 6a491fb1..16ff8fc4 100644 --- a/src/common/mod.rs +++ b/src/common/mod.rs @@ -106,7 +106,11 @@ impl fmt::Display for LoggingFormat { pub fn setup_logging(logging_format: LoggingFormat) { let env_filter = env::var("RUST_LOG") .unwrap_or("info,sqlx=error,sea_orm_migration=error,jsonrpsee_server=warn".to_string()); - let subscriber = tracing_subscriber::fmt().with_env_filter(env_filter); + let subscriber = tracing_subscriber::fmt() + .with_env_filter(env_filter) + .with_target(true) + .with_timer(tracing_subscriber::fmt::time::time()) + .with_span_events(tracing_subscriber::fmt::format::FmtSpan::FULL); match logging_format { LoggingFormat::Standard => subscriber.init(), LoggingFormat::Json => subscriber.json().init(), diff --git a/src/common/typedefs/account.rs b/src/common/typedefs/account.rs deleted file mode 100644 index 443d43ac..00000000 --- a/src/common/typedefs/account.rs +++ /dev/null @@ -1,30 +0,0 @@ -use serde::Serialize; - -use utoipa::ToSchema; - -use super::{ - bs64_string::Base64String, hash::Hash, serializable_pubkey::SerializablePubkey, - unsigned_integer::UnsignedInteger, -}; - -#[derive(Debug, Clone, PartialEq, Eq, Serialize, ToSchema, Default)] -#[serde(deny_unknown_fields, rename_all = "camelCase")] -pub struct Account { - pub hash: Hash, - pub address: Option, - pub data: Option, - pub owner: SerializablePubkey, - pub lamports: UnsignedInteger, - pub tree: SerializablePubkey, - pub leaf_index: UnsignedInteger, - pub seq: UnsignedInteger, - pub slot_created: UnsignedInteger, -} - -#[derive(Debug, Clone, PartialEq, Eq, Serialize, ToSchema, Default)] -#[serde(deny_unknown_fields, rename_all = "camelCase")] -pub struct AccountData { - pub discriminator: UnsignedInteger, - pub data: Base64String, - pub data_hash: Hash, -} diff --git a/src/common/typedefs/account/context.rs b/src/common/typedefs/account/context.rs new file mode 100644 index 00000000..83db5dda --- /dev/null +++ b/src/common/typedefs/account/context.rs @@ -0,0 +1,153 @@ +use crate::api::error::PhotonApiError; +use crate::api::method::utils::{parse_decimal, parse_leaf_index}; +use crate::common::typedefs::account::{Account, AccountData}; +use crate::common::typedefs::bs64_string::Base64String; +use crate::common::typedefs::hash::Hash; +use crate::common::typedefs::serializable_pubkey::SerializablePubkey; +use crate::common::typedefs::unsigned_integer::UnsignedInteger; +use crate::dao::generated::accounts::Model; +use crate::ingester::parser::indexer_events::CompressedAccount; +use byteorder::{ByteOrder, LittleEndian}; +use light_compressed_account::TreeType; +use serde::Serialize; +use solana_pubkey::Pubkey; +use utoipa::ToSchema; + +/// This is currently used internally: +/// - Internal (state_updates,..) +/// - GetTransactionWithCompressionInfo (internally) +/// - GetTransactionWithCompressionInfoV2 (internally) +/// All endpoints return AccountV2. +#[derive(Debug, Clone, PartialEq, Eq, Serialize, ToSchema, Default)] +#[serde(deny_unknown_fields, rename_all = "camelCase")] +pub struct AccountContext { + pub queue: SerializablePubkey, + pub in_output_queue: bool, + pub spent: bool, + pub nullified_in_tree: bool, + // if nullifier_queue_index is not None, then this account is in input queue + // an account can be in the input and output queue at the same time. + // an account that is in the input queue must have been in the output queue before or currently is in the output queue + pub nullifier_queue_index: Option, + // V1 trees: None + // V2 Batched trees: + // None if not inserted into input queue or inserted into merkle tree from input queue + // Some(H(account_hash, leaf_index, tx_hash)) + pub nullifier: Option, + // tx_hash is: + // V1: None + // V2 Batched: None if inserted into output queue or inserted in tree from output queue, else Some(nullifier) + pub tx_hash: Option, + pub tree_type: u16, +} + +#[derive(Debug, Clone, PartialEq, Eq, Serialize, ToSchema)] +#[serde(deny_unknown_fields, rename_all = "camelCase")] +pub struct AccountWithContext { + pub account: Account, + pub context: AccountContext, +} + +impl AccountWithContext { + #[allow(clippy::too_many_arguments)] + pub fn new( + compressed_account: CompressedAccount, + hash: &[u8; 32], + tree: Pubkey, + queue: Pubkey, + leaf_index: u32, + slot: u64, + seq: Option, + in_output_queue: bool, + spent: bool, + nullifier: Option, + nullifier_queue_index: Option, + tree_type: TreeType, + ) -> Self { + let CompressedAccount { + owner, + lamports, + address, + data, + } = compressed_account; + + let data = data.map(|d| AccountData { + discriminator: UnsignedInteger(LittleEndian::read_u64(&d.discriminator)), + data: Base64String(d.data), + data_hash: Hash::from(d.data_hash), + }); + + Self { + account: Account { + owner: owner.into(), + lamports: UnsignedInteger(lamports), + address: address.map(SerializablePubkey::from), + data, + hash: hash.into(), + slot_created: UnsignedInteger(slot), + leaf_index: UnsignedInteger(leaf_index as u64), + tree: SerializablePubkey::from(tree), + seq: seq.map(UnsignedInteger), + }, + context: AccountContext { + queue: queue.into(), + in_output_queue, + spent, + nullified_in_tree: false, + nullifier_queue_index: nullifier_queue_index.map(UnsignedInteger), + nullifier, + tx_hash: None, + tree_type: tree_type as u16, + }, + } + } +} + +impl TryFrom for AccountWithContext { + type Error = PhotonApiError; + + fn try_from(account: Model) -> Result { + let data = match (account.data, account.data_hash, account.discriminator) { + (Some(data), Some(data_hash), Some(discriminator)) => Some(AccountData { + data: Base64String(data), + data_hash: data_hash.try_into()?, + discriminator: UnsignedInteger(parse_decimal(discriminator)?), + }), + (None, None, None) => None, + _ => { + return Err(PhotonApiError::UnexpectedError( + "Invalid account data".to_string(), + )) + } + }; + + Ok(AccountWithContext { + account: Account { + hash: account.hash.try_into()?, + address: account + .address + .map(SerializablePubkey::try_from) + .transpose()?, + data, + owner: account.owner.try_into()?, + tree: account.tree.try_into()?, + leaf_index: UnsignedInteger(parse_leaf_index(account.leaf_index)?), + lamports: UnsignedInteger(parse_decimal(account.lamports)?), + slot_created: UnsignedInteger(account.slot_created as u64), + seq: account.seq.map(|seq| UnsignedInteger(seq as u64)), + }, + context: AccountContext { + queue: account.queue.try_into()?, + in_output_queue: account.in_output_queue, + spent: account.spent, + nullified_in_tree: account.nullified_in_tree, + nullifier_queue_index: account + .nullifier_queue_index + .map(|index| UnsignedInteger(index as u64)), + nullifier: account.nullifier.map(Hash::try_from).transpose()?, + tx_hash: account.tx_hash.map(Hash::try_from).transpose()?, + tree_type: account.tree_type as u16, + }, + }) + } +} diff --git a/src/common/typedefs/account/mod.rs b/src/common/typedefs/account/mod.rs new file mode 100644 index 00000000..a508a289 --- /dev/null +++ b/src/common/typedefs/account/mod.rs @@ -0,0 +1,7 @@ +mod context; +mod v1; +mod v2; + +pub use context::{AccountContext, AccountWithContext}; +pub use v1::{Account, AccountData}; +pub use v2::AccountV2; diff --git a/src/common/typedefs/account/v1.rs b/src/common/typedefs/account/v1.rs new file mode 100644 index 00000000..05d83051 --- /dev/null +++ b/src/common/typedefs/account/v1.rs @@ -0,0 +1,72 @@ +use crate::api::error::PhotonApiError; +use crate::api::method::utils::parse_decimal; +use crate::common::typedefs::bs64_string::Base64String; +use crate::common::typedefs::hash::Hash; +use crate::common::typedefs::serializable_pubkey::SerializablePubkey; +use crate::common::typedefs::unsigned_integer::UnsignedInteger; +use crate::dao::generated::accounts::Model; +use jsonrpsee_core::Serialize; +use utoipa::ToSchema; + +#[derive(Debug, Clone, PartialEq, Eq, Serialize, ToSchema, Default)] +#[serde(deny_unknown_fields, rename_all = "camelCase")] +pub struct Account { + pub hash: Hash, + pub address: Option, + pub data: Option, + pub owner: SerializablePubkey, + pub lamports: UnsignedInteger, + pub tree: SerializablePubkey, + pub leaf_index: UnsignedInteger, + // For V1 trees is always Some() since the user tx appends directly to the Merkle tree + // for V2 batched trees: + // 2.1. None when is in output queue + // 2.2. Some once it was inserted into the Merkle tree from the output queue + pub seq: Option, + pub slot_created: UnsignedInteger, +} + +#[derive(Debug, Clone, PartialEq, Eq, Serialize, ToSchema, Default)] +#[serde(deny_unknown_fields, rename_all = "camelCase")] +pub struct AccountData { + pub discriminator: UnsignedInteger, + pub data: Base64String, + pub data_hash: Hash, +} + +impl TryFrom for Account { + type Error = PhotonApiError; + + fn try_from(account: Model) -> Result { + let data = match (account.data, account.data_hash, account.discriminator) { + (Some(data), Some(data_hash), Some(discriminator)) => Some(AccountData { + data: Base64String(data), + data_hash: data_hash.try_into()?, + discriminator: UnsignedInteger(parse_decimal(discriminator)?), + }), + (None, None, None) => None, + _ => { + return Err(PhotonApiError::UnexpectedError( + "Invalid account data".to_string(), + )) + } + }; + + Ok(Account { + hash: account.hash.try_into()?, + address: account + .address + .map(SerializablePubkey::try_from) + .transpose()?, + data, + owner: account.owner.try_into()?, + tree: account.tree.try_into()?, + leaf_index: UnsignedInteger(crate::api::method::utils::parse_leaf_index( + account.leaf_index, + )?), + lamports: UnsignedInteger(parse_decimal(account.lamports)?), + slot_created: UnsignedInteger(account.slot_created as u64), + seq: account.seq.map(|seq| UnsignedInteger(seq as u64)), + }) + } +} diff --git a/src/common/typedefs/account/v2.rs b/src/common/typedefs/account/v2.rs new file mode 100644 index 00000000..5f09e3cd --- /dev/null +++ b/src/common/typedefs/account/v2.rs @@ -0,0 +1,79 @@ +use crate::api::error::PhotonApiError; +use crate::api::method::get_validity_proof::MerkleContextV2; +use crate::api::method::utils::parse_decimal; +use crate::common::typedefs::account::AccountData; +use crate::common::typedefs::bs64_string::Base64String; +use crate::common::typedefs::hash::Hash; +use crate::common::typedefs::serializable_pubkey::SerializablePubkey; +use crate::common::typedefs::unsigned_integer::UnsignedInteger; +use crate::dao::generated::accounts::Model; +use serde::Serialize; +use utoipa::ToSchema; + +#[derive(Debug, Clone, PartialEq, Eq, Serialize, ToSchema)] +#[serde(deny_unknown_fields, rename_all = "camelCase")] +pub struct AccountV2 { + pub hash: Hash, + pub address: Option, + pub data: Option, + pub owner: SerializablePubkey, + pub lamports: UnsignedInteger, + pub leaf_index: UnsignedInteger, + // For legacy trees is always Some() since the user tx appends directly to the Merkle tree + // for batched tress: + // 2.1. None when is in output queue + // 2.2. Some once it was inserted into the Merkle tree from the output queue + pub seq: Option, + pub slot_created: UnsignedInteger, + // Indicates if the account is not yet provable by validity_proof. The + // account resides in on-chain RAM, with leaf_index mapping to its position. + // This allows the protocol to prove the account's validity using only the + // leaf_index. Consumers use this to decide if a validity proof is needed, + // saving one RPC roundtrip. + pub prove_by_index: bool, + pub merkle_context: MerkleContextV2, +} + +impl TryFrom for AccountV2 { + type Error = PhotonApiError; + + fn try_from(account: Model) -> Result { + let data = match (account.data, account.data_hash, account.discriminator) { + (Some(data), Some(data_hash), Some(discriminator)) => Some(AccountData { + data: Base64String(data), + data_hash: data_hash.try_into()?, + discriminator: UnsignedInteger(parse_decimal(discriminator)?), + }), + (None, None, None) => None, + _ => { + return Err(PhotonApiError::UnexpectedError( + "Invalid account data".to_string(), + )) + } + }; + + Ok(AccountV2 { + hash: account.hash.try_into()?, + address: account + .address + .map(SerializablePubkey::try_from) + .transpose()?, + data, + owner: account.owner.try_into()?, + leaf_index: UnsignedInteger(crate::api::method::utils::parse_leaf_index( + account.leaf_index, + )?), + lamports: UnsignedInteger(parse_decimal(account.lamports)?), + slot_created: UnsignedInteger(account.slot_created as u64), + seq: account.seq.map(|seq| UnsignedInteger(seq as u64)), + prove_by_index: account.in_output_queue, + merkle_context: MerkleContextV2 { + tree_type: account.tree_type as u16, + tree: account.tree.try_into()?, + queue: account.queue.clone().try_into()?, + cpi_context: None, + next_tree_context: None, + }, + }) + } +} diff --git a/src/common/typedefs/context.rs b/src/common/typedefs/context.rs new file mode 100644 index 00000000..5485f47f --- /dev/null +++ b/src/common/typedefs/context.rs @@ -0,0 +1,55 @@ +use crate::api::error::PhotonApiError; +use crate::common::typedefs::unsigned_integer::UnsignedInteger; +use crate::dao::generated::blocks; +use crate::migration::Expr; +use jsonrpsee_core::Serialize; +use sea_orm::{DatabaseConnection, EntityTrait, FromQueryResult, QuerySelect}; +use serde::Deserialize; +use utoipa::openapi::{ObjectBuilder, RefOr, Schema, SchemaType}; +use utoipa::ToSchema; + +#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, FromQueryResult, Default)] +#[serde(deny_unknown_fields, rename_all = "camelCase")] +pub struct Context { + pub slot: u64, +} + +impl<'__s> ToSchema<'__s> for Context { + fn schema() -> (&'__s str, RefOr) { + let schema = Schema::Object( + ObjectBuilder::new() + .schema_type(SchemaType::Object) + .property("slot", UnsignedInteger::schema().1) + .required("slot") + .build(), + ); + ("Context", RefOr::T(schema)) + } + + fn aliases() -> Vec<(&'static str, Schema)> { + Vec::new() + } +} + +#[derive(FromQueryResult)] +pub struct ContextModel { + // Postgres and SQLlite do not support u64 as return type. We need to use i64 and cast it to u64. + pub slot: i64, +} + +impl Context { + pub async fn extract(db: &DatabaseConnection) -> Result { + let context = blocks::Entity::find() + .select_only() + .column_as(Expr::col(blocks::Column::Slot).max(), "slot") + .into_model::() + .one(db) + .await? + .ok_or(PhotonApiError::RecordNotFound( + "No data has been indexed".to_string(), + ))?; + Ok(Context { + slot: context.slot as u64, + }) + } +} diff --git a/src/common/typedefs/hash.rs b/src/common/typedefs/hash.rs index 741fc113..7fa5b1fb 100644 --- a/src/common/typedefs/hash.rs +++ b/src/common/typedefs/hash.rs @@ -26,6 +26,15 @@ const MAX_BASE58_LEN: usize = 44; pub struct Hash(pub [u8; 32]); impl Hash { + pub fn new(bytes: &[u8]) -> Result { + if bytes.len() != 32 { + return Err(ParseHashError::WrongSize); + } + let mut array = [0u8; 32]; + array.copy_from_slice(bytes); + Ok(Hash(array)) + } + pub fn to_vec(&self) -> Vec { self.0.to_vec() } @@ -97,6 +106,12 @@ impl From<[u8; 32]> for Hash { } } +impl From<&[u8; 32]> for Hash { + fn from(bytes: &[u8; 32]) -> Self { + Hash(*bytes) + } +} + impl From for [u8; 32] { fn from(val: Hash) -> Self { val.0 diff --git a/src/common/typedefs/limit.rs b/src/common/typedefs/limit.rs new file mode 100644 index 00000000..078a1cc0 --- /dev/null +++ b/src/common/typedefs/limit.rs @@ -0,0 +1,44 @@ +use crate::api::method::utils::PAGE_LIMIT; +use jsonrpsee_core::Serialize; +use serde::{de, Deserialize, Deserializer}; +use utoipa::ToSchema; + +#[derive(Debug, Clone, PartialEq, Eq, Serialize, ToSchema)] +pub struct Limit(pub(crate) u64); + +impl Limit { + pub fn new(value: u64) -> Result { + if value > PAGE_LIMIT { + Err("Value must be less than or equal to 1000") + } else { + Ok(Limit(value)) + } + } + + pub fn value(&self) -> u64 { + self.0 + } +} + +impl Default for Limit { + fn default() -> Self { + Limit(PAGE_LIMIT) + } +} + +impl<'de> Deserialize<'de> for Limit { + fn deserialize(deserializer: D) -> Result + where + D: Deserializer<'de>, + { + let value = u64::deserialize(deserializer)?; + if value > PAGE_LIMIT { + Err(de::Error::invalid_value( + de::Unexpected::Unsigned(value), + &"a value less than or equal to 1000", + )) + } else { + Ok(Limit(value)) + } + } +} diff --git a/src/common/typedefs/mod.rs b/src/common/typedefs/mod.rs index 0ebca7a0..28910321 100644 --- a/src/common/typedefs/mod.rs +++ b/src/common/typedefs/mod.rs @@ -1,7 +1,9 @@ pub mod account; pub mod bs58_string; pub mod bs64_string; +pub mod context; pub mod hash; +pub mod limit; pub mod serializable_pubkey; pub mod serializable_signature; pub mod token_data; diff --git a/src/common/typedefs/serializable_pubkey.rs b/src/common/typedefs/serializable_pubkey.rs index 3d82e9f4..15578573 100644 --- a/src/common/typedefs/serializable_pubkey.rs +++ b/src/common/typedefs/serializable_pubkey.rs @@ -2,23 +2,20 @@ use core::fmt; use std::io::Read; use std::str::FromStr; - use borsh::BorshDeserialize; use serde::Deserialize; -use solana_sdk::pubkey::ParsePubkeyError; use serde::de::{self, Visitor}; use serde::ser::{Serialize, Serializer}; use serde::Deserializer; -use solana_sdk::pubkey::Pubkey as SolanaPubkey; +use solana_pubkey::ParsePubkeyError; +use solana_pubkey::Pubkey as SolanaPubkey; +use std::convert::TryFrom; use utoipa::openapi::{schema::Schema, RefOr}; use utoipa::openapi::{ObjectBuilder, SchemaType}; use utoipa::ToSchema; -use std::convert::TryFrom; - #[derive(Default, Clone, PartialEq, Eq, Hash, Copy)] -/// A Solana public key. pub struct SerializablePubkey(pub SolanaPubkey); impl SerializablePubkey { @@ -33,7 +30,7 @@ impl SerializablePubkey { impl anchor_lang::AnchorDeserialize for SerializablePubkey { fn deserialize(buf: &mut &[u8]) -> Result { - ::deserialize(buf).map(SerializablePubkey) + ::deserialize(buf).map(SerializablePubkey) } fn deserialize_reader(reader: &mut R) -> Result { @@ -66,7 +63,7 @@ impl<'__s> ToSchema<'__s> for SerializablePubkey { ("SerializablePubkey", RefOr::T(schema)) } - fn aliases() -> Vec<(&'static str, utoipa::openapi::schema::Schema)> { + fn aliases() -> Vec<(&'static str, Schema)> { Vec::new() } } @@ -91,6 +88,12 @@ impl From for SerializablePubkey { } } +impl From<&SolanaPubkey> for SerializablePubkey { + fn from(pubkey: &SolanaPubkey) -> Self { + SerializablePubkey(*pubkey) + } +} + impl From for Vec { fn from(val: SerializablePubkey) -> Self { val.0.to_bytes().to_vec() @@ -130,7 +133,7 @@ struct Base58Visitor; impl<'de> Visitor<'de> for Base58Visitor { type Value = SerializablePubkey; - fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result { + fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result { formatter.write_str("a base58 encoded string") } diff --git a/src/common/typedefs/unsigned_integer.rs b/src/common/typedefs/unsigned_integer.rs index 2a0c7111..542fcd53 100644 --- a/src/common/typedefs/unsigned_integer.rs +++ b/src/common/typedefs/unsigned_integer.rs @@ -1,11 +1,13 @@ -use serde::{Deserialize, Serialize}; +use serde::de::Visitor; +use serde::{de::Error, Deserialize, Deserializer, Serialize}; use serde_json::Number; +use std::fmt; use utoipa::{ - openapi::{ObjectBuilder, RefOr, Schema, SchemaType}, + openapi::{KnownFormat, ObjectBuilder, RefOr, Schema, SchemaFormat, SchemaType}, ToSchema, }; -#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default, Copy, PartialOrd, Ord)] +#[derive(Debug, Clone, PartialEq, Eq, Serialize, Default, Copy, PartialOrd, Ord)] #[serde(transparent)] pub struct UnsignedInteger(pub u64); @@ -18,12 +20,49 @@ impl<'__s> ToSchema<'__s> for UnsignedInteger { .example(Some(serde_json::Value::Number(serde_json::Number::from( 100, )))) + .format(Some(SchemaFormat::KnownFormat(KnownFormat::UInt64))) .build(), ); ("UnsignedInteger", RefOr::T(schema)) } } +impl<'de> Deserialize<'de> for UnsignedInteger { + fn deserialize(deserializer: D) -> Result + where + D: Deserializer<'de>, + { + struct UnsignedIntegerVisitor; + + impl<'de> Visitor<'de> for UnsignedIntegerVisitor { + type Value = UnsignedInteger; + + fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result { + formatter.write_str("an unsigned integer or string containing an unsigned integer") + } + + fn visit_u64(self, value: u64) -> Result + where + E: Error, + { + Ok(UnsignedInteger(value)) + } + + fn visit_str(self, value: &str) -> Result + where + E: Error, + { + value + .parse::() + .map(UnsignedInteger) + .map_err(|e| Error::custom(format!("Invalid unsigned integer value: {}", e))) + } + } + + deserializer.deserialize_any(UnsignedIntegerVisitor) + } +} + impl anchor_lang::AnchorDeserialize for UnsignedInteger { fn deserialize(buf: &mut &[u8]) -> Result { if buf.len() < 8 { diff --git a/src/dao/generated/accounts.rs b/src/dao/generated/accounts.rs index 38a621a6..daead88a 100644 --- a/src/dao/generated/accounts.rs +++ b/src/dao/generated/accounts.rs @@ -12,8 +12,16 @@ pub struct Model { pub address: Option>, pub owner: Vec, pub tree: Vec, + /// Queue pubkey, for batched trees output queue pubkey + pub queue: Vec, pub leaf_index: i64, - pub seq: i64, + pub in_output_queue: bool, + pub nullifier_queue_index: Option, + pub nullified_in_tree: bool, + pub tree_type: i32, + pub nullifier: Option>, + pub tx_hash: Option>, + pub seq: Option, pub slot_created: i64, pub spent: bool, pub prev_spent: Option, diff --git a/src/dao/generated/address_queue.rs b/src/dao/generated/address_queue.rs new file mode 100644 index 00000000..67c146d5 --- /dev/null +++ b/src/dao/generated/address_queue.rs @@ -0,0 +1,17 @@ +//! `SeaORM` Entity. Generated by sea-orm-codegen 0.10.6 + +use sea_orm::entity::prelude::*; + +#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)] +#[sea_orm(table_name = "address_queues")] +pub struct Model { + #[sea_orm(primary_key, auto_increment = false)] + pub address: Vec, + pub tree: Vec, + pub queue_index: i64, +} + +#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] +pub enum Relation {} + +impl ActiveModelBehavior for ActiveModel {} diff --git a/src/dao/generated/indexed_trees.rs b/src/dao/generated/indexed_trees.rs index 8606710b..c332c49d 100644 --- a/src/dao/generated/indexed_trees.rs +++ b/src/dao/generated/indexed_trees.rs @@ -12,7 +12,7 @@ pub struct Model { pub value: Vec, pub next_index: i64, pub next_value: Vec, - pub seq: i64, + pub seq: Option, } #[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] diff --git a/src/dao/generated/mod.rs b/src/dao/generated/mod.rs index 6dc3e2b6..94370fb3 100644 --- a/src/dao/generated/mod.rs +++ b/src/dao/generated/mod.rs @@ -4,6 +4,7 @@ pub mod prelude; pub mod account_transactions; pub mod accounts; +pub mod address_queue; pub mod blocks; pub mod indexed_trees; pub mod owner_balances; diff --git a/src/dao/generated/state_trees.rs b/src/dao/generated/state_trees.rs index 32c3777c..9a1f5afa 100644 --- a/src/dao/generated/state_trees.rs +++ b/src/dao/generated/state_trees.rs @@ -12,7 +12,7 @@ pub struct Model { pub leaf_idx: Option, pub level: i64, pub hash: Vec, - pub seq: i64, + pub seq: Option, } #[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] diff --git a/src/ingester/error.rs b/src/ingester/error.rs index 48e00ed1..12b87ef1 100644 --- a/src/ingester/error.rs +++ b/src/ingester/error.rs @@ -10,6 +10,10 @@ pub enum IngesterError { DatabaseError(String), #[error("Parser error: {0}")] ParserError(String), + #[error("Empty batch event.")] + EmptyBatchEvent, + #[error("Invalid event.")] + InvalidEvent, } impl From for IngesterError { diff --git a/src/ingester/fetchers/grpc.rs b/src/ingester/fetchers/grpc.rs index 33c2603b..5a4a6764 100644 --- a/src/ingester/fetchers/grpc.rs +++ b/src/ingester/fetchers/grpc.rs @@ -12,7 +12,8 @@ use log::info; use rand::distributions::Alphanumeric; use rand::Rng; use solana_client::nonblocking::rpc_client::RpcClient; -use solana_sdk::pubkey::Pubkey; +use solana_pubkey::Pubkey; +use solana_sdk::pubkey::Pubkey as SdkPubkey; use solana_sdk::signature::Signature; use tokio::time::sleep; use tracing::error; @@ -314,14 +315,17 @@ fn parse_transaction(transaction: SubscribeUpdateTransactionInfo) -> Transaction let mut instruction_groups: Vec = outer_intructions .iter() .map(|ix| { - let program_id = - Pubkey::try_from(accounts[ix.program_id_index as usize].clone()).unwrap(); + let sdk_program_id = + SdkPubkey::try_from(accounts[ix.program_id_index as usize].clone()).unwrap(); + let program_id = Pubkey::new_from_array(sdk_program_id.to_bytes()); let data = ix.data.clone(); let accounts: Vec = ix .accounts .iter() .map(|account_index| { - Pubkey::try_from(accounts[*account_index as usize].clone()).unwrap() + let sdk_pubkey = + SdkPubkey::try_from(accounts[*account_index as usize].clone()).unwrap(); + Pubkey::new_from_array(sdk_pubkey.to_bytes()) }) .collect(); @@ -343,14 +347,18 @@ fn parse_transaction(transaction: SubscribeUpdateTransactionInfo) -> Transaction } = inner_instruction_group; for instruction in instructions { let instruction_group = &mut instruction_groups[index as usize]; - let program_id = - Pubkey::try_from(accounts[instruction.program_id_index as usize].clone()).unwrap(); + let sdk_program_id = + SdkPubkey::try_from(accounts[instruction.program_id_index as usize].clone()) + .unwrap(); + let program_id = Pubkey::new_from_array(sdk_program_id.to_bytes()); let data = instruction.data.clone(); let accounts: Vec = instruction .accounts .iter() .map(|account_index| { - Pubkey::try_from(accounts[*account_index as usize].clone()).unwrap() + let sdk_pubkey = + SdkPubkey::try_from(accounts[*account_index as usize].clone()).unwrap(); + Pubkey::new_from_array(sdk_pubkey.to_bytes()) }) .collect(); instruction_group.inner_instructions.push(Instruction { diff --git a/src/ingester/fetchers/mod.rs b/src/ingester/fetchers/mod.rs index 28b11080..cc3235da 100644 --- a/src/ingester/fetchers/mod.rs +++ b/src/ingester/fetchers/mod.rs @@ -4,7 +4,6 @@ use async_stream::stream; use futures::{pin_mut, Stream, StreamExt}; use solana_client::nonblocking::rpc_client::RpcClient; - use super::typedefs::block_info::BlockInfo; pub mod grpc; diff --git a/src/ingester/indexer/mod.rs b/src/ingester/indexer/mod.rs index aa1fe0f3..fa696d56 100644 --- a/src/ingester/indexer/mod.rs +++ b/src/ingester/indexer/mod.rs @@ -17,7 +17,7 @@ const PRE_BACKFILL_FREQUENCY: u64 = 10; #[derive(FromQueryResult)] pub struct OptionalContextModel { - // Postgres and SQLlite do not support u64 as return type. We need to use i64 and cast it to u64. + // Postgres and SQLite do not support u64 as return type. We need to use i64 and cast it to u64. pub slot: Option, } diff --git a/src/ingester/mod.rs b/src/ingester/mod.rs index f0bdfc72..f2934d47 100644 --- a/src/ingester/mod.rs +++ b/src/ingester/mod.rs @@ -75,7 +75,6 @@ async fn index_block_metadatas( .build(tx.get_database_backend()); tx.execute(query).await?; } - Ok(()) } diff --git a/src/ingester/parser/indexer_events.rs b/src/ingester/parser/indexer_events.rs index a062b332..cbb4f99b 100644 --- a/src/ingester/parser/indexer_events.rs +++ b/src/ingester/parser/indexer_events.rs @@ -1,26 +1,72 @@ -/// Copied from the Light repo. We copy them instead of importing from the Light repo in order to +/// Copied from the Light repo. We copy them instead of importing from the Light repo in order /// to avoid having to import all of Light's dependencies. use anchor_lang::prelude::*; +use light_compressed_account::indexer_event::event::{BatchNullifyContext, NewAddress}; +use solana_pubkey::Pubkey; -#[derive(Debug, PartialEq, Default, Clone, AnchorSerialize, AnchorDeserialize)] +#[derive(Debug, PartialEq, Eq, Default, Clone, AnchorSerialize, AnchorDeserialize)] pub struct OutputCompressedAccountWithPackedContext { pub compressed_account: CompressedAccount, pub merkle_tree_index: u8, } -#[derive(Debug, Clone, AnchorSerialize, AnchorDeserialize, Default, PartialEq)] -pub struct MerkleTreeSequenceNumber { +#[derive(Debug, Clone, AnchorSerialize, AnchorDeserialize, Default, Eq, PartialEq)] +pub struct MerkleTreeSequenceNumberV2 { + pub tree_pubkey: Pubkey, + pub queue_pubkey: Pubkey, + pub tree_type: u64, + pub seq: u64, +} + +#[derive(Debug, Clone, AnchorSerialize, AnchorDeserialize, Default, Eq, PartialEq)] +pub struct MerkleTreeSequenceNumberV1 { pub pubkey: Pubkey, pub seq: u64, } -#[derive(Debug, Clone, AnchorSerialize, AnchorDeserialize, Default, PartialEq)] -pub struct PublicTransactionEvent { +#[derive(Debug, Clone, AnchorSerialize, AnchorDeserialize, Eq, PartialEq)] +pub enum MerkleTreeSequenceNumber { + V1(MerkleTreeSequenceNumberV1), + V2(MerkleTreeSequenceNumberV2), +} + +impl MerkleTreeSequenceNumber { + pub fn tree_pubkey(&self) -> Pubkey { + match self { + MerkleTreeSequenceNumber::V1(x) => x.pubkey, + MerkleTreeSequenceNumber::V2(x) => x.tree_pubkey, + } + } + pub fn seq(&self) -> u64 { + match self { + MerkleTreeSequenceNumber::V1(x) => x.seq, + MerkleTreeSequenceNumber::V2(x) => x.seq, + } + } +} + +#[derive(Debug, Clone, AnchorSerialize, AnchorDeserialize, Default, PartialEq, Eq)] +pub struct PublicTransactionEventV1 { + pub input_compressed_account_hashes: Vec<[u8; 32]>, + pub output_compressed_account_hashes: Vec<[u8; 32]>, + pub output_compressed_accounts: Vec, + pub output_leaf_indices: Vec, + pub sequence_numbers: Vec, + pub relay_fee: Option, + pub is_compress: bool, + pub compression_lamports: Option, + pub pubkey_array: Vec, + // TODO: remove(data can just be written into a compressed account) + pub message: Option>, +} + +#[derive(Debug, Clone, AnchorSerialize, AnchorDeserialize, Default, PartialEq, Eq)] +pub struct PublicTransactionEventV2 { pub input_compressed_account_hashes: Vec<[u8; 32]>, pub output_compressed_account_hashes: Vec<[u8; 32]>, pub output_compressed_accounts: Vec, pub output_leaf_indices: Vec, - pub sequence_numbers: Vec, + pub sequence_numbers: Vec, pub relay_fee: Option, pub is_compress: bool, pub compression_lamports: Option, @@ -29,7 +75,67 @@ pub struct PublicTransactionEvent { pub message: Option>, } -#[derive(Debug, PartialEq, Default, Clone, AnchorSerialize, AnchorDeserialize)] +impl Into for PublicTransactionEventV2 { + fn into(self) -> PublicTransactionEventV1 { + PublicTransactionEventV1 { + input_compressed_account_hashes: self.input_compressed_account_hashes, + output_compressed_account_hashes: self.output_compressed_account_hashes, + output_compressed_accounts: self.output_compressed_accounts, + output_leaf_indices: self.output_leaf_indices, + sequence_numbers: self + .sequence_numbers + .iter() + .map(|x| MerkleTreeSequenceNumberV1 { + pubkey: x.tree_pubkey, + seq: x.seq, + }) + .collect(), + relay_fee: self.relay_fee, + is_compress: self.is_compress, + compression_lamports: self.compression_lamports, + pubkey_array: self.pubkey_array, + message: self.message, + } + } +} + +impl Into for PublicTransactionEventV1 { + fn into(self) -> PublicTransactionEventV2 { + PublicTransactionEventV2 { + input_compressed_account_hashes: self.input_compressed_account_hashes, + output_compressed_account_hashes: self.output_compressed_account_hashes, + output_compressed_accounts: self.output_compressed_accounts, + output_leaf_indices: self.output_leaf_indices, + sequence_numbers: self + .sequence_numbers + .iter() + .map(|x| MerkleTreeSequenceNumberV2 { + tree_pubkey: x.pubkey, + queue_pubkey: x.pubkey, // Default queue pubkey to tree pubkey + tree_type: 0, // Default tree type to 0 (StateV1) + seq: x.seq, + }) + .collect(), + relay_fee: self.relay_fee, + is_compress: self.is_compress, + compression_lamports: self.compression_lamports, + pubkey_array: self.pubkey_array, + message: self.message, + } + } +} + +#[derive(Debug, Clone)] +pub struct BatchPublicTransactionEvent { + pub event: PublicTransactionEventV2, + pub new_addresses: Vec, + pub input_sequence_numbers: Vec, + pub address_sequence_numbers: Vec, + pub tx_hash: [u8; 32], + pub batch_input_accounts: Vec, +} + +#[derive(Debug, PartialEq, Eq, Default, Clone, AnchorSerialize, AnchorDeserialize)] pub struct CompressedAccount { pub owner: Pubkey, pub lamports: u64, @@ -37,7 +143,7 @@ pub struct CompressedAccount { pub data: Option, } -#[derive(Debug, PartialEq, Default, Clone, AnchorSerialize, AnchorDeserialize)] +#[derive(Debug, PartialEq, Eq, Default, Clone, AnchorSerialize, AnchorDeserialize)] pub struct CompressedAccountData { pub discriminator: [u8; 8], pub data: Vec, @@ -47,25 +153,28 @@ pub struct CompressedAccountData { /// Event containing the Merkle path of the given /// [`StateMerkleTree`](light_merkle_tree_program::state::StateMerkleTree) /// change. Indexers can use this type of events to re-build a non-sparse -/// version of state Merkle tree. -#[derive(AnchorDeserialize, AnchorSerialize, Debug)] +/// version of the state Merkle tree. +#[derive(AnchorDeserialize, AnchorSerialize, Clone, Eq, PartialEq, Debug)] #[repr(C)] pub enum MerkleTreeEvent { V1(ChangelogEvent), V2(NullifierEvent), V3(IndexedMerkleTreeEvent), + BatchAppend(BatchEvent), + BatchNullify(BatchEvent), + BatchAddressAppend(BatchEvent), } /// Node of the Merkle path with an index representing the position in a /// non-sparse Merkle tree. -#[derive(AnchorDeserialize, AnchorSerialize, Debug, Eq, PartialEq)] +#[derive(AnchorDeserialize, AnchorSerialize, Clone, Debug, Eq, PartialEq)] pub struct PathNode { pub node: [u8; 32], pub index: u32, } /// Version 1 of the [`ChangelogEvent`](light_merkle_tree_program::state::ChangelogEvent). -#[derive(AnchorDeserialize, AnchorSerialize, Debug)] +#[derive(AnchorDeserialize, AnchorSerialize, PartialEq, Eq, Clone, Debug)] pub struct ChangelogEvent { /// Public key of the tree. pub id: [u8; 32], @@ -77,7 +186,7 @@ pub struct ChangelogEvent { pub index: u32, } -#[derive(AnchorSerialize, AnchorDeserialize, Debug)] +#[derive(AnchorSerialize, AnchorDeserialize, PartialEq, Eq, Clone, Debug)] pub struct NullifierEvent { /// Public key of the tree. pub id: [u8; 32], @@ -98,7 +207,7 @@ pub struct RawIndexedElement { pub index: usize, } -#[derive(AnchorDeserialize, AnchorSerialize, Debug, Clone)] +#[derive(AnchorDeserialize, AnchorSerialize, PartialEq, Eq, Debug, Clone)] pub struct IndexedMerkleTreeUpdate { pub new_low_element: RawIndexedElement, /// Leaf hash in new_low_element.index. @@ -109,7 +218,7 @@ pub struct IndexedMerkleTreeUpdate { pub new_high_element_hash: [u8; 32], } -#[derive(AnchorDeserialize, AnchorSerialize, Debug)] +#[derive(AnchorDeserialize, AnchorSerialize, Clone, PartialEq, Eq, Debug)] pub struct IndexedMerkleTreeEvent { /// Public key of the tree. pub id: [u8; 32], @@ -119,3 +228,18 @@ pub struct IndexedMerkleTreeEvent { /// seq + 1 corresponds to leaves[1]. pub seq: u64, } + +#[repr(C)] +#[derive(AnchorDeserialize, AnchorSerialize, Debug, PartialEq, Clone, Eq)] +pub struct BatchEvent { + pub merkle_tree_pubkey: [u8; 32], + pub batch_index: u64, + pub zkp_batch_index: u64, + pub zkp_batch_size: u64, + pub old_next_index: u64, + pub new_next_index: u64, + pub new_root: [u8; 32], + pub root_index: u32, + pub sequence_number: u64, + pub output_queue_pubkey: Option<[u8; 32]>, +} diff --git a/src/ingester/parser/merkle_tree_events_parser.rs b/src/ingester/parser/merkle_tree_events_parser.rs new file mode 100644 index 00000000..5a561915 --- /dev/null +++ b/src/ingester/parser/merkle_tree_events_parser.rs @@ -0,0 +1,142 @@ +use std::collections::HashMap; + +use crate::ingester::error::IngesterError; +use crate::ingester::parser::indexer_events::{ + IndexedMerkleTreeEvent, MerkleTreeEvent, NullifierEvent, +}; +use crate::ingester::parser::state_update::{ + IndexedTreeLeafUpdate, LeafNullification, StateUpdate, +}; +use crate::ingester::parser::{get_compression_program_id, NOOP_PROGRAM_ID}; +use crate::ingester::typedefs::block_info::{Instruction, TransactionInfo}; +use borsh::BorshDeserialize; +use solana_pubkey::Pubkey; +use solana_sdk::signature::Signature; + +/// A map of merkle tree events and sequence numbers by merkle tree pubkey. +/// We keep sequence number to order the events. +pub type BatchMerkleTreeEvents = HashMap<[u8; 32], Vec<(u64, MerkleTreeEvent)>>; + +pub fn parse_merkle_tree_event( + instruction: &Instruction, + next_instruction: &Instruction, + tx: &TransactionInfo, +) -> Result, IngesterError> { + if get_compression_program_id() == instruction.program_id + && next_instruction.program_id == NOOP_PROGRAM_ID + && tx.error.is_none() + { + let merkle_tree_event = MerkleTreeEvent::deserialize(&mut next_instruction.data.as_slice()); + if let Ok(merkle_tree_event) = merkle_tree_event { + let mut state_update = StateUpdate::new(); + let event = match merkle_tree_event { + MerkleTreeEvent::V2(nullifier_event) => { + parse_nullifier_event_v1(tx.signature, nullifier_event) + } + MerkleTreeEvent::V3(indexed_merkle_tree_event) => { + parse_indexed_merkle_tree_update(indexed_merkle_tree_event) + } + MerkleTreeEvent::BatchAppend(batch_event) => { + state_update + .batch_merkle_tree_events + .entry(batch_event.merkle_tree_pubkey) + .or_default() + .push(( + batch_event.sequence_number, + MerkleTreeEvent::BatchAppend(batch_event), + )); + state_update + } + MerkleTreeEvent::BatchNullify(batch_event) => { + state_update + .batch_merkle_tree_events + .entry(batch_event.merkle_tree_pubkey) + .or_default() + .push(( + batch_event.sequence_number, + MerkleTreeEvent::BatchNullify(batch_event), + )); + state_update + } + MerkleTreeEvent::BatchAddressAppend(batch_event) => { + state_update + .batch_merkle_tree_events + .entry(batch_event.merkle_tree_pubkey) + .or_default() + .push(( + batch_event.sequence_number, + MerkleTreeEvent::BatchAddressAppend(batch_event), + )); + state_update + } + _ => Err(IngesterError::ParserError( + "Expected nullifier event or merkle tree update".to_string(), + ))?, + }; + Ok(Some(event)) + } else { + Ok(None) + } + } else { + Ok(None) + } +} + +/// Parse a V1 state tree nullifier event. +fn parse_nullifier_event_v1(tx: Signature, nullifier_event: NullifierEvent) -> StateUpdate { + let NullifierEvent { + id, + nullified_leaves_indices, + seq, + } = nullifier_event; + + let mut state_update = StateUpdate::new(); + + for (i, leaf_index) in nullified_leaves_indices.iter().enumerate() { + let leaf_nullification: LeafNullification = { + LeafNullification { + tree: Pubkey::from(id), + leaf_index: *leaf_index, + seq: seq + i as u64, + signature: tx, + } + }; + state_update.leaf_nullifications.insert(leaf_nullification); + } + + state_update +} + +fn parse_indexed_merkle_tree_update( + indexed_merkle_tree_event: IndexedMerkleTreeEvent, +) -> StateUpdate { + let IndexedMerkleTreeEvent { + id, + updates, + mut seq, + } = indexed_merkle_tree_event; + let mut state_update = StateUpdate::new(); + + for update in updates { + for (leaf, hash) in [ + (update.new_low_element, update.new_low_element_hash), + (update.new_high_element, update.new_high_element_hash), + ] + .iter() + { + let indexed_tree_leaf_update = IndexedTreeLeafUpdate { + tree: Pubkey::from(id), + hash: *hash, + leaf: *leaf, + seq, + }; + seq += 1; + state_update.indexed_merkle_tree_updates.insert( + (indexed_tree_leaf_update.tree, leaf.index as u64), + indexed_tree_leaf_update, + ); + } + } + + state_update +} diff --git a/src/ingester/parser/mod.rs b/src/ingester/parser/mod.rs index 81f8bc98..eeb95be7 100644 --- a/src/ingester/parser/mod.rs +++ b/src/ingester/parser/mod.rs @@ -1,32 +1,38 @@ -use borsh::BorshDeserialize; -use byteorder::{ByteOrder, LittleEndian}; -use indexer_events::{IndexedMerkleTreeEvent, MerkleTreeEvent, NullifierEvent}; -use log::debug; -use solana_sdk::{pubkey::Pubkey, signature::Signature}; -use state_update::{IndexedTreeLeafUpdate, LeafNullification}; - -use crate::common::typedefs::{ - account::{Account, AccountData}, - bs64_string::Base64String, - hash::Hash, - serializable_pubkey::SerializablePubkey, - unsigned_integer::UnsignedInteger, -}; +use merkle_tree_events_parser::parse_merkle_tree_event; +use solana_pubkey::Pubkey; +use std::sync::OnceLock; +use tx_event_parser::parse_public_transaction_event_v1; +use tx_event_parser_v2::create_state_update_v2; use super::{error::IngesterError, typedefs::block_info::TransactionInfo}; -use self::{ - indexer_events::{CompressedAccount, PublicTransactionEvent}, - state_update::{AccountTransaction, StateUpdate, Transaction}, -}; +use self::state_update::{StateUpdate, Transaction}; pub mod indexer_events; +pub mod merkle_tree_events_parser; pub mod state_update; +pub mod tree_info; +mod tx_event_parser; +pub mod tx_event_parser_v2; -use solana_program::pubkey; +use crate::ingester::parser::tx_event_parser_v2::parse_public_transaction_event_v2; +use solana_pubkey::pubkey; + +static ACCOUNT_COMPRESSION_PROGRAM_ID: OnceLock = OnceLock::new(); +pub fn get_compression_program_id() -> Pubkey { + *ACCOUNT_COMPRESSION_PROGRAM_ID + .get_or_init(|| pubkey!("compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq")) +} +pub fn set_compression_program_id(program_id_str: &str) -> Result<(), String> { + match program_id_str.parse::() { + Ok(pubkey) => match ACCOUNT_COMPRESSION_PROGRAM_ID.set(pubkey) { + Ok(_) => Ok(()), + Err(_) => Err("Compression program ID has already been set".to_string()), + }, + Err(err) => Err(format!("Invalid compression program ID: {}", err)), + } +} -pub const ACCOUNT_COMPRESSION_PROGRAM_ID: Pubkey = - pubkey!("compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq"); const SYSTEM_PROGRAM: Pubkey = pubkey!("11111111111111111111111111111111"); const NOOP_PROGRAM_ID: Pubkey = pubkey!("noopb9bkMVfRPU8AsbpTUg8AQkHtKwMYZiFUjNRtMmV"); const VOTE_PROGRAM_ID: Pubkey = pubkey!("Vote111111111111111111111111111111111111111"); @@ -35,89 +41,55 @@ pub fn parse_transaction(tx: &TransactionInfo, slot: u64) -> Result 2 { - let next_instruction = &ordered_intructions[index + 1]; - let next_next_instruction = &ordered_intructions[index + 2]; - // We need to check if the account compression instruction contains a noop account to determine - // if the instruction emits a noop event. If it doesn't then we want avoid indexing - // the following noop instruction because it'll contain either irrelevant or malicious data. - if ACCOUNT_COMPRESSION_PROGRAM_ID == instruction.program_id - && next_instruction.program_id == SYSTEM_PROGRAM - && next_next_instruction.program_id == NOOP_PROGRAM_ID - { - if !logged_transaction { - debug!( - "Indexing transaction with slot {} and id {}", - slot, tx.signature - ); - logged_transaction = true; - } - is_compression_transaction = true; + let mut ordered_instructions = Vec::new(); + ordered_instructions.push(instruction_group.outer_instruction.clone()); + ordered_instructions.extend(instruction_group.inner_instructions.clone()); + + let mut vec_accounts = Vec::>::new(); + let mut vec_instructions_data = Vec::new(); + let mut program_ids = Vec::new(); + + ordered_instructions.iter().for_each(|inner_instruction| { + vec_instructions_data.push(inner_instruction.data.clone()); + vec_accounts.push(inner_instruction.accounts.clone()); + program_ids.push(inner_instruction.program_id); + }); - if tx.error.is_none() { - let public_transaction_event = PublicTransactionEvent::deserialize( - &mut next_next_instruction.data.as_slice(), - ) - .map_err(|e| { - IngesterError::ParserError(format!( - "Failed to deserialize PublicTransactionEvent: {}", - e - )) - })?; - let state_update = parse_public_transaction_event( - tx.signature, - slot, - public_transaction_event, - )?; + if let Some(event) = + parse_public_transaction_event_v2(&program_ids, &vec_instructions_data, vec_accounts) + { + let state_update = create_state_update_v2(tx.signature, slot, event)?; + is_compression_transaction = true; + state_updates.push(state_update); + } else { + for (index, _) in ordered_instructions.iter().enumerate() { + if ordered_instructions.len() - index > 2 { + if let Some(state_update) = parse_public_transaction_event_v1( + tx, + slot, + &ordered_instructions[index], + &ordered_instructions[index + 1], + &ordered_instructions[index + 2], + )? { + is_compression_transaction = true; state_updates.push(state_update); } - } - } - if ordered_intructions.len() - index > 1 { - let next_instruction = &ordered_intructions[index + 1]; - if ACCOUNT_COMPRESSION_PROGRAM_ID == instruction.program_id - && next_instruction.program_id == NOOP_PROGRAM_ID - { - is_compression_transaction = true; - if tx.error.is_none() { - let merkle_tree_event = - MerkleTreeEvent::deserialize(&mut next_instruction.data.as_slice()) - .map_err(|e| { - IngesterError::ParserError(format!( - "Failed to deserialize NullifierEvent: {}", - e - )) - })?; - - let state_update = match merkle_tree_event { - MerkleTreeEvent::V2(nullifier_event) => { - parse_nullifier_event(tx.signature, nullifier_event)? - } - MerkleTreeEvent::V3(indexed_merkle_tree_event) => { - parse_indexed_merkle_tree_update(indexed_merkle_tree_event)? - } - _ => { - return Err(IngesterError::ParserError( - "Expected nullifier event or merkle tree update".to_string(), - )) - } - }; + } else if ordered_instructions.len() - index > 1 { + if let Some(state_update) = parse_merkle_tree_event( + &ordered_instructions[index], + &ordered_instructions[index + 1], + tx, + )? { + is_compression_transaction = true; state_updates.push(state_update); } } } } } - let mut state_update = StateUpdate::merge_updates(state_updates); + let mut state_update = StateUpdate::merge_updates(state_updates.clone()); if !is_voting_transaction(tx) || is_compression_transaction { state_update.transactions.insert(Transaction { signature: tx.signature, @@ -135,176 +107,3 @@ fn is_voting_transaction(tx: &TransactionInfo) -> bool { .iter() .any(|group| group.outer_instruction.program_id == VOTE_PROGRAM_ID) } - -fn parse_account_data( - compressed_account: CompressedAccount, - hash: [u8; 32], - tree: Pubkey, - leaf_index: u32, - slot: u64, - seq: u64, -) -> Account { - let CompressedAccount { - owner, - lamports, - address, - data, - } = compressed_account; - - let data = data.map(|d| AccountData { - discriminator: UnsignedInteger(LittleEndian::read_u64(&d.discriminator)), - data: Base64String(d.data), - data_hash: Hash::from(d.data_hash), - }); - - Account { - owner: owner.into(), - lamports: UnsignedInteger(lamports), - address: address.map(SerializablePubkey::from), - data, - hash: hash.into(), - slot_created: UnsignedInteger(slot), - leaf_index: UnsignedInteger(leaf_index as u64), - tree: SerializablePubkey::from(tree), - seq: UnsignedInteger(seq), - } -} - -fn parse_indexed_merkle_tree_update( - indexed_merkle_tree_event: IndexedMerkleTreeEvent, -) -> Result { - let IndexedMerkleTreeEvent { - id, - updates, - mut seq, - } = indexed_merkle_tree_event; - let mut state_update = StateUpdate::new(); - - for update in updates { - for (leaf, hash) in [ - (update.new_low_element, update.new_low_element_hash), - (update.new_high_element, update.new_high_element_hash), - ] - .iter() - { - let indexed_tree_leaf_update = IndexedTreeLeafUpdate { - tree: Pubkey::try_from(id).map_err(|_e| { - IngesterError::ParserError("Unable to parse tree pubkey".to_string()) - })?, - hash: *hash, - leaf: *leaf, - seq, - }; - seq += 1; - state_update.indexed_merkle_tree_updates.insert( - (indexed_tree_leaf_update.tree, leaf.index as u64), - indexed_tree_leaf_update, - ); - } - } - - Ok(state_update) -} - -fn parse_nullifier_event( - tx: Signature, - nullifier_event: NullifierEvent, -) -> Result { - let NullifierEvent { - id, - nullified_leaves_indices, - seq, - } = nullifier_event; - - let mut state_update = StateUpdate::new(); - - for (i, leaf_index) in nullified_leaves_indices.iter().enumerate() { - let leaf_nullification: LeafNullification = { - LeafNullification { - tree: Pubkey::try_from(id).map_err(|_e| { - IngesterError::ParserError("Unable to parse tree pubkey".to_string()) - })?, - leaf_index: *leaf_index, - seq: seq + i as u64, - signature: tx, - } - }; - state_update.leaf_nullifications.insert(leaf_nullification); - } - - Ok(state_update) -} - -fn parse_public_transaction_event( - tx: Signature, - slot: u64, - transaction_event: PublicTransactionEvent, -) -> Result { - let PublicTransactionEvent { - input_compressed_account_hashes, - output_compressed_account_hashes, - output_compressed_accounts, - pubkey_array, - sequence_numbers, - .. - } = transaction_event; - - let mut state_update = StateUpdate::new(); - - let mut tree_to_seq_number = sequence_numbers - .iter() - .map(|seq| (seq.pubkey, seq.seq)) - .collect::>(); - - for hash in input_compressed_account_hashes { - state_update.in_accounts.insert(hash.into()); - } - - for ((out_account, hash), leaf_index) in output_compressed_accounts - .into_iter() - .zip(output_compressed_account_hashes) - .zip(transaction_event.output_leaf_indices.iter()) - { - let tree = pubkey_array[out_account.merkle_tree_index as usize]; - let seq = tree_to_seq_number - .get_mut(&tree) - .ok_or_else(|| IngesterError::ParserError("Missing sequence number".to_string()))?; - - let enriched_account = parse_account_data( - out_account.compressed_account, - hash, - tree, - *leaf_index, - slot, - *seq, - ); - *seq += 1; - state_update.out_accounts.push(enriched_account); - } - - state_update - .account_transactions - .extend( - state_update - .in_accounts - .iter() - .map(|hash| AccountTransaction { - hash: hash.clone(), - signature: tx, - }), - ); - - state_update - .account_transactions - .extend( - state_update - .out_accounts - .iter() - .map(|a| AccountTransaction { - hash: a.hash.clone(), - signature: tx, - }), - ); - - Ok(state_update) -} diff --git a/src/ingester/parser/state_update.rs b/src/ingester/parser/state_update.rs index 0a1cf1a7..14beede3 100644 --- a/src/ingester/parser/state_update.rs +++ b/src/ingester/parser/state_update.rs @@ -1,14 +1,14 @@ -use std::collections::{HashMap, HashSet}; - +use super::{indexer_events::RawIndexedElement, merkle_tree_events_parser::BatchMerkleTreeEvents}; +use crate::common::typedefs::account::AccountWithContext; +use crate::common::typedefs::hash::Hash; +use crate::common::typedefs::serializable_pubkey::SerializablePubkey; use borsh::{BorshDeserialize, BorshSerialize}; -use solana_sdk::pubkey::Pubkey; +use jsonrpsee_core::Serialize; +use light_compressed_account::indexer_event::event::{BatchNullifyContext, NewAddress}; +use solana_pubkey::Pubkey; use solana_sdk::signature::Signature; - -use crate::common::typedefs::account::Account; - -use crate::common::typedefs::hash::Hash; - -use super::indexer_events::RawIndexedElement; +use std::collections::{HashMap, HashSet}; +use utoipa::ToSchema; #[derive(BorshDeserialize, BorshSerialize, Debug, Clone, PartialEq, Eq)] pub struct PathNode { @@ -63,15 +63,37 @@ pub struct IndexedTreeLeafUpdate { pub seq: u64, } +#[derive(Debug, Clone, PartialEq, Eq, Serialize, ToSchema, Default)] +#[serde(deny_unknown_fields, rename_all = "camelCase")] +pub struct AddressQueueUpdate { + pub tree: SerializablePubkey, + pub address: [u8; 32], + pub queue_index: u64, +} + +impl From for AddressQueueUpdate { + fn from(new_address: NewAddress) -> Self { + AddressQueueUpdate { + tree: SerializablePubkey::from(new_address.mt_pubkey), + address: new_address.address, + queue_index: new_address.queue_index, + } + } +} + #[derive(Default, Debug, Clone, PartialEq, Eq)] -/// Representation of state update of the compression system that is optimal for simple persistance. +/// Representation of state update of the compression system that is optimal for simple persistence. pub struct StateUpdate { pub in_accounts: HashSet, - pub out_accounts: Vec, + pub out_accounts: Vec, pub account_transactions: HashSet, pub transactions: HashSet, pub leaf_nullifications: HashSet, pub indexed_merkle_tree_updates: HashMap<(Pubkey, u64), IndexedTreeLeafUpdate>, + + pub batch_merkle_tree_events: BatchMerkleTreeEvents, + pub batch_nullify_context: Vec, + pub batch_new_addresses: Vec, } impl StateUpdate { @@ -81,6 +103,7 @@ impl StateUpdate { pub fn merge_updates(updates: Vec) -> StateUpdate { let mut merged = StateUpdate::default(); + for update in updates { merged.in_accounts.extend(update.in_accounts); merged.out_accounts.extend(update.out_accounts); @@ -102,7 +125,23 @@ impl StateUpdate { merged.indexed_merkle_tree_updates.insert(key, value); } } + + for (key, events) in update.batch_merkle_tree_events { + if let Some(existing_events) = merged.batch_merkle_tree_events.get_mut(&key) { + existing_events.extend(events); + } else { + merged.batch_merkle_tree_events.insert(key, events); + } + } + + merged + .batch_new_addresses + .extend(update.batch_new_addresses); + merged + .batch_nullify_context + .extend(update.batch_nullify_context); } + merged } } diff --git a/src/ingester/parser/tree_info.rs b/src/ingester/parser/tree_info.rs new file mode 100644 index 00000000..0e6dfecf --- /dev/null +++ b/src/ingester/parser/tree_info.rs @@ -0,0 +1,253 @@ +use lazy_static::lazy_static; +use light_compressed_account::TreeType; +use solana_pubkey::{pubkey, Pubkey}; +use std::collections::HashMap; + +#[derive(Debug, Clone)] +pub struct TreeInfo { + pub tree: Pubkey, + pub queue: Pubkey, + pub height: u32, + pub tree_type: TreeType, +} + +impl TreeInfo { + pub fn get(pubkey: &str) -> Option<&TreeInfo> { + QUEUE_TREE_MAPPING.get(pubkey) + } + + pub fn height(pubkey: &str) -> Option { + QUEUE_TREE_MAPPING.get(pubkey).map(|x| x.height) + } +} + +// TODO: add a table which stores tree metadata: tree_pubkey | queue_pubkey | type | ... +lazy_static! { + pub static ref QUEUE_TREE_MAPPING: HashMap = { + let legacy_state_trees = [ + ( + pubkey!("smt1NamzXdq4AMqS2fS2F1i5KTYPZRhoHgWx38d8WsT"), + pubkey!("nfq1NvQDJ2GEgnS8zt9prAe8rjjpAW1zFkrvZoBR148"), + ), + ( + pubkey!("smt2rJAFdyJJupwMKAqTNAJwvjhmiZ4JYGZmbVRw1Ho"), + pubkey!("nfq2hgS7NYemXsFaFUCe3EMXSDSfnZnAe27jC6aPP1X"), + ), + ( + pubkey!("smt3AFtReRGVcrP11D6bSLEaKdUmrGfaTNowMVccJeu"), + pubkey!("nfq3de4qt9d3wHxXWy1wcge3EXhid25mCr12bNWFdtV"), + ), + ( + pubkey!("smt4vjXvdjDFzvRMUxwTWnSy4c7cKkMaHuPrGsdDH7V"), + pubkey!("nfq4Ncp1vk3mFnCQ9cvwidp9k2L6fxEyCo2nerYD25A"), + ), + ( + pubkey!("smt5uPaQT9n6b1qAkgyonmzRxtuazA53Rddwntqistc"), + pubkey!("nfq5b5xEguPtdD6uPetZduyrB5EUqad7gcUE46rALau"), + ), + ( + pubkey!("smt6ukQDSPPYHSshQovmiRUjG9jGFq2hW9vgrDFk5Yz"), + pubkey!("nfq6uzaNZ5n3EWF4t64M93AWzLGt5dXTikEA9fFRktv"), + ), + ( + pubkey!("smt7onMFkvi3RbyhQCMajudYQkB1afAFt9CDXBQTLz6"), + pubkey!("nfq7yytdKkkLabu1KpvLsa5VPkvCT4jPWus5Yi74HTH"), + ), + ( + pubkey!("smt8TYxNy8SuhAdKJ8CeLtDkr2w6dgDmdz5ruiDw9Y9"), + pubkey!("nfq8vExDykci3VUSpj9R1totVst87hJfFWevNK4hiFb"), + ), + ( + pubkey!("smt9ReAYRF5eFjTd5gBJMn5aKwNRcmp3ub2CQr2vW7j"), + pubkey!("nfq9KFpNQL45ppP6ZG7zBpUeN18LZrNGkKyvV1kjTX2"), + ), + ( + pubkey!("smtAvYA5UbTRyKAkAj5kHs1CmrA42t6WkVLi4c6mA1f"), + pubkey!("nfqAroCRkcZBgsAJDNkptKpsSWyM6cgB9XpWNNiCEC4"), + ), + ( + pubkey!("smtBvnJx2B2u85wc3sMkF6G8rVMfN8Ek3nVKZ8gQUFn"), + pubkey!("nfqB3FAiiB1p3ksiWHB48LzSycpaJZ5RTp5C8RtNyUH"), + ), + ( + pubkey!("smtCEeVJsWyeeawgn5cQR5iK7dsJwnxJq7QwdQUepx8"), + pubkey!("nfqC5pX1HzaTgUApL2DTp7Xh8j3A5Augk42jngRCoKF"), + ), + ( + pubkey!("smtF9XTNZeyMgGQxxWfxyS1Ff6CA4W4RgYi8X1wWxa9"), + pubkey!("nfqFa5ZzBYELWDnMQZe7SA3gd1x98aqtPf4sfaJZQJm"), + ), + ( + pubkey!("smtGeMYXeGoyQVcnrDg985h74ak9aRPW4gsfdW25DVy"), + pubkey!("nfqGKBHxkUbDvTtkiDXNWskBhM6R9YfCeNu52baqvaf"), + ), + ( + pubkey!("smtHxHypFJoK6z6CCgx7eP9jqDykUBE7PbrXrTVoejR"), + pubkey!("nfqHEE21vgXLnD7wxauCvX6pfeAs1zJbE4YyZ4YQ1rG"), + ), + ( + pubkey!("smtJsXesAF3vEc7Kz86rvaaHnNndvRWRfTj3XhgbCyb"), + pubkey!("nfqJnTp7kgAa2AF2QTRi5qNVinkpAdA15gBYYqeZUgA"), + ), + ( + pubkey!("smtKAoGiqSb6YwGhCSwsJer5tMMgk7sH1a2K5BNeNQQ"), + pubkey!("nfqKejGFuD6xkNLt8zzp2HaypMeRDsptBaeVGB4Utoq"), + ), + ( + pubkey!("smtLdHZPfJfqK3cKCQ9sqQTCQaoDgZKA11MQZ9P4UFR"), + pubkey!("nfqLk1L9ezj8AbDyeQueeQoKUvU6Jzz9eQs28QgTEfx"), + ), + ( + pubkey!("smtNKu3Dwsyw4YVVA7S9cWYGvLrwUVD3T593ZJnyggv"), + pubkey!("nfqNG4bDC6e8SzamFhvDytxwzKdzbwoTsLHZFi11AD1"), + ), + ( + pubkey!("smta2xk2kZTeFBRzpSrtCpwmxkrQpv7LGgut1aMNsme"), + pubkey!("nfqa2szxnkgX4xBTVG81HYK7mzZe8pSF8wv2yMXaTTG"), + ), + ( + pubkey!("smtb2BcLRWygF3svygXMprcRjXKUDnxvNFnseNgH6VT"), + pubkey!("nfqbgaRZGC1BGtFjRMvJmx79fzg8bBuSJBCEbJzoGTG"), + ), + ( + pubkey!("smtd3wjo4AzEKd9tRE2zTanxEEWRAXAAs9AtF9NcfAs"), + pubkey!("nfqd5yiNJJ5mvZxitwXY9bR5dfBs2WNcTKctFBYwSuv"), + ), + ( + pubkey!("smte57v68vyf21wT5xzxYvZpr6iiFG1WQ5dX7J1Y85E"), + pubkey!("nfqecsLrkXwRpdBJZEpR2bJYbXc2jrh78mqg1kRDZKm"), + ), + ( + pubkey!("smtobNxYYVi8YfJDjzdoW1jR7xyZaVeXwmSHNgL3tA1"), + pubkey!("nfqoqboretu8sLtCB4mTe3HKRmzc18HAPUAkEn18axG"), + ), + ( + pubkey!("smtpQZk7YARxMaz7VeW7zPMLNJAhbP9v1AZzLopaB2M"), + pubkey!("nfqp7yDaPgGenuaFFAogXLvy5A5c3Znn5pYe6TmQ9RQ"), + ), + ( + pubkey!("smtqHbhmXHjVxeDNq5NPTMBw92L2ZsEF4q2WgNqjN7Y"), + pubkey!("nfqqqib2xCHLXSVABHoczoY4u495T5eFCcypZ6C22gB"), + ), + ( + pubkey!("smtrG9ekG1obtqBRoB4mMUEwicfjTRRzZUm3z4LX8UJ"), + pubkey!("nfqroTsZ4EX37MuYb26Km8nPmS2WhfG3HTFgCuuwe7U"), + ), + ( + pubkey!("smtsAZefsicmjKXz9Wtzidwt67pU3kqbhB6f2yD3rQJ"), + pubkey!("nfqs5Hdbd7oKtDdRmVQFy4wytRn5gDb1DPwPyQCmHS2"), + ), + ( + pubkey!("smtt9Ra1v3mu8eSx7nrq5Q8bRqqPRf5mfpUvkpkP29L"), + pubkey!("nfqt3kLwwcAm8wLfNCVGPThN7fpHimPoiBegoGeRxUy"), + ), + ( + pubkey!("smtu3VAWgucXQmMhy4S8nNojpuVJHgVrGQFkai1jXRw"), + pubkey!("nfqu1jDCGChJQxQpU5XWjeHUtzYWBEoKZ24VXXdKdkk"), + ), + ( + pubkey!("smtvbupk8wjpXa48Zg29SVtTL8BpSJVrc6tfMGAA5A3"), + pubkey!("nfqvcYyr6TzAugHSaX398fXPBSRygmb7TfmXoXvL8Qu"), + ), + ( + pubkey!("smtwntNZBnj3w5dw1mYjzgHBBhxAYvHjZhh5whVEaBS"), + pubkey!("nfqw14GHxV2LJsNwwXLGCXDyQXqnUn6GDL9DKqBbeep"), + ), + ( + pubkey!("smtx7SjhPmjChWsUNiyZ4VF2U82zSBDf2yArGKr5BDb"), + pubkey!("nfqxAGA7bDoHDxqA4K25fV1wZZ5NHzGrxReiCC5Ztet"), + ), + ( + pubkey!("smty1QArd6Z73H67TvoqpxitEc2E5A9zBtw42ZKZJkn"), + pubkey!("nfqy55aAqL8qG5qBRixUtLnDqNd61ft2jtXyoYGHNGb"), + ), + ( + pubkey!("smtz1CZdRkGuMpYPZHihP2WruMj9ZHYjK6Ag9gLBzWM"), + pubkey!("nfqzF2r8viCVTMpzVAL5jHVKsGF45RsASxun8ZpRKnm"), + ), + ]; + + let address_trees_v1 = [( + pubkey!("amt1Ayt45jfbdw5YSo7iz6WZxUmnZsQTYXy82hVwyC2"), + pubkey!("aq1S9z4reTSQAdgWHGD2zDaS39sjGrAxbR31vxJ2F4F"), + )]; + + let mut m = HashMap::new(); + + for (legacy_tree, legacy_queue) in legacy_state_trees.iter() { + m.insert( + legacy_queue.to_string(), + TreeInfo { + tree: *legacy_tree, + queue: *legacy_queue, + height: 26, + tree_type: TreeType::StateV1, + }, + ); + + m.insert( + legacy_tree.to_string(), + TreeInfo { + tree: *legacy_tree, + queue: *legacy_queue, + height: 26, + tree_type: TreeType::StateV1, + }, + ); + } + + for (legacy_tree, legacy_queue) in address_trees_v1.iter() { + m.insert( + legacy_queue.to_string(), + TreeInfo { + tree: *legacy_tree, + queue: *legacy_queue, + height: 26, + tree_type: TreeType::AddressV1, + }, + ); + + m.insert( + legacy_tree.to_string(), + TreeInfo { + tree: *legacy_tree, + queue: *legacy_queue, + height: 26, + tree_type: TreeType::AddressV1, + }, + ); + } + + m.insert( + "6L7SzhYB3anwEQ9cphpJ1U7Scwj57bx2xueReg7R9cKU".to_string(), + TreeInfo { + tree: pubkey!("HLKs5NJ8FXkJg8BrzJt56adFYYuwg5etzDtBbQYTsixu"), + queue: pubkey!("6L7SzhYB3anwEQ9cphpJ1U7Scwj57bx2xueReg7R9cKU"), + height: 32, + tree_type: TreeType::StateV2, + }, + ); + + m.insert( + "HLKs5NJ8FXkJg8BrzJt56adFYYuwg5etzDtBbQYTsixu".to_string(), + TreeInfo { + tree: pubkey!("HLKs5NJ8FXkJg8BrzJt56adFYYuwg5etzDtBbQYTsixu"), + queue: pubkey!("6L7SzhYB3anwEQ9cphpJ1U7Scwj57bx2xueReg7R9cKU"), + height: 32, + tree_type: TreeType::StateV2, + }, + ); + + m.insert( + "EzKE84aVTkCUhDHLELqyJaq1Y7UVVmqxXqZjVHwHY3rK".to_string(), + TreeInfo { + tree: pubkey!("EzKE84aVTkCUhDHLELqyJaq1Y7UVVmqxXqZjVHwHY3rK"), + queue: pubkey!("EzKE84aVTkCUhDHLELqyJaq1Y7UVVmqxXqZjVHwHY3rK"), + height: 40, + tree_type: TreeType::AddressV2, + }, + ); + + m + }; +} diff --git a/src/ingester/parser/tx_event_parser.rs b/src/ingester/parser/tx_event_parser.rs new file mode 100644 index 00000000..d73e1963 --- /dev/null +++ b/src/ingester/parser/tx_event_parser.rs @@ -0,0 +1,131 @@ +use crate::common::typedefs::account::AccountWithContext; +use crate::ingester::error::IngesterError; +use crate::ingester::parser::indexer_events::PublicTransactionEventV1; +use crate::ingester::parser::state_update::{AccountTransaction, StateUpdate}; +use crate::ingester::parser::tree_info::TreeInfo; +use crate::ingester::parser::{get_compression_program_id, NOOP_PROGRAM_ID, SYSTEM_PROGRAM}; +use crate::ingester::typedefs::block_info::{Instruction, TransactionInfo}; +use anchor_lang::AnchorDeserialize; +use light_compressed_account::TreeType; +use log::info; +use solana_sdk::signature::Signature; +use std::collections::HashMap; + +pub fn parse_public_transaction_event_v1( + tx: &TransactionInfo, + slot: u64, + instruction: &Instruction, + next_instruction: &Instruction, + next_next_instruction: &Instruction, +) -> Result, IngesterError> { + if get_compression_program_id() == instruction.program_id + && next_instruction.program_id == SYSTEM_PROGRAM + && next_next_instruction.program_id == NOOP_PROGRAM_ID + && tx.error.is_none() + { + info!( + "Indexing transaction with slot {} and id {}", + slot, tx.signature + ); + + let public_transaction_event = + PublicTransactionEventV1::deserialize(&mut next_next_instruction.data.as_slice()) + .map_err(|e| { + IngesterError::ParserError(format!( + "Failed to deserialize PublicTransactionEvent: {}", + e + )) + })?; + create_state_update_v1(tx.signature, slot, public_transaction_event.into()).map(Some) + } else { + Ok(None) + } +} + +pub fn create_state_update_v1( + tx: Signature, + slot: u64, + transaction_event: PublicTransactionEventV1, +) -> Result { + let mut state_update = StateUpdate::new(); + let mut tree_to_seq_number = transaction_event + .sequence_numbers + .iter() + .map(|seq| (seq.pubkey, seq.seq)) + .collect::>(); + + for hash in transaction_event.input_compressed_account_hashes { + state_update.in_accounts.insert(hash.into()); + } + + for ((out_account, hash), leaf_index) in transaction_event + .output_compressed_accounts + .into_iter() + .zip(transaction_event.output_compressed_account_hashes) + .zip(transaction_event.output_leaf_indices.iter()) + { + let tree = transaction_event.pubkey_array[out_account.merkle_tree_index as usize]; + let tree_and_queue = TreeInfo::get(&tree.to_string()) + .ok_or(IngesterError::ParserError("Missing queue".to_string()))? + .clone(); + + let mut seq = None; + if tree_and_queue.tree_type == TreeType::StateV1 { + seq = Some(*tree_to_seq_number.get(&tree).ok_or_else(|| { + IngesterError::ParserError("Missing sequence number".to_string()) + })?); + + let seq = tree_to_seq_number + .get_mut(&tree) + .ok_or_else(|| IngesterError::ParserError("Missing sequence number".to_string()))?; + *seq += 1; + } + + let in_output_queue = tree_and_queue.tree_type == TreeType::StateV2; + let tree_pubkey = solana_pubkey::Pubkey::new_from_array(tree_and_queue.tree.to_bytes()); + let queue_pubkey = solana_pubkey::Pubkey::new_from_array(tree_and_queue.queue.to_bytes()); + + let enriched_account = AccountWithContext::new( + out_account.compressed_account.clone(), + &hash, + tree_pubkey, + queue_pubkey, + *leaf_index, + slot, + seq, + in_output_queue, + false, + None, + None, + tree_and_queue.tree_type, + ); + + state_update.out_accounts.push(enriched_account); + } + + state_update + .account_transactions + .extend( + state_update + .in_accounts + .iter() + .map(|hash| AccountTransaction { + hash: hash.clone(), + signature: tx, + }), + ); + + state_update + .account_transactions + .extend( + state_update + .out_accounts + .iter() + .map(|a| AccountTransaction { + hash: a.account.hash.clone(), + signature: tx, + }), + ); + + Ok(state_update) +} diff --git a/src/ingester/parser/tx_event_parser_v2.rs b/src/ingester/parser/tx_event_parser_v2.rs new file mode 100644 index 00000000..e3835a29 --- /dev/null +++ b/src/ingester/parser/tx_event_parser_v2.rs @@ -0,0 +1,142 @@ +use crate::common::typedefs::serializable_pubkey::SerializablePubkey; +use crate::ingester::error::IngesterError; +use crate::ingester::parser::indexer_events::{ + BatchPublicTransactionEvent, CompressedAccount, CompressedAccountData, + MerkleTreeSequenceNumberV2, OutputCompressedAccountWithPackedContext, PublicTransactionEventV2, +}; +use crate::ingester::parser::state_update::StateUpdate; +use crate::ingester::parser::tx_event_parser::create_state_update_v1; + +use light_compressed_account::indexer_event::parse::event_from_light_transaction; +use solana_pubkey::Pubkey; +use solana_sdk::signature::Signature; + +use super::state_update::AddressQueueUpdate; + +pub fn parse_public_transaction_event_v2( + program_ids: &[Pubkey], + instructions: &[Vec], + accounts: Vec>, +) -> Option> { + let events = event_from_light_transaction(program_ids, instructions, accounts).ok()?; + events.map(|events| { + events + .into_iter() + .map(|public_transaction_event| { + let event = PublicTransactionEventV2 { + input_compressed_account_hashes: public_transaction_event + .event + .input_compressed_account_hashes, + output_compressed_account_hashes: public_transaction_event + .event + .output_compressed_account_hashes, + output_compressed_accounts: public_transaction_event + .event + .output_compressed_accounts + .iter() + .map(|x| OutputCompressedAccountWithPackedContext { + compressed_account: CompressedAccount { + owner: x.compressed_account.owner, + lamports: x.compressed_account.lamports, + address: x.compressed_account.address, + data: x.compressed_account.data.as_ref().map(|d| { + CompressedAccountData { + discriminator: d.discriminator, + data: d.data.clone(), + data_hash: d.data_hash, + } + }), + }, + merkle_tree_index: x.merkle_tree_index, + }) + .collect(), + output_leaf_indices: public_transaction_event.event.output_leaf_indices, + sequence_numbers: public_transaction_event + .event + .sequence_numbers + .iter() + .map(|x| MerkleTreeSequenceNumberV2 { + tree_pubkey: x.tree_pubkey, + queue_pubkey: x.queue_pubkey, + tree_type: x.tree_type, + seq: x.seq, + }) + .collect(), + relay_fee: public_transaction_event.event.relay_fee, + is_compress: public_transaction_event.event.is_compress, + compression_lamports: public_transaction_event + .event + .compress_or_decompress_lamports, + pubkey_array: public_transaction_event.event.pubkey_array, + message: public_transaction_event.event.message, + }; + + let batch_public_transaction_event = BatchPublicTransactionEvent { + event, + new_addresses: public_transaction_event.new_addresses, + input_sequence_numbers: public_transaction_event + .input_sequence_numbers + .iter() + .map(|x| MerkleTreeSequenceNumberV2 { + tree_pubkey: x.tree_pubkey, + queue_pubkey: x.queue_pubkey, + tree_type: x.tree_type, + seq: x.seq, + }) + .collect(), + address_sequence_numbers: public_transaction_event + .address_sequence_numbers + .iter() + .map(|x| MerkleTreeSequenceNumberV2 { + tree_pubkey: x.tree_pubkey, + queue_pubkey: x.queue_pubkey, + tree_type: x.tree_type, + seq: x.seq, + }) + .collect(), + batch_input_accounts: public_transaction_event.batch_input_accounts, + tx_hash: public_transaction_event.tx_hash, + }; + + batch_public_transaction_event + }) + .collect::>() + }) +} + +pub fn create_state_update_v2( + tx: Signature, + slot: u64, + transaction_event: Vec, +) -> Result { + if transaction_event.is_empty() { + return Ok(StateUpdate::new()); + } + let mut state_updates = Vec::new(); + for event in transaction_event.iter() { + let mut state_update_event = create_state_update_v1(tx, slot, event.clone().event.into())?; + + state_update_event + .batch_nullify_context + .extend(event.batch_input_accounts.clone()); + + state_update_event + .batch_new_addresses + .extend( + event + .new_addresses + .clone() + .iter() + .map(|x| AddressQueueUpdate { + tree: SerializablePubkey::from(x.mt_pubkey), + address: x.address, + queue_index: x.queue_index, + }), + ); + + state_updates.push(state_update_event); + } + + let merged = StateUpdate::merge_updates(state_updates); + Ok(merged) +} diff --git a/src/ingester/persist/leaf_node.rs b/src/ingester/persist/leaf_node.rs new file mode 100644 index 00000000..7898ed16 --- /dev/null +++ b/src/ingester/persist/leaf_node.rs @@ -0,0 +1,187 @@ +use crate::common::typedefs::account::{Account, AccountWithContext}; +use crate::common::typedefs::hash::Hash; +use crate::common::typedefs::serializable_pubkey::SerializablePubkey; +use crate::dao::generated::state_trees; +use crate::ingester::error::IngesterError; +use crate::ingester::parser::state_update::LeafNullification; +use crate::ingester::persist::persisted_state_tree::{get_proof_nodes, ZERO_BYTES}; +use crate::ingester::persist::{compute_parent_hash, get_node_direct_ancestors}; +use crate::migration::OnConflict; +use itertools::Itertools; +use sea_orm::{ConnectionTrait, DatabaseTransaction, EntityTrait, QueryTrait, Set}; +use std::cmp::max; +use std::collections::HashMap; + +pub const TREE_HEIGHT_V1: u32 = 26; +pub const STATE_TREE_HEIGHT_V2: u32 = 32; + +#[derive(Clone, Debug)] +pub struct LeafNode { + pub tree: SerializablePubkey, + pub leaf_index: u32, + pub hash: Hash, + pub seq: Option, +} + +impl LeafNode { + pub fn node_index(&self, tree_height: u32) -> i64 { + leaf_index_to_node_index(self.leaf_index, tree_height) + } +} + +// leaf_index should be u64 / i64 to avoid overflow +pub fn leaf_index_to_node_index(leaf_index: u32, tree_height: u32) -> i64 { + 2_i64.pow(tree_height - 1) + leaf_index as i64 +} + +impl From for LeafNode { + fn from(account: Account) -> Self { + Self { + tree: account.tree, + leaf_index: account.leaf_index.0 as u32, + hash: account.hash, + seq: account.seq.map(|x| x.0 as u32), + } + } +} + +impl From for LeafNode { + fn from(account: AccountWithContext) -> Self { + Self { + tree: account.account.tree, + leaf_index: account.account.leaf_index.0 as u32, + hash: account.account.hash, + seq: account.account.seq.map(|x| x.0 as u32), + } + } +} + +impl From for LeafNode { + fn from(leaf_nullification: LeafNullification) -> Self { + Self { + tree: SerializablePubkey::from(leaf_nullification.tree), + leaf_index: leaf_nullification.leaf_index as u32, + hash: Hash::from(ZERO_BYTES[0]), + seq: Some(leaf_nullification.seq as u32), + } + } +} + +pub async fn persist_leaf_nodes( + txn: &DatabaseTransaction, + mut leaf_nodes: Vec, + tree_height: u32, +) -> Result<(), IngesterError> { + if leaf_nodes.is_empty() { + return Ok(()); + } + + leaf_nodes.sort_by_key(|node| node.seq); + + let leaf_locations = leaf_nodes + .iter() + .map(|node| (node.tree.to_bytes_vec(), node.node_index(tree_height))) + .collect::>(); + + let node_locations_to_models = + get_proof_nodes(txn, leaf_locations, true, false, Some(tree_height)).await?; + let mut node_locations_to_hashes_and_seq = node_locations_to_models + .iter() + .map(|(key, value)| (key.clone(), (value.hash.clone(), value.seq))) + .collect::>(); + + let mut models_to_updates = HashMap::new(); + + for leaf_node in leaf_nodes.clone() { + let node_idx = leaf_node.node_index(tree_height); + let tree = leaf_node.tree; + let key = (tree.to_bytes_vec(), node_idx); + + let model = state_trees::ActiveModel { + tree: Set(tree.to_bytes_vec()), + level: Set(0), + node_idx: Set(node_idx), + hash: Set(leaf_node.hash.to_vec()), + leaf_idx: Set(Some(leaf_node.leaf_index as i64)), + seq: Set(leaf_node.seq.map(|x| x as i64)), + }; + + let existing_seq = node_locations_to_hashes_and_seq + .get(&key) + .map(|x| x.1) + .unwrap_or(Some(0)); + + if let Some(existing_seq) = existing_seq { + if let Some(leaf_node_seq) = leaf_node.seq { + if leaf_node_seq >= existing_seq as u32 { + models_to_updates.insert(key.clone(), model); + node_locations_to_hashes_and_seq + .insert(key, (leaf_node.hash.to_vec(), Some(leaf_node_seq as i64))); + } + } + } + } + + let all_ancestors = leaf_nodes + .iter() + .flat_map(|leaf_node| { + get_node_direct_ancestors(leaf_node.node_index(tree_height)) + .iter() + .enumerate() + .map(move |(i, &idx)| (leaf_node.tree.to_bytes_vec(), idx, i)) + .collect::, i64, usize)>>() + }) + .sorted_by(|a, b| { + // Need to sort elements before dedup + a.0.cmp(&b.0) // Sort by tree + .then_with(|| a.1.cmp(&b.1)) // Then by node index + }) // Need to sort elements before dedup + .dedup() + .collect::, i64, usize)>>(); + + for (tree, node_index, child_level) in all_ancestors.into_iter().rev() { + let (left_child_hash, left_child_seq) = node_locations_to_hashes_and_seq + .get(&(tree.clone(), node_index * 2)) + .cloned() + .unwrap_or((ZERO_BYTES[child_level].to_vec(), Some(0))); + + let (right_child_hash, right_child_seq) = node_locations_to_hashes_and_seq + .get(&(tree.clone(), node_index * 2 + 1)) + .cloned() + .unwrap_or((ZERO_BYTES[child_level].to_vec(), Some(0))); + + let level = child_level + 1; + + let hash = compute_parent_hash(left_child_hash.clone(), right_child_hash.clone())?; + + let seq = max(left_child_seq, right_child_seq); + let model = state_trees::ActiveModel { + tree: Set(tree.clone()), + level: Set(level as i64), + node_idx: Set(node_index), + hash: Set(hash.clone()), + leaf_idx: Set(None), + seq: Set(seq), + }; + + let key = (tree.clone(), node_index); + models_to_updates.insert(key.clone(), model); + node_locations_to_hashes_and_seq.insert(key, (hash, seq)); + } + + // We first build the query and then execute it because SeaORM has a bug where it always throws + // an error if we do not insert a record in an insert statement. However, in this case, it's + // expected not to insert anything if the key already exists. + let mut query = state_trees::Entity::insert_many(models_to_updates.into_values()) + .on_conflict( + OnConflict::columns([state_trees::Column::Tree, state_trees::Column::NodeIdx]) + .update_columns([state_trees::Column::Hash, state_trees::Column::Seq]) + .to_owned(), + ) + .build(txn.get_database_backend()); + query.sql = format!("{} WHERE excluded.seq >= state_trees.seq", query.sql); + txn.execute(query).await.map_err(|e| { + IngesterError::DatabaseError(format!("Failed to persist path nodes: {}", e)) + })?; + Ok(()) +} diff --git a/src/ingester/persist/leaf_node_proof.rs b/src/ingester/persist/leaf_node_proof.rs new file mode 100644 index 00000000..abd05001 --- /dev/null +++ b/src/ingester/persist/leaf_node_proof.rs @@ -0,0 +1,216 @@ +use crate::api::error::PhotonApiError; +use crate::common::typedefs::hash::Hash; +use crate::common::typedefs::serializable_pubkey::SerializablePubkey; +use crate::dao::generated::state_trees; +use crate::ingester::parser::tree_info::TreeInfo; +use crate::ingester::persist::leaf_node::{leaf_index_to_node_index, LeafNode}; +use crate::ingester::persist::persisted_state_tree::{get_proof_nodes, get_proof_path, ZERO_BYTES}; +use crate::ingester::persist::MerkleProofWithContext; +use sea_orm::QueryFilter; +use sea_orm::{ColumnTrait, DatabaseTransaction, EntityTrait}; +use std::collections::HashMap; + +pub async fn get_multiple_compressed_leaf_proofs_by_indices( + txn: &DatabaseTransaction, + merkle_tree_pubkey: SerializablePubkey, + indices: Vec, +) -> Result, PhotonApiError> { + // TODO: add assertion that: abs(max(index from db) - max(indices)) <= BATCH_SIZE * 2 + if indices.is_empty() { + return Ok(Vec::new()); + } + + let existing_leaves = state_trees::Entity::find() + .filter( + state_trees::Column::LeafIdx + .is_in(indices.iter().map(|&x| x as i64).collect::>()) + .and(state_trees::Column::Level.eq(0)) + .and(state_trees::Column::Tree.eq(merkle_tree_pubkey.to_bytes_vec())), + ) + .all(txn) + .await?; + + let mut index_to_leaf = existing_leaves + .into_iter() + .map(|x| (x.leaf_idx.unwrap_or_default() as u64, x)) + .collect::>(); + + // Create leaf nodes for all requested indices + let mut leaf_nodes = Vec::new(); + + for idx in indices { + if let Some(existing) = index_to_leaf.remove(&idx) { + // Use existing leaf + leaf_nodes.push(( + LeafNode { + tree: merkle_tree_pubkey, + leaf_index: idx as u32, + hash: Hash::try_from(existing.hash)?, + seq: existing.seq.map(|s| s as u32), + }, + existing.node_idx, + )); + } else { + let zero_leaf = LeafNode { + tree: merkle_tree_pubkey, + leaf_index: idx as u32, + hash: Hash::from(ZERO_BYTES[0]), + seq: None, + }; + let tree_height = TreeInfo::get(&merkle_tree_pubkey.to_string()) + .ok_or(PhotonApiError::RecordNotFound(format!( + "Tree info not found for tree: {}", + merkle_tree_pubkey + )))? + .height; + let node_idx = leaf_index_to_node_index(zero_leaf.leaf_index, (tree_height + 1) as u32); + leaf_nodes.push((zero_leaf.clone(), node_idx)); + } + } + + get_multiple_compressed_leaf_proofs_from_full_leaf_info(txn, leaf_nodes).await +} + +pub async fn get_multiple_compressed_leaf_proofs( + txn: &DatabaseTransaction, + hashes: Vec, +) -> Result, PhotonApiError> { + if hashes.is_empty() { + return Ok(Vec::new()); + } + + let leaf_nodes_with_node_index = state_trees::Entity::find() + .filter( + state_trees::Column::Hash + .is_in(hashes.iter().map(|x| x.to_vec()).collect::>>()) + .and(state_trees::Column::Level.eq(0)), + ) + .all(txn) + .await? + .into_iter() + .map(|x| { + Ok(( + LeafNode { + tree: SerializablePubkey::try_from(x.tree.clone())?, + leaf_index: x.leaf_idx.ok_or(PhotonApiError::RecordNotFound( + "Leaf index not found".to_string(), + ))? as u32, + hash: Hash::try_from(x.hash.clone())?, + seq: x.seq.map(|x| x as u32), + }, + x.node_idx, + )) + }) + .collect::, PhotonApiError>>()?; + + if leaf_nodes_with_node_index.len() != hashes.len() { + return Err(PhotonApiError::RecordNotFound(format!( + "Leaf nodes not found for hashes. Got {} hashes. Expected {}.", + leaf_nodes_with_node_index.len(), + hashes.len() + ))); + } + + let hash_to_leaf_node_with_node_index = leaf_nodes_with_node_index + .iter() + .map(|(leaf_node, node_index)| (leaf_node.hash.clone(), (leaf_node.clone(), *node_index))) + .collect::>(); + + let leaf_nodes_with_node_index = hashes + .iter() + .map(|hash| { + hash_to_leaf_node_with_node_index + .get(hash) + .ok_or(PhotonApiError::RecordNotFound(format!( + "Leaf node not found for hash: {}", + hash + ))) + .cloned() + }) + .collect::, PhotonApiError>>()?; + + get_multiple_compressed_leaf_proofs_from_full_leaf_info(txn, leaf_nodes_with_node_index).await +} + +pub async fn get_multiple_compressed_leaf_proofs_from_full_leaf_info( + txn: &DatabaseTransaction, + leaf_nodes_with_node_index: Vec<(LeafNode, i64)>, +) -> Result, PhotonApiError> { + let include_leafs = false; + let leaf_locations_to_required_nodes = leaf_nodes_with_node_index + .iter() + .map(|(leaf_node, node_index)| { + let required_node_indices = get_proof_path(*node_index, include_leafs); + ( + (leaf_node.tree.to_bytes_vec(), *node_index), + required_node_indices, + ) + }) + .collect::, i64), Vec>>(); + + let node_to_model = get_proof_nodes( + txn, + leaf_nodes_with_node_index + .iter() + .map(|(node, node_index)| (node.tree.to_bytes_vec(), *node_index)) + .collect::, i64)>>(), + include_leafs, + true, + None, + ) + .await?; + + let proofs: Result, PhotonApiError> = leaf_nodes_with_node_index + .iter() + .map(|(leaf_node, node_index)| { + let required_node_indices = leaf_locations_to_required_nodes + .get(&(leaf_node.tree.to_bytes_vec(), *node_index)) + .ok_or(PhotonApiError::RecordNotFound(format!( + "Leaf node not found for tree and index: {} {}", + leaf_node.tree, node_index + )))?; + + let mut proof = required_node_indices + .iter() + .enumerate() + .map(|(level, idx)| { + node_to_model + .get(&(leaf_node.tree.to_bytes_vec(), *idx)) + .map(|node| { + Hash::try_from(node.hash.clone()).map_err(|_| { + PhotonApiError::UnexpectedError( + "Failed to convert hash to bytes".to_string(), + ) + }) + }) + .unwrap_or(Ok(Hash::from(ZERO_BYTES[level]))) + }) + .collect::, PhotonApiError>>()?; + + let root_seq = match node_to_model.get(&(leaf_node.tree.to_bytes_vec(), 1)) { + Some(root) => root.seq, + None => None, + }; + + let root = proof.pop().ok_or(PhotonApiError::UnexpectedError( + "Root node not found in proof".to_string(), + ))?; + + Ok(MerkleProofWithContext { + proof, + root, + leaf_index: leaf_node.leaf_index, + hash: leaf_node.hash.clone(), + merkle_tree: leaf_node.tree, + root_seq: root_seq.unwrap_or(0i64) as u64, + }) + }) + .collect(); + let proofs = proofs?; + // Commented because it makes batched state Merkle tree tests 20x slower. + // TODO: move behind debug flag + // for proof in proofs.iter() { + // validate_proof(proof)?; + // } + Ok(proofs) +} diff --git a/src/ingester/persist/merkle_proof_with_context.rs b/src/ingester/persist/merkle_proof_with_context.rs new file mode 100644 index 00000000..25fa7ffa --- /dev/null +++ b/src/ingester/persist/merkle_proof_with_context.rs @@ -0,0 +1,65 @@ +use crate::api::error::PhotonApiError; +use crate::common::typedefs::hash::Hash; +use crate::common::typedefs::serializable_pubkey::SerializablePubkey; +use crate::ingester::persist::compute_parent_hash; +use crate::ingester::persist::leaf_node::leaf_index_to_node_index; +use crate::metric; +use cadence_macros::statsd_count; +use log::info; + +#[derive(Debug, Clone)] +pub struct MerkleProofWithContext { + pub proof: Vec, + pub root: Hash, + pub leaf_index: u32, + pub hash: Hash, + pub merkle_tree: SerializablePubkey, + pub root_seq: u64, +} + +impl MerkleProofWithContext { + pub fn validate(&self) -> Result<(), PhotonApiError> { + info!( + "Validating proof for leaf index: {} tree: {}", + self.leaf_index, self.merkle_tree + ); + let leaf_index = self.leaf_index; + let tree_height = (self.proof.len() + 1) as u32; + let node_index = leaf_index_to_node_index(leaf_index, tree_height); + let mut computed_root = self.hash.to_vec(); + info!("leaf_index: {}, node_index: {}", leaf_index, node_index); + + for (idx, node) in self.proof.iter().enumerate() { + let is_left = (node_index >> idx) & 1 == 0; + computed_root = compute_parent_hash( + if is_left { + computed_root.clone() + } else { + node.to_vec() + }, + if is_left { + node.to_vec() + } else { + computed_root.clone() + }, + ) + .map_err(|e| { + PhotonApiError::UnexpectedError(format!( + "Failed to compute parent hash for proof: {}", + e + )) + })?; + } + if computed_root != self.root.to_vec() { + metric! { + statsd_count!("invalid_proof", 1); + } + return Err(PhotonApiError::UnexpectedError(format!( + "Computed root does not match the provided root. Proof; {:?}", + self + ))); + } + + Ok(()) + } +} diff --git a/src/ingester/persist/mod.rs b/src/ingester/persist/mod.rs index 53078994..91746b59 100644 --- a/src/ingester/persist/mod.rs +++ b/src/ingester/persist/mod.rs @@ -1,40 +1,60 @@ use super::{error, parser::state_update::AccountTransaction}; +use crate::ingester::parser::state_update::{AddressQueueUpdate, StateUpdate}; use crate::{ - api::method::{get_multiple_new_address_proofs::ADDRESS_TREE_HEIGHT, utils::PAGE_LIMIT}, - common::typedefs::{account::Account, hash::Hash, token_data::TokenData}, - dao::generated::{account_transactions, state_tree_histories, state_trees, transactions}, + api::method::utils::PAGE_LIMIT, + common::typedefs::{hash::Hash, token_data::TokenData}, + dao::generated::{ + account_transactions, accounts, state_tree_histories, state_trees, token_accounts, + transactions, + }, ingester::parser::state_update::Transaction, metric, }; -use crate::{ - dao::generated::{accounts, token_accounts}, - ingester::parser::state_update::StateUpdate, -}; use itertools::Itertools; use light_poseidon::{Poseidon, PoseidonBytesHasher}; +use persisted_batch_event::persist_batch_events; +use crate::common::typedefs::account::{Account, AccountWithContext}; +use crate::ingester::persist::spend::{spend_input_accounts, spend_input_accounts_batched}; use ark_bn254::Fr; use borsh::BorshDeserialize; use cadence_macros::statsd_count; +use error::IngesterError; +use light_compressed_account::TreeType; use log::debug; -use persisted_indexed_merkle_tree::update_indexed_tree_leaves; -use persisted_state_tree::{persist_leaf_nodes, LeafNode}; +use persisted_indexed_merkle_tree::update_indexed_tree_leaves_v1; use sea_orm::{ - sea_query::{Expr, OnConflict}, - ColumnTrait, ConnectionTrait, DatabaseBackend, DatabaseTransaction, EntityTrait, Order, - QueryFilter, QueryOrder, QuerySelect, QueryTrait, Set, Statement, + sea_query::OnConflict, ColumnTrait, ConnectionTrait, DatabaseBackend, DatabaseTransaction, + EntityTrait, Order, QueryFilter, QueryOrder, QuerySelect, QueryTrait, Set, Statement, }; +use solana_pubkey::{pubkey, Pubkey}; +use solana_sdk::signature::Signature; +use sqlx::types::Decimal; use std::{cmp::max, collections::HashMap}; -use error::IngesterError; -use solana_program::pubkey; -use solana_sdk::{pubkey::Pubkey, signature::Signature}; -use sqlx::types::Decimal; +mod merkle_proof_with_context; pub mod persisted_indexed_merkle_tree; pub mod persisted_state_tree; -const COMPRESSED_TOKEN_PROGRAM: Pubkey = pubkey!("cTokenmWW8bLPjZEBAUgYy3zKxQZW6VKi7bqNFEVv3m"); -const TREE_HEIGHT: u32 = 27; +use crate::dao::generated::address_queue; +use crate::ingester::persist::leaf_node::TREE_HEIGHT_V1; +pub use merkle_proof_with_context::MerkleProofWithContext; + +mod leaf_node; +mod leaf_node_proof; + +pub use self::leaf_node::{persist_leaf_nodes, LeafNode}; +pub use self::leaf_node_proof::{ + get_multiple_compressed_leaf_proofs, get_multiple_compressed_leaf_proofs_by_indices, + get_multiple_compressed_leaf_proofs_from_full_leaf_info, +}; + +mod persisted_batch_event; + +mod spend; + +pub const COMPRESSED_TOKEN_PROGRAM: Pubkey = pubkey!("cTokenmWW8bLPjZEBAUgYy3zKxQZW6VKi7bqNFEVv3m"); + // To avoid exceeding the 64k total parameter limit pub const MAX_SQL_INSERTS: usize = 500; @@ -52,6 +72,10 @@ pub async fn persist_state_update( transactions, leaf_nullifications, indexed_merkle_tree_updates, + batch_merkle_tree_events, + batch_nullify_context, + batch_new_addresses, + .. } = state_update; let input_accounts_len = in_accounts.len(); @@ -60,10 +84,17 @@ pub async fn persist_state_update( let indexed_merkle_tree_updates_len = indexed_merkle_tree_updates.len(); debug!( - "Persisting state update with {} input accounts, {} output accounts", + "Persisting state update with {} input accounts, {} output accounts, {} addresses", in_accounts.len(), - out_accounts.len() + out_accounts.len(), + batch_new_addresses.len() ); + + debug!("Persisting addresses..."); + for chunk in batch_new_addresses.chunks(MAX_SQL_INSERTS) { + insert_addresses_into_queues(txn, chunk).await?; + } + debug!("Persisting output accounts..."); for chunk in out_accounts.chunks(MAX_SQL_INSERTS) { append_output_accounts(txn, chunk).await?; @@ -78,6 +109,8 @@ pub async fn persist_state_update( spend_input_accounts(txn, chunk).await?; } + spend_input_accounts_batched(txn, &batch_nullify_context).await?; + let account_to_transaction = account_transactions .iter() .map(|account_transaction| { @@ -90,11 +123,12 @@ pub async fn persist_state_update( let mut leaf_nodes_with_signatures: Vec<(LeafNode, Signature)> = out_accounts .iter() + .filter(|account| account.context.tree_type == TreeType::StateV1 as u16) .map(|account| { ( LeafNode::from(account.clone()), account_to_transaction - .get(&account.hash) + .get(&account.account.hash) .copied() // HACK: We should always have a signature for account transactions, but sometimes // we don't generate it for mock tests. @@ -120,7 +154,7 @@ pub async fn persist_state_update( .map(|(leaf_node, _)| leaf_node.clone()) .collect_vec(); - persist_leaf_nodes(txn, leaf_nodes_chunk, TREE_HEIGHT).await?; + persist_leaf_nodes(txn, leaf_nodes_chunk, TREE_HEIGHT_V1 + 1).await?; } let transactions_vec = transactions.into_iter().collect::>(); @@ -153,7 +187,17 @@ pub async fn persist_state_update( } debug!("Persisting index tree updates..."); - update_indexed_tree_leaves(txn, indexed_merkle_tree_updates, ADDRESS_TREE_HEIGHT).await?; + // Convert from solana_pubkey::Pubkey to solana_sdk::pubkey::Pubkey + let converted_updates = indexed_merkle_tree_updates + .into_iter() + .map(|((pubkey, u64_val), update)| { + let sdk_pubkey = Pubkey::new_from_array(pubkey.to_bytes()); + ((sdk_pubkey, u64_val), update) + }) + .collect(); + update_indexed_tree_leaves_v1(txn, converted_updates).await?; + + persist_batch_events(txn, batch_merkle_tree_events).await?; metric! { statsd_count!("state_update.input_accounts", input_accounts_len as u64); @@ -171,9 +215,16 @@ async fn persist_state_tree_history( ) -> Result<(), IngesterError> { let state_tree_history = chunk .into_iter() + .filter_map(|(leaf_node, signature)| { + if leaf_node.seq.is_none() { + None + } else { + Some((leaf_node, signature)) + } + }) .map(|(leaf_node, signature)| state_tree_histories::ActiveModel { tree: Set(leaf_node.tree.to_bytes_vec()), - seq: Set(leaf_node.seq as i64), + seq: Set(leaf_node.seq.unwrap() as i64), leaf_idx: Set(leaf_node.leaf_index as i64), transaction_signature: Set(Into::<[u8; 64]>::into(signature).to_vec()), }) @@ -205,63 +256,6 @@ pub fn parse_token_data(account: &Account) -> Result, Ingester } } -async fn spend_input_accounts( - txn: &DatabaseTransaction, - in_accounts: &[Hash], -) -> Result<(), IngesterError> { - // Perform the update operation on the identified records - let query = accounts::Entity::update_many() - .col_expr(accounts::Column::Spent, Expr::value(true)) - .col_expr( - accounts::Column::PrevSpent, - Expr::col(accounts::Column::Spent).into(), - ) - .filter( - accounts::Column::Hash.is_in( - in_accounts - .iter() - .map(|account| account.to_vec()) - .collect::>>(), - ), - ) - .build(txn.get_database_backend()); - - execute_account_update_query_and_update_balances( - txn, - query, - AccountType::Account, - ModificationType::Spend, - ) - .await?; - - debug!("Marking token accounts as spent...",); - let query = token_accounts::Entity::update_many() - .col_expr(token_accounts::Column::Spent, Expr::value(true)) - .col_expr( - token_accounts::Column::PrevSpent, - Expr::col(token_accounts::Column::Spent).into(), - ) - .filter( - token_accounts::Column::Hash.is_in( - in_accounts - .iter() - .map(|account| account.to_vec()) - .collect::>>(), - ), - ) - .build(txn.get_database_backend()); - - execute_account_update_query_and_update_balances( - txn, - query, - AccountType::TokenAccount, - ModificationType::Spend, - ) - .await?; - - Ok(()) -} - pub struct EnrichedTokenAccount { pub token_data: TokenData, pub hash: Hash, @@ -382,37 +376,71 @@ async fn execute_account_update_query_and_update_balances( Ok(()) } +async fn insert_addresses_into_queues( + txn: &DatabaseTransaction, + addresses: &[AddressQueueUpdate], +) -> Result<(), IngesterError> { + let mut address_models = Vec::new(); + + for address in addresses { + address_models.push(address_queue::ActiveModel { + address: Set(address.address.to_vec()), + tree: Set(address.tree.to_bytes_vec()), + queue_index: Set(address.queue_index as i64), + }); + } + + let query = address_queue::Entity::insert_many(address_models) + .on_conflict( + OnConflict::column(address_queue::Column::Address) + .do_nothing() + .to_owned(), + ) + .build(txn.get_database_backend()); + txn.execute(query).await?; + + Ok(()) +} + async fn append_output_accounts( txn: &DatabaseTransaction, - out_accounts: &[Account], + out_accounts: &[AccountWithContext], ) -> Result<(), IngesterError> { let mut account_models = Vec::new(); let mut token_accounts = Vec::new(); for account in out_accounts { account_models.push(accounts::ActiveModel { - hash: Set(account.hash.to_vec()), - address: Set(account.address.map(|x| x.to_bytes_vec())), + hash: Set(account.account.hash.to_vec()), + address: Set(account.account.address.map(|x| x.to_bytes_vec())), discriminator: Set(account + .account .data .as_ref() .map(|x| Decimal::from(x.discriminator.0))), - data: Set(account.data.as_ref().map(|x| x.data.clone().0)), - data_hash: Set(account.data.as_ref().map(|x| x.data_hash.to_vec())), - tree: Set(account.tree.to_bytes_vec()), - leaf_index: Set(account.leaf_index.0 as i64), - owner: Set(account.owner.to_bytes_vec()), - lamports: Set(Decimal::from(account.lamports.0)), + data: Set(account.account.data.as_ref().map(|x| x.data.clone().0)), + data_hash: Set(account.account.data.as_ref().map(|x| x.data_hash.to_vec())), + tree: Set(account.account.tree.to_bytes_vec()), + queue: Set(account.context.queue.to_bytes_vec()), + leaf_index: Set(account.account.leaf_index.0 as i64), + in_output_queue: Set(account.context.in_output_queue), + nullifier_queue_index: Set(account.context.nullifier_queue_index.map(|x| x.0 as i64)), + nullified_in_tree: Set(false), + tree_type: Set(account.context.tree_type as i32), + nullifier: Set(account.context.nullifier.as_ref().map(|x| x.to_vec())), + owner: Set(account.account.owner.to_bytes_vec()), + lamports: Set(Decimal::from(account.account.lamports.0)), spent: Set(false), - slot_created: Set(account.slot_created.0 as i64), - seq: Set(account.seq.0 as i64), + slot_created: Set(account.account.slot_created.0 as i64), + seq: Set(account.account.seq.map(|x| x.0 as i64)), prev_spent: Set(None), + tx_hash: Default::default(), // Its sets at input queue insertion for batch updates }); - if let Some(token_data) = parse_token_data(account)? { + if let Some(token_data) = parse_token_data(&account.account)? { token_accounts.push(EnrichedTokenAccount { token_data, - hash: account.hash.clone(), + hash: account.account.hash.clone(), }); } } @@ -482,7 +510,7 @@ pub async fn persist_token_accounts( Ok(()) } -fn get_node_direct_ancestors(leaf_index: i64) -> Vec { +pub(crate) fn get_node_direct_ancestors(leaf_index: i64) -> Vec { let mut path: Vec = Vec::new(); let mut current_index = leaf_index; while current_index > 1 { diff --git a/src/ingester/persist/persisted_batch_event.rs b/src/ingester/persist/persisted_batch_event.rs new file mode 100644 index 00000000..0fe43023 --- /dev/null +++ b/src/ingester/persist/persisted_batch_event.rs @@ -0,0 +1,225 @@ +use crate::common::typedefs::hash::Hash; +use crate::common::typedefs::serializable_pubkey::SerializablePubkey; +use crate::dao::generated::{accounts, address_queue}; +use crate::ingester::error::IngesterError; +use crate::ingester::parser::indexer_events::BatchEvent; +use crate::ingester::parser::{ + indexer_events::MerkleTreeEvent, merkle_tree_events_parser::BatchMerkleTreeEvents, +}; +use crate::ingester::persist::leaf_node::{persist_leaf_nodes, LeafNode, STATE_TREE_HEIGHT_V2}; +use crate::ingester::persist::persisted_indexed_merkle_tree::multi_append; +use crate::ingester::persist::MAX_SQL_INSERTS; +use crate::migration::Expr; +use light_batched_merkle_tree::constants::DEFAULT_BATCH_ADDRESS_TREE_HEIGHT; +use sea_orm::{ + ColumnTrait, ConnectionTrait, DatabaseTransaction, EntityTrait, QueryFilter, QueryOrder, + QueryTrait, +}; + +const ZKP_BATCH_SIZE: usize = 500; + +/// We need to find the events of the same tree: +/// - order them by sequence number and execute them in order +/// HashMap> +/// - execute a single function call to persist all changed nodes +pub async fn persist_batch_events( + txn: &DatabaseTransaction, + mut events: BatchMerkleTreeEvents, +) -> Result<(), IngesterError> { + for (_, events) in events.iter_mut() { + events.sort_by(|a, b| a.0.cmp(&b.0)); + + // Process each event in sequence + for (_, event) in events.iter() { + // Batch size is 500 for batched State Merkle trees. + let mut leaf_nodes = Vec::with_capacity(ZKP_BATCH_SIZE); + match event { + MerkleTreeEvent::BatchNullify(batch_nullify_event) => { + persist_batch_nullify_event(txn, batch_nullify_event, &mut leaf_nodes).await + } + MerkleTreeEvent::BatchAppend(batch_append_event) => { + persist_batch_append_event(txn, batch_append_event, &mut leaf_nodes).await + } + MerkleTreeEvent::BatchAddressAppend(batch_address_append_event) => { + persist_batch_address_append_event(txn, batch_address_append_event).await + } + _ => Err(IngesterError::InvalidEvent), + }?; + + if leaf_nodes.len() <= MAX_SQL_INSERTS { + persist_leaf_nodes(txn, leaf_nodes, STATE_TREE_HEIGHT_V2 + 1).await?; + } else { + // Currently not used but a safeguard in case the batch size changes. + for leaf_nodes_chunk in leaf_nodes.chunks(MAX_SQL_INSERTS) { + persist_leaf_nodes(txn, leaf_nodes_chunk.to_vec(), STATE_TREE_HEIGHT_V2 + 1) + .await?; + } + } + } + } + Ok(()) +} + +/// Persists a batch append event. +/// 1. Create leaf nodes with the account hash as leaf. +/// 2. Remove inserted elements from the database output queue. +async fn persist_batch_append_event( + txn: &DatabaseTransaction, + batch_append_event: &BatchEvent, + leaf_nodes: &mut Vec, +) -> Result<(), IngesterError> { + // 1. Create leaf nodes with the account hash as leaf. + // Leaf indices are used as output queue indices. + // The leaf index range of the batch append event is + // [old_next_index, new_next_index). + let accounts = accounts::Entity::find() + .filter( + accounts::Column::LeafIndex + .gte(batch_append_event.old_next_index as i64) + .and(accounts::Column::LeafIndex.lt(batch_append_event.new_next_index as i64)) + .and(accounts::Column::NullifiedInTree.eq(false)) + .and(accounts::Column::Tree.eq(batch_append_event.merkle_tree_pubkey.to_vec())), + ) + .order_by_asc(accounts::Column::LeafIndex) + .all(txn) + .await?; + accounts + .iter() + .try_for_each(|account| -> Result<(), IngesterError> { + leaf_nodes.push(LeafNode { + tree: SerializablePubkey::try_from(account.tree.clone()).map_err(|_| { + IngesterError::ParserError( + "Failed to convert tree to SerializablePubkey".to_string(), + ) + })?, + seq: Some(batch_append_event.sequence_number as u32), + leaf_index: account.leaf_index as u32, + hash: Hash::new(account.hash.as_slice()).map_err(|_| { + IngesterError::ParserError("Failed to convert nullifier to Hash".to_string()) + })?, + }); + + Ok(()) + })?; + + // 2. Remove inserted elements from the output queue. + let query = accounts::Entity::update_many() + .col_expr(accounts::Column::InOutputQueue, Expr::value(false)) + .filter( + accounts::Column::LeafIndex + .gte(batch_append_event.old_next_index as i64) + .and(accounts::Column::LeafIndex.lt(batch_append_event.new_next_index as i64)) + .and(accounts::Column::Tree.eq(batch_append_event.merkle_tree_pubkey.to_vec())), + ) + .build(txn.get_database_backend()); + txn.execute(query).await?; + Ok(()) +} + +/// Persists a batch nullify event. +/// 1. Create leaf nodes with nullifier as leaf. +/// 2. Mark elements as nullified in tree +/// and remove them from the database nullifier queue. +async fn persist_batch_nullify_event( + txn: &DatabaseTransaction, + batch_nullify_event: &BatchEvent, + leaf_nodes: &mut Vec, +) -> Result<(), IngesterError> { + // 1. Create leaf nodes with nullifier as leaf. + // Nullifier queue index is continuously incremented by 1 + // with each element insertion into the nullifier queue. + let accounts = accounts::Entity::find() + .filter( + accounts::Column::NullifierQueueIndex + .gte(batch_nullify_event.old_next_index) + .and(accounts::Column::NullifierQueueIndex.lt(batch_nullify_event.new_next_index)), + ) + .order_by_asc(accounts::Column::NullifierQueueIndex) + .all(txn) + .await?; + accounts + .iter() + .try_for_each(|account| -> Result<(), IngesterError> { + leaf_nodes.push(LeafNode { + tree: SerializablePubkey::try_from(account.tree.clone()).map_err(|_| { + IngesterError::ParserError( + "Failed to convert tree to SerializablePubkey".to_string(), + ) + })?, + seq: Some(batch_nullify_event.sequence_number as u32), + leaf_index: account.leaf_index as u32, + hash: Hash::new( + account + .nullifier + .as_ref() + .ok_or(IngesterError::ParserError( + "Nullifier is missing".to_string(), + ))? + .as_slice(), + ) + .map_err(|_| { + IngesterError::ParserError("Failed to convert nullifier to Hash".to_string()) + })?, + }); + + Ok(()) + })?; + + // 2. Mark elements as nullified in tree and + // remove them from the database nullifier queue. + let query = accounts::Entity::update_many() + .col_expr( + accounts::Column::NullifierQueueIndex, + Expr::value(Option::::None), + ) + .col_expr(accounts::Column::NullifiedInTree, Expr::value(true)) + .filter( + accounts::Column::NullifierQueueIndex + .gte(batch_nullify_event.old_next_index) + .and(accounts::Column::NullifierQueueIndex.lt(batch_nullify_event.new_next_index)), + ) + .build(txn.get_database_backend()); + txn.execute(query).await?; + Ok(()) +} + +/// Persists a batch address append event. +/// 1. Create leaf nodes with the address value as leaf. +/// 2. Remove inserted elements from the database address queue. +async fn persist_batch_address_append_event( + txn: &DatabaseTransaction, + batch_address_append_event: &BatchEvent, +) -> Result<(), IngesterError> { + let last_queue_index = batch_address_append_event.new_next_index as i64 - 1; + let addresses = address_queue::Entity::find() + .filter(address_queue::Column::QueueIndex.lt(last_queue_index).and( + address_queue::Column::Tree.eq(batch_address_append_event.merkle_tree_pubkey.to_vec()), + )) + .order_by_asc(address_queue::Column::QueueIndex) + .all(txn) + .await?; + + let address_values = addresses + .iter() + .map(|address| address.address.clone()) + .collect::>(); + + // 1. Append the addresses to the indexed merkle tree. + multi_append( + txn, + address_values, + batch_address_append_event.merkle_tree_pubkey.to_vec(), + DEFAULT_BATCH_ADDRESS_TREE_HEIGHT + 1, + ) + .await?; + + // 2. Remove inserted elements from the database address queue. + address_queue::Entity::delete_many() + .filter(address_queue::Column::QueueIndex.lt(last_queue_index).and( + address_queue::Column::Tree.eq(batch_address_append_event.merkle_tree_pubkey.to_vec()), + )) + .exec(txn) + .await?; + + Ok(()) +} diff --git a/src/ingester/persist/persisted_indexed_merkle_tree.rs b/src/ingester/persist/persisted_indexed_merkle_tree.rs index 032f3a75..0c42f967 100644 --- a/src/ingester/persist/persisted_indexed_merkle_tree.rs +++ b/src/ingester/persist/persisted_indexed_merkle_tree.rs @@ -12,8 +12,13 @@ use sea_orm::{ sea_query::OnConflict, ColumnTrait, ConnectionTrait, DatabaseBackend, DatabaseTransaction, EntityTrait, QueryFilter, QueryTrait, Set, Statement, TransactionTrait, }; -use solana_sdk::pubkey::Pubkey; +use solana_pubkey::Pubkey; +use super::{ + compute_parent_hash, get_multiple_compressed_leaf_proofs_from_full_leaf_info, + persisted_state_tree::ZERO_BYTES, MerkleProofWithContext, MAX_SQL_INSERTS, +}; +use crate::ingester::persist::leaf_node::{persist_leaf_nodes, LeafNode, TREE_HEIGHT_V1}; use crate::{ api::error::PhotonApiError, common::typedefs::{hash::Hash, serializable_pubkey::SerializablePubkey}, @@ -26,15 +31,6 @@ use crate::{ use lazy_static::lazy_static; use light_poseidon::PoseidonBytesHasher; -use super::{ - compute_parent_hash, - persisted_state_tree::{ - get_multiple_compressed_leaf_proofs_from_full_leaf_info, persist_leaf_nodes, - validate_proof, LeafNode, MerkleProofWithContext, ZERO_BYTES, - }, - MAX_SQL_INSERTS, -}; - lazy_static! { pub static ref HIGHEST_ADDRESS_PLUS_ONE: BigUint = BigUint::from_str( "452312848583266388373324160190187140051835877600158453279131187530910662655" @@ -42,7 +38,18 @@ lazy_static! { .unwrap(); } -fn compute_range_node_hash(node: &indexed_trees::Model) -> Result { +pub fn compute_range_node_hash(node: &indexed_trees::Model) -> Result { + let mut poseidon = Poseidon::::new_circom(2).unwrap(); + Hash::try_from( + poseidon + .hash_bytes_be(&[&node.value, &node.next_value]) + .map_err(|e| IngesterError::ParserError(format!("Failed to compute hash: {}", e))) + .map(|x| x.to_vec())?, + ) + .map_err(|e| IngesterError::ParserError(format!("Failed to convert hash: {}", e))) +} + +pub fn compute_range_node_hash_v1(node: &indexed_trees::Model) -> Result { let mut poseidon = Poseidon::::new_circom(3).unwrap(); let next_index = node.next_index.to_be_bytes(); Hash::try_from( @@ -54,7 +61,35 @@ fn compute_range_node_hash(node: &indexed_trees::Model) -> Result) -> indexed_trees::Model { +pub fn compute_range_node_hash_for_subtrees( + node: &indexed_trees::Model, +) -> Result { + let mut poseidon = Poseidon::::new_circom(3).unwrap(); + let next_index = node.next_index.to_be_bytes(); + Hash::try_from( + poseidon + .hash_bytes_be(&[&node.value, &next_index, &node.next_value]) + .map_err(|e| IngesterError::ParserError(format!("Failed to compute hash: {}", e))) + .map(|x| x.to_vec())?, + ) + .map_err(|e| IngesterError::ParserError(format!("Failed to convert hash: {}", e))) +} + +pub fn get_zeroeth_exclusion_range(tree: Vec) -> indexed_trees::Model { + indexed_trees::Model { + tree, + leaf_index: 0, + value: vec![0; 32], + next_index: 0, + next_value: vec![0] + .into_iter() + .chain(HIGHEST_ADDRESS_PLUS_ONE.to_bytes_be()) + .collect(), + seq: Some(0), + } +} + +pub fn get_zeroeth_exclusion_range_v1(tree: Vec) -> indexed_trees::Model { indexed_trees::Model { tree, leaf_index: 0, @@ -64,11 +99,11 @@ fn get_zeroeth_exclusion_range(tree: Vec) -> indexed_trees::Model { .into_iter() .chain(HIGHEST_ADDRESS_PLUS_ONE.to_bytes_be()) .collect(), - seq: 0, + seq: Some(0), } } -fn get_top_element(tree: Vec) -> indexed_trees::Model { +pub fn get_top_element(tree: Vec) -> indexed_trees::Model { indexed_trees::Model { tree, leaf_index: 1, @@ -78,11 +113,11 @@ fn get_top_element(tree: Vec) -> indexed_trees::Model { .collect(), next_index: 0, next_value: vec![0; 32], - seq: 0, + seq: Some(0), } } -pub async fn get_exclusion_range_with_proof( +pub async fn get_exclusion_range_with_proof_v2( txn: &DatabaseTransaction, tree: Vec, tree_height: u32, @@ -101,8 +136,114 @@ pub async fn get_exclusion_range_with_proof( let zeroeth_element_hash = compute_range_node_hash(&zeroeth_element).map_err(|e| { PhotonApiError::UnexpectedError(format!("Failed to compute hash: {}", e)) })?; + + let mut proof: Vec = vec![]; + for i in 0..(tree_height - 1) { + let hash = Hash::try_from(ZERO_BYTES[i as usize]).map_err(|e| { + PhotonApiError::UnexpectedError(format!("Failed to convert hash: {}", e)) + })?; + proof.push(hash); + } + + let mut root = zeroeth_element_hash.clone().to_vec(); + + for elem in proof.iter() { + root = compute_parent_hash(root, elem.to_vec()).map_err(|e| { + PhotonApiError::UnexpectedError(format!("Failed to compute hash: {}", e)) + })?; + } + + let merkle_proof = MerkleProofWithContext { + proof, + root: Hash::try_from(root).map_err(|e| { + PhotonApiError::UnexpectedError(format!("Failed to convert hash: {}", e)) + })?, + leaf_index: 0, + hash: zeroeth_element_hash, + merkle_tree: SerializablePubkey::try_from(tree.clone()).map_err(|e| { + PhotonApiError::UnexpectedError(format!("Failed to serialize pubkey: {}", e)) + })?, + root_seq: 3, + }; + merkle_proof.validate()?; + return Ok((zeroeth_element, merkle_proof)); + } + + let range_node = btree.values().next().ok_or(PhotonApiError::RecordNotFound( + "No range proof found".to_string(), + ))?; + let hash = compute_range_node_hash(range_node) + .map_err(|e| PhotonApiError::UnexpectedError(format!("Failed to compute hash: {}", e)))?; + + let leaf_node = LeafNode { + tree: SerializablePubkey::try_from(range_node.tree.clone()).map_err(|e| { + PhotonApiError::UnexpectedError(format!("Failed to serialize pubkey: {}", e)) + })?, + leaf_index: range_node.leaf_index as u32, + hash, + seq: range_node.seq.map(|x| x as u32), + }; + let node_index = leaf_node.node_index(tree_height); + + let leaf_proofs: Vec = + get_multiple_compressed_leaf_proofs_from_full_leaf_info(txn, vec![(leaf_node, node_index)]) + .await + .map_err(|proof_error| { + let tree_pubkey = match SerializablePubkey::try_from(range_node.tree.clone()) { + Ok(pubkey) => pubkey, + Err(e) => { + log::error!("Failed to serialize tree pubkey: {}", e); + return proof_error; + } + }; + let value_pubkey = match SerializablePubkey::try_from(range_node.value.clone()) { + Ok(pubkey) => pubkey, + Err(e) => { + log::error!("Failed to serialize value pubkey: {}", e); + return proof_error; + } + }; + log::error!( + "Failed to get multiple compressed leaf proofs for {:?} for value {:?}: {}", + tree_pubkey, + value_pubkey, + proof_error + ); + proof_error + })?; + + let leaf_proof = leaf_proofs + .into_iter() + .next() + .ok_or(PhotonApiError::RecordNotFound( + "No leaf proof found".to_string(), + ))?; + + Ok((range_node.clone(), leaf_proof)) +} + +pub async fn get_exclusion_range_with_proof_v1( + txn: &DatabaseTransaction, + tree: Vec, + tree_height: u32, + value: Vec, +) -> Result<(indexed_trees::Model, MerkleProofWithContext), PhotonApiError> { + let btree = query_next_smallest_elements(txn, vec![value.clone()], tree.clone()) + .await + .map_err(|e| { + PhotonApiError::UnexpectedError(format!( + "Failed to query next smallest elements: {}", + e + )) + })?; + + if btree.is_empty() { + let zeroeth_element = get_zeroeth_exclusion_range_v1(tree.clone()); + let zeroeth_element_hash = compute_range_node_hash_v1(&zeroeth_element).map_err(|e| { + PhotonApiError::UnexpectedError(format!("Failed to compute hash: {}", e)) + })?; let top_element = get_top_element(tree.clone()); - let top_element_hash = compute_range_node_hash(&top_element).map_err(|e| { + let top_element_hash = compute_range_node_hash_v1(&top_element).map_err(|e| { PhotonApiError::UnexpectedError(format!("Failed to compute hash: {}", e)) })?; let mut proof: Vec = vec![top_element_hash.clone()]; @@ -125,21 +266,21 @@ pub async fn get_exclusion_range_with_proof( root: Hash::try_from(root).map_err(|e| { PhotonApiError::UnexpectedError(format!("Failed to convert hash: {}", e)) })?, - leafIndex: 0, + leaf_index: 0, hash: zeroeth_element_hash, - merkleTree: SerializablePubkey::try_from(tree.clone()).map_err(|e| { + merkle_tree: SerializablePubkey::try_from(tree.clone()).map_err(|e| { PhotonApiError::UnexpectedError(format!("Failed to serialize pubkey: {}", e)) })?, - // HACK: Fixed value while not supporting forester. - rootSeq: 3, + root_seq: 3, }; - validate_proof(&merkle_proof)?; + merkle_proof.validate()?; return Ok((zeroeth_element, merkle_proof)); } + let range_node = btree.values().next().ok_or(PhotonApiError::RecordNotFound( "No range proof found".to_string(), ))?; - let hash = compute_range_node_hash(range_node) + let hash = compute_range_node_hash_v1(range_node) .map_err(|e| PhotonApiError::UnexpectedError(format!("Failed to compute hash: {}", e)))?; let leaf_node = LeafNode { @@ -148,7 +289,7 @@ pub async fn get_exclusion_range_with_proof( })?, leaf_index: range_node.leaf_index as u32, hash, - seq: range_node.seq as u32, + seq: range_node.seq.map(|x| x as u32), }; let node_index = leaf_node.node_index(tree_height); @@ -189,19 +330,19 @@ pub async fn get_exclusion_range_with_proof( Ok((range_node.clone(), leaf_proof)) } -pub async fn update_indexed_tree_leaves( +pub async fn update_indexed_tree_leaves_v1( txn: &DatabaseTransaction, mut indexed_leaf_updates: HashMap<(Pubkey, u64), IndexedTreeLeafUpdate>, - tree_height: u32, ) -> Result<(), IngesterError> { let trees: HashSet = indexed_leaf_updates.keys().map(|x| x.0).collect(); - for tree in trees { + for sdk_tree in trees { { - let leaf = get_top_element(tree.to_bytes().to_vec()); - let leaf_update = indexed_leaf_updates.get(&(tree, leaf.leaf_index as u64)); + let tree = Pubkey::new_from_array(sdk_tree.to_bytes()); + let leaf = get_zeroeth_exclusion_range(sdk_tree.to_bytes().to_vec()); + let leaf_update = indexed_leaf_updates.get(&(sdk_tree, leaf.leaf_index as u64)); if leaf_update.is_none() { indexed_leaf_updates.insert( - (tree, leaf.leaf_index as u64), + (sdk_tree, leaf.leaf_index as u64), IndexedTreeLeafUpdate { tree, hash: compute_range_node_hash(&leaf) @@ -244,7 +385,7 @@ pub async fn update_indexed_tree_leaves( value: Set(x.leaf.value.to_vec()), next_index: Set(x.leaf.next_index as i64), next_value: Set(x.leaf.next_value.to_vec()), - seq: Set(x.seq as i64), + seq: Set(Some(x.seq as i64)), }); let mut query = indexed_trees::Entity::insert_many(models) @@ -280,12 +421,12 @@ pub async fn update_indexed_tree_leaves( hash: Hash::try_from(x.hash).map_err(|e| { IngesterError::DatabaseError(format!("Failed to serialize hash: {}", e)) })?, - seq: x.seq as u32, + seq: Option::from(x.seq as u32), }) }) .collect::, IngesterError>>()?; - persist_leaf_nodes(txn, state_tree_leaf_nodes, tree_height).await?; + persist_leaf_nodes(txn, state_tree_leaf_nodes, TREE_HEIGHT_V1 + 1).await?; } Ok(()) @@ -304,13 +445,12 @@ pub async fn multi_append( )) .await .map_err(|e| { - IngesterError::DatabaseError(format!("Failed to lock state_trees table: {}", e)) + IngesterError::DatabaseError(format!("Failed to lock indexed_trees table: {}", e)) })?; } let index_stmt = Statement::from_string( txn.get_database_backend(), - // TODO: Use parametrized queries instead format!( "SELECT leaf_index FROM indexed_trees WHERE tree = {} ORDER BY leaf_index DESC LIMIT 1", format_bytes(tree.clone(), txn.get_database_backend()) @@ -322,16 +462,15 @@ pub async fn multi_append( let mut current_index = match max_index { Some(row) => row.try_get("", "leaf_index").unwrap_or(0), - None => 1, + None => 0, }; + let mut indexed_tree = query_next_smallest_elements(txn, values.clone(), tree.clone()).await?; let mut elements_to_update: HashMap = HashMap::new(); if indexed_tree.is_empty() { - for model in [ - get_zeroeth_exclusion_range(tree.clone()), - get_top_element(tree.clone()), - ] { + { + let model = get_zeroeth_exclusion_range(tree.clone()); elements_to_update.insert(model.leaf_index, model.clone()); indexed_tree.insert(model.value.clone(), model); } @@ -345,7 +484,7 @@ pub async fn multi_append( value: value.clone(), next_index: 0, next_value: vec![], - seq: 0, + seq: Some(0), }; let next_largest = indexed_tree @@ -375,7 +514,7 @@ pub async fn multi_append( value: Set(x.value.clone()), next_index: Set(x.next_index), next_value: Set(x.next_value.clone()), - seq: Set(0), + seq: Set(Some(0)), }); indexed_trees::Entity::insert_many(active_elements) @@ -405,7 +544,7 @@ pub async fn multi_append( })?, leaf_index: x.leaf_index as u32, hash: compute_range_node_hash(x)?, - seq: 0, + seq: Some(0), }) }) .collect::, IngesterError>>()?; @@ -488,7 +627,7 @@ where Ok(indexed_tree) } -fn format_bytes(bytes: Vec, database_backend: DatabaseBackend) -> String { +pub fn format_bytes(bytes: Vec, database_backend: DatabaseBackend) -> String { let hex_bytes = hex::encode(bytes); match database_backend { DatabaseBackend::Postgres => format!("E'\\\\x{}'", hex_bytes), diff --git a/src/ingester/persist/persisted_state_tree.rs b/src/ingester/persist/persisted_state_tree.rs index cf69f5ff..fde7801d 100644 --- a/src/ingester/persist/persisted_state_tree.rs +++ b/src/ingester/persist/persisted_state_tree.rs @@ -1,377 +1,17 @@ -use std::{cmp::max, collections::HashMap}; +use std::collections::HashMap; -use cadence_macros::statsd_count; use itertools::Itertools; use sea_orm::{ - sea_query::OnConflict, ColumnTrait, ConnectionTrait, DatabaseTransaction, DbErr, EntityTrait, - QueryFilter, QueryTrait, Set, Statement, TransactionTrait, Value, + ConnectionTrait, DatabaseBackend, DatabaseTransaction, DbErr, EntityTrait, Statement, + TransactionTrait, Value, }; -use serde::{Deserialize, Serialize}; -use utoipa::ToSchema; - -use crate::{ - api::error::PhotonApiError, - common::typedefs::{account::Account, hash::Hash, serializable_pubkey::SerializablePubkey}, - dao::generated::state_trees, - ingester::{error::IngesterError, parser::state_update::LeafNullification}, - metric, -}; - -use super::{compute_parent_hash, get_node_direct_ancestors}; - -#[derive(Clone, Debug)] -pub struct LeafNode { - pub tree: SerializablePubkey, - pub leaf_index: u32, - pub hash: Hash, - pub seq: u32, -} - -impl LeafNode { - pub fn node_index(&self, tree_height: u32) -> i64 { - leaf_index_to_node_index(self.leaf_index, tree_height) - } -} - -fn leaf_index_to_node_index(leaf_index: u32, tree_height: u32) -> i64 { - 2_i64.pow(tree_height - 1) + leaf_index as i64 -} - -impl From for LeafNode { - fn from(account: Account) -> Self { - Self { - tree: account.tree, - leaf_index: account.leaf_index.0 as u32, - hash: account.hash, - seq: account.seq.0 as u32, - } - } -} - -impl From for LeafNode { - fn from(leaf_nullification: LeafNullification) -> Self { - Self { - tree: SerializablePubkey::from(leaf_nullification.tree), - leaf_index: leaf_nullification.leaf_index as u32, - hash: Hash::from(ZERO_BYTES[0]), - seq: leaf_nullification.seq as u32, - } - } -} - -pub async fn persist_leaf_nodes( - txn: &DatabaseTransaction, - mut leaf_nodes: Vec, - tree_height: u32, -) -> Result<(), IngesterError> { - if leaf_nodes.is_empty() { - return Ok(()); - } - - leaf_nodes.sort_by_key(|node| node.seq); - - let leaf_locations = leaf_nodes - .iter() - .map(|node| (node.tree.to_bytes_vec(), node.node_index(tree_height))) - .collect::>(); - - let node_locations_to_models = get_proof_nodes(txn, leaf_locations, true).await?; - let mut node_locations_to_hashes_and_seq = node_locations_to_models - .iter() - .map(|(key, value)| (key.clone(), (value.hash.clone(), value.seq))) - .collect::>(); - - let mut models_to_updates = HashMap::new(); - - for leaf_node in leaf_nodes.clone() { - let node_idx = leaf_node.node_index(tree_height); - let tree = leaf_node.tree; - let key = (tree.to_bytes_vec(), node_idx); - - let model = state_trees::ActiveModel { - tree: Set(tree.to_bytes_vec()), - level: Set(0), - node_idx: Set(node_idx), - hash: Set(leaf_node.hash.to_vec()), - leaf_idx: Set(Some(leaf_node.leaf_index as i64)), - seq: Set(leaf_node.seq as i64), - }; - - let existing_seq = node_locations_to_hashes_and_seq - .get(&key) - .map(|x| x.1) - .unwrap_or(0); - - if leaf_node.seq >= existing_seq as u32 { - models_to_updates.insert(key.clone(), model); - node_locations_to_hashes_and_seq - .insert(key, (leaf_node.hash.to_vec(), leaf_node.seq as i64)); - } - } - - let all_ancestors = leaf_nodes - .iter() - .flat_map(|leaf_node| { - get_node_direct_ancestors(leaf_node.node_index(tree_height)) - .iter() - .enumerate() - .map(move |(i, &idx)| (leaf_node.tree.to_bytes_vec(), idx, i)) - .collect::, i64, usize)>>() - }) - .sorted_by(|a, b| { - // Need to sort elements before dedup - a.0.cmp(&b.0) // Sort by tree - .then_with(|| a.1.cmp(&b.1)) // Then by node index - }) // Need to sort elements before dedup - .dedup() - .collect::, i64, usize)>>(); - - for (tree, node_index, child_level) in all_ancestors.into_iter().rev() { - let (left_child_hash, left_child_seq) = node_locations_to_hashes_and_seq - .get(&(tree.clone(), node_index * 2)) - .cloned() - .unwrap_or((ZERO_BYTES[child_level].to_vec(), 0)); - - let (right_child_hash, right_child_seq) = node_locations_to_hashes_and_seq - .get(&(tree.clone(), node_index * 2 + 1)) - .cloned() - .unwrap_or((ZERO_BYTES[child_level].to_vec(), 0)); - - let level = child_level + 1; - - let hash = compute_parent_hash(left_child_hash.clone(), right_child_hash.clone())?; - - let seq = max(left_child_seq, right_child_seq) as i64; - let model = state_trees::ActiveModel { - tree: Set(tree.clone()), - level: Set(level as i64), - node_idx: Set(node_index), - hash: Set(hash.clone()), - leaf_idx: Set(None), - seq: Set(seq), - }; - - let key = (tree.clone(), node_index); - models_to_updates.insert(key.clone(), model); - node_locations_to_hashes_and_seq.insert(key, (hash, seq)); - } - - // We first build the query and then execute it because SeaORM has a bug where it always throws - // an error if we do not insert a record in an insert statement. However, in this case, it's - // expected not to insert anything if the key already exists. - let mut query = state_trees::Entity::insert_many(models_to_updates.into_values()) - .on_conflict( - OnConflict::columns([state_trees::Column::Tree, state_trees::Column::NodeIdx]) - .update_columns([state_trees::Column::Hash, state_trees::Column::Seq]) - .to_owned(), - ) - .build(txn.get_database_backend()); - query.sql = format!("{} WHERE excluded.seq >= state_trees.seq", query.sql); - txn.execute(query).await.map_err(|e| { - IngesterError::DatabaseError(format!("Failed to persist path nodes: {}", e)) - })?; - Ok(()) -} - -#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, ToSchema)] -#[serde(deny_unknown_fields, rename_all = "camelCase")] -#[allow(non_snake_case)] -pub struct MerkleProofWithContext { - pub proof: Vec, - pub root: Hash, - pub leafIndex: u32, - pub hash: Hash, - pub merkleTree: SerializablePubkey, - pub rootSeq: u64, -} - -pub async fn get_multiple_compressed_leaf_proofs( - txn: &DatabaseTransaction, - hashes: Vec, -) -> Result, PhotonApiError> { - if hashes.is_empty() { - return Err(PhotonApiError::ValidationError( - "No hashes provided".to_string(), - )); - } - let leaf_nodes_with_node_index = state_trees::Entity::find() - .filter( - state_trees::Column::Hash - .is_in(hashes.iter().map(|x| x.to_vec()).collect::>>()) - .and(state_trees::Column::Level.eq(0)), - ) - .all(txn) - .await? - .into_iter() - .map(|x| { - Ok(( - LeafNode { - tree: SerializablePubkey::try_from(x.tree.clone())?, - leaf_index: x.leaf_idx.ok_or(PhotonApiError::RecordNotFound( - "Leaf index not found".to_string(), - ))? as u32, - hash: Hash::try_from(x.hash.clone())?, - seq: 0, // HACK: We don't need seq for now - }, - x.node_idx, - )) - }) - .collect::, PhotonApiError>>()?; - - if leaf_nodes_with_node_index.len() != hashes.len() { - return Err(PhotonApiError::RecordNotFound(format!( - "Leaf nodes not found for hashes. Got {} hashes. Expected {}.", - leaf_nodes_with_node_index.len(), - hashes.len() - ))); - } - let hash_to_leaf_node_with_node_index = leaf_nodes_with_node_index - .iter() - .map(|(leaf_node, node_index)| (leaf_node.hash.clone(), (leaf_node.clone(), *node_index))) - .collect::>(); - - let leaf_nodes_with_node_index = hashes - .into_iter() - .map(|hash| { - hash_to_leaf_node_with_node_index - .get(&hash) - .ok_or(PhotonApiError::RecordNotFound(format!( - "Leaf node not found for hash: {}", - hash - ))) - .cloned() - }) - .collect::, PhotonApiError>>()?; - - get_multiple_compressed_leaf_proofs_from_full_leaf_info(txn, leaf_nodes_with_node_index).await -} +use solana_program::pubkey::Pubkey; -pub async fn get_multiple_compressed_leaf_proofs_from_full_leaf_info( - txn: &DatabaseTransaction, - leaf_nodes_with_node_index: Vec<(LeafNode, i64)>, -) -> Result, PhotonApiError> { - let include_leafs = false; - let leaf_locations_to_required_nodes = leaf_nodes_with_node_index - .iter() - .map(|(leaf_node, node_index)| { - let required_node_indices = get_proof_path(*node_index, include_leafs); - ( - (leaf_node.tree.to_bytes_vec(), *node_index), - (required_node_indices), - ) - }) - .collect::, i64), Vec>>(); - - let node_to_model = get_proof_nodes( - txn, - leaf_nodes_with_node_index - .iter() - .map(|(node, node_index)| (node.tree.to_bytes_vec(), *node_index)) - .collect::, i64)>>(), - include_leafs, - ) - .await?; - - let proofs: Result, PhotonApiError> = leaf_nodes_with_node_index - .iter() - .map(|(leaf_node, node_index)| { - let required_node_indices = leaf_locations_to_required_nodes - .get(&(leaf_node.tree.to_bytes_vec(), *node_index)) - .ok_or(PhotonApiError::RecordNotFound(format!( - "Leaf node not found for tree and index: {} {}", - leaf_node.tree, node_index - )))?; - - let mut proof = required_node_indices - .iter() - .enumerate() - .map(|(level, idx)| { - node_to_model - .get(&(leaf_node.tree.to_bytes_vec(), *idx)) - .map(|node| { - Hash::try_from(node.hash.clone()).map_err(|_| { - PhotonApiError::UnexpectedError( - "Failed to convert hash to bytes".to_string(), - ) - }) - }) - .unwrap_or(Ok(Hash::from(ZERO_BYTES[level]))) - }) - .collect::, PhotonApiError>>()?; - - let root_seq = node_to_model - .get(&(leaf_node.tree.to_bytes_vec(), 1)) - .ok_or({ - PhotonApiError::UnexpectedError(format!( - "Missing root index for tree {}", - leaf_node.tree - )) - })? - .seq as u64; - - let root = proof.pop().ok_or(PhotonApiError::UnexpectedError( - "Root node not found in proof".to_string(), - ))?; - - Ok(MerkleProofWithContext { - proof, - root, - leafIndex: leaf_node.leaf_index, - hash: leaf_node.hash.clone(), - merkleTree: leaf_node.tree, - rootSeq: root_seq, - }) - }) - .collect(); - let proofs = proofs?; - - for proof in proofs.iter() { - validate_proof(proof)?; - } - - Ok(proofs) -} - -pub fn validate_proof(proof: &MerkleProofWithContext) -> Result<(), PhotonApiError> { - let leaf_index = proof.leafIndex; - let tree_height = (proof.proof.len() + 1) as u32; - let node_index = leaf_index_to_node_index(leaf_index, tree_height); - let mut computed_root = proof.hash.to_vec(); - - for (idx, node) in proof.proof.iter().enumerate() { - let is_left = (node_index >> idx) & 1 == 0; - computed_root = compute_parent_hash( - if is_left { - computed_root.clone() - } else { - node.to_vec() - }, - if is_left { - node.to_vec() - } else { - computed_root.clone() - }, - ) - .map_err(|e| { - PhotonApiError::UnexpectedError(format!( - "Failed to compute parent hash for proof: {}", - e - )) - })?; - } - - if computed_root != proof.root.to_vec() { - metric! { - statsd_count!("invalid_proof", 1); - } - return Err(PhotonApiError::UnexpectedError(format!( - "Computed root does not match the provided root. Proof; {:?}", - proof - ))); - } - - Ok(()) -} +use crate::api::error::PhotonApiError; +use crate::dao::generated::state_trees; +use crate::ingester::parser::tree_info::TreeInfo; +use crate::ingester::persist::leaf_node::STATE_TREE_HEIGHT_V2; +use crate::ingester::persist::persisted_indexed_merkle_tree::format_bytes; pub fn get_proof_path(index: i64, include_leaf: bool) -> Vec { let mut indexes = vec![]; @@ -391,10 +31,26 @@ pub fn get_proof_path(index: i64, include_leaf: bool) -> Vec { indexes } +pub fn get_level_by_node_index(index: i64, tree_height: u32) -> i64 { + if index >= 2_i64.pow(tree_height - 2) { + // If it's a leaf index (large number) + return 0; + } + let mut level = 0; + let mut idx = index; + while idx > 1 { + idx >>= 1; + level += 1; + } + level +} + pub async fn get_proof_nodes( txn_or_conn: &T, leaf_nodes_locations: Vec<(Vec, i64)>, include_leafs: bool, + include_empty_leaves: bool, + tree_height: Option, ) -> Result, i64), state_trees::Model>, DbErr> where T: ConnectionTrait + TransactionTrait, @@ -424,6 +80,7 @@ where params.push(Value::from(node_idx)); placeholders.push(format!("(${}, ${})", param_index + 1, param_index + 2)); } + let placeholder_str = placeholders.join(", "); let sql = format!( "WITH vals(tree, node_idx) AS (VALUES {}) SELECT st.* FROM state_trees st JOIN vals v ON st.tree = v.tree AND st.node_idx = v.node_idx", @@ -439,178 +96,682 @@ where .all(txn_or_conn) .await?; - Ok(proof_nodes + let mut result = proof_nodes .iter() .map(|node| ((node.tree.clone(), node.node_idx), node.clone())) - .collect::, i64), state_trees::Model>>()) + .collect::, i64), state_trees::Model>>(); + + if include_empty_leaves { + leaf_nodes_locations.iter().for_each(|(tree, index)| { + result.entry((tree.clone(), *index)).or_insert_with(|| { + let tree_pubkey = Pubkey::try_from(tree.clone()).unwrap(); + let tree_height = if let Some(height) = tree_height { + height + } else { + let height = TreeInfo::height(&tree_pubkey.to_string()); + height.unwrap_or(STATE_TREE_HEIGHT_V2) + }; + let tree_height = tree_height + 1; + let model = state_trees::Model { + tree: tree.clone(), + level: get_level_by_node_index(*index, tree_height), + node_idx: *index, + hash: ZERO_BYTES[get_level_by_node_index(*index, tree_height) as usize] + .to_vec(), + leaf_idx: None, + seq: None, + }; + model + }); + }); + } + + Ok(result) +} + +pub fn validate_leaf_index(leaf_index: u32, tree_height: u32) -> bool { + let max_leaves = 2_u64.pow(tree_height - 1); + (leaf_index as u64) < max_leaves } -pub const MAX_HEIGHT: usize = 32; +pub fn get_merkle_proof_length(tree_height: u32) -> usize { + (tree_height - 1) as usize +} + +pub async fn get_subtrees( + txn: &DatabaseTransaction, + tree: Vec, + tree_height: usize, +) -> Result, PhotonApiError> { + let mut subtrees = vec![[0u8; 32]; tree_height]; + + let query = match txn.get_database_backend() { + DatabaseBackend::Postgres => Statement::from_string( + DatabaseBackend::Postgres, + format!( + "WITH ranked_nodes AS ( + SELECT level, node_idx, hash, + ROW_NUMBER() OVER (PARTITION BY level ORDER BY node_idx DESC) as rank, + COUNT(*) OVER (PARTITION BY level) as count + FROM state_trees + WHERE tree = {} + ) + SELECT level, hash + FROM ranked_nodes + WHERE (count % 2 = 0 AND rank = 2) OR (count % 2 = 1 AND rank = 1)", + format_bytes(tree.clone(), DatabaseBackend::Postgres) + ), + ), + DatabaseBackend::Sqlite => Statement::from_string( + DatabaseBackend::Sqlite, + format!( + "SELECT t1.level, t1.hash + FROM state_trees t1 + JOIN ( + SELECT level, + MAX(node_idx) as max_idx, + COUNT(*) as count + FROM state_trees + WHERE tree = {} + GROUP BY level + ) t2 ON t1.level = t2.level + WHERE t1.tree = {} AND + ((t2.count % 2 = 0 AND t1.node_idx = t2.max_idx - 1) OR + (t2.count % 2 = 1 AND t1.node_idx = t2.max_idx))", + format_bytes(tree.clone(), DatabaseBackend::Sqlite), + format_bytes(tree.clone(), DatabaseBackend::Sqlite) + ), + ), + _ => { + return Err(PhotonApiError::UnexpectedError( + "Unsupported database backend".to_string(), + )) + } + }; + + let results = txn + .query_all(query) + .await + .map_err(|e| PhotonApiError::UnexpectedError(format!("Failed to query nodes: {}", e)))?; + + if results.is_empty() { + return Ok(EMPTY_SUBTREES.to_vec()); + } + + for row in results { + let level: i64 = row.try_get("", "level").map_err(|e| { + PhotonApiError::UnexpectedError(format!("Failed to extract level: {}", e)) + })?; + + let hash: Vec = row.try_get("", "hash").map_err(|e| { + PhotonApiError::UnexpectedError(format!("Failed to extract hash: {}", e)) + })?; + + if level >= 0 && level < tree_height as i64 && hash.len() == 32 { + let mut hash_array = [0u8; 32]; + hash_array.copy_from_slice(&hash); + subtrees[level as usize] = hash_array; + } + } + + Ok(subtrees) +} + +pub const MAX_HEIGHT: usize = 40; type ZeroBytes = [[u8; 32]; MAX_HEIGHT + 1]; pub const ZERO_BYTES: ZeroBytes = [ [ - 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, - 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, + ], + [ + 32, 152, 245, 251, 158, 35, 158, 171, 60, 234, 195, 242, 123, 129, 228, 129, 220, 49, 36, + 213, 95, 254, 213, 35, 168, 57, 238, 132, 70, 182, 72, 100, ], [ - 32u8, 152u8, 245u8, 251u8, 158u8, 35u8, 158u8, 171u8, 60u8, 234u8, 195u8, 242u8, 123u8, - 129u8, 228u8, 129u8, 220u8, 49u8, 36u8, 213u8, 95u8, 254u8, 213u8, 35u8, 168u8, 57u8, - 238u8, 132u8, 70u8, 182u8, 72u8, 100u8, + 16, 105, 103, 61, 205, 177, 34, 99, 223, 48, 26, 111, 245, 132, 167, 236, 38, 26, 68, 203, + 157, 198, 141, 240, 103, 164, 119, 68, 96, 177, 241, 225, ], [ - 16u8, 105u8, 103u8, 61u8, 205u8, 177u8, 34u8, 99u8, 223u8, 48u8, 26u8, 111u8, 245u8, 132u8, - 167u8, 236u8, 38u8, 26u8, 68u8, 203u8, 157u8, 198u8, 141u8, 240u8, 103u8, 164u8, 119u8, - 68u8, 96u8, 177u8, 241u8, 225u8, + 24, 244, 51, 49, 83, 126, 226, 175, 46, 61, 117, 141, 80, 247, 33, 6, 70, 124, 110, 234, + 80, 55, 29, 213, 40, 213, 126, 178, 184, 86, 210, 56, ], [ - 24u8, 244u8, 51u8, 49u8, 83u8, 126u8, 226u8, 175u8, 46u8, 61u8, 117u8, 141u8, 80u8, 247u8, - 33u8, 6u8, 70u8, 124u8, 110u8, 234u8, 80u8, 55u8, 29u8, 213u8, 40u8, 213u8, 126u8, 178u8, - 184u8, 86u8, 210u8, 56u8, + 7, 249, 216, 55, 203, 23, 176, 211, 99, 32, 255, 233, 59, 165, 35, 69, 241, 183, 40, 87, + 26, 86, 130, 101, 202, 172, 151, 85, 157, 188, 149, 42, ], [ - 7u8, 249u8, 216u8, 55u8, 203u8, 23u8, 176u8, 211u8, 99u8, 32u8, 255u8, 233u8, 59u8, 165u8, - 35u8, 69u8, 241u8, 183u8, 40u8, 87u8, 26u8, 86u8, 130u8, 101u8, 202u8, 172u8, 151u8, 85u8, - 157u8, 188u8, 149u8, 42u8, + 43, 148, 207, 94, 135, 70, 179, 245, 201, 99, 31, 76, 93, 243, 41, 7, 166, 153, 197, 140, + 148, 178, 173, 77, 123, 92, 236, 22, 57, 24, 63, 85, ], [ - 43u8, 148u8, 207u8, 94u8, 135u8, 70u8, 179u8, 245u8, 201u8, 99u8, 31u8, 76u8, 93u8, 243u8, - 41u8, 7u8, 166u8, 153u8, 197u8, 140u8, 148u8, 178u8, 173u8, 77u8, 123u8, 92u8, 236u8, 22u8, - 57u8, 24u8, 63u8, 85u8, + 45, 238, 147, 197, 166, 102, 69, 150, 70, 234, 125, 34, 204, 169, 225, 188, 254, 215, 30, + 105, 81, 185, 83, 97, 29, 17, 221, 163, 46, 160, 157, 120, ], [ - 45u8, 238u8, 147u8, 197u8, 166u8, 102u8, 69u8, 150u8, 70u8, 234u8, 125u8, 34u8, 204u8, - 169u8, 225u8, 188u8, 254u8, 215u8, 30u8, 105u8, 81u8, 185u8, 83u8, 97u8, 29u8, 17u8, 221u8, - 163u8, 46u8, 160u8, 157u8, 120u8, + 7, 130, 149, 229, 162, 43, 132, 233, 130, 207, 96, 30, 182, 57, 89, 123, 139, 5, 21, 168, + 140, 181, 172, 127, 168, 164, 170, 190, 60, 135, 52, 157, ], [ - 7u8, 130u8, 149u8, 229u8, 162u8, 43u8, 132u8, 233u8, 130u8, 207u8, 96u8, 30u8, 182u8, 57u8, - 89u8, 123u8, 139u8, 5u8, 21u8, 168u8, 140u8, 181u8, 172u8, 127u8, 168u8, 164u8, 170u8, - 190u8, 60u8, 135u8, 52u8, 157u8, + 47, 165, 229, 241, 143, 96, 39, 166, 80, 27, 236, 134, 69, 100, 71, 42, 97, 107, 46, 39, + 74, 65, 33, 26, 68, 76, 190, 58, 153, 243, 204, 97, ], [ - 47u8, 165u8, 229u8, 241u8, 143u8, 96u8, 39u8, 166u8, 80u8, 27u8, 236u8, 134u8, 69u8, 100u8, - 71u8, 42u8, 97u8, 107u8, 46u8, 39u8, 74u8, 65u8, 33u8, 26u8, 68u8, 76u8, 190u8, 58u8, - 153u8, 243u8, 204u8, 97u8, + 14, 136, 67, 118, 208, 216, 253, 33, 236, 183, 128, 56, 158, 148, 31, 102, 228, 94, 122, + 204, 227, 226, 40, 171, 62, 33, 86, 166, 20, 252, 215, 71, ], [ - 14u8, 136u8, 67u8, 118u8, 208u8, 216u8, 253u8, 33u8, 236u8, 183u8, 128u8, 56u8, 158u8, - 148u8, 31u8, 102u8, 228u8, 94u8, 122u8, 204u8, 227u8, 226u8, 40u8, 171u8, 62u8, 33u8, 86u8, - 166u8, 20u8, 252u8, 215u8, 71u8, + 27, 114, 1, 218, 114, 73, 79, 30, 40, 113, 122, 209, 165, 46, 180, 105, 249, 88, 146, 249, + 87, 113, 53, 51, 222, 97, 117, 229, 218, 25, 10, 242, ], [ - 27u8, 114u8, 1u8, 218u8, 114u8, 73u8, 79u8, 30u8, 40u8, 113u8, 122u8, 209u8, 165u8, 46u8, - 180u8, 105u8, 249u8, 88u8, 146u8, 249u8, 87u8, 113u8, 53u8, 51u8, 222u8, 97u8, 117u8, - 229u8, 218u8, 25u8, 10u8, 242u8, + 31, 141, 136, 34, 114, 94, 54, 56, 82, 0, 192, 178, 1, 36, 152, 25, 166, 230, 225, 228, + 101, 8, 8, 181, 190, 188, 107, 250, 206, 125, 118, 54, ], [ - 31u8, 141u8, 136u8, 34u8, 114u8, 94u8, 54u8, 56u8, 82u8, 0u8, 192u8, 178u8, 1u8, 36u8, - 152u8, 25u8, 166u8, 230u8, 225u8, 228u8, 101u8, 8u8, 8u8, 181u8, 190u8, 188u8, 107u8, - 250u8, 206u8, 125u8, 118u8, 54u8, + 44, 93, 130, 246, 108, 145, 75, 175, 185, 112, 21, 137, 186, 140, 252, 251, 97, 98, 176, + 161, 42, 207, 136, 168, 208, 135, 154, 4, 113, 181, 248, 90, ], [ - 44u8, 93u8, 130u8, 246u8, 108u8, 145u8, 75u8, 175u8, 185u8, 112u8, 21u8, 137u8, 186u8, - 140u8, 252u8, 251u8, 97u8, 98u8, 176u8, 161u8, 42u8, 207u8, 136u8, 168u8, 208u8, 135u8, - 154u8, 4u8, 113u8, 181u8, 248u8, 90u8, + 20, 197, 65, 72, 160, 148, 11, 184, 32, 149, 127, 90, 223, 63, 161, 19, 78, 245, 196, 170, + 161, 19, 244, 100, 100, 88, 242, 112, 224, 191, 191, 208, ], [ - 20u8, 197u8, 65u8, 72u8, 160u8, 148u8, 11u8, 184u8, 32u8, 149u8, 127u8, 90u8, 223u8, 63u8, - 161u8, 19u8, 78u8, 245u8, 196u8, 170u8, 161u8, 19u8, 244u8, 100u8, 100u8, 88u8, 242u8, - 112u8, 224u8, 191u8, 191u8, 208u8, + 25, 13, 51, 177, 47, 152, 111, 150, 30, 16, 192, 238, 68, 216, 185, 175, 17, 190, 37, 88, + 140, 173, 137, 212, 22, 17, 142, 75, 244, 235, 232, 12, ], [ - 25u8, 13u8, 51u8, 177u8, 47u8, 152u8, 111u8, 150u8, 30u8, 16u8, 192u8, 238u8, 68u8, 216u8, - 185u8, 175u8, 17u8, 190u8, 37u8, 88u8, 140u8, 173u8, 137u8, 212u8, 22u8, 17u8, 142u8, 75u8, - 244u8, 235u8, 232u8, 12u8, + 34, 249, 138, 169, 206, 112, 65, 82, 172, 23, 53, 73, 20, 173, 115, 237, 17, 103, 174, 101, + 150, 175, 81, 10, 165, 179, 100, 147, 37, 224, 108, 146, ], [ - 34u8, 249u8, 138u8, 169u8, 206u8, 112u8, 65u8, 82u8, 172u8, 23u8, 53u8, 73u8, 20u8, 173u8, - 115u8, 237u8, 17u8, 103u8, 174u8, 101u8, 150u8, 175u8, 81u8, 10u8, 165u8, 179u8, 100u8, - 147u8, 37u8, 224u8, 108u8, 146u8, + 42, 124, 124, 155, 108, 229, 136, 11, 159, 111, 34, 141, 114, 191, 106, 87, 90, 82, 111, + 41, 198, 110, 204, 238, 248, 183, 83, 211, 139, 186, 115, 35, ], [ - 42u8, 124u8, 124u8, 155u8, 108u8, 229u8, 136u8, 11u8, 159u8, 111u8, 34u8, 141u8, 114u8, - 191u8, 106u8, 87u8, 90u8, 82u8, 111u8, 41u8, 198u8, 110u8, 204u8, 238u8, 248u8, 183u8, - 83u8, 211u8, 139u8, 186u8, 115u8, 35u8, + 46, 129, 134, 229, 88, 105, 142, 193, 198, 122, 249, 193, 77, 70, 63, 252, 71, 0, 67, 201, + 194, 152, 139, 149, 77, 117, 221, 100, 63, 54, 185, 146, ], [ - 46u8, 129u8, 134u8, 229u8, 88u8, 105u8, 142u8, 193u8, 198u8, 122u8, 249u8, 193u8, 77u8, - 70u8, 63u8, 252u8, 71u8, 0u8, 67u8, 201u8, 194u8, 152u8, 139u8, 149u8, 77u8, 117u8, 221u8, - 100u8, 63u8, 54u8, 185u8, 146u8, + 15, 87, 197, 87, 30, 154, 78, 171, 73, 226, 200, 207, 5, 13, 174, 148, 138, 239, 110, 173, + 100, 115, 146, 39, 53, 70, 36, 157, 28, 31, 241, 15, ], [ - 15u8, 87u8, 197u8, 87u8, 30u8, 154u8, 78u8, 171u8, 73u8, 226u8, 200u8, 207u8, 5u8, 13u8, - 174u8, 148u8, 138u8, 239u8, 110u8, 173u8, 100u8, 115u8, 146u8, 39u8, 53u8, 70u8, 36u8, - 157u8, 28u8, 31u8, 241u8, 15u8, + 24, 48, 238, 103, 181, 251, 85, 74, 213, 246, 61, 67, 136, 128, 14, 28, 254, 120, 227, 16, + 105, 125, 70, 228, 60, 156, 227, 97, 52, 247, 44, 202, ], [ - 24u8, 48u8, 238u8, 103u8, 181u8, 251u8, 85u8, 74u8, 213u8, 246u8, 61u8, 67u8, 136u8, 128u8, - 14u8, 28u8, 254u8, 120u8, 227u8, 16u8, 105u8, 125u8, 70u8, 228u8, 60u8, 156u8, 227u8, 97u8, - 52u8, 247u8, 44u8, 202u8, + 33, 52, 231, 106, 197, 210, 26, 171, 24, 108, 43, 225, 221, 143, 132, 238, 136, 10, 30, 70, + 234, 247, 18, 249, 211, 113, 182, 223, 34, 25, 31, 62, ], [ - 33u8, 52u8, 231u8, 106u8, 197u8, 210u8, 26u8, 171u8, 24u8, 108u8, 43u8, 225u8, 221u8, - 143u8, 132u8, 238u8, 136u8, 10u8, 30u8, 70u8, 234u8, 247u8, 18u8, 249u8, 211u8, 113u8, - 182u8, 223u8, 34u8, 25u8, 31u8, 62u8, + 25, 223, 144, 236, 132, 78, 188, 79, 254, 235, 216, 102, 243, 56, 89, 176, 192, 81, 216, + 201, 88, 238, 58, 168, 143, 143, 141, 243, 219, 145, 165, 177, ], [ - 25u8, 223u8, 144u8, 236u8, 132u8, 78u8, 188u8, 79u8, 254u8, 235u8, 216u8, 102u8, 243u8, - 56u8, 89u8, 176u8, 192u8, 81u8, 216u8, 201u8, 88u8, 238u8, 58u8, 168u8, 143u8, 143u8, - 141u8, 243u8, 219u8, 145u8, 165u8, 177u8, + 24, 204, 162, 166, 107, 92, 7, 135, 152, 30, 105, 174, 253, 132, 133, 45, 116, 175, 14, + 147, 239, 73, 18, 180, 100, 140, 5, 247, 34, 239, 229, 43, ], [ - 24u8, 204u8, 162u8, 166u8, 107u8, 92u8, 7u8, 135u8, 152u8, 30u8, 105u8, 174u8, 253u8, - 132u8, 133u8, 45u8, 116u8, 175u8, 14u8, 147u8, 239u8, 73u8, 18u8, 180u8, 100u8, 140u8, 5u8, - 247u8, 34u8, 239u8, 229u8, 43u8, + 35, 136, 144, 148, 21, 35, 13, 27, 77, 19, 4, 210, 213, 79, 71, 58, 98, 131, 56, 242, 239, + 173, 131, 250, 223, 5, 100, 69, 73, 210, 83, 141, ], [ - 35u8, 136u8, 144u8, 148u8, 21u8, 35u8, 13u8, 27u8, 77u8, 19u8, 4u8, 210u8, 213u8, 79u8, - 71u8, 58u8, 98u8, 131u8, 56u8, 242u8, 239u8, 173u8, 131u8, 250u8, 223u8, 5u8, 100u8, 69u8, - 73u8, 210u8, 83u8, 141u8, + 39, 23, 31, 180, 169, 123, 108, 192, 233, 232, 245, 67, 181, 41, 77, 232, 102, 162, 175, + 44, 156, 141, 11, 29, 150, 230, 115, 228, 82, 158, 213, 64, ], [ - 39u8, 23u8, 31u8, 180u8, 169u8, 123u8, 108u8, 192u8, 233u8, 232u8, 245u8, 67u8, 181u8, - 41u8, 77u8, 232u8, 102u8, 162u8, 175u8, 44u8, 156u8, 141u8, 11u8, 29u8, 150u8, 230u8, - 115u8, 228u8, 82u8, 158u8, 213u8, 64u8, + 47, 246, 101, 5, 64, 246, 41, 253, 87, 17, 160, 188, 116, 252, 13, 40, 220, 178, 48, 185, + 57, 37, 131, 229, 248, 213, 150, 150, 221, 230, 174, 33, ], [ - 47u8, 246u8, 101u8, 5u8, 64u8, 246u8, 41u8, 253u8, 87u8, 17u8, 160u8, 188u8, 116u8, 252u8, - 13u8, 40u8, 220u8, 178u8, 48u8, 185u8, 57u8, 37u8, 131u8, 229u8, 248u8, 213u8, 150u8, - 150u8, 221u8, 230u8, 174u8, 33u8, + 18, 12, 88, 241, 67, 212, 145, 233, 89, 2, 247, 245, 39, 119, 120, 162, 224, 173, 81, 104, + 246, 173, 215, 86, 105, 147, 38, 48, 206, 97, 21, 24, ], [ - 18u8, 12u8, 88u8, 241u8, 67u8, 212u8, 145u8, 233u8, 89u8, 2u8, 247u8, 245u8, 39u8, 119u8, - 120u8, 162u8, 224u8, 173u8, 81u8, 104u8, 246u8, 173u8, 215u8, 86u8, 105u8, 147u8, 38u8, - 48u8, 206u8, 97u8, 21u8, 24u8, + 31, 33, 254, 183, 13, 63, 33, 176, 123, 248, 83, 213, 229, 219, 3, 7, 30, 196, 149, 160, + 165, 101, 162, 29, 162, 214, 101, 210, 121, 72, 55, 149, ], [ - 31u8, 33u8, 254u8, 183u8, 13u8, 63u8, 33u8, 176u8, 123u8, 248u8, 83u8, 213u8, 229u8, 219u8, - 3u8, 7u8, 30u8, 196u8, 149u8, 160u8, 165u8, 101u8, 162u8, 29u8, 162u8, 214u8, 101u8, 210u8, - 121u8, 72u8, 55u8, 149u8, + 36, 190, 144, 95, 167, 19, 53, 225, 76, 99, 140, 192, 246, 106, 134, 35, 168, 38, 231, 104, + 6, 138, 158, 150, 139, 177, 161, 221, 225, 138, 114, 210, ], [ - 36u8, 190u8, 144u8, 95u8, 167u8, 19u8, 53u8, 225u8, 76u8, 99u8, 140u8, 192u8, 246u8, 106u8, - 134u8, 35u8, 168u8, 38u8, 231u8, 104u8, 6u8, 138u8, 158u8, 150u8, 139u8, 177u8, 161u8, - 221u8, 225u8, 138u8, 114u8, 210u8, + 15, 134, 102, 182, 46, 209, 116, 145, 197, 12, 234, 222, 173, 87, 212, 205, 89, 126, 243, + 130, 29, 101, 195, 40, 116, 76, 116, 229, 83, 218, 194, 109, ], [ - 15u8, 134u8, 102u8, 182u8, 46u8, 209u8, 116u8, 145u8, 197u8, 12u8, 234u8, 222u8, 173u8, - 87u8, 212u8, 205u8, 89u8, 126u8, 243u8, 130u8, 29u8, 101u8, 195u8, 40u8, 116u8, 76u8, - 116u8, 229u8, 83u8, 218u8, 194u8, 109u8, + 9, 24, 212, 107, 245, 45, 152, 176, 52, 65, 63, 74, 26, 28, 65, 89, 78, 122, 122, 63, 106, + 224, 140, 180, 61, 26, 42, 35, 14, 25, 89, 239, ], [ - 9u8, 24u8, 212u8, 107u8, 245u8, 45u8, 152u8, 176u8, 52u8, 65u8, 63u8, 74u8, 26u8, 28u8, - 65u8, 89u8, 78u8, 122u8, 122u8, 63u8, 106u8, 224u8, 140u8, 180u8, 61u8, 26u8, 42u8, 35u8, - 14u8, 25u8, 89u8, 239u8, + 27, 190, 176, 27, 76, 71, 158, 205, 231, 105, 23, 100, 94, 64, 77, 250, 46, 38, 249, 13, + 10, 252, 90, 101, 18, 133, 19, 173, 55, 92, 95, 242, ], [ - 27u8, 190u8, 176u8, 27u8, 76u8, 71u8, 158u8, 205u8, 231u8, 105u8, 23u8, 100u8, 94u8, 64u8, - 77u8, 250u8, 46u8, 38u8, 249u8, 13u8, 10u8, 252u8, 90u8, 101u8, 18u8, 133u8, 19u8, 173u8, - 55u8, 92u8, 95u8, 242u8, + 47, 104, 161, 197, 142, 37, 126, 66, 161, 122, 108, 97, 223, 245, 85, 30, 213, 96, 185, + 146, 42, 177, 25, 213, 172, 142, 24, 76, 151, 52, 234, 217, ], [ - 47u8, 104u8, 161u8, 197u8, 142u8, 37u8, 126u8, 66u8, 161u8, 122u8, 108u8, 97u8, 223u8, - 245u8, 85u8, 30u8, 213u8, 96u8, 185u8, 146u8, 42u8, 177u8, 25u8, 213u8, 172u8, 142u8, 24u8, - 76u8, 151u8, 52u8, 234u8, 217u8, + 17, 2, 210, 248, 219, 5, 228, 175, 72, 66, 232, 173, 61, 133, 237, 69, 235, 40, 68, 126, + 183, 33, 34, 53, 162, 40, 29, 90, 181, 216, 29, 17, + ], + [ + 42, 248, 193, 202, 245, 96, 221, 65, 249, 151, 160, 31, 248, 149, 178, 30, 13, 31, 237, + 183, 134, 231, 202, 210, 153, 1, 225, 35, 16, 99, 139, 220, + ], + [ + 1, 29, 146, 59, 193, 75, 90, 19, 151, 42, 199, 223, 230, 66, 11, 21, 176, 66, 92, 152, 186, + 128, 237, 175, 94, 2, 145, 180, 162, 101, 224, 165, + ], + [ + 34, 76, 204, 37, 152, 24, 34, 212, 197, 182, 252, 25, 159, 188, 116, 130, 132, 136, 116, + 28, 113, 81, 166, 21, 158, 207, 170, 183, 194, 168, 186, 201, + ], + [ + 39, 232, 57, 246, 245, 85, 254, 174, 130, 74, 180, 51, 227, 75, 28, 14, 100, 206, 92, 117, + 150, 45, 255, 193, 60, 104, 87, 29, 107, 74, 97, 14, + ], + [ + 42, 186, 32, 63, 189, 4, 191, 171, 200, 107, 77, 80, 214, 171, 173, 195, 194, 79, 55, 239, + 160, 14, 112, 14, 244, 209, 119, 100, 194, 204, 213, 124, + ], + [ + 17, 239, 244, 246, 12, 44, 220, 197, 72, 193, 224, 119, 12, 61, 100, 180, 156, 1, 227, 77, + 164, 175, 41, 207, 234, 87, 90, 25, 190, 250, 102, 156, + ], + [ + 19, 52, 250, 75, 85, 47, 0, 239, 64, 51, 97, 201, 53, 193, 171, 207, 137, 104, 81, 0, 60, + 64, 218, 169, 59, 176, 253, 10, 11, 185, 168, 129, ], ]; + +pub const EMPTY_SUBTREES: [[u8; 32]; 40] = [ + [ + 20, 60, 11, 236, 225, 135, 154, 131, 147, 160, 45, 8, 88, 53, 104, 12, 211, 241, 51, 6, + 246, 74, 149, 120, 67, 52, 190, 125, 51, 177, 204, 231, + ], + [ + 31, 158, 23, 142, 99, 175, 62, 243, 89, 151, 175, 72, 239, 185, 225, 179, 167, 48, 176, 66, + 195, 189, 200, 52, 107, 214, 155, 69, 247, 250, 226, 202, + ], + [ + 19, 53, 131, 105, 217, 57, 70, 146, 52, 4, 3, 167, 240, 151, 58, 0, 196, 32, 99, 84, 76, + 42, 51, 75, 135, 144, 252, 132, 243, 170, 126, 218, + ], + [ + 39, 179, 94, 18, 252, 185, 169, 255, 120, 165, 144, 16, 1, 32, 20, 232, 78, 83, 218, 104, + 223, 120, 246, 194, 144, 226, 215, 127, 21, 103, 157, 48, + ], + [ + 21, 116, 243, 6, 243, 192, 189, 219, 189, 237, 53, 145, 180, 121, 80, 146, 31, 120, 183, + 128, 238, 190, 81, 33, 151, 25, 207, 48, 152, 127, 141, 196, + ], + [ + 40, 105, 204, 182, 42, 188, 141, 71, 231, 97, 186, 195, 220, 120, 189, 248, 88, 37, 93, + 197, 211, 126, 116, 221, 215, 237, 30, 134, 31, 11, 213, 22, + ], + [ + 25, 103, 213, 65, 243, 229, 97, 252, 65, 135, 200, 39, 64, 150, 246, 78, 114, 102, 37, 172, + 240, 218, 98, 33, 73, 157, 252, 203, 242, 34, 134, 27, + ], + [ + 34, 113, 156, 10, 247, 149, 107, 116, 102, 2, 152, 241, 120, 255, 80, 226, 138, 209, 90, + 163, 184, 73, 215, 142, 246, 100, 3, 142, 254, 77, 7, 164, + ], + [ + 31, 114, 74, 136, 58, 155, 61, 88, 232, 183, 167, 48, 111, 128, 60, 101, 135, 98, 66, 200, + 17, 196, 170, 231, 105, 247, 238, 143, 21, 25, 114, 129, + ], + [ + 27, 154, 178, 97, 223, 248, 20, 167, 245, 141, 187, 0, 173, 79, 50, 250, 158, 98, 234, 188, + 22, 229, 82, 118, 175, 98, 3, 50, 90, 3, 187, 207, + ], + [ + 16, 104, 254, 45, 183, 113, 222, 104, 115, 158, 200, 25, 144, 146, 226, 57, 52, 46, 13, + 124, 111, 108, 231, 126, 80, 205, 224, 99, 58, 195, 45, 237, + ], + [ + 39, 43, 62, 71, 142, 70, 192, 22, 189, 89, 31, 84, 118, 66, 8, 113, 138, 167, 100, 95, 148, + 181, 61, 134, 137, 220, 116, 59, 136, 72, 25, 138, + ], + [ + 36, 228, 214, 34, 17, 186, 197, 10, 241, 7, 241, 206, 118, 189, 76, 189, 196, 10, 217, 252, + 247, 150, 24, 140, 214, 248, 118, 108, 213, 1, 92, 198, + ], + [ + 4, 189, 19, 92, 24, 21, 120, 8, 133, 122, 170, 157, 119, 3, 177, 200, 248, 222, 196, 156, + 78, 112, 49, 227, 141, 246, 238, 56, 191, 154, 99, 117, + ], + [ + 26, 118, 35, 14, 29, 120, 25, 237, 212, 51, 71, 54, 14, 205, 9, 90, 205, 145, 140, 117, + 110, 167, 151, 210, 248, 190, 35, 218, 59, 223, 197, 1, + ], + [ + 12, 241, 73, 63, 160, 180, 28, 33, 62, 197, 246, 157, 161, 66, 116, 24, 174, 135, 182, 73, + 76, 245, 139, 76, 248, 128, 41, 15, 235, 9, 229, 230, + ], + [ + 17, 202, 129, 100, 100, 182, 8, 91, 177, 159, 126, 19, 108, 195, 153, 221, 163, 174, 193, + 8, 194, 165, 155, 41, 108, 56, 241, 208, 15, 66, 145, 128, + ], + [ + 0, 83, 234, 224, 150, 177, 45, 230, 158, 255, 65, 243, 111, 114, 187, 108, 220, 0, 70, 229, + 107, 177, 41, 137, 213, 159, 42, 62, 247, 0, 216, 96, + ], + [ + 29, 202, 53, 98, 1, 67, 189, 200, 130, 89, 23, 23, 208, 215, 54, 165, 91, 206, 69, 99, 155, + 53, 217, 145, 133, 32, 27, 31, 44, 230, 239, 73, + ], + [ + 36, 69, 17, 148, 122, 1, 46, 80, 219, 3, 19, 243, 191, 116, 209, 28, 21, 11, 131, 79, 42, + 126, 213, 156, 155, 89, 41, 194, 4, 149, 5, 35, + ], + [ + 42, 106, 233, 49, 211, 12, 253, 42, 193, 117, 87, 179, 82, 196, 194, 131, 227, 9, 130, 126, + 180, 60, 44, 169, 161, 193, 163, 99, 219, 242, 165, 87, + ], + [ + 21, 207, 14, 234, 32, 22, 204, 3, 216, 58, 149, 23, 3, 106, 179, 151, 60, 246, 210, 119, + 26, 63, 89, 197, 100, 213, 222, 15, 174, 33, 53, 72, + ], + [ + 43, 68, 149, 146, 2, 237, 193, 0, 190, 230, 192, 129, 108, 193, 83, 16, 23, 71, 2, 156, 68, + 159, 242, 252, 82, 153, 72, 136, 169, 74, 122, 130, + ], + [ + 7, 102, 143, 18, 231, 221, 200, 47, 188, 129, 252, 174, 152, 169, 54, 90, 227, 216, 240, + 239, 38, 59, 233, 225, 172, 43, 75, 88, 217, 34, 87, 119, + ], + [ + 3, 128, 2, 111, 8, 97, 254, 204, 199, 175, 195, 74, 254, 96, 128, 111, 72, 106, 54, 2, 26, + 247, 200, 143, 164, 50, 57, 65, 136, 219, 8, 231, + ], + [ + 47, 14, 38, 144, 35, 169, 70, 232, 32, 157, 247, 141, 16, 125, 161, 188, 55, 73, 250, 121, + 65, 27, 149, 219, 127, 61, 63, 166, 98, 73, 236, 51, + ], + [ + 12, 192, 184, 61, 225, 169, 250, 219, 72, 31, 85, 251, 98, 186, 97, 83, 160, 211, 181, 216, + 86, 130, 15, 129, 178, 199, 135, 240, 163, 58, 240, 219, + ], + [ + 47, 61, 30, 232, 48, 100, 74, 6, 78, 160, 155, 36, 120, 233, 107, 9, 247, 81, 44, 217, 182, + 33, 236, 77, 211, 159, 240, 234, 4, 63, 159, 38, + ], + [ + 17, 219, 227, 3, 22, 187, 208, 6, 2, 186, 189, 158, 169, 243, 95, 194, 16, 217, 238, 184, + 130, 7, 227, 17, 45, 2, 161, 116, 220, 34, 249, 234, + ], + [ + 3, 19, 38, 52, 143, 142, 62, 92, 44, 102, 47, 19, 242, 24, 121, 153, 12, 240, 243, 101, 9, + 37, 202, 115, 148, 161, 16, 30, 155, 161, 144, 59, + ], + [ + 26, 79, 66, 22, 76, 127, 70, 53, 10, 130, 68, 184, 169, 180, 247, 196, 185, 112, 105, 124, + 242, 46, 162, 120, 17, 173, 217, 34, 66, 139, 8, 51, + ], + [ + 23, 171, 234, 98, 23, 43, 129, 46, 93, 139, 200, 35, 152, 181, 44, 141, 118, 244, 139, 189, + 136, 47, 181, 52, 19, 209, 86, 114, 197, 137, 164, 181, + ], + [ + 40, 23, 73, 77, 37, 176, 209, 183, 235, 236, 200, 180, 114, 31, 149, 225, 195, 224, 233, + 120, 192, 230, 186, 5, 198, 58, 194, 22, 103, 58, 32, 176, + ], + [ + 6, 145, 221, 211, 203, 200, 190, 59, 185, 28, 165, 245, 37, 127, 198, 35, 201, 18, 171, + 213, 144, 114, 59, 165, 3, 118, 71, 186, 237, 23, 29, 228, + ], + [ + 13, 119, 99, 90, 179, 59, 218, 184, 47, 201, 2, 28, 166, 172, 184, 174, 168, 204, 37, 99, + 144, 151, 166, 26, 25, 108, 118, 134, 170, 194, 209, 15, + ], + [ + 2, 24, 228, 167, 106, 255, 169, 124, 55, 163, 82, 236, 43, 16, 172, 112, 45, 212, 136, 119, + 58, 237, 174, 44, 25, 175, 19, 88, 207, 59, 68, 49, + ], + [ + 34, 146, 4, 113, 182, 175, 110, 154, 135, 193, 142, 67, 244, 138, 77, 4, 153, 64, 211, 240, + 160, 174, 247, 63, 246, 251, 180, 130, 80, 134, 69, 121, + ], + [ + 17, 17, 176, 127, 81, 172, 152, 12, 232, 113, 93, 220, 185, 138, 2, 151, 222, 104, 2, 11, + 3, 122, 90, 91, 101, 241, 227, 190, 253, 77, 105, 225, + ], + [ + 15, 123, 40, 209, 247, 124, 235, 50, 168, 21, 2, 25, 212, 49, 117, 220, 94, 93, 94, 163, + 81, 60, 188, 191, 133, 218, 172, 138, 102, 49, 254, 29, + ], + [ + 30, 209, 19, 178, 108, 200, 254, 107, 4, 17, 208, 112, 159, 65, 102, 227, 197, 226, 36, + 230, 109, 247, 80, 151, 118, 73, 113, 218, 240, 66, 200, 201, + ], +]; + +#[cfg(test)] +mod tests { + use super::*; + use crate::common::typedefs::hash::Hash; + use crate::common::typedefs::serializable_pubkey::SerializablePubkey; + use crate::ingester::persist::leaf_node::leaf_index_to_node_index; + use crate::ingester::persist::{compute_parent_hash, MerkleProofWithContext}; + + fn node_index_to_leaf_index(index: i64, tree_height: u32) -> i64 { + index - 2_i64.pow(get_level_by_node_index(index, tree_height) as u32) + } + + #[test] + fn test_get_level_by_node_index() { + // Tree of height 3 (root level is 0, max is 3) + // Node indices in a binary tree: [1, 2, 3, 4, 5, 6, 7] + assert_eq!(get_level_by_node_index(1, 33), 0); // Root node + assert_eq!(get_level_by_node_index(2, 33), 1); // Level 1, left child of root + assert_eq!(get_level_by_node_index(3, 33), 1); // Level 1, right child of root + assert_eq!(get_level_by_node_index(4, 33), 2); // Level 2, left child of node 2 + assert_eq!(get_level_by_node_index(5, 33), 2); // Level 2, right child of node 2 + assert_eq!(get_level_by_node_index(6, 33), 2); // Level 2, left child of node 3 + assert_eq!(get_level_by_node_index(7, 33), 2); // Level 2, right child of node 3 + } + + // Test helper to convert byte arrays to hex strings for easier debugging + fn bytes_to_hex(bytes: &[u8]) -> String { + bytes + .iter() + .map(|b| format!("{:02x}", b)) + .collect::>() + .join("") + } + + // Helper to verify node index calculations + fn verify_node_index_conversion(leaf_index: u32, tree_height: u32) -> bool { + let node_index = leaf_index_to_node_index(leaf_index, tree_height); + let recovered_leaf_index = node_index_to_leaf_index(node_index, tree_height); + recovered_leaf_index == leaf_index as i64 + } + + #[test] + fn test_zero_bytes_consistency() { + // Verify that each level's hash in ZERO_BYTES is correctly computed from its children + for level in (1..MAX_HEIGHT).rev() { + let parent_hash = compute_parent_hash( + ZERO_BYTES[level - 1].to_vec(), + ZERO_BYTES[level - 1].to_vec(), + ) + .unwrap(); + + assert_eq!( + parent_hash, + ZERO_BYTES[level].to_vec(), + "Zero bytes hash mismatch at level {}\nComputed: {}\nExpected: {}", + level, + bytes_to_hex(&parent_hash), + bytes_to_hex(&ZERO_BYTES[level]) + ); + } + } + + #[ignore = "todo check whether to keep"] + #[test] + fn test_debug_leaf_zero() { + let leaf_index = 0u32; + let tree_height = 32u32; + let node_index = leaf_index_to_node_index(leaf_index, tree_height); + let recovered_leaf_index = node_index_to_leaf_index(node_index, tree_height); + + println!("leaf_index: {}", leaf_index); + println!("node_index: {}", node_index); + println!( + "level: {}", + get_level_by_node_index(node_index, tree_height) + ); + println!("recovered_leaf_index: {}", recovered_leaf_index); + + assert_eq!(recovered_leaf_index, leaf_index as i64); + } + + #[ignore = "todo check whether to keep"] + #[test] + fn test_debug_max_leaf() { + let leaf_index = u32::MAX; + let tree_height = 32u32; + let node_index = leaf_index_to_node_index(leaf_index, tree_height); + let recovered_leaf_index = node_index_to_leaf_index(node_index, tree_height); + + println!("max test:"); + println!("leaf_index: {} (u32)", leaf_index); + println!("node_index: {} (i64)", node_index); + println!("2^(tree_height-1): {} (i64)", 2_i64.pow(tree_height - 1)); + println!( + "level: {}", + get_level_by_node_index(node_index, tree_height) + ); + println!("recovered_leaf_index: {} (i64)", recovered_leaf_index); + + assert_eq!(recovered_leaf_index, leaf_index as i64); + } + + #[ignore = "todo check whether to keep"] + #[test] + fn test_leaf_index_conversions() { + let test_cases = vec![ + (0u32, 32u32), // First leaf in height 32 tree + (1u32, 32u32), // Second leaf + (4294967295u32, 32u32), // Last possible leaf in u32 + (2147483647u32, 32u32), // i32::MAX + (2147483648u32, 32u32), // i32::MAX + 1 + (0u32, 3u32), // Small tree test + (1u32, 3u32), + (2u32, 3u32), + (3u32, 3u32), + ]; + + for (leaf_index, tree_height) in test_cases { + assert!( + verify_node_index_conversion(leaf_index, tree_height), + "Conversion failed for leaf_index={}, tree_height={}", + leaf_index, + tree_height + ); + } + } + + #[test] + fn test_proof_validation_components() { + // Test case for first non-existent leaf (index 0) + let test_leaf_index = 0u32; + let tree_height = 32u32; + // Create proof components + let node_index = leaf_index_to_node_index(test_leaf_index, tree_height); + let proof_path = get_proof_path(node_index, false); + + println!("Test leaf index: {}", test_leaf_index); + println!("Node index: {}", node_index); + println!("Proof path: {:?}", proof_path); + + // Verify proof path length + assert_eq!(proof_path.len(), tree_height as usize); + + // Test level calculation for proof path nodes + for &idx in &proof_path { + let level = get_level_by_node_index(idx, tree_height); + println!("Node {} is at level {}", idx, level); + assert!(level < tree_height as i64); + } + + // Manually compute root hash using proof path + let mut current_hash = ZERO_BYTES[0].to_vec(); // Start with leaf level zero bytes + + for (idx, _) in proof_path.iter().enumerate() { + let is_left = (node_index >> idx) & 1 == 0; + let sibling_hash = ZERO_BYTES[idx].to_vec(); + + let (left_child, right_child) = if is_left { + (current_hash.clone(), sibling_hash) + } else { + (sibling_hash, current_hash.clone()) + }; + + current_hash = compute_parent_hash(left_child, right_child).unwrap(); + + println!( + "Level {}: Computed hash: {}", + idx, + bytes_to_hex(¤t_hash) + ); + println!( + " Expected: {}", + bytes_to_hex(&ZERO_BYTES[idx + 1]) + ); + + // Verify against precalculated ZERO_BYTES + assert_eq!( + current_hash, + ZERO_BYTES[idx + 1].to_vec(), + "Hash mismatch at level {}", + idx + 1 + ); + } + } + + #[test] + fn test_validate_proof() { + let test_leaf_index = 0u32; + let merkle_tree = SerializablePubkey::try_from(vec![0u8; 32]).unwrap(); + + // Create a proof for testing + let mut proof = Vec::new(); + for i in 0..31 { + // One less than tree height since root is separate + proof.push(Hash::try_from(ZERO_BYTES[i].to_vec()).unwrap()); + } + + let proof_context = MerkleProofWithContext { + proof, + root: Hash::try_from(ZERO_BYTES[31].to_vec()).unwrap(), + leaf_index: test_leaf_index, + hash: Hash::try_from(ZERO_BYTES[0].to_vec()).unwrap(), + merkle_tree, + root_seq: 0, + }; + + // Validate the proof + let result = proof_context.validate(); + assert!(result.is_ok(), "Proof validation failed: {:?}", result); + } + + #[test] + fn test_validate_leaf_index() { + assert!(validate_leaf_index(0, 27)); + assert!(validate_leaf_index((1 << 26) - 1, 27)); + assert!(!validate_leaf_index(1 << 26, 27)); + assert!(validate_leaf_index(0, 33)); + } + + #[test] + fn test_merkle_proof_length() { + assert_eq!(get_merkle_proof_length(27), 26); + assert_eq!(get_merkle_proof_length(33), 32); + } +} diff --git a/src/ingester/persist/spend.rs b/src/ingester/persist/spend.rs new file mode 100644 index 00000000..5cf4e525 --- /dev/null +++ b/src/ingester/persist/spend.rs @@ -0,0 +1,97 @@ +use crate::common::typedefs::hash::Hash; +use crate::dao::generated::{accounts, token_accounts}; +use crate::ingester::error::IngesterError; +use crate::ingester::persist::{ + execute_account_update_query_and_update_balances, AccountType, ModificationType, +}; +use crate::migration::Expr; +use light_compressed_account::indexer_event::event::BatchNullifyContext; +use sea_orm::QueryFilter; +use sea_orm::{ColumnTrait, ConnectionTrait, DatabaseTransaction, EntityTrait, QueryTrait}; + +/// 1. Mark the input accounts as spent. +/// (From both V1 and V2 (batched) trees) +/// 2. Update account compressed sol balances. +/// 3. Update compressed token account balances. +pub async fn spend_input_accounts( + txn: &DatabaseTransaction, + in_accounts: &[Hash], +) -> Result<(), IngesterError> { + // Perform the update operation on the identified records + let query = accounts::Entity::update_many() + .col_expr(accounts::Column::Spent, Expr::value(true)) + .col_expr( + accounts::Column::PrevSpent, + Expr::col(accounts::Column::Spent).into(), + ) + .filter( + accounts::Column::Hash.is_in( + in_accounts + .iter() + .map(|account| account.to_vec()) + .collect::>>(), + ), + ) + .build(txn.get_database_backend()); + execute_account_update_query_and_update_balances( + txn, + query, + AccountType::Account, + ModificationType::Spend, + ) + .await?; + + let query = token_accounts::Entity::update_many() + .col_expr(token_accounts::Column::Spent, Expr::value(true)) + .col_expr( + token_accounts::Column::PrevSpent, + Expr::col(token_accounts::Column::Spent).into(), + ) + .filter( + token_accounts::Column::Hash.is_in( + in_accounts + .iter() + .map(|account| account.to_vec()) + .collect::>>(), + ), + ) + .build(txn.get_database_backend()); + + execute_account_update_query_and_update_balances( + txn, + query, + AccountType::TokenAccount, + ModificationType::Spend, + ) + .await?; + Ok(()) +} + +/// Update the nullifier queue index and nullifier of the input accounts in batched trees. +pub async fn spend_input_accounts_batched( + txn: &DatabaseTransaction, + accounts: &[BatchNullifyContext], +) -> Result<(), IngesterError> { + if accounts.is_empty() { + return Ok(()); + } + for account in accounts { + accounts::Entity::update_many() + .filter(accounts::Column::Hash.eq(account.account_hash.to_vec())) + .col_expr( + accounts::Column::NullifierQueueIndex, + Expr::value(account.nullifier_queue_index as i64), + ) + .col_expr( + accounts::Column::Nullifier, + Expr::value(account.nullifier.to_vec()), + ) + .col_expr( + accounts::Column::TxHash, + Expr::value(account.tx_hash.to_vec()), + ) + .exec(txn) + .await?; + } + Ok(()) +} diff --git a/src/ingester/typedefs/block_info.rs b/src/ingester/typedefs/block_info.rs index 06d54200..980e12c7 100644 --- a/src/ingester/typedefs/block_info.rs +++ b/src/ingester/typedefs/block_info.rs @@ -1,7 +1,7 @@ use serde::{Deserialize, Serialize}; +use solana_pubkey::Pubkey; use solana_sdk::{ clock::{Slot, UnixTimestamp}, - pubkey::Pubkey, signature::Signature, transaction::VersionedTransaction, }; @@ -177,7 +177,7 @@ pub fn parse_instruction_groups( versioned_transaction: VersionedTransaction, meta: UiTransactionStatusMeta, ) -> Result, IngesterError> { - let mut accounts = Vec::from(versioned_transaction.message.static_account_keys()); + let mut sdk_accounts = Vec::from(versioned_transaction.message.static_account_keys()); if versioned_transaction .message .address_table_lookups() @@ -189,32 +189,41 @@ pub fn parse_instruction_groups( .iter() .chain(loaded_addresses.readonly.iter()) { - let pubkey = Pubkey::from_str(address) + let sdk_pubkey = solana_sdk::pubkey::Pubkey::from_str(address) .map_err(|e| IngesterError::ParserError(e.to_string()))?; - accounts.push(pubkey); + sdk_accounts.push(sdk_pubkey); } } } + // Convert from solana_sdk::pubkey::Pubkey to solana_pubkey::Pubkey + let accounts: Vec = sdk_accounts + .iter() + .map(|sdk_pubkey| { + let bytes = sdk_pubkey.to_bytes(); + Pubkey::new_from_array(bytes) + }) + .collect(); + // Parse outer instructions and bucket them into groups let mut instruction_groups: Vec = versioned_transaction .message .instructions() .iter() .map(|ix| { - let program_id = accounts[ix.program_id_index as usize]; + let program_id = accounts[ix.program_id_index as usize].clone(); let data = ix.data.clone(); - let accounts: Vec = ix + let instruction_accounts: Vec = ix .accounts .iter() - .map(|account_index| accounts[*account_index as usize]) + .map(|account_index| accounts[*account_index as usize].clone()) .collect(); InstructionGroup { outer_instruction: Instruction { program_id, data, - accounts, + accounts: instruction_accounts, }, inner_instructions: Vec::new(), } @@ -229,21 +238,21 @@ pub fn parse_instruction_groups( match ui_instruction { UiInstruction::Compiled(ui_compiled_instruction) => { let program_id = - accounts[ui_compiled_instruction.program_id_index as usize]; + accounts[ui_compiled_instruction.program_id_index as usize].clone(); let data = bs58::decode(&ui_compiled_instruction.data) .into_vec() .map_err(|e| IngesterError::ParserError(e.to_string()))?; - let accounts = ui_compiled_instruction + let instruction_accounts: Vec = ui_compiled_instruction .accounts .iter() - .map(|account_index| accounts[*account_index as usize]) + .map(|account_index| accounts[*account_index as usize].clone()) .collect(); instruction_groups[index as usize] .inner_instructions .push(Instruction { program_id, data, - accounts, + accounts: instruction_accounts, }); } UiInstruction::Parsed(_) => { diff --git a/src/lib.rs b/src/lib.rs index c3cdc6be..949a0431 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -4,6 +4,6 @@ pub mod common; pub mod dao; pub mod ingester; pub mod migration; +pub mod monitor; pub mod openapi; pub mod snapshot; -pub mod monitor; \ No newline at end of file diff --git a/src/main.rs b/src/main.rs index 80bbae4b..185013ac 100644 --- a/src/main.rs +++ b/src/main.rs @@ -90,6 +90,10 @@ struct Args { #[arg(long, action = clap::ArgAction::SetTrue)] disable_api: bool, + /// Custom account compression program ID (optional) + #[arg(long, default_value = "compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq")] + compression_program_id: String, + /// Metrics endpoint in the format `host:port` /// If provided, metrics will be sent to the specified statsd server. #[arg(long, default_value = None)] @@ -190,6 +194,13 @@ async fn main() { setup_logging(args.logging_format); setup_metrics(args.metrics_endpoint); + if let Err(err) = + photon_indexer::ingester::parser::set_compression_program_id(&args.compression_program_id) + { + error!("Failed to set compression program ID: {}", err); + std::process::exit(1); + } + let db_conn = setup_database_connection(args.db_url.clone(), args.max_db_conn).await; if args.db_url.is_none() { info!("Running migrations..."); diff --git a/src/migration/main.rs b/src/migration/main.rs index 41abbc49..448ef924 100644 --- a/src/migration/main.rs +++ b/src/migration/main.rs @@ -3,7 +3,10 @@ use sea_orm_migration::prelude::*; #[async_std::main] async fn main() { - let custom_indexes_enabled = std::env::var("ENABLE_CUSTOM_INDEXES").unwrap_or("false".to_string()).to_lowercase() == "true"; + let custom_indexes_enabled = std::env::var("ENABLE_CUSTOM_INDEXES") + .unwrap_or("false".to_string()) + .to_lowercase() + == "true"; if custom_indexes_enabled { cli::run_cli(MigractorWithCustomMigrations).await; } else { diff --git a/src/migration/migrations/custom/custom20250211_000002_solayer2.rs b/src/migration/migrations/custom/custom20250211_000002_solayer2.rs index 0caa166c..f4840c9c 100644 --- a/src/migration/migrations/custom/custom20250211_000002_solayer2.rs +++ b/src/migration/migrations/custom/custom20250211_000002_solayer2.rs @@ -1,8 +1,7 @@ -use std::str::FromStr; - use sea_orm_migration::prelude::*; use sea_orm_migration::sea_orm::{ConnectionTrait, DatabaseBackend, Statement}; -use solana_sdk::pubkey::Pubkey; +use solana_program::pubkey::Pubkey; +use std::str::FromStr; use crate::migration::model::table::Accounts; @@ -27,15 +26,16 @@ impl MigrationTrait for Migration { "ARDPkhymCbfdan375FCgPnBJQvUfHeb7nHVdBfwWSxrp", "2sYfW81EENCMe415CPhE2XzBA5iQf4TXRs31W1KP63YT", ]; - // Encode the accounts as hex strings - let encoded_accounts = solayer_accounts.iter() + // Encode the accounts as hex strings + let encoded_accounts = solayer_accounts + .iter() .map(|account| { let pubkey = Pubkey::from_str(account).unwrap(); format!("\\x{}", hex::encode(pubkey.to_bytes())) }) .collect::>() .join("', '"); - + if manager.get_database_backend() == DatabaseBackend::Postgres { // Create index concurrently for Postgres execute_sql( @@ -47,24 +47,22 @@ impl MigrationTrait for Migration { ), ) .await?; - } + } Ok(()) } async fn down(&self, manager: &SchemaManager) -> Result<(), DbErr> { if manager.get_database_backend() == DatabaseBackend::Postgres { - manager - .drop_index( - Index::drop() - .name("solayer_account_index2") - .table(Accounts::Table) - .to_owned(), - ) - .await?; + manager + .drop_index( + Index::drop() + .name("solayer_account_index2") + .table(Accounts::Table) + .to_owned(), + ) + .await?; } Ok(()) } - } - diff --git a/src/migration/migrations/custom/custom20252201_000001_init.rs b/src/migration/migrations/custom/custom20252201_000001_init.rs index fab8674a..1ccb603f 100644 --- a/src/migration/migrations/custom/custom20252201_000001_init.rs +++ b/src/migration/migrations/custom/custom20252201_000001_init.rs @@ -27,15 +27,16 @@ impl MigrationTrait for Migration { "S1ay5sk6FVkvsNFZShMw2YK3nfgJZ8tpBBGuHWDZ266", "2sYfW81EENCMe415CPhE2XzBA5iQf4TXRs31W1KP63YT", ]; - // Encode the accounts as hex strings - let encoded_accounts = solayer_accounts.iter() + // Encode the accounts as hex strings + let encoded_accounts = solayer_accounts + .iter() .map(|account| { let pubkey = Pubkey::from_str(account).unwrap(); format!("\\x{}", hex::encode(pubkey.to_bytes())) }) .collect::>() .join("', '"); - + if manager.get_database_backend() == DatabaseBackend::Postgres { // Create index concurrently for Postgres execute_sql( @@ -47,24 +48,22 @@ impl MigrationTrait for Migration { ), ) .await?; - } + } Ok(()) } async fn down(&self, manager: &SchemaManager) -> Result<(), DbErr> { if manager.get_database_backend() == DatabaseBackend::Postgres { - manager - .drop_index( - Index::drop() - .name("solayer_account_index") - .table(Accounts::Table) - .to_owned(), - ) - .await?; + manager + .drop_index( + Index::drop() + .name("solayer_account_index") + .table(Accounts::Table) + .to_owned(), + ) + .await?; } Ok(()) } - } - diff --git a/src/migration/migrations/custom/mod.rs b/src/migration/migrations/custom/mod.rs index a9eded12..47fddc25 100644 --- a/src/migration/migrations/custom/mod.rs +++ b/src/migration/migrations/custom/mod.rs @@ -1,7 +1,7 @@ use sea_orm_migration::MigrationTrait; -pub mod custom20252201_000001_init; pub mod custom20250211_000002_solayer2; +pub mod custom20252201_000001_init; pub fn get_custom_migrations() -> Vec> { vec![ diff --git a/src/migration/migrations/mod.rs b/src/migration/migrations/mod.rs index bcdf79ac..471f5364 100644 --- a/src/migration/migrations/mod.rs +++ b/src/migration/migrations/mod.rs @@ -1,2 +1,2 @@ +pub mod custom; pub mod standard; -pub mod custom; \ No newline at end of file diff --git a/src/migration/migrations/standard/m20250206_000007_init.rs b/src/migration/migrations/standard/m20250206_000007_init.rs new file mode 100644 index 00000000..d70efc5a --- /dev/null +++ b/src/migration/migrations/standard/m20250206_000007_init.rs @@ -0,0 +1,399 @@ +use crate::migration::model::table::{Accounts, IndexedTrees, StateTrees}; +use sea_orm_migration::{ + prelude::*, + sea_orm::{ConnectionTrait, DatabaseBackend, Statement}, +}; + +#[derive(DeriveMigrationName)] +pub struct Migration; + +async fn execute_sql<'a>(manager: &SchemaManager<'_>, sql: &str) -> Result<(), DbErr> { + manager + .get_connection() + .execute(Statement::from_string( + manager.get_database_backend(), + sql.to_string(), + )) + .await?; + Ok(()) +} + +#[async_trait::async_trait] +impl MigrationTrait for Migration { + async fn up(&self, manager: &SchemaManager) -> Result<(), DbErr> { + if manager.get_database_backend() == DatabaseBackend::Sqlite { + execute_sql( + manager, + r#" + -- Recreate Accounts table + CREATE TABLE accounts_new ( + hash BLOB NOT NULL PRIMARY KEY, + data BLOB, + data_hash BLOB, + address BLOB, + owner BLOB NOT NULL, + tree BLOB NOT NULL, + queue BLOB NOT NULL, + leaf_index BIGINT NOT NULL, + seq BIGINT, + slot_created BIGINT NOT NULL, + spent BOOLEAN NOT NULL, + prev_spent BOOLEAN, + lamports REAL, + discriminator REAL, + in_output_queue BOOLEAN NOT NULL DEFAULT TRUE, + nullifier BLOB, + tx_hash BLOB, + nullifier_queue_index BIGINT NULL, + nullified_in_tree BOOLEAN NOT NULL DEFAULT FALSE, + tree_type INTEGER NULL + ); + + INSERT INTO accounts_new + SELECT + hash, data, data_hash, address, owner, tree, NULL as queue, leaf_index, seq, + slot_created, spent, prev_spent, lamports, discriminator, + FALSE as in_output_queue, NULL as nullifier, NULL as tx_hash, NULL as nullifier_queue_index, + FALSE as nullified_in_tree, NULL as tree_type + FROM accounts; + + DROP TABLE accounts; + ALTER TABLE accounts_new RENAME TO accounts; + + -- Recreate state_trees table + CREATE TABLE state_trees_new ( + tree BLOB NOT NULL, + node_idx BIGINT NOT NULL, + leaf_idx BIGINT, + level BIGINT NOT NULL, + hash BLOB NOT NULL, + seq BIGINT, + PRIMARY KEY (tree, node_idx) + ); + + INSERT INTO state_trees_new + SELECT tree, node_idx, leaf_idx, level, hash, seq + FROM state_trees; + + DROP TABLE state_trees; + ALTER TABLE state_trees_new RENAME TO state_trees; + + -- Recreate indexed_trees table + CREATE TABLE indexed_trees_new ( + tree BLOB NOT NULL, + leaf_index BIGINT NOT NULL, + value BLOB NOT NULL, + next_index BIGINT NOT NULL, + next_value BLOB NOT NULL, + seq BIGINT, + PRIMARY KEY (tree, leaf_index) + ); + + INSERT INTO indexed_trees_new + SELECT tree, leaf_index, value, next_index, next_value, seq + FROM indexed_trees; + + DROP TABLE indexed_trees; + ALTER TABLE indexed_trees_new RENAME TO indexed_trees; + + -- Recreate indexes + CREATE INDEX accounts_address_spent_idx ON accounts (address, seq); + CREATE UNIQUE INDEX accounts_owner_hash_idx ON accounts (spent, owner, hash); + CREATE UNIQUE INDEX state_trees_tree_leaf_idx ON state_trees (tree, leaf_idx); + CREATE INDEX state_trees_hash_idx ON state_trees (hash); + CREATE UNIQUE INDEX indexed_trees_value_idx ON indexed_trees (value); + CREATE INDEX accounts_queue_idx ON accounts (tree, in_output_queue, leaf_index) WHERE in_output_queue = 1; + "#, + ).await?; + } else { + manager + .alter_table( + Table::alter() + .table(Accounts::Table) + .add_column(ColumnDef::new(Accounts::TreeType).integer().null()) + .to_owned(), + ) + .await?; + + manager + .alter_table( + Table::alter() + .table(Accounts::Table) + .add_column( + ColumnDef::new(Accounts::NullifiedInTree) + .boolean() + .not_null() + .default(false), + ) + .to_owned(), + ) + .await?; + + manager + .alter_table( + Table::alter() + .table(Accounts::Table) + .add_column( + ColumnDef::new(Accounts::NullifierQueueIndex) + .big_integer() + .null(), + ) + .to_owned(), + ) + .await?; + + manager + .alter_table( + Table::alter() + .table(Accounts::Table) + .add_column( + ColumnDef::new(Accounts::InOutputQueue) + .boolean() + .not_null() + .default(true), + ) + .to_owned(), + ) + .await?; + + manager + .alter_table( + Table::alter() + .table(Accounts::Table) + .add_column(ColumnDef::new(Accounts::Queue).binary().not_null()) + .to_owned(), + ) + .await?; + + manager + .alter_table( + Table::alter() + .table(Accounts::Table) + .add_column(ColumnDef::new(Accounts::Nullifier).binary().null()) + .to_owned(), + ) + .await?; + + manager + .alter_table( + Table::alter() + .table(Accounts::Table) + .add_column(ColumnDef::new(Accounts::TxHash).binary().null()) + .to_owned(), + ) + .await?; + + manager + .alter_table( + Table::alter() + .table(Accounts::Table) + .modify_column(ColumnDef::new(Accounts::Seq).big_integer().null()) + .to_owned(), + ) + .await?; + + manager + .alter_table( + Table::alter() + .table(StateTrees::Table) + .modify_column(ColumnDef::new(StateTrees::Seq).big_integer().null()) + .to_owned(), + ) + .await?; + + manager + .alter_table( + Table::alter() + .table(IndexedTrees::Table) + .modify_column(ColumnDef::new(IndexedTrees::Seq).big_integer().null()) + .to_owned(), + ) + .await?; + + execute_sql( + manager, + "CREATE INDEX accounts_queue_idx ON accounts (tree, in_output_queue, leaf_index) WHERE in_output_queue = true;", + ).await?; + } + + Ok(()) + } + + async fn down(&self, manager: &SchemaManager) -> Result<(), DbErr> { + if manager.get_database_backend() == DatabaseBackend::Sqlite { + execute_sql( + manager, + r#" + -- Recreate Accounts table without new columns and with non-null seq + CREATE TABLE accounts_new ( + hash BLOB NOT NULL PRIMARY KEY, + data BLOB, + data_hash BLOB, + address BLOB, + owner BLOB NOT NULL, + tree BLOB NOT NULL, + leaf_index BIGINT NOT NULL, + seq BIGINT NOT NULL, + slot_created BIGINT NOT NULL, + spent BOOLEAN NOT NULL, + prev_spent BOOLEAN, + lamports REAL, + discriminator REAL + ); + + INSERT INTO accounts_new + SELECT + hash, data, data_hash, address, owner, tree, leaf_index, + COALESCE(seq, 0) as seq, + slot_created, spent, prev_spent, lamports, discriminator + FROM accounts; + + DROP TABLE accounts; + ALTER TABLE accounts_new RENAME TO accounts; + + -- Recreate state_trees table + CREATE TABLE state_trees_new ( + tree BLOB NOT NULL, + node_idx BIGINT NOT NULL, + leaf_idx BIGINT, + level BIGINT NOT NULL, + hash BLOB NOT NULL, + seq BIGINT NOT NULL, + PRIMARY KEY (tree, node_idx) + ); + + INSERT INTO state_trees_new + SELECT tree, node_idx, leaf_idx, level, hash, COALESCE(seq, 0) + FROM state_trees; + + DROP TABLE state_trees; + ALTER TABLE state_trees_new RENAME TO state_trees; + + -- Recreate indexed_trees table + CREATE TABLE indexed_trees_new ( + tree BLOB NOT NULL, + leaf_index BIGINT NOT NULL, + value BLOB NOT NULL, + next_index BIGINT NOT NULL, + next_value BLOB NOT NULL, + seq BIGINT NOT NULL, + PRIMARY KEY (tree, leaf_index) + ); + + INSERT INTO indexed_trees_new + SELECT tree, leaf_index, value, next_index, next_value, COALESCE(seq, 0) + FROM indexed_trees; + + DROP TABLE indexed_trees; + ALTER TABLE indexed_trees_new RENAME TO indexed_trees; + + -- Recreate indexes + CREATE INDEX accounts_address_spent_idx ON accounts (address, seq); + CREATE UNIQUE INDEX accounts_owner_hash_idx ON accounts (spent, owner, hash); + CREATE UNIQUE INDEX state_trees_tree_leaf_idx ON state_trees (tree, leaf_idx); + CREATE INDEX state_trees_hash_idx ON state_trees (hash); + CREATE UNIQUE INDEX indexed_trees_value_idx ON indexed_trees (value); + "#, + ) + .await?; + } else { + manager + .alter_table( + Table::alter() + .table(Accounts::Table) + .drop_column(Accounts::TreeType) + .to_owned(), + ) + .await?; + + manager + .alter_table( + Table::alter() + .table(Accounts::Table) + .drop_column(Accounts::NullifiedInTree) + .to_owned(), + ) + .await?; + + manager + .alter_table( + Table::alter() + .table(Accounts::Table) + .drop_column(Accounts::NullifierQueueIndex) + .to_owned(), + ) + .await?; + + manager + .alter_table( + Table::alter() + .table(Accounts::Table) + .drop_column(Accounts::InOutputQueue) + .to_owned(), + ) + .await?; + + manager + .alter_table( + Table::alter() + .table(Accounts::Table) + .drop_column(Accounts::Queue) + .to_owned(), + ) + .await?; + + manager + .alter_table( + Table::alter() + .table(Accounts::Table) + .drop_column(Accounts::Nullifier) + .to_owned(), + ) + .await?; + + manager + .alter_table( + Table::alter() + .table(Accounts::Table) + .drop_column(Accounts::TxHash) + .to_owned(), + ) + .await?; + + manager + .alter_table( + Table::alter() + .table(Accounts::Table) + .modify_column(ColumnDef::new(Accounts::Seq).big_integer().not_null()) + .to_owned(), + ) + .await?; + + manager + .alter_table( + Table::alter() + .table(StateTrees::Table) + .modify_column(ColumnDef::new(StateTrees::Seq).big_integer().not_null()) + .to_owned(), + ) + .await?; + + manager + .alter_table( + Table::alter() + .table(IndexedTrees::Table) + .modify_column(ColumnDef::new(IndexedTrees::Seq).big_integer().not_null()) + .to_owned(), + ) + .await?; + + execute_sql( + manager, + "CREATE INDEX state_trees_hash_idx ON state_trees (hash) WHERE level = 0;", + ) + .await?; + } + + Ok(()) + } +} diff --git a/src/migration/migrations/standard/m20250314_000008_init.rs b/src/migration/migrations/standard/m20250314_000008_init.rs new file mode 100644 index 00000000..753ca2e1 --- /dev/null +++ b/src/migration/migrations/standard/m20250314_000008_init.rs @@ -0,0 +1,53 @@ +use crate::migration::model::table::AddressQueues; +use sea_orm_migration::prelude::*; + +#[derive(DeriveMigrationName)] +pub struct Migration; + +#[async_trait::async_trait] +impl MigrationTrait for Migration { + async fn up(&self, manager: &SchemaManager) -> Result<(), DbErr> { + manager + .create_table( + Table::create() + .table(AddressQueues::Table) + .if_not_exists() + .col(ColumnDef::new(AddressQueues::Tree).binary().not_null()) + .col(ColumnDef::new(AddressQueues::Address).binary().not_null()) + .col( + ColumnDef::new(AddressQueues::QueueIndex) + .big_integer() + .not_null(), + ) + .primary_key( + Index::create() + .name("pk_address_queue_elements") + .col(AddressQueues::Address), + ) + .to_owned(), + ) + .await?; + + manager + .create_index( + Index::create() + .name("address_queue_elements_tree_value_idx") + .table(AddressQueues::Table) + .col(AddressQueues::Tree) + .col(AddressQueues::Address) + .unique() + .to_owned(), + ) + .await?; + + Ok(()) + } + + async fn down(&self, manager: &SchemaManager) -> Result<(), DbErr> { + manager + .drop_table(Table::drop().table(AddressQueues::Table).to_owned()) + .await?; + + Ok(()) + } +} diff --git a/src/migration/migrations/standard/mod.rs b/src/migration/migrations/standard/mod.rs index 2daa6965..d02c756f 100644 --- a/src/migration/migrations/standard/mod.rs +++ b/src/migration/migrations/standard/mod.rs @@ -6,9 +6,8 @@ pub mod m20240624_000003_init; pub mod m20240807_000004_init; pub mod m20240914_000005_init; pub mod m20241008_000006_init; - - - +pub mod m20250206_000007_init; +pub mod m20250314_000008_init; pub fn get_standard_migrations() -> Vec> { vec![ @@ -18,5 +17,7 @@ pub fn get_standard_migrations() -> Vec> { Box::new(m20240807_000004_init::Migration), Box::new(m20240914_000005_init::Migration), Box::new(m20241008_000006_init::Migration), + Box::new(m20250206_000007_init::Migration), + Box::new(m20250314_000008_init::Migration), ] } diff --git a/src/migration/mod.rs b/src/migration/mod.rs index e246a407..8db11731 100644 --- a/src/migration/mod.rs +++ b/src/migration/mod.rs @@ -7,7 +7,6 @@ mod model; pub struct Migrator; - #[async_trait::async_trait] impl MigratorTrait for Migrator { fn migrations() -> Vec> { @@ -15,12 +14,14 @@ impl MigratorTrait for Migrator { } } - pub struct MigractorWithCustomMigrations; #[async_trait::async_trait] impl MigratorTrait for MigractorWithCustomMigrations { fn migrations() -> Vec> { - get_standard_migrations().into_iter().chain(get_custom_migrations()).collect() + get_standard_migrations() + .into_iter() + .chain(get_custom_migrations()) + .collect() } -} \ No newline at end of file +} diff --git a/src/migration/model/mod.rs b/src/migration/model/mod.rs index 790b2c4a..13971b0a 100644 --- a/src/migration/model/mod.rs +++ b/src/migration/model/mod.rs @@ -1 +1 @@ -pub mod table; \ No newline at end of file +pub mod table; diff --git a/src/migration/model/table.rs b/src/migration/model/table.rs index a6993229..12b0c025 100644 --- a/src/migration/model/table.rs +++ b/src/migration/model/table.rs @@ -21,6 +21,13 @@ pub enum Accounts { Owner, Tree, LeafIndex, + InOutputQueue, + NullifierQueueIndex, + NullifiedInTree, + TreeType, + Queue, + Nullifier, + TxHash, Spent, PrevSpent, Seq, @@ -99,3 +106,11 @@ pub enum StateTreeHistories { TransactionSignature, LeafIdx, } + +#[derive(Copy, Clone, Iden)] +pub enum AddressQueues { + Table, + Tree, + Address, + QueueIndex, +} diff --git a/src/monitor/mod.rs b/src/monitor/mod.rs index 203e915b..5c85e637 100644 --- a/src/monitor/mod.rs +++ b/src/monitor/mod.rs @@ -17,21 +17,22 @@ use tokio::{ }; use crate::{ - api::method::{get_indexer_health::HEALTH_CHECK_SLOT_DISTANCE, utils::Context}, - common::fetch_current_slot_with_infinite_retry, - dao::generated::state_trees, - metric, + api::method::get_indexer_health::HEALTH_CHECK_SLOT_DISTANCE, + common::fetch_current_slot_with_infinite_retry, dao::generated::state_trees, metric, }; use light_concurrent_merkle_tree::copy::ConcurrentMerkleTreeCopy; use light_concurrent_merkle_tree::light_hasher::Poseidon; -use light_sdk::state::MerkleTreeMetadata; +use light_merkle_tree_metadata::merkle_tree::MerkleTreeMetadata; use crate::common::typedefs::hash::Hash; use solana_sdk::account::Account as SolanaAccount; +use crate::common::typedefs::context::Context; +use light_batched_merkle_tree::merkle_tree::BatchedMerkleTreeAccount; use solana_sdk::pubkey::Pubkey; use std::mem; + const CHUNK_SIZE: usize = 100; pub static LATEST_SLOT: Lazy> = Lazy::new(|| Arc::new(AtomicU64::new(0))); @@ -102,16 +103,28 @@ pub async fn start_latest_slot_updater(rpc_client: Arc) { } fn parse_historical_roots(account: SolanaAccount) -> Vec { - let roots = ConcurrentMerkleTreeCopy::::from_bytes_copy( + let mut data = account.data.clone(); + let pubkey = light_compressed_account::pubkey::Pubkey::new_from_array(account.owner.to_bytes()); + + fn extract_roots(root_history: &[[u8; 32]]) -> Vec { + root_history.iter().map(|&root| Hash::from(root)).collect() + } + + if let Ok(merkle_tree) = BatchedMerkleTreeAccount::address_from_bytes(&mut data, &pubkey) { + return extract_roots(merkle_tree.root_history.as_slice()); + } + + if let Ok(merkle_tree) = BatchedMerkleTreeAccount::state_from_bytes(&mut data, &pubkey) { + return extract_roots(merkle_tree.root_history.as_slice()); + } + + // fallback: V1 tree + let concurrent_tree = ConcurrentMerkleTreeCopy::::from_bytes_copy( &account.data[8 + mem::size_of::()..], ) - .unwrap() - .roots - .iter() - .map(|root| Hash::from(*root)) - .collect(); + .unwrap(); - roots + extract_roots(concurrent_tree.roots.as_slice()) } async fn load_db_tree_roots_with_infinite_retry(db: &DatabaseConnection) -> Vec<(Pubkey, Hash)> { @@ -175,7 +188,7 @@ async fn load_accounts_with_infinite_retry( async fn validate_tree_roots(rpc_client: &RpcClient, db_roots: Vec<(Pubkey, Hash)>) { for chunk in db_roots.chunks(CHUNK_SIZE) { - let pubkeys = chunk.iter().map(|(pubkey, _)| pubkey.clone()).collect(); + let pubkeys = chunk.iter().map(|(pubkey, _)| *pubkey).collect(); let accounts = load_accounts_with_infinite_retry(rpc_client, pubkeys).await; for ((pubkey, db_hash), account) in chunk.iter().zip(accounts) { let account_roots = parse_historical_roots(account); diff --git a/src/openapi/mod.rs b/src/openapi/mod.rs index 40dad45a..704ac341 100644 --- a/src/openapi/mod.rs +++ b/src/openapi/mod.rs @@ -1,10 +1,15 @@ use std::collections::HashSet; use crate::api::api::PhotonApi; +use crate::api::method::get_batch_address_update_info::AddressQueueIndex; +use crate::api::method::get_compressed_account_proof::{ + GetCompressedAccountProofResponseValue, GetCompressedAccountProofResponseValueV2, +}; use crate::api::method::get_compressed_accounts_by_owner::DataSlice; use crate::api::method::get_compressed_accounts_by_owner::FilterSelector; use crate::api::method::get_compressed_accounts_by_owner::Memcmp; use crate::api::method::get_compressed_accounts_by_owner::PaginatedAccountList; +use crate::api::method::get_compressed_accounts_by_owner::PaginatedAccountListV2; use crate::api::method::get_compressed_mint_token_holders::OwnerBalance; use crate::api::method::get_compressed_mint_token_holders::OwnerBalanceList; use crate::api::method::get_compressed_mint_token_holders::OwnerBalancesResponse; @@ -12,35 +17,41 @@ use crate::api::method::get_compressed_token_account_balance::TokenAccountBalanc use crate::api::method::get_compressed_token_balances_by_owner::TokenBalance; use crate::api::method::get_compressed_token_balances_by_owner::TokenBalanceList; use crate::api::method::get_compressed_token_balances_by_owner::TokenBalanceListV2; -use crate::api::method::get_multiple_compressed_accounts::AccountList; - +use crate::api::method::get_multiple_compressed_accounts::{AccountList, AccountListV2}; use crate::api::method::get_multiple_new_address_proofs::AddressListWithTrees; use crate::api::method::get_multiple_new_address_proofs::AddressWithTree; use crate::api::method::get_multiple_new_address_proofs::MerkleContextWithNewAddressProof; -use crate::api::method::get_transaction_with_compression_info::AccountWithOptionalTokenData; -use crate::api::method::get_validity_proof::CompressedProof; -use crate::api::method::get_validity_proof::CompressedProofWithContext; -use crate::api::method::utils::Context; -use crate::api::method::utils::Limit; +use crate::api::method::get_queue_elements::GetQueueElementsResponseValue; +use crate::api::method::get_transaction_with_compression_info::CompressionInfoV2; +use crate::api::method::get_transaction_with_compression_info::{ + AccountWithOptionalTokenData, AccountWithOptionalTokenDataV2, ClosedAccountV2, + ClosedAccountWithOptionalTokenDataV2, +}; +use crate::api::method::get_validity_proof::{ + CompressedProof, CompressedProofWithContext, CompressedProofWithContextV2, MerkleContextV2, + RootIndex, TreeContextInfo, +}; use crate::api::method::utils::PaginatedSignatureInfoList; use crate::api::method::utils::SignatureInfo; use crate::api::method::utils::SignatureInfoList; use crate::api::method::utils::SignatureInfoListWithError; use crate::api::method::utils::SignatureInfoWithError; -use crate::api::method::utils::TokenAcccount; -use crate::api::method::utils::TokenAccountList; -use crate::common::typedefs::account::Account; -use crate::common::typedefs::account::AccountData; +use crate::api::method::utils::{TokenAccount, TokenAccountV2}; +use crate::api::method::utils::{TokenAccountList, TokenAccountListV2}; +use crate::common::typedefs::account::{ + Account, AccountContext, AccountData, AccountV2, AccountWithContext, +}; use crate::common::typedefs::bs58_string::Base58String; use crate::common::typedefs::bs64_string::Base64String; +use crate::common::typedefs::context::Context; use crate::common::typedefs::hash::Hash; +use crate::common::typedefs::limit::Limit; use crate::common::typedefs::serializable_pubkey::SerializablePubkey; use crate::common::typedefs::serializable_signature::SerializableSignature; use crate::common::typedefs::token_data::AccountState; use crate::common::typedefs::token_data::TokenData; use crate::common::typedefs::unix_timestamp::UnixTimestamp; use crate::common::typedefs::unsigned_integer::UnsignedInteger; -use crate::ingester::persist::persisted_state_tree::MerkleProofWithContext; use dirs; use utoipa::openapi::Components; use utoipa::openapi::Response; @@ -71,16 +82,25 @@ const JSON_CONTENT_TYPE: &str = "application/json"; #[derive(OpenApi)] #[openapi(components(schemas( + AddressQueueIndex, SerializablePubkey, Context, Hash, + CompressionInfoV2, PaginatedAccountList, + PaginatedAccountListV2, Account, - MerkleProofWithContext, + AccountContext, + AccountWithContext, + AccountV2, + GetQueueElementsResponseValue, TokenAccountList, - TokenAcccount, + TokenAccountListV2, + TokenAccount, + TokenAccountV2, TokenAccountBalance, AccountList, + AccountListV2, Limit, Base58String, Base64String, @@ -94,10 +114,15 @@ const JSON_CONTENT_TYPE: &str = "application/json"; AccountData, AccountState, AccountWithOptionalTokenData, + ClosedAccountWithOptionalTokenDataV2, + ClosedAccountV2, + AccountWithOptionalTokenDataV2, UnixTimestamp, UnsignedInteger, CompressedProof, CompressedProofWithContext, + CompressedProofWithContextV2, + RootIndex, MerkleContextWithNewAddressProof, SignatureInfoListWithError, SignatureInfoWithError, @@ -110,6 +135,10 @@ const JSON_CONTENT_TYPE: &str = "application/json"; OwnerBalanceList, OwnerBalancesResponse, TokenBalanceListV2, + MerkleContextV2, + TreeContextInfo, + GetCompressedAccountProofResponseValue, + GetCompressedAccountProofResponseValueV2, )))] struct ApiDoc; @@ -130,21 +159,45 @@ fn add_string_property( } fn build_error_response(description: &str) -> Response { + let error_object = ObjectBuilder::new() + .property( + "code", + RefOr::T(Schema::Object( + ObjectBuilder::new() + .schema_type(SchemaType::Integer) + .build(), + )), + ) + .property( + "message", + RefOr::T(Schema::Object( + ObjectBuilder::new().schema_type(SchemaType::String).build(), + )), + ) + .build(); + + let response_schema = ObjectBuilder::new() + .property( + "jsonrpc", + RefOr::T(Schema::Object( + ObjectBuilder::new().schema_type(SchemaType::String).build(), + )), + ) + .property( + "id", + RefOr::T(Schema::Object( + ObjectBuilder::new().schema_type(SchemaType::String).build(), + )), + ) + .property("error", RefOr::T(Schema::Object(error_object))) + .build(); + ResponseBuilder::new() .description(description) .content( JSON_CONTENT_TYPE, ContentBuilder::new() - .schema(Schema::Object( - ObjectBuilder::new() - .property( - "error", - RefOr::T(Schema::Object( - ObjectBuilder::new().schema_type(SchemaType::String).build(), - )), - ) - .build(), - )) + .schema(Schema::Object(response_schema)) .build(), ) .build() @@ -179,6 +232,47 @@ fn request_schema(name: &str, params: Option>) -> RefOr { RefOr::T(Schema::Object(builder.build())) } +fn response_schema(result: RefOr) -> RefOr { + let mut builder = ObjectBuilder::new(); + + builder = add_string_property( + builder, + "jsonrpc", + "2.0", + "The version of the JSON-RPC protocol.", + ); + builder = add_string_property( + builder, + "id", + "test-account", + "An ID to identify the response.", + ); + builder = builder.property("result", result); + + // Add optional error property + let error_object = ObjectBuilder::new() + .property( + "code", + RefOr::T(Schema::Object( + ObjectBuilder::new() + .schema_type(SchemaType::Integer) + .build(), + )), + ) + .property( + "message", + RefOr::T(Schema::Object( + ObjectBuilder::new().schema_type(SchemaType::String).build(), + )), + ) + .build(); + builder = builder.property("error", RefOr::T(Schema::Object(error_object))); + + builder = builder.required("jsonrpc").required("id"); + + RefOr::T(Schema::Object(builder.build())) +} + // Examples of allOf references are always {}, which is incorrect. #[allow(non_snake_case)] fn fix_examples_for_allOf_references(schema: RefOr) -> RefOr { @@ -281,7 +375,7 @@ fn filter_unused_components( .collect(); } -pub fn update_docs(is_test: bool) { +pub fn update_docs_new(is_test: bool) { let method_api_specs = PhotonApi::method_api_specs(); for spec in method_api_specs { @@ -368,3 +462,86 @@ pub fn update_docs(is_test: bool) { } } } + +pub fn update_docs(is_test: bool) { + let method_api_specs = PhotonApi::method_api_specs(); + let mut doc = ApiDoc::openapi(); + doc.components = doc.components.map(|components| { + let mut components = components.clone(); + components.schemas = components + .schemas + .iter() + .map(|(k, v)| (k.clone(), fix_examples_for_allOf_references(v.clone()))) + .collect(); + components + }); + + for spec in method_api_specs { + let content = ContentBuilder::new() + .schema(request_schema(&spec.name, spec.request)) + .build(); + let request_body = RequestBodyBuilder::new() + .content(JSON_CONTENT_TYPE, content) + .required(Some(Required::True)) + .build(); + let wrapped_response_schema = + response_schema(fix_examples_for_allOf_references(spec.response)); + + let responses = ResponsesBuilder::new().response( + "200", + ResponseBuilder::new().content( + JSON_CONTENT_TYPE, + ContentBuilder::new().schema(wrapped_response_schema).build(), + ), + ) + .response("429", build_error_response("Exceeded rate limit.")) + .response("500", build_error_response("The server encountered an unexpected condition that prevented it from fulfilling the request.")); + let operation = OperationBuilder::new() + .request_body(Some(request_body)) + .responses(responses) + .build(); + let mut path_item = PathItem::new(PathItemType::Post, operation); + + path_item.summary = Some(spec.name.clone()); + doc.paths + .paths + .insert(format!("/{method}", method = spec.name), path_item); + } + + // doc.paths.paths.insert("/".to_string(), path_item); + doc.servers = Some(vec![ServerBuilder::new() + .url("https://devnet.helius-rpc.com?api-key=".to_string()) + .build()]); + let yaml = doc.to_yaml().unwrap(); + + let path = match is_test { + true => { + let tmp_directory = dirs::home_dir().unwrap().join(".tmp"); + + // Create tmp directory if it does not exist + if !tmp_directory.exists() { + std::fs::create_dir(&tmp_directory).unwrap(); + } + + relative_project_path(&format!("{}/test.yaml", tmp_directory.display())) + } + false => { + // relative_project_path(&format!("src/openapi/specs/{}.yaml", spec.name.clone())) + relative_project_path("src/openapi/specs/api.yaml") + } + }; + + std::fs::write(path.clone(), yaml).unwrap(); + + // Call the external swagger-cli validate command and fail if it fails + let validate_result = std::process::Command::new("swagger-cli") + .arg("validate") + .arg(path.to_str().unwrap()) + .output() + .unwrap(); + + if !validate_result.status.success() { + let stderr = String::from_utf8_lossy(&validate_result.stderr); + panic!("Failed to validate OpenAPI schema. {}", stderr); + } +} diff --git a/src/openapi/specs/api.yaml b/src/openapi/specs/api.yaml new file mode 100644 index 00000000..0434a085 --- /dev/null +++ b/src/openapi/specs/api.yaml @@ -0,0 +1,5125 @@ +openapi: 3.0.3 +info: + title: photon-indexer + description: Solana indexer for general compression + license: + name: Apache-2.0 + version: 0.50.0 +servers: +- url: https://devnet.helius-rpc.com?api-key= +paths: + /getBatchAddressUpdateInfo: + summary: getBatchAddressUpdateInfo + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getBatchAddressUpdateInfo + params: + type: object + required: + - tree + - batchSize + properties: + batchSize: + type: integer + format: uint16 + minimum: 0 + tree: + $ref: '#/components/schemas/Hash' + additionalProperties: false + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + properties: + error: + type: object + properties: + code: + type: integer + message: + type: string + id: + type: string + description: An ID to identify the response. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + result: + type: object + required: + - context + - startIndex + - addresses + - nonInclusionProofs + - subtrees + properties: + addresses: + type: array + items: + $ref: '#/components/schemas/AddressSeq' + context: + $ref: '#/components/schemas/Context' + nonInclusionProofs: + type: array + items: + $ref: '#/components/schemas/MerkleContextWithNewAddressProof' + startIndex: + type: integer + format: uint64 + minimum: 0 + subtrees: + type: array + items: + type: string + format: binary + additionalProperties: false + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: object + properties: + code: + type: integer + message: + type: string + id: + type: string + jsonrpc: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: object + properties: + code: + type: integer + message: + type: string + id: + type: string + jsonrpc: + type: string + /getCompressedAccount: + summary: getCompressedAccount + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getCompressedAccount + params: + type: object + description: Request for compressed account data + default: + address: null + hash: '11111111111111111111111111111111' + properties: + address: + allOf: + - $ref: '#/components/schemas/SerializablePubkey' + nullable: true + hash: + allOf: + - $ref: '#/components/schemas/Hash' + nullable: true + additionalProperties: false + example: + address: null + hash: '11111111111111111111111111111111' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + properties: + error: + type: object + properties: + code: + type: integer + message: + type: string + id: + type: string + description: An ID to identify the response. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + result: + type: object + required: + - context + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/Account' + additionalProperties: false + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: object + properties: + code: + type: integer + message: + type: string + id: + type: string + jsonrpc: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: object + properties: + code: + type: integer + message: + type: string + id: + type: string + jsonrpc: + type: string + /getCompressedAccountBalance: + summary: getCompressedAccountBalance + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getCompressedAccountBalance + params: + type: object + description: Request for compressed account data + default: + address: null + hash: '11111111111111111111111111111111' + properties: + address: + allOf: + - $ref: '#/components/schemas/SerializablePubkey' + nullable: true + hash: + allOf: + - $ref: '#/components/schemas/Hash' + nullable: true + additionalProperties: false + example: + address: null + hash: '11111111111111111111111111111111' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + properties: + error: + type: object + properties: + code: + type: integer + message: + type: string + id: + type: string + description: An ID to identify the response. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + result: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/UnsignedInteger' + additionalProperties: false + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: object + properties: + code: + type: integer + message: + type: string + id: + type: string + jsonrpc: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: object + properties: + code: + type: integer + message: + type: string + id: + type: string + jsonrpc: + type: string + /getCompressedAccountProof: + summary: getCompressedAccountProof + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getCompressedAccountProof + params: + type: object + required: + - hash + properties: + hash: + $ref: '#/components/schemas/Hash' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + properties: + error: + type: object + properties: + code: + type: integer + message: + type: string + id: + type: string + description: An ID to identify the response. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + result: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/GetCompressedAccountProofResponseValue' + additionalProperties: false + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: object + properties: + code: + type: integer + message: + type: string + id: + type: string + jsonrpc: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: object + properties: + code: + type: integer + message: + type: string + id: + type: string + jsonrpc: + type: string + /getCompressedAccountProofV2: + summary: getCompressedAccountProofV2 + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getCompressedAccountProofV2 + params: + type: object + required: + - hash + properties: + hash: + $ref: '#/components/schemas/Hash' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + properties: + error: + type: object + properties: + code: + type: integer + message: + type: string + id: + type: string + description: An ID to identify the response. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + result: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/GetCompressedAccountProofResponseValueV2' + additionalProperties: false + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: object + properties: + code: + type: integer + message: + type: string + id: + type: string + jsonrpc: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: object + properties: + code: + type: integer + message: + type: string + id: + type: string + jsonrpc: + type: string + /getCompressedAccountV2: + summary: getCompressedAccountV2 + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getCompressedAccountV2 + params: + type: object + description: Request for compressed account data + default: + address: null + hash: '11111111111111111111111111111111' + properties: + address: + allOf: + - $ref: '#/components/schemas/SerializablePubkey' + nullable: true + hash: + allOf: + - $ref: '#/components/schemas/Hash' + nullable: true + additionalProperties: false + example: + address: null + hash: '11111111111111111111111111111111' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + properties: + error: + type: object + properties: + code: + type: integer + message: + type: string + id: + type: string + description: An ID to identify the response. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + result: + type: object + required: + - context + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/AccountV2' + additionalProperties: false + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: object + properties: + code: + type: integer + message: + type: string + id: + type: string + jsonrpc: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: object + properties: + code: + type: integer + message: + type: string + id: + type: string + jsonrpc: + type: string + /getCompressedAccountsByOwner: + summary: getCompressedAccountsByOwner + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getCompressedAccountsByOwner + params: + type: object + required: + - owner + properties: + cursor: + allOf: + - $ref: '#/components/schemas/Hash' + nullable: true + dataSlice: + allOf: + - $ref: '#/components/schemas/DataSlice' + nullable: true + filters: + type: array + items: + $ref: '#/components/schemas/FilterSelector' + limit: + allOf: + - $ref: '#/components/schemas/Limit' + nullable: true + owner: + $ref: '#/components/schemas/SerializablePubkey' + additionalProperties: false + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + properties: + error: + type: object + properties: + code: + type: integer + message: + type: string + id: + type: string + description: An ID to identify the response. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + result: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/PaginatedAccountList' + additionalProperties: false + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: object + properties: + code: + type: integer + message: + type: string + id: + type: string + jsonrpc: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: object + properties: + code: + type: integer + message: + type: string + id: + type: string + jsonrpc: + type: string + /getCompressedAccountsByOwnerV2: + summary: getCompressedAccountsByOwnerV2 + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getCompressedAccountsByOwnerV2 + params: + type: object + required: + - owner + properties: + cursor: + allOf: + - $ref: '#/components/schemas/Hash' + nullable: true + dataSlice: + allOf: + - $ref: '#/components/schemas/DataSlice' + nullable: true + filters: + type: array + items: + $ref: '#/components/schemas/FilterSelector' + limit: + allOf: + - $ref: '#/components/schemas/Limit' + nullable: true + owner: + $ref: '#/components/schemas/SerializablePubkey' + additionalProperties: false + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + properties: + error: + type: object + properties: + code: + type: integer + message: + type: string + id: + type: string + description: An ID to identify the response. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + result: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/PaginatedAccountListV2' + additionalProperties: false + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: object + properties: + code: + type: integer + message: + type: string + id: + type: string + jsonrpc: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: object + properties: + code: + type: integer + message: + type: string + id: + type: string + jsonrpc: + type: string + /getCompressedBalanceByOwner: + summary: getCompressedBalanceByOwner + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getCompressedBalanceByOwner + params: + type: object + required: + - owner + properties: + owner: + $ref: '#/components/schemas/SerializablePubkey' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + properties: + error: + type: object + properties: + code: + type: integer + message: + type: string + id: + type: string + description: An ID to identify the response. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + result: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/UnsignedInteger' + additionalProperties: false + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: object + properties: + code: + type: integer + message: + type: string + id: + type: string + jsonrpc: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: object + properties: + code: + type: integer + message: + type: string + id: + type: string + jsonrpc: + type: string + /getCompressedMintTokenHolders: + summary: getCompressedMintTokenHolders + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getCompressedMintTokenHolders + params: + type: object + required: + - mint + properties: + cursor: + allOf: + - $ref: '#/components/schemas/Base58String' + nullable: true + limit: + allOf: + - $ref: '#/components/schemas/Limit' + nullable: true + mint: + $ref: '#/components/schemas/SerializablePubkey' + additionalProperties: false + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + properties: + error: + type: object + properties: + code: + type: integer + message: + type: string + id: + type: string + description: An ID to identify the response. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + result: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/OwnerBalanceList' + additionalProperties: false + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: object + properties: + code: + type: integer + message: + type: string + id: + type: string + jsonrpc: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: object + properties: + code: + type: integer + message: + type: string + id: + type: string + jsonrpc: + type: string + /getCompressedTokenAccountBalance: + summary: getCompressedTokenAccountBalance + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getCompressedTokenAccountBalance + params: + type: object + description: Request for compressed account data + default: + address: null + hash: '11111111111111111111111111111111' + properties: + address: + allOf: + - $ref: '#/components/schemas/SerializablePubkey' + nullable: true + hash: + allOf: + - $ref: '#/components/schemas/Hash' + nullable: true + additionalProperties: false + example: + address: null + hash: '11111111111111111111111111111111' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + properties: + error: + type: object + properties: + code: + type: integer + message: + type: string + id: + type: string + description: An ID to identify the response. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + result: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/TokenAccountBalance' + additionalProperties: false + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: object + properties: + code: + type: integer + message: + type: string + id: + type: string + jsonrpc: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: object + properties: + code: + type: integer + message: + type: string + id: + type: string + jsonrpc: + type: string + /getCompressedTokenAccountsByDelegate: + summary: getCompressedTokenAccountsByDelegate + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getCompressedTokenAccountsByDelegate + params: + type: object + required: + - delegate + properties: + cursor: + allOf: + - $ref: '#/components/schemas/Base58String' + nullable: true + delegate: + $ref: '#/components/schemas/SerializablePubkey' + limit: + allOf: + - $ref: '#/components/schemas/Limit' + nullable: true + mint: + allOf: + - $ref: '#/components/schemas/SerializablePubkey' + nullable: true + additionalProperties: false + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + properties: + error: + type: object + properties: + code: + type: integer + message: + type: string + id: + type: string + description: An ID to identify the response. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + result: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/TokenAccountList' + additionalProperties: false + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: object + properties: + code: + type: integer + message: + type: string + id: + type: string + jsonrpc: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: object + properties: + code: + type: integer + message: + type: string + id: + type: string + jsonrpc: + type: string + /getCompressedTokenAccountsByDelegateV2: + summary: getCompressedTokenAccountsByDelegateV2 + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getCompressedTokenAccountsByDelegateV2 + params: + type: object + required: + - delegate + properties: + cursor: + allOf: + - $ref: '#/components/schemas/Base58String' + nullable: true + delegate: + $ref: '#/components/schemas/SerializablePubkey' + limit: + allOf: + - $ref: '#/components/schemas/Limit' + nullable: true + mint: + allOf: + - $ref: '#/components/schemas/SerializablePubkey' + nullable: true + additionalProperties: false + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + properties: + error: + type: object + properties: + code: + type: integer + message: + type: string + id: + type: string + description: An ID to identify the response. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + result: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/TokenAccountListV2' + additionalProperties: false + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: object + properties: + code: + type: integer + message: + type: string + id: + type: string + jsonrpc: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: object + properties: + code: + type: integer + message: + type: string + id: + type: string + jsonrpc: + type: string + /getCompressedTokenAccountsByOwner: + summary: getCompressedTokenAccountsByOwner + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getCompressedTokenAccountsByOwner + params: + type: object + required: + - owner + properties: + cursor: + allOf: + - $ref: '#/components/schemas/Base58String' + nullable: true + limit: + allOf: + - $ref: '#/components/schemas/Limit' + nullable: true + mint: + allOf: + - $ref: '#/components/schemas/SerializablePubkey' + nullable: true + owner: + $ref: '#/components/schemas/SerializablePubkey' + additionalProperties: false + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + properties: + error: + type: object + properties: + code: + type: integer + message: + type: string + id: + type: string + description: An ID to identify the response. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + result: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/TokenAccountList' + additionalProperties: false + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: object + properties: + code: + type: integer + message: + type: string + id: + type: string + jsonrpc: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: object + properties: + code: + type: integer + message: + type: string + id: + type: string + jsonrpc: + type: string + /getCompressedTokenAccountsByOwnerV2: + summary: getCompressedTokenAccountsByOwnerV2 + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getCompressedTokenAccountsByOwnerV2 + params: + type: object + required: + - owner + properties: + cursor: + allOf: + - $ref: '#/components/schemas/Base58String' + nullable: true + limit: + allOf: + - $ref: '#/components/schemas/Limit' + nullable: true + mint: + allOf: + - $ref: '#/components/schemas/SerializablePubkey' + nullable: true + owner: + $ref: '#/components/schemas/SerializablePubkey' + additionalProperties: false + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + properties: + error: + type: object + properties: + code: + type: integer + message: + type: string + id: + type: string + description: An ID to identify the response. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + result: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/TokenAccountListV2' + additionalProperties: false + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: object + properties: + code: + type: integer + message: + type: string + id: + type: string + jsonrpc: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: object + properties: + code: + type: integer + message: + type: string + id: + type: string + jsonrpc: + type: string + /getCompressedTokenBalancesByOwner: + summary: getCompressedTokenBalancesByOwner + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getCompressedTokenBalancesByOwner + params: + type: object + required: + - owner + properties: + cursor: + allOf: + - $ref: '#/components/schemas/Base58String' + nullable: true + limit: + allOf: + - $ref: '#/components/schemas/Limit' + nullable: true + mint: + allOf: + - $ref: '#/components/schemas/SerializablePubkey' + nullable: true + owner: + $ref: '#/components/schemas/SerializablePubkey' + additionalProperties: false + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + properties: + error: + type: object + properties: + code: + type: integer + message: + type: string + id: + type: string + description: An ID to identify the response. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + result: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/TokenBalanceList' + additionalProperties: false + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: object + properties: + code: + type: integer + message: + type: string + id: + type: string + jsonrpc: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: object + properties: + code: + type: integer + message: + type: string + id: + type: string + jsonrpc: + type: string + /getCompressedTokenBalancesByOwnerV2: + summary: getCompressedTokenBalancesByOwnerV2 + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getCompressedTokenBalancesByOwnerV2 + params: + type: object + required: + - owner + properties: + cursor: + allOf: + - $ref: '#/components/schemas/Base58String' + nullable: true + limit: + allOf: + - $ref: '#/components/schemas/Limit' + nullable: true + mint: + allOf: + - $ref: '#/components/schemas/SerializablePubkey' + nullable: true + owner: + $ref: '#/components/schemas/SerializablePubkey' + additionalProperties: false + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + properties: + error: + type: object + properties: + code: + type: integer + message: + type: string + id: + type: string + description: An ID to identify the response. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + result: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/TokenBalanceListV2' + additionalProperties: false + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: object + properties: + code: + type: integer + message: + type: string + id: + type: string + jsonrpc: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: object + properties: + code: + type: integer + message: + type: string + id: + type: string + jsonrpc: + type: string + /getCompressionSignaturesForAccount: + summary: getCompressionSignaturesForAccount + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getCompressionSignaturesForAccount + params: + type: object + required: + - hash + properties: + hash: + $ref: '#/components/schemas/Hash' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + properties: + error: + type: object + properties: + code: + type: integer + message: + type: string + id: + type: string + description: An ID to identify the response. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + result: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/SignatureInfoList' + additionalProperties: false + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: object + properties: + code: + type: integer + message: + type: string + id: + type: string + jsonrpc: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: object + properties: + code: + type: integer + message: + type: string + id: + type: string + jsonrpc: + type: string + /getCompressionSignaturesForAddress: + summary: getCompressionSignaturesForAddress + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getCompressionSignaturesForAddress + params: + type: object + required: + - address + properties: + address: + $ref: '#/components/schemas/SerializablePubkey' + cursor: + type: string + nullable: true + limit: + allOf: + - $ref: '#/components/schemas/Limit' + nullable: true + additionalProperties: false + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + properties: + error: + type: object + properties: + code: + type: integer + message: + type: string + id: + type: string + description: An ID to identify the response. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + result: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/PaginatedSignatureInfoList' + additionalProperties: false + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: object + properties: + code: + type: integer + message: + type: string + id: + type: string + jsonrpc: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: object + properties: + code: + type: integer + message: + type: string + id: + type: string + jsonrpc: + type: string + /getCompressionSignaturesForOwner: + summary: getCompressionSignaturesForOwner + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getCompressionSignaturesForOwner + params: + type: object + required: + - owner + properties: + cursor: + type: string + nullable: true + limit: + allOf: + - $ref: '#/components/schemas/Limit' + nullable: true + owner: + $ref: '#/components/schemas/SerializablePubkey' + additionalProperties: false + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + properties: + error: + type: object + properties: + code: + type: integer + message: + type: string + id: + type: string + description: An ID to identify the response. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + result: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/PaginatedSignatureInfoList' + additionalProperties: false + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: object + properties: + code: + type: integer + message: + type: string + id: + type: string + jsonrpc: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: object + properties: + code: + type: integer + message: + type: string + id: + type: string + jsonrpc: + type: string + /getCompressionSignaturesForTokenOwner: + summary: getCompressionSignaturesForTokenOwner + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getCompressionSignaturesForTokenOwner + params: + type: object + required: + - owner + properties: + cursor: + type: string + nullable: true + limit: + allOf: + - $ref: '#/components/schemas/Limit' + nullable: true + owner: + $ref: '#/components/schemas/SerializablePubkey' + additionalProperties: false + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + properties: + error: + type: object + properties: + code: + type: integer + message: + type: string + id: + type: string + description: An ID to identify the response. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + result: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/PaginatedSignatureInfoList' + additionalProperties: false + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: object + properties: + code: + type: integer + message: + type: string + id: + type: string + jsonrpc: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: object + properties: + code: + type: integer + message: + type: string + id: + type: string + jsonrpc: + type: string + /getIndexerHealth: + summary: getIndexerHealth + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getIndexerHealth + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + properties: + error: + type: object + properties: + code: + type: integer + message: + type: string + id: + type: string + description: An ID to identify the response. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + result: + type: string + description: ok if healthy + default: ok + enum: + - ok + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: object + properties: + code: + type: integer + message: + type: string + id: + type: string + jsonrpc: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: object + properties: + code: + type: integer + message: + type: string + id: + type: string + jsonrpc: + type: string + /getIndexerSlot: + summary: getIndexerSlot + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getIndexerSlot + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + properties: + error: + type: object + properties: + code: + type: integer + message: + type: string + id: + type: string + description: An ID to identify the response. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + result: + type: integer + format: uint64 + default: 100 + example: 100 + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: object + properties: + code: + type: integer + message: + type: string + id: + type: string + jsonrpc: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: object + properties: + code: + type: integer + message: + type: string + id: + type: string + jsonrpc: + type: string + /getLatestCompressionSignatures: + summary: getLatestCompressionSignatures + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getLatestCompressionSignatures + params: + type: object + properties: + cursor: + type: string + nullable: true + limit: + allOf: + - $ref: '#/components/schemas/Limit' + nullable: true + additionalProperties: false + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + properties: + error: + type: object + properties: + code: + type: integer + message: + type: string + id: + type: string + description: An ID to identify the response. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + result: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/PaginatedSignatureInfoList' + additionalProperties: false + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: object + properties: + code: + type: integer + message: + type: string + id: + type: string + jsonrpc: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: object + properties: + code: + type: integer + message: + type: string + id: + type: string + jsonrpc: + type: string + /getLatestNonVotingSignatures: + summary: getLatestNonVotingSignatures + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getLatestNonVotingSignatures + params: + type: object + properties: + cursor: + type: string + nullable: true + limit: + allOf: + - $ref: '#/components/schemas/Limit' + nullable: true + additionalProperties: false + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + properties: + error: + type: object + properties: + code: + type: integer + message: + type: string + id: + type: string + description: An ID to identify the response. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + result: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/SignatureInfoListWithError' + additionalProperties: false + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: object + properties: + code: + type: integer + message: + type: string + id: + type: string + jsonrpc: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: object + properties: + code: + type: integer + message: + type: string + id: + type: string + jsonrpc: + type: string + /getMultipleCompressedAccountProofs: + summary: getMultipleCompressedAccountProofs + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getMultipleCompressedAccountProofs + params: + type: array + items: + $ref: '#/components/schemas/Hash' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + properties: + error: + type: object + properties: + code: + type: integer + message: + type: string + id: + type: string + description: An ID to identify the response. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + result: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + type: array + items: + $ref: '#/components/schemas/GetCompressedAccountProofResponseValue' + additionalProperties: false + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: object + properties: + code: + type: integer + message: + type: string + id: + type: string + jsonrpc: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: object + properties: + code: + type: integer + message: + type: string + id: + type: string + jsonrpc: + type: string + /getMultipleCompressedAccountProofsV2: + summary: getMultipleCompressedAccountProofsV2 + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getMultipleCompressedAccountProofsV2 + params: + type: array + items: + $ref: '#/components/schemas/Hash' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + properties: + error: + type: object + properties: + code: + type: integer + message: + type: string + id: + type: string + description: An ID to identify the response. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + result: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + type: array + items: + $ref: '#/components/schemas/GetCompressedAccountProofResponseValueV2' + additionalProperties: false + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: object + properties: + code: + type: integer + message: + type: string + id: + type: string + jsonrpc: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: object + properties: + code: + type: integer + message: + type: string + id: + type: string + jsonrpc: + type: string + /getMultipleCompressedAccounts: + summary: getMultipleCompressedAccounts + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getMultipleCompressedAccounts + params: + type: object + description: Request for compressed account data + default: + addresses: null + hashes: + - 1111111QLbz7JHiBTspS962RLKV8GndWFwiEaqKM + - 1111111ogCyDbaRMvkdsHB3qfdyFYaG1WtRUAfdh + properties: + addresses: + type: array + items: + $ref: '#/components/schemas/SerializablePubkey' + nullable: true + hashes: + type: array + items: + $ref: '#/components/schemas/Hash' + nullable: true + additionalProperties: false + example: + addresses: null + hashes: + - 1111111QLbz7JHiBTspS962RLKV8GndWFwiEaqKM + - 1111111ogCyDbaRMvkdsHB3qfdyFYaG1WtRUAfdh + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + properties: + error: + type: object + properties: + code: + type: integer + message: + type: string + id: + type: string + description: An ID to identify the response. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + result: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/AccountList' + additionalProperties: false + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: object + properties: + code: + type: integer + message: + type: string + id: + type: string + jsonrpc: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: object + properties: + code: + type: integer + message: + type: string + id: + type: string + jsonrpc: + type: string + /getMultipleCompressedAccountsV2: + summary: getMultipleCompressedAccountsV2 + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getMultipleCompressedAccountsV2 + params: + type: object + description: Request for compressed account data + default: + addresses: null + hashes: + - 11111112D1oxKts8YPdTJRG5FzxTNpMtWmq8hkVx3 + - 11111112cMQwSC9qirWGjZM6gLGwW69X22mqwLLGP + properties: + addresses: + type: array + items: + $ref: '#/components/schemas/SerializablePubkey' + nullable: true + hashes: + type: array + items: + $ref: '#/components/schemas/Hash' + nullable: true + additionalProperties: false + example: + addresses: null + hashes: + - 11111112D1oxKts8YPdTJRG5FzxTNpMtWmq8hkVx3 + - 11111112cMQwSC9qirWGjZM6gLGwW69X22mqwLLGP + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + properties: + error: + type: object + properties: + code: + type: integer + message: + type: string + id: + type: string + description: An ID to identify the response. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + result: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/AccountListV2' + additionalProperties: false + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: object + properties: + code: + type: integer + message: + type: string + id: + type: string + jsonrpc: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: object + properties: + code: + type: integer + message: + type: string + id: + type: string + jsonrpc: + type: string + /getMultipleNewAddressProofs: + summary: getMultipleNewAddressProofs + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getMultipleNewAddressProofs + params: + type: array + items: + $ref: '#/components/schemas/SerializablePubkey' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + properties: + error: + type: object + properties: + code: + type: integer + message: + type: string + id: + type: string + description: An ID to identify the response. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + result: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + type: array + items: + $ref: '#/components/schemas/MerkleContextWithNewAddressProof' + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: object + properties: + code: + type: integer + message: + type: string + id: + type: string + jsonrpc: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: object + properties: + code: + type: integer + message: + type: string + id: + type: string + jsonrpc: + type: string + /getMultipleNewAddressProofsV2: + summary: getMultipleNewAddressProofsV2 + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getMultipleNewAddressProofsV2 + params: + type: array + items: + $ref: '#/components/schemas/AddressWithTree' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + properties: + error: + type: object + properties: + code: + type: integer + message: + type: string + id: + type: string + description: An ID to identify the response. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + result: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + type: array + items: + $ref: '#/components/schemas/MerkleContextWithNewAddressProof' + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: object + properties: + code: + type: integer + message: + type: string + id: + type: string + jsonrpc: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: object + properties: + code: + type: integer + message: + type: string + id: + type: string + jsonrpc: + type: string + /getQueueElements: + summary: getQueueElements + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getQueueElements + params: + type: object + required: + - tree + - numElements + - queueType + properties: + numElements: + type: integer + format: uint16 + minimum: 0 + queueType: + type: integer + format: uint8 + minimum: 0 + startOffset: + type: integer + format: uint64 + nullable: true + minimum: 0 + tree: + $ref: '#/components/schemas/Hash' + additionalProperties: false + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + properties: + error: + type: object + properties: + code: + type: integer + message: + type: string + id: + type: string + description: An ID to identify the response. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + result: + type: object + required: + - context + - value + - firstValueQueueIndex + properties: + context: + $ref: '#/components/schemas/Context' + firstValueQueueIndex: + type: integer + format: uint64 + minimum: 0 + value: + type: array + items: + $ref: '#/components/schemas/GetQueueElementsResponseValue' + additionalProperties: false + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: object + properties: + code: + type: integer + message: + type: string + id: + type: string + jsonrpc: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: object + properties: + code: + type: integer + message: + type: string + id: + type: string + jsonrpc: + type: string + /getTransactionWithCompressionInfo: + summary: getTransactionWithCompressionInfo + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getTransactionWithCompressionInfo + params: + type: object + required: + - signature + properties: + signature: + $ref: '#/components/schemas/SerializableSignature' + additionalProperties: false + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + properties: + error: + type: object + properties: + code: + type: integer + message: + type: string + id: + type: string + description: An ID to identify the response. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + result: + type: object + description: A Solana transaction with additional compression information + properties: + compression_info: + type: object + required: + - closedAccounts + - openedAccounts + properties: + closedAccounts: + type: array + items: + $ref: '#/components/schemas/AccountWithOptionalTokenData' + openedAccounts: + type: array + items: + $ref: '#/components/schemas/AccountWithOptionalTokenData' + additionalProperties: false + transaction: + type: object + description: An encoded confirmed transaction with status meta + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: object + properties: + code: + type: integer + message: + type: string + id: + type: string + jsonrpc: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: object + properties: + code: + type: integer + message: + type: string + id: + type: string + jsonrpc: + type: string + /getTransactionWithCompressionInfoV2: + summary: getTransactionWithCompressionInfoV2 + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getTransactionWithCompressionInfoV2 + params: + type: object + required: + - signature + properties: + signature: + $ref: '#/components/schemas/SerializableSignature' + additionalProperties: false + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + properties: + error: + type: object + properties: + code: + type: integer + message: + type: string + id: + type: string + description: An ID to identify the response. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + result: + type: object + description: A Solana transaction with additional compression information + properties: + compression_info: + type: object + required: + - closedAccounts + - openedAccounts + properties: + closedAccounts: + type: array + items: + $ref: '#/components/schemas/ClosedAccountWithOptionalTokenDataV2' + openedAccounts: + type: array + items: + $ref: '#/components/schemas/AccountWithOptionalTokenDataV2' + additionalProperties: false + transaction: + type: object + description: An encoded confirmed transaction with status meta + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: object + properties: + code: + type: integer + message: + type: string + id: + type: string + jsonrpc: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: object + properties: + code: + type: integer + message: + type: string + id: + type: string + jsonrpc: + type: string + /getValidityProof: + summary: getValidityProof + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getValidityProof + params: + type: object + properties: + hashes: + type: array + items: + $ref: '#/components/schemas/Hash' + newAddressesWithTrees: + type: array + items: + $ref: '#/components/schemas/AddressWithTree' + additionalProperties: false + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + properties: + error: + type: object + properties: + code: + type: integer + message: + type: string + id: + type: string + description: An ID to identify the response. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + result: + type: object + required: + - value + - context + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/CompressedProofWithContext' + additionalProperties: false + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: object + properties: + code: + type: integer + message: + type: string + id: + type: string + jsonrpc: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: object + properties: + code: + type: integer + message: + type: string + id: + type: string + jsonrpc: + type: string + /getValidityProofV2: + summary: getValidityProofV2 + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getValidityProofV2 + params: + type: object + properties: + hashes: + type: array + items: + $ref: '#/components/schemas/Hash' + newAddressesWithTrees: + type: array + items: + $ref: '#/components/schemas/AddressWithTree' + additionalProperties: false + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + properties: + error: + type: object + properties: + code: + type: integer + message: + type: string + id: + type: string + description: An ID to identify the response. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + result: + type: object + required: + - value + - context + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/CompressedProofWithContextV2' + additionalProperties: false + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: object + properties: + code: + type: integer + message: + type: string + id: + type: string + jsonrpc: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: object + properties: + code: + type: integer + message: + type: string + id: + type: string + jsonrpc: + type: string +components: + schemas: + Account: + type: object + required: + - hash + - owner + - lamports + - tree + - leafIndex + - slotCreated + properties: + address: + $ref: '#/components/schemas/SerializablePubkey' + data: + $ref: '#/components/schemas/AccountData' + hash: + $ref: '#/components/schemas/Hash' + lamports: + $ref: '#/components/schemas/UnsignedInteger' + leafIndex: + $ref: '#/components/schemas/UnsignedInteger' + owner: + $ref: '#/components/schemas/SerializablePubkey' + seq: + $ref: '#/components/schemas/UnsignedInteger' + slotCreated: + $ref: '#/components/schemas/UnsignedInteger' + tree: + $ref: '#/components/schemas/SerializablePubkey' + additionalProperties: false + AccountContext: + type: object + description: |- + This is currently used internally: + - Internal (state_updates,..) + - GetTransactionWithCompressionInfo (internally) + - GetTransactionWithCompressionInfoV2 (internally) + All endpoints return AccountV2. + required: + - queue + - inOutputQueue + - spent + - nullifiedInTree + - treeType + properties: + inOutputQueue: + type: boolean + nullifiedInTree: + type: boolean + nullifier: + $ref: '#/components/schemas/Hash' + nullifierQueueIndex: + $ref: '#/components/schemas/UnsignedInteger' + queue: + $ref: '#/components/schemas/SerializablePubkey' + spent: + type: boolean + treeType: + type: integer + format: uint16 + minimum: 0 + txHash: + $ref: '#/components/schemas/Hash' + additionalProperties: false + AccountData: + type: object + required: + - discriminator + - data + - dataHash + properties: + data: + $ref: '#/components/schemas/Base64String' + dataHash: + $ref: '#/components/schemas/Hash' + discriminator: + $ref: '#/components/schemas/UnsignedInteger' + additionalProperties: false + AccountList: + type: object + required: + - items + properties: + items: + type: array + items: + allOf: + - $ref: '#/components/schemas/Account' + nullable: true + additionalProperties: false + AccountListV2: + type: object + required: + - items + properties: + items: + type: array + items: + allOf: + - $ref: '#/components/schemas/AccountV2' + nullable: true + AccountState: + type: string + enum: + - initialized + - frozen + AccountV2: + type: object + required: + - hash + - owner + - lamports + - leafIndex + - slotCreated + - proveByIndex + - merkleContext + properties: + address: + $ref: '#/components/schemas/SerializablePubkey' + data: + $ref: '#/components/schemas/AccountData' + hash: + $ref: '#/components/schemas/Hash' + lamports: + $ref: '#/components/schemas/UnsignedInteger' + leafIndex: + $ref: '#/components/schemas/UnsignedInteger' + merkleContext: + $ref: '#/components/schemas/MerkleContextV2' + owner: + $ref: '#/components/schemas/SerializablePubkey' + proveByIndex: + type: boolean + seq: + $ref: '#/components/schemas/UnsignedInteger' + slotCreated: + $ref: '#/components/schemas/UnsignedInteger' + additionalProperties: false + AccountWithContext: + type: object + required: + - account + - context + properties: + account: + $ref: '#/components/schemas/Account' + context: + $ref: '#/components/schemas/AccountContext' + additionalProperties: false + AccountWithOptionalTokenData: + type: object + required: + - account + properties: + account: + $ref: '#/components/schemas/Account' + optionalTokenData: + $ref: '#/components/schemas/TokenData' + additionalProperties: false + AccountWithOptionalTokenDataV2: + type: object + required: + - account + properties: + account: + $ref: '#/components/schemas/AccountV2' + optionalTokenData: + $ref: '#/components/schemas/TokenData' + additionalProperties: false + AddressListWithTrees: + type: array + items: + $ref: '#/components/schemas/AddressWithTree' + AddressSeq: + type: object + required: + - address + - seq + properties: + address: + $ref: '#/components/schemas/SerializablePubkey' + seq: + type: integer + format: uint64 + minimum: 0 + additionalProperties: false + AddressWithTree: + type: object + required: + - address + - tree + properties: + address: + $ref: '#/components/schemas/SerializablePubkey' + tree: + $ref: '#/components/schemas/SerializablePubkey' + additionalProperties: false + Base58String: + type: string + description: A base 58 encoded string. + default: 3J98t1WpEZ73CNm + example: 3J98t1WpEZ73CNm + Base64String: + type: string + description: A base 64 encoded string. + default: SGVsbG8sIFdvcmxkIQ== + example: SGVsbG8sIFdvcmxkIQ== + ClosedAccountV2: + type: object + required: + - account + - nullifier + - txHash + properties: + account: + $ref: '#/components/schemas/AccountV2' + nullifier: + $ref: '#/components/schemas/Hash' + txHash: + $ref: '#/components/schemas/Hash' + additionalProperties: false + ClosedAccountWithOptionalTokenDataV2: + type: object + required: + - account + properties: + account: + $ref: '#/components/schemas/ClosedAccountV2' + optionalTokenData: + $ref: '#/components/schemas/TokenData' + additionalProperties: false + CompressedProof: + type: object + required: + - a + - b + - c + properties: + a: + type: string + format: binary + b: + type: string + format: binary + c: + type: string + format: binary + CompressedProofWithContext: + type: object + required: + - compressedProof + - roots + - rootIndices + - leafIndices + - leaves + - merkleTrees + properties: + compressedProof: + $ref: '#/components/schemas/CompressedProof' + leafIndices: + type: array + items: + type: integer + format: uint32 + minimum: 0 + leaves: + type: array + items: + type: string + merkleTrees: + type: array + items: + type: string + rootIndices: + type: array + items: + type: integer + format: uint64 + minimum: 0 + roots: + type: array + items: + type: string + CompressedProofWithContextV2: + type: object + required: + - roots + - rootIndices + - leafIndices + - leaves + - merkleContexts + properties: + compressedProof: + $ref: '#/components/schemas/CompressedProof' + leafIndices: + type: array + items: + type: integer + format: uint32 + minimum: 0 + leaves: + type: array + items: + type: string + merkleContexts: + type: array + items: + $ref: '#/components/schemas/MerkleContextV2' + rootIndices: + type: array + items: + $ref: '#/components/schemas/RootIndex' + roots: + type: array + items: + type: string + CompressionInfoV2: + type: object + required: + - closedAccounts + - openedAccounts + properties: + closedAccounts: + type: array + items: + $ref: '#/components/schemas/ClosedAccountWithOptionalTokenDataV2' + openedAccounts: + type: array + items: + $ref: '#/components/schemas/AccountWithOptionalTokenDataV2' + additionalProperties: false + Context: + type: object + required: + - slot + properties: + slot: + type: integer + format: uint64 + default: 100 + example: 100 + DataSlice: + type: object + required: + - offset + - length + properties: + length: + type: integer + minimum: 0 + offset: + type: integer + minimum: 0 + FilterSelector: + type: object + properties: + memcmp: + $ref: '#/components/schemas/Memcmp' + GetCompressedAccountProofResponseValue: + type: object + required: + - proof + - root + - leafIndex + - hash + - merkleTree + - rootSeq + properties: + hash: + $ref: '#/components/schemas/Hash' + leafIndex: + type: integer + format: uint32 + minimum: 0 + merkleTree: + $ref: '#/components/schemas/SerializablePubkey' + proof: + type: array + items: + $ref: '#/components/schemas/Hash' + root: + $ref: '#/components/schemas/Hash' + rootSeq: + type: integer + format: uint64 + minimum: 0 + additionalProperties: false + GetCompressedAccountProofResponseValueV2: + type: object + required: + - proof + - root + - leafIndex + - hash + - rootSeq + - proveByIndex + - treeContext + properties: + hash: + $ref: '#/components/schemas/Hash' + leafIndex: + type: integer + format: uint32 + minimum: 0 + proof: + type: array + items: + $ref: '#/components/schemas/Hash' + proveByIndex: + type: boolean + root: + $ref: '#/components/schemas/Hash' + rootSeq: + type: integer + format: uint64 + minimum: 0 + treeContext: + $ref: '#/components/schemas/TreeContextInfo' + additionalProperties: false + GetQueueElementsResponseValue: + type: object + required: + - proof + - root + - leafIndex + - leaf + - tree + - rootSeq + - accountHash + properties: + accountHash: + $ref: '#/components/schemas/Hash' + leaf: + $ref: '#/components/schemas/Hash' + leafIndex: + type: integer + format: uint64 + minimum: 0 + proof: + type: array + items: + $ref: '#/components/schemas/Hash' + root: + $ref: '#/components/schemas/Hash' + rootSeq: + type: integer + format: uint64 + minimum: 0 + tree: + $ref: '#/components/schemas/Hash' + txHash: + $ref: '#/components/schemas/Hash' + additionalProperties: false + Hash: + type: string + description: A 32-byte hash represented as a base58 string. + example: 11111112cMQwSC9qirWGjZM6gLGwW69X22mqwLLGP + Limit: + type: integer + format: uint64 + minimum: 0 + Memcmp: + type: object + required: + - offset + - bytes + properties: + bytes: + $ref: '#/components/schemas/Base58String' + offset: + type: integer + minimum: 0 + MerkleContextV2: + type: object + required: + - treeType + - tree + - queue + properties: + cpiContext: + $ref: '#/components/schemas/SerializablePubkey' + nextTreeContext: + $ref: '#/components/schemas/TreeContextInfo' + queue: + $ref: '#/components/schemas/SerializablePubkey' + tree: + $ref: '#/components/schemas/SerializablePubkey' + treeType: + type: integer + format: uint16 + minimum: 0 + MerkleContextWithNewAddressProof: + type: object + required: + - root + - address + - lowerRangeAddress + - higherRangeAddress + - nextIndex + - proof + - merkleTree + - rootSeq + - lowElementLeafIndex + properties: + address: + $ref: '#/components/schemas/SerializablePubkey' + higherRangeAddress: + $ref: '#/components/schemas/SerializablePubkey' + lowElementLeafIndex: + type: integer + format: uint32 + minimum: 0 + lowerRangeAddress: + $ref: '#/components/schemas/SerializablePubkey' + merkleTree: + $ref: '#/components/schemas/SerializablePubkey' + nextIndex: + type: integer + format: uint32 + minimum: 0 + proof: + type: array + items: + $ref: '#/components/schemas/Hash' + root: + $ref: '#/components/schemas/Hash' + rootSeq: + type: integer + format: uint64 + minimum: 0 + additionalProperties: false + OwnerBalance: + type: object + required: + - owner + - balance + properties: + balance: + $ref: '#/components/schemas/UnsignedInteger' + owner: + $ref: '#/components/schemas/SerializablePubkey' + OwnerBalanceList: + type: object + required: + - items + properties: + cursor: + $ref: '#/components/schemas/Base58String' + items: + type: array + items: + $ref: '#/components/schemas/OwnerBalance' + OwnerBalancesResponse: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/OwnerBalanceList' + additionalProperties: false + PaginatedAccountList: + type: object + required: + - items + properties: + cursor: + $ref: '#/components/schemas/Hash' + items: + type: array + items: + $ref: '#/components/schemas/Account' + additionalProperties: false + PaginatedAccountListV2: + type: object + required: + - items + properties: + cursor: + $ref: '#/components/schemas/Hash' + items: + type: array + items: + $ref: '#/components/schemas/AccountV2' + additionalProperties: false + PaginatedSignatureInfoList: + type: object + required: + - items + properties: + cursor: + type: string + nullable: true + items: + type: array + items: + $ref: '#/components/schemas/SignatureInfo' + RootIndex: + type: object + required: + - rootIndex + - proveByIndex + properties: + proveByIndex: + type: boolean + rootIndex: + type: integer + format: uint64 + minimum: 0 + SerializablePubkey: + type: string + description: A Solana public key represented as a base58 string. + default: 111111131h1vYVSYuKP6AhS86fbRdMw9XHiZAvAaj + example: 111111131h1vYVSYuKP6AhS86fbRdMw9XHiZAvAaj + SerializableSignature: + type: string + description: A Solana transaction signature. + default: 5J8H5sTvEhnGcB4R8K1n7mfoiWUD9RzPVGES7e3WxC7c + example: 5J8H5sTvEhnGcB4R8K1n7mfoiWUD9RzPVGES7e3WxC7c + SignatureInfo: + type: object + required: + - signature + - slot + - blockTime + properties: + blockTime: + $ref: '#/components/schemas/UnixTimestamp' + signature: + $ref: '#/components/schemas/SerializableSignature' + slot: + $ref: '#/components/schemas/UnsignedInteger' + SignatureInfoList: + type: object + required: + - items + properties: + items: + type: array + items: + $ref: '#/components/schemas/SignatureInfo' + SignatureInfoListWithError: + type: object + required: + - items + properties: + items: + type: array + items: + $ref: '#/components/schemas/SignatureInfoWithError' + SignatureInfoWithError: + type: object + required: + - signature + - slot + - blockTime + properties: + blockTime: + $ref: '#/components/schemas/UnixTimestamp' + error: + type: string + nullable: true + signature: + $ref: '#/components/schemas/SerializableSignature' + slot: + $ref: '#/components/schemas/UnsignedInteger' + TokenAccount: + type: object + required: + - account + - tokenData + properties: + account: + $ref: '#/components/schemas/Account' + tokenData: + $ref: '#/components/schemas/TokenData' + additionalProperties: false + TokenAccountBalance: + type: object + required: + - amount + properties: + amount: + $ref: '#/components/schemas/UnsignedInteger' + additionalProperties: false + TokenAccountList: + type: object + required: + - items + properties: + cursor: + $ref: '#/components/schemas/Base58String' + items: + type: array + items: + $ref: '#/components/schemas/TokenAccount' + TokenAccountListV2: + type: object + required: + - items + properties: + cursor: + $ref: '#/components/schemas/Base58String' + items: + type: array + items: + $ref: '#/components/schemas/TokenAccountV2' + TokenAccountV2: + type: object + required: + - account + - tokenData + properties: + account: + $ref: '#/components/schemas/AccountV2' + tokenData: + $ref: '#/components/schemas/TokenData' + additionalProperties: false + TokenBalance: + type: object + required: + - mint + - balance + properties: + balance: + $ref: '#/components/schemas/UnsignedInteger' + mint: + $ref: '#/components/schemas/SerializablePubkey' + TokenBalanceList: + type: object + required: + - token_balances + properties: + cursor: + $ref: '#/components/schemas/Base58String' + token_balances: + type: array + items: + $ref: '#/components/schemas/TokenBalance' + TokenBalanceListV2: + type: object + required: + - items + properties: + cursor: + $ref: '#/components/schemas/Base58String' + items: + type: array + items: + $ref: '#/components/schemas/TokenBalance' + TokenData: + type: object + required: + - mint + - owner + - amount + - state + properties: + amount: + $ref: '#/components/schemas/UnsignedInteger' + delegate: + $ref: '#/components/schemas/SerializablePubkey' + mint: + $ref: '#/components/schemas/SerializablePubkey' + owner: + $ref: '#/components/schemas/SerializablePubkey' + state: + $ref: '#/components/schemas/AccountState' + tlv: + $ref: '#/components/schemas/Base64String' + TreeContextInfo: + type: object + required: + - treeType + - tree + - queue + properties: + cpiContext: + $ref: '#/components/schemas/SerializablePubkey' + queue: + $ref: '#/components/schemas/SerializablePubkey' + tree: + $ref: '#/components/schemas/SerializablePubkey' + treeType: + type: integer + format: uint16 + minimum: 0 + UnixTimestamp: + type: integer + description: An Unix timestamp (seconds) + default: 1714081554 + example: 1714081554 + UnsignedInteger: + type: integer + format: uint64 + default: 100 + example: 100 diff --git a/src/openapi/specs/getCompressedAccount.yaml b/src/openapi/specs/getCompressedAccount.yaml index f7b529df..5c8a72c2 100644 --- a/src/openapi/specs/getCompressedAccount.yaml +++ b/src/openapi/specs/getCompressedAccount.yaml @@ -8,7 +8,7 @@ info: servers: - url: https://mainnet.helius-rpc.com?api-key= paths: - /: + /getCompressedAccount: summary: getCompressedAccount post: requestBody: diff --git a/src/openapi/specs/getCompressedAccountsByOwner.yaml b/src/openapi/specs/getCompressedAccountsByOwner.yaml index 0a33557e..fed347a9 100644 --- a/src/openapi/specs/getCompressedAccountsByOwner.yaml +++ b/src/openapi/specs/getCompressedAccountsByOwner.yaml @@ -8,7 +8,231 @@ info: servers: - url: https://mainnet.helius-rpc.com?api-key= paths: - /: + /getCompressedAccount: + summary: getCompressedAccount + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getCompressedAccount + params: + type: object + description: Request for compressed account data + default: + address: null + hash: '11111111111111111111111111111111' + properties: + address: + allOf: + - $ref: '#/components/schemas/SerializablePubkey' + nullable: true + hash: + allOf: + - $ref: '#/components/schemas/Hash' + nullable: true + additionalProperties: false + example: + address: null + hash: '11111111111111111111111111111111' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/Account' + '400': + description: Invalid request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '401': + description: Unauthorized request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '403': + description: Request was forbidden. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '404': + description: The specified resource was not found. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + /getCompressedAccountProof: + summary: getCompressedAccountProof + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getCompressedAccountProof + params: + type: object + required: + - hash + properties: + hash: + $ref: '#/components/schemas/Hash' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/MerkleProofWithContext' + '400': + description: Invalid request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '401': + description: Unauthorized request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '403': + description: Request was forbidden. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '404': + description: The specified resource was not found. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + /getCompressedAccountsByOwner: summary: getCompressedAccountsByOwner post: requestBody: @@ -96,6 +320,349 @@ paths: properties: error: type: string + /getCompressedTokenAccountsByDelegate: + summary: getCompressedTokenAccountsByDelegate + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getCompressedTokenAccountsByDelegate + params: + type: object + required: + - delegate + properties: + cursor: + allOf: + - $ref: '#/components/schemas/Base58String' + nullable: true + delegate: + $ref: '#/components/schemas/SerializablePubkey' + limit: + allOf: + - $ref: '#/components/schemas/Limit' + nullable: true + mint: + allOf: + - $ref: '#/components/schemas/SerializablePubkey' + nullable: true + additionalProperties: false + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/TokenAccountList' + '400': + description: Invalid request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '401': + description: Unauthorized request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '403': + description: Request was forbidden. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '404': + description: The specified resource was not found. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + /getCompressedTokenAccountsByOwner: + summary: getCompressedTokenAccountsByOwner + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getCompressedTokenAccountsByOwner + params: + type: object + required: + - owner + properties: + cursor: + allOf: + - $ref: '#/components/schemas/Base58String' + nullable: true + limit: + allOf: + - $ref: '#/components/schemas/Limit' + nullable: true + mint: + allOf: + - $ref: '#/components/schemas/SerializablePubkey' + nullable: true + owner: + $ref: '#/components/schemas/SerializablePubkey' + additionalProperties: false + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/TokenAccountList' + '400': + description: Invalid request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '401': + description: Unauthorized request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '403': + description: Request was forbidden. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '404': + description: The specified resource was not found. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + /getMultipleCompressedAccountProofs: + summary: getMultipleCompressedAccountProofs + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getMultipleCompressedAccountProofs + params: + type: array + items: + $ref: '#/components/schemas/Hash' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + type: array + items: + $ref: '#/components/schemas/MerkleProofWithContext' + '400': + description: Invalid request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '401': + description: Unauthorized request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '403': + description: Request was forbidden. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '404': + description: The specified resource was not found. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: string components: schemas: Account: diff --git a/src/openapi/specs/getCompressedBalanceByOwner.yaml b/src/openapi/specs/getCompressedBalanceByOwner.yaml index 7c7e92e1..5262bc87 100644 --- a/src/openapi/specs/getCompressedBalanceByOwner.yaml +++ b/src/openapi/specs/getCompressedBalanceByOwner.yaml @@ -8,7 +8,464 @@ info: servers: - url: https://mainnet.helius-rpc.com?api-key= paths: - /: + /getCompressedAccount: + summary: getCompressedAccount + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getCompressedAccount + params: + type: object + description: Request for compressed account data + default: + address: null + hash: '11111111111111111111111111111111' + properties: + address: + allOf: + - $ref: '#/components/schemas/SerializablePubkey' + nullable: true + hash: + allOf: + - $ref: '#/components/schemas/Hash' + nullable: true + additionalProperties: false + example: + address: null + hash: '11111111111111111111111111111111' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/Account' + '400': + description: Invalid request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '401': + description: Unauthorized request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '403': + description: Request was forbidden. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '404': + description: The specified resource was not found. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + /getCompressedAccountProof: + summary: getCompressedAccountProof + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getCompressedAccountProof + params: + type: object + required: + - hash + properties: + hash: + $ref: '#/components/schemas/Hash' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/MerkleProofWithContext' + '400': + description: Invalid request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '401': + description: Unauthorized request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '403': + description: Request was forbidden. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '404': + description: The specified resource was not found. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + /getCompressedAccountsByOwner: + summary: getCompressedAccountsByOwner + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getCompressedAccountsByOwner + params: + type: object + required: + - owner + properties: + cursor: + allOf: + - $ref: '#/components/schemas/Hash' + nullable: true + limit: + allOf: + - $ref: '#/components/schemas/Limit' + nullable: true + owner: + $ref: '#/components/schemas/SerializablePubkey' + additionalProperties: false + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/PaginatedAccountList' + '400': + description: Invalid request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '401': + description: Unauthorized request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '403': + description: Request was forbidden. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '404': + description: The specified resource was not found. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + /getCompressedBalance: + summary: getCompressedBalance + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getCompressedBalance + params: + type: object + description: Request for compressed account data + default: + address: null + hash: '11111111111111111111111111111111' + properties: + address: + allOf: + - $ref: '#/components/schemas/SerializablePubkey' + nullable: true + hash: + allOf: + - $ref: '#/components/schemas/Hash' + nullable: true + additionalProperties: false + example: + address: null + hash: '11111111111111111111111111111111' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/UnsignedInteger' + '400': + description: Invalid request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '401': + description: Unauthorized request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '403': + description: Request was forbidden. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '404': + description: The specified resource was not found. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + /getCompressedBalanceByOwner: summary: getCompressedBalanceByOwner post: requestBody: @@ -36,14 +493,335 @@ paths: type: string description: The name of the method to invoke. enum: - - getCompressedBalanceByOwner + - getCompressedBalanceByOwner + params: + type: object + required: + - owner + properties: + owner: + $ref: '#/components/schemas/SerializablePubkey' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/UnsignedInteger' + additionalProperties: false + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + /getCompressedTokenAccountBalance: + summary: getCompressedTokenAccountBalance + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getCompressedTokenAccountBalance + params: + type: object + description: Request for compressed account data + default: + address: null + hash: '11111111111111111111111111111111' + properties: + address: + allOf: + - $ref: '#/components/schemas/SerializablePubkey' + nullable: true + hash: + allOf: + - $ref: '#/components/schemas/Hash' + nullable: true + additionalProperties: false + example: + address: null + hash: '11111111111111111111111111111111' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/TokenAccountBalance' + '400': + description: Invalid request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '401': + description: Unauthorized request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '403': + description: Request was forbidden. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '404': + description: The specified resource was not found. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + /getCompressedTokenAccountsByDelegate: + summary: getCompressedTokenAccountsByDelegate + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getCompressedTokenAccountsByDelegate + params: + type: object + required: + - delegate + properties: + cursor: + allOf: + - $ref: '#/components/schemas/Base58String' + nullable: true + delegate: + $ref: '#/components/schemas/SerializablePubkey' + limit: + allOf: + - $ref: '#/components/schemas/Limit' + nullable: true + mint: + allOf: + - $ref: '#/components/schemas/SerializablePubkey' + nullable: true + additionalProperties: false + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/TokenAccountList' + '400': + description: Invalid request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '401': + description: Unauthorized request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '403': + description: Request was forbidden. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '404': + description: The specified resource was not found. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + /getCompressedTokenAccountsByOwner: + summary: getCompressedTokenAccountsByOwner + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getCompressedTokenAccountsByOwner params: type: object required: - owner properties: + cursor: + allOf: + - $ref: '#/components/schemas/Base58String' + nullable: true + limit: + allOf: + - $ref: '#/components/schemas/Limit' + nullable: true + mint: + allOf: + - $ref: '#/components/schemas/SerializablePubkey' + nullable: true owner: $ref: '#/components/schemas/SerializablePubkey' + additionalProperties: false required: true responses: '200': @@ -59,8 +837,272 @@ paths: context: $ref: '#/components/schemas/Context' value: - $ref: '#/components/schemas/UnsignedInteger' - additionalProperties: false + $ref: '#/components/schemas/TokenAccountList' + '400': + description: Invalid request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '401': + description: Unauthorized request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '403': + description: Request was forbidden. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '404': + description: The specified resource was not found. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + /getMultipleCompressedAccountProofs: + summary: getMultipleCompressedAccountProofs + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getMultipleCompressedAccountProofs + params: + type: array + items: + $ref: '#/components/schemas/Hash' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + type: array + items: + $ref: '#/components/schemas/MerkleProofWithContext' + '400': + description: Invalid request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '401': + description: Unauthorized request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '403': + description: Request was forbidden. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '404': + description: The specified resource was not found. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + /getMultipleCompressedAccounts: + summary: getMultipleCompressedAccounts + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getMultipleCompressedAccounts + params: + type: object + description: Request for compressed account data + default: + addresses: null + hashes: + - 1111111QLbz7JHiBTspS962RLKV8GndWFwiEaqKM + - 1111111ogCyDbaRMvkdsHB3qfdyFYaG1WtRUAfdh + properties: + addresses: + type: array + items: + $ref: '#/components/schemas/SerializablePubkey' + nullable: true + hashes: + type: array + items: + $ref: '#/components/schemas/Hash' + nullable: true + additionalProperties: false + example: + addresses: null + hashes: + - 1111111QLbz7JHiBTspS962RLKV8GndWFwiEaqKM + - 1111111ogCyDbaRMvkdsHB3qfdyFYaG1WtRUAfdh + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/AccountList' + '400': + description: Invalid request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '401': + description: Unauthorized request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '403': + description: Request was forbidden. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '404': + description: The specified resource was not found. + content: + application/json: + schema: + type: object + properties: + error: + type: string '429': description: Exceeded rate limit. content: diff --git a/src/openapi/specs/getCompressedTokenAccountBalance.yaml b/src/openapi/specs/getCompressedTokenAccountBalance.yaml index 252f4dcb..e7e98873 100644 --- a/src/openapi/specs/getCompressedTokenAccountBalance.yaml +++ b/src/openapi/specs/getCompressedTokenAccountBalance.yaml @@ -8,8 +8,8 @@ info: servers: - url: https://mainnet.helius-rpc.com?api-key= paths: - /: - summary: getCompressedTokenAccountBalance + /getCompressedAccount: + summary: getCompressedAccount post: requestBody: content: @@ -36,7 +36,7 @@ paths: type: string description: The name of the method to invoke. enum: - - getCompressedTokenAccountBalance + - getCompressedAccount params: type: object description: Request for compressed account data @@ -71,8 +71,814 @@ paths: context: $ref: '#/components/schemas/Context' value: - $ref: '#/components/schemas/TokenAccountBalance' - additionalProperties: false + $ref: '#/components/schemas/Account' + '400': + description: Invalid request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '401': + description: Unauthorized request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '403': + description: Request was forbidden. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '404': + description: The specified resource was not found. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + /getCompressedAccountProof: + summary: getCompressedAccountProof + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getCompressedAccountProof + params: + type: object + required: + - hash + properties: + hash: + $ref: '#/components/schemas/Hash' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/MerkleProofWithContext' + '400': + description: Invalid request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '401': + description: Unauthorized request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '403': + description: Request was forbidden. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '404': + description: The specified resource was not found. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + /getCompressedAccountsByOwner: + summary: getCompressedAccountsByOwner + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getCompressedAccountsByOwner + params: + type: object + required: + - owner + properties: + cursor: + allOf: + - $ref: '#/components/schemas/Hash' + nullable: true + limit: + allOf: + - $ref: '#/components/schemas/Limit' + nullable: true + owner: + $ref: '#/components/schemas/SerializablePubkey' + additionalProperties: false + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/PaginatedAccountList' + '400': + description: Invalid request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '401': + description: Unauthorized request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '403': + description: Request was forbidden. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '404': + description: The specified resource was not found. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + /getCompressedTokenAccountBalance: + summary: getCompressedTokenAccountBalance + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getCompressedTokenAccountBalance + params: + type: object + description: Request for compressed account data + default: + address: null + hash: '11111111111111111111111111111111' + properties: + address: + allOf: + - $ref: '#/components/schemas/SerializablePubkey' + nullable: true + hash: + allOf: + - $ref: '#/components/schemas/Hash' + nullable: true + additionalProperties: false + example: + address: null + hash: '11111111111111111111111111111111' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/TokenAccountBalance' + additionalProperties: false + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + /getCompressedTokenAccountsByDelegate: + summary: getCompressedTokenAccountsByDelegate + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getCompressedTokenAccountsByDelegate + params: + type: object + required: + - delegate + properties: + cursor: + allOf: + - $ref: '#/components/schemas/Base58String' + nullable: true + delegate: + $ref: '#/components/schemas/SerializablePubkey' + limit: + allOf: + - $ref: '#/components/schemas/Limit' + nullable: true + mint: + allOf: + - $ref: '#/components/schemas/SerializablePubkey' + nullable: true + additionalProperties: false + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/TokenAccountList' + '400': + description: Invalid request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '401': + description: Unauthorized request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '403': + description: Request was forbidden. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '404': + description: The specified resource was not found. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + /getCompressedTokenAccountsByOwner: + summary: getCompressedTokenAccountsByOwner + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getCompressedTokenAccountsByOwner + params: + type: object + required: + - owner + properties: + cursor: + allOf: + - $ref: '#/components/schemas/Base58String' + nullable: true + limit: + allOf: + - $ref: '#/components/schemas/Limit' + nullable: true + mint: + allOf: + - $ref: '#/components/schemas/SerializablePubkey' + nullable: true + owner: + $ref: '#/components/schemas/SerializablePubkey' + additionalProperties: false + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/TokenAccountList' + '400': + description: Invalid request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '401': + description: Unauthorized request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '403': + description: Request was forbidden. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '404': + description: The specified resource was not found. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + /getMultipleCompressedAccountProofs: + summary: getMultipleCompressedAccountProofs + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getMultipleCompressedAccountProofs + params: + type: array + items: + $ref: '#/components/schemas/Hash' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + type: array + items: + $ref: '#/components/schemas/MerkleProofWithContext' + '400': + description: Invalid request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '401': + description: Unauthorized request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '403': + description: Request was forbidden. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '404': + description: The specified resource was not found. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + /getMultipleCompressedAccounts: + summary: getMultipleCompressedAccounts + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getMultipleCompressedAccounts + params: + type: object + description: Request for compressed account data + default: + addresses: null + hashes: + - 1111111QLbz7JHiBTspS962RLKV8GndWFwiEaqKM + - 1111111ogCyDbaRMvkdsHB3qfdyFYaG1WtRUAfdh + properties: + addresses: + type: array + items: + $ref: '#/components/schemas/SerializablePubkey' + nullable: true + hashes: + type: array + items: + $ref: '#/components/schemas/Hash' + nullable: true + additionalProperties: false + example: + addresses: null + hashes: + - 1111111QLbz7JHiBTspS962RLKV8GndWFwiEaqKM + - 1111111ogCyDbaRMvkdsHB3qfdyFYaG1WtRUAfdh + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/AccountList' + '400': + description: Invalid request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '401': + description: Unauthorized request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '403': + description: Request was forbidden. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '404': + description: The specified resource was not found. + content: + application/json: + schema: + type: object + properties: + error: + type: string '429': description: Exceeded rate limit. content: diff --git a/src/openapi/specs/getCompressedTokenAccountsByDelegate.yaml b/src/openapi/specs/getCompressedTokenAccountsByDelegate.yaml index b5f8a0e2..9f1e56d6 100644 --- a/src/openapi/specs/getCompressedTokenAccountsByDelegate.yaml +++ b/src/openapi/specs/getCompressedTokenAccountsByDelegate.yaml @@ -8,7 +8,231 @@ info: servers: - url: https://mainnet.helius-rpc.com?api-key= paths: - /: + /getCompressedAccount: + summary: getCompressedAccount + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getCompressedAccount + params: + type: object + description: Request for compressed account data + default: + address: null + hash: '11111111111111111111111111111111' + properties: + address: + allOf: + - $ref: '#/components/schemas/SerializablePubkey' + nullable: true + hash: + allOf: + - $ref: '#/components/schemas/Hash' + nullable: true + additionalProperties: false + example: + address: null + hash: '11111111111111111111111111111111' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/Account' + '400': + description: Invalid request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '401': + description: Unauthorized request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '403': + description: Request was forbidden. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '404': + description: The specified resource was not found. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + /getCompressedAccountProof: + summary: getCompressedAccountProof + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getCompressedAccountProof + params: + type: object + required: + - hash + properties: + hash: + $ref: '#/components/schemas/Hash' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/MerkleProofWithContext' + '400': + description: Invalid request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '401': + description: Unauthorized request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '403': + description: Request was forbidden. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '404': + description: The specified resource was not found. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + /getCompressedTokenAccountsByDelegate: summary: getCompressedTokenAccountsByDelegate post: requestBody: @@ -92,6 +316,230 @@ paths: properties: error: type: string + /getCompressedTokenAccountsByOwner: + summary: getCompressedTokenAccountsByOwner + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getCompressedTokenAccountsByOwner + params: + type: object + required: + - owner + properties: + cursor: + allOf: + - $ref: '#/components/schemas/Base58String' + nullable: true + limit: + allOf: + - $ref: '#/components/schemas/Limit' + nullable: true + mint: + allOf: + - $ref: '#/components/schemas/SerializablePubkey' + nullable: true + owner: + $ref: '#/components/schemas/SerializablePubkey' + additionalProperties: false + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/TokenAccountList' + '400': + description: Invalid request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '401': + description: Unauthorized request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '403': + description: Request was forbidden. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '404': + description: The specified resource was not found. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + /getMultipleCompressedAccountProofs: + summary: getMultipleCompressedAccountProofs + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getMultipleCompressedAccountProofs + params: + type: array + items: + $ref: '#/components/schemas/Hash' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + type: array + items: + $ref: '#/components/schemas/MerkleProofWithContext' + '400': + description: Invalid request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '401': + description: Unauthorized request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '403': + description: Request was forbidden. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '404': + description: The specified resource was not found. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: string components: schemas: Account: diff --git a/src/openapi/specs/getCompressedTokenAccountsByOwner.yaml b/src/openapi/specs/getCompressedTokenAccountsByOwner.yaml index 4a9b2271..a7ec38b5 100644 --- a/src/openapi/specs/getCompressedTokenAccountsByOwner.yaml +++ b/src/openapi/specs/getCompressedTokenAccountsByOwner.yaml @@ -8,7 +8,231 @@ info: servers: - url: https://mainnet.helius-rpc.com?api-key= paths: - /: + /getCompressedAccount: + summary: getCompressedAccount + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getCompressedAccount + params: + type: object + description: Request for compressed account data + default: + address: null + hash: '11111111111111111111111111111111' + properties: + address: + allOf: + - $ref: '#/components/schemas/SerializablePubkey' + nullable: true + hash: + allOf: + - $ref: '#/components/schemas/Hash' + nullable: true + additionalProperties: false + example: + address: null + hash: '11111111111111111111111111111111' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/Account' + '400': + description: Invalid request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '401': + description: Unauthorized request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '403': + description: Request was forbidden. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '404': + description: The specified resource was not found. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + /getCompressedAccountProof: + summary: getCompressedAccountProof + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getCompressedAccountProof + params: + type: object + required: + - hash + properties: + hash: + $ref: '#/components/schemas/Hash' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/MerkleProofWithContext' + '400': + description: Invalid request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '401': + description: Unauthorized request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '403': + description: Request was forbidden. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '404': + description: The specified resource was not found. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + /getCompressedTokenAccountsByOwner: summary: getCompressedTokenAccountsByOwner post: requestBody: @@ -92,6 +316,111 @@ paths: properties: error: type: string + /getMultipleCompressedAccountProofs: + summary: getMultipleCompressedAccountProofs + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getMultipleCompressedAccountProofs + params: + type: array + items: + $ref: '#/components/schemas/Hash' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + type: array + items: + $ref: '#/components/schemas/MerkleProofWithContext' + '400': + description: Invalid request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '401': + description: Unauthorized request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '403': + description: Request was forbidden. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '404': + description: The specified resource was not found. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: string components: schemas: Account: diff --git a/src/openapi/specs/getCompressedTokenBalancesByOwner.yaml b/src/openapi/specs/getCompressedTokenBalancesByOwner.yaml index 9ca37287..5ea55809 100644 --- a/src/openapi/specs/getCompressedTokenBalancesByOwner.yaml +++ b/src/openapi/specs/getCompressedTokenBalancesByOwner.yaml @@ -8,7 +8,926 @@ info: servers: - url: https://mainnet.helius-rpc.com?api-key= paths: - /: + /getCompressedAccount: + summary: getCompressedAccount + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getCompressedAccount + params: + type: object + description: Request for compressed account data + default: + address: null + hash: '11111111111111111111111111111111' + properties: + address: + allOf: + - $ref: '#/components/schemas/SerializablePubkey' + nullable: true + hash: + allOf: + - $ref: '#/components/schemas/Hash' + nullable: true + additionalProperties: false + example: + address: null + hash: '11111111111111111111111111111111' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/Account' + '400': + description: Invalid request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '401': + description: Unauthorized request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '403': + description: Request was forbidden. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '404': + description: The specified resource was not found. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + /getCompressedAccountProof: + summary: getCompressedAccountProof + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getCompressedAccountProof + params: + type: object + required: + - hash + properties: + hash: + $ref: '#/components/schemas/Hash' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/MerkleProofWithContext' + '400': + description: Invalid request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '401': + description: Unauthorized request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '403': + description: Request was forbidden. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '404': + description: The specified resource was not found. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + /getCompressedAccountsByOwner: + summary: getCompressedAccountsByOwner + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getCompressedAccountsByOwner + params: + type: object + required: + - owner + properties: + cursor: + allOf: + - $ref: '#/components/schemas/Hash' + nullable: true + limit: + allOf: + - $ref: '#/components/schemas/Limit' + nullable: true + owner: + $ref: '#/components/schemas/SerializablePubkey' + additionalProperties: false + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/PaginatedAccountList' + '400': + description: Invalid request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '401': + description: Unauthorized request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '403': + description: Request was forbidden. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '404': + description: The specified resource was not found. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + /getCompressedBalance: + summary: getCompressedBalance + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getCompressedBalance + params: + type: object + description: Request for compressed account data + default: + address: null + hash: '11111111111111111111111111111111' + properties: + address: + allOf: + - $ref: '#/components/schemas/SerializablePubkey' + nullable: true + hash: + allOf: + - $ref: '#/components/schemas/Hash' + nullable: true + additionalProperties: false + example: + address: null + hash: '11111111111111111111111111111111' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/UnsignedInteger' + '400': + description: Invalid request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '401': + description: Unauthorized request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '403': + description: Request was forbidden. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '404': + description: The specified resource was not found. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + /getCompressedBalanceByOwner: + summary: getCompressedBalanceByOwner + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getCompressedBalanceByOwner + params: + type: object + required: + - owner + properties: + owner: + $ref: '#/components/schemas/SerializablePubkey' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/UnsignedInteger' + '400': + description: Invalid request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '401': + description: Unauthorized request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '403': + description: Request was forbidden. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '404': + description: The specified resource was not found. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + /getCompressedTokenAccountBalance: + summary: getCompressedTokenAccountBalance + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getCompressedTokenAccountBalance + params: + type: object + description: Request for compressed account data + default: + address: null + hash: '11111111111111111111111111111111' + properties: + address: + allOf: + - $ref: '#/components/schemas/SerializablePubkey' + nullable: true + hash: + allOf: + - $ref: '#/components/schemas/Hash' + nullable: true + additionalProperties: false + example: + address: null + hash: '11111111111111111111111111111111' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/TokenAccountBalance' + '400': + description: Invalid request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '401': + description: Unauthorized request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '403': + description: Request was forbidden. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '404': + description: The specified resource was not found. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + /getCompressedTokenAccountsByDelegate: + summary: getCompressedTokenAccountsByDelegate + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getCompressedTokenAccountsByDelegate + params: + type: object + required: + - delegate + properties: + cursor: + allOf: + - $ref: '#/components/schemas/Base58String' + nullable: true + delegate: + $ref: '#/components/schemas/SerializablePubkey' + limit: + allOf: + - $ref: '#/components/schemas/Limit' + nullable: true + mint: + allOf: + - $ref: '#/components/schemas/SerializablePubkey' + nullable: true + additionalProperties: false + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/TokenAccountList' + '400': + description: Invalid request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '401': + description: Unauthorized request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '403': + description: Request was forbidden. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '404': + description: The specified resource was not found. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + /getCompressedTokenAccountsByOwner: + summary: getCompressedTokenAccountsByOwner + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getCompressedTokenAccountsByOwner + params: + type: object + required: + - owner + properties: + cursor: + allOf: + - $ref: '#/components/schemas/Base58String' + nullable: true + limit: + allOf: + - $ref: '#/components/schemas/Limit' + nullable: true + mint: + allOf: + - $ref: '#/components/schemas/SerializablePubkey' + nullable: true + owner: + $ref: '#/components/schemas/SerializablePubkey' + additionalProperties: false + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/TokenAccountList' + '400': + description: Invalid request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '401': + description: Unauthorized request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '403': + description: Request was forbidden. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '404': + description: The specified resource was not found. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + /getCompressedTokenBalancesByOwner: summary: getCompressedTokenBalancesByOwner post: requestBody: @@ -92,6 +1011,235 @@ paths: properties: error: type: string + /getMultipleCompressedAccountProofs: + summary: getMultipleCompressedAccountProofs + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getMultipleCompressedAccountProofs + params: + type: array + items: + $ref: '#/components/schemas/Hash' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + type: array + items: + $ref: '#/components/schemas/MerkleProofWithContext' + '400': + description: Invalid request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '401': + description: Unauthorized request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '403': + description: Request was forbidden. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '404': + description: The specified resource was not found. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + /getMultipleCompressedAccounts: + summary: getMultipleCompressedAccounts + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getMultipleCompressedAccounts + params: + type: object + description: Request for compressed account data + default: + addresses: null + hashes: + - 1111111QLbz7JHiBTspS962RLKV8GndWFwiEaqKM + - 1111111ogCyDbaRMvkdsHB3qfdyFYaG1WtRUAfdh + properties: + addresses: + type: array + items: + $ref: '#/components/schemas/SerializablePubkey' + nullable: true + hashes: + type: array + items: + $ref: '#/components/schemas/Hash' + nullable: true + additionalProperties: false + example: + addresses: null + hashes: + - 1111111QLbz7JHiBTspS962RLKV8GndWFwiEaqKM + - 1111111ogCyDbaRMvkdsHB3qfdyFYaG1WtRUAfdh + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/AccountList' + '400': + description: Invalid request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '401': + description: Unauthorized request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '403': + description: Request was forbidden. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '404': + description: The specified resource was not found. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: string components: schemas: Base58String: diff --git a/src/openapi/specs/getCompressionSignaturesForAccount.yaml b/src/openapi/specs/getCompressionSignaturesForAccount.yaml index e62acecf..e73a2d12 100644 --- a/src/openapi/specs/getCompressionSignaturesForAccount.yaml +++ b/src/openapi/specs/getCompressionSignaturesForAccount.yaml @@ -8,8 +8,8 @@ info: servers: - url: https://mainnet.helius-rpc.com?api-key= paths: - /: - summary: getCompressionSignaturesForAccount + /getCompressedAccount: + summary: getCompressedAccount post: requestBody: content: @@ -36,7 +36,125 @@ paths: type: string description: The name of the method to invoke. enum: - - getCompressionSignaturesForAccount + - getCompressedAccount + params: + type: object + description: Request for compressed account data + default: + address: null + hash: '11111111111111111111111111111111' + properties: + address: + allOf: + - $ref: '#/components/schemas/SerializablePubkey' + nullable: true + hash: + allOf: + - $ref: '#/components/schemas/Hash' + nullable: true + additionalProperties: false + example: + address: null + hash: '11111111111111111111111111111111' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/Account' + '400': + description: Invalid request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '401': + description: Unauthorized request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '403': + description: Request was forbidden. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '404': + description: The specified resource was not found. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + /getCompressedAccountProof: + summary: getCompressedAccountProof + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getCompressedAccountProof params: type: object required: @@ -59,8 +177,1273 @@ paths: context: $ref: '#/components/schemas/Context' value: - $ref: '#/components/schemas/SignatureInfoList' - additionalProperties: false + $ref: '#/components/schemas/MerkleProofWithContext' + '400': + description: Invalid request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '401': + description: Unauthorized request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '403': + description: Request was forbidden. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '404': + description: The specified resource was not found. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + /getCompressedAccountsByOwner: + summary: getCompressedAccountsByOwner + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getCompressedAccountsByOwner + params: + type: object + required: + - owner + properties: + cursor: + allOf: + - $ref: '#/components/schemas/Hash' + nullable: true + limit: + allOf: + - $ref: '#/components/schemas/Limit' + nullable: true + owner: + $ref: '#/components/schemas/SerializablePubkey' + additionalProperties: false + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/PaginatedAccountList' + '400': + description: Invalid request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '401': + description: Unauthorized request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '403': + description: Request was forbidden. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '404': + description: The specified resource was not found. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + /getCompressedBalance: + summary: getCompressedBalance + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getCompressedBalance + params: + type: object + description: Request for compressed account data + default: + address: null + hash: '11111111111111111111111111111111' + properties: + address: + allOf: + - $ref: '#/components/schemas/SerializablePubkey' + nullable: true + hash: + allOf: + - $ref: '#/components/schemas/Hash' + nullable: true + additionalProperties: false + example: + address: null + hash: '11111111111111111111111111111111' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/UnsignedInteger' + '400': + description: Invalid request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '401': + description: Unauthorized request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '403': + description: Request was forbidden. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '404': + description: The specified resource was not found. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + /getCompressedBalanceByOwner: + summary: getCompressedBalanceByOwner + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getCompressedBalanceByOwner + params: + type: object + required: + - owner + properties: + owner: + $ref: '#/components/schemas/SerializablePubkey' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/UnsignedInteger' + '400': + description: Invalid request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '401': + description: Unauthorized request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '403': + description: Request was forbidden. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '404': + description: The specified resource was not found. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + /getCompressedTokenAccountBalance: + summary: getCompressedTokenAccountBalance + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getCompressedTokenAccountBalance + params: + type: object + description: Request for compressed account data + default: + address: null + hash: '11111111111111111111111111111111' + properties: + address: + allOf: + - $ref: '#/components/schemas/SerializablePubkey' + nullable: true + hash: + allOf: + - $ref: '#/components/schemas/Hash' + nullable: true + additionalProperties: false + example: + address: null + hash: '11111111111111111111111111111111' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/TokenAccountBalance' + '400': + description: Invalid request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '401': + description: Unauthorized request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '403': + description: Request was forbidden. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '404': + description: The specified resource was not found. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + /getCompressedTokenAccountsByDelegate: + summary: getCompressedTokenAccountsByDelegate + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getCompressedTokenAccountsByDelegate + params: + type: object + required: + - delegate + properties: + cursor: + allOf: + - $ref: '#/components/schemas/Base58String' + nullable: true + delegate: + $ref: '#/components/schemas/SerializablePubkey' + limit: + allOf: + - $ref: '#/components/schemas/Limit' + nullable: true + mint: + allOf: + - $ref: '#/components/schemas/SerializablePubkey' + nullable: true + additionalProperties: false + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/TokenAccountList' + '400': + description: Invalid request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '401': + description: Unauthorized request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '403': + description: Request was forbidden. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '404': + description: The specified resource was not found. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + /getCompressedTokenAccountsByOwner: + summary: getCompressedTokenAccountsByOwner + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getCompressedTokenAccountsByOwner + params: + type: object + required: + - owner + properties: + cursor: + allOf: + - $ref: '#/components/schemas/Base58String' + nullable: true + limit: + allOf: + - $ref: '#/components/schemas/Limit' + nullable: true + mint: + allOf: + - $ref: '#/components/schemas/SerializablePubkey' + nullable: true + owner: + $ref: '#/components/schemas/SerializablePubkey' + additionalProperties: false + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/TokenAccountList' + '400': + description: Invalid request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '401': + description: Unauthorized request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '403': + description: Request was forbidden. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '404': + description: The specified resource was not found. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + /getCompressedTokenBalancesByOwner: + summary: getCompressedTokenBalancesByOwner + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getCompressedTokenBalancesByOwner + params: + type: object + required: + - owner + properties: + cursor: + allOf: + - $ref: '#/components/schemas/Base58String' + nullable: true + limit: + allOf: + - $ref: '#/components/schemas/Limit' + nullable: true + mint: + allOf: + - $ref: '#/components/schemas/SerializablePubkey' + nullable: true + owner: + $ref: '#/components/schemas/SerializablePubkey' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/TokenBalanceList' + '400': + description: Invalid request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '401': + description: Unauthorized request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '403': + description: Request was forbidden. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '404': + description: The specified resource was not found. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + /getCompressionSignaturesForAccount: + summary: getCompressionSignaturesForAccount + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getCompressionSignaturesForAccount + params: + type: object + required: + - hash + properties: + hash: + $ref: '#/components/schemas/Hash' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/SignatureInfoList' + additionalProperties: false + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + /getMultipleCompressedAccountProofs: + summary: getMultipleCompressedAccountProofs + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getMultipleCompressedAccountProofs + params: + type: array + items: + $ref: '#/components/schemas/Hash' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + type: array + items: + $ref: '#/components/schemas/MerkleProofWithContext' + '400': + description: Invalid request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '401': + description: Unauthorized request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '403': + description: Request was forbidden. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '404': + description: The specified resource was not found. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + /getMultipleCompressedAccounts: + summary: getMultipleCompressedAccounts + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getMultipleCompressedAccounts + params: + type: object + description: Request for compressed account data + default: + addresses: null + hashes: + - 1111111QLbz7JHiBTspS962RLKV8GndWFwiEaqKM + - 1111111ogCyDbaRMvkdsHB3qfdyFYaG1WtRUAfdh + properties: + addresses: + type: array + items: + $ref: '#/components/schemas/SerializablePubkey' + nullable: true + hashes: + type: array + items: + $ref: '#/components/schemas/Hash' + nullable: true + additionalProperties: false + example: + addresses: null + hashes: + - 1111111QLbz7JHiBTspS962RLKV8GndWFwiEaqKM + - 1111111ogCyDbaRMvkdsHB3qfdyFYaG1WtRUAfdh + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/AccountList' + '400': + description: Invalid request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '401': + description: Unauthorized request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '403': + description: Request was forbidden. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '404': + description: The specified resource was not found. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + /getTransactionWithCompressionInfo: + summary: getTransactionWithCompressionInfo + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getTransactionWithCompressionInfo + params: + type: object + required: + - signature + properties: + signature: + $ref: '#/components/schemas/SerializableSignature' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + description: A Solana transaction with additional compression information + properties: + compression_info: + type: object + required: + - closed_accounts + - opened_accounts + properties: + closed_accounts: + type: array + items: + $ref: '#/components/schemas/AccountWithOptionalTokenData' + opened_accounts: + type: array + items: + $ref: '#/components/schemas/AccountWithOptionalTokenData' + transaction: + type: object + description: An encoded confirmed transaction with status meta + '400': + description: Invalid request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '401': + description: Unauthorized request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '403': + description: Request was forbidden. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '404': + description: The specified resource was not found. + content: + application/json: + schema: + type: object + properties: + error: + type: string '429': description: Exceeded rate limit. content: diff --git a/src/openapi/specs/getCompressionSignaturesForAddress.yaml b/src/openapi/specs/getCompressionSignaturesForAddress.yaml index 2b9bccf5..f3f9850c 100644 --- a/src/openapi/specs/getCompressionSignaturesForAddress.yaml +++ b/src/openapi/specs/getCompressionSignaturesForAddress.yaml @@ -8,8 +8,8 @@ info: servers: - url: https://mainnet.helius-rpc.com?api-key= paths: - /: - summary: getCompressionSignaturesForAddress + /getCompressedAccount: + summary: getCompressedAccount post: requestBody: content: @@ -36,21 +36,246 @@ paths: type: string description: The name of the method to invoke. enum: - - getCompressionSignaturesForAddress + - getCompressedAccount params: type: object - required: - - address + description: Request for compressed account data + default: + address: null + hash: '11111111111111111111111111111111' properties: address: - $ref: '#/components/schemas/SerializablePubkey' + allOf: + - $ref: '#/components/schemas/SerializablePubkey' + nullable: true + hash: + allOf: + - $ref: '#/components/schemas/Hash' + nullable: true + additionalProperties: false + example: + address: null + hash: '11111111111111111111111111111111' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/Account' + '400': + description: Invalid request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '401': + description: Unauthorized request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '403': + description: Request was forbidden. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '404': + description: The specified resource was not found. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + /getCompressedAccountProof: + summary: getCompressedAccountProof + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getCompressedAccountProof + params: + type: object + required: + - hash + properties: + hash: + $ref: '#/components/schemas/Hash' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/MerkleProofWithContext' + '400': + description: Invalid request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '401': + description: Unauthorized request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '403': + description: Request was forbidden. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '404': + description: The specified resource was not found. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + /getCompressedAccountsByOwner: + summary: getCompressedAccountsByOwner + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getCompressedAccountsByOwner + params: + type: object + required: + - owner + properties: cursor: - type: string + allOf: + - $ref: '#/components/schemas/Hash' nullable: true limit: allOf: - $ref: '#/components/schemas/Limit' nullable: true + owner: + $ref: '#/components/schemas/SerializablePubkey' additionalProperties: false required: true responses: @@ -67,8 +292,1272 @@ paths: context: $ref: '#/components/schemas/Context' value: - $ref: '#/components/schemas/PaginatedSignatureInfoList' - additionalProperties: false + $ref: '#/components/schemas/PaginatedAccountList' + '400': + description: Invalid request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '401': + description: Unauthorized request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '403': + description: Request was forbidden. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '404': + description: The specified resource was not found. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + /getCompressedBalance: + summary: getCompressedBalance + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getCompressedBalance + params: + type: object + description: Request for compressed account data + default: + address: null + hash: '11111111111111111111111111111111' + properties: + address: + allOf: + - $ref: '#/components/schemas/SerializablePubkey' + nullable: true + hash: + allOf: + - $ref: '#/components/schemas/Hash' + nullable: true + additionalProperties: false + example: + address: null + hash: '11111111111111111111111111111111' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/UnsignedInteger' + '400': + description: Invalid request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '401': + description: Unauthorized request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '403': + description: Request was forbidden. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '404': + description: The specified resource was not found. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + /getCompressedBalanceByOwner: + summary: getCompressedBalanceByOwner + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getCompressedBalanceByOwner + params: + type: object + required: + - owner + properties: + owner: + $ref: '#/components/schemas/SerializablePubkey' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/UnsignedInteger' + '400': + description: Invalid request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '401': + description: Unauthorized request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '403': + description: Request was forbidden. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '404': + description: The specified resource was not found. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + /getCompressedTokenAccountBalance: + summary: getCompressedTokenAccountBalance + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getCompressedTokenAccountBalance + params: + type: object + description: Request for compressed account data + default: + address: null + hash: '11111111111111111111111111111111' + properties: + address: + allOf: + - $ref: '#/components/schemas/SerializablePubkey' + nullable: true + hash: + allOf: + - $ref: '#/components/schemas/Hash' + nullable: true + additionalProperties: false + example: + address: null + hash: '11111111111111111111111111111111' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/TokenAccountBalance' + '400': + description: Invalid request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '401': + description: Unauthorized request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '403': + description: Request was forbidden. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '404': + description: The specified resource was not found. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + /getCompressedTokenAccountsByDelegate: + summary: getCompressedTokenAccountsByDelegate + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getCompressedTokenAccountsByDelegate + params: + type: object + required: + - delegate + properties: + cursor: + allOf: + - $ref: '#/components/schemas/Base58String' + nullable: true + delegate: + $ref: '#/components/schemas/SerializablePubkey' + limit: + allOf: + - $ref: '#/components/schemas/Limit' + nullable: true + mint: + allOf: + - $ref: '#/components/schemas/SerializablePubkey' + nullable: true + additionalProperties: false + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/TokenAccountList' + '400': + description: Invalid request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '401': + description: Unauthorized request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '403': + description: Request was forbidden. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '404': + description: The specified resource was not found. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + /getCompressedTokenAccountsByOwner: + summary: getCompressedTokenAccountsByOwner + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getCompressedTokenAccountsByOwner + params: + type: object + required: + - owner + properties: + cursor: + allOf: + - $ref: '#/components/schemas/Base58String' + nullable: true + limit: + allOf: + - $ref: '#/components/schemas/Limit' + nullable: true + mint: + allOf: + - $ref: '#/components/schemas/SerializablePubkey' + nullable: true + owner: + $ref: '#/components/schemas/SerializablePubkey' + additionalProperties: false + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/TokenAccountList' + '400': + description: Invalid request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '401': + description: Unauthorized request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '403': + description: Request was forbidden. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '404': + description: The specified resource was not found. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + /getCompressedTokenBalancesByOwner: + summary: getCompressedTokenBalancesByOwner + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getCompressedTokenBalancesByOwner + params: + type: object + required: + - owner + properties: + cursor: + allOf: + - $ref: '#/components/schemas/Base58String' + nullable: true + limit: + allOf: + - $ref: '#/components/schemas/Limit' + nullable: true + mint: + allOf: + - $ref: '#/components/schemas/SerializablePubkey' + nullable: true + owner: + $ref: '#/components/schemas/SerializablePubkey' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/TokenBalanceList' + '400': + description: Invalid request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '401': + description: Unauthorized request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '403': + description: Request was forbidden. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '404': + description: The specified resource was not found. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + /getCompressionSignaturesForAccount: + summary: getCompressionSignaturesForAccount + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getCompressionSignaturesForAccount + params: + type: object + required: + - hash + properties: + hash: + $ref: '#/components/schemas/Hash' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/SignatureInfoList' + '400': + description: Invalid request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '401': + description: Unauthorized request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '403': + description: Request was forbidden. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '404': + description: The specified resource was not found. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + /getCompressionSignaturesForAddress: + summary: getCompressionSignaturesForAddress + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getCompressionSignaturesForAddress + params: + type: object + required: + - address + properties: + address: + $ref: '#/components/schemas/SerializablePubkey' + cursor: + type: string + nullable: true + limit: + allOf: + - $ref: '#/components/schemas/Limit' + nullable: true + additionalProperties: false + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/PaginatedSignatureInfoList' + additionalProperties: false + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + /getMultipleCompressedAccountProofs: + summary: getMultipleCompressedAccountProofs + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getMultipleCompressedAccountProofs + params: + type: array + items: + $ref: '#/components/schemas/Hash' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + type: array + items: + $ref: '#/components/schemas/MerkleProofWithContext' + '400': + description: Invalid request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '401': + description: Unauthorized request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '403': + description: Request was forbidden. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '404': + description: The specified resource was not found. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + /getMultipleCompressedAccounts: + summary: getMultipleCompressedAccounts + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getMultipleCompressedAccounts + params: + type: object + description: Request for compressed account data + default: + addresses: null + hashes: + - 1111111QLbz7JHiBTspS962RLKV8GndWFwiEaqKM + - 1111111ogCyDbaRMvkdsHB3qfdyFYaG1WtRUAfdh + properties: + addresses: + type: array + items: + $ref: '#/components/schemas/SerializablePubkey' + nullable: true + hashes: + type: array + items: + $ref: '#/components/schemas/Hash' + nullable: true + additionalProperties: false + example: + addresses: null + hashes: + - 1111111QLbz7JHiBTspS962RLKV8GndWFwiEaqKM + - 1111111ogCyDbaRMvkdsHB3qfdyFYaG1WtRUAfdh + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/AccountList' + '400': + description: Invalid request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '401': + description: Unauthorized request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '403': + description: Request was forbidden. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '404': + description: The specified resource was not found. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + /getTransactionWithCompressionInfo: + summary: getTransactionWithCompressionInfo + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getTransactionWithCompressionInfo + params: + type: object + required: + - signature + properties: + signature: + $ref: '#/components/schemas/SerializableSignature' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + description: A Solana transaction with additional compression information + properties: + compression_info: + type: object + required: + - closed_accounts + - opened_accounts + properties: + closed_accounts: + type: array + items: + $ref: '#/components/schemas/AccountWithOptionalTokenData' + opened_accounts: + type: array + items: + $ref: '#/components/schemas/AccountWithOptionalTokenData' + transaction: + type: object + description: An encoded confirmed transaction with status meta + '400': + description: Invalid request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '401': + description: Unauthorized request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '403': + description: Request was forbidden. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '404': + description: The specified resource was not found. + content: + application/json: + schema: + type: object + properties: + error: + type: string '429': description: Exceeded rate limit. content: diff --git a/src/openapi/specs/getCompressionSignaturesForOwner.yaml b/src/openapi/specs/getCompressionSignaturesForOwner.yaml index d19fe11b..5b18e040 100644 --- a/src/openapi/specs/getCompressionSignaturesForOwner.yaml +++ b/src/openapi/specs/getCompressionSignaturesForOwner.yaml @@ -8,8 +8,8 @@ info: servers: - url: https://mainnet.helius-rpc.com?api-key= paths: - /: - summary: getCompressionSignaturesForOwner + /getCompressedAccount: + summary: getCompressedAccount post: requestBody: content: @@ -36,14 +36,239 @@ paths: type: string description: The name of the method to invoke. enum: - - getCompressionSignaturesForOwner + - getCompressedAccount + params: + type: object + description: Request for compressed account data + default: + address: null + hash: '11111111111111111111111111111111' + properties: + address: + allOf: + - $ref: '#/components/schemas/SerializablePubkey' + nullable: true + hash: + allOf: + - $ref: '#/components/schemas/Hash' + nullable: true + additionalProperties: false + example: + address: null + hash: '11111111111111111111111111111111' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/Account' + '400': + description: Invalid request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '401': + description: Unauthorized request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '403': + description: Request was forbidden. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '404': + description: The specified resource was not found. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + /getCompressedAccountProof: + summary: getCompressedAccountProof + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getCompressedAccountProof + params: + type: object + required: + - hash + properties: + hash: + $ref: '#/components/schemas/Hash' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/MerkleProofWithContext' + '400': + description: Invalid request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '401': + description: Unauthorized request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '403': + description: Request was forbidden. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '404': + description: The specified resource was not found. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + /getCompressedAccountsByOwner: + summary: getCompressedAccountsByOwner + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getCompressedAccountsByOwner params: type: object required: - owner properties: cursor: - type: string + allOf: + - $ref: '#/components/schemas/Hash' nullable: true limit: allOf: @@ -67,8 +292,1385 @@ paths: context: $ref: '#/components/schemas/Context' value: - $ref: '#/components/schemas/PaginatedSignatureInfoList' - additionalProperties: false + $ref: '#/components/schemas/PaginatedAccountList' + '400': + description: Invalid request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '401': + description: Unauthorized request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '403': + description: Request was forbidden. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '404': + description: The specified resource was not found. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + /getCompressedBalance: + summary: getCompressedBalance + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getCompressedBalance + params: + type: object + description: Request for compressed account data + default: + address: null + hash: '11111111111111111111111111111111' + properties: + address: + allOf: + - $ref: '#/components/schemas/SerializablePubkey' + nullable: true + hash: + allOf: + - $ref: '#/components/schemas/Hash' + nullable: true + additionalProperties: false + example: + address: null + hash: '11111111111111111111111111111111' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/UnsignedInteger' + '400': + description: Invalid request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '401': + description: Unauthorized request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '403': + description: Request was forbidden. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '404': + description: The specified resource was not found. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + /getCompressedBalanceByOwner: + summary: getCompressedBalanceByOwner + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getCompressedBalanceByOwner + params: + type: object + required: + - owner + properties: + owner: + $ref: '#/components/schemas/SerializablePubkey' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/UnsignedInteger' + '400': + description: Invalid request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '401': + description: Unauthorized request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '403': + description: Request was forbidden. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '404': + description: The specified resource was not found. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + /getCompressedTokenAccountBalance: + summary: getCompressedTokenAccountBalance + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getCompressedTokenAccountBalance + params: + type: object + description: Request for compressed account data + default: + address: null + hash: '11111111111111111111111111111111' + properties: + address: + allOf: + - $ref: '#/components/schemas/SerializablePubkey' + nullable: true + hash: + allOf: + - $ref: '#/components/schemas/Hash' + nullable: true + additionalProperties: false + example: + address: null + hash: '11111111111111111111111111111111' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/TokenAccountBalance' + '400': + description: Invalid request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '401': + description: Unauthorized request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '403': + description: Request was forbidden. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '404': + description: The specified resource was not found. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + /getCompressedTokenAccountsByDelegate: + summary: getCompressedTokenAccountsByDelegate + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getCompressedTokenAccountsByDelegate + params: + type: object + required: + - delegate + properties: + cursor: + allOf: + - $ref: '#/components/schemas/Base58String' + nullable: true + delegate: + $ref: '#/components/schemas/SerializablePubkey' + limit: + allOf: + - $ref: '#/components/schemas/Limit' + nullable: true + mint: + allOf: + - $ref: '#/components/schemas/SerializablePubkey' + nullable: true + additionalProperties: false + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/TokenAccountList' + '400': + description: Invalid request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '401': + description: Unauthorized request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '403': + description: Request was forbidden. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '404': + description: The specified resource was not found. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + /getCompressedTokenAccountsByOwner: + summary: getCompressedTokenAccountsByOwner + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getCompressedTokenAccountsByOwner + params: + type: object + required: + - owner + properties: + cursor: + allOf: + - $ref: '#/components/schemas/Base58String' + nullable: true + limit: + allOf: + - $ref: '#/components/schemas/Limit' + nullable: true + mint: + allOf: + - $ref: '#/components/schemas/SerializablePubkey' + nullable: true + owner: + $ref: '#/components/schemas/SerializablePubkey' + additionalProperties: false + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/TokenAccountList' + '400': + description: Invalid request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '401': + description: Unauthorized request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '403': + description: Request was forbidden. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '404': + description: The specified resource was not found. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + /getCompressedTokenBalancesByOwner: + summary: getCompressedTokenBalancesByOwner + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getCompressedTokenBalancesByOwner + params: + type: object + required: + - owner + properties: + cursor: + allOf: + - $ref: '#/components/schemas/Base58String' + nullable: true + limit: + allOf: + - $ref: '#/components/schemas/Limit' + nullable: true + mint: + allOf: + - $ref: '#/components/schemas/SerializablePubkey' + nullable: true + owner: + $ref: '#/components/schemas/SerializablePubkey' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/TokenBalanceList' + '400': + description: Invalid request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '401': + description: Unauthorized request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '403': + description: Request was forbidden. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '404': + description: The specified resource was not found. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + /getCompressionSignaturesForAccount: + summary: getCompressionSignaturesForAccount + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getCompressionSignaturesForAccount + params: + type: object + required: + - hash + properties: + hash: + $ref: '#/components/schemas/Hash' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/SignatureInfoList' + '400': + description: Invalid request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '401': + description: Unauthorized request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '403': + description: Request was forbidden. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '404': + description: The specified resource was not found. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + /getCompressionSignaturesForAddress: + summary: getCompressionSignaturesForAddress + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getCompressionSignaturesForAddress + params: + type: object + required: + - address + properties: + address: + $ref: '#/components/schemas/SerializablePubkey' + cursor: + type: string + nullable: true + limit: + allOf: + - $ref: '#/components/schemas/Limit' + nullable: true + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/PaginatedSignatureInfoList' + '400': + description: Invalid request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '401': + description: Unauthorized request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '403': + description: Request was forbidden. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '404': + description: The specified resource was not found. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + /getCompressionSignaturesForOwner: + summary: getCompressionSignaturesForOwner + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getCompressionSignaturesForOwner + params: + type: object + required: + - owner + properties: + cursor: + type: string + nullable: true + limit: + allOf: + - $ref: '#/components/schemas/Limit' + nullable: true + owner: + $ref: '#/components/schemas/SerializablePubkey' + additionalProperties: false + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/PaginatedSignatureInfoList' + additionalProperties: false + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + /getMultipleCompressedAccountProofs: + summary: getMultipleCompressedAccountProofs + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getMultipleCompressedAccountProofs + params: + type: array + items: + $ref: '#/components/schemas/Hash' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + type: array + items: + $ref: '#/components/schemas/MerkleProofWithContext' + '400': + description: Invalid request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '401': + description: Unauthorized request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '403': + description: Request was forbidden. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '404': + description: The specified resource was not found. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + /getMultipleCompressedAccounts: + summary: getMultipleCompressedAccounts + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getMultipleCompressedAccounts + params: + type: object + description: Request for compressed account data + default: + addresses: null + hashes: + - 1111111QLbz7JHiBTspS962RLKV8GndWFwiEaqKM + - 1111111ogCyDbaRMvkdsHB3qfdyFYaG1WtRUAfdh + properties: + addresses: + type: array + items: + $ref: '#/components/schemas/SerializablePubkey' + nullable: true + hashes: + type: array + items: + $ref: '#/components/schemas/Hash' + nullable: true + additionalProperties: false + example: + addresses: null + hashes: + - 1111111QLbz7JHiBTspS962RLKV8GndWFwiEaqKM + - 1111111ogCyDbaRMvkdsHB3qfdyFYaG1WtRUAfdh + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/AccountList' + '400': + description: Invalid request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '401': + description: Unauthorized request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '403': + description: Request was forbidden. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '404': + description: The specified resource was not found. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + /getTransactionWithCompressionInfo: + summary: getTransactionWithCompressionInfo + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getTransactionWithCompressionInfo + params: + type: object + required: + - signature + properties: + signature: + $ref: '#/components/schemas/SerializableSignature' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + description: A Solana transaction with additional compression information + properties: + compression_info: + type: object + required: + - closed_accounts + - opened_accounts + properties: + closed_accounts: + type: array + items: + $ref: '#/components/schemas/AccountWithOptionalTokenData' + opened_accounts: + type: array + items: + $ref: '#/components/schemas/AccountWithOptionalTokenData' + transaction: + type: object + description: An encoded confirmed transaction with status meta + '400': + description: Invalid request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '401': + description: Unauthorized request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '403': + description: Request was forbidden. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '404': + description: The specified resource was not found. + content: + application/json: + schema: + type: object + properties: + error: + type: string '429': description: Exceeded rate limit. content: diff --git a/src/openapi/specs/getCompressionSignaturesForTokenOwner.yaml b/src/openapi/specs/getCompressionSignaturesForTokenOwner.yaml index ea72fa92..b5407929 100644 --- a/src/openapi/specs/getCompressionSignaturesForTokenOwner.yaml +++ b/src/openapi/specs/getCompressionSignaturesForTokenOwner.yaml @@ -8,8 +8,8 @@ info: servers: - url: https://mainnet.helius-rpc.com?api-key= paths: - /: - summary: getCompressionSignaturesForTokenOwner + /getCompressedAccount: + summary: getCompressedAccount post: requestBody: content: @@ -36,14 +36,239 @@ paths: type: string description: The name of the method to invoke. enum: - - getCompressionSignaturesForTokenOwner + - getCompressedAccount + params: + type: object + description: Request for compressed account data + default: + address: null + hash: '11111111111111111111111111111111' + properties: + address: + allOf: + - $ref: '#/components/schemas/SerializablePubkey' + nullable: true + hash: + allOf: + - $ref: '#/components/schemas/Hash' + nullable: true + additionalProperties: false + example: + address: null + hash: '11111111111111111111111111111111' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/Account' + '400': + description: Invalid request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '401': + description: Unauthorized request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '403': + description: Request was forbidden. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '404': + description: The specified resource was not found. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + /getCompressedAccountProof: + summary: getCompressedAccountProof + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getCompressedAccountProof + params: + type: object + required: + - hash + properties: + hash: + $ref: '#/components/schemas/Hash' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/MerkleProofWithContext' + '400': + description: Invalid request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '401': + description: Unauthorized request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '403': + description: Request was forbidden. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '404': + description: The specified resource was not found. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + /getCompressedAccountsByOwner: + summary: getCompressedAccountsByOwner + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getCompressedAccountsByOwner params: type: object required: - owner properties: cursor: - type: string + allOf: + - $ref: '#/components/schemas/Hash' nullable: true limit: allOf: @@ -67,8 +292,1498 @@ paths: context: $ref: '#/components/schemas/Context' value: - $ref: '#/components/schemas/PaginatedSignatureInfoList' - additionalProperties: false + $ref: '#/components/schemas/PaginatedAccountList' + '400': + description: Invalid request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '401': + description: Unauthorized request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '403': + description: Request was forbidden. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '404': + description: The specified resource was not found. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + /getCompressedBalance: + summary: getCompressedBalance + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getCompressedBalance + params: + type: object + description: Request for compressed account data + default: + address: null + hash: '11111111111111111111111111111111' + properties: + address: + allOf: + - $ref: '#/components/schemas/SerializablePubkey' + nullable: true + hash: + allOf: + - $ref: '#/components/schemas/Hash' + nullable: true + additionalProperties: false + example: + address: null + hash: '11111111111111111111111111111111' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/UnsignedInteger' + '400': + description: Invalid request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '401': + description: Unauthorized request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '403': + description: Request was forbidden. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '404': + description: The specified resource was not found. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + /getCompressedBalanceByOwner: + summary: getCompressedBalanceByOwner + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getCompressedBalanceByOwner + params: + type: object + required: + - owner + properties: + owner: + $ref: '#/components/schemas/SerializablePubkey' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/UnsignedInteger' + '400': + description: Invalid request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '401': + description: Unauthorized request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '403': + description: Request was forbidden. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '404': + description: The specified resource was not found. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + /getCompressedTokenAccountBalance: + summary: getCompressedTokenAccountBalance + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getCompressedTokenAccountBalance + params: + type: object + description: Request for compressed account data + default: + address: null + hash: '11111111111111111111111111111111' + properties: + address: + allOf: + - $ref: '#/components/schemas/SerializablePubkey' + nullable: true + hash: + allOf: + - $ref: '#/components/schemas/Hash' + nullable: true + additionalProperties: false + example: + address: null + hash: '11111111111111111111111111111111' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/TokenAccountBalance' + '400': + description: Invalid request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '401': + description: Unauthorized request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '403': + description: Request was forbidden. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '404': + description: The specified resource was not found. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + /getCompressedTokenAccountsByDelegate: + summary: getCompressedTokenAccountsByDelegate + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getCompressedTokenAccountsByDelegate + params: + type: object + required: + - delegate + properties: + cursor: + allOf: + - $ref: '#/components/schemas/Base58String' + nullable: true + delegate: + $ref: '#/components/schemas/SerializablePubkey' + limit: + allOf: + - $ref: '#/components/schemas/Limit' + nullable: true + mint: + allOf: + - $ref: '#/components/schemas/SerializablePubkey' + nullable: true + additionalProperties: false + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/TokenAccountList' + '400': + description: Invalid request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '401': + description: Unauthorized request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '403': + description: Request was forbidden. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '404': + description: The specified resource was not found. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + /getCompressedTokenAccountsByOwner: + summary: getCompressedTokenAccountsByOwner + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getCompressedTokenAccountsByOwner + params: + type: object + required: + - owner + properties: + cursor: + allOf: + - $ref: '#/components/schemas/Base58String' + nullable: true + limit: + allOf: + - $ref: '#/components/schemas/Limit' + nullable: true + mint: + allOf: + - $ref: '#/components/schemas/SerializablePubkey' + nullable: true + owner: + $ref: '#/components/schemas/SerializablePubkey' + additionalProperties: false + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/TokenAccountList' + '400': + description: Invalid request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '401': + description: Unauthorized request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '403': + description: Request was forbidden. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '404': + description: The specified resource was not found. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + /getCompressedTokenBalancesByOwner: + summary: getCompressedTokenBalancesByOwner + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getCompressedTokenBalancesByOwner + params: + type: object + required: + - owner + properties: + cursor: + allOf: + - $ref: '#/components/schemas/Base58String' + nullable: true + limit: + allOf: + - $ref: '#/components/schemas/Limit' + nullable: true + mint: + allOf: + - $ref: '#/components/schemas/SerializablePubkey' + nullable: true + owner: + $ref: '#/components/schemas/SerializablePubkey' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/TokenBalanceList' + '400': + description: Invalid request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '401': + description: Unauthorized request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '403': + description: Request was forbidden. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '404': + description: The specified resource was not found. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + /getCompressionSignaturesForAccount: + summary: getCompressionSignaturesForAccount + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getCompressionSignaturesForAccount + params: + type: object + required: + - hash + properties: + hash: + $ref: '#/components/schemas/Hash' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/SignatureInfoList' + '400': + description: Invalid request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '401': + description: Unauthorized request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '403': + description: Request was forbidden. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '404': + description: The specified resource was not found. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + /getCompressionSignaturesForAddress: + summary: getCompressionSignaturesForAddress + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getCompressionSignaturesForAddress + params: + type: object + required: + - address + properties: + address: + $ref: '#/components/schemas/SerializablePubkey' + cursor: + type: string + nullable: true + limit: + allOf: + - $ref: '#/components/schemas/Limit' + nullable: true + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/PaginatedSignatureInfoList' + '400': + description: Invalid request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '401': + description: Unauthorized request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '403': + description: Request was forbidden. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '404': + description: The specified resource was not found. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + /getCompressionSignaturesForOwner: + summary: getCompressionSignaturesForOwner + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getCompressionSignaturesForOwner + params: + type: object + required: + - owner + properties: + cursor: + type: string + nullable: true + limit: + allOf: + - $ref: '#/components/schemas/Limit' + nullable: true + owner: + $ref: '#/components/schemas/SerializablePubkey' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/PaginatedSignatureInfoList' + '400': + description: Invalid request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '401': + description: Unauthorized request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '403': + description: Request was forbidden. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '404': + description: The specified resource was not found. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + /getCompressionSignaturesForTokenOwner: + summary: getCompressionSignaturesForTokenOwner + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getCompressionSignaturesForTokenOwner + params: + type: object + required: + - owner + properties: + cursor: + type: string + nullable: true + limit: + allOf: + - $ref: '#/components/schemas/Limit' + nullable: true + owner: + $ref: '#/components/schemas/SerializablePubkey' + additionalProperties: false + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/PaginatedSignatureInfoList' + additionalProperties: false + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + /getMultipleCompressedAccountProofs: + summary: getMultipleCompressedAccountProofs + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getMultipleCompressedAccountProofs + params: + type: array + items: + $ref: '#/components/schemas/Hash' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + type: array + items: + $ref: '#/components/schemas/MerkleProofWithContext' + '400': + description: Invalid request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '401': + description: Unauthorized request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '403': + description: Request was forbidden. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '404': + description: The specified resource was not found. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + /getMultipleCompressedAccounts: + summary: getMultipleCompressedAccounts + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getMultipleCompressedAccounts + params: + type: object + description: Request for compressed account data + default: + addresses: null + hashes: + - 1111111QLbz7JHiBTspS962RLKV8GndWFwiEaqKM + - 1111111ogCyDbaRMvkdsHB3qfdyFYaG1WtRUAfdh + properties: + addresses: + type: array + items: + $ref: '#/components/schemas/SerializablePubkey' + nullable: true + hashes: + type: array + items: + $ref: '#/components/schemas/Hash' + nullable: true + additionalProperties: false + example: + addresses: null + hashes: + - 1111111QLbz7JHiBTspS962RLKV8GndWFwiEaqKM + - 1111111ogCyDbaRMvkdsHB3qfdyFYaG1WtRUAfdh + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/AccountList' + '400': + description: Invalid request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '401': + description: Unauthorized request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '403': + description: Request was forbidden. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '404': + description: The specified resource was not found. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + /getTransactionWithCompressionInfo: + summary: getTransactionWithCompressionInfo + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getTransactionWithCompressionInfo + params: + type: object + required: + - signature + properties: + signature: + $ref: '#/components/schemas/SerializableSignature' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + description: A Solana transaction with additional compression information + properties: + compression_info: + type: object + required: + - closed_accounts + - opened_accounts + properties: + closed_accounts: + type: array + items: + $ref: '#/components/schemas/AccountWithOptionalTokenData' + opened_accounts: + type: array + items: + $ref: '#/components/schemas/AccountWithOptionalTokenData' + transaction: + type: object + description: An encoded confirmed transaction with status meta + '400': + description: Invalid request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '401': + description: Unauthorized request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '403': + description: Request was forbidden. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '404': + description: The specified resource was not found. + content: + application/json: + schema: + type: object + properties: + error: + type: string '429': description: Exceeded rate limit. content: diff --git a/src/openapi/specs/getMultipleCompressedAccounts.yaml b/src/openapi/specs/getMultipleCompressedAccounts.yaml index cbe7ce14..de54f52d 100644 --- a/src/openapi/specs/getMultipleCompressedAccounts.yaml +++ b/src/openapi/specs/getMultipleCompressedAccounts.yaml @@ -8,7 +8,689 @@ info: servers: - url: https://mainnet.helius-rpc.com?api-key= paths: - /: + /getCompressedAccount: + summary: getCompressedAccount + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getCompressedAccount + params: + type: object + description: Request for compressed account data + default: + address: null + hash: '11111111111111111111111111111111' + properties: + address: + allOf: + - $ref: '#/components/schemas/SerializablePubkey' + nullable: true + hash: + allOf: + - $ref: '#/components/schemas/Hash' + nullable: true + additionalProperties: false + example: + address: null + hash: '11111111111111111111111111111111' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/Account' + '400': + description: Invalid request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '401': + description: Unauthorized request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '403': + description: Request was forbidden. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '404': + description: The specified resource was not found. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + /getCompressedAccountProof: + summary: getCompressedAccountProof + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getCompressedAccountProof + params: + type: object + required: + - hash + properties: + hash: + $ref: '#/components/schemas/Hash' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/MerkleProofWithContext' + '400': + description: Invalid request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '401': + description: Unauthorized request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '403': + description: Request was forbidden. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '404': + description: The specified resource was not found. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + /getCompressedAccountsByOwner: + summary: getCompressedAccountsByOwner + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getCompressedAccountsByOwner + params: + type: object + required: + - owner + properties: + cursor: + allOf: + - $ref: '#/components/schemas/Hash' + nullable: true + limit: + allOf: + - $ref: '#/components/schemas/Limit' + nullable: true + owner: + $ref: '#/components/schemas/SerializablePubkey' + additionalProperties: false + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/PaginatedAccountList' + '400': + description: Invalid request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '401': + description: Unauthorized request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '403': + description: Request was forbidden. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '404': + description: The specified resource was not found. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + /getCompressedTokenAccountsByDelegate: + summary: getCompressedTokenAccountsByDelegate + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getCompressedTokenAccountsByDelegate + params: + type: object + required: + - delegate + properties: + cursor: + allOf: + - $ref: '#/components/schemas/Base58String' + nullable: true + delegate: + $ref: '#/components/schemas/SerializablePubkey' + limit: + allOf: + - $ref: '#/components/schemas/Limit' + nullable: true + mint: + allOf: + - $ref: '#/components/schemas/SerializablePubkey' + nullable: true + additionalProperties: false + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/TokenAccountList' + '400': + description: Invalid request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '401': + description: Unauthorized request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '403': + description: Request was forbidden. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '404': + description: The specified resource was not found. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + /getCompressedTokenAccountsByOwner: + summary: getCompressedTokenAccountsByOwner + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getCompressedTokenAccountsByOwner + params: + type: object + required: + - owner + properties: + cursor: + allOf: + - $ref: '#/components/schemas/Base58String' + nullable: true + limit: + allOf: + - $ref: '#/components/schemas/Limit' + nullable: true + mint: + allOf: + - $ref: '#/components/schemas/SerializablePubkey' + nullable: true + owner: + $ref: '#/components/schemas/SerializablePubkey' + additionalProperties: false + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/TokenAccountList' + '400': + description: Invalid request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '401': + description: Unauthorized request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '403': + description: Request was forbidden. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '404': + description: The specified resource was not found. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + /getMultipleCompressedAccountProofs: + summary: getMultipleCompressedAccountProofs + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getMultipleCompressedAccountProofs + params: + type: array + items: + $ref: '#/components/schemas/Hash' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + type: array + items: + $ref: '#/components/schemas/MerkleProofWithContext' + '400': + description: Invalid request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '401': + description: Unauthorized request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '403': + description: Request was forbidden. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '404': + description: The specified resource was not found. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + /getMultipleCompressedAccounts: summary: getMultipleCompressedAccounts post: requestBody: diff --git a/src/openapi/specs/getQueueElements.yaml b/src/openapi/specs/getQueueElements.yaml new file mode 100644 index 00000000..bfe4aa0a --- /dev/null +++ b/src/openapi/specs/getQueueElements.yaml @@ -0,0 +1,89 @@ +paths: + /: + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getQueueElements + params: + type: object + required: + - queue + - batch + - startOffset + - endOffset + properties: + queue: + $ref: '#/components/schemas/Hash' + batch: + $ref: '#/components/schemas/UnsignedInteger' + startOffset: + $ref: '#/components/schemas/UnsignedInteger' + endOffset: + $ref: '#/components/schemas/UnsignedInteger' + additionalProperties: false + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + type: array + items: + $ref: '#/components/schemas/Hash' + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: string +components: + schemas: + Hash: + type: string + description: A base58 encoded hash. + default: "11111111111111111111111111111111" + example: "11111111111111111111111111111111" \ No newline at end of file diff --git a/src/openapi/specs/getTransactionWithCompressionInfo.yaml b/src/openapi/specs/getTransactionWithCompressionInfo.yaml index 59ca0c9c..a7e00abf 100644 --- a/src/openapi/specs/getTransactionWithCompressionInfo.yaml +++ b/src/openapi/specs/getTransactionWithCompressionInfo.yaml @@ -8,7 +8,1379 @@ info: servers: - url: https://mainnet.helius-rpc.com?api-key= paths: - /: + /getCompressedAccount: + summary: getCompressedAccount + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getCompressedAccount + params: + type: object + description: Request for compressed account data + default: + address: null + hash: '11111111111111111111111111111111' + properties: + address: + allOf: + - $ref: '#/components/schemas/SerializablePubkey' + nullable: true + hash: + allOf: + - $ref: '#/components/schemas/Hash' + nullable: true + additionalProperties: false + example: + address: null + hash: '11111111111111111111111111111111' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/Account' + '400': + description: Invalid request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '401': + description: Unauthorized request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '403': + description: Request was forbidden. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '404': + description: The specified resource was not found. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + /getCompressedAccountProof: + summary: getCompressedAccountProof + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getCompressedAccountProof + params: + type: object + required: + - hash + properties: + hash: + $ref: '#/components/schemas/Hash' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/MerkleProofWithContext' + '400': + description: Invalid request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '401': + description: Unauthorized request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '403': + description: Request was forbidden. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '404': + description: The specified resource was not found. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + /getCompressedAccountsByOwner: + summary: getCompressedAccountsByOwner + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getCompressedAccountsByOwner + params: + type: object + required: + - owner + properties: + cursor: + allOf: + - $ref: '#/components/schemas/Hash' + nullable: true + limit: + allOf: + - $ref: '#/components/schemas/Limit' + nullable: true + owner: + $ref: '#/components/schemas/SerializablePubkey' + additionalProperties: false + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/PaginatedAccountList' + '400': + description: Invalid request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '401': + description: Unauthorized request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '403': + description: Request was forbidden. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '404': + description: The specified resource was not found. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + /getCompressedBalance: + summary: getCompressedBalance + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getCompressedBalance + params: + type: object + description: Request for compressed account data + default: + address: null + hash: '11111111111111111111111111111111' + properties: + address: + allOf: + - $ref: '#/components/schemas/SerializablePubkey' + nullable: true + hash: + allOf: + - $ref: '#/components/schemas/Hash' + nullable: true + additionalProperties: false + example: + address: null + hash: '11111111111111111111111111111111' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/UnsignedInteger' + '400': + description: Invalid request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '401': + description: Unauthorized request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '403': + description: Request was forbidden. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '404': + description: The specified resource was not found. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + /getCompressedBalanceByOwner: + summary: getCompressedBalanceByOwner + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getCompressedBalanceByOwner + params: + type: object + required: + - owner + properties: + owner: + $ref: '#/components/schemas/SerializablePubkey' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/UnsignedInteger' + '400': + description: Invalid request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '401': + description: Unauthorized request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '403': + description: Request was forbidden. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '404': + description: The specified resource was not found. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + /getCompressedTokenAccountBalance: + summary: getCompressedTokenAccountBalance + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getCompressedTokenAccountBalance + params: + type: object + description: Request for compressed account data + default: + address: null + hash: '11111111111111111111111111111111' + properties: + address: + allOf: + - $ref: '#/components/schemas/SerializablePubkey' + nullable: true + hash: + allOf: + - $ref: '#/components/schemas/Hash' + nullable: true + additionalProperties: false + example: + address: null + hash: '11111111111111111111111111111111' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/TokenAccountBalance' + '400': + description: Invalid request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '401': + description: Unauthorized request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '403': + description: Request was forbidden. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '404': + description: The specified resource was not found. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + /getCompressedTokenAccountsByDelegate: + summary: getCompressedTokenAccountsByDelegate + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getCompressedTokenAccountsByDelegate + params: + type: object + required: + - delegate + properties: + cursor: + allOf: + - $ref: '#/components/schemas/Base58String' + nullable: true + delegate: + $ref: '#/components/schemas/SerializablePubkey' + limit: + allOf: + - $ref: '#/components/schemas/Limit' + nullable: true + mint: + allOf: + - $ref: '#/components/schemas/SerializablePubkey' + nullable: true + additionalProperties: false + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/TokenAccountList' + '400': + description: Invalid request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '401': + description: Unauthorized request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '403': + description: Request was forbidden. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '404': + description: The specified resource was not found. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + /getCompressedTokenAccountsByOwner: + summary: getCompressedTokenAccountsByOwner + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getCompressedTokenAccountsByOwner + params: + type: object + required: + - owner + properties: + cursor: + allOf: + - $ref: '#/components/schemas/Base58String' + nullable: true + limit: + allOf: + - $ref: '#/components/schemas/Limit' + nullable: true + mint: + allOf: + - $ref: '#/components/schemas/SerializablePubkey' + nullable: true + owner: + $ref: '#/components/schemas/SerializablePubkey' + additionalProperties: false + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/TokenAccountList' + '400': + description: Invalid request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '401': + description: Unauthorized request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '403': + description: Request was forbidden. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '404': + description: The specified resource was not found. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + /getCompressedTokenBalancesByOwner: + summary: getCompressedTokenBalancesByOwner + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getCompressedTokenBalancesByOwner + params: + type: object + required: + - owner + properties: + cursor: + allOf: + - $ref: '#/components/schemas/Base58String' + nullable: true + limit: + allOf: + - $ref: '#/components/schemas/Limit' + nullable: true + mint: + allOf: + - $ref: '#/components/schemas/SerializablePubkey' + nullable: true + owner: + $ref: '#/components/schemas/SerializablePubkey' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/TokenBalanceList' + '400': + description: Invalid request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '401': + description: Unauthorized request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '403': + description: Request was forbidden. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '404': + description: The specified resource was not found. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + /getCompressionSignaturesForAccount: + summary: getCompressionSignaturesForAccount + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getCompressionSignaturesForAccount + params: + type: object + required: + - hash + properties: + hash: + $ref: '#/components/schemas/Hash' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/SignatureInfoList' + '400': + description: Invalid request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '401': + description: Unauthorized request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '403': + description: Request was forbidden. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '404': + description: The specified resource was not found. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + /getMultipleCompressedAccountProofs: + summary: getMultipleCompressedAccountProofs + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getMultipleCompressedAccountProofs + params: + type: array + items: + $ref: '#/components/schemas/Hash' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + type: array + items: + $ref: '#/components/schemas/MerkleProofWithContext' + '400': + description: Invalid request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '401': + description: Unauthorized request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '403': + description: Request was forbidden. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '404': + description: The specified resource was not found. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + /getMultipleCompressedAccounts: + summary: getMultipleCompressedAccounts + post: + requestBody: + content: + application/json: + schema: + type: object + required: + - jsonrpc + - id + - method + - params + properties: + id: + type: string + description: An ID to identify the request. + enum: + - test-account + jsonrpc: + type: string + description: The version of the JSON-RPC protocol. + enum: + - '2.0' + method: + type: string + description: The name of the method to invoke. + enum: + - getMultipleCompressedAccounts + params: + type: object + description: Request for compressed account data + default: + addresses: null + hashes: + - 1111111QLbz7JHiBTspS962RLKV8GndWFwiEaqKM + - 1111111ogCyDbaRMvkdsHB3qfdyFYaG1WtRUAfdh + properties: + addresses: + type: array + items: + $ref: '#/components/schemas/SerializablePubkey' + nullable: true + hashes: + type: array + items: + $ref: '#/components/schemas/Hash' + nullable: true + additionalProperties: false + example: + addresses: null + hashes: + - 1111111QLbz7JHiBTspS962RLKV8GndWFwiEaqKM + - 1111111ogCyDbaRMvkdsHB3qfdyFYaG1WtRUAfdh + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + required: + - context + - value + properties: + context: + $ref: '#/components/schemas/Context' + value: + $ref: '#/components/schemas/AccountList' + '400': + description: Invalid request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '401': + description: Unauthorized request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '403': + description: Request was forbidden. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '404': + description: The specified resource was not found. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '429': + description: Exceeded rate limit. + content: + application/json: + schema: + type: object + properties: + error: + type: string + '500': + description: The server encountered an unexpected condition that prevented it from fulfilling the request. + content: + application/json: + schema: + type: object + properties: + error: + type: string + /getTransactionWithCompressionInfo: summary: getTransactionWithCompressionInfo post: requestBody: diff --git a/src/openapi/specs/openapitools.json b/src/openapi/specs/openapitools.json new file mode 100644 index 00000000..cfe74d51 --- /dev/null +++ b/src/openapi/specs/openapitools.json @@ -0,0 +1,7 @@ +{ + "$schema": "./node_modules/@openapitools/openapi-generator-cli/config.schema.json", + "spaces": 2, + "generator-cli": { + "version": "7.5.0" + } +} diff --git a/src/snapshot/loader/main.rs b/src/snapshot/loader/main.rs index fb44270e..366c78f8 100644 --- a/src/snapshot/loader/main.rs +++ b/src/snapshot/loader/main.rs @@ -1,10 +1,20 @@ -use anyhow::Context; +use anyhow::{Context, Result}; use clap::Parser; -use futures::StreamExt; -use log::error; +use futures::{Stream, StreamExt, pin_mut}; +use log::{error, info, warn}; use photon_indexer::common::{setup_logging, LoggingFormat}; use photon_indexer::snapshot::{create_snapshot_from_byte_stream, DirectoryAdapter}; -use std::path::Path; +use reqwest::{Response, StatusCode}; +use std::fs::File; +use std::io::{Read, Seek, SeekFrom, Write}; +use std::path::{Path, PathBuf}; +use std::time::Duration; +use tokio::time::sleep; +use bytes::Bytes; +use futures::stream; +use std::sync::Arc; +use tokio::sync::Mutex; +use std::pin::Pin; /// Photon Loader: a utility to load snapshots from a snapshot server #[derive(Parser, Debug)] @@ -21,6 +31,305 @@ struct Args { /// Logging format #[arg(short, long, default_value_t = LoggingFormat::Standard)] logging_format: LoggingFormat, + + /// Max retry attempts + #[arg(long, default_value_t = 10)] + max_retries: u32, + + /// Retry delay in seconds + #[arg(long, default_value_t = 15)] + retry_delay: u64, + + /// Resume download if temp file exists + #[arg(long, default_value_t = true)] + resume: bool, + + /// Chunk size for downloads in KB (larger values may improve speed but use more memory) + #[arg(long, default_value_t = 1024)] + chunk_size_kb: usize, +} + +// Function to find the temp file with the largest size in the snapshot directory +fn find_largest_temp_file(snapshot_dir: &str) -> Option<(PathBuf, u64)> { + let temp_dir = std::env::temp_dir().join(snapshot_dir); + if !temp_dir.exists() { + return None; + } + + let entries = match std::fs::read_dir(temp_dir) { + Ok(entries) => entries, + Err(_) => return None, + }; + + let mut largest_file: Option<(PathBuf, u64)> = None; + + for entry in entries { + if let Ok(entry) = entry { + let path = entry.path(); + if path.is_file() && path.file_name().unwrap_or_default().to_string_lossy().starts_with("temp-snapshot-") { + if let Ok(metadata) = std::fs::metadata(&path) { + let size = metadata.len(); + match &largest_file { + None => largest_file = Some((path, size)), + Some((_, largest_size)) if size > *largest_size => largest_file = Some((path, size)), + _ => {} + } + } + } + } + } + + largest_file +} + +// Function to make a HTTP request with specified range +async fn make_range_request( + client: &reqwest::Client, + url: &str, + range_start: u64, + max_retries: u32, + retry_delay: u64 +) -> Result { + let mut retry_count = 0; + let mut last_error_msg; + + loop { + info!("Requesting range starting at byte position {} ({:.2} MB)", + range_start, range_start as f64 / (1024.0 * 1024.0)); + + let req_builder = client.get(url) + .header("Range", format!("bytes={}-", range_start)) + .header("Connection", "keep-alive") + .header("Keep-Alive", "timeout=600") // 10 minute keep-alive + .timeout(Duration::from_secs(600)); // 10 minute timeout per request + + match req_builder.send().await { + Ok(response) => { + let status = response.status(); + if status.is_success() || status == StatusCode::PARTIAL_CONTENT || status == StatusCode::RANGE_NOT_SATISFIABLE { + info!("Server responded with status code: {}", status); + if let Some(range) = response.headers().get("Content-Range") { + info!("Content-Range: {}", range.to_str().unwrap_or("invalid")); + } + if let Some(length) = response.content_length() { + info!("Content-Length: {} bytes ({:.2} MB)", + length, length as f64 / (1024.0 * 1024.0)); + } + return Ok(response); + } else { + let error_text = response.text().await.unwrap_or_default(); + last_error_msg = format!("HTTP error: {} - {}", status, error_text); + error!("{}", last_error_msg); + } + }, + Err(e) => { + last_error_msg = format!("Request error: {}", e); + error!("{}", last_error_msg); + + // Provide more specific error information + if e.is_timeout() { + error!("Request timed out. Network might be unstable."); + } else if e.is_connect() { + error!("Connection error. Network might be down or server unreachable."); + } else if e.is_body() { + error!("Body error. Data transfer was interrupted."); + } + } + } + + retry_count += 1; + if retry_count >= max_retries { + return Err(anyhow::anyhow!("Max retries reached. Last error: {}", last_error_msg)); + } + + let backoff = Duration::from_secs(retry_delay * retry_count as u64); + warn!("Retrying in {} seconds (attempt {}/{})", backoff.as_secs(), retry_count, max_retries); + sleep(backoff).await; + } +} + +// Function to implement resumable downloads +async fn download_with_resume( + client: &reqwest::Client, + url: &str, + temp_file_path: &PathBuf, + max_retries: u32, + retry_delay: u64, + chunk_size_kb: usize +) -> Result { + let mut file = if temp_file_path.exists() { + let file = std::fs::OpenOptions::new() + .read(true) + .write(true) + .open(temp_file_path) + .context("Failed to open existing temp file")?; + + // Get the current size to resume from + let file_size = file.metadata()?.len(); + info!("Resuming download from byte position {}", file_size); + file + } else { + std::fs::File::create(temp_file_path).context("Failed to create temp file")? + }; + + // Get the file size for resuming + let file_size = file.metadata()?.len(); + file.seek(SeekFrom::End(0))?; + + // Download and append to file with retry logic + let mut total_bytes = file_size; + let mut current_position = file_size; + + loop { + let response = make_range_request(client, url, current_position, max_retries, retry_delay).await?; + + // If we get a 416 Range Not Satisfiable, it means we're done + if response.status() == StatusCode::RANGE_NOT_SATISFIABLE { + info!("Download complete: server indicates no more data"); + break; + } + + let content_length = response.content_length(); + if let Some(cl) = content_length { + info!("Downloading {} bytes", cl); + } + + // Use custom stream handling with timeout for each chunk + let stream = response.bytes_stream(); + let mut had_data = false; + + // Use a fixed buffer size based on chunk_size_kb + let chunk_buffer_size = chunk_size_kb * 1024; + info!("Using chunk size of {} KB for download", chunk_size_kb); + + pin_mut!(stream); + + while let Some(chunk_result) = tokio::time::timeout( + Duration::from_secs(60), // 60 second timeout per chunk + stream.next() + ).await.unwrap_or_else(|_| { + error!("Timeout waiting for data chunk"); + None + }) { + match chunk_result { + Ok(chunk) => { + had_data = true; + let chunk_size = chunk.len() as u64; + + // Check if the chunk looks valid + if chunk_size > chunk_buffer_size as u64 * 2 { + warn!("Unusually large chunk received ({} bytes). This might indicate a download issue.", chunk_size); + } + + match file.write_all(&chunk) { + Ok(_) => { + if let Err(e) = file.flush() { + error!("Failed to flush file: {}", e); + break; + } + + current_position += chunk_size; + total_bytes += chunk_size; + + if total_bytes % (10 * 1024 * 1024) == 0 { // Log every 10MB + info!("Downloaded {} MB so far ({:.2}MB/s)", + total_bytes / (1024 * 1024), + chunk_size as f64 / 1_048_576.0); // Show approximate speed + } + }, + Err(e) => { + error!("Failed to write chunk to file: {}", e); + break; + } + } + }, + Err(e) => { + error!("Error downloading chunk: {} (connection may have been interrupted)", e); + warn!("Will attempt to resume download from byte position {}", current_position); + break; + } + } + } + + // If we didn't get any data in this iteration, we might be done or have an error + if !had_data { + if current_position > file_size { + info!("Download finished or connection closed. Downloaded {} MB total", total_bytes / (1024 * 1024)); + break; + } else { + warn!("No data received but download not complete. Will retry from byte position {}", current_position); + // Give the network a chance to recover + info!("Waiting for {} seconds before retrying...", retry_delay); + sleep(Duration::from_secs(retry_delay)).await; + continue; + } + } + } + + Ok(total_bytes) +} + +// Create a stream from a file with improved error handling +fn file_to_stream(file_path: PathBuf) -> Pin> + Send>> { + info!("Creating stream from file: {:?}", file_path); + + match File::open(&file_path) { + Ok(file) => { + let file = Arc::new(Mutex::new(file)); + let path_clone = file_path.clone(); + + Box::pin(stream::unfold((file, 0u64), move |(file_arc, position)| { + let path = path_clone.clone(); + async move { + let mut buffer = vec![0; 64 * 1024]; // 64KB chunks for better performance + + // Lock the file + let mut file_guard = file_arc.lock().await; + + // Try to seek to the current position first + if let Err(e) = file_guard.seek(SeekFrom::Start(position)) { + drop(file_guard); // Explicitly drop the guard before returning + return Some((Err(anyhow::anyhow!("Failed to seek in file: {}", e)), (file_arc, position))); + } + + // Read the data + let read_result = file_guard.read(&mut buffer); + + // Drop the guard explicitly before continuing + drop(file_guard); + + // Now process the read result + match read_result { + + Ok(n) if n > 0 => { + buffer.truncate(n); + let new_position = position + n as u64; + + // Log progress occasionally + if new_position % (50 * 1024 * 1024) < (n as u64) { // Log every ~50MB + info!("Reading from file: {} MB processed", new_position / (1024 * 1024)); + } + + Some((Ok(Bytes::from(buffer)), (file_arc, new_position))) + }, + Ok(_) => { + info!("Finished reading file: {:?}", path); + None // EOF + }, + Err(e) => { + error!("Error reading from file {:?}: {}", path, e); + Some((Err(anyhow::anyhow!("Error reading file: {}", e)), (file_arc, position))) + }, + } + } + })) + }, + Err(e) => { + error!("Failed to open file: {:?} - {}", file_path, e); + // Return an error stream + Box::pin(stream::once(async move { Err(anyhow::anyhow!("Failed to open file: {}", e)) })) + } + } } #[tokio::main] @@ -30,31 +339,92 @@ async fn main() -> anyhow::Result<()> { // Create snapshot directory if it doesn't exist if !Path::new(&args.snapshot_dir).exists() { - std::fs::create_dir_all(&args.snapshot_dir).unwrap(); - } - - let http_client = reqwest::Client::new(); - // Call the download snapshot endpoint - let response = http_client - .get(&format!("{}/download", args.snapshot_server_url)) - .send() - .await - .unwrap(); - // Check if the response status is OK - if !response.status().is_success() { - error!("Failed to download snapshot: HTTP {}", response.status()); - return Err(anyhow::anyhow!( - "HTTP request failed with status {}", - response.status() - )); - } - - // Stream the response body to the file - let stream = response - .bytes_stream() - .map(|byte| byte.with_context(|| "Failed to read byte stream from response body")); + std::fs::create_dir_all(&args.snapshot_dir).context("Failed to create snapshot directory")?; + } + + // Create an HTTP client with increased timeouts for large files + let http_client = reqwest::Client::builder() + .timeout(Duration::from_secs(3600)) // 1 hour timeout + .connect_timeout(Duration::from_secs(60)) // 60 second connect timeout + .build() + .context("Failed to build HTTP client")?; + + // Generate a download URL + let download_url = format!("{}/download", args.snapshot_server_url); + info!("Download URL: {}", download_url); + + // Create temp directory if it doesn't exist + let temp_dir = std::env::temp_dir().join(&args.snapshot_dir); + if !temp_dir.exists() { + std::fs::create_dir_all(&temp_dir).context("Failed to create temp directory")?; + } + + // Check for existing temp files if resume flag is set + let temp_file_path = if args.resume { + if let Some((path, size)) = find_largest_temp_file(&args.snapshot_dir) { + info!("Found existing temp file: {:?} ({} MB)", path, size / (1024 * 1024)); + path + } else { + let random_number = rand::random::(); + temp_dir.join(format!("temp-snapshot-{}", random_number)) + } + } else { + let random_number = rand::random::(); + temp_dir.join(format!("temp-snapshot-{}", random_number)) + }; + + info!("Using temp file: {:?}", temp_file_path); + + // Download with resume capability - with error handling + let total_bytes = match download_with_resume( + &http_client, + &download_url, + &temp_file_path, + args.max_retries, + args.retry_delay, + args.chunk_size_kb + ).await { + Ok(bytes) => bytes, + Err(e) => { + error!("Download error: {}. Checking if we can still use partial file...", e); + // Check if we have a partial file that's usable + if temp_file_path.exists() { + match temp_file_path.metadata() { + Ok(metadata) => { + let size = metadata.len(); + if size > 17 { // Minimum size for a valid snapshot (1 byte version + 8 bytes start slot + 8 bytes end slot) + info!("Partial download found ({} MB). Attempting to use it...", size / (1024 * 1024)); + size + } else { + return Err(anyhow::anyhow!("Download failed and partial file is too small to be usable")); + } + }, + Err(_) => return Err(anyhow::anyhow!("Download failed and couldn't check partial file")), + } + } else { + return Err(anyhow::anyhow!("Download failed and no partial file exists")); + } + } + }; + + info!("Download complete. Total size: {} MB", total_bytes / (1024 * 1024)); + + // Create a stream from the downloaded file + let file_stream = file_to_stream(temp_file_path.clone()); + let directory_adapter = DirectoryAdapter::from_local_directory(args.snapshot_dir.clone()); - create_snapshot_from_byte_stream(stream, &directory_adapter).await?; + info!("Processing snapshot data..."); + create_snapshot_from_byte_stream(file_stream, &directory_adapter).await?; + + // Clean up the temp file after successful processing + if temp_file_path.exists() { + if let Err(e) = std::fs::remove_file(&temp_file_path) { + warn!("Failed to remove temp file: {}", e); + } else { + info!("Removed temp file {:?}", temp_file_path); + } + } + info!("Snapshot successfully downloaded and processed"); Ok(()) } diff --git a/src/snapshot/mod.rs b/src/snapshot/mod.rs index ed18b5a3..ee669507 100644 --- a/src/snapshot/mod.rs +++ b/src/snapshot/mod.rs @@ -11,9 +11,9 @@ use std::{ pub use crate::common::{ fetch_block_parent_slot, get_network_start_slot, setup_logging, setup_metrics, LoggingFormat, }; +use crate::ingester::parser::get_compression_program_id; use crate::ingester::{ fetchers::BlockStreamConfig, - parser::ACCOUNT_COMPRESSION_PROGRAM_ID, typedefs::block_info::{BlockInfo, Instruction, TransactionInfo}, }; use anyhow::{anyhow, Context as AnyhowContext, Result}; @@ -27,6 +27,7 @@ use s3::region::Region; use s3::{bucket::Bucket, BucketConfiguration}; use s3_utils::multipart_upload::put_object_stream_custom; use tokio::io::{AsyncRead, ReadBuf}; + pub mod s3_utils; pub const MEGABYTE: usize = 1024 * 1024; @@ -356,10 +357,8 @@ impl DirectoryAdapter { } fn is_compression_instruction(instruction: &Instruction) -> bool { - instruction.program_id == ACCOUNT_COMPRESSION_PROGRAM_ID - || instruction - .accounts - .contains(&ACCOUNT_COMPRESSION_PROGRAM_ID) + instruction.program_id == get_compression_program_id() + || instruction.accounts.contains(&get_compression_program_id()) } pub fn is_compression_transaction(tx: &TransactionInfo) -> bool { @@ -411,13 +410,14 @@ fn create_temp_snapshot_file(dir: &str) -> (File, PathBuf) { // Create a subdirectory for the snapshot files let temp_dir = temp_dir.join(dir); if !temp_dir.exists() { - fs::create_dir(&temp_dir).unwrap(); + fs::create_dir_all(&temp_dir).unwrap(); } let random_number = rand::random::(); let temp_file_path = temp_dir.join(format!("temp-snapshot-{}", random_number)); if temp_file_path.exists() { fs::remove_file(&temp_file_path).unwrap(); } + println!("Creating temp file: {:?}", temp_file_path); let temp_file = File::create(&temp_file_path).unwrap(); (temp_file, temp_file_path) } diff --git a/src/tools/tree_validator/main.rs b/src/tools/tree_validator/main.rs index 2ea31546..45139460 100644 --- a/src/tools/tree_validator/main.rs +++ b/src/tools/tree_validator/main.rs @@ -7,7 +7,7 @@ use photon_indexer::{ }, ingester::persist::persisted_indexed_merkle_tree::validate_tree, }; -use solana_sdk::pubkey::Pubkey; +use solana_pubkey::Pubkey; use std::str::FromStr; use tokio; diff --git a/tests/data/transactions/batched_address_2_transactions/216FhX7NHcoe85ftwL7QdiRpT9vz6pJK3NqGGW1bDy5mPFg7UvXsKxZgMmwXjN2iexsXzXdvqS33aL65jjwWyeTU b/tests/data/transactions/batched_address_2_transactions/216FhX7NHcoe85ftwL7QdiRpT9vz6pJK3NqGGW1bDy5mPFg7UvXsKxZgMmwXjN2iexsXzXdvqS33aL65jjwWyeTU new file mode 100644 index 00000000..e13f3e04 --- /dev/null +++ b/tests/data/transactions/batched_address_2_transactions/216FhX7NHcoe85ftwL7QdiRpT9vz6pJK3NqGGW1bDy5mPFg7UvXsKxZgMmwXjN2iexsXzXdvqS33aL65jjwWyeTU @@ -0,0 +1,115 @@ +{ + "slot": 73, + "transaction": [ + "ATIYWP5GIS1ubX4U5COM23Wc4MVWYi2xg71Knn0TmgVFPNgoZlKkKRePrUQIijQ6bkmfwuAMlBuIUUItieNYqQMBAAkLlJweADw/IvfAeASqIJXdkEr0tY4lxcSIn8RlFcI4owHP1qUGmC48gXYgG4BESUf6BlOwx5mM7Qs37QOz8oolDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwZGb+UhFzL/7K26csOb57yM5bvF9xJrLEObOkAAAAAGp1X4ITkFTUQksVrwxDDPL0t/mHk62hJS1I82ZsbLzgksNuwi9ReDAP20Sqpq/8/wpG4cvGQcDj7QnaE7nvUIC7wPwLtHyi90xBEulKsTz6PGNOXcF+rLA80aI81+eHwe68SM+zJku8NL9cWlqDT8Z1AAbymG2W8jW8iHXvTdRNWem8sa08HDC9sJmzqsOsj+S+dqH6i3TLNx6mW/Y5xi9f/NHLoyuMDzJdu5uE5yCqPBB+d1u+u44BM7lLKWQ/L7syh1EFyuhbW0RHYH7b/hRSe/tCORHKQEI7/RUnomdbo4dk3zlJqYXQlu6/QzdiF4uJcDrWhlHpEVlmf2sGJfAgMABQJAQg8ACAoABAUKBwYICQIBngIx1L+BJ8IrxBEBAAAA/9Wem8sa08HDC9sJmzqsOsj+S+dqH6i3TLNx6mW/Y5xiAAAAAAAAAAAAAAEAAAABLhoa4Efd+QHrLAO0+vFe271UKtVb0okXo7+vUXiPJj6LXSWEGTVr0087ZV1ic8DCcPjF3DiYrx8HmvzD6TulbhLps9CXxC+/PvzwAdQpN8JH8gN8xOR8ivEKi6d3ISeRKLPUe9F7nIm+gZ8nRwfDAjmSP5v6RMxAlgoVbOW8HxMCAAAAoHVcd8KvqK0cF6Y3+ZyW98AdtkqxwUxVmcsV7BbwPjEAAAAAAAD5upKmDo3KfF4AsTF0kfQVi5xKinLPCx9NkY9Q6nFHHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999779956, + 290314204, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "postBalances": [ + 99999769954, + 290319206, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 4, + "accounts": [ + 0, + 9, + 7, + 6, + 10, + 5, + 8, + 4, + 4, + 2, + 4, + 1 + ], + "data": "oJ4RFmdrsti3sUJAJ9yukFuYertGYYd3ZaNXGLhs5bcoKeEZZjWqaYVZusT1xeyh7Z8PaZm22QaigKHgnHK7poLdgag152aqz9iKFWQCJ6EkwoMe1ruEYgwmBvZCrpwWJcyUVpbEHJfav6xC9BojwPAMZYR8eijc4gwTJRwcW9FTg6qPVxjVEpFSyrEv2pALE2s3PGFDkKz7jQ2bcF52SRkyTBmYCpQhq2Ssx2zMAsEzN9XxsQihh4P9v9xCzH8a4gPnD3HmZ7MFAy3LcQsZd8FPb9iewgqt7iqV1qixM8VbpPHrY2pVmgriZfmi71jgt8FpwMXhx5jYpVTe8FyTchEKQwpGXWf2JJG8hrVZfp24vP7nHNn3nvd95rH78Qfq163qH", + "stackHeight": 2 + }, + { + "programIdIndex": 2, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4Px9qXVhzify", + "stackHeight": 3 + }, + { + "programIdIndex": 5, + "accounts": [ + 10, + 7, + 1 + ], + "data": "4vWADsHeAEjeUNz8E8sN7988cUF94tBeoMiaBGR5A5rMxmtMtPCWWEqcZjiAkTTSvDU4ZmqPJYSpkbAqcF5ByQ3jVLPG8nXWNwnjxFKR7PnJCUxTz8c8CETN1WM3Gu1uq6MAQiJgszD35DyTWG3PsEJjx1gtnnrDHpPSVsF3HiTuAtdej1ABTrdzG67Bx1meA9cn2hVd3DYwFmCumKx4qJZPhYsqQesPys6WpfJ1pFxDL1uP3sPhJWdMtnjAhQTdDsojnLLbAreX6WeALH3hdCfsBcF3tB", + "stackHeight": 3 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy invoke [1]", + "Program log: Instruction: InvokeCpi", + "Program consumption: 996414 units remaining", + "Program consumption: 995923 units remaining", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [2]", + "Program log: invoke_cpi_with_read_only", + "Program log: mode Anchor", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [3]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 9340 of 880366 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 118251 of 989234 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy consumed 129466 of 999850 compute units", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 129616 + }, + "blockTime": 1746129061 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_address_2_transactions/26zcjw7nMDsX4UpdwqFnzDsrnEVV2tFSQuSRLR85ShpTsd5iNqpGBBXVh6Gb26LcA9gLoci9R7upc6jqWkvmSH4E b/tests/data/transactions/batched_address_2_transactions/26zcjw7nMDsX4UpdwqFnzDsrnEVV2tFSQuSRLR85ShpTsd5iNqpGBBXVh6Gb26LcA9gLoci9R7upc6jqWkvmSH4E new file mode 100644 index 00000000..49c8759a --- /dev/null +++ b/tests/data/transactions/batched_address_2_transactions/26zcjw7nMDsX4UpdwqFnzDsrnEVV2tFSQuSRLR85ShpTsd5iNqpGBBXVh6Gb26LcA9gLoci9R7upc6jqWkvmSH4E @@ -0,0 +1,115 @@ +{ + "slot": 56, + "transaction": [ + "ATcvepcrmW7cAWK4bi5FZEmsLLAco8Oi2VbKKfmJG/EOjxHVMC8CEJcDgIKkq0ZrHu07FbOpJrEx2khNYqrlpwMBAAkLlJweADw/IvfAeASqIJXdkEr0tY4lxcSIn8RlFcI4owHP1qUGmC48gXYgG4BESUf6BlOwx5mM7Qs37QOz8oolDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwZGb+UhFzL/7K26csOb57yM5bvF9xJrLEObOkAAAAAGp1X4ITkFTUQksVrwxDDPL0t/mHk62hJS1I82ZsbLzgksNuwi9ReDAP20Sqpq/8/wpG4cvGQcDj7QnaE7nvUIC7wPwLtHyi90xBEulKsTz6PGNOXcF+rLA80aI81+eHwe68SM+zJku8NL9cWlqDT8Z1AAbymG2W8jW8iHXvTdRNWem8sa08HDC9sJmzqsOsj+S+dqH6i3TLNx6mW/Y5xi9f/NHLoyuMDzJdu5uE5yCqPBB+d1u+u44BM7lLKWQ/L7syh1EFyuhbW0RHYH7b/hRSe/tCORHKQEI7/RUnomdYj1KlEcJTLdgT5TqyCZ3EC6V3eZRGOyFcNTNMYNhWc8AgMABQJAQg8ACAoABAUKBwYICQIBngIx1L+BJ8IrxBEBAAAA/9Wem8sa08HDC9sJmzqsOsj+S+dqH6i3TLNx6mW/Y5xiAAAAAAAAAAAAAAEAAAABASJvvlyrFXw5FOLiYT10rdRML6T6r9UOaaHDHZgTbtulKV5fiGGD+lUlySUvruopcDDCRg+XypBTwP9w/QK1kAZULOpOGEGku4lqNecgCMMeiACqz7l/SYz7EHTTYTMRpZSSnfFBPck6T4gDHP9gRylcl4CrYKpb6k02dTznMowCAAAAgf8Ra65bNfY22uF3CDAIz5B18Az6jUY/xBMAQbHkTKcAAAAAAAAVq96MXS4TUFOQSxPbaFpTXiCioOIR+bVwaGDpMEAetQAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999889978, + 290259182, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "postBalances": [ + 99999879976, + 290264184, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 4, + "accounts": [ + 0, + 9, + 7, + 6, + 10, + 5, + 8, + 4, + 4, + 2, + 4, + 1 + ], + "data": "oJ4RFmdrsti3sUJAJ9yukFuYertGYYd3ZaNXGLhs5bcoKeEZZjWqaYVZusT1xeyh7Z8PaZm22QaigKHgnHJzq1Zcse9wWF28vfLELLhUZCeoWwJ6XBVe4xp57fGyzVjvM28ni1SXakwQSnMkgzbYwzDnBav3Ri2gaXKFGJM9BPjn6xmQRFri5cV2Lg67g4ME321gPNLf1bbC9GAmyLw8QGUBA1XHwXJRHtLRtGCf8XfKhyu563XMEuXa5pHzrfQCwBvmnfokjqKdt1PiVTND5XrAH4HVDa7gKA3JDnw2SACZSrmQFSucEKQrtdaCoMY4ehPWeDwhahCdq9tUTQJNmeD2r49NrRdS7N1Jd4cEjNJsBC5LVcUmh3gxnpeC6xpTn3PUj", + "stackHeight": 2 + }, + { + "programIdIndex": 2, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4Px9qXVhzify", + "stackHeight": 3 + }, + { + "programIdIndex": 5, + "accounts": [ + 10, + 7, + 1 + ], + "data": "4vWADsHeAEjeUNz8E8sN7988cUF94tBeoMiaBGR5A5rMxmtMtPCWWEqcZjiAkTTSvDU4ZmqPJYZAkpRQTN6B2odkhDRCNXP5j2YhrmdziYGtoVdLkVMiccfZ9wdYWN7RaVPYAJJgEH2vV1ev4DBYtRnnuiPq56PJiC6beLr5R5xFNXf7A75wdAFDjUXBz8bwRskhmKaQddG3wdj5kVCHYcYTNCnFDHhzV5cK2RA7XkqQH96mQJN12zs5B4iMFJcn5zEd9ntG7VzkbUGCKdyzz8oNw5kYMd", + "stackHeight": 3 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy invoke [1]", + "Program log: Instruction: InvokeCpi", + "Program consumption: 996414 units remaining", + "Program consumption: 995923 units remaining", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [2]", + "Program log: invoke_cpi_with_read_only", + "Program log: mode Anchor", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [3]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 9340 of 880366 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 118251 of 989234 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy consumed 129466 of 999850 compute units", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 129616 + }, + "blockTime": 1746129052 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_address_2_transactions/29QDyrBHUYsJoJFGbef9YE7tytMaZuhVreC1j2keoaqMwRjjKjXgWzoqWoH6QkWxBraKfgqxXCpPDWjZvZdFAiNs b/tests/data/transactions/batched_address_2_transactions/29QDyrBHUYsJoJFGbef9YE7tytMaZuhVreC1j2keoaqMwRjjKjXgWzoqWoH6QkWxBraKfgqxXCpPDWjZvZdFAiNs new file mode 100644 index 00000000..1cd213d5 --- /dev/null +++ b/tests/data/transactions/batched_address_2_transactions/29QDyrBHUYsJoJFGbef9YE7tytMaZuhVreC1j2keoaqMwRjjKjXgWzoqWoH6QkWxBraKfgqxXCpPDWjZvZdFAiNs @@ -0,0 +1,115 @@ +{ + "slot": 52, + "transaction": [ + "ATlC3ZDdg5I5wBeRVqPqYtH2a9KQYxxT3z3H7zB+aY5AalSLAH67K2w7xud6DnsFy3T/m1K2EEoiOrsgfCPgGQABAAkLlJweADw/IvfAeASqIJXdkEr0tY4lxcSIn8RlFcI4owHP1qUGmC48gXYgG4BESUf6BlOwx5mM7Qs37QOz8oolDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwZGb+UhFzL/7K26csOb57yM5bvF9xJrLEObOkAAAAAGp1X4ITkFTUQksVrwxDDPL0t/mHk62hJS1I82ZsbLzgksNuwi9ReDAP20Sqpq/8/wpG4cvGQcDj7QnaE7nvUIC7wPwLtHyi90xBEulKsTz6PGNOXcF+rLA80aI81+eHwe68SM+zJku8NL9cWlqDT8Z1AAbymG2W8jW8iHXvTdRNWem8sa08HDC9sJmzqsOsj+S+dqH6i3TLNx6mW/Y5xi9f/NHLoyuMDzJdu5uE5yCqPBB+d1u+u44BM7lLKWQ/L7syh1EFyuhbW0RHYH7b/hRSe/tCORHKQEI7/RUnomdQN4alS2SH6wfFqTfSuyX91ViBilzCkD7WHayimdtKgMAgMABQJAQg8ACAoABAUKBwYICQIBngIx1L+BJ8IrxBEBAAAA/9Wem8sa08HDC9sJmzqsOsj+S+dqH6i3TLNx6mW/Y5xiAAAAAAAAAAAAAAEAAAABqQQLSuJkevblqoSJvjRkFTpjK2Yzp6nV397qDYu8o/mhXvsHdyoMRbxXnzA5S/lgbx7q+NHpcQvGNbuIQXzzBQ2aNdko0NCiBEn0oi2KZtMbwVYRyM7fiZXl0ZlMzvKLhV7shg/fbfU/HMDuI5D82j2m46NDNiDKFH4fHWMyxwgCAAAADjgiFLXxV9HH02ogWLnHJFsJ1e9bXhu265uCmxC2op8AAAAAAAClBBbidqDnnL5mU07RcTpARqJ6RWuAuqKjgNXt8VpdrwAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999919984, + 290244176, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "postBalances": [ + 99999909982, + 290249178, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 4, + "accounts": [ + 0, + 9, + 7, + 6, + 10, + 5, + 8, + 4, + 4, + 2, + 4, + 1 + ], + "data": "oJ4RFmdrsti3sUJAJ9yukFuYertGYYd3ZaNXGLhs5bcoKeEZZjWqaYVZusT1xeyh7Z8PaZm22QaigKHgnHKSwyv6NidV8Hjdk4Gpv4Zp76zPVTT7ZYqnCyCpPVsTv7GBHdEmk9c8taQjJdwH3AZGxLgpZm5dJsSbWLcmjjMyDkKFptxRVNmbGB4SwNivCK9UWr7SvGhEkd8T9Fa3SPpq3QGenxuGShTqh14ahiWttV1vPQJs32bhmjrKMNwBKF2oa7kCNNqYhYiLMKznyeZ8WPTcHzhaLxmQM58K3aN3ccwWzBSLxniMCJwF2wHCeCQYarcmgTmZ4en9hHa6QRvW2sT5JbpiC5YSuhtR3DZT4n7jVb9LAtxwqoX9PvUCeR9npJMLj", + "stackHeight": 2 + }, + { + "programIdIndex": 2, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4Px9qXVhzify", + "stackHeight": 3 + }, + { + "programIdIndex": 5, + "accounts": [ + 10, + 7, + 1 + ], + "data": "4vWADsHeAEjeUNz8E8sN7988cUF94tBeoMiaBGR5A5rMxmtMtPCWWEqcZjiAkTTSvDU4ZmqPJYgbTW3tbChSYEM5dMioFAoMyBpeZySvVxSsnLfNUAkGDo6ppzxw1fKeRHX8RTfPAUVDDw7uvCEoAVaQ3yDKCXR72pDJVGpcQN9UyaNrZFEsh1AFGLCWBC9qhHSQq6a266zHMQXcJ3PEPsuaRwb1aYgjnFJbSbEhx5j7WXVNZP3JWjAfjt1kNENaL38msrMnj635pHYH99mjWd5w2XWjod", + "stackHeight": 3 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy invoke [1]", + "Program log: Instruction: InvokeCpi", + "Program consumption: 996414 units remaining", + "Program consumption: 995923 units remaining", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [2]", + "Program log: invoke_cpi_with_read_only", + "Program log: mode Anchor", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [3]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 9340 of 880366 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 118251 of 989234 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy consumed 129466 of 999850 compute units", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 129616 + }, + "blockTime": 1746129050 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_address_2_transactions/2CbhsgcB5pqk4wXyX1FQiW2pGGiDJVf3nH8LAsPQ3ubjMn9KWtXivA1idShp11rEym6vwAZBQmmUrrC8xKUdpU8f b/tests/data/transactions/batched_address_2_transactions/2CbhsgcB5pqk4wXyX1FQiW2pGGiDJVf3nH8LAsPQ3ubjMn9KWtXivA1idShp11rEym6vwAZBQmmUrrC8xKUdpU8f new file mode 100644 index 00000000..8022a08d --- /dev/null +++ b/tests/data/transactions/batched_address_2_transactions/2CbhsgcB5pqk4wXyX1FQiW2pGGiDJVf3nH8LAsPQ3ubjMn9KWtXivA1idShp11rEym6vwAZBQmmUrrC8xKUdpU8f @@ -0,0 +1,115 @@ +{ + "slot": 59, + "transaction": [ + "ATwE2/eIcyzbN37KacPZQwoIsf4s6ojKCta+7EDAnutBwtYC7JT/zUkGJ8ECNx4Rw4cQqMKkQn6f5MbqqVQ5AwABAAkLlJweADw/IvfAeASqIJXdkEr0tY4lxcSIn8RlFcI4owHP1qUGmC48gXYgG4BESUf6BlOwx5mM7Qs37QOz8oolDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwZGb+UhFzL/7K26csOb57yM5bvF9xJrLEObOkAAAAAGp1X4ITkFTUQksVrwxDDPL0t/mHk62hJS1I82ZsbLzgksNuwi9ReDAP20Sqpq/8/wpG4cvGQcDj7QnaE7nvUIC7wPwLtHyi90xBEulKsTz6PGNOXcF+rLA80aI81+eHwe68SM+zJku8NL9cWlqDT8Z1AAbymG2W8jW8iHXvTdRNWem8sa08HDC9sJmzqsOsj+S+dqH6i3TLNx6mW/Y5xi9f/NHLoyuMDzJdu5uE5yCqPBB+d1u+u44BM7lLKWQ/L7syh1EFyuhbW0RHYH7b/hRSe/tCORHKQEI7/RUnomdQmjchuV+FJ9VTqF4dSOovvMq1jhU0JwZniCiXwGsLF0AgMABQJAQg8ACAoABAUKBwYICQIBngIx1L+BJ8IrxBEBAAAA/9Wem8sa08HDC9sJmzqsOsj+S+dqH6i3TLNx6mW/Y5xiAAAAAAAAAAAAAAEAAAABGE2VCXp6qzk6WLzh30kNlq5HP6Opvt/Xq+5Wy+IUFKumXoEsIDFbwOOJ5rzWIUvVzWHtx+JqsSOEEyDSuUv9GSs0DM/bGPcVAQEt/Bgvps927RSG4moy+LF2j9VvEXGeDnJplsl5klhudT6GMIoKjP48Db+dMh+XgU9/6J31w28CAAAAlK5xtuJOY1VhOfuf4uCbZJFBk2xsioxHSnWupP9mVGkAAAAAAAC9fAlvTc9AD/3OsHXvMfyjtCemZqG1+e+bVz1vlGv8OwAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999869974, + 290269186, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "postBalances": [ + 99999859972, + 290274188, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 4, + "accounts": [ + 0, + 9, + 7, + 6, + 10, + 5, + 8, + 4, + 4, + 2, + 4, + 1 + ], + "data": "oJ4RFmdrsti3sUJAJ9yukFuYertGYYd3ZaNXGLhs5bcoKeEZZjWqaYVZusT1xeyh7Z8PaZm22QaigKHgnHK4S5st5kM6Can3JcCez51Mff3iAcvFRCQC9UUV79uNg5X7HXNRNnFGeomu2Vs7ASBRU3WQ4aG8ZhMBuhimu7sNuwnycDPPnknQATPnZSb6iriZpqSLcJU1CgtDtdJ4HkxqsTC8UEU7M7kk1EvH5pHniqrffRQjVGMHJH4jtNbvoSFLjjo5LqcSP3GRxFGprFAXbHfjShJWGoarvYMXg1nCweEYsYrfVcqEfCL4eLGZXmDa6FjDmyhoTyF3vKGP1U3CCeAdyDFSaLZfkcqvWwS6FWoGWS9sLYtChvovxidXgbPrXQjiw", + "stackHeight": 2 + }, + { + "programIdIndex": 2, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4Px9qXVhzify", + "stackHeight": 3 + }, + { + "programIdIndex": 5, + "accounts": [ + 10, + 7, + 1 + ], + "data": "4vWADsHeAEjeUNz8E8sN7988cUF94tBeoMiaBGR5A5rMxmtMtPCWWEqcZjiAkTTSvDU4ZmqPJYff7BsZiCHu6Y1uvMS4KXrZsxzJ2SVEAnR7nnnrhDufdiu9BEkgWRd3wo3ZJX785p7XdyfZkxrSQthEWzPTrr74tMg8vDC4LYE6dQ7QLHJ4MyyPhFHFyeTPi2fASYoeS5MaHLyF8LgLF6dn33KZ7jMMCUhCYCmYN2qvhuebZ5zdA66EZhQDjSX7gmiLsbbrd7rsqh76NbJvSB5UqsRuEX", + "stackHeight": 3 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy invoke [1]", + "Program log: Instruction: InvokeCpi", + "Program consumption: 996414 units remaining", + "Program consumption: 995923 units remaining", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [2]", + "Program log: invoke_cpi_with_read_only", + "Program log: mode Anchor", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [3]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 9340 of 880366 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 118251 of 989234 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy consumed 129466 of 999850 compute units", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 129616 + }, + "blockTime": 1746129054 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_address_2_transactions/2GCTjTtDtbc1gtFtxxTafFEvdR4XqHEjgLK1JWxiTT1fHooD8o73ug6UzD6fqEWKZPwMUvXXpq3W4wjS2SLMt8F2 b/tests/data/transactions/batched_address_2_transactions/2GCTjTtDtbc1gtFtxxTafFEvdR4XqHEjgLK1JWxiTT1fHooD8o73ug6UzD6fqEWKZPwMUvXXpq3W4wjS2SLMt8F2 new file mode 100644 index 00000000..101ba8cb --- /dev/null +++ b/tests/data/transactions/batched_address_2_transactions/2GCTjTtDtbc1gtFtxxTafFEvdR4XqHEjgLK1JWxiTT1fHooD8o73ug6UzD6fqEWKZPwMUvXXpq3W4wjS2SLMt8F2 @@ -0,0 +1,84 @@ +{ + "slot": 113, + "transaction": [ + "AT8fcf9EGXvquMoZxajVgRhPlpvk9aGY35lK4yUGS3FilaDY37zCTxc+KGnwDVDmPOtBCvtZYd5XVSutRk5oeQEBAAYJzLjCFXXnWj51s6K1RyQiLzHD11pzA0VK0kuivz8zqswhWc53yo4Lew6JOci1vTttbJcOTjfIMGIiy5vpCKZaRM/WpQaYLjyBdiAbgERJR/oGU7DHmYztCzftA7PyiiUMAwZGb+UhFzL/7K26csOb57yM5bvF9xJrLEObOkAAAAAFDSsTeVE2hc8C8rX9UpG9lZsrBgqlJepbNIE7Hbm3bgksNuwi9ReDAP20Sqpq/8/wpG4cvGQcDj7QnaE7nvUIC7wPwLtHyi90xBEulKsTz6PGNOXcF+rLA80aI81+eHwQpl591jkE+Dg60Dze4Hi5FNhzGIA7FTWAcNeS4Fz957/QmmoHZdEI20ACv+9MyGVTFGij2iz8yvlzRZ4iyBL0fqDfWA2DdNnZhKBkcC9RDHqbwpcOag0RmSDpkZaZYnACAwAFAkBCDwAEBwEABwgFBgKtAat/8kF9vXl1/6AAAAAtxvHGcWyosnrS9cXUIE9fK4dzoryIEx51q1bqHhtK1x8TwQCRLhKubO6vMvcOM1jnQjPP5STY/jVz1BahGEzbMEYGcUUlBDrbuh5HI2uBg0iVlDfXGHgCJtcQH8OOIw4E7EULMZFftezxi2g6hEPGFrJ98NQFrxY4bSgLDPwaQoR7CFhJ8JHfH1976+/8c6faUA0W/oxltdd3LZyJx/2C", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999990000, + 2735280, + 290329210, + 1, + 1141440, + 1141440, + 1141440, + 0, + 1614720 + ], + "postBalances": [ + 99999985000, + 2735280, + 290329210, + 1, + 1141440, + 1141440, + 1141440, + 0, + 1614720 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 5, + "accounts": [ + 7, + 8, + 6, + 2 + ], + "data": "SBkMhczQ9esLdkDPWuSsc9haPe9pp5z6qkeDhw25Rm875beLiSm2rzJo6svw6xYiwjHKYChWuSERdvHC73CFtyU8TZZdMnAzEraNsfWpzC6KHafhgfwm492eY6W9BnKkNkQ6gXW5GT9Mr6nqL9aV3YqD7b5RxZYjyfu9Jon5BNShARxa1jjXbyf8wrWELg6DAk3jiFdePkDYwW5qMgKBxR1T6DeC2pd7w4tPwZ7UaSV", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [], + "data": "3Q747BoHqHsBxkNHj5NHEZnP1TajcfmzuWaVnRBAGpdvhUvpLwjkwwa66ZVXJfJEZ68vtecCNqSCUbD7vZMXUXqADAsKEhQVi23cVE2tovQqqd7iWu3HT8YTQViVm5wsXsYmaEVo4UqvhP5QoCkZAJMoWPsAdBpZu", + "stackHeight": 3 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program Lighton6oQpVkeewmo2mcPTQQp7kYHr4fWpAgJyEmDX invoke [1]", + "Program log: Instruction: BatchUpdateAddressTree", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: BatchUpdateAddressTree", + "Program noopb9bkMVfRPU8AsbpTUg8AQkHtKwMYZiFUjNRtMmV invoke [3]", + "Program noopb9bkMVfRPU8AsbpTUg8AQkHtKwMYZiFUjNRtMmV consumed 38 of 881758 compute units", + "Program noopb9bkMVfRPU8AsbpTUg8AQkHtKwMYZiFUjNRtMmV success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 102385 of 983946 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program Lighton6oQpVkeewmo2mcPTQQp7kYHr4fWpAgJyEmDX consumed 120212 of 999850 compute units", + "Program Lighton6oQpVkeewmo2mcPTQQp7kYHr4fWpAgJyEmDX success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 120362 + }, + "blockTime": 1746129081 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_address_2_transactions/2N4oZfEJo9SPV5vgUCutUFYDFfEu1mzRRnGhKmzY7PzaRHX3YufGU9zjRd3U6Z7ggwkwGoAQf1ZjJiwCNPwFQxmb b/tests/data/transactions/batched_address_2_transactions/2N4oZfEJo9SPV5vgUCutUFYDFfEu1mzRRnGhKmzY7PzaRHX3YufGU9zjRd3U6Z7ggwkwGoAQf1ZjJiwCNPwFQxmb new file mode 100644 index 00000000..7552d6f9 --- /dev/null +++ b/tests/data/transactions/batched_address_2_transactions/2N4oZfEJo9SPV5vgUCutUFYDFfEu1mzRRnGhKmzY7PzaRHX3YufGU9zjRd3U6Z7ggwkwGoAQf1ZjJiwCNPwFQxmb @@ -0,0 +1,84 @@ +{ + "slot": 111, + "transaction": [ + "AUQu4m+SRdNaIEfwYdcJzlzwqdh6BoFPDWB5tNGDoQpNQR0wJkkKaZYdMtyudifL0hBaa3a/yFcIBLNJeMzBlg4BAAYJzLjCFXXnWj51s6K1RyQiLzHD11pzA0VK0kuivz8zqswhWc53yo4Lew6JOci1vTttbJcOTjfIMGIiy5vpCKZaRM/WpQaYLjyBdiAbgERJR/oGU7DHmYztCzftA7PyiiUMAwZGb+UhFzL/7K26csOb57yM5bvF9xJrLEObOkAAAAAFDSsTeVE2hc8C8rX9UpG9lZsrBgqlJepbNIE7Hbm3bgksNuwi9ReDAP20Sqpq/8/wpG4cvGQcDj7QnaE7nvUIC7wPwLtHyi90xBEulKsTz6PGNOXcF+rLA80aI81+eHwQpl591jkE+Dg60Dze4Hi5FNhzGIA7FTWAcNeS4Fz957/QmmoHZdEI20ACv+9MyGVTFGij2iz8yvlzRZ4iyBL0rg/5FO0UqXdTFWzEMCnmTD1187/+Yc7wrhINhl5kjHkCAwAFAkBCDwAEBwEABwgFBgKtAat/8kF9vXl1/6AAAAAiauxa+BYIlqgCi2KYtKq3wvJsdnqafvx6BOyQBkdt1o5SHbjWLu5aWqqaPOqmaTDaZjYUq69zyRQYkKEWjtd+h7V4IZOQkFG4gMdN33tOkdI9LsYoYaF9EngikP+KDIUq46VsKWhZS8XmqCpk0vp6Q8B65DZvlnOOumS5hLaroBRCCecLP3qVy4win2Ng1qnzRkHJkZuKSdhs+H4dSyZN", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 100000000000, + 2735280, + 290329210, + 1, + 1141440, + 1141440, + 1141440, + 0, + 1614720 + ], + "postBalances": [ + 99999995000, + 2735280, + 290329210, + 1, + 1141440, + 1141440, + 1141440, + 0, + 1614720 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 5, + "accounts": [ + 7, + 8, + 6, + 2 + ], + "data": "SBkMhczQ9esLdkDPWZRFRwNeYtVRwWvoXSdj12JK4Rwun9FtFZLoSq3FzLeekT8i3WfLAXqqjeDEXgofDXyLNAXKTTwbe11W2mtw9waBQkkEc16Zw3XdWHwHhcm6kyABZhwkizs1m37e4GdWUrPmwFfea7nPWT7yJ4AfdC1wpv8Y8FqxLVf3Zd5Zq29DeTY2fr65RnkhYhbQhZhvmf9HpAgyFLmkc8HXHfWafHNtjr4", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [], + "data": "3Q747BoHqHsBxkNHj5NHEZnP1TajcfmzuWaVnRBAGpdvhUvpLwjkwwa65i3JiSbowtoxoqGhP5b7tFkhC2bj4MG7yy6NVYHr5WRYcRgjygHBjob6hvfEqMuhTHK7H8sbvSaCRP4hbgZu2L4YVaDNswEaH9HTDrBTD", + "stackHeight": 3 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program Lighton6oQpVkeewmo2mcPTQQp7kYHr4fWpAgJyEmDX invoke [1]", + "Program log: Instruction: BatchUpdateAddressTree", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: BatchUpdateAddressTree", + "Program noopb9bkMVfRPU8AsbpTUg8AQkHtKwMYZiFUjNRtMmV invoke [3]", + "Program noopb9bkMVfRPU8AsbpTUg8AQkHtKwMYZiFUjNRtMmV consumed 38 of 881758 compute units", + "Program noopb9bkMVfRPU8AsbpTUg8AQkHtKwMYZiFUjNRtMmV success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 102385 of 983946 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program Lighton6oQpVkeewmo2mcPTQQp7kYHr4fWpAgJyEmDX consumed 120212 of 999850 compute units", + "Program Lighton6oQpVkeewmo2mcPTQQp7kYHr4fWpAgJyEmDX success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 120362 + }, + "blockTime": 1746129079 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_address_2_transactions/2VTeevyuREQW7CPYJh5WPDtNb8e1T1YdTNBa1y2qC8Xk1BQPaRTRehP7MKpm9sebw8TiTU3nrPMa1fneVCuAk8Vn b/tests/data/transactions/batched_address_2_transactions/2VTeevyuREQW7CPYJh5WPDtNb8e1T1YdTNBa1y2qC8Xk1BQPaRTRehP7MKpm9sebw8TiTU3nrPMa1fneVCuAk8Vn new file mode 100644 index 00000000..5f78e9ec --- /dev/null +++ b/tests/data/transactions/batched_address_2_transactions/2VTeevyuREQW7CPYJh5WPDtNb8e1T1YdTNBa1y2qC8Xk1BQPaRTRehP7MKpm9sebw8TiTU3nrPMa1fneVCuAk8Vn @@ -0,0 +1,115 @@ +{ + "slot": 46, + "transaction": [ + "AUqPMn5yD2s4WMKf5YGh64/wxP1d3/rnY9r7RmS2v979AzPK3qd/oHz89PWItOPWdaA6LJ7Ex37ILsL/BoVTSwkBAAkLlJweADw/IvfAeASqIJXdkEr0tY4lxcSIn8RlFcI4owHP1qUGmC48gXYgG4BESUf6BlOwx5mM7Qs37QOz8oolDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwZGb+UhFzL/7K26csOb57yM5bvF9xJrLEObOkAAAAAGp1X4ITkFTUQksVrwxDDPL0t/mHk62hJS1I82ZsbLzgksNuwi9ReDAP20Sqpq/8/wpG4cvGQcDj7QnaE7nvUIC7wPwLtHyi90xBEulKsTz6PGNOXcF+rLA80aI81+eHwe68SM+zJku8NL9cWlqDT8Z1AAbymG2W8jW8iHXvTdRNWem8sa08HDC9sJmzqsOsj+S+dqH6i3TLNx6mW/Y5xi9f/NHLoyuMDzJdu5uE5yCqPBB+d1u+u44BM7lLKWQ/L7syh1EFyuhbW0RHYH7b/hRSe/tCORHKQEI7/RUnomdUukTnMfijmyVnWqQVMgTN2rudpma6o07DiwfwDctWoTAgMABQJAQg8ACAoABAUKBwYICQIBngIx1L+BJ8IrxBEBAAAA/9Wem8sa08HDC9sJmzqsOsj+S+dqH6i3TLNx6mW/Y5xiAAAAAAAAAAAAAAEAAAABlG114iFhQ94HqY6Ac2O8c2gGpHbyT5gA01mav/4xNSIbf7LEkvCo2TrTyicvEOHBBn0gYcyDfeI0sU5hIhbR4jASN2S2UHvgAPWfTarb5Xi911TM+Hs2pDAwoZGm1twJKyzmAtkK1raevwg+DusVqqbQnmjV9VatIgTOPwnzFcoCAAAAw5M/qyDQLsbYwmISSOs74E3UZBzEBi4BUVc/6cad8psAAAAAAACDCYeZCYW9cUi0E4D9kqfDPtGGyaKLkC9wvESU3wHwjQAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999959992, + 290224168, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "postBalances": [ + 99999949990, + 290229170, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 4, + "accounts": [ + 0, + 9, + 7, + 6, + 10, + 5, + 8, + 4, + 4, + 2, + 4, + 1 + ], + "data": "oJ4RFmdrsti3sUJAJ9yukFuYertGYYd3ZaNXGLhs5bcoKeEZZjWqaYVZusT1xeyh7Z8PaZm22QaigKHgnHKPkC8WEYAnMxrcL5BFptS97fmBoexXik9WN6uQzyTCg6NjBcwhuzUsee7CPVpfJWr1r526ExFfheduo64KUKEhBqL3u5497DQnzQukgS638YsBTmFPnrGoGDUJtRiJQvEkftBenGmsrF1U4UyFQgkbXemPL1fHjujiWJLonpiAZxAC7ytKwtN2F8JMK9VmMfKQakKGroeLrKbCmPJ3MAJdN93wCjdHfrj3MvNUXacA4dktXMs5zPh8ZP1B1eXCp3AXN6CodrWUgxcDHaErvW7VKtRaisVzBzBc2eAYkjqmbZXhRHqWo", + "stackHeight": 2 + }, + { + "programIdIndex": 2, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4Px9qXVhzify", + "stackHeight": 3 + }, + { + "programIdIndex": 5, + "accounts": [ + 10, + 7, + 1 + ], + "data": "4vWADsHeAEjeUNz8E8sN7988cUF94tBeoMiaBGR5A5rMxmtMtPCWWEqcZjiAkTTSvDU4ZmqPJYfmL1FpXUZpKGSzBYXeFVQSpNH6Zk9zRNepzz7XsCZh5i3r2PPGRzXyE314ErdVFeZoJKrHXJfczr2ZueJVL8RzdAnjng2v6hfywqrD2qtyuPT2oLiLwPmUKg9fYVbhzj1f7wD1RHuK7emvjaStjhao899waAMhy9r7X1oindJEJNwVPZXVv3U1ibi4sPEa4MFpq6MbQpUsX9ZUtLnvpF", + "stackHeight": 3 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy invoke [1]", + "Program log: Instruction: InvokeCpi", + "Program consumption: 996414 units remaining", + "Program consumption: 995923 units remaining", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [2]", + "Program log: invoke_cpi_with_read_only", + "Program log: mode Anchor", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [3]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 9352 of 880366 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 118263 of 989234 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy consumed 129478 of 999850 compute units", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 129628 + }, + "blockTime": 1746129048 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_address_2_transactions/37gEu5455AYpvX4yvY6EXS7XiMW9dNgZapiwyNe2fNpcrzWS9S4w38qrjpEw9CyFq9VyQVAtUYbj1VAfWuJxAb2E b/tests/data/transactions/batched_address_2_transactions/37gEu5455AYpvX4yvY6EXS7XiMW9dNgZapiwyNe2fNpcrzWS9S4w38qrjpEw9CyFq9VyQVAtUYbj1VAfWuJxAb2E new file mode 100644 index 00000000..7db21068 --- /dev/null +++ b/tests/data/transactions/batched_address_2_transactions/37gEu5455AYpvX4yvY6EXS7XiMW9dNgZapiwyNe2fNpcrzWS9S4w38qrjpEw9CyFq9VyQVAtUYbj1VAfWuJxAb2E @@ -0,0 +1,115 @@ +{ + "slot": 74, + "transaction": [ + "AWnKpgZaFPTRoHrYS1ZS7a4oOTv2P1f0GEJS+gl9dcqgEGhREXo1BKFhDHfb4HkEcq5oOel7rT0GeJamXT9XngcBAAkLlJweADw/IvfAeASqIJXdkEr0tY4lxcSIn8RlFcI4owHP1qUGmC48gXYgG4BESUf6BlOwx5mM7Qs37QOz8oolDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwZGb+UhFzL/7K26csOb57yM5bvF9xJrLEObOkAAAAAGp1X4ITkFTUQksVrwxDDPL0t/mHk62hJS1I82ZsbLzgksNuwi9ReDAP20Sqpq/8/wpG4cvGQcDj7QnaE7nvUIC7wPwLtHyi90xBEulKsTz6PGNOXcF+rLA80aI81+eHwe68SM+zJku8NL9cWlqDT8Z1AAbymG2W8jW8iHXvTdRNWem8sa08HDC9sJmzqsOsj+S+dqH6i3TLNx6mW/Y5xi9f/NHLoyuMDzJdu5uE5yCqPBB+d1u+u44BM7lLKWQ/L7syh1EFyuhbW0RHYH7b/hRSe/tCORHKQEI7/RUnomdZ3o45crSZuuQjT92e1aBjl+I3tShAm1g1fkdt5YvVUgAgMABQJAQg8ACAoABAUKBwYICQIBngIx1L+BJ8IrxBEBAAAA/9Wem8sa08HDC9sJmzqsOsj+S+dqH6i3TLNx6mW/Y5xiAAAAAAAAAAAAAAEAAAABFHWqm8oOBP4YkDckfOtUFNbd6VPai9xPNorpuzbMlqGZR16Wd1cqGt4EpZJZrizSBIiJLTAQAqMNj3+UeXzKDQcr6wBx9aklP6aBLNSasfaWPCimV4MnryltPGr3kjGUDApQUZZ67q5QYPXLdpA7SPcGuD80Y/PadeW4nSlwBTsCAAAArGbMIn1o2WdZJsNItMn/BjsksxUcVLOs4Qp5e4TjGLgAAAAAAAB40wvvci1CLpuM6a2RIOd/7U/PbijfdGsNaKT9CrUxGgAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999769954, + 290319206, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "postBalances": [ + 99999759952, + 290324208, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 4, + "accounts": [ + 0, + 9, + 7, + 6, + 10, + 5, + 8, + 4, + 4, + 2, + 4, + 1 + ], + "data": "oJ4RFmdrsti3sUJAJ9yukFuYertGYYd3ZaNXGLhs5bcoKeEZZjWqaYVZusT1xeyh7Z8PaZm22QaigKHgnHK3qQFKwpj4KDsom1dNzFk7kKERqopQeBJQKFqUaTiLnrzLEPqXoe3Je9H39LF1Dm5eTL5FZLBq7UVuciyubjyNoSvcaZrLM4wPNWdzaRCCaD2WrDAfgdP3fFHefhnqgm5EiqnwtyVzx4ZB6HMcRbu8xepKuotES5jmdnTF25DRTNmi4h4FFZhQpQqtEL3o3J8gBgoRaZWDa5uavZVu7oT2qz6NFuPUwsgLs4to4ku5E6ATybR5Cs1Z9BzhKDoVDbuyJBzf1LnJXrvvopzi55W4Xzx1XmRCzRJymS7cb58gZKpnBXDzw", + "stackHeight": 2 + }, + { + "programIdIndex": 2, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4Px9qXVhzify", + "stackHeight": 3 + }, + { + "programIdIndex": 5, + "accounts": [ + 10, + 7, + 1 + ], + "data": "4vWADsHeAEjeUNz8E8sN7988cUF94tBeoMiaBGR5A5rMxmtMtPCWWEqcZjiAkTTSvDU4ZmqPJYUjLx9atg6G1XFnE3JT86vA7rM3xgoBuZPWCF1JUY5pf6qJPkt6fKbmKG47GTcizXLJxqbgfnmcZ9sUSd3LuxzkoJaP2Jjctybev7faENGJNwFscVgg8fcz42Tdg5s2jdUJwTBYEZ8aHuMvUBQKGup9g53o93VCP6X3tDkEpUdeAgbeSyxTMvhn6kwYuBpiJtWNk5oJwx3TGdVjidw4fh", + "stackHeight": 3 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy invoke [1]", + "Program log: Instruction: InvokeCpi", + "Program consumption: 996414 units remaining", + "Program consumption: 995923 units remaining", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [2]", + "Program log: invoke_cpi_with_read_only", + "Program log: mode Anchor", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [3]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 9340 of 880366 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 118251 of 989234 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy consumed 129466 of 999850 compute units", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 129616 + }, + "blockTime": 1746129061 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_address_2_transactions/3NedZ2zui6oWA6W5jx3k3RMBW6Gc85Dkwxhen9p9ZHst4DxZ6YNVPTzWnbc2aXb324ryGiFGzWmSMDV4b9ztU3pH b/tests/data/transactions/batched_address_2_transactions/3NedZ2zui6oWA6W5jx3k3RMBW6Gc85Dkwxhen9p9ZHst4DxZ6YNVPTzWnbc2aXb324ryGiFGzWmSMDV4b9ztU3pH new file mode 100644 index 00000000..842dccc6 --- /dev/null +++ b/tests/data/transactions/batched_address_2_transactions/3NedZ2zui6oWA6W5jx3k3RMBW6Gc85Dkwxhen9p9ZHst4DxZ6YNVPTzWnbc2aXb324ryGiFGzWmSMDV4b9ztU3pH @@ -0,0 +1,115 @@ +{ + "slot": 67, + "transaction": [ + "AXaz/i/TzmEbJ1KiLu0CEmSJ4BWh4uJo0ttSfHY+jdWj2VsJUgwybJ1qmr65AE3JSVq+xZC98FlAPf3VecZApAYBAAkLlJweADw/IvfAeASqIJXdkEr0tY4lxcSIn8RlFcI4owHP1qUGmC48gXYgG4BESUf6BlOwx5mM7Qs37QOz8oolDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwZGb+UhFzL/7K26csOb57yM5bvF9xJrLEObOkAAAAAGp1X4ITkFTUQksVrwxDDPL0t/mHk62hJS1I82ZsbLzgksNuwi9ReDAP20Sqpq/8/wpG4cvGQcDj7QnaE7nvUIC7wPwLtHyi90xBEulKsTz6PGNOXcF+rLA80aI81+eHwe68SM+zJku8NL9cWlqDT8Z1AAbymG2W8jW8iHXvTdRNWem8sa08HDC9sJmzqsOsj+S+dqH6i3TLNx6mW/Y5xi9f/NHLoyuMDzJdu5uE5yCqPBB+d1u+u44BM7lLKWQ/L7syh1EFyuhbW0RHYH7b/hRSe/tCORHKQEI7/RUnomddfg+eSwKKibjLxFHEbHDwAWn9YKP6G7wb2jxbbPFl8RAgMABQJAQg8ACAoABAUKBwYICQIBngIx1L+BJ8IrxBEBAAAA/9Wem8sa08HDC9sJmzqsOsj+S+dqH6i3TLNx6mW/Y5xiAAAAAAAAAAAAAAEAAAABo3J9+ESiPSLaNF73h3+leYIid5S3sn2ViqiKauw0SDYGPculb31qC8K6yoE77xbwY8h2VVLHh9jccxqMMTafgCLI93LOoUi/A5SgyQ01C6psIJcmlowi8CeU2c9iAmvkjZ8P5alyg5ZIFT49nGVfBhSb/8x6lx2JLvpCZXGSVugCAAAA3rbCNlT1b1uRo4wxBUxVh5do1QGt5hMRqO1unrQz+psAAAAAAAAGGWLBgvnILIsTQbKm9zzVjt/YSqANVCTnEUHfmcVecgAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999819964, + 290294196, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "postBalances": [ + 99999809962, + 290299198, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 4, + "accounts": [ + 0, + 9, + 7, + 6, + 10, + 5, + 8, + 4, + 4, + 2, + 4, + 1 + ], + "data": "oJ4RFmdrsti3sUJAJ9yukFuYertGYYd3ZaNXGLhs5bcoKeEZZjWqaYVZusT1xeyh7Z8PaZm22QaigKHgnHKS5jMVBGxuZyhAoBJ1UzR3gjscQnqmeDCkTVYCLLvWYugDgETFWEu2MzVrd3MXZNkNpvr8L5NfNBHjTd8oomWCyWZpUw3GoF5UBWHVQYTVyX3cViK6xFvGhD8pKbwmUHjTpfvHFr2sMifkqES9njFFMiMJhdzx3UcKHSqEjKRRxLM5HjT3B8aMdDpJH2p7AmHguoUP6tbmFTp97BZ66JYk1mWw7gL65Fe9N4bf7cUcfNPmzV18ntrsdtVeJghhBeshoczoSLy4HcY2igARYkmyCXrp9SKGqZgkW6X3yaUAqyy9aXnud", + "stackHeight": 2 + }, + { + "programIdIndex": 2, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4Px9qXVhzify", + "stackHeight": 3 + }, + { + "programIdIndex": 5, + "accounts": [ + 10, + 7, + 1 + ], + "data": "4vWADsHeAEjeUNz8E8sN7988cUF94tBeoMiaBGR5A5rMxmtMtPCWWEqcZjiAkTTSvDU4ZmqPJYd5zECqN8duGV1NGoFV3DtYz8oAaALjX9wFhjeAp9aGszGyQnLCwX2CG6uwJEJPXM6oob7nT2PGTRQDx4TdrDXjbXACms3pnq99DM7aHG2EtwTB6bzXRcwLxUF5NDDmRwvZcJoXL4H6Vo4CnrPvGrnJjMLx1VGHivQQXKyqnTJ1GTrcfUHqeNfQiAhh2nZLW7wEqpq643EkZkjNcfLQ2K", + "stackHeight": 3 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy invoke [1]", + "Program log: Instruction: InvokeCpi", + "Program consumption: 996414 units remaining", + "Program consumption: 995923 units remaining", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [2]", + "Program log: invoke_cpi_with_read_only", + "Program log: mode Anchor", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [3]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 9340 of 880366 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 118251 of 989234 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy consumed 129466 of 999850 compute units", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 129616 + }, + "blockTime": 1746129058 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_address_2_transactions/3bKBmcXQGSuYZtwZsASMaUFshcedaGzASzL6W3oq71aMAdnNm9SmpWgn6ahRnJFnsg8eEaeUEpg6Ncowsnf5UFVz b/tests/data/transactions/batched_address_2_transactions/3bKBmcXQGSuYZtwZsASMaUFshcedaGzASzL6W3oq71aMAdnNm9SmpWgn6ahRnJFnsg8eEaeUEpg6Ncowsnf5UFVz new file mode 100644 index 00000000..b803a6c8 --- /dev/null +++ b/tests/data/transactions/batched_address_2_transactions/3bKBmcXQGSuYZtwZsASMaUFshcedaGzASzL6W3oq71aMAdnNm9SmpWgn6ahRnJFnsg8eEaeUEpg6Ncowsnf5UFVz @@ -0,0 +1,84 @@ +{ + "slot": 114, + "transaction": [ + "AYGf7BsyK6E6Sr7HzP5qoOikWHykihajyLvT3s3K0RvbaIMovotrIMiRGfslyCquwRXAwoaxcc6HV7sNzNePVwEBAAYJzLjCFXXnWj51s6K1RyQiLzHD11pzA0VK0kuivz8zqswhWc53yo4Lew6JOci1vTttbJcOTjfIMGIiy5vpCKZaRM/WpQaYLjyBdiAbgERJR/oGU7DHmYztCzftA7PyiiUMAwZGb+UhFzL/7K26csOb57yM5bvF9xJrLEObOkAAAAAFDSsTeVE2hc8C8rX9UpG9lZsrBgqlJepbNIE7Hbm3bgksNuwi9ReDAP20Sqpq/8/wpG4cvGQcDj7QnaE7nvUIC7wPwLtHyi90xBEulKsTz6PGNOXcF+rLA80aI81+eHwQpl591jkE+Dg60Dze4Hi5FNhzGIA7FTWAcNeS4Fz957/QmmoHZdEI20ACv+9MyGVTFGij2iz8yvlzRZ4iyBL08IQmMoVX5+c2jV1ZwWBMY1rBLg9Dm7Wx4y5U/m99uzECAwAFAkBCDwAEBwEABwgFBgKtAat/8kF9vXl1/6AAAAAT76ICIYkJjUPHP1gMLqjL00yUeFluH/igSrX0T7iFCAPrHYqag+vL3mQojbBQJpCDVlpYkw3LrJVZFOPXoclrEbVyupe94MZSYz7ATHgC5JnCM6EZPpqkD7+x38kwUHsoYqJJ3q47TVuTBPfbHLBdU5xCllvZBEg/he29QT/Ob4vpHX7IvxGaANT1e6jFGutEVrv6zM2H31tBtXBc+s5X", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999985000, + 2735280, + 290329210, + 1, + 1141440, + 1141440, + 1141440, + 0, + 1614720 + ], + "postBalances": [ + 99999980000, + 2735280, + 290329210, + 1, + 1141440, + 1141440, + 1141440, + 0, + 1614720 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 5, + "accounts": [ + 7, + 8, + 6, + 2 + ], + "data": "SBkMhczQ9esLdkDPW7tMUGm62SnaJtfkC45NYSfCfr8M4nr7i4yRZaVGk7erHX5qcgW8AEe2kZ4EvgHj24ySbvNxmpT5qmmBYqyfZ4CoRCL5C1rM72mX54pzfKGBy9ivCwu8AVQPg33kWGQFnx48msbd9A41rmw9eSmt2pjYsh4LRdL6ZFPzyQAYmHMHNyyunF5e41qzjKG7T6DJzceZDk3FnpJX7q2Xg2SkirNzVDQ", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [], + "data": "3Q747BoHqHsBxkNHj5NHEZnP1TajcfmzuWaVnRBAGpdvhUvpLwjkwwa66zDdbmeSrgoQw4GwsiMjmkwLHpjRgd7gKmkncGxpXGrdePZxMtm8wWFhZ9A5yktynm8nyXdjjcq9aeUaXJyC8feo94V2P8XPENGSJ4Yw1", + "stackHeight": 3 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program Lighton6oQpVkeewmo2mcPTQQp7kYHr4fWpAgJyEmDX invoke [1]", + "Program log: Instruction: BatchUpdateAddressTree", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: BatchUpdateAddressTree", + "Program noopb9bkMVfRPU8AsbpTUg8AQkHtKwMYZiFUjNRtMmV invoke [3]", + "Program noopb9bkMVfRPU8AsbpTUg8AQkHtKwMYZiFUjNRtMmV consumed 38 of 881758 compute units", + "Program noopb9bkMVfRPU8AsbpTUg8AQkHtKwMYZiFUjNRtMmV success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 102385 of 983946 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program Lighton6oQpVkeewmo2mcPTQQp7kYHr4fWpAgJyEmDX consumed 120212 of 999850 compute units", + "Program Lighton6oQpVkeewmo2mcPTQQp7kYHr4fWpAgJyEmDX success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 120362 + }, + "blockTime": 1746129081 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_address_2_transactions/3fUMjpGtK2bjZNxW9tGzkUHSghsMaCQE9Khw4PqT6eD9G3osgffBAR112PCqpEhZBn38VboYgPSyNNuhNPiqg3mC b/tests/data/transactions/batched_address_2_transactions/3fUMjpGtK2bjZNxW9tGzkUHSghsMaCQE9Khw4PqT6eD9G3osgffBAR112PCqpEhZBn38VboYgPSyNNuhNPiqg3mC new file mode 100644 index 00000000..7e1bade6 --- /dev/null +++ b/tests/data/transactions/batched_address_2_transactions/3fUMjpGtK2bjZNxW9tGzkUHSghsMaCQE9Khw4PqT6eD9G3osgffBAR112PCqpEhZBn38VboYgPSyNNuhNPiqg3mC @@ -0,0 +1,115 @@ +{ + "slot": 41, + "transaction": [ + "AYU15E8RXwSEwh12WitY8y84HN9vAlL1EMU81bCDTFYKO/60XuSRunCpYfPdxa8/S6yKoRA23HJ8rgZsxqe4XAMBAAkLlJweADw/IvfAeASqIJXdkEr0tY4lxcSIn8RlFcI4owHP1qUGmC48gXYgG4BESUf6BlOwx5mM7Qs37QOz8oolDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwZGb+UhFzL/7K26csOb57yM5bvF9xJrLEObOkAAAAAGp1X4ITkFTUQksVrwxDDPL0t/mHk62hJS1I82ZsbLzgksNuwi9ReDAP20Sqpq/8/wpG4cvGQcDj7QnaE7nvUIC7wPwLtHyi90xBEulKsTz6PGNOXcF+rLA80aI81+eHwe68SM+zJku8NL9cWlqDT8Z1AAbymG2W8jW8iHXvTdRNWem8sa08HDC9sJmzqsOsj+S+dqH6i3TLNx6mW/Y5xi9f/NHLoyuMDzJdu5uE5yCqPBB+d1u+u44BM7lLKWQ/L7syh1EFyuhbW0RHYH7b/hRSe/tCORHKQEI7/RUnomdZ9kSDxhIwnQcZYrjB4SVRgHg8UxXa7uDbdvTqPpw3RTAgMABQJAQg8ACAoABAUKBwYICQIBngIx1L+BJ8IrxBEBAAAA/9Wem8sa08HDC9sJmzqsOsj+S+dqH6i3TLNx6mW/Y5xiAAAAAAAAAAAAAAEAAAABp4EWTgPAZrpqBNqJ7o9qdbsrUrPz4ac8p3byQ9dJQmkVxlHaC4rifjL7MoKrcTxmoqkaajTYdZc153E51WJvvQzhJe+m/74op2FMnJyp7fTekOJVx2Rb6lPM0UytdgUuAcM+o3NFXDXB24zua0KP7QKaWxodc/vCrHdbQXYliuICAAAAcu6lEZQQlzrjKK2SkWJoEo7bRxBuGtaow9VFhJuKuBsAAAAAAAAQGF0mAjs2EM632fV9SdKzh2OhKyu9+pMnWv8YKvuV3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999989998, + 290209162, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "postBalances": [ + 99999979996, + 290214164, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 4, + "accounts": [ + 0, + 9, + 7, + 6, + 10, + 5, + 8, + 4, + 4, + 2, + 4, + 1 + ], + "data": "oJ4RFmdrsti3sUJAJ9yukFuYertGYYd3ZaNXGLhs5bcoKeEZZjWqaYVZusT1xeyh7Z8PaZm22QaigKHgnHKSiLn1tnyxvG6j2kEM7TMzqYf6x8ZMRneqVUYLvj6AYkZDLYSvpfkdPRiCJUqVVky8CkKs7ZGiukWgvwTUbZEExKCVyyLHvS7RYsAHMjea8AWrCnFrh4qqv3qByfjJCgwVLxdni8uBcNznGdd8xfpD8R3ZnozVBVJewjMzs7d5s61pwU9RY8MpoSCXPc35DNiwjxAYXeHycLPfgb5Yoj1mkcu9J8QESh9xhVvRCp3ark4weU5Fe3GbqGoyUR7bSHT8kPvpnd3VJTPHPaTDqcz7cJf6Xuj7oHopGS52wW6QaLxHURNs9", + "stackHeight": 2 + }, + { + "programIdIndex": 2, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4Px9qXVhzify", + "stackHeight": 3 + }, + { + "programIdIndex": 5, + "accounts": [ + 10, + 7, + 1 + ], + "data": "4vWADsHeAEjeUNz8E8sN7988cUF94tBeoMiaBGR5A5rMxmtMtPCWWEqcZjiAkTTSvDU4ZmqPJYfmhSbx4BU2pQr7HvDmtAe2XaUCPbtVnfKwBp1XSDRUd1PSPw9ah8xqGW8GYjXrZjvEHvPorFMMftkE7Y5E24qS5mMhrSKbvVFFgKt924GSPPK64RCzWk26hXkHVUV8iGuZeQTSVTucCLP3myCaF37wodFr4rcFg3d6UB7DnDLDhmSMRN7jtj3xtKPRp2iXk91M1JxafWttNMFqNJzoGB", + "stackHeight": 3 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy invoke [1]", + "Program log: Instruction: InvokeCpi", + "Program consumption: 996414 units remaining", + "Program consumption: 995923 units remaining", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [2]", + "Program log: invoke_cpi_with_read_only", + "Program log: mode Anchor", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [3]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 9340 of 880366 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 118251 of 989234 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy consumed 129466 of 999850 compute units", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 129616 + }, + "blockTime": 1746129045 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_address_2_transactions/3ghwzxeaEi4mCgMgwNzCmYmkgpCJxJfBYb74P3aAz91YZDyixeyYuNCXbVZ8ndzSZ9f9UUeDA8BpygTUFsb3ASKg b/tests/data/transactions/batched_address_2_transactions/3ghwzxeaEi4mCgMgwNzCmYmkgpCJxJfBYb74P3aAz91YZDyixeyYuNCXbVZ8ndzSZ9f9UUeDA8BpygTUFsb3ASKg new file mode 100644 index 00000000..7685287e --- /dev/null +++ b/tests/data/transactions/batched_address_2_transactions/3ghwzxeaEi4mCgMgwNzCmYmkgpCJxJfBYb74P3aAz91YZDyixeyYuNCXbVZ8ndzSZ9f9UUeDA8BpygTUFsb3ASKg @@ -0,0 +1,115 @@ +{ + "slot": 62, + "transaction": [ + "AYZGYvwzCAn4hs+DdtcwK2HqEwdTaW4Wl/3hQs+4+hA+7ojlCMrx6irm+mC2EWhmjpV/akwsFzt6k8kzWciF6AcBAAkLlJweADw/IvfAeASqIJXdkEr0tY4lxcSIn8RlFcI4owHP1qUGmC48gXYgG4BESUf6BlOwx5mM7Qs37QOz8oolDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwZGb+UhFzL/7K26csOb57yM5bvF9xJrLEObOkAAAAAGp1X4ITkFTUQksVrwxDDPL0t/mHk62hJS1I82ZsbLzgksNuwi9ReDAP20Sqpq/8/wpG4cvGQcDj7QnaE7nvUIC7wPwLtHyi90xBEulKsTz6PGNOXcF+rLA80aI81+eHwe68SM+zJku8NL9cWlqDT8Z1AAbymG2W8jW8iHXvTdRNWem8sa08HDC9sJmzqsOsj+S+dqH6i3TLNx6mW/Y5xi9f/NHLoyuMDzJdu5uE5yCqPBB+d1u+u44BM7lLKWQ/L7syh1EFyuhbW0RHYH7b/hRSe/tCORHKQEI7/RUnomdVtk0VWP9Q0RUpdSGUnIvFUPQeeMtbvPdlQk9kZJouVJAgMABQJAQg8ACAoABAUKBwYICQIBngIx1L+BJ8IrxBEBAAAA/9Wem8sa08HDC9sJmzqsOsj+S+dqH6i3TLNx6mW/Y5xiAAAAAAAAAAAAAAEAAAABhuxjpbD6/nJ61jx/sBq4CDgZrSG1dbgwuecl3rJoh3qtGB2NMZM4cR0IcvHBVMATBgUS9/fFdACiShPoHf2RMCJv7aa5nVdXbd3gBeiyRRcr+7gk+bEV61GHAiJxJQ+4mqLURhhLeWlBWHibeF5hH8nQNAI14Vt8sJoemiImC0ECAAAA+U9aF/pzHShHY+fZo3WBc0Ibg5EHIK5AXgSW09lEAmwAAAAAAADpgbN8eY609gQWhgW52wLGQMGADRwRoUflNriqkHkHxwAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999849970, + 290279190, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "postBalances": [ + 99999839968, + 290284192, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 4, + "accounts": [ + 0, + 9, + 7, + 6, + 10, + 5, + 8, + 4, + 4, + 2, + 4, + 1 + ], + "data": "oJ4RFmdrsti3sUJAJ9yukFuYertGYYd3ZaNXGLhs5bcoKeEZZjWqaYVZusT1xeyh7Z8PaZm22QaigKHgnHKMeL6ahFG2941ym4YxNArBeEkrvuzSCMwHdV3W4xbHt7PsLSDHNP4qaGQq5qGPcnguKebosnAUryVK9zPt23u9SnUKPbSPZWgTXUzyAXmYj2VxJany2mVN4dSbqVbDW7mkEi2Xi9MRmQV8GQzwY1u6T7rUHzbqeeiURg6V2Y2JzDMKFTrttDM5tVyFpVTwgeB7TBMKWAdYz4UZQ8WA1NqqxKPnKMbPZ4wHmp7wfDLoJH5wfzfRW8D5FHHswQWaSdNodUH9PKP8mbEG9Xhac5KriTUATt6q95TZaKBgALZDXtK3BdqbD", + "stackHeight": 2 + }, + { + "programIdIndex": 2, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4Px9qXVhzify", + "stackHeight": 3 + }, + { + "programIdIndex": 5, + "accounts": [ + 10, + 7, + 1 + ], + "data": "4vWADsHeAEjeUNz8E8sN7988cUF94tBeoMiaBGR5A5rMxmtMtPCWWEqcZjiAkTTSvDU4ZmqPJYZGQSJvx6NLjEwKZ7tHTfkUweRdyQPmLD3wYSBwuwUxSNzmBTR3cdJLAWGybzz989A1yozfWbQ3wu3aKMKc2nTaAaaHsT9V3wzT8iokCBRi1MVJjRu9oyb9xxKA7HrAYZ3nn2CTYEeDVrruhNbQowN7tVT3XGjuAGSXCKxDNfVB9VXTHwituGGy7BEerxqRQp7gqvo7HBp4BSp9ZUtxAK", + "stackHeight": 3 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy invoke [1]", + "Program log: Instruction: InvokeCpi", + "Program consumption: 996414 units remaining", + "Program consumption: 995923 units remaining", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [2]", + "Program log: invoke_cpi_with_read_only", + "Program log: mode Anchor", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [3]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 8496 of 880366 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 117407 of 989234 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy consumed 128622 of 999850 compute units", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 128772 + }, + "blockTime": 1746129055 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_address_2_transactions/3ikLuwcdkrSiVihgHa57VtKSWJ2awMt5mWA8UEHzghj91VSdyD4KTd1S7T6amJMHSdpEqVZ6qgU9mMhVgmQ5Lcm7 b/tests/data/transactions/batched_address_2_transactions/3ikLuwcdkrSiVihgHa57VtKSWJ2awMt5mWA8UEHzghj91VSdyD4KTd1S7T6amJMHSdpEqVZ6qgU9mMhVgmQ5Lcm7 new file mode 100644 index 00000000..f0c50e6a --- /dev/null +++ b/tests/data/transactions/batched_address_2_transactions/3ikLuwcdkrSiVihgHa57VtKSWJ2awMt5mWA8UEHzghj91VSdyD4KTd1S7T6amJMHSdpEqVZ6qgU9mMhVgmQ5Lcm7 @@ -0,0 +1,115 @@ +{ + "slot": 43, + "transaction": [ + "AYgJCEWxf9JxX+y+aKp1TKQnOsEOx5aOjG4h6c5K3D/BadqlzmBB0v+DoRlh9krCBxErAgomcH4clqBr9MGs9QIBAAkLlJweADw/IvfAeASqIJXdkEr0tY4lxcSIn8RlFcI4owHP1qUGmC48gXYgG4BESUf6BlOwx5mM7Qs37QOz8oolDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwZGb+UhFzL/7K26csOb57yM5bvF9xJrLEObOkAAAAAGp1X4ITkFTUQksVrwxDDPL0t/mHk62hJS1I82ZsbLzgksNuwi9ReDAP20Sqpq/8/wpG4cvGQcDj7QnaE7nvUIC7wPwLtHyi90xBEulKsTz6PGNOXcF+rLA80aI81+eHwe68SM+zJku8NL9cWlqDT8Z1AAbymG2W8jW8iHXvTdRNWem8sa08HDC9sJmzqsOsj+S+dqH6i3TLNx6mW/Y5xi9f/NHLoyuMDzJdu5uE5yCqPBB+d1u+u44BM7lLKWQ/L7syh1EFyuhbW0RHYH7b/hRSe/tCORHKQEI7/RUnomdS64vSE+mhlKtLz6MoAQu2TVZENLgqSjj9+nE5d2RsICAgMABQJAQg8ACAoABAUKBwYICQIBngIx1L+BJ8IrxBEBAAAA/9Wem8sa08HDC9sJmzqsOsj+S+dqH6i3TLNx6mW/Y5xiAAAAAAAAAAAAAAEAAAABoo16JdYOZlslpLKqJtuS7yG8aKeu1tkY9Llh6mxjvgiQJBhDsXsbrSDyypeii5r0TxN+hzqj5dSP/mDJp0Szjwrvkx5zIBeYhbN10mS3yOQ8HYXhifEU/gJNeTzhSQyph/W/gCiVJ/JfRH+KnbTWwiH9yw7eoOs7SV6xlq5ia0kCAAAAdiPq4nhSQLk9ErFqZtgWEHzcjInHEI//IJXhjd/viYYAAAAAAACxGOpVYWJNpsxTe67VbmAvk4yATif4MZZhDIgoxyP3mAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999979996, + 290214164, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "postBalances": [ + 99999969994, + 290219166, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 4, + "accounts": [ + 0, + 9, + 7, + 6, + 10, + 5, + 8, + 4, + 4, + 2, + 4, + 1 + ], + "data": "oJ4RFmdrsti3sUJAJ9yukFuYertGYYd3ZaNXGLhs5bcoKeEZZjWqaYVZusT1xeyh7Z8PaZm22QaigKHgnHKRwf8UHUfGKHZ5xx3tdtGse21CNEGnGSmGjW8Guw7cuXMWKMCZDAy9AApDk6A853D2jo2TZyLUt7kxR9SAgdLTYV2BCAYEbrJahEGVaZgxDKs6r3KHazauum9cjGMkf6zWBn7h1WDS2n1eBxjWwybjivM7CpcyxS6Kvqu64W7MdxiQ8nX15wbpUgv3dEuMHdJFdm2N4zZ3outBuATfUcaN6dMGh2Q5LZ28hY9TVbpW47sGLwEGqwLJGLsgeHNCEMEt1smhAkUyfsDnpD8AhKzXB7QxZrjJ7xwu6TGcfeCEdk8JxF5TD", + "stackHeight": 2 + }, + { + "programIdIndex": 2, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4Px9qXVhzify", + "stackHeight": 3 + }, + { + "programIdIndex": 5, + "accounts": [ + 10, + 7, + 1 + ], + "data": "4vWADsHeAEjeUNz8E8sN7988cUF94tBeoMiaBGR5A5rMxmtMtPCWWEqcZjiAkTTSvDU4ZmqPJYS7QxF15AiNZmDdPTSK9U3S3FT4xRk54GzJhwpmXSf9aWoLRMXh6tGNyDYGHN7kWjXrApdukRWksDpsnqUZw1paEhr9rWWW7HGFNasNvSkFJ1XLF4D4ivypZZ9PTcZ1VeouDi5aXSw9dsZHxWZBj8LPYHadcXhEmi5vaeeZjw4Tqx3jYjaH8BzpwE13XmRJvQcx9D6T7eJ8Vu5J4yUZfD", + "stackHeight": 3 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy invoke [1]", + "Program log: Instruction: InvokeCpi", + "Program consumption: 996414 units remaining", + "Program consumption: 995923 units remaining", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [2]", + "Program log: invoke_cpi_with_read_only", + "Program log: mode Anchor", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [3]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 9340 of 880366 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 118251 of 989234 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy consumed 129466 of 999850 compute units", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 129616 + }, + "blockTime": 1746129046 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_address_2_transactions/47GL2cvq7ajtWL4HCfXqxbSCfg7sVzQE67KVKVUsj3P8qUaWrHAHLahhCLJooF72uNdWLPKwaJo5oUbthKPaF36Z b/tests/data/transactions/batched_address_2_transactions/47GL2cvq7ajtWL4HCfXqxbSCfg7sVzQE67KVKVUsj3P8qUaWrHAHLahhCLJooF72uNdWLPKwaJo5oUbthKPaF36Z new file mode 100644 index 00000000..4888872d --- /dev/null +++ b/tests/data/transactions/batched_address_2_transactions/47GL2cvq7ajtWL4HCfXqxbSCfg7sVzQE67KVKVUsj3P8qUaWrHAHLahhCLJooF72uNdWLPKwaJo5oUbthKPaF36Z @@ -0,0 +1,115 @@ +{ + "slot": 69, + "transaction": [ + "AZtz/GMm+W0e2mouEKoyI4H3NapnZYVmYMb8TKWbOngFUSjhs3VpM5lf6/7Lw4mNbL5U8n6Lz8/vI0b2foS/jAoBAAkLlJweADw/IvfAeASqIJXdkEr0tY4lxcSIn8RlFcI4owHP1qUGmC48gXYgG4BESUf6BlOwx5mM7Qs37QOz8oolDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwZGb+UhFzL/7K26csOb57yM5bvF9xJrLEObOkAAAAAGp1X4ITkFTUQksVrwxDDPL0t/mHk62hJS1I82ZsbLzgksNuwi9ReDAP20Sqpq/8/wpG4cvGQcDj7QnaE7nvUIC7wPwLtHyi90xBEulKsTz6PGNOXcF+rLA80aI81+eHwe68SM+zJku8NL9cWlqDT8Z1AAbymG2W8jW8iHXvTdRNWem8sa08HDC9sJmzqsOsj+S+dqH6i3TLNx6mW/Y5xi9f/NHLoyuMDzJdu5uE5yCqPBB+d1u+u44BM7lLKWQ/L7syh1EFyuhbW0RHYH7b/hRSe/tCORHKQEI7/RUnomdVq17TyVUmBi/78+YxZtdiB79pEmZerpjHkf4n9/m5RYAgMABQJAQg8ACAoABAUKBwYICQIBngIx1L+BJ8IrxBEBAAAA/9Wem8sa08HDC9sJmzqsOsj+S+dqH6i3TLNx6mW/Y5xiAAAAAAAAAAAAAAEAAAABkV3xWP9uABsLjuEPhiWDZgWrBtdzLZ4QJEWHjzViXLME4PYfd8IlVFZGhkwzZ/ZkYZ5/Np+LkAIHdPuE/JBLBRSCfdy2rJe4Mbjpor9vaXTKHhTahO1UBMxoxO8jDLOPExQxX6mHNPWqqCA3+alrhuRYXfalgzvnLPQT2mzFUSACAAAAjFX7ozqjhs+TnJzWMplmc6sTtLbih1Fn9/LeuxHc0dkAAAAAAABH1liGbMswRsHPIaRBkADaXZc5kjlsm3XNtAsX6A3B/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999809962, + 290299198, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "postBalances": [ + 99999799960, + 290304200, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 4, + "accounts": [ + 0, + 9, + 7, + 6, + 10, + 5, + 8, + 4, + 4, + 2, + 4, + 1 + ], + "data": "oJ4RFmdrsti3sUJAJ9yukFuYertGYYd3ZaNXGLhs5bcoKeEZZjWqaYVZusT1xeyh7Z8PaZm22QaigKHgnHKPGaDX6gqtaPQMsXESgkcXu6nTDyDgtERix5LSYTbyurMmhsTo5GXh4z2incEWKi9yeXXxqSaKmxLkcv6zcxHnaBEzQxaSmv5j2vMJf5mBLhCTUARqYfQjGNMvTZ8y6eEEdKgQgybugPw3k97T2e8zwz7ySnsw2nY9sTrT58eEWk6dAfqKwoVG4X2giuFYT8XcKGekKhxWqRuM3vEW2s6LZJP8nUefkANDu2pJUb7KC9YtxshNrjBCqiXR7tEFYD5gbtcmQCTS8PUfu9giZePhdXbDewHDMfjRhqwCM7Awx9V8SY4Sb", + "stackHeight": 2 + }, + { + "programIdIndex": 2, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4Px9qXVhzify", + "stackHeight": 3 + }, + { + "programIdIndex": 5, + "accounts": [ + 10, + 7, + 1 + ], + "data": "4vWADsHeAEjeUNz8E8sN7988cUF94tBeoMiaBGR5A5rMxmtMtPCWWEqcZjiAkTTSvDU4ZmqPJYVgmc77wiWvdQJVKkFw9M4KPEniGRv6NTttoTuH4vYRckWLvGFq3gygLwkdtprLERm3ZbpagbfJdPRWqEycjw7JbvVt67njkDTMPcUWBmXdoLB3Jy4nbam7ekMJcy49TqxvmRV1BQ8Sa138TNZNEZgUMboupuzKPkvo3tGdwspgePnY75JjwcqMWcfnVVpvqucAArp8Utcm4rzarZ8iyM", + "stackHeight": 3 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy invoke [1]", + "Program log: Instruction: InvokeCpi", + "Program consumption: 996414 units remaining", + "Program consumption: 995923 units remaining", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [2]", + "Program log: invoke_cpi_with_read_only", + "Program log: mode Anchor", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [3]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 9352 of 880366 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 118263 of 989234 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy consumed 129478 of 999850 compute units", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 129628 + }, + "blockTime": 1746129059 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_address_2_transactions/4GCtza8BdyVqjwXsRtdvtDSCvnmwfHSeu1MbCJA6BLSP7xRhgsqvLdqjkvg9MrGSyemqtauBhTH1N5A3HVcQ9Exp b/tests/data/transactions/batched_address_2_transactions/4GCtza8BdyVqjwXsRtdvtDSCvnmwfHSeu1MbCJA6BLSP7xRhgsqvLdqjkvg9MrGSyemqtauBhTH1N5A3HVcQ9Exp new file mode 100644 index 00000000..0c32028a --- /dev/null +++ b/tests/data/transactions/batched_address_2_transactions/4GCtza8BdyVqjwXsRtdvtDSCvnmwfHSeu1MbCJA6BLSP7xRhgsqvLdqjkvg9MrGSyemqtauBhTH1N5A3HVcQ9Exp @@ -0,0 +1,115 @@ +{ + "slot": 49, + "transaction": [ + "AaMpzmO0RkE/l7GlJFMXbZkv1rc75oK+BXaAEJ62EWExszP9vQ4CdxHGhZ7HT8xVZTsMEsLfEhOLIcpX5q3oJQkBAAkLlJweADw/IvfAeASqIJXdkEr0tY4lxcSIn8RlFcI4owHP1qUGmC48gXYgG4BESUf6BlOwx5mM7Qs37QOz8oolDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwZGb+UhFzL/7K26csOb57yM5bvF9xJrLEObOkAAAAAGp1X4ITkFTUQksVrwxDDPL0t/mHk62hJS1I82ZsbLzgksNuwi9ReDAP20Sqpq/8/wpG4cvGQcDj7QnaE7nvUIC7wPwLtHyi90xBEulKsTz6PGNOXcF+rLA80aI81+eHwe68SM+zJku8NL9cWlqDT8Z1AAbymG2W8jW8iHXvTdRNWem8sa08HDC9sJmzqsOsj+S+dqH6i3TLNx6mW/Y5xi9f/NHLoyuMDzJdu5uE5yCqPBB+d1u+u44BM7lLKWQ/L7syh1EFyuhbW0RHYH7b/hRSe/tCORHKQEI7/RUnomdaUTRy1chT+D2U4kApHjvk+YlTxBRmQsC5Uobd1mWqp4AgMABQJAQg8ACAoABAUKBwYICQIBngIx1L+BJ8IrxBEBAAAA/9Wem8sa08HDC9sJmzqsOsj+S+dqH6i3TLNx6mW/Y5xiAAAAAAAAAAAAAAEAAAABGcGrq/7y1mL89uBY5kEyZVc85+1KcJEmgRoJjytEPGOO4lkXMUNX8wuXSXdtITVg9u3TWIYfLOx59TWeGHfEURl4pIDdLlAsVIOrr1RqLc4u262iX4QAhtqdfCgkQI9dEp8PSg8WyIKocKDu5MF1hWfxhVrmdNAzCDiaiZTkCxcCAAAAkWaE+aWKOirl+GRnA5lDDRZxwxokMRg2Jbhdfvf78BUAAAAAAAAzsJAv0006zsNJEvoQAs+O9vpSYG2MOnVptSlnIW+PPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999939988, + 290234172, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "postBalances": [ + 99999929986, + 290239174, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 4, + "accounts": [ + 0, + 9, + 7, + 6, + 10, + 5, + 8, + 4, + 4, + 2, + 4, + 1 + ], + "data": "oJ4RFmdrsti3sUJAJ9yukFuYertGYYd3ZaNXGLhs5bcoKeEZZjWqaYVZusT1xeyh7Z8PaZm22QaigKHgnHK4fCcpKQjmrjHfhkxJNBgyG4FF4SmPmckcYGKLxDSP8BedHyJGPRWNEpmuHDAB6TKEzLxpvb2aoY5qz4mEdt3gxUcvk2KpM3CaTFzbn29DxetE4bSnsAH7YhigeWef6wJqrYpNrv4q8yGarCMA5DSqbXETVpq5zeQooWnhHBE8Ha6kJSwsus1oS8p4C1sfuNS2NJfcgh66KSFKX5LTTZnUAbiZon5Q92MYCx1H3kcx7pRgmeRmK2zpCa2Xa1WMABNr24oKHbVhrne3smA7JkzaX5F4RKWvG9wFs6paz2rk9Pm6VdNej", + "stackHeight": 2 + }, + { + "programIdIndex": 2, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4Px9qXVhzify", + "stackHeight": 3 + }, + { + "programIdIndex": 5, + "accounts": [ + 10, + 7, + 1 + ], + "data": "4vWADsHeAEjeUNz8E8sN7988cUF94tBeoMiaBGR5A5rMxmtMtPCWWEqcZjiAkTTSvDU4ZmqPJYacPWrTvTSMNeVpeJn2gBnKUwyEYHPAaQykvCrmHkp46ZaYdP3AH6iyXp467vMqYJHoecx4TGC5Jb9kyGWR65h2RQMADuZK8XEQhig645KQV5h5QEcW5dhwRtkTnMTYtBKeArPRapVffSWyw5yf1juew1ZKzSKTcpAT5iC6xhUSEhyLfTFfWDWuUHLpTWRWfL8b8dDokn5ZZjizk6KQqd", + "stackHeight": 3 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy invoke [1]", + "Program log: Instruction: InvokeCpi", + "Program consumption: 996414 units remaining", + "Program consumption: 995923 units remaining", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [2]", + "Program log: invoke_cpi_with_read_only", + "Program log: mode Anchor", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [3]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 9340 of 880366 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 118251 of 989234 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy consumed 129466 of 999850 compute units", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 129616 + }, + "blockTime": 1746129049 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_address_2_transactions/4HFaGpkAwXy1CC2xjrWn2NJ2hH6J1qJnrYbFq4yGJLpLmyHNxPdnNiLPfRmfzBNt1HzZCz71exf2c1GN2xRXjkUv b/tests/data/transactions/batched_address_2_transactions/4HFaGpkAwXy1CC2xjrWn2NJ2hH6J1qJnrYbFq4yGJLpLmyHNxPdnNiLPfRmfzBNt1HzZCz71exf2c1GN2xRXjkUv new file mode 100644 index 00000000..7768217a --- /dev/null +++ b/tests/data/transactions/batched_address_2_transactions/4HFaGpkAwXy1CC2xjrWn2NJ2hH6J1qJnrYbFq4yGJLpLmyHNxPdnNiLPfRmfzBNt1HzZCz71exf2c1GN2xRXjkUv @@ -0,0 +1,115 @@ +{ + "slot": 48, + "transaction": [ + "AaQQwuGo6MOpIJ5BBDk9ohXd5pTqgGRfPAX5W9Fl9usvf2b00GQYfDu0acuckHvvT7rASh6gXPQOIUNertNVWg8BAAkLlJweADw/IvfAeASqIJXdkEr0tY4lxcSIn8RlFcI4owHP1qUGmC48gXYgG4BESUf6BlOwx5mM7Qs37QOz8oolDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwZGb+UhFzL/7K26csOb57yM5bvF9xJrLEObOkAAAAAGp1X4ITkFTUQksVrwxDDPL0t/mHk62hJS1I82ZsbLzgksNuwi9ReDAP20Sqpq/8/wpG4cvGQcDj7QnaE7nvUIC7wPwLtHyi90xBEulKsTz6PGNOXcF+rLA80aI81+eHwe68SM+zJku8NL9cWlqDT8Z1AAbymG2W8jW8iHXvTdRNWem8sa08HDC9sJmzqsOsj+S+dqH6i3TLNx6mW/Y5xi9f/NHLoyuMDzJdu5uE5yCqPBB+d1u+u44BM7lLKWQ/L7syh1EFyuhbW0RHYH7b/hRSe/tCORHKQEI7/RUnomdTnTZAf8UtD+HW+SUm9rTacpQ850UBtkqnW63kx8L9ebAgMABQJAQg8ACAoABAUKBwYICQIBngIx1L+BJ8IrxBEBAAAA/9Wem8sa08HDC9sJmzqsOsj+S+dqH6i3TLNx6mW/Y5xiAAAAAAAAAAAAAAEAAAABqXyRLvckMLbrzOJPkGuvVIZh5nUzGDnMhYvvp6X7UBsR4NgxtbcwB8VbLhqzTwBGVaEMNEnKrrgzRNZkZDj9hg9a0oVSm6fyRe8EuXmKNcAbLIwWDidifMzyg8eN/swokM2CXeQW/bogxNAMWwsPafCLz7YEqKKY0OZaluPfsAICAAAAyx4VgQMrhSxUCdbGgTxJ0Tecu8HpaIFuB1zBXBIC1+sAAAAAAAAnfCexWHdR8q8gAb43Eu8N23t5vFhaQPyvWL91ABfhNQAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999949990, + 290229170, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "postBalances": [ + 99999939988, + 290234172, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 4, + "accounts": [ + 0, + 9, + 7, + 6, + 10, + 5, + 8, + 4, + 4, + 2, + 4, + 1 + ], + "data": "oJ4RFmdrsti3sUJAJ9yukFuYertGYYd3ZaNXGLhs5bcoKeEZZjWqaYVZusT1xeyh7Z8PaZm22QaigKHgnHKT2EKwEW1cwdMvfNjz9f3g7up9TCkPFSv3bQj46wCJc6tcApiLaTh1waHGK28ytybS6SfKRCUbYCtJ5eUMDK3Pd3DpnuFzTA1rUDbV6sKxMKtS95hj87HNDatFyGv9ibSMWgBLADHGKAuS6A1iBRsFzbeg93p3QfnfdZSL6v2WKx9b4meRJetLGdYuePN249aQCWDrRzwCiLQCeUEgLQLuhrxZYbiuiFKkdmU28GHUsJ7X6mEUtmoMyHzVcheCFxiqKYZ3Zg18nWBzBNovzzAtKov4hKJnXYSwJDYoMSxV48LubEGXq", + "stackHeight": 2 + }, + { + "programIdIndex": 2, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4Px9qXVhzify", + "stackHeight": 3 + }, + { + "programIdIndex": 5, + "accounts": [ + 10, + 7, + 1 + ], + "data": "4vWADsHeAEjeUNz8E8sN7988cUF94tBeoMiaBGR5A5rMxmtMtPCWWEqcZjiAkTTSvDU4ZmqPJYevChASpTCBjdCnoF35b6uQPk6x9Hoo6C5LFNYeB46T2NV3Gu3Z7VnRUJyWWjqdZiTR26t8J3dn1SiJifa8Pa7Q8VHwC8cyiEW6hiqfvs4D4wJ7Fw5nu53xE42V8UmH84Yeg5fxpQHGyVUb3ne1Mn1AkBBT27dzfVwc7u1gwDESa9xtN1RkDZnoPCYj6NqT4K1wwD5GfAZUM6q2Yz2cto", + "stackHeight": 3 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy invoke [1]", + "Program log: Instruction: InvokeCpi", + "Program consumption: 996414 units remaining", + "Program consumption: 995923 units remaining", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [2]", + "Program log: invoke_cpi_with_read_only", + "Program log: mode Anchor", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [3]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 8496 of 880366 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 117407 of 989234 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy consumed 128622 of 999850 compute units", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 128772 + }, + "blockTime": 1746129048 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_address_2_transactions/4HiNVuTUYyQscgNJirxmTarfBWe8uhpFJucyMPMN3zDQDK4eqpu76Nk88ufXJ8jxivMJgpfjtNNnNPdsJU8zZBsX b/tests/data/transactions/batched_address_2_transactions/4HiNVuTUYyQscgNJirxmTarfBWe8uhpFJucyMPMN3zDQDK4eqpu76Nk88ufXJ8jxivMJgpfjtNNnNPdsJU8zZBsX new file mode 100644 index 00000000..d72cd849 --- /dev/null +++ b/tests/data/transactions/batched_address_2_transactions/4HiNVuTUYyQscgNJirxmTarfBWe8uhpFJucyMPMN3zDQDK4eqpu76Nk88ufXJ8jxivMJgpfjtNNnNPdsJU8zZBsX @@ -0,0 +1,115 @@ +{ + "slot": 75, + "transaction": [ + "AaR2wiDwyoB0j4zA5FVkllADM5iimZh/I/7HmRa6EtfsofK/KZHh8012QI0SAmiEINZP+CxFSspE35FnoeOx2QoBAAkLlJweADw/IvfAeASqIJXdkEr0tY4lxcSIn8RlFcI4owHP1qUGmC48gXYgG4BESUf6BlOwx5mM7Qs37QOz8oolDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwZGb+UhFzL/7K26csOb57yM5bvF9xJrLEObOkAAAAAGp1X4ITkFTUQksVrwxDDPL0t/mHk62hJS1I82ZsbLzgksNuwi9ReDAP20Sqpq/8/wpG4cvGQcDj7QnaE7nvUIC7wPwLtHyi90xBEulKsTz6PGNOXcF+rLA80aI81+eHwe68SM+zJku8NL9cWlqDT8Z1AAbymG2W8jW8iHXvTdRNWem8sa08HDC9sJmzqsOsj+S+dqH6i3TLNx6mW/Y5xi9f/NHLoyuMDzJdu5uE5yCqPBB+d1u+u44BM7lLKWQ/L7syh1EFyuhbW0RHYH7b/hRSe/tCORHKQEI7/RUnomdSgGWTLm1JlrOBfgnpnijI6suEAKvCJ7X1yKOLNYiJmFAgMABQJAQg8ACAoABAUKBwYICQIBngIx1L+BJ8IrxBEBAAAA/9Wem8sa08HDC9sJmzqsOsj+S+dqH6i3TLNx6mW/Y5xiAAAAAAAAAAAAAAEAAAABmx1o7CSyQD3a8taYDrDy9CeE3OQPEvDkc7g3O+LPI2GOQ0QI5nsHpsPK8BcpsRCtt3R+UytRvcFi0P+dxNjVwBf2jgKZmQdeC1bkggQaA4aJNCEA3sijt3XG1Xbf6gNUiX2K/lPCbi34d7LwYO9fjO8LIEWDZCaWRasiRyktq4UCAAAAJrnhnVctejUKZGa1rhAfSxb87pIsc5GtMwRDwWrnftUAAAAAAACKNmxl7I9zp7bGofme7c3HKFKSxIEgf7lCdxMVAwBwDQAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999759952, + 290324208, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "postBalances": [ + 99999749950, + 290329210, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 4, + "accounts": [ + 0, + 9, + 7, + 6, + 10, + 5, + 8, + 4, + 4, + 2, + 4, + 1 + ], + "data": "oJ4RFmdrsti3sUJAJ9yukFuYertGYYd3ZaNXGLhs5bcoKeEZZjWqaYVZusT1xeyh7Z8PaZm22QaigKHgnHKQnYEdzRLg8Kakf5dT1Aj9WiUugJV5aebxUuoRzfAH1yA66rdZCoD8kGYBfLaHn8g7h1nUWZvQMdwpV74r9ybdY5WQ3zrvtZa5uNFEsnYazdjbHejeNkPaXo5sg81HRjKbgg7NrNHouJh5jQEiVXeMz95VjLivjMriB5uJDru2S6YCZAjLwmKSGXT9eprjqV8Nw8Ky27U28paydAddhqp6a4bjhw79NWyvcZ2ELzcWfpRpBNz6qXkgkM8r6s4crGE82d1AEMAfTN89pVoHKAqmkrd5n9xmrzLBZ241y5qTe2DD3ozHD", + "stackHeight": 2 + }, + { + "programIdIndex": 2, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4Px9qXVhzify", + "stackHeight": 3 + }, + { + "programIdIndex": 5, + "accounts": [ + 10, + 7, + 1 + ], + "data": "4vWADsHeAEjeUNz8E8sN7988cUF94tBeoMiaBGR5A5rMxmtMtPCWWEqcZjiAkTTSvDU4ZmqPJYhQr42Tb3FmtwEE2qMn85b9LCYLNv28fJAoKJK5wwv8GHxBiyFieqUwtXhqsXsJxip6UxYdEAp5NGZr8s7SMzSNnZZHAmweJPYY2QgQDeeNzgAfHsLEdT6EbfwtyKWp2dDe9n1ax52NRPeZrkSTLor11hGf3UCGet9fF3b3AWWJdZTJTogqVCTDH645CPHkDUD3Nnw6iA1c5M1svkBkh5", + "stackHeight": 3 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy invoke [1]", + "Program log: Instruction: InvokeCpi", + "Program consumption: 996414 units remaining", + "Program consumption: 995923 units remaining", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [2]", + "Program log: invoke_cpi_with_read_only", + "Program log: mode Anchor", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [3]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 9371 of 880366 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 118282 of 989234 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy consumed 129497 of 999850 compute units", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 129647 + }, + "blockTime": 1746129061 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_address_2_transactions/4QJyURr7vPzW3WATrUMcdzX7G1UVothZmA6fPGm6RxabVRA97A4mwjtWQv7mhrnqaCYUpvfWSv4xayrBtu89fYBR b/tests/data/transactions/batched_address_2_transactions/4QJyURr7vPzW3WATrUMcdzX7G1UVothZmA6fPGm6RxabVRA97A4mwjtWQv7mhrnqaCYUpvfWSv4xayrBtu89fYBR new file mode 100644 index 00000000..d017b65f --- /dev/null +++ b/tests/data/transactions/batched_address_2_transactions/4QJyURr7vPzW3WATrUMcdzX7G1UVothZmA6fPGm6RxabVRA97A4mwjtWQv7mhrnqaCYUpvfWSv4xayrBtu89fYBR @@ -0,0 +1,85 @@ +{ + "slot": 115, + "transaction": [ + "AaonDi/TyBtulivDZ0SxEQ2sUGRYAElKi3b9bbelmqM/h1+6vDH8g8cLls3PQPfAWfhHP8DZiwdMY7mrUOVGFAgBAAYJzLjCFXXnWj51s6K1RyQiLzHD11pzA0VK0kuivz8zqswhWc53yo4Lew6JOci1vTttbJcOTjfIMGIiy5vpCKZaRM/WpQaYLjyBdiAbgERJR/oGU7DHmYztCzftA7PyiiUMAwZGb+UhFzL/7K26csOb57yM5bvF9xJrLEObOkAAAAAFDSsTeVE2hc8C8rX9UpG9lZsrBgqlJepbNIE7Hbm3bgksNuwi9ReDAP20Sqpq/8/wpG4cvGQcDj7QnaE7nvUIC7wPwLtHyi90xBEulKsTz6PGNOXcF+rLA80aI81+eHwQpl591jkE+Dg60Dze4Hi5FNhzGIA7FTWAcNeS4Fz957/QmmoHZdEI20ACv+9MyGVTFGij2iz8yvlzRZ4iyBL05uT86LlP+wo2wmgQZl/VeikUjrC8PQk/p1DFKgCtuJcCAwAFAkBCDwAEBwEABwgFBgKtAat/8kF9vXl1/6AAAAAQGKK+MVuFyrO8cAYDD2OP1JBj59aiFvCxJyNuvPf/CxnookeCaA1zIMyrloXsXcDYFk4ShmFkn9xjB0V39Um1DZSD76o9SLRYNTfs5d/EF/KEWhvCq/tMI+EK7cdrlaAqUlLAat+9L1d1qQtLXgXjzt3maIOFx3EnPVLBeiDj8RkO4zQ3XJ4z2QCZYnAhJf+0vw15lKIfYmH8Id7ef9Gg", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999980000, + 2735280, + 290329210, + 1, + 1141440, + 1141440, + 1141440, + 0, + 1614720 + ], + "postBalances": [ + 99999975000, + 2735280, + 290329210, + 1, + 1141440, + 1141440, + 1141440, + 0, + 1614720 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 5, + "accounts": [ + 7, + 8, + 6, + 2 + ], + "data": "SBkMhczQ9esLdkDPW17h1PrvsVACLEjLzR3kexZQL78xiq7gEo5ozKWFeAc27CzympnBoXiZ5oD9kaiPSXWrh1yVa7V83nUpJNthchSXeZdsKDebWeLZHQfrMV4bfLk9nFjsDDixEeWh9DLowtF3hWn2vJ2hbfY3KKFq2EYu4av1ySTXh7VLpHxxD4DkGoHKueyGS3JkFpwir7ecq33vL6U842bkdCfQEXx4fdpPbXm", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [], + "data": "3Q747BoHqHsBxkNHj5NHEZnP1TajcfmzuWaVnRBAGpdvhUvpLwjkwwa67QwjtszfAHTtyTwhNbHH4vfYf67KtiQCSNeFyrX9LXffM8P253AX7tdvQWkfUEy5SJVeGiTHyd7z8AzramouJ13uwx2RnPx6erXD5tequ", + "stackHeight": 3 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program Lighton6oQpVkeewmo2mcPTQQp7kYHr4fWpAgJyEmDX invoke [1]", + "Program log: Instruction: BatchUpdateAddressTree", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: BatchUpdateAddressTree", + "Program log: Incrementing next full batch index", + "Program noopb9bkMVfRPU8AsbpTUg8AQkHtKwMYZiFUjNRtMmV invoke [3]", + "Program noopb9bkMVfRPU8AsbpTUg8AQkHtKwMYZiFUjNRtMmV consumed 38 of 881605 compute units", + "Program noopb9bkMVfRPU8AsbpTUg8AQkHtKwMYZiFUjNRtMmV success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 102538 of 983946 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program Lighton6oQpVkeewmo2mcPTQQp7kYHr4fWpAgJyEmDX consumed 120365 of 999850 compute units", + "Program Lighton6oQpVkeewmo2mcPTQQp7kYHr4fWpAgJyEmDX success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 120515 + }, + "blockTime": 1746129082 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_address_2_transactions/4gAUzeerimSzD8tvNmVZbaBtzVgn1vgRaWRjTGGpxtMXQjN2hm1asN4dPGLSXVMiJ8ARJ3xpaaSYWs3Z4oxkbstL b/tests/data/transactions/batched_address_2_transactions/4gAUzeerimSzD8tvNmVZbaBtzVgn1vgRaWRjTGGpxtMXQjN2hm1asN4dPGLSXVMiJ8ARJ3xpaaSYWs3Z4oxkbstL new file mode 100644 index 00000000..0f925fca --- /dev/null +++ b/tests/data/transactions/batched_address_2_transactions/4gAUzeerimSzD8tvNmVZbaBtzVgn1vgRaWRjTGGpxtMXQjN2hm1asN4dPGLSXVMiJ8ARJ3xpaaSYWs3Z4oxkbstL @@ -0,0 +1,115 @@ +{ + "slot": 60, + "transaction": [ + "AbfS+JkmiilXInwSqSmtxOg1lIAQ+Bd3l0HKBJFnfU1rs9rEMqfAxPIiKdRddqG2WjaKcYtxjP7lmbFjdseOQAkBAAkLlJweADw/IvfAeASqIJXdkEr0tY4lxcSIn8RlFcI4owHP1qUGmC48gXYgG4BESUf6BlOwx5mM7Qs37QOz8oolDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwZGb+UhFzL/7K26csOb57yM5bvF9xJrLEObOkAAAAAGp1X4ITkFTUQksVrwxDDPL0t/mHk62hJS1I82ZsbLzgksNuwi9ReDAP20Sqpq/8/wpG4cvGQcDj7QnaE7nvUIC7wPwLtHyi90xBEulKsTz6PGNOXcF+rLA80aI81+eHwe68SM+zJku8NL9cWlqDT8Z1AAbymG2W8jW8iHXvTdRNWem8sa08HDC9sJmzqsOsj+S+dqH6i3TLNx6mW/Y5xi9f/NHLoyuMDzJdu5uE5yCqPBB+d1u+u44BM7lLKWQ/L7syh1EFyuhbW0RHYH7b/hRSe/tCORHKQEI7/RUnomdfqnX2lCrIT58nmDLzeeN7PduFrWFyUCIeliUTGT07ayAgMABQJAQg8ACAoABAUKBwYICQIBngIx1L+BJ8IrxBEBAAAA/9Wem8sa08HDC9sJmzqsOsj+S+dqH6i3TLNx6mW/Y5xiAAAAAAAAAAAAAAEAAAABm61aOo39Vn9UCUz92Tghp/izdLftG4gCApm4xQ4ombMKgEyVsyV6dRivp199chwMbGPAcQLRZIu1zbsWmiVoYCWbXLVgpEeCX+OHwnld1hC9phNH4c/Eu7a9oK2pzQGOo/TIhTyKB8Mpnb/clsom1xZ4mDZ5ZyB1MVXXjtgkHcQCAAAAAxCGlpah9b/EEjXdbANq+JHxZtnwzok5cEuOkkX3XCcAAAAAAAB8EAKeFwdDSjP+KVyup9E/9o8IiMVaFHgs4+rDk4Tf9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999859972, + 290274188, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "postBalances": [ + 99999849970, + 290279190, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 4, + "accounts": [ + 0, + 9, + 7, + 6, + 10, + 5, + 8, + 4, + 4, + 2, + 4, + 1 + ], + "data": "oJ4RFmdrsti3sUJAJ9yukFuYertGYYd3ZaNXGLhs5bcoKeEZZjWqaYVZusT1xeyh7Z8PaZm22QaigKHgnHKQscXctRhbr1xCLa9Uw7BksiC4LGi5Z4sDiCnmV8i2phD9XoUuGUYSuNdAc3pTmkY1oEf7Mh87WYifDyajRjfpzgePtYvVYZ4CUqpDFVqcTpYyrEjXJ9HcWN8vxTVTPf4LxZ5fL39tkRvCC4i4efMFs3PM5E1a6qbMKfPZPLBCqt8z3sE3zThtacjii1wLs5ZetNFecL8agabTg3uQioFm1k5E9KmPGEuK2aYBkhQWCbAcD5TYTyCEZmoKnGCnRYCESKGgKRVuNHLJt7jQA1EpRaqXVinY6XtLqQ43tZLEmWM8vT6ET", + "stackHeight": 2 + }, + { + "programIdIndex": 2, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4Px9qXVhzify", + "stackHeight": 3 + }, + { + "programIdIndex": 5, + "accounts": [ + 10, + 7, + 1 + ], + "data": "4vWADsHeAEjeUNz8E8sN7988cUF94tBeoMiaBGR5A5rMxmtMtPCWWEqcZjiAkTTSvDU4ZmqPJYY33Cb81tT3EYTk1t8DC99esPQasmH6bruxdgASrN79LEL5XSD5H6XgmUSoYAvYyoPZuRm5CQnr3Tkq87ipPP9WkqS9Zs67MukPgEnASUAS1B3gUNnXwpGtFYM5WChFpp7RuXx1hcfXpYSE2mAkU1UAFyk9gsZE4FkTL4bKaRGptCkeoEXhP3KvuP7eso1CLPgpk2ecuS1GsSPpStjNNj", + "stackHeight": 3 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy invoke [1]", + "Program log: Instruction: InvokeCpi", + "Program consumption: 996414 units remaining", + "Program consumption: 995923 units remaining", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [2]", + "Program log: invoke_cpi_with_read_only", + "Program log: mode Anchor", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [3]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 9352 of 880366 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 118263 of 989234 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy consumed 129478 of 999850 compute units", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 129628 + }, + "blockTime": 1746129054 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_address_2_transactions/5BMYX2YFEyAwjwTv1sFGbQqMxRgbVgSC4HNKLn923ohShyjJYtJrYKwhQibg2vKRT6bFMUeTb54PSr9V8pAeL4eH b/tests/data/transactions/batched_address_2_transactions/5BMYX2YFEyAwjwTv1sFGbQqMxRgbVgSC4HNKLn923ohShyjJYtJrYKwhQibg2vKRT6bFMUeTb54PSr9V8pAeL4eH new file mode 100644 index 00000000..d9d67369 --- /dev/null +++ b/tests/data/transactions/batched_address_2_transactions/5BMYX2YFEyAwjwTv1sFGbQqMxRgbVgSC4HNKLn923ohShyjJYtJrYKwhQibg2vKRT6bFMUeTb54PSr9V8pAeL4eH @@ -0,0 +1,115 @@ +{ + "slot": 71, + "transaction": [ + "AdD/P06JkQUQowPMY6uqIvFHERjUJxvKF2XQbOnYgY3rxhFM/DtjCYvvw3Tx1FhMPiBHlCr+U7HTg6j6qQkpTgYBAAkLlJweADw/IvfAeASqIJXdkEr0tY4lxcSIn8RlFcI4owHP1qUGmC48gXYgG4BESUf6BlOwx5mM7Qs37QOz8oolDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwZGb+UhFzL/7K26csOb57yM5bvF9xJrLEObOkAAAAAGp1X4ITkFTUQksVrwxDDPL0t/mHk62hJS1I82ZsbLzgksNuwi9ReDAP20Sqpq/8/wpG4cvGQcDj7QnaE7nvUIC7wPwLtHyi90xBEulKsTz6PGNOXcF+rLA80aI81+eHwe68SM+zJku8NL9cWlqDT8Z1AAbymG2W8jW8iHXvTdRNWem8sa08HDC9sJmzqsOsj+S+dqH6i3TLNx6mW/Y5xi9f/NHLoyuMDzJdu5uE5yCqPBB+d1u+u44BM7lLKWQ/L7syh1EFyuhbW0RHYH7b/hRSe/tCORHKQEI7/RUnomdVwS84NgfJcP5goDOlLcRy0wb+xBlNVwFzfuCoKosO4BAgMABQJAQg8ACAoABAUKBwYICQIBngIx1L+BJ8IrxBEBAAAA/9Wem8sa08HDC9sJmzqsOsj+S+dqH6i3TLNx6mW/Y5xiAAAAAAAAAAAAAAEAAAABjhtKpmB4Wd3qdJhEBJjinTHbIzGYEuMqiPki8ZX31nCT4hRzT+/8uSIOOuQQcm8EPySC7LuG6QqL7hbg7WudfCsSmcUK/vJdY3OrFih92lNpeXsVOmjB+WryjWM/US12lpjj010D146ggcLYUaCZUgHYXJwAxC98oZGKiu8w6QcCAAAAdKNvRwmJD45CL5w4O1yGdBPleOBSBJlO2nS4aLSpwNoAAAAAAABHLAh72vAXxP0trzECFod0wR5eoB0TAAhCgGqcSrMDrgAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999789958, + 290309202, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "postBalances": [ + 99999779956, + 290314204, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 4, + "accounts": [ + 0, + 9, + 7, + 6, + 10, + 5, + 8, + 4, + 4, + 2, + 4, + 1 + ], + "data": "oJ4RFmdrsti3sUJAJ9yukFuYertGYYd3ZaNXGLhs5bcoKeEZZjWqaYVZusT1xeyh7Z8PaZm22QaigKHgnHKNm9m32d4mihN1psZvmkga6FfM2VzJ1VL5PtxP8ovLX8dDNvJU62Fe11eeVvgRXCEbPPNEnJpApdyRrCxTkf2Leuw6rXBUfM8pTMEPLUw1WKKbeBCcSY9amsfSU6Gka8kt2BQ64AfsxN33HR2fCufiK7t621oddggKnrGqvFgSWFqyzN3ANN8KQcrfqCBC99kGGsxnnKEgAy15j3ebxxdHFvJja7myZuRYaWwRJWBBCWSKTz4yviW2frZ23XUZPvfpXBYaP2gLH6UQBMFV2N4JGSqPunhmcu4C3B6yuimASnwqQXKFm", + "stackHeight": 2 + }, + { + "programIdIndex": 2, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4Px9qXVhzify", + "stackHeight": 3 + }, + { + "programIdIndex": 5, + "accounts": [ + 10, + 7, + 1 + ], + "data": "4vWADsHeAEjeUNz8E8sN7988cUF94tBeoMiaBGR5A5rMxmtMtPCWWEqcZjiAkTTSvDU4ZmqPJYgcvx6iq7zqHSKjqV76wVT1PG8GNJ5V8m6y5JDyxbiPXghwqmBTwjur2Q5WT7xnaydknYsDc4thq1PRByJiKBLkLXagoAkBJN8YkzMJBzmhbrFdTWTmDuQNJ2G6kRxm9DaCC91wZ8s1Cx2LEBPzXBV3qpcqCL26ad79QGfQr326hAro8yDfxErGUYgsrkkV2RgKFtYuHQbEDaiWqssCbH", + "stackHeight": 3 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy invoke [1]", + "Program log: Instruction: InvokeCpi", + "Program consumption: 996414 units remaining", + "Program consumption: 995923 units remaining", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [2]", + "Program log: invoke_cpi_with_read_only", + "Program log: mode Anchor", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [3]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 9340 of 880366 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 118251 of 989234 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy consumed 129466 of 999850 compute units", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 129616 + }, + "blockTime": 1746129060 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_address_2_transactions/5G7HF2woR6pq8C9SukrY5ALfCBxsWYFGUNhTYwYaYNEC3uZ3UB2nksaCSda8UEZiNmAmZ93yvZD9b4NfQzkkb12p b/tests/data/transactions/batched_address_2_transactions/5G7HF2woR6pq8C9SukrY5ALfCBxsWYFGUNhTYwYaYNEC3uZ3UB2nksaCSda8UEZiNmAmZ93yvZD9b4NfQzkkb12p new file mode 100644 index 00000000..177f90dc --- /dev/null +++ b/tests/data/transactions/batched_address_2_transactions/5G7HF2woR6pq8C9SukrY5ALfCBxsWYFGUNhTYwYaYNEC3uZ3UB2nksaCSda8UEZiNmAmZ93yvZD9b4NfQzkkb12p @@ -0,0 +1,84 @@ +{ + "slot": 112, + "transaction": [ + "AdUYx7sFyvbM45Os/sPpTii32QRDkkFLLoLa/nRjJAVvREW9IbLnhyPZdfLYwac7bqAkcQgwjW0/PaOLVaPixwkBAAYJzLjCFXXnWj51s6K1RyQiLzHD11pzA0VK0kuivz8zqswhWc53yo4Lew6JOci1vTttbJcOTjfIMGIiy5vpCKZaRM/WpQaYLjyBdiAbgERJR/oGU7DHmYztCzftA7PyiiUMAwZGb+UhFzL/7K26csOb57yM5bvF9xJrLEObOkAAAAAFDSsTeVE2hc8C8rX9UpG9lZsrBgqlJepbNIE7Hbm3bgksNuwi9ReDAP20Sqpq/8/wpG4cvGQcDj7QnaE7nvUIC7wPwLtHyi90xBEulKsTz6PGNOXcF+rLA80aI81+eHwQpl591jkE+Dg60Dze4Hi5FNhzGIA7FTWAcNeS4Fz957/QmmoHZdEI20ACv+9MyGVTFGij2iz8yvlzRZ4iyBL0aqpu5/kv43W2TWax1sI6ppJBjFf5M9GkjnWkgh6L5ZgCAwAFAkBCDwAEBwEABwgFBgKtAat/8kF9vXl1/6AAAAAhwnt+B9tQ+PdPrW8D3q1f1UonNe47CPQ2zJy5kPLlHArR7HUHp3U1zIUVm0lOE9dD1Idd+O7XyekHD5toaDcSK8tfCfRE+DxMZRICuS1HVDY0yBd6wcvT1bAlD3GkYs0KAkNLXltYt+ynhCogUi45rMh8jrUBCh+ON3pA9EAdNB1TzGVACVCurnhUgsT/NEj/wG8qlPWrkPgEJBLjmioM", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999995000, + 2735280, + 290329210, + 1, + 1141440, + 1141440, + 1141440, + 0, + 1614720 + ], + "postBalances": [ + 99999990000, + 2735280, + 290329210, + 1, + 1141440, + 1141440, + 1141440, + 0, + 1614720 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 5, + "accounts": [ + 7, + 8, + 6, + 2 + ], + "data": "SBkMhczQ9esLdkDPWYFxvh9XECFtzStha4v3TdRuQ2sMeCgVL8fW791maG31LjG4rSATSoQ3sMB9ttRnnxktXewGQEMuxyHC7QmKMuZfoe57FpMxhcTxDaSQCkutHqCejNU4tsZBo8BGoBHbsXBsaKJchVFLPYFfpU7eCDSxHrSj6XCyaoaZNtvUNFPMuEVfevAuRqpagMHB2Y8fnPAg52iLuz7uZ5FEvhHRGLGHEd1", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [], + "data": "3Q747BoHqHsBxkNHj5NHEZnP1TajcfmzuWaVnRBAGpdvhUvpLwjkwwa668mR1Yx2FVUSrEwSsxWfBRUuZHydGSYe6Zyqs7rAtmEaPjLgTjiT1dwbBr5BbGzJGsQ3yVqW3QA2V4tB9dAWRKNu3Kvz1UUda9WnmSV19", + "stackHeight": 3 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program Lighton6oQpVkeewmo2mcPTQQp7kYHr4fWpAgJyEmDX invoke [1]", + "Program log: Instruction: BatchUpdateAddressTree", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: BatchUpdateAddressTree", + "Program noopb9bkMVfRPU8AsbpTUg8AQkHtKwMYZiFUjNRtMmV invoke [3]", + "Program noopb9bkMVfRPU8AsbpTUg8AQkHtKwMYZiFUjNRtMmV consumed 38 of 881758 compute units", + "Program noopb9bkMVfRPU8AsbpTUg8AQkHtKwMYZiFUjNRtMmV success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 102385 of 983946 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program Lighton6oQpVkeewmo2mcPTQQp7kYHr4fWpAgJyEmDX consumed 120212 of 999850 compute units", + "Program Lighton6oQpVkeewmo2mcPTQQp7kYHr4fWpAgJyEmDX success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 120362 + }, + "blockTime": 1746129080 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_address_2_transactions/5HwiW34rLdK5RX4K2b2dqvHQ4mH3fc4KJexeuSiPMzti9t9CQwCJnmJ8YBf5WWu38To2cqkwZ98H5K7BtYPd2kRi b/tests/data/transactions/batched_address_2_transactions/5HwiW34rLdK5RX4K2b2dqvHQ4mH3fc4KJexeuSiPMzti9t9CQwCJnmJ8YBf5WWu38To2cqkwZ98H5K7BtYPd2kRi new file mode 100644 index 00000000..81e03927 --- /dev/null +++ b/tests/data/transactions/batched_address_2_transactions/5HwiW34rLdK5RX4K2b2dqvHQ4mH3fc4KJexeuSiPMzti9t9CQwCJnmJ8YBf5WWu38To2cqkwZ98H5K7BtYPd2kRi @@ -0,0 +1,115 @@ +{ + "slot": 39, + "transaction": [ + "Adat54BVlGuAh88GfhSNRFFcji404YGIseKrOKTY87VFtKARHnCmIeEqka0/7uvXAXNn0/TVElxGEDTC1aE6bg0BAAkLlJweADw/IvfAeASqIJXdkEr0tY4lxcSIn8RlFcI4owHP1qUGmC48gXYgG4BESUf6BlOwx5mM7Qs37QOz8oolDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwZGb+UhFzL/7K26csOb57yM5bvF9xJrLEObOkAAAAAGp1X4ITkFTUQksVrwxDDPL0t/mHk62hJS1I82ZsbLzgksNuwi9ReDAP20Sqpq/8/wpG4cvGQcDj7QnaE7nvUIC7wPwLtHyi90xBEulKsTz6PGNOXcF+rLA80aI81+eHwe68SM+zJku8NL9cWlqDT8Z1AAbymG2W8jW8iHXvTdRNWem8sa08HDC9sJmzqsOsj+S+dqH6i3TLNx6mW/Y5xi9f/NHLoyuMDzJdu5uE5yCqPBB+d1u+u44BM7lLKWQ/L7syh1EFyuhbW0RHYH7b/hRSe/tCORHKQEI7/RUnomdbg7xql3szkS3BKVa+kspkP7RpDAcYneu2iu6a1UvDtiAgMABQJAQg8ACAoABAUKBwYICQIBngIx1L+BJ8IrxBEBAAAA/9Wem8sa08HDC9sJmzqsOsj+S+dqH6i3TLNx6mW/Y5xiAAAAAAAAAAAAAAEAAAABDYwY+sl/IMgdbgdG0PUXWx57Pv+X+HQu/RDcrSP0vDUwB6/NGeZkRdVstA09FB1S3c2ep3MQTEfc5vCY+h6Z0B084wJ6GlxRl1IUK/3RcJ0EGshJGfyheidRr4K5IVQBAggQ6xZiSu3bAPWsxcyFIZ7mmiZHw3gkX9JMDPHnPRsCAAAAf7J7lBYC0B0RVCIRE0/HGqyuVON+fQB7u3tV7/BiooQAAAAAAACaYyg8uvD9vOsfZHmxl/OojdDYCS/nKnxWKBU4c4sH4gAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 100000000000, + 290204160, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "postBalances": [ + 99999989998, + 290209162, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 4, + "accounts": [ + 0, + 9, + 7, + 6, + 10, + 5, + 8, + 4, + 4, + 2, + 4, + 1 + ], + "data": "oJ4RFmdrsti3sUJAJ9yukFuYertGYYd3ZaNXGLhs5bcoKeEZZjWqaYVZusT1xeyh7Z8PaZm22QaigKHgnHK2m2LZsJg8T7LFNkdEqiP4TAEmfqrQwU4ynvMYPikQ47QxixGoDdGjnehcod9H55FntKZ4g756z93SGAY8KYdA7JHJj2V8xPwUJr2tc2Z3CqbYfhvjy8UTbZRNutbLhGDqbWzhHArDjq4iuegdoZDbVqyzKq3oThK4SdbeyJu3y6FWaQxk44PhCUNhP4vkAB5D55VoYWVghF9BSghV63N88ajXJGLUzCrDzjobnnDQWNtzRis3z5QPYz62wYJSbBgJn2oHSYVMNe9jY7gPqVAyYmeWArjeFP9HMr79NaSSH5WznfguV", + "stackHeight": 2 + }, + { + "programIdIndex": 2, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4Px9qXVhzify", + "stackHeight": 3 + }, + { + "programIdIndex": 5, + "accounts": [ + 10, + 7, + 1 + ], + "data": "4vWADsHeAEjeUNz8E8sN7988cUF94tBeoMiaBGR5A5rMxmtMtPCWWEqcZjiAkTTSvDU4ZmqPJYSqB63mPJSMDkD61fJtTSLfafk3TsVnKNEXc941bqExqURTfQT372EFzahqhAcSrx7F6cvoyKbWbpJUdmygSCNXE9BajzR4GZHNGeGJkA6uEVcJAYenutZwJwJkxy3XjZNANf4AUpWSqZ7yoa9QMGSjHR5SjdcQquWGpvNJLdS5AHnMa8ioPajqiwLnKqj8m2zrLL1k6EoLWR9reUjngw", + "stackHeight": 3 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy invoke [1]", + "Program log: Instruction: InvokeCpi", + "Program consumption: 996414 units remaining", + "Program consumption: 995923 units remaining", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [2]", + "Program log: invoke_cpi_with_read_only", + "Program log: mode Anchor", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [3]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 8500 of 880366 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 117411 of 989234 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy consumed 128626 of 999850 compute units", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 128776 + }, + "blockTime": 1746129044 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_address_2_transactions/5KguVEPgBfCfRFic9F7rVzG5QFtdBaB6qGJzuyTEXAcfD3FHpQJZ3ciUDtrWc2LXvn8YiR1mkUTbHu5pMkAdQonh b/tests/data/transactions/batched_address_2_transactions/5KguVEPgBfCfRFic9F7rVzG5QFtdBaB6qGJzuyTEXAcfD3FHpQJZ3ciUDtrWc2LXvn8YiR1mkUTbHu5pMkAdQonh new file mode 100644 index 00000000..f38752d8 --- /dev/null +++ b/tests/data/transactions/batched_address_2_transactions/5KguVEPgBfCfRFic9F7rVzG5QFtdBaB6qGJzuyTEXAcfD3FHpQJZ3ciUDtrWc2LXvn8YiR1mkUTbHu5pMkAdQonh @@ -0,0 +1,115 @@ +{ + "slot": 50, + "transaction": [ + "AdgvD3FnYaJ098Go5ubU2gmjm6XPNlDWdJDuuYsPJZbam33He2Z0Sl3ZCWUgsXSdHY/YktxGo8tZB2U0LvfFvwoBAAkLlJweADw/IvfAeASqIJXdkEr0tY4lxcSIn8RlFcI4owHP1qUGmC48gXYgG4BESUf6BlOwx5mM7Qs37QOz8oolDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwZGb+UhFzL/7K26csOb57yM5bvF9xJrLEObOkAAAAAGp1X4ITkFTUQksVrwxDDPL0t/mHk62hJS1I82ZsbLzgksNuwi9ReDAP20Sqpq/8/wpG4cvGQcDj7QnaE7nvUIC7wPwLtHyi90xBEulKsTz6PGNOXcF+rLA80aI81+eHwe68SM+zJku8NL9cWlqDT8Z1AAbymG2W8jW8iHXvTdRNWem8sa08HDC9sJmzqsOsj+S+dqH6i3TLNx6mW/Y5xi9f/NHLoyuMDzJdu5uE5yCqPBB+d1u+u44BM7lLKWQ/L7syh1EFyuhbW0RHYH7b/hRSe/tCORHKQEI7/RUnomdXSGTyitt0yb6pypOw491myiXJzUR3Ti85X5mhdE5T7HAgMABQJAQg8ACAoABAUKBwYICQIBngIx1L+BJ8IrxBEBAAAA/9Wem8sa08HDC9sJmzqsOsj+S+dqH6i3TLNx6mW/Y5xiAAAAAAAAAAAAAAEAAAABHb908OM+RPikkG7elDw/qLYVx9inab3oOu9UCsAuehoghwhwXG7g7tcfkrHTYEyKiPRTYxe6AH1bAjoPEw2AdS37UQ35/ghXT8CBroX2iv6WwpU/+p9LsdnDuZA+9Gynne+6g4+zVjS2YQoiMecdBf9f6prT4yJc6q4bP4W7V1QCAAAA9aH6c+UEYxUgk+xFnJvpAs32au1cyLyh9I5gutaHmKgAAAAAAAAo0+/VJYqIp1wXnqXGdZ8BP5vAud0sNJFcyNzKObRp+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999929986, + 290239174, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "postBalances": [ + 99999919984, + 290244176, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 4, + "accounts": [ + 0, + 9, + 7, + 6, + 10, + 5, + 8, + 4, + 4, + 2, + 4, + 1 + ], + "data": "oJ4RFmdrsti3sUJAJ9yukFuYertGYYd3ZaNXGLhs5bcoKeEZZjWqaYVZusT1xeyh7Z8PaZm22QaigKHgnHK5HDg7zuLTvHsNtudvKG4z2LcaLmUMPJ6Y2hqTZ7mVXhM3ixnAaSSsUimJKMkWfJeVZKuPKM4Mdzsnj7wAzwYRi9ckpTugTg2vtsjqpjn28DM8XqpQYfLSHgDfqvMLe3TLdmdv2b1eYVevgskyabZRRG3x3P7MDJeH29x5sjUt7J9G67mk76U6vuRh9HaDeuHPB1T7ehiApzES36kjhdjmLik1p8XRMRy6voyvy77YpqoXrNbcdbfbEr6PHxciZ9k3sNCkB4A63Efi84GeDP3zxPqo8FZk1qd6Axb58qNuWRdehBPfV", + "stackHeight": 2 + }, + { + "programIdIndex": 2, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4Px9qXVhzify", + "stackHeight": 3 + }, + { + "programIdIndex": 5, + "accounts": [ + 10, + 7, + 1 + ], + "data": "4vWADsHeAEjeUNz8E8sN7988cUF94tBeoMiaBGR5A5rMxmtMtPCWWEqcZjiAkTTSvDU4ZmqPJYb4KVqrkSZ2ALTSRjLDPjaa2DUuk4BkUCFYTeiXetuerMN4Tr7FL7hFEAUc5HCs64qQ1CNk8zQBDbeD2fr5fsMQfKZX4QTocWuTRUGVAwdPjQAH2sFkYdxHkJ5yei8CGyo798vmEAKvrGSeES3gwNqoLbH7okFyALsPLjQAMX3hb8Lga8zZ2pmBkNsb4EqcQAp2C9FwKa85WsieXNzkrb", + "stackHeight": 3 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy invoke [1]", + "Program log: Instruction: InvokeCpi", + "Program consumption: 996414 units remaining", + "Program consumption: 995923 units remaining", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [2]", + "Program log: invoke_cpi_with_read_only", + "Program log: mode Anchor", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [3]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 9340 of 880366 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 118251 of 989234 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy consumed 129466 of 999850 compute units", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 129616 + }, + "blockTime": 1746129049 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_address_2_transactions/5jvkP9EfdrikMQw42bSb5k4mqs7bNR7EYPvFDbAmyBETCGoZcSYWxCHuwAYtXzct3aSgT82GmyY137ej83y6u9a3 b/tests/data/transactions/batched_address_2_transactions/5jvkP9EfdrikMQw42bSb5k4mqs7bNR7EYPvFDbAmyBETCGoZcSYWxCHuwAYtXzct3aSgT82GmyY137ej83y6u9a3 new file mode 100644 index 00000000..f53beea8 --- /dev/null +++ b/tests/data/transactions/batched_address_2_transactions/5jvkP9EfdrikMQw42bSb5k4mqs7bNR7EYPvFDbAmyBETCGoZcSYWxCHuwAYtXzct3aSgT82GmyY137ej83y6u9a3 @@ -0,0 +1,115 @@ +{ + "slot": 58, + "transaction": [ + "Ae0WGmwMtXrDMhix7E63mtvdhROkeWO4AJNhZFUXLmfQ0Am0kcY/60QDxvvYiUNTg/H/TmK6XmQ9S638TR+65wwBAAkLlJweADw/IvfAeASqIJXdkEr0tY4lxcSIn8RlFcI4owHP1qUGmC48gXYgG4BESUf6BlOwx5mM7Qs37QOz8oolDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwZGb+UhFzL/7K26csOb57yM5bvF9xJrLEObOkAAAAAGp1X4ITkFTUQksVrwxDDPL0t/mHk62hJS1I82ZsbLzgksNuwi9ReDAP20Sqpq/8/wpG4cvGQcDj7QnaE7nvUIC7wPwLtHyi90xBEulKsTz6PGNOXcF+rLA80aI81+eHwe68SM+zJku8NL9cWlqDT8Z1AAbymG2W8jW8iHXvTdRNWem8sa08HDC9sJmzqsOsj+S+dqH6i3TLNx6mW/Y5xi9f/NHLoyuMDzJdu5uE5yCqPBB+d1u+u44BM7lLKWQ/L7syh1EFyuhbW0RHYH7b/hRSe/tCORHKQEI7/RUnomdYXU8jbOLxIwNbn1205keUYqtJZNEehP9snEDmlVhi5aAgMABQJAQg8ACAoABAUKBwYICQIBngIx1L+BJ8IrxBEBAAAA/9Wem8sa08HDC9sJmzqsOsj+S+dqH6i3TLNx6mW/Y5xiAAAAAAAAAAAAAAEAAAABkKkvNXON36FqW2x7RJ25y+8w0daCplrTbPNfLRjR7Z2qspvSmSH06crGwZuaRWXHy8RGQLcswDWtnFDT892OeBLmS8V1OHKGG5Ad5E8i09XlR4j8SSZs4mOYDfIDur5CpvpbQBUv4yJ4aWVv0a5qjih3AAMYXaa+IQvp60euuHICAAAAcsMXd7r0VBuYiQnSkgVWDFc0ABvLrMI5kKQ1YxDY3xMAAAAAAAAnUx6ThzbH2eW/ERLyBRpZ8wQen/2yQW6iAJ06akxXFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999879976, + 290264184, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "postBalances": [ + 99999869974, + 290269186, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 4, + "accounts": [ + 0, + 9, + 7, + 6, + 10, + 5, + 8, + 4, + 4, + 2, + 4, + 1 + ], + "data": "oJ4RFmdrsti3sUJAJ9yukFuYertGYYd3ZaNXGLhs5bcoKeEZZjWqaYVZusT1xeyh7Z8PaZm22QaigKHgnHKPACerkR8pft6qzeUjiHaZ6pP73JV5SUFT8DvcbUZgQps9hfPMDaz8AnJ9nVTy9qgbMtUgWLCQiHX1feQ7Es8vhqYWmEXh6BvQfw9YsbNpjEdN3nHp6TUNTkhZLsa64gxp81JXnPRU7a4TepbNgyQPx7EYcVrRJcTdgSt661RuWwCv57WWAEuMYVqksagZ83zsuYKgc7uCNRAJePFB46zHDgmUs3FVics87FxCtB5M19RyBGJkv5Kd3eXuw139TznVUf9D24VcX7Z3LAMWhhHUWguevVtj6rcTLUcsscQpbPBRtkv1d", + "stackHeight": 2 + }, + { + "programIdIndex": 2, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4Px9qXVhzify", + "stackHeight": 3 + }, + { + "programIdIndex": 5, + "accounts": [ + 10, + 7, + 1 + ], + "data": "4vWADsHeAEjeUNz8E8sN7988cUF94tBeoMiaBGR5A5rMxmtMtPCWWEqcZjiAkTTSvDU4ZmqPJYgGA73XNtC7BQGZSmo3rVc3z7oTN5d3rpTqXAeVac57a9GEnZMd9ZCwmxdgm86Wwfb4ArvNihEcCHcCJuHJdFsXU49YRPC4Yo5QZJUVPHVvNTMj3x2H8Bmu6niPTFjUJU3biASR2sV6EwTNagf9GrnhJ3dW7JiLFxsNyCmyYioJTqknmk3RNKj776NUbjKsY8m4TDGNB21kzpxihPSkT9", + "stackHeight": 3 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy invoke [1]", + "Program log: Instruction: InvokeCpi", + "Program consumption: 996414 units remaining", + "Program consumption: 995923 units remaining", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [2]", + "Program log: invoke_cpi_with_read_only", + "Program log: mode Anchor", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [3]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 9340 of 880366 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 118251 of 989234 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy consumed 129466 of 999850 compute units", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 129616 + }, + "blockTime": 1746129053 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_address_2_transactions/67SXHRDytNSCLrgyrieGGw2WvszVmtYXYhA3FT4iLZdFiLRZiQwV7RcCtDnhw5x3p7ELR28QEyusCnB2694v4DUB b/tests/data/transactions/batched_address_2_transactions/67SXHRDytNSCLrgyrieGGw2WvszVmtYXYhA3FT4iLZdFiLRZiQwV7RcCtDnhw5x3p7ELR28QEyusCnB2694v4DUB new file mode 100644 index 00000000..e26fab7c --- /dev/null +++ b/tests/data/transactions/batched_address_2_transactions/67SXHRDytNSCLrgyrieGGw2WvszVmtYXYhA3FT4iLZdFiLRZiQwV7RcCtDnhw5x3p7ELR28QEyusCnB2694v4DUB @@ -0,0 +1,115 @@ +{ + "slot": 70, + "transaction": [ + "Af+jfZWDfWLkaI3IXW2k2DTWjBm1a8IuSfX6a7d2pWU6TaVXZKBdSMOOVHm4c773M2wsBJegnYGIXHPq/G62nwABAAkLlJweADw/IvfAeASqIJXdkEr0tY4lxcSIn8RlFcI4owHP1qUGmC48gXYgG4BESUf6BlOwx5mM7Qs37QOz8oolDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwZGb+UhFzL/7K26csOb57yM5bvF9xJrLEObOkAAAAAGp1X4ITkFTUQksVrwxDDPL0t/mHk62hJS1I82ZsbLzgksNuwi9ReDAP20Sqpq/8/wpG4cvGQcDj7QnaE7nvUIC7wPwLtHyi90xBEulKsTz6PGNOXcF+rLA80aI81+eHwe68SM+zJku8NL9cWlqDT8Z1AAbymG2W8jW8iHXvTdRNWem8sa08HDC9sJmzqsOsj+S+dqH6i3TLNx6mW/Y5xi9f/NHLoyuMDzJdu5uE5yCqPBB+d1u+u44BM7lLKWQ/L7syh1EFyuhbW0RHYH7b/hRSe/tCORHKQEI7/RUnomdV+aGbQjXgWr3Fmzny4jslnU7ZZPWQfM6a/W65sDtqnoAgMABQJAQg8ACAoABAUKBwYICQIBngIx1L+BJ8IrxBEBAAAA/9Wem8sa08HDC9sJmzqsOsj+S+dqH6i3TLNx6mW/Y5xiAAAAAAAAAAAAAAEAAAABhQKmr0ff8Mzxj1tWsWMF+vd4Ww6+UnO7pvbdN3cqjVmdQX0KoadSsUatN1kkeILLMbbP0n/VJAk/PYu9VdtqNyw0om4KP0Gop8uOYxsfasPJo7sZmd7QCxFOF0FbVOFPF3Kca7+SQOLHKKT5Oz6JUQdNZLSHOrwcYqmRZ8XFMbkCAAAAHJy+nZp5Tb3Kqh+nK86ZqbQ04NZ9iWclKh9tcHoUMxMAAAAAAABZSmi0NHErq54d+QP4jtzdTVn+3K5BI3bGrRpxoYhNSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999799960, + 290304200, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "postBalances": [ + 99999789958, + 290309202, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 4, + "accounts": [ + 0, + 9, + 7, + 6, + 10, + 5, + 8, + 4, + 4, + 2, + 4, + 1 + ], + "data": "oJ4RFmdrsti3sUJAJ9yukFuYertGYYd3ZaNXGLhs5bcoKeEZZjWqaYVZusT1xeyh7Z8PaZm22QaigKHgnHKMM4pXPdqqcgiS2FctjA6qsUFiULXs7kbDizva3Z5KGioXHfZjXJqTAmkKVm4pNfbnxQJKvDoUBBxpf5sE9314eppaAWXtNuHrtVHFAABBkAg4RAXPLPkgN3Anrnnckh29AN2j2otoAXuRoD1ZJRkXKEGW9fndg2BZMb9mEBAnmFZJYaXt3hLYSE2sb1SU8WX56UtUvVPsx3hj4SPErCZYVivK7dXCNEH8WYkSnBa1pNPssAPPByqUdTxDJiJxLwEXqvH6q4nKDRCLvK3LqBv57W6UMRX1MASj9GvCzHX9Pwde53EVd", + "stackHeight": 2 + }, + { + "programIdIndex": 2, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4Px9qXVhzify", + "stackHeight": 3 + }, + { + "programIdIndex": 5, + "accounts": [ + 10, + 7, + 1 + ], + "data": "4vWADsHeAEjeUNz8E8sN7988cUF94tBeoMiaBGR5A5rMxmtMtPCWWEqcZjiAkTTSvDU4ZmqPJYdiN9HxAJqK9AYsWNjNrY6ws6nmBZpMnNTGFhf6tdD4tvCLtZ1BtxoMab3vz6Pz3dutAz2XBBuFY2NHfijN22vJBbG6pxpB1JharvcnpojMPGwdymxZLyEjQNVjKYpAK6gwX8Z6cvd5f45Zp7w2ckR6B7H63WVrU5aRrmQV7rYV1EiHgmpEXC1Zj1qztopLiANitYKSMZ33r3CWvwQ6wy", + "stackHeight": 3 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy invoke [1]", + "Program log: Instruction: InvokeCpi", + "Program consumption: 996414 units remaining", + "Program consumption: 995923 units remaining", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [2]", + "Program log: invoke_cpi_with_read_only", + "Program log: mode Anchor", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [3]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 8496 of 880366 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 117407 of 989234 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy consumed 128622 of 999850 compute units", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 128772 + }, + "blockTime": 1746129059 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_address_2_transactions/AsT27sgRWJojJVF5i2KFbUQdK4VUouymLdz3jnkDFqpEZbf8gapqVch5UhGwnnY4X22HpepEYfT9F919mRFHa9t b/tests/data/transactions/batched_address_2_transactions/AsT27sgRWJojJVF5i2KFbUQdK4VUouymLdz3jnkDFqpEZbf8gapqVch5UhGwnnY4X22HpepEYfT9F919mRFHa9t new file mode 100644 index 00000000..cfad3f1b --- /dev/null +++ b/tests/data/transactions/batched_address_2_transactions/AsT27sgRWJojJVF5i2KFbUQdK4VUouymLdz3jnkDFqpEZbf8gapqVch5UhGwnnY4X22HpepEYfT9F919mRFHa9t @@ -0,0 +1,115 @@ +{ + "slot": 54, + "transaction": [ + "AQiC53BBGD55t12PRJKr1Gs061IY1TyUB9iLfxig3LTpw1TdZg8jD2IXrXA/ND8tc3QkxFa3aPnrJ9aSjj1oYwcBAAkLlJweADw/IvfAeASqIJXdkEr0tY4lxcSIn8RlFcI4owHP1qUGmC48gXYgG4BESUf6BlOwx5mM7Qs37QOz8oolDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwZGb+UhFzL/7K26csOb57yM5bvF9xJrLEObOkAAAAAGp1X4ITkFTUQksVrwxDDPL0t/mHk62hJS1I82ZsbLzgksNuwi9ReDAP20Sqpq/8/wpG4cvGQcDj7QnaE7nvUIC7wPwLtHyi90xBEulKsTz6PGNOXcF+rLA80aI81+eHwe68SM+zJku8NL9cWlqDT8Z1AAbymG2W8jW8iHXvTdRNWem8sa08HDC9sJmzqsOsj+S+dqH6i3TLNx6mW/Y5xi9f/NHLoyuMDzJdu5uE5yCqPBB+d1u+u44BM7lLKWQ/L7syh1EFyuhbW0RHYH7b/hRSe/tCORHKQEI7/RUnomdb46tZiXCEOAt05INjRRJ79FKsXG7xDEF69OdtLIiBXbAgMABQJAQg8ACAoABAUKBwYICQIBngIx1L+BJ8IrxBEBAAAA/9Wem8sa08HDC9sJmzqsOsj+S+dqH6i3TLNx6mW/Y5xiAAAAAAAAAAAAAAEAAAABlLoHHXwWrYmqkIwjjmAfzh7BrA0rHs8VoOazcFPLuxoCi+AT18XmfjDrQDP970rdqI6d84fsWvVvFf9RgX4SSBH9nkCJQVcPI2CeSxVhDjAwpOx3gLm0mHKgk6scO0J4IXm6N9xT1OcKnymyoBhh8LhtF8DVI17AFs3EyYyniHwCAAAANf/Bzhx7/fms4byTa4sdwnYSf0ovaoT7J0nqeADlnVEAAAAAAACQMZeCbS503+Agjo+XxpMnAVBm+5b40eW+HgOp6q3DtgAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999899980, + 290254180, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "postBalances": [ + 99999889978, + 290259182, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 4, + "accounts": [ + 0, + 9, + 7, + 6, + 10, + 5, + 8, + 4, + 4, + 2, + 4, + 1 + ], + "data": "oJ4RFmdrsti3sUJAJ9yukFuYertGYYd3ZaNXGLhs5bcoKeEZZjWqaYVZusT1xeyh7Z8PaZm22QaigKHgnHKPntfztC4WiS21sKGm9f74edWcsZh8g947wSp6RCXaTKxSNySXKo8mpYfkU4BUkzJLZ5uVxBeVCoJ41L635aeg6oaViVbMzFPrcbmvu7jxXe9ScDJYywiz5L9PbAaJmy5XTZUS4k4cY2hodLHSdM332AVFudmVankovHCoyDTttDD76cEWDT2JZy1QUgVp1B4x1Wyg2TH4yWFzjadKzY4ovPtjv3AYk39XFyQKfDLd9Yvp7gJH2Pt6v8u61zhz4uZugBWkb4V9HN9HgTvnhTfmkHUSCTmMgYozY9Lc1YTaUEJCuVPRy", + "stackHeight": 2 + }, + { + "programIdIndex": 2, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4Px9qXVhzify", + "stackHeight": 3 + }, + { + "programIdIndex": 5, + "accounts": [ + 10, + 7, + 1 + ], + "data": "4vWADsHeAEjeUNz8E8sN7988cUF94tBeoMiaBGR5A5rMxmtMtPCWWEqcZjiAkTTSvDU4ZmqPJYVU5F6HZixSKmhBrvG3325W575rqX89xcwMB6xqwcQLUxGJAUuYysFYRA2kBoL7CpHV9EbuxogsWyBGnnkjubEqo74ffXDC2WC6JjQ9qNkEtbW7DUHPm9mqE7r5jJf5TAYv1zscipP34WGbRHA8rCJY8Dre38YFwB7iLDVGQq8RuVVyBjrSGNMTAB45Z734DEMz3joF2NUXaQ64VXnMCB", + "stackHeight": 3 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy invoke [1]", + "Program log: Instruction: InvokeCpi", + "Program consumption: 996414 units remaining", + "Program consumption: 995923 units remaining", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [2]", + "Program log: invoke_cpi_with_read_only", + "Program log: mode Anchor", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [3]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 8496 of 880366 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 117407 of 989234 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy consumed 128622 of 999850 compute units", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 128772 + }, + "blockTime": 1746129051 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_address_2_transactions/HtJzPJ6KtR6SVfhw7qZkP6H28yXfQfFcjPtW37LxcsWBkB6i6v51jSECbjqwqVXK5zRKG32R2VyEk4y4uKkvBT3 b/tests/data/transactions/batched_address_2_transactions/HtJzPJ6KtR6SVfhw7qZkP6H28yXfQfFcjPtW37LxcsWBkB6i6v51jSECbjqwqVXK5zRKG32R2VyEk4y4uKkvBT3 new file mode 100644 index 00000000..19a8fed6 --- /dev/null +++ b/tests/data/transactions/batched_address_2_transactions/HtJzPJ6KtR6SVfhw7qZkP6H28yXfQfFcjPtW37LxcsWBkB6i6v51jSECbjqwqVXK5zRKG32R2VyEk4y4uKkvBT3 @@ -0,0 +1,115 @@ +{ + "slot": 64, + "transaction": [ + "AQ6PiUFtPPCbzrgscN30ubdGr53aaobi/k1ghdJVpwu3P7t3gT9QNa0M2yV+juyMharI5jCTaPAxgPrA4SgtaQYBAAkLlJweADw/IvfAeASqIJXdkEr0tY4lxcSIn8RlFcI4owHP1qUGmC48gXYgG4BESUf6BlOwx5mM7Qs37QOz8oolDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwZGb+UhFzL/7K26csOb57yM5bvF9xJrLEObOkAAAAAGp1X4ITkFTUQksVrwxDDPL0t/mHk62hJS1I82ZsbLzgksNuwi9ReDAP20Sqpq/8/wpG4cvGQcDj7QnaE7nvUIC7wPwLtHyi90xBEulKsTz6PGNOXcF+rLA80aI81+eHwe68SM+zJku8NL9cWlqDT8Z1AAbymG2W8jW8iHXvTdRNWem8sa08HDC9sJmzqsOsj+S+dqH6i3TLNx6mW/Y5xi9f/NHLoyuMDzJdu5uE5yCqPBB+d1u+u44BM7lLKWQ/L7syh1EFyuhbW0RHYH7b/hRSe/tCORHKQEI7/RUnomdQ+0zyVar1sk1F2y39r3GR8sb1c/ZY06apFjnVa1HHJfAgMABQJAQg8ACAoABAUKBwYICQIBngIx1L+BJ8IrxBEBAAAA/9Wem8sa08HDC9sJmzqsOsj+S+dqH6i3TLNx6mW/Y5xiAAAAAAAAAAAAAAEAAAABpU3/v5H+tm+e1eQzGNenGcMBueYLeOS3oALcBkg6OgqsUKlZljxifpLrGQBg6YgM7LXWS0MbUxsv+mj2mlGl6BLlhcRG4+aHlLvP9P9lZXLAKCnvSkf2mWUsg7tjCfNfhWOeNebb9fmFjtHJn7U9RPQGF80PxAuAXpfH1VazmzUCAAAAkIKFf9Zu8CW7qZsagMXZdnG0FYqfPWknXwbskZe4RSkAAAAAAABgOOcD62tN8vpacTNrd+pOgsoPFsW+Fhf1U1xA+qNseQAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999839968, + 290284192, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "postBalances": [ + 99999829966, + 290289194, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 4, + "accounts": [ + 0, + 9, + 7, + 6, + 10, + 5, + 8, + 4, + 4, + 2, + 4, + 1 + ], + "data": "oJ4RFmdrsti3sUJAJ9yukFuYertGYYd3ZaNXGLhs5bcoKeEZZjWqaYVZusT1xeyh7Z8PaZm22QaigKHgnHKSNVXyxv1UGN532tvPrCncXwUiudnvhCHkkBHepjyU7jijbgxpv9TyfPmqM1RhahUkL2kiMZbeuGKiMEK4CZW3QCkaWPcxeGE1XzTUBsoyAG7Hw5j7FFwYnFLt2kjCziXxfLbeWETb99wt8xzpzmp2bDdUzKAcMvMi3n39QhxZRoxrqt3iTRMh8EQbWkGGDisBoB7Rc2MmtSxzFXJd7AxBszBPyNYPBmkZz6U67X8koAgd9GWzQSRFaQE1CnKW4GxhjWbnfi9Zu7VgSrwqdnpGpVkAUn7PniMevcdByobQLZyTvYYdM", + "stackHeight": 2 + }, + { + "programIdIndex": 2, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4Px9qXVhzify", + "stackHeight": 3 + }, + { + "programIdIndex": 5, + "accounts": [ + 10, + 7, + 1 + ], + "data": "4vWADsHeAEjeUNz8E8sN7988cUF94tBeoMiaBGR5A5rMxmtMtPCWWEqcZjiAkTTSvDU4ZmqPJYcrwGPgWL7EV2bD8ZG2bwzAwjnMnZrRyT1nMW5yTac7ZWmfd44xuxWEe5WFsW5VrBj3W8JYyzbxWBRBgDogSEBjM8gYa2Db4kvF8oowDUzJNufCvWQsmCGt3RV9UvVBp67ZeM6FieqKXTzXgE24cnPk8izXES66wZPFK6CDVHq6cRQB32Ci1oM1Y1p2E21d6QF6C1Hbd4wD5G8ft65MBV", + "stackHeight": 3 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy invoke [1]", + "Program log: Instruction: InvokeCpi", + "Program consumption: 996414 units remaining", + "Program consumption: 995923 units remaining", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [2]", + "Program log: invoke_cpi_with_read_only", + "Program log: mode Anchor", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [3]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 9340 of 880366 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 118251 of 989234 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy consumed 129466 of 999850 compute units", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 129616 + }, + "blockTime": 1746129056 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_address_2_transactions/eyCHfX86Ctcx66XvAm9qypvnpdbBAkAdXvVEo94piCTwtX5ibeMFSEiFVwbasWJhmM1jxSoAd6wgjyTBeP5DsXP b/tests/data/transactions/batched_address_2_transactions/eyCHfX86Ctcx66XvAm9qypvnpdbBAkAdXvVEo94piCTwtX5ibeMFSEiFVwbasWJhmM1jxSoAd6wgjyTBeP5DsXP new file mode 100644 index 00000000..9b2ec8e1 --- /dev/null +++ b/tests/data/transactions/batched_address_2_transactions/eyCHfX86Ctcx66XvAm9qypvnpdbBAkAdXvVEo94piCTwtX5ibeMFSEiFVwbasWJhmM1jxSoAd6wgjyTBeP5DsXP @@ -0,0 +1,115 @@ +{ + "slot": 53, + "transaction": [ + "ASC+L6QaKieN48ezojV3/sg0rj/Sz+wNmQlD9uNhY1miIlpb26I0ShwKo7No9W8kYe/F8c+2GMnt7ggb6o0x3AoBAAkLlJweADw/IvfAeASqIJXdkEr0tY4lxcSIn8RlFcI4owHP1qUGmC48gXYgG4BESUf6BlOwx5mM7Qs37QOz8oolDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwZGb+UhFzL/7K26csOb57yM5bvF9xJrLEObOkAAAAAGp1X4ITkFTUQksVrwxDDPL0t/mHk62hJS1I82ZsbLzgksNuwi9ReDAP20Sqpq/8/wpG4cvGQcDj7QnaE7nvUIC7wPwLtHyi90xBEulKsTz6PGNOXcF+rLA80aI81+eHwe68SM+zJku8NL9cWlqDT8Z1AAbymG2W8jW8iHXvTdRNWem8sa08HDC9sJmzqsOsj+S+dqH6i3TLNx6mW/Y5xi9f/NHLoyuMDzJdu5uE5yCqPBB+d1u+u44BM7lLKWQ/L7syh1EFyuhbW0RHYH7b/hRSe/tCORHKQEI7/RUnomde1ncwnSXGsixcOZGrT0pzXhknMyghK5UJlLSN2ONAMwAgMABQJAQg8ACAoABAUKBwYICQIBngIx1L+BJ8IrxBEBAAAA/9Wem8sa08HDC9sJmzqsOsj+S+dqH6i3TLNx6mW/Y5xiAAAAAAAAAAAAAAEAAAABi8xLdZ+Vwjd2/zk+IPZ/nBV4hoBL0B8eYNbXED9dvt6BufjwV3fgxTSDPPvOfFybZZUJjjLVwihtagDM0df08BYVqOlv9jYHrMVGivnUyz8gzON0NcDVgsAFIVINdKNoqXhHlAt5bftn8FVQy3qyA6Q9v6iCY/QZlm7Jk1xZSv0CAAAAGUTDlWBx7m6AyFbyB0So5dbKJwBriSsE9vyLeTluJ5cAAAAAAAD2GHevTn+DE62CNDApULMxhNWrl9F7TDirQaKwZbvQwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999909982, + 290249178, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "postBalances": [ + 99999899980, + 290254180, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 4, + "accounts": [ + 0, + 9, + 7, + 6, + 10, + 5, + 8, + 4, + 4, + 2, + 4, + 1 + ], + "data": "oJ4RFmdrsti3sUJAJ9yukFuYertGYYd3ZaNXGLhs5bcoKeEZZjWqaYVZusT1xeyh7Z8PaZm22QaigKHgnHKNQKTXvNHkBEJBrxMkm7DGy4ecti1dEzyTn9wmGja3ESyw9rapLVzJfukr6oxuNa3DmLhe1tN78dyNMoLBCePFVW8vvgUF7VP6rwMrTAWpDPDp426NMNYKZpjau1Zj3ZqBXwbSuAJcWqCBYtrj6JtcZQfyDYyNnzeeasBV7v2rNceKcDZpHTfpwAB2aCfMaaoD3NSLqyfMSgbyZ7PexivRy57mGwF2XysdxB7nTVGvKW5VHfjH1REJ5ZVuJXR3QJSWGtRSsKhbKsmug9xUw4S7pKqRopvASyVQeari6nGk9kuddZCYo", + "stackHeight": 2 + }, + { + "programIdIndex": 2, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4Px9qXVhzify", + "stackHeight": 3 + }, + { + "programIdIndex": 5, + "accounts": [ + 10, + 7, + 1 + ], + "data": "4vWADsHeAEjeUNz8E8sN7988cUF94tBeoMiaBGR5A5rMxmtMtPCWWEqcZjiAkTTSvDU4ZmqPJYgC38m5Ta6fADCgDJsY6PhvRV4JFmE43tK72nEtArbac22uVVGDmt9w4rd6cQAFMH1hjQpVudKJeiRdSmqLt4NfrSMFcR4v5PMtPACdV9UPLCinwSxshqCecjrE7sT8SV6eMrjwSN9NTNMqVwFiTvr7W7G2D6gvz52wZdBcYLxYAw9dguqfwUznvQkKbQqyXtJXV8jjMuAdmu6Um5Xg95", + "stackHeight": 3 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy invoke [1]", + "Program log: Instruction: InvokeCpi", + "Program consumption: 996414 units remaining", + "Program consumption: 995923 units remaining", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [2]", + "Program log: invoke_cpi_with_read_only", + "Program log: mode Anchor", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [3]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 9352 of 880366 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 118263 of 989234 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy consumed 129478 of 999850 compute units", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 129628 + }, + "blockTime": 1746129051 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_address_2_transactions/kKZuzAAY1AD4kSiGy7ruPRNs3bNnfNRqKKpn3cN4tdX43EdfRm1RJvuLFmd31rqxjXtpUHZQUybG7wPc9b8veiJ b/tests/data/transactions/batched_address_2_transactions/kKZuzAAY1AD4kSiGy7ruPRNs3bNnfNRqKKpn3cN4tdX43EdfRm1RJvuLFmd31rqxjXtpUHZQUybG7wPc9b8veiJ new file mode 100644 index 00000000..7b712705 --- /dev/null +++ b/tests/data/transactions/batched_address_2_transactions/kKZuzAAY1AD4kSiGy7ruPRNs3bNnfNRqKKpn3cN4tdX43EdfRm1RJvuLFmd31rqxjXtpUHZQUybG7wPc9b8veiJ @@ -0,0 +1,115 @@ +{ + "slot": 44, + "transaction": [ + "ASVbjfOaeGjSiqfiiwDpLsksudUtIFr+P9y0pbc0vcHfenMH1THBazFQfCcx7yJKfkpqvEfMw7+r3I8O8u0sOAcBAAkLlJweADw/IvfAeASqIJXdkEr0tY4lxcSIn8RlFcI4owHP1qUGmC48gXYgG4BESUf6BlOwx5mM7Qs37QOz8oolDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwZGb+UhFzL/7K26csOb57yM5bvF9xJrLEObOkAAAAAGp1X4ITkFTUQksVrwxDDPL0t/mHk62hJS1I82ZsbLzgksNuwi9ReDAP20Sqpq/8/wpG4cvGQcDj7QnaE7nvUIC7wPwLtHyi90xBEulKsTz6PGNOXcF+rLA80aI81+eHwe68SM+zJku8NL9cWlqDT8Z1AAbymG2W8jW8iHXvTdRNWem8sa08HDC9sJmzqsOsj+S+dqH6i3TLNx6mW/Y5xi9f/NHLoyuMDzJdu5uE5yCqPBB+d1u+u44BM7lLKWQ/L7syh1EFyuhbW0RHYH7b/hRSe/tCORHKQEI7/RUnomdZgK8x+Dj/80fEZBLsDBspMBciTXzPTFB5i8czH1CM39AgMABQJAQg8ACAoABAUKBwYICQIBngIx1L+BJ8IrxBEBAAAA/9Wem8sa08HDC9sJmzqsOsj+S+dqH6i3TLNx6mW/Y5xiAAAAAAAAAAAAAAEAAAABG3DMD1LhI4eg7mq+YD+K8j2LaLxjWdkcdHRx83mQtVEcS56pZQ2J+469F14+4UGP5vs9Ef+Aq1V6zqRSAp9X7g8EGarcGwqouBWg8VrDr4wjWvboImUXyuDlR2LznmhAB3Vzp+WpfZ4Zqkvg5xRuBu3Y/gIQhsVKykgLomzWKw0CAAAAUE+ypERhzAvrsyUoDtkTClm72zEcAf1zSQmhH55IZigAAAAAAAC0OzY9ga6LaJlG7OXGgs1ZimXqv/Y6NXLf5F+1reWL3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999969994, + 290219166, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "postBalances": [ + 99999959992, + 290224168, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 4, + "accounts": [ + 0, + 9, + 7, + 6, + 10, + 5, + 8, + 4, + 4, + 2, + 4, + 1 + ], + "data": "oJ4RFmdrsti3sUJAJ9yukFuYertGYYd3ZaNXGLhs5bcoKeEZZjWqaYVZusT1xeyh7Z8PaZm22QaigKHgnHK4vQ4bhHA1YbTdxLBCtuvvucoiGEvHCBmLzGNNkZXqsK6APYRthyHfS6mDeNTVQtVPWtFFZrQTbSZGWPrVDp1ErxWZQ1fHQyAz84UC7cMaYkhKeFX7BsFpPxfrem1zVEjcbUjeSerZegJ4zutBerefapXq9finHjRKa8nosBxzrHXsM8itTNdowLqaBshfpQZFDcGuggc4A87z4p3Ymy3skupuvTWFQyGkpC2EMGkFXPro2hxsx7t68WfHqf8HnqeBCFhivDFhcomasce7s7SkZrB5JHCVpPKt87pQSehXfbNMuydKV", + "stackHeight": 2 + }, + { + "programIdIndex": 2, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4Px9qXVhzify", + "stackHeight": 3 + }, + { + "programIdIndex": 5, + "accounts": [ + 10, + 7, + 1 + ], + "data": "4vWADsHeAEjeUNz8E8sN7988cUF94tBeoMiaBGR5A5rMxmtMtPCWWEqcZjiAkTTSvDU4ZmqPJYU1PPUzLz5NYPau3spm2xKsSMkvu51CDZFVsX7dma78PpBurdjfUQgg8Tcs5J8Nqz6CQ9Wv6cLZktj29gs396WLKbmX4XM8mG9asMywtrX8y6ir3E15Ysi5b5mNQpDCLRrVpDCaqxgfhBxvTB539g1U8xzDrubNJ6ip3W9jVYHrvhf9DLD9SPnEBP7AaNf58Qi1rWvBegtsJhYCEaT9no", + "stackHeight": 3 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy invoke [1]", + "Program log: Instruction: InvokeCpi", + "Program consumption: 996414 units remaining", + "Program consumption: 995923 units remaining", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [2]", + "Program log: invoke_cpi_with_read_only", + "Program log: mode Anchor", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [3]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 9340 of 880366 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 118251 of 989234 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy consumed 129466 of 999850 compute units", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 129616 + }, + "blockTime": 1746129047 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_address_2_transactions/pJXQJhLigSiSYHPeefXgPoPZJLjEQaVJNk4h9yXKAGbZFaD86yZdx2DLL9REPmYAkkCiUCvoPdKAE8Nihd66QpL b/tests/data/transactions/batched_address_2_transactions/pJXQJhLigSiSYHPeefXgPoPZJLjEQaVJNk4h9yXKAGbZFaD86yZdx2DLL9REPmYAkkCiUCvoPdKAE8Nihd66QpL new file mode 100644 index 00000000..cb7570f9 --- /dev/null +++ b/tests/data/transactions/batched_address_2_transactions/pJXQJhLigSiSYHPeefXgPoPZJLjEQaVJNk4h9yXKAGbZFaD86yZdx2DLL9REPmYAkkCiUCvoPdKAE8Nihd66QpL @@ -0,0 +1,115 @@ +{ + "slot": 65, + "transaction": [ + "ASjKpGEdB4Y1DeOYu4bNKsvO3McDvPOoj+eo7csmeOLx83XBdo7hKgLPrNl8KAQHuC8Cmc77pQCNv0O4HG6Htw0BAAkLlJweADw/IvfAeASqIJXdkEr0tY4lxcSIn8RlFcI4owHP1qUGmC48gXYgG4BESUf6BlOwx5mM7Qs37QOz8oolDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwZGb+UhFzL/7K26csOb57yM5bvF9xJrLEObOkAAAAAGp1X4ITkFTUQksVrwxDDPL0t/mHk62hJS1I82ZsbLzgksNuwi9ReDAP20Sqpq/8/wpG4cvGQcDj7QnaE7nvUIC7wPwLtHyi90xBEulKsTz6PGNOXcF+rLA80aI81+eHwe68SM+zJku8NL9cWlqDT8Z1AAbymG2W8jW8iHXvTdRNWem8sa08HDC9sJmzqsOsj+S+dqH6i3TLNx6mW/Y5xi9f/NHLoyuMDzJdu5uE5yCqPBB+d1u+u44BM7lLKWQ/L7syh1EFyuhbW0RHYH7b/hRSe/tCORHKQEI7/RUnomdZ+DhrvPky0WAQIuHG1UGeACppuxHdWUNfM1zI6cMQcbAgMABQJAQg8ACAoABAUKBwYICQIBngIx1L+BJ8IrxBEBAAAA/9Wem8sa08HDC9sJmzqsOsj+S+dqH6i3TLNx6mW/Y5xiAAAAAAAAAAAAAAEAAAABgY9IxasX2l+E5UQnW12/zpQRzq6oGMNdRPFi5CoJbRETww0x7qmYM8PPLxVVzEm8tvlt5FKzn1IhZ1VsCQ06dglb8lXYspEYCgzaWUW+NsdRSUmO8mxmLU24IP22MQCmpmxgiL60n8dU7EsGuzFc6BR5vsng/IU36ujReL0a8CQCAAAABKppPCC9JgTU5Ri4y4TvEcisvuVCrl+ex9NQ9HR8uI0AAAAAAADgpR3WuqvjGdDGrcyDqn+62Ehmrc5pRn9oFEHcbEf9igAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999829966, + 290289194, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "postBalances": [ + 99999819964, + 290294196, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 4, + "accounts": [ + 0, + 9, + 7, + 6, + 10, + 5, + 8, + 4, + 4, + 2, + 4, + 1 + ], + "data": "oJ4RFmdrsti3sUJAJ9yukFuYertGYYd3ZaNXGLhs5bcoKeEZZjWqaYVZusT1xeyh7Z8PaZm22QaigKHgnHKLovmF9YCYfU7UDLQRTdfye5ZXNnzA5CT5nKGkF9YKL5VghFJmue6PAcsvoDtCxDLwFPGeCwgCrTejH2aFYK6FYRKZNNhLuWo6eNw7yYW4T6chixQ3KGn9fjnDbxZHQ1uYDjG6rMhP32zQw1GkVsgQ7RD4nV8ctY8TKefUwLnHS7svVYiiGtVx5dBW9fqrbLKFQnziB1ydCK2RRe9mBqQ5HkRricazvWUQ7HAhWaUYkA3uAptDFLAK441vTWehYnnkdcv3TDgw9uJDtSvHFyuC2TKRfwSJ6EbEUDAN2PkfcpRnjeY3h", + "stackHeight": 2 + }, + { + "programIdIndex": 2, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4Px9qXVhzify", + "stackHeight": 3 + }, + { + "programIdIndex": 5, + "accounts": [ + 10, + 7, + 1 + ], + "data": "4vWADsHeAEjeUNz8E8sN7988cUF94tBeoMiaBGR5A5rMxmtMtPCWWEqcZjiAkTTSvDU4ZmqPJYdfHYupVVcUvczMCmKBc5xxndsJExKYN66aKWrGzfgDLzg1sxNjw8cu8KTn7VXGJJm7TibiNszEnR1JgfigocY6zRRmzBfg4XvcQomBB3MiaydudH656NMkeaaoJXGEqZH9HAU1nCkDVTecZH8GfRzU9VuGBjuVhbAxmWqgjxGhV9fqyVqprCy8gFEWQf7jc3AWzu4Z4mrsEjgK7cr3Eo", + "stackHeight": 3 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy invoke [1]", + "Program log: Instruction: InvokeCpi", + "Program consumption: 996414 units remaining", + "Program consumption: 995923 units remaining", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [2]", + "Program log: invoke_cpi_with_read_only", + "Program log: mode Anchor", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [3]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 9340 of 880366 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 118251 of 989234 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy consumed 129466 of 999850 compute units", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 129616 + }, + "blockTime": 1746129057 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_address_transactions/28UoL7q1FTXsRsbnEWg9sxL6B19UTLcqCPd4LdgLhLkepm5JLZaadNC3rAttgrVSU9WeFKz5AbkYGti6KLRMQzww b/tests/data/transactions/batched_address_transactions/28UoL7q1FTXsRsbnEWg9sxL6B19UTLcqCPd4LdgLhLkepm5JLZaadNC3rAttgrVSU9WeFKz5AbkYGti6KLRMQzww new file mode 100644 index 00000000..202aae49 --- /dev/null +++ b/tests/data/transactions/batched_address_transactions/28UoL7q1FTXsRsbnEWg9sxL6B19UTLcqCPd4LdgLhLkepm5JLZaadNC3rAttgrVSU9WeFKz5AbkYGti6KLRMQzww @@ -0,0 +1,126 @@ +{ + "slot": 60, + "transaction": [ + "ATh3g7j1ArOOLuAyUbUf4jWf85QTz0rlB2OG3KJxuHnFGMegrSGZ9XFFqSdrzRNqOevp7V7y90CW50YhmfC+Vg4BAAkMlJweADw/IvfAeASqIJXdkEr0tY4lxcSIn8RlFcI4owENAckoq0XTZVlaNOh3F/uwAIoZ0i8FLJ2h+YjEfFfeOs/WpQaYLjyBdiAbgERJR/oGU7DHmYztCzftA7PyiiUMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E1Z6byxrTwcML2wmbOqw6yP5L52ofqLdMs3HqZb9jnGL1/80cujK4wPMl27m4TnIKo8EH53W767jgEzuUspZD8vuzKHUQXK6FtbREdgftv+FFJ7+0I5EcpAQjv9FSeiZ11vKb4Q19zRoqu1eui4LPxy4itfYVm3B0W5P2t1zlWy8CBAAFAkBCDwAJCwAFBgsIBwkKAwECzQHl6s6C/v8pEAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBnFt78qfKFuoufie6CEfmZDzZBhiqTJ1N3u9Fr9kgS5kkNe1eilJ2+kr6FvYn5N59tGy10b1+keXZE74r/YyGjAZ5yHuwB7CL0JWpGqzo8cBcC1SBVvIPZexEYY7dy6dvhK6/R6w2V2K5E/QiggIJ0Dra9069blUH9Scb24ECQiYzsJAv0006zsNJEvoQAs+O9vpSYG2MOnVptSlnIW+PPwEBAAD/", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999801087, + 9496404260, + 290269173, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "postBalances": [ + 99999785786, + 9496409560, + 290274174, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 5, + "accounts": [ + 0, + 10, + 8, + 7, + 11, + 6, + 9, + 5, + 5, + 3, + 5, + 1, + 2 + ], + "data": "KWv8WR8JeWsurSTFu8JWPx48BqHqxVKHjomWzSQdzBiYvZpWG6JUz7wYeTRk4CXaw99D2ghvFJmPAMYuRSpnAgDgKE3bHLZ7zuqRA5WAChucFYyc99FCQv8Uce2vEpoLSdizRecBicF1Ux165DXq3zdTrcweGcN9GpmTu33Sep5sA5Ksqyu4QyRstp6BJ3sY3vK35Lf7KQVbPjWzRvMp5uVVJQi2CFhiDtUhev1q8spwDfXVh6haqb9iXQ7QgNZ9rNLXsNsB2TS3JSj2PZc7Po66o23avPr64Ev4bSfPePCgE6qDCdP3gtH2nKwwrUZ5s1acBqbsLYy8o9Qif1GLr3TqH6W6BU9JavrrjdvBGpX4MWmFWqBuL3NpmUqEMyK9nLdQ2NxR1sG3iexMurg1SYDspvMeKZ7DjMMNxyLR4iFE44oyXcg7xiy5FK87aR3K3xtXbdhW5DQQswHZWUN72DiNqwU995orAETm3QjxHmV56aZ4sSX5NMdTiLjs1UMD", + "stackHeight": 2 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4WyeHbGaYB4b", + "stackHeight": 3 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 2 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 3 + }, + { + "programIdIndex": 6, + "accounts": [ + 11, + 8, + 2, + 1 + ], + "data": "HDtpqY3uCYv8VK5FAXvJVKJiyeFUY1KJsHnwwLbivMrxEE5JmPBPHoCLNUJzwdQDk68HHfELoZmSYzRLCaC37N1xzjdKSGrZ83tGpMmc3Na64UqCjUXy69mWqmxGMC7oSm2Lo713pWQnpdwtboWQchyXo1NTCgZUVBWZ2Q5NRteieB6QqnCxdT9ru8MxPVZTWbVWAtqUDna8XumVPfpwhL3vVrMWjGkgUUJWVDpXu4xaCUqhY7zetgAeYz6NcSKwthma3prnjhDoRCFp7JfXzwpoRPPXLzVnYEboAYnqUhvNMvnXHjuXchrsa4pW6cXs5EqRtJRe3UBjMTFW5emLTokKwcpcoQz7s3Kk2sSDpctF3txPyCzEs8Jetbs76uSju2U6WVyBjmGGcNB", + "stackHeight": 3 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy invoke [1]", + "Program log: Instruction: CreateCompressedPda", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [2]", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [3]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 32067 of 856915 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 155954 of 980764 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy consumed 175687 of 999850 compute units", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 175837 + }, + "blockTime": 1746055774 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_address_transactions/2DTQAnLmg9cNpae1NWMbWzzfDxJumNN5YyJ5wDa7MDvjqoNarpv3QRYPmgF5HJX6wkFk7Yu3vH8mN8NBCRqP8xZT b/tests/data/transactions/batched_address_transactions/2DTQAnLmg9cNpae1NWMbWzzfDxJumNN5YyJ5wDa7MDvjqoNarpv3QRYPmgF5HJX6wkFk7Yu3vH8mN8NBCRqP8xZT new file mode 100644 index 00000000..ee0ac902 --- /dev/null +++ b/tests/data/transactions/batched_address_transactions/2DTQAnLmg9cNpae1NWMbWzzfDxJumNN5YyJ5wDa7MDvjqoNarpv3QRYPmgF5HJX6wkFk7Yu3vH8mN8NBCRqP8xZT @@ -0,0 +1,126 @@ +{ + "slot": 58, + "transaction": [ + "ATzCAv+Yg7ozFWhh7uUWfKcfRkX0+pKoIkM1eF2D9Mt+FrPTE86hWmU8nv+1hbUYHUwi2+IBA4GIgi7haNnYOA4BAAkMlJweADw/IvfAeASqIJXdkEr0tY4lxcSIn8RlFcI4owENAckoq0XTZVlaNOh3F/uwAIoZ0i8FLJ2h+YjEfFfeOs/WpQaYLjyBdiAbgERJR/oGU7DHmYztCzftA7PyiiUMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E1Z6byxrTwcML2wmbOqw6yP5L52ofqLdMs3HqZb9jnGL1/80cujK4wPMl27m4TnIKo8EH53W767jgEzuUspZD8vuzKHUQXK6FtbREdgftv+FFJ7+0I5EcpAQjv9FSeiZ1dH13J715gh4hQV+2ARx418Svf+wdqYRfQz1Lc3DFolcCBAAFAkBCDwAJCwAFBgsIBwkKAwECzQHl6s6C/v8pEAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBoUAJDHxl3cp0O2v3J3s2bKFSQERDU/0EStxhC8a5cVoQzzq5tzCMW4J6wCwx61VarlrlI+ysWQoAzrYuwOpJtgDKV0/j+j3YicqcxfyV9jn4CjKNUZz13hXtU3a9vD2km8BwbUFuogMhcrzh6XhmQUak8Q7VtJAdVf9rdmtyLPaRZoT5pYo6KuX4ZGcDmUMNFnHDGiQxGDYluF1+9/vwFQEBAAD/", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999816388, + 9496398960, + 290264172, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "postBalances": [ + 99999801087, + 9496404260, + 290269173, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 5, + "accounts": [ + 0, + 10, + 8, + 7, + 11, + 6, + 9, + 5, + 5, + 3, + 5, + 1, + 2 + ], + "data": "KWv8WR8JeWsurSTFu8PTDY9brjC89e6d2gfHYdEkSzYthZGnhax47TiSHVb2QmMJu8ZyYboaLetFAVxHZGePZxRumUWkES15qDEKR1kFRtXwGPSVwUN63S18636JKkgAT8CygJkxsBwCVzK3vJ3xN2wdjsKJp9Q9fP3z1efMq9YcEWGmKYVxe2fGQGbQTVDo3f3u9WW7pkVapddWoFXUwpWgeoZpUBnWSsNj8dssQVmdjiCg98qRz1V94gYz3k22JUgJjRAdbujvfYpA7uGDnWL3YzJ1tyaxxg2JDDowFpteXLFSFVC4QrEvbBTZyyV7FvjPCv9CXXE2o7eW2Z5JQzetKT67qjTSLN8DpaEuV7ckrPquXD4ZRc4LvvWPA8V2cSuymsYdiFMEzSiCrniQj3NWidt5vnABQp7QTmuR2Hxyd67W24hevp7S7X8ofXX4KKx488u82vfjh4B2c4Zb7Jfi5xExKXFTuzeSXqwRxw63XvPVLwCHAD2n63MKYKzP", + "stackHeight": 2 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4WyeHbGaYB4b", + "stackHeight": 3 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 2 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 3 + }, + { + "programIdIndex": 6, + "accounts": [ + 11, + 8, + 2, + 1 + ], + "data": "HDtpqY3uCYv8VK5FAXvJVKJiyeFUY1KJsHnwwLbivMrxEE5JmPBPHoCLNUJzwdQDk68HHfEMQadDP58iWfKxV49XoDFWx7sdSB3FQMzjbeZwSvC4wmyXAjTKv5opDCKLdEAnLFWAX7XBQFGytjDtZeu1hdiHu9nxfFaQNskyRXuWrbxtewqLmZBKh3WPRwnEhipTcqp8N4Bt4kxFqhr1RN8ZWodYzZ33W7mqWRPArK3BEbYN1Kon2VYS2SgVESrGtwwSXd5GbKXsvDFWBLBrrTomDHv4iiad7KPkRDBrs9Nd7bjw1skZbPhgrfffUWkTwUcVe2YnHpeweje3c9QTAX28ZrBHpK1YL8MpH9WPZFiTG6NPWG4CRcmgPxANwD48rN8ZcGbcJwoJdJF", + "stackHeight": 3 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy invoke [1]", + "Program log: Instruction: CreateCompressedPda", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [2]", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [3]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 32088 of 856915 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 155975 of 980764 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy consumed 175708 of 999850 compute units", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 175858 + }, + "blockTime": 1746055773 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_address_transactions/2RDkEEm8gkWDWh2EhoCkK46tJXzFbKiC79hooQ2R8azkvwL1ebyWEsxVxNt87fBq2DoY8DDLNfpjTRTpAWqJX3Z3 b/tests/data/transactions/batched_address_transactions/2RDkEEm8gkWDWh2EhoCkK46tJXzFbKiC79hooQ2R8azkvwL1ebyWEsxVxNt87fBq2DoY8DDLNfpjTRTpAWqJX3Z3 new file mode 100644 index 00000000..16396ff7 --- /dev/null +++ b/tests/data/transactions/batched_address_transactions/2RDkEEm8gkWDWh2EhoCkK46tJXzFbKiC79hooQ2R8azkvwL1ebyWEsxVxNt87fBq2DoY8DDLNfpjTRTpAWqJX3Z3 @@ -0,0 +1,126 @@ +{ + "slot": 81, + "transaction": [ + "AUbnN19cQCP+kYi0jno261Wa7Iw1mcv0xFgeGlmcMmpVOBp18KVQd/LAdqqGPm+5SBDfETJgYNEaq+dpOCKatQoBAAkMlJweADw/IvfAeASqIJXdkEr0tY4lxcSIn8RlFcI4owENAckoq0XTZVlaNOh3F/uwAIoZ0i8FLJ2h+YjEfFfeOs/WpQaYLjyBdiAbgERJR/oGU7DHmYztCzftA7PyiiUMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E1Z6byxrTwcML2wmbOqw6yP5L52ofqLdMs3HqZb9jnGL1/80cujK4wPMl27m4TnIKo8EH53W767jgEzuUspZD8vuzKHUQXK6FtbREdgftv+FFJ7+0I5EcpAQjv9FSeiZ1uofLF470Tg/ykpAB14glH/6oAw7cXwukjtgmAmotbQsCBAAFAkBCDwAJCwAFBgsIBwkKAwECzQHl6s6C/v8pEAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBGqy+oMyHfI3KnQgatQZrxg9ubxXRGMmZhNLNCzvXD8IBmyGeW9OoAxvn4tp/eeXXa2JdoBHHWTtjIWcR0tLrpgt4ldJF7NRpnOhRIAuVrdK/j4pkI++8Ijn4ynlrO3T4ITxYiGj0gsDhlh3ALIXWJ3jmR4+51oelJPBQgYxmd5QnUx6ThzbH2eW/ERLyBRpZ8wQen/2yQW6iAJ06akxXFgEBAAD/", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999617475, + 9496467860, + 290329185, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "postBalances": [ + 99999602174, + 9496473160, + 290334186, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 5, + "accounts": [ + 0, + 10, + 8, + 7, + 11, + 6, + 9, + 5, + 5, + 3, + 5, + 1, + 2 + ], + "data": "KWv8WR8JeWsurSTFu63SFQtcHWtiDgqNr2X5hMYrd1Z5g95RjYWE5UExzwN2jF1yBmHXvX2J74wn85y6HVmNrCJRDbwn93YGvyZTKAGPEeroK33xhDagvXh8usscDK1bjrgyYvLxk5fpy13P59izf4DTV8ZDSRgaS5nandLdHzps3Bi123GKE8awEh8vpqHViVMoYMKqMb7a72HTudEaAqVyubsBm1W8yaptw6TEznCdU8cz2LHrdD69dpx9CoSPkkMuJHirLhoZN3eNoNJUYbMA6FmtGqjStrURX87o9n75Xbbhwue6KZVQBQ1d6kPyPo1yUVAokyz6yq7NopA3Sj5GzWHTUg2XiBm6f8YYMGy3MegGpSP28ovViLrRiHMHa7CtYmD9yhsZqwjXqY93RVenLY8KBTQV9kTGxZBXxjTEmSQRfHuebKtjRBeEcqQ53iwVuXrsjXrgbczeGAgQGnZs7NcxTmndGRhFKLTThoKTJzbem7QqSTLSvoVPeaWb", + "stackHeight": 2 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4WyeHbGaYB4b", + "stackHeight": 3 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 2 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 3 + }, + { + "programIdIndex": 6, + "accounts": [ + 11, + 8, + 2, + 1 + ], + "data": "HDtpqY3uCYv8VK5FAXvJVKJiyeFUY1KJsHnwwLbivMrxEE5JmPBPHoCLNUJzwdQDk68HHfENQDWCZpYQKCET4av7BTNKrJfSbSDzrQaGdkH691RmzreZcg2o3fkLADYjAax26U8AFpUM7SC8GJqujS8dZpdd4AyGgWpYGp2SsgRi1gwouMgTBUUvv78x5RgzHbfQpSZeptSvJHoJ2zzrLzJ6hn5f4EoPtoJT3YgYx1tCePiTKQQ19t1NmYp6XFD12DroPPAhns8UqsagbiR7n9Jo7LmXUHLuKBwd8EtjuyPQUu549b8zp4XwyLmQrFfwpxoWux9QZT4dY3BJWmDKn9GazKc5H488FLggxPfQvSXadHwrati9XJS91NF4jnkGQinE9z16CBPdxyM", + "stackHeight": 3 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy invoke [1]", + "Program log: Instruction: CreateCompressedPda", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [2]", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [3]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 32067 of 856915 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 155954 of 980764 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy consumed 175687 of 999850 compute units", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 175837 + }, + "blockTime": 1746055789 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_address_transactions/2V5rvhHpHYE1Sdn8LFRE8Poq1WSc6D9xFcfSLg2AKRgcFU4BXrSshJAETcZAqiFu2Yv4YN5NgxHZQzBvqD5jtWps b/tests/data/transactions/batched_address_transactions/2V5rvhHpHYE1Sdn8LFRE8Poq1WSc6D9xFcfSLg2AKRgcFU4BXrSshJAETcZAqiFu2Yv4YN5NgxHZQzBvqD5jtWps new file mode 100644 index 00000000..b03119aa --- /dev/null +++ b/tests/data/transactions/batched_address_transactions/2V5rvhHpHYE1Sdn8LFRE8Poq1WSc6D9xFcfSLg2AKRgcFU4BXrSshJAETcZAqiFu2Yv4YN5NgxHZQzBvqD5jtWps @@ -0,0 +1,126 @@ +{ + "slot": 77, + "transaction": [ + "AUo8Q6Zv12Nuw9b79UrVH9CHXKejfNGkieAfr4XtiJ0BNfdp9CtkltguV73w4xCmRy8Z6lhPn6aj2p/IQaae0QQBAAkMlJweADw/IvfAeASqIJXdkEr0tY4lxcSIn8RlFcI4owENAckoq0XTZVlaNOh3F/uwAIoZ0i8FLJ2h+YjEfFfeOs/WpQaYLjyBdiAbgERJR/oGU7DHmYztCzftA7PyiiUMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E1Z6byxrTwcML2wmbOqw6yP5L52ofqLdMs3HqZb9jnGL1/80cujK4wPMl27m4TnIKo8EH53W767jgEzuUspZD8vuzKHUQXK6FtbREdgftv+FFJ7+0I5EcpAQjv9FSeiZ1ylGmCaSDYS1T0OdPB323aPWdf7l8yVOxOdJQR9fUlw8CBAAFAkBCDwAJCwAFBgsIBwkKAwECzQHl6s6C/v8pEAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBIoYxB9stprwjiXAqxYEydcFYVSmxTQPm3KT0w4POC4kO9VxRhnd/LQH67fRCEjOfcsDqZW8giiC+2qJWyx1cIAzyjzA3BHaHrrl0jblV337KzkTCX5SrBHhKrcPkYjvepTgqVk0zzsSulazmxYFVJq1HtohHWvOTXHI9xtLZGD+B/xFrrls19jba4XcIMAjPkHXwDPqNRj/EEwBBseRMpwEBAAD/", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999663378, + 9496451960, + 290314182, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "postBalances": [ + 99999648077, + 9496457260, + 290319183, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 5, + "accounts": [ + 0, + 10, + 8, + 7, + 11, + 6, + 9, + 5, + 5, + 3, + 5, + 1, + 2 + ], + "data": "KWv8WR8JeWsurSTFu6BNPcCxqdsbVRiQaQnjDcNLsgcd7FCM1sRAsYbVvJh58Wh2Ps377rpejKRe3ye1bVR2vYWNv5RGYs5L8iff4BCCFDgvk3LgvUJpJ4hzxMz6AuyUvyeP1nNnG2ftqgbdQMKkVbFTQYhzymaTWsWGCW6r1kQyd6FkDg7UwogXRpMjW4iKwDKWLuDiNGtiErpYxLcnYREVuN9uXfLFHboMZN2QFDH5zHZVZg1EbXUCYCJsJeiAiHLn6CvZdZArbEEK5KnEwKXQLmh7PoiKdsPv3r2o35jR3mjkSsmrE51bgUGjd7S1gocM2LocgMaRDRiPJjnFcTx5mz9AUoitRGcjnfLsRsLdYS24PKdwHCMTkbPNhWzKfqE1Dv5Y2B3MTBNHmbrJLGyfLnX6ZJyWiUCoxpLYh8R638QCdzmMvoYtuqEiud9SPqnKXdVZD46CD8ogQfYSs6ZW2bpnAypYKikM9vChZAWFWbEbCG9HHeNUL4aVvH4j", + "stackHeight": 2 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4WyeHbGaYB4b", + "stackHeight": 3 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 2 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 3 + }, + { + "programIdIndex": 6, + "accounts": [ + 11, + 8, + 2, + 1 + ], + "data": "HDtpqY3uCYv8VK5FAXvJVKJiyeFUY1KJsHnwwLbivMrxEE5JmPBPHoCLNUJzwdQDk68HHfELrvu3hMtM4XnknkJthV9YJsCDvqtwfAJR1aSP6tpe7N4mWBad9A1gykdBojHwRRDHhCitpxm8pjk9nD8cNmYjcMvuEZixAdyEiQLnAsbMGNa3egxpV1tmUGVHPx9jcGTiAsSssLbwvA7tCyswMATaszLuVB8KbWS4beSE9UVp6DHwzRN1BBycfG4iZfsZr4cnhXNkQjTgrg4bTSXKcshQptdo9QRqAHZnT7pM4z4v8rZeMYTkD5MVfCzC7pczM1wb5dwN5PgfL324Kovn7SsS8CgBRXWtaycZUAknrttyDrVUbSyzTu9pRV3ZAsnCyfLAoUUwW55", + "stackHeight": 3 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy invoke [1]", + "Program log: Instruction: CreateCompressedPda", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [2]", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [3]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 32067 of 856915 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 155954 of 980764 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy consumed 175687 of 999850 compute units", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 175837 + }, + "blockTime": 1746055786 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_address_transactions/2VLkAZf3Py8mhRKG9CBXNfemspfvqdC6d65NpvJ5g6aPHvaDdodDvoqgCQZQ5G1j2uRWXfgUaqTroggY6DmwMCv1 b/tests/data/transactions/batched_address_transactions/2VLkAZf3Py8mhRKG9CBXNfemspfvqdC6d65NpvJ5g6aPHvaDdodDvoqgCQZQ5G1j2uRWXfgUaqTroggY6DmwMCv1 new file mode 100644 index 00000000..93f198f5 --- /dev/null +++ b/tests/data/transactions/batched_address_transactions/2VLkAZf3Py8mhRKG9CBXNfemspfvqdC6d65NpvJ5g6aPHvaDdodDvoqgCQZQ5G1j2uRWXfgUaqTroggY6DmwMCv1 @@ -0,0 +1,126 @@ +{ + "slot": 45, + "transaction": [ + "AUp06jXns40sT5kFtReaQkW/lPXOQntwOL20sm7sB9TfJaKVUYA0Ikrk5uYIPxWrZ5o5tTLceCUsrHPiqJayEQ4BAAkMlJweADw/IvfAeASqIJXdkEr0tY4lxcSIn8RlFcI4owENAckoq0XTZVlaNOh3F/uwAIoZ0i8FLJ2h+YjEfFfeOs/WpQaYLjyBdiAbgERJR/oGU7DHmYztCzftA7PyiiUMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E1Z6byxrTwcML2wmbOqw6yP5L52ofqLdMs3HqZb9jnGL1/80cujK4wPMl27m4TnIKo8EH53W767jgEzuUspZD8vuzKHUQXK6FtbREdgftv+FFJ7+0I5EcpAQjv9FSeiZ1JRCdU6DllsZBRHKEjOlsrdF4OA6zqQbl2o6N6QoXLjsCBAAFAkBCDwAJCwAFBgsIBwkKAwECzQHl6s6C/v8pEAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBBKnAgnN7G2eiTyhAncDiTrAMjYTpo4agKiimP3UXjbCknQESgIUzA77R+2d1+scnmFhJ61C35WnVXDyPXQw73Q/c/tn7wrVSV+UiKYl0lXRMw5wo7Aw9M4xsxZVFK+gpG/dyRBytCd9sUmXoE7h9p/iHr/J18g+b+xsU1yrd61d2I+rieFJAuT0SsWpm2BYQfNyMiccQj/8gleGN3++JhgEBAAD/", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999938796, + 9496356560, + 290224164, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "postBalances": [ + 99999923495, + 9496361860, + 290229165, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 5, + "accounts": [ + 0, + 10, + 8, + 7, + 11, + 6, + 9, + 5, + 5, + 3, + 5, + 1, + 2 + ], + "data": "KWv8WR8JeWsurSTFu5fBu2RSS5hGwqWJGiwZmMBkraXrn7xA3wxmLEzpxQ6Z3qpXoNXaCRkvd5EvuF386BWtYhSvr6X3HE9d2ooZqvAHgzA74a9mqRT6SSVKivrwA1hxPMMyTPKjrevKqVJy5PNLPQLXYq7Pmhfq4dZgyzH4yuNrGgLCAiBnBrG7LvRi2PsHi6aTA3jUG2GnkunFTNuhDXK8AxZuQYBXi2neiUDqWRF9e2NX54dFfFRnYi4oKrWj9YfPUqSt4rwxPmaHQJHDKvNxUzZyXk4GGYTgbejeJFqQBYUCuMSxoVtf9c9HEf7PPuyEkgp3JNFkK5b8cDntqe1L3Va5bCPsMuRBVzFJ23ABfoxR8D3scTXQBN5XUib2SKadrb2AbwiCu65DL4EcKWJMhRTh27i6u8i8BrHGomy5RGcxWWTj3Lx5zT3KqAB2FZjuxf5iqCK8ncsm73ULjvYGUMncWWYbPMrKg7juChHTNvJ9FbSM1MHF8r7P4nZM", + "stackHeight": 2 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4WyeHbGaYB4b", + "stackHeight": 3 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 2 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 3 + }, + { + "programIdIndex": 6, + "accounts": [ + 11, + 8, + 2, + 1 + ], + "data": "HDtpqY3uCYv8VK5FAXvJVKJiyeFUY1KJsHnwwLbivMrxEE5JmPBPHoCLNUJzwdQDk68HHfEMDMRjSCeK82Wr6B9FjvA9DYK88EUGqviruZ21oLy1PK2cTGZ3bsCtxKK7Rch4Mu4rt1s7eVGRSN3KMUeVQngwJHAAPpjWz9gQwRFVqXxrzxW1Vhe89uBeWfn6bJN3Q4vrxwaPGpWojNxAZauvFPkgWxzjeqSDvbojnqrvi153UvwFoX2aLAsnaJjxfwyJ1HEddk8tgg4R7hu3k7RKWfq4fdKAGQB1NkkzrF3SQrj5M4S1jrVoqdA8YiMtbcCVbeqekweqb8UnaRroKRjxABk4mDxzd1PpBuTVi9NAMj4RWC6CEAStWjHtPXyBwj2VvLCtqY8YQxf", + "stackHeight": 3 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy invoke [1]", + "Program log: Instruction: CreateCompressedPda", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [2]", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [3]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 32109 of 856915 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 155996 of 980764 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy consumed 175729 of 999850 compute units", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 175879 + }, + "blockTime": 1746055766 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_address_transactions/2ZSHQwJcMmJ7cKyDzwdeySnTRpvdBiGKPtcLnRmgXA72EJJ3Gtef9n2Gsa4VSFQmWAYipECUssDpsJgYQ7marv2T b/tests/data/transactions/batched_address_transactions/2ZSHQwJcMmJ7cKyDzwdeySnTRpvdBiGKPtcLnRmgXA72EJJ3Gtef9n2Gsa4VSFQmWAYipECUssDpsJgYQ7marv2T new file mode 100644 index 00000000..13dc8a0b --- /dev/null +++ b/tests/data/transactions/batched_address_transactions/2ZSHQwJcMmJ7cKyDzwdeySnTRpvdBiGKPtcLnRmgXA72EJJ3Gtef9n2Gsa4VSFQmWAYipECUssDpsJgYQ7marv2T @@ -0,0 +1,126 @@ +{ + "slot": 65, + "transaction": [ + "AU39DkMZa6bakj2XHUI/JUMaltCgTU80M/hqpMVswBz7ugkz0/8Ce76/dTm1Ej1y3WIn31TA9spJvNk4X4n6EQABAAkMlJweADw/IvfAeASqIJXdkEr0tY4lxcSIn8RlFcI4owENAckoq0XTZVlaNOh3F/uwAIoZ0i8FLJ2h+YjEfFfeOs/WpQaYLjyBdiAbgERJR/oGU7DHmYztCzftA7PyiiUMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E1Z6byxrTwcML2wmbOqw6yP5L52ofqLdMs3HqZb9jnGL1/80cujK4wPMl27m4TnIKo8EH53W767jgEzuUspZD8vuzKHUQXK6FtbREdgftv+FFJ7+0I5EcpAQjv9FSeiZ1Zld5ptKju2yrNf4Q3Xoy3bFcpPheZzyNguRYQyySVKYCBAAFAkBCDwAJCwAFBgsIBwkKAwECzQHl6s6C/v8pEAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBjGy3D9LvSvymwbiBpqlYkcEEOqR8ZMnS2y3nUhUVAiEf2ivL3MtdtiLVaF+ar/Pvs6WQt+z+yuaQtYVnxxT30jAqROxhw5KDjYl316kBkMGavZWSrDunUm5aSlHwRe4GLz95W+dDrnRVDeTf6JagQgQdYEq27jCCEuTqeoqUsHIOOCIUtfFX0cfTaiBYucckWwnV71teG7brm4KbELainwEBAAD/", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999755184, + 9496420160, + 290284176, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "postBalances": [ + 99999739883, + 9496425460, + 290289177, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 5, + "accounts": [ + 0, + 10, + 8, + 7, + 11, + 6, + 9, + 5, + 5, + 3, + 5, + 1, + 2 + ], + "data": "KWv8WR8JeWsurSTFu82QQLKdu7oMgKsAc3EiiBopETJyJ351heBXmQisEUKc53e13X7LjsMKD8kYB7NVKwWshjSUCSsWVgs4yAggMQUqv3YQo52qiL4Ytt5uMpYLjxaKNh1igg5h8aBQMbGiR7DDJdTCRDrwrycJYZwSBfYnUmY5NyWbkMjaarb2g798A5TWCCKiBVN1qVC2PJjqbCactQW7wUYCDN1w7Uck2obvvSKi31ZaVUcwdt1KnBfoBLKT8PivtcwU1FQ22hNLsHTuuWTB12NSiSoi6cJGTwoDt7aq18GEkb6fv1jcHFGkBbwKMwQE99r86VkkiJLp8FAty7ydzQn56xw4oxGWFJj2N5WQzfwWY1tK3Z1rKrt1HDj8cYhRAmfLB168WjEZUp7E9YwdX9uUDXPZD234YGLL6UJn33XvUrMqCZLemJmXBwGYPjFnHUV7mtryMZDw93FUC7akKEfb63iHLoG2jk1UFWz2yfqpws1e3qNJBk5B8Jaj", + "stackHeight": 2 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4WyeHbGaYB4b", + "stackHeight": 3 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 2 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 3 + }, + { + "programIdIndex": 6, + "accounts": [ + 11, + 8, + 2, + 1 + ], + "data": "HDtpqY3uCYv8VK5FAXvJVKJiyeFUY1KJsHnwwLbivMrxEE5JmPBPHoCLNUJzwdQDk68HHfEPCXxSL1S45nuh2EFtPvF47C4u49YakkXqjurU56uJgk8MPSHkTqZiqFfcnTHfNDEcXtwFA5jGDxWsVvZKrvQVdYM9JaJBgZam66NGJCREMEtnLXzepX7k4EtxDtzu96QvKvQX2ZXhbdGzUDxZbb8xAL2RJEeudHsoPdCHY8E7Bhvg58W4TQdi8pycug49eokThAs7XgqNLXGRi1n3kT1WtmzZcYMQ3A1FVG52VQutjjwTdYoLTBRam8ycufbsNNjqeRQX3dcQ23k5Agtb1P1XmNmHP78r7agwr34TrSpWZccMfbmZKCgGKKnmAXUf1z3b87uVW4X", + "stackHeight": 3 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy invoke [1]", + "Program log: Instruction: CreateCompressedPda", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [2]", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [3]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 32109 of 856915 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 155996 of 980764 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy consumed 175729 of 999850 compute units", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 175879 + }, + "blockTime": 1746055777 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_address_transactions/2bMJGMSBMCRUndTtXTn9WUfLppqeu7FY2ajyyZmnn7fi2UWRgzaACfGAzB7h9oUBeQZ4Rhfrf7mHPYL5Vy69LPdx b/tests/data/transactions/batched_address_transactions/2bMJGMSBMCRUndTtXTn9WUfLppqeu7FY2ajyyZmnn7fi2UWRgzaACfGAzB7h9oUBeQZ4Rhfrf7mHPYL5Vy69LPdx new file mode 100644 index 00000000..623ef910 --- /dev/null +++ b/tests/data/transactions/batched_address_transactions/2bMJGMSBMCRUndTtXTn9WUfLppqeu7FY2ajyyZmnn7fi2UWRgzaACfGAzB7h9oUBeQZ4Rhfrf7mHPYL5Vy69LPdx @@ -0,0 +1,84 @@ +{ + "slot": 134, + "transaction": [ + "AU+jnAuOptK78eQk/5lnNBjk5Y30CyJhjBInw1BgMffAtDbtXqGgT4wMDAtCowaoGVTuRucjQBdkHvuKEfliEQ8BAAYJzLjCFXXnWj51s6K1RyQiLzHD11pzA0VK0kuivz8zqswhWc53yo4Lew6JOci1vTttbJcOTjfIMGIiy5vpCKZaRM/WpQaYLjyBdiAbgERJR/oGU7DHmYztCzftA7PyiiUMAwZGb+UhFzL/7K26csOb57yM5bvF9xJrLEObOkAAAAAFDSsTeVE2hc8C8rX9UpG9lZsrBgqlJepbNIE7Hbm3bgksNuwi9ReDAP20Sqpq/8/wpG4cvGQcDj7QnaE7nvUIC7wPwLtHyi90xBEulKsTz6PGNOXcF+rLA80aI81+eHwQpl591jkE+Dg60Dze4Hi5FNhzGIA7FTWAcNeS4Fz957/QmmoHZdEI20ACv+9MyGVTFGij2iz8yvlzRZ4iyBL0zT9L6jnNdGj9AeqtnOE2mgA1sP5+mnTSSyfse5cN3UYCAwAFAkBCDwAEBwEABwgFBgKtAat/8kF9vXl1/6AAAAAtxvHGcWyosnrS9cXUIE9fK4dzoryIEx51q1bqHhtK1wKLLKrRD198FHdvs3469RP+tplla6Vt4NUHwVuNl/cqDHnAaW4k1ExsKmsOYsUgruGfqmLHQHjiJXwKl67LG1IEVfss1i1O4+CFLQplS0TXR6H5zPOxjlTDoSTtWMB+x5ZmC9Z2FLww6BZp1c41fEI6JFZBTEKe2VnKCqOE8has", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999990000, + 2735280, + 290454210, + 1, + 1141440, + 1141440, + 1141440, + 0, + 1614720 + ], + "postBalances": [ + 99999985000, + 2735280, + 290454210, + 1, + 1141440, + 1141440, + 1141440, + 0, + 1614720 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 5, + "accounts": [ + 7, + 8, + 6, + 2 + ], + "data": "SBkMhczQ9esLdkDPWuSsc9haPe9pp5z6qkeDhw25Rm875beLiSm2rzJo6svw43CMvgnb6v9QboUfqseAzMd6KYTDmV1uw198PTnEszHogL9ydgxoH3Sh72pqyM3VbsvmA7DfLqJUEwWphMmzicFcSNRXcRoMThm73kz6PSWGc1vsN9Adc1nExmP5aqA4w8yQYeB8x4ASySzcUWJgc45FFWQ5LUHqBJvH4zDaUw6gugX", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [], + "data": "3Q747BoHqHsBxkNHj5NHEZnP1TajcfmzuWaVnRBAGpdvhUvpLwjkwwa66ZVXJfJEZ68vtecCNqSCUbD7vZMXUXqADAsKEhQVi23cVE2tovQqqd7iWu3HT8YTQViVm5wsXsYmaEVo4UqvhP5QoCkZAJMoWPsAdBpZu", + "stackHeight": 3 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program Lighton6oQpVkeewmo2mcPTQQp7kYHr4fWpAgJyEmDX invoke [1]", + "Program log: Instruction: BatchUpdateAddressTree", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: BatchUpdateAddressTree", + "Program noopb9bkMVfRPU8AsbpTUg8AQkHtKwMYZiFUjNRtMmV invoke [3]", + "Program noopb9bkMVfRPU8AsbpTUg8AQkHtKwMYZiFUjNRtMmV consumed 38 of 881758 compute units", + "Program noopb9bkMVfRPU8AsbpTUg8AQkHtKwMYZiFUjNRtMmV success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 102385 of 983946 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program Lighton6oQpVkeewmo2mcPTQQp7kYHr4fWpAgJyEmDX consumed 120212 of 999850 compute units", + "Program Lighton6oQpVkeewmo2mcPTQQp7kYHr4fWpAgJyEmDX success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 120362 + }, + "blockTime": 1746055816 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_address_transactions/2de7214YovQxkVgLRT6LZKLwYvsymHzdaAvv5pcyqXcGwNxhLDNdHcYaTTPGkHbPAPLyQ2XiYfCWg1CDc6VCQyjX b/tests/data/transactions/batched_address_transactions/2de7214YovQxkVgLRT6LZKLwYvsymHzdaAvv5pcyqXcGwNxhLDNdHcYaTTPGkHbPAPLyQ2XiYfCWg1CDc6VCQyjX new file mode 100644 index 00000000..7dd81aa2 --- /dev/null +++ b/tests/data/transactions/batched_address_transactions/2de7214YovQxkVgLRT6LZKLwYvsymHzdaAvv5pcyqXcGwNxhLDNdHcYaTTPGkHbPAPLyQ2XiYfCWg1CDc6VCQyjX @@ -0,0 +1,126 @@ +{ + "slot": 69, + "transaction": [ + "AVGdG5FMsrgFLcMIrdpN+R780uPjMe77y9pa/1xtk7Pfx4v9trPcJupn/5fdUace2nexPoBzGNDVdki2Ve/dUQoBAAkMlJweADw/IvfAeASqIJXdkEr0tY4lxcSIn8RlFcI4owENAckoq0XTZVlaNOh3F/uwAIoZ0i8FLJ2h+YjEfFfeOs/WpQaYLjyBdiAbgERJR/oGU7DHmYztCzftA7PyiiUMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E1Z6byxrTwcML2wmbOqw6yP5L52ofqLdMs3HqZb9jnGL1/80cujK4wPMl27m4TnIKo8EH53W767jgEzuUspZD8vuzKHUQXK6FtbREdgftv+FFJ7+0I5EcpAQjv9FSeiZ1ygL92N+5BhtQo3wQcDRS0azcJWbN8hSUyx+SbYJTx98CBAAFAkBCDwAJCwAFBgsIBwkKAwECzQHl6s6C/v8pEAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBnAZGV4Rid8Z2wOM6wsmYz+dBrTFBev3c9KGKWHwTmD+GQHlenz2/OKhTY5tz/T2pzbO4DxgXk5mgM9ljcLkK+AKND+44KVie2bcVT5va6cbdBK8sTQdR0VQqz5RfFYhSkTiFoWGdowDWYmHxeLYP5S+Nb1RV4Hb+E8gENzFomCEZRMOVYHHuboDIVvIHRKjl1sonAGuJKwT2/It5OW4nlwEBAAD/", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999724582, + 9496430760, + 290294178, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "postBalances": [ + 99999709281, + 9496436060, + 290299179, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 5, + "accounts": [ + 0, + 10, + 8, + 7, + 11, + 6, + 9, + 5, + 5, + 3, + 5, + 1, + 2 + ], + "data": "KWv8WR8JeWsurSTFu8JAtFdMD8am6tztLdDTkXSsoVH8Z7MLnFJ2fQ5Gi6d4qAQXmeNfH1XWY9odjt5LFUSRo9dCwWu7WoANSSuPtou2QqTh8UKEutc3cekU9tnLqd7iMvZBfYzvgnYmeRKsjz94wcYrFUVJAn3haSHkMwZ5p6iMCiYfuVDt8ScBTJKi1XekTfVDuyf9trPMGjwLaSxk7HwnhkyQcG1xqyS7cmg2Nf7PYbz7YKWtx7B9aQuquToh1Neqom68znySWZN7txtgrxqXkEYM8248jMq8HMidZ7ZJzfVA4gyUgX6DM2JSiNKEUd9HMTtVWTb3Zajyxguhf1vwKKs9HhZu1br4ERHcEoy5rkWXR985Atvjr3WoKucYDk3W1BAN28EgXZgcmN5YTX5gwGzVGjqovYbPDszgCJ5sFdDyNVJ7e2vfzVvCieWw1q6DMMnT3qLRuRsm2ntQorp6CKyBVVKVvZ9qECfZvVc2XSF4pM1wyP3yurbZo9my", + "stackHeight": 2 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4WyeHbGaYB4b", + "stackHeight": 3 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 2 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 3 + }, + { + "programIdIndex": 6, + "accounts": [ + 11, + 8, + 2, + 1 + ], + "data": "HDtpqY3uCYv8VK5FAXvJVKJiyeFUY1KJsHnwwLbivMrxEE5JmPBPHoCLNUJzwdQDk68HHfEPzhcpwPcEcXE1mQzd8NrPV73DhyQdAMP1eQhfXon3oCDZD6cMdU7qrPF3ffD7xqBXth95JhwMiDMm2r2iFGYj7gZcAcPgg3e3uJB3uXhSYgH5Hucv7kUFtgptwfu3a7LUyLkjjYMYt1bBEUpFtyXgjD2Pp7KxLJRroimwRQZvKGV2KJCop8damhBL1T4oYLzVLovswaGNh2n2dKhL9Wwuwg7PQB86JeTyLEGGbKRdMWgV9VmGq9JA99NjRn7siVbMkmyxEdx5TfXAW4TmfZtyeTvZtHbHTPpoN4CGM1wKoVCjkEohJ1NmmQc5WKeN9Q3irseyF9h", + "stackHeight": 3 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy invoke [1]", + "Program log: Instruction: CreateCompressedPda", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [2]", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [3]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 32088 of 856915 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 155975 of 980764 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy consumed 175708 of 999850 compute units", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 175858 + }, + "blockTime": 1746055780 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_address_transactions/2yhWgU4uttKkTJubKWyzxEoRWUybSS9tQrFHk8nsi51c9dizMLcGWkxYWMKNANWejtSxf88Sm6byQbAqLnyLpDES b/tests/data/transactions/batched_address_transactions/2yhWgU4uttKkTJubKWyzxEoRWUybSS9tQrFHk8nsi51c9dizMLcGWkxYWMKNANWejtSxf88Sm6byQbAqLnyLpDES new file mode 100644 index 00000000..1e10ceac --- /dev/null +++ b/tests/data/transactions/batched_address_transactions/2yhWgU4uttKkTJubKWyzxEoRWUybSS9tQrFHk8nsi51c9dizMLcGWkxYWMKNANWejtSxf88Sm6byQbAqLnyLpDES @@ -0,0 +1,126 @@ +{ + "slot": 75, + "transaction": [ + "AWLpX4RFQp1oXZvQxdCCWV+iO5c6e/OFZy6ryi26zJCinknO4X9wdXPlfrJpBBT4Q8kIf6OvmjPi4v+wwkZcXAMBAAkMlJweADw/IvfAeASqIJXdkEr0tY4lxcSIn8RlFcI4owENAckoq0XTZVlaNOh3F/uwAIoZ0i8FLJ2h+YjEfFfeOs/WpQaYLjyBdiAbgERJR/oGU7DHmYztCzftA7PyiiUMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E1Z6byxrTwcML2wmbOqw6yP5L52ofqLdMs3HqZb9jnGL1/80cujK4wPMl27m4TnIKo8EH53W767jgEzuUspZD8vuzKHUQXK6FtbREdgftv+FFJ7+0I5EcpAQjv9FSeiZ1H691J/AA6caBSL/uorCjfn3j+9NjfG2i0BdvRcKKHIECBAAFAkBCDwAJCwAFBgsIBwkKAwECzQHl6s6C/v8pEAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBJLGaKAxRfWbKSSRsu1km50bbNAyeb6wNn0gl3Dn1HeqHQR35xQNtbBQ/7UJKE5HGweYL8l0mFXEOxKL3QC1LWBXiq/EiA1t1GO0JPuCbDnXJhr0wREO9Ryllp15OFVNCB472DBp6dbqTqLnQ0dknNE/TxFeBJjED6YWYNjpelwmQMZeCbS503+Agjo+XxpMnAVBm+5b40eW+HgOp6q3DtgEBAAD/", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999678679, + 9496446660, + 290309181, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "postBalances": [ + 99999663378, + 9496451960, + 290314182, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 5, + "accounts": [ + 0, + 10, + 8, + 7, + 11, + 6, + 9, + 5, + 5, + 3, + 5, + 1, + 2 + ], + "data": "KWv8WR8JeWsurSTFu6DZaDdv5n1ZKpHTjkEf8aavssZZAbFApuVKxjyHxL9eHYN6SbajNZahu1YbWPqVRRWqTDc2Vy5Wy4vcwJQcg7i1yf9Khfqq5usKfeAMpKMjRNHCEy2ydRyutb4Ks8mmBuH43Crq5tcoXXu5xLZUehMcndA3Ad6ZRKsuy4R7B7FDpYnhxcJ8C7nhhaVgE6nW28Tv1s6LT4gAKmBD2UgTHSQDRVooWFxuqxtHnWbeVMoihYreFb6AiPM7aR2HoRdKeTVJukZm78iPufWWYe4URBG3swgJ7bC37ye4JqD7k7AaJ3jXEvEGifp4nExx6HLA1UyYALBm3QK6bcqTTg5PWiGTG1vksxPHWDFw37Jt7fLNSv5xukWNFdRjkM3X6dG8vjqKHmMvRyoKhHkGnNKsgS51HZSiZ9br2TGEWagkGqM32WWqp9k73W4iuyAUC1j7afp6bVJawxbxEqiY6wFm3enN1p3y6aC5QQbX4FK7cmAigkd5", + "stackHeight": 2 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4WyeHbGaYB4b", + "stackHeight": 3 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 2 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 3 + }, + { + "programIdIndex": 6, + "accounts": [ + 11, + 8, + 2, + 1 + ], + "data": "HDtpqY3uCYv8VK5FAXvJVKJiyeFUY1KJsHnwwLbivMrxEE5JmPBPHoCLNUJzwdQDk68HHfEQoHMvnXJXA1kjcQG1aUxY8vxo9qPP2K3VcP36H3VX23n4Fjc4QGqXm2ARgxhzAkm6wE8y9Wfy3nYYsGVLWVA4EEEPcTbtof7KjSXYAtcX9pzWUh6tnuXjSYC5pUmNBDTQPY7jbiKC8SiehgtZZfT583Heo26qtLokF6peGzHxSizuh72vDiUMUdeuaRY2P2nrxVHmhpN8LBgALVJMnSmEmUJNmLpxLRRBTUm9Y8zv3667UGon3iKDpsc8uBmqYQci7L5zqhrgps9MizXGmyD5je2ytRpcQrCLwe5Dh5Cvyh4UhqxR48vKZX8P7XiVWcyGvn4B4um", + "stackHeight": 3 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy invoke [1]", + "Program log: Instruction: CreateCompressedPda", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [2]", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [3]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 32067 of 856915 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 155954 of 980764 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy consumed 175687 of 999850 compute units", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 175837 + }, + "blockTime": 1746055785 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_address_transactions/34BwwXKuxGrEvq83QuCxyeVjkXVNWMKv43m4fkEp1WdhgQJP1LDUBbMmSaCWGN884K6PERCKXcLAmWfg4sm5dVHT b/tests/data/transactions/batched_address_transactions/34BwwXKuxGrEvq83QuCxyeVjkXVNWMKv43m4fkEp1WdhgQJP1LDUBbMmSaCWGN884K6PERCKXcLAmWfg4sm5dVHT new file mode 100644 index 00000000..0c763b73 --- /dev/null +++ b/tests/data/transactions/batched_address_transactions/34BwwXKuxGrEvq83QuCxyeVjkXVNWMKv43m4fkEp1WdhgQJP1LDUBbMmSaCWGN884K6PERCKXcLAmWfg4sm5dVHT @@ -0,0 +1,126 @@ +{ + "slot": 100, + "transaction": [ + "AWbIqmL42rcZ4nrZgd9Qqrc1/H3Iw7LOIK+nnvOeWCVAdEwPtMCxONbMxmPtEub/fBzta3bUEmcPlw1O4HIjTAoBAAkMlJweADw/IvfAeASqIJXdkEr0tY4lxcSIn8RlFcI4owENAckoq0XTZVlaNOh3F/uwAIoZ0i8FLJ2h+YjEfFfeOs/WpQaYLjyBdiAbgERJR/oGU7DHmYztCzftA7PyiiUMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E1Z6byxrTwcML2wmbOqw6yP5L52ofqLdMs3HqZb9jnGL1/80cujK4wPMl27m4TnIKo8EH53W767jgEzuUspZD8vuzKHUQXK6FtbREdgftv+FFJ7+0I5EcpAQjv9FSeiZ1A+O+HNWu7JjwsHOwdAVaxFe+yOzHgsu3mgbNkftSnaICBAAFAkBCDwAJCwAFBgsIBwkKAwECzQHl6s6C/v8pEAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBkWlM1s+LaGBsRJ16QV+ambLID5N+nowOhbdooiefJMsYotLjC6KrMfmkGN1CjRjvgVgEiVg+CuYnl2eqGyaITROWYgn+z18TJXlrMHGtyN0XPPjmwqs7z8A7gILosDOTq7N1wErsMG1FYo+qok/YuR47sWXoKroGs2fqqBbDvWvetsI2VPVvW5GjjDEFTFWHl2jVAa3mExGo7W6etDP6mwEBAAD/", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999449164, + 9496526160, + 290384196, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "postBalances": [ + 99999433863, + 9496531460, + 290389197, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 5, + "accounts": [ + 0, + 10, + 8, + 7, + 11, + 6, + 9, + 5, + 5, + 3, + 5, + 1, + 2 + ], + "data": "KWv8WR8JeWsurSTFu87Sj8BYzukZBYn6MTvp4WKRzRS9KWujtrUtdFEJ8mTo5YuyLoLBjuobGaCpT8DqLmyEwhoPCF92CppVXj1kygP8TDmkniwDpkCYXSZXtM6yL6WHgD9Rp6wLtKckBhtfgy3cW5du2EtNPiFXJL7qMK1EjMCVtMdhFy9FwarL4sbYsprWTKwCh4THAY1Sm2wgZMnbRJzT4W6uXXR8Yu6AFkmzMQb1R937U6FoA5NoeHXH71JipTcTGLJRT81bNS7UmJiBmMAa5pjd6Nuxr6HgFo5M8hiN6uRSEes2Gs4UMVEhxU1Hi3bHNvZptLkLwGyDEfHywacvxE46Bb1qtf2mtDVXYtz7hTHwLMrZrNS6BrKUsTCPAwwkhw7jADBHowCt2Y7iSor7ihjoeiijuA1yhiYUyDXphDQL21P7qbZoyQALifzp6PxgHc9F52UNzjyKMGvZYfq4hTUVaZ12Gcjz4Zhiy54fWgWAuVYqyhgXX5CrB1Ls", + "stackHeight": 2 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4WyeHbGaYB4b", + "stackHeight": 3 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 2 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 3 + }, + { + "programIdIndex": 6, + "accounts": [ + 11, + 8, + 2, + 1 + ], + "data": "HDtpqY3uCYv8VK5FAXvJVKJiyeFUY1KJsHnwwLbivMrxEE5JmPBPHoCLNUJzwdQDk68HHfEQ3YhF7yWuTDvw9d59vJXD6m8takRvzPdHHDSsrnXorNZSHVAa1rRMPbpi4UcD68JP1hdJddQhyuWDkpwMsS8P3s5LdxtXVKrGYUUn8V9hr24chTuLjTzGTq9fmmj1MYVb7CwN12g7pvHPf57nQngZA5q2Yn8YpNtWzszW5BdHUkeLJTPaR33oD8zdQN7uCJESwkh5HHBR96MfSocsoYxBQAaMmrbgCgdqyyE2HKk166aip5qKHiH9MJfpH51CJZ771GK9BmfjEUaBRvTG8BjGbg1E1fGyYc9tmjJhseBWFX5sxxUK2vvZXSHmphsYTdsFqKd19BV", + "stackHeight": 3 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy invoke [1]", + "Program log: Instruction: CreateCompressedPda", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [2]", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [3]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 32088 of 856915 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 155975 of 980764 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy consumed 175708 of 999850 compute units", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 175858 + }, + "blockTime": 1746055798 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_address_transactions/393ck7o6AJhrbZknSoAw8EmnCNHZBmqkjijpmhbYtt2CaNSm2TADuXoCYZaUgRna1e75QxfAhghUR1bUZX4nqiVz b/tests/data/transactions/batched_address_transactions/393ck7o6AJhrbZknSoAw8EmnCNHZBmqkjijpmhbYtt2CaNSm2TADuXoCYZaUgRna1e75QxfAhghUR1bUZX4nqiVz new file mode 100644 index 00000000..abf0deaf --- /dev/null +++ b/tests/data/transactions/batched_address_transactions/393ck7o6AJhrbZknSoAw8EmnCNHZBmqkjijpmhbYtt2CaNSm2TADuXoCYZaUgRna1e75QxfAhghUR1bUZX4nqiVz @@ -0,0 +1,126 @@ +{ + "slot": 56, + "transaction": [ + "AWr4x2VxM6q4YM5/w6R5bUD9bXG53f/Q5gaUrx6m9P1rDmx2iuEdE5x0PhUlTPcGKD+V52/eX57CQ4CmU8GuQAUBAAkMlJweADw/IvfAeASqIJXdkEr0tY4lxcSIn8RlFcI4owENAckoq0XTZVlaNOh3F/uwAIoZ0i8FLJ2h+YjEfFfeOs/WpQaYLjyBdiAbgERJR/oGU7DHmYztCzftA7PyiiUMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E1Z6byxrTwcML2wmbOqw6yP5L52ofqLdMs3HqZb9jnGL1/80cujK4wPMl27m4TnIKo8EH53W767jgEzuUspZD8vuzKHUQXK6FtbREdgftv+FFJ7+0I5EcpAQjv9FSeiZ1IqNvcsXyorodufy3498tXKO9nu3D06TSUTGmKvBRlLMCBAAFAkBCDwAJCwAFBgsIBwkKAwECzQHl6s6C/v8pEAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBE/dUrvKCp+M9iPPRnfAfkkmkBfFYDhLu7VANRncMpLQwV25uzhAm7z7mqLP0UCMFBA4/5xlh6prijxI1PQ0OgRb4Jdd9OqQCXQkBcfz/FBIJRQi1rf5KaWp3MrLUShS7lcX8urN/00U2m76JZDie1u6m7gBg7LPvLHacsJBd7VInfCexWHdR8q8gAb43Eu8N23t5vFhaQPyvWL91ABfhNQEBAAD/", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999831689, + 9496393660, + 290259171, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "postBalances": [ + 99999816388, + 9496398960, + 290264172, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 5, + "accounts": [ + 0, + 10, + 8, + 7, + 11, + 6, + 9, + 5, + 5, + 3, + 5, + 1, + 2 + ], + "data": "KWv8WR8JeWsurSTFu5veypCeHBM8NPHD7avNG5PwtVujpaGUfHdEKJ1ABAbJBT2kkjt7aT5KoseBDUeuzwqk6GdqA9ooQMYhC1YgjB8Gpa1dbNHSmYvJVM4nySYfr7b8NNKJxU7vUTirVD4sRM11QMnZDLqvmCfCufZERhhjPZe85dsV8qi4f223CfFuti59vqFY2PUEEggiWPMEFPe6dwEEqqu9rfBqrj6eQ5zzDwyomnnZqjRniV7L15yWgUhBRaHZeLVEhrZdWSTR2uPfvUa9wZEJBLseP4GBq8DCwTd74oMQc63wcpK6GqAEtKC57TmEdqexxvoVGrBk4LxQLurgYL2Jby3oxn1Wmnis6YB5aKAFRzArtBTsbAnmDRREGQwZ7uwGHKa5K79PHAuoFyZtaUfAYBntXmvS7gqfb5jA9mJ1buDkKA9Y4CDRNEce735AR4Yuc6ocv7gWwoLXV5ZQD4kwukdQJmCjtH2iFPB3eNwxrsEJuHiZpuvyM4s1", + "stackHeight": 2 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4WyeHbGaYB4b", + "stackHeight": 3 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 2 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 3 + }, + { + "programIdIndex": 6, + "accounts": [ + 11, + 8, + 2, + 1 + ], + "data": "HDtpqY3uCYv8VK5FAXvJVKJiyeFUY1KJsHnwwLbivMrxEE5JmPBPHoCLNUJzwdQDk68HHfEQYunKRr3fhMhPjq6Dw1UPdubbthzzTNqABnFUo21jNeFyPMfr8TEJaYZEJmxXMgHopCoxVkGTY8rC4RgnzRhwh2YHKPcZKF3Nsh1owfwPNySniMrrLPtLos8VEbWqyvM7ZZHQofEBsfM41c4QAfDkQhTfnKBrdqH9iXkQB2tHcsXZJMLicoiFC2RbjAd9kZqYzSa6np4dKAEBnTpNK7Phfjr8KJ31jisdiufNQKfdsxkRpSwcf2jLCcgkfjCmthwu1L39k8f8g67VTFSde22sf9mJRMe1vybaLViJVKjsSAFmX1wmGEYXq9oF3AbevAyGUPupGUo", + "stackHeight": 3 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy invoke [1]", + "Program log: Instruction: CreateCompressedPda", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [2]", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [3]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 32067 of 856915 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 155954 of 980764 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy consumed 175687 of 999850 compute units", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 175837 + }, + "blockTime": 1746055772 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_address_transactions/3BLYcDdcHVTS1vLFRum61foE1yNmzX8pJQNjnEvV5m4j1v1hkesZgYS5RFfKF8pxUptEStYkVwjq52AdtmY67sSp b/tests/data/transactions/batched_address_transactions/3BLYcDdcHVTS1vLFRum61foE1yNmzX8pJQNjnEvV5m4j1v1hkesZgYS5RFfKF8pxUptEStYkVwjq52AdtmY67sSp new file mode 100644 index 00000000..22c9d737 --- /dev/null +++ b/tests/data/transactions/batched_address_transactions/3BLYcDdcHVTS1vLFRum61foE1yNmzX8pJQNjnEvV5m4j1v1hkesZgYS5RFfKF8pxUptEStYkVwjq52AdtmY67sSp @@ -0,0 +1,126 @@ +{ + "slot": 109, + "transaction": [ + "AWzyvmOBaLUER9slmvfV/yRdQwY6dmFd6RoRFdTllg4Y8bNI4vKQsjEEOI7KDaDbomG/6NiLn52OzzXXuXY+0AEBAAkMlJweADw/IvfAeASqIJXdkEr0tY4lxcSIn8RlFcI4owENAckoq0XTZVlaNOh3F/uwAIoZ0i8FLJ2h+YjEfFfeOs/WpQaYLjyBdiAbgERJR/oGU7DHmYztCzftA7PyiiUMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E1Z6byxrTwcML2wmbOqw6yP5L52ofqLdMs3HqZb9jnGL1/80cujK4wPMl27m4TnIKo8EH53W767jgEzuUspZD8vuzKHUQXK6FtbREdgftv+FFJ7+0I5EcpAQjv9FSeiZ1mgzP6b6Jpjp+hEZFxSO/+BnpncI/WablH8fBbJxSbpkCBAAFAkBCDwAJCwAFBgsIBwkKAwECzQHl6s6C/v8pEAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBnSOJIHhxUAd2UzK6uWzUPPVOoZuk/pUN+t9qnvVDABaAKvhpFniIMtM7CRvAy2h3w3xEdjHYgK5QNHdGjuQ4kAJj82Aya+/gxThVS7SJT0fJGKO8JLDGxuaFc49mC3tMgA1YGjxwSu2uW+Q9R1341CbtLgXu2M+rIHETTPptslpZSmi0NHErq54d+QP4jtzdTVn+3K5BI3bGrRpxoYhNSAEBAAD/", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999372659, + 9496552660, + 290409201, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "postBalances": [ + 99999357358, + 9496557960, + 290414202, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 5, + "accounts": [ + 0, + 10, + 8, + 7, + 11, + 6, + 9, + 5, + 5, + 3, + 5, + 1, + 2 + ], + "data": "KWv8WR8JeWsurSTFu8KJCuXkZkoHDvkcu3xGCiddCKheT1kF8ig9Vx74PBdGPiYbFT9zKmVWZEh4RLvdaG6Gtmm3qNqnrLq7FSe7LN5LGoS9G7C9zztG8z9cgbXgK26ypra1tpu352wqMnEdZ1BSjgAfijaZaFH2v5X7bY2V4EBeq9SveDZcJ336xtMBZDZcbCVFm61s78RcHATy9ueAQCcqcjytszeiXTeA9G22SyB53tRq1vYVTd6PyGskcMg6LLZpveaKrrqr1mJt9WH51YHbCCx6feqwS9M86baUSCGqd77NKhcQ8KE3jTA2cb8Zwt8kiVcLMLm9XVtPuykbA4Mh2VyKqbKwHVSqPnMUcwBokSD3dMx8dBsyQk2XTqTX4PXTjVvFAzB9UvvrXucUquyGXC9AA8HbHngm3avjkvNQjRT1GPMymKoUZi3Kh9kZELUprdTCnBMvW74xKBcXgNZcz1stdofwCnrrLLBHAnUKi6YDnzJX5niGvW66DWym", + "stackHeight": 2 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4WyeHbGaYB4b", + "stackHeight": 3 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 2 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 3 + }, + { + "programIdIndex": 6, + "accounts": [ + 11, + 8, + 2, + 1 + ], + "data": "HDtpqY3uCYv8VK5FAXvJVKJiyeFUY1KJsHnwwLbivMrxEE5JmPBPHoCLNUJzwdQDk68HHfEM1vCPWSkThyqSEs1E9Tg1zZEo2fiiMAvh8KA8MNxPoXFLq6JePVBcvLumCq1qWJLDauxZRchrqzFBzNNVqiKXFSULeAa2qzaNK6r2JgVKLQAYk7ds6Ser1rJGQcePgqWUBxhqJk9wyLTbbxTxtbEmDQnsuWZ8avm6saPJj1N5gMbwHrk58pfsjRwmqtUM1jDbeYdRt2tewAABirmz2jeUNNCCYjXa3LfhyAdHyeWFMamovUd7bZvrtY55fDyW9X8iXhidTQVDXhcDcfh5fjruv7VwhSuDw5R5ZREhYj4htXVhMJ1xciEvMCAcUE3D5docwYMzJEb", + "stackHeight": 3 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy invoke [1]", + "Program log: Instruction: CreateCompressedPda", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [2]", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [3]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 32067 of 856915 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 155954 of 980764 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy consumed 175687 of 999850 compute units", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 175837 + }, + "blockTime": 1746055802 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_address_transactions/3JAwERZpZkx26yykujeKNtxtNhGBLoWoUFjyUgMVp8657DT8VgcVu12rMMAbA4XRAELq5TkLsqL9GHDY253Tq6oG b/tests/data/transactions/batched_address_transactions/3JAwERZpZkx26yykujeKNtxtNhGBLoWoUFjyUgMVp8657DT8VgcVu12rMMAbA4XRAELq5TkLsqL9GHDY253Tq6oG new file mode 100644 index 00000000..9796a554 --- /dev/null +++ b/tests/data/transactions/batched_address_transactions/3JAwERZpZkx26yykujeKNtxtNhGBLoWoUFjyUgMVp8657DT8VgcVu12rMMAbA4XRAELq5TkLsqL9GHDY253Tq6oG @@ -0,0 +1,126 @@ +{ + "slot": 102, + "transaction": [ + "AXLXhLHDQNfe0CWv0DLXuJ2MqWgR1pnSjQQNJKYVaw9HR/uoCcQ3cq1YqWrAw/meoPi/rrDl3VxlA6GCTH4SpQ8BAAkMlJweADw/IvfAeASqIJXdkEr0tY4lxcSIn8RlFcI4owENAckoq0XTZVlaNOh3F/uwAIoZ0i8FLJ2h+YjEfFfeOs/WpQaYLjyBdiAbgERJR/oGU7DHmYztCzftA7PyiiUMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E1Z6byxrTwcML2wmbOqw6yP5L52ofqLdMs3HqZb9jnGL1/80cujK4wPMl27m4TnIKo8EH53W767jgEzuUspZD8vuzKHUQXK6FtbREdgftv+FFJ7+0I5EcpAQjv9FSeiZ16ayQT/5HAoLfPADQMw7EY63vMS2n/vWQ9N+tFkbq5eUCBAAFAkBCDwAJCwAFBgsIBwkKAwECzQHl6s6C/v8pEAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBnd3kJpwt2aXWmr0/Ih5a9A3yNyUFO3cRrA0Ey8n42R4Hab/EQoK77gcfqeoVSKo2wNJOSf6hLu31sN1/P236XxZoeXyXBesDYRxe26Z+iux0LKd2/wtrUEzOc8Nb87SnLksWXijEBnyJzSt/VDB9Gq7Zo/RyRgVXKDlNdJu7LX8GGWLBgvnILIsTQbKm9zzVjt/YSqANVCTnEUHfmcVecgEBAAD/", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999433863, + 9496531460, + 290389197, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "postBalances": [ + 99999418562, + 9496536760, + 290394198, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 5, + "accounts": [ + 0, + 10, + 8, + 7, + 11, + 6, + 9, + 5, + 5, + 3, + 5, + 1, + 2 + ], + "data": "KWv8WR8JeWsurSTFu8L2sxnCoMdbA814xHtjtcJbxXx37xAQmp2csBWofTs1A2C7wZcrK1SXBrKG8cLu6ffeC1rtrj4BUK335wLgjrB5zZ3xbGft4dHV8wBtxZ86DMdC9LFJmYbabTxVPeXvZEMyzcVzbtTLc9vMpgpPaHFGn2owB8EENCwnpfEQ3MqDzZ184kaW4EXrQLRHsyvvWfKdm3AYTNicG6LC5NaCanUvKWbk8JGpF81Y3GpSHogWE87AnoizStaaedtjDh4verZWYeudJLoZvN6rqHHcUYKEtTvEKazuA9zf6kzYbvghnJg5Zc1BRAgxKC2XsnneoSAigFoxbZPBcZ589jMRaStWMEke4Z9vyGSQzKJ3ryBqoccMcyknxzi4xDJqR4iW5ka1aKNFzdVxh1vqxhxL84oWsUDG2MgfxdswkzPDSxe571JxmgqWmt6WwisSE1Mex15dJaBbiH4w8fDARpcLLrw8MnSPt7dwJYJKwb4gFmARszcX", + "stackHeight": 2 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4WyeHbGaYB4b", + "stackHeight": 3 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 2 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 3 + }, + { + "programIdIndex": 6, + "accounts": [ + 11, + 8, + 2, + 1 + ], + "data": "HDtpqY3uCYv8VK5FAXvJVKJiyeFUY1KJsHnwwLbivMrxEE5JmPBPHoCLNUJzwdQDk68HHfEPop1DSc2UkJzhH9XJJanGGww2Y7Moty9Rxc6LwXxZGQLLDEToAw9DRiW34ZAgkza9kY42p4nYqwGbCtu1xw8YTRNMXLfonimW9inwsob4SB5P86KmTC1UrVUAzZofzGSnPiRUApd879VmVhH1Nqho4wiK9fpoTqLH5SZctG8uSjDWEaah3Ui8zBykJzV3BbVPw6MW4nPrmoR665WHvZRS4LQEiEkwAYsrhwNDVW5qTNiQiaBN2isVYtBScUh5Sw5x3JtBBgE66M4WExyYV6muE5mZeTzhGfzukHwJjjLLzFYefgK9JHZ2LowuNsPw39PbX4rYsMh", + "stackHeight": 3 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy invoke [1]", + "Program log: Instruction: CreateCompressedPda", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [2]", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [3]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 32067 of 856915 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 155954 of 980764 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy consumed 175687 of 999850 compute units", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 175837 + }, + "blockTime": 1746055799 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_address_transactions/3X5fVCUxsDW6CaM6j9fAQezeXyJv9f4TgpfSWQEEtVfEniSqXzCtYyiDN8fRnKBQgQAfXgoapGR6Vm89kTcoD7aU b/tests/data/transactions/batched_address_transactions/3X5fVCUxsDW6CaM6j9fAQezeXyJv9f4TgpfSWQEEtVfEniSqXzCtYyiDN8fRnKBQgQAfXgoapGR6Vm89kTcoD7aU new file mode 100644 index 00000000..5f51118e --- /dev/null +++ b/tests/data/transactions/batched_address_transactions/3X5fVCUxsDW6CaM6j9fAQezeXyJv9f4TgpfSWQEEtVfEniSqXzCtYyiDN8fRnKBQgQAfXgoapGR6Vm89kTcoD7aU @@ -0,0 +1,126 @@ +{ + "slot": 53, + "transaction": [ + "AX35ZPyMqxKY5DCXpw5EJ59968S2P32WNb6+xSMREn+u3Bg5McMfcXSN5PvlOEvFNJl/RN4HDjB9IIS4gIK/gg0BAAkMlJweADw/IvfAeASqIJXdkEr0tY4lxcSIn8RlFcI4owENAckoq0XTZVlaNOh3F/uwAIoZ0i8FLJ2h+YjEfFfeOs/WpQaYLjyBdiAbgERJR/oGU7DHmYztCzftA7PyiiUMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E1Z6byxrTwcML2wmbOqw6yP5L52ofqLdMs3HqZb9jnGL1/80cujK4wPMl27m4TnIKo8EH53W767jgEzuUspZD8vuzKHUQXK6FtbREdgftv+FFJ7+0I5EcpAQjv9FSeiZ1OyWdgBuizY0r7ZL9chQgK0uHpJ7Z1dZ6S9gRcNFqSJoCBAAFAkBCDwAJCwAFBgsIBwkKAwECzQHl6s6C/v8pEAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBBlv/rIXDM07oAXLVcG3SlqljZ4tusUS3WFs6glkBN0IKNuOXK3kOUzhSZDkNeiTTg7W9VYQ0E431rHTxBfrqqBgZT8BVUJcNZ0K/bbd6gT983/fDBWYQnlYxfZakGazIBlDsvvWrJN74awfOEKvD2bJP5XTz+tDi/6aXMYERzxaDCYeZCYW9cUi0E4D9kqfDPtGGyaKLkC9wvESU3wHwjQEBAAD/", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999862291, + 9496383060, + 290249169, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "postBalances": [ + 99999846990, + 9496388360, + 290254170, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 5, + "accounts": [ + 0, + 10, + 8, + 7, + 11, + 6, + 9, + 5, + 5, + 3, + 5, + 1, + 2 + ], + "data": "KWv8WR8JeWsurSTFu5guLQycZCcvxcy5WEFoJ8JtpNyg1J4RypdABqGHQ8N2jngyVHJnLJ6LePtXnmvzzG2dvWW1LphRtkco8fmfzmLtzjG5yDC4x2xzBbs4igVnUPzqybRoxNfTEULE3Bs2M41A7vawApDmz3EETVpDBRpSFwAFAv3GPEGUtvTWqxeKgJKmEfNfNLLShXLgUYaaoHaaTrcrgvpuCMU8KbgVnqSnZwPNDwk77j1sKa9hK7iw1r4rCW85wYPAd1fmnunFFppD463Dq3aV6rUmew1mUYHfcWHS9wovdyYkEzQaC1uC3VwyhrSHxRuJ97Ec149PWyccWLv976x6ABYpAnRpnh2u74ysSDFhtdyPGWvnDdk7wRDnSDsxZine6mJpSwwwwWeasuzH3WZPHtLWCimzbMTsKpuSboScS5LNB9fC1gmngPiNBcKpkq5DGKBK4Jfr9XTsTP55LHQS17Xq2XGiBot5Kd1sxwobdtecYAEXLA9m1xST", + "stackHeight": 2 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4WyeHbGaYB4b", + "stackHeight": 3 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 2 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 3 + }, + { + "programIdIndex": 6, + "accounts": [ + 11, + 8, + 2, + 1 + ], + "data": "HDtpqY3uCYv8VK5FAXvJVKJiyeFUY1KJsHnwwLbivMrxEE5JmPBPHoCLNUJzwdQDk68HHfEPAh6RnqDoVRWqjP1zuwFzXJCZoqdC5oK3Tvpwutkk1512ZGKVN8FZ37vgbRBUZbsuVV7zKRhw3A4ae2jjGzgfoz5LStok2Bxuq9muFzaaKsP9avRRtt9fgP3A6kzkQBKDHvAR6u4NeUTbMw14gLMdcQKF7PgoqnY59mgk3THJQofHQKCefnewAzcbxGWnnmjtFQSa6Pe7swP4MW6yeea6Ey7ykY4SrdmhL7v9YBK3fQMgEyAxAYgyY9tm3mZmk198zCjRaQmFEbK2ScuK6qLjq3UziZwVCWJCq28vn4QRy6WXs2zNUH2NGBTxBrmLJbvqiE8Z91H", + "stackHeight": 3 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy invoke [1]", + "Program log: Instruction: CreateCompressedPda", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [2]", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [3]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 32100 of 856915 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 155987 of 980764 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy consumed 175720 of 999850 compute units", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 175870 + }, + "blockTime": 1746055770 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_address_transactions/3cURDZ4xXm6mA43NAYdX7xzrpTF57wnXzkTdAWCcQQVuCgYv32gF9hDBezx2R7bLvS4uAufwcmbuUp4DJZErfGrn b/tests/data/transactions/batched_address_transactions/3cURDZ4xXm6mA43NAYdX7xzrpTF57wnXzkTdAWCcQQVuCgYv32gF9hDBezx2R7bLvS4uAufwcmbuUp4DJZErfGrn new file mode 100644 index 00000000..17153016 --- /dev/null +++ b/tests/data/transactions/batched_address_transactions/3cURDZ4xXm6mA43NAYdX7xzrpTF57wnXzkTdAWCcQQVuCgYv32gF9hDBezx2R7bLvS4uAufwcmbuUp4DJZErfGrn @@ -0,0 +1,126 @@ +{ + "slot": 110, + "transaction": [ + "AYKf03e5C4MT+wi2P1yb5Beom0kbRxnBD0ZREF8xHsEhQgCDf8FGNF/KEniY5if3jUJgVOfkazcx+afsgSJ9NAMBAAkMlJweADw/IvfAeASqIJXdkEr0tY4lxcSIn8RlFcI4owENAckoq0XTZVlaNOh3F/uwAIoZ0i8FLJ2h+YjEfFfeOs/WpQaYLjyBdiAbgERJR/oGU7DHmYztCzftA7PyiiUMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E1Z6byxrTwcML2wmbOqw6yP5L52ofqLdMs3HqZb9jnGL1/80cujK4wPMl27m4TnIKo8EH53W767jgEzuUspZD8vuzKHUQXK6FtbREdgftv+FFJ7+0I5EcpAQjv9FSeiZ1mxjE6mVxGtfBENJ1a0dRRgraGeXBi2VY42tsc44YpxQCBAAFAkBCDwAJCwAFBgsIBwkKAwECzQHl6s6C/v8pEAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAEbnwO1vmPsoACa2ZRLsj172W4KNtPwqvP7L9yZiZcaNN5hym3SkunGzNsCXbCUyyUGKB/5g6SSpr5IeQOZ16wIBxMpqZfUHKbcKz0gYZnjKQqhp+0lzNd7xwbV0uHfWCq0gmQkjqz8PV7cd0FjK7sV0Vx9wuhEj8+VCmr5Dr8Z0o29HCYkPjkIvnDg7XIZ0E+V44FIEmU7adLhotKnA2gEBAAD/", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999357358, + 9496557960, + 290414202, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "postBalances": [ + 99999342057, + 9496563260, + 290419203, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 5, + "accounts": [ + 0, + 10, + 8, + 7, + 11, + 6, + 9, + 5, + 5, + 3, + 5, + 1, + 2 + ], + "data": "KWv8WR8JeWsurSTFu5akn6AFMjiXGKrHc8BZPa41CGNG2q8oe7hhLLpUeFnmJTkzmfajFz5N3H4rpBhEbjcRVBnXW3w6yH26aA3Q5ZrVZgRpExf436dA5ERLbAwtKQ9JHz7LeaJxTMQx5Ju3e4VGyQimbFcUMj1wdobyY6R9cbV6HxsWRoyLVVgSAhqFn8ZTsoDikom4Jc2Fmqw2hwLTJEBHCaMTARN3Qdba1VpDAvhLwnZtGYrtZUPK9iB2au9oQpK5aF1LMLreNraDA2Wmmr8JabBq9ZrNwTUyLR4UsA6LeGPTDh4GorX1976Mf53DtqXdJZrcjNJnVUCPNqQeuqxJ6e2gcuuZ7G9NJTo6pcnWdTjpvkwmWfmA1xLSeRn4PmZxACts8twT8hXSh9b5629qnMNpWeZzSZD8DBuzQz4pLRic55VDPLUBqKg8FpT71nZp3p7iKQ6MSDPBVVMkQFb351fHdCrR6pUJy7LfLUZx5qewqUTGB1GkLZeTAvbq", + "stackHeight": 2 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4WyeHbGaYB4b", + "stackHeight": 3 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 2 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 3 + }, + { + "programIdIndex": 6, + "accounts": [ + 11, + 8, + 2, + 1 + ], + "data": "HDtpqY3uCYv8VK5FAXvJVKJiyeFUY1KJsHnwwLbivMrxEE5JmPBPHoCLNUJzwdQDk68HHfEMxWPChVMaGQq2GvSh3gNbyuTtRYV97KBw5UUQHPxpjUMJLW9XJHUKAVrCwTJ5zMFLzrpCMNqaSfb8nVDzgMJKDaELmFiVDov7XrLjCcXxH8GKp5bk5mXjoqveE28ecJt9XAjJhAxYPmyzdhjZLA2NyH5Q8w2pwwRAA1THQPw2EDoTH9aGtyTeyur3FfsT5985CmeABHQcFaju9MjTBBV79mN6HH3Qt5rPkSDobfiSWg5yomdKGZRmu2PMuUkb8knj1WnNDBbpQdvrHaVzHNrk7VMngwGNSEjaQgMYfoSQwQfR1XeCs8P3HmdEicPnHNY1tVbcBbD", + "stackHeight": 3 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy invoke [1]", + "Program log: Instruction: CreateCompressedPda", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [2]", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [3]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 32067 of 856915 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 155954 of 980764 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy consumed 175687 of 999850 compute units", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 175837 + }, + "blockTime": 1746055803 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_address_transactions/3h9nsd3ibtxTAHTThZq9hM6UnVxNKXwaNrfTfpaZPQ8v5c42v2KQR5i4CEY4fRF1V5UZEZKkUYjEeBnXcKTYVaHs b/tests/data/transactions/batched_address_transactions/3h9nsd3ibtxTAHTThZq9hM6UnVxNKXwaNrfTfpaZPQ8v5c42v2KQR5i4CEY4fRF1V5UZEZKkUYjEeBnXcKTYVaHs new file mode 100644 index 00000000..f4e08945 --- /dev/null +++ b/tests/data/transactions/batched_address_transactions/3h9nsd3ibtxTAHTThZq9hM6UnVxNKXwaNrfTfpaZPQ8v5c42v2KQR5i4CEY4fRF1V5UZEZKkUYjEeBnXcKTYVaHs @@ -0,0 +1,126 @@ +{ + "slot": 50, + "transaction": [ + "AYaowE8CJUlx0OckYOPexAZXm8Zgz+1XVHwmYLIDDlk2Ph1tKOqOo53Q+UOWSbK/eZgayJD6QmKS8RO6X5TNSQYBAAkMlJweADw/IvfAeASqIJXdkEr0tY4lxcSIn8RlFcI4owENAckoq0XTZVlaNOh3F/uwAIoZ0i8FLJ2h+YjEfFfeOs/WpQaYLjyBdiAbgERJR/oGU7DHmYztCzftA7PyiiUMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E1Z6byxrTwcML2wmbOqw6yP5L52ofqLdMs3HqZb9jnGL1/80cujK4wPMl27m4TnIKo8EH53W767jgEzuUspZD8vuzKHUQXK6FtbREdgftv+FFJ7+0I5EcpAQjv9FSeiZ1KDcpYrM07vBWP347P1xl3nIQurtiTj57ty+bxJWEHOECBAAFAkBCDwAJCwAFBgsIBwkKAwECzQHl6s6C/v8pEAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBHiwbIna5OT08Dp0gGE4gAAFUai367TeJQYt99nlwLhCSMcPTK2H8EMvdkCo9IYqRaJxVU1rzuhZ2PpVQ01mcAQdNFn29UuhmK566DX+Lrx54BpRVQX8UbfXF/2nyxzJmmRzH093oYxbK5xQa2r5boHPVjQuoebLbxt+QxUvfs3W0OzY9ga6LaJlG7OXGgs1ZimXqv/Y6NXLf5F+1reWL3AEBAAD/", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999892893, + 9496372460, + 290239167, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "postBalances": [ + 99999877592, + 9496377760, + 290244168, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 5, + "accounts": [ + 0, + 10, + 8, + 7, + 11, + 6, + 9, + 5, + 5, + 3, + 5, + 1, + 2 + ], + "data": "KWv8WR8JeWsurSTFu66yH2qqcq5YzkDtMCfAE2QHf4RioPddKdoS2otzg1BFNc6voAbi1Uy16FjXERQ48pxsQh8LoTqHwB7JrRRDTyJQGyUkVXzwYRWg2Q3By16wzFBiec86cc4NLFmHfkWKQhFRSYpB9tgugvZaUFikNAraEN5mrEmRWP5iPKWJSjjzo74dXHJQut2Ke7QtyK53S5h5LjaB3pQGTeZfdDS2BPH1S37pMim48DZXBQChvCvFZ4Ub2mgx1S2Haz45sznGURghc7ZSJJCqedTjLddSixoUtLPAuqD8RNFeA8FAj1UHE1exjaKaGJCScbGa68gqkMrfExMHZs2dZyfNZD531djh9iCLbGt5CbtwhY8aSGL9zhKWi75eYd1poRCEy3krmqpAuZFxmNSgdZH5gEw7b5yDuLzJkjE9gK6A1rbWTuXYA3PSqBdxEZCyaSSgqZxd6GdUbZbn6HQUxzijwXsVj1o9HhVRbsHQrs9HVEktxbzjBynX", + "stackHeight": 2 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4WyeHbGaYB4b", + "stackHeight": 3 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 2 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 3 + }, + { + "programIdIndex": 6, + "accounts": [ + 11, + 8, + 2, + 1 + ], + "data": "HDtpqY3uCYv8VK5FAXvJVKJiyeFUY1KJsHnwwLbivMrxEE5JmPBPHoCLNUJzwdQDk68HHfEMTT163n9PmyijNqd8vExbp2pE15kVD8YmUAWFBmxFzskawE3o4hEBmHSKPUR6sm7MPHn7owbeFnz5jB8oDafHeyMPUGtmyYKdg7CwzE9UfCboC1rkJwrCdsjsBEfnPgwkmsBuJwLW1H71oZj6vZN1WKnu5LuKYLS1VPddy1cnPw19YXavqBMAK414puSfDyzZekAtzqLSyb9DkJ6HBpzh61FVxtPThZ4E34XuL7ZkopuuGr4BaUuCSezV6EbC3DWMPbGBTsjyDFPK5Bayo6nLUqDBW898v8ByfYYsZFkS1ShzqfjpT3i1BzzLxDPj5HHzxxbMxBZ", + "stackHeight": 3 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy invoke [1]", + "Program log: Instruction: CreateCompressedPda", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [2]", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [3]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 32067 of 856915 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 155954 of 980764 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy consumed 175687 of 999850 compute units", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 175837 + }, + "blockTime": 1746055769 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_address_transactions/3nTh5T3eZ9ba99b1uqeu5rxJNLSTLWPhRw1fouLENhirCvD93woygJnNGDWMVVo6uzrvqBVSmrXnJL62PanfnJbe b/tests/data/transactions/batched_address_transactions/3nTh5T3eZ9ba99b1uqeu5rxJNLSTLWPhRw1fouLENhirCvD93woygJnNGDWMVVo6uzrvqBVSmrXnJL62PanfnJbe new file mode 100644 index 00000000..70944b6f --- /dev/null +++ b/tests/data/transactions/batched_address_transactions/3nTh5T3eZ9ba99b1uqeu5rxJNLSTLWPhRw1fouLENhirCvD93woygJnNGDWMVVo6uzrvqBVSmrXnJL62PanfnJbe @@ -0,0 +1,126 @@ +{ + "slot": 93, + "transaction": [ + "AYs8tRnBLXddDvUn2dM39xBzviGiVM8KELn63aQczPLjfR3aHMIWY37t8X2PJF4Q3OAVsW8OhnfzV4OC7mXGOgUBAAkMlJweADw/IvfAeASqIJXdkEr0tY4lxcSIn8RlFcI4owENAckoq0XTZVlaNOh3F/uwAIoZ0i8FLJ2h+YjEfFfeOs/WpQaYLjyBdiAbgERJR/oGU7DHmYztCzftA7PyiiUMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E1Z6byxrTwcML2wmbOqw6yP5L52ofqLdMs3HqZb9jnGL1/80cujK4wPMl27m4TnIKo8EH53W767jgEzuUspZD8vuzKHUQXK6FtbREdgftv+FFJ7+0I5EcpAQjv9FSeiZ1c9wZKAlh59khDf598cqoZhdAEfzAT3S1zgYwuH+6NT8CBAAFAkBCDwAJCwAFBgsIBwkKAwECzQHl6s6C/v8pEAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBC83IjdMknr45n/HFOkraYgO9GQ13PIyAtE4HTY88wSqjayQIWf7C6mJD/uazfZQk5PS6DcbTFVEvygwc/1qrMh8MPaMaEgIyLgwd4qOj8iP2gcL3sIK7ThTlJDW8ToT/qJkHCEMXCgw+JJ7dFtDqxp5fuf5FEAdy29/5LFX9bHeQgoV/1m7wJbupmxqAxdl2cbQVip89aSdfBuyRl7hFKQEBAAD/", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999510368, + 9496504960, + 290364192, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "postBalances": [ + 99999495067, + 9496510260, + 290369193, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 5, + "accounts": [ + 0, + 10, + 8, + 7, + 11, + 6, + 9, + 5, + 5, + 3, + 5, + 1, + 2 + ], + "data": "KWv8WR8JeWsurSTFu5nQVmwgR6Jbf8rsnhVDHGWXRW1UbfCQbCfsVQTUeDPqR6iLoaUL19L79m6wVqS3pSjhgpSuB5ZhA6HZpUhCCNfr7XNiE4zbQ1z6Nn8azdTxRRSCrbBQDswWCr6KLnK34SG5wobp5imDbTRmSRuxBDA4xGeNUGHj1ph5MXjGuRgv8aeZSudW9ruKRWjYoqufJKoyWcnFPjAzDeuadedufCUSP2PV3sDbvD4uPWDfpd3UCq9mwRmirbDsbA9XSkuN6CqnZ7KJJF7eP4uJjWYfp24WegqMz1aD5k8zR5nwuJ4hhmhuc2ZGX76J3emELrAzkGrciWhKSXdBfDNF4Ss55QsD5RTuMviRbgiE3yxUHHLNPL74nzYnYkQQb3J2bWGVE8vMCahKKC4LtConcS3X1n8dp5ARWp5sco2ttXebTFPegYpxHbbZFae3Y6g4UqZ8aVvW38ZeZBK9zKVkk635zwXvi18dBZq6ipfse6KJGKBVBip7", + "stackHeight": 2 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4WyeHbGaYB4b", + "stackHeight": 3 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 2 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 3 + }, + { + "programIdIndex": 6, + "accounts": [ + 11, + 8, + 2, + 1 + ], + "data": "HDtpqY3uCYv8VK5FAXvJVKJiyeFUY1KJsHnwwLbivMrxEE5JmPBPHoCLNUJzwdQDk68HHfEMCpdtWGhWd2dbx7HCDXiNbCDbbBYzs6TuTtmhJW6c8TrNLsALZEaEqSP7ssn1VZLPCeU5GidT2EquB9r6PJ6kJvDrzUfaeaAec3bAaK8Cu4auvfa84X6xVe6QnYn9kSewXQzy3cLCcTRVcq5wxjELt64gLqxsprHMwktEJN1W8tTCEMXufR6KFym5VSWsvbpAmxfjBt5278dCpefr8gqVcAs2sQMM9P4zwUCT1Ub8UF7XA3GydvB2omuy8bVccVtNpoXoknCNCetJrmaYhwUNofDM2rXrwCQqQ7it9jx6QSvB38QGXfZw3uoKLNt4w94PKB2JVGs", + "stackHeight": 3 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy invoke [1]", + "Program log: Instruction: CreateCompressedPda", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [2]", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [3]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 32109 of 856915 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 155996 of 980764 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy consumed 175729 of 999850 compute units", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 175879 + }, + "blockTime": 1746055795 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_address_transactions/3qHnYhVPpji3jjhoXQAvhgyupJfuvx2J8TWFsWwVfSrxDdGywoDcE38PdxtWEVChgfDLzgMwDAXHus1hH7AfqjEt b/tests/data/transactions/batched_address_transactions/3qHnYhVPpji3jjhoXQAvhgyupJfuvx2J8TWFsWwVfSrxDdGywoDcE38PdxtWEVChgfDLzgMwDAXHus1hH7AfqjEt new file mode 100644 index 00000000..284e41d7 --- /dev/null +++ b/tests/data/transactions/batched_address_transactions/3qHnYhVPpji3jjhoXQAvhgyupJfuvx2J8TWFsWwVfSrxDdGywoDcE38PdxtWEVChgfDLzgMwDAXHus1hH7AfqjEt @@ -0,0 +1,84 @@ +{ + "slot": 133, + "transaction": [ + "AY2tTCyXDdmphiLpavGrbqujnDRPEvkYpgDOG2q4XldSoyeJ7aE0jAmFJZEJFuAULbUpq04XB5TTjIoF323Ygw0BAAYJzLjCFXXnWj51s6K1RyQiLzHD11pzA0VK0kuivz8zqswhWc53yo4Lew6JOci1vTttbJcOTjfIMGIiy5vpCKZaRM/WpQaYLjyBdiAbgERJR/oGU7DHmYztCzftA7PyiiUMAwZGb+UhFzL/7K26csOb57yM5bvF9xJrLEObOkAAAAAFDSsTeVE2hc8C8rX9UpG9lZsrBgqlJepbNIE7Hbm3bgksNuwi9ReDAP20Sqpq/8/wpG4cvGQcDj7QnaE7nvUIC7wPwLtHyi90xBEulKsTz6PGNOXcF+rLA80aI81+eHwQpl591jkE+Dg60Dze4Hi5FNhzGIA7FTWAcNeS4Fz957/QmmoHZdEI20ACv+9MyGVTFGij2iz8yvlzRZ4iyBL08ZAuDKtAvF7B7h44cXII+HD5Ncxzf2YKzikJ85jCRngCAwAFAkBCDwAEBwEABwgFBgKtAat/8kF9vXl1/6AAAAAhwnt+B9tQ+PdPrW8D3q1f1UonNe47CPQ2zJy5kPLlHAaQzSuzMoRMQu/1VABpg+Rwr0yx+n79GJGoPR8zB5QWEtGdhSsZ/L+6cLSOZVjBAP1PJacOEvzfDvCnNKy1YVQZDcTPhGrfEOYv9pMx9RpFhoPIFXuPWe26Bbm22DuKSwap0yxCTkLl/WQe6CSfHTsXAATReiXZ6UxBkYfYOyIR", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999995000, + 2735280, + 290454210, + 1, + 1141440, + 1141440, + 1141440, + 0, + 1614720 + ], + "postBalances": [ + 99999990000, + 2735280, + 290454210, + 1, + 1141440, + 1141440, + 1141440, + 0, + 1614720 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 5, + "accounts": [ + 7, + 8, + 6, + 2 + ], + "data": "SBkMhczQ9esLdkDPWYFxvh9XECFtzStha4v3TdRuQ2sMeCgVL8fW791maG31LJ1YHxLGYg82WGP35E4XD1T9fRoSEGCKinKQR9jszHwMg49BMqkk4E7J3ywmD77PB1WgaMRtLuFgn6UyjTUQkYDQRJyNbKsjUPa2uHsy6aV4ZG5z9AbnC5Vb1QsSk9epYgXDCVVTEDuGkfmzAnoqQ8jFdbt982vCDBTAkpVEQWQ8R8t", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [], + "data": "3Q747BoHqHsBxkNHj5NHEZnP1TajcfmzuWaVnRBAGpdvhUvpLwjkwwa668mR1Yx2FVUSrEwSsxWfBRUuZHydGSYe6Zyqs7rAtmEaPjLgTjiT1dwbBr5BbGzJGsQ3yVqW3QA2V4tB9dAWRKNu3Kvz1UUda9WnmSV19", + "stackHeight": 3 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program Lighton6oQpVkeewmo2mcPTQQp7kYHr4fWpAgJyEmDX invoke [1]", + "Program log: Instruction: BatchUpdateAddressTree", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: BatchUpdateAddressTree", + "Program noopb9bkMVfRPU8AsbpTUg8AQkHtKwMYZiFUjNRtMmV invoke [3]", + "Program noopb9bkMVfRPU8AsbpTUg8AQkHtKwMYZiFUjNRtMmV consumed 38 of 881758 compute units", + "Program noopb9bkMVfRPU8AsbpTUg8AQkHtKwMYZiFUjNRtMmV success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 102385 of 983946 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program Lighton6oQpVkeewmo2mcPTQQp7kYHr4fWpAgJyEmDX consumed 120212 of 999850 compute units", + "Program Lighton6oQpVkeewmo2mcPTQQp7kYHr4fWpAgJyEmDX success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 120362 + }, + "blockTime": 1746055815 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_address_transactions/3yRtxsSJZCsXvKJpkGaDYWxYwCQysssLtg9XY9Qftftui2QNesjguatfG9QXhTHA4frtXYoGiiyMF5Jahqn5hAAR b/tests/data/transactions/batched_address_transactions/3yRtxsSJZCsXvKJpkGaDYWxYwCQysssLtg9XY9Qftftui2QNesjguatfG9QXhTHA4frtXYoGiiyMF5Jahqn5hAAR new file mode 100644 index 00000000..192b18c2 --- /dev/null +++ b/tests/data/transactions/batched_address_transactions/3yRtxsSJZCsXvKJpkGaDYWxYwCQysssLtg9XY9Qftftui2QNesjguatfG9QXhTHA4frtXYoGiiyMF5Jahqn5hAAR @@ -0,0 +1,126 @@ +{ + "slot": 86, + "transaction": [ + "AZSySVLRwAV7unHmX78WAU3iHlSNM1Da63nHR/T7g0bw1B2SW3krYiFt77mQHSYgnipTdQh25+X0lsssHubUGwYBAAkMlJweADw/IvfAeASqIJXdkEr0tY4lxcSIn8RlFcI4owENAckoq0XTZVlaNOh3F/uwAIoZ0i8FLJ2h+YjEfFfeOs/WpQaYLjyBdiAbgERJR/oGU7DHmYztCzftA7PyiiUMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E1Z6byxrTwcML2wmbOqw6yP5L52ofqLdMs3HqZb9jnGL1/80cujK4wPMl27m4TnIKo8EH53W767jgEzuUspZD8vuzKHUQXK6FtbREdgftv+FFJ7+0I5EcpAQjv9FSeiZ16OcG2zxpEuPtjF05/Cb8s3C9Vph/TOyVV842WV91oUYCBAAFAkBCDwAJCwAFBgsIBwkKAwECzQHl6s6C/v8pEAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBLDorruy5uNqhFGygK1VmKXWs/g2kqpV0P0QRl6xniUGm/jjEF5mCa3fg75Twm2mLE8j/F5usw22keCtWQ+SqXiiPVk8v6w+jX3vt/rDqgd6wqdl5/3LFqp28FbTFaN8gl6G4DDN9lYJ08Mey6zVKXXPV/V33V3i+EeGsLxRhHBYDEIaWlqH1v8QSNd1sA2r4kfFm2fDOiTlwS46SRfdcJwEBAAD/", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999571572, + 9496483760, + 290344188, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "postBalances": [ + 99999556271, + 9496489060, + 290349189, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 5, + "accounts": [ + 0, + 10, + 8, + 7, + 11, + 6, + 9, + 5, + 5, + 3, + 5, + 1, + 2 + ], + "data": "KWv8WR8JeWsurSTFu6MBCEm7oS5FDWjTZn6HzHdVAnKpJHmca5poPnmhmcVtgae39496X72dF3Rwx9BDDKLJJsyBokUr8MTxwajmHiMAVviiBrkUxFWkE7ZpTiteunBv2SotTV6kWvwtsXcNCmppNtXLXqhUFELQPqNTSBsbftNoG8dy4xPCXhycu4EYtqMH8qfB5M1kNNELrcbzsUJGHEzp9L1CKkd81mN2ZjGHpQstUonGN41eQyRCtWqHVoBGvrKeuDPp9fVpFMSEq5tQsTiUMRfR5MqAk8mjD5jq6pi7os2DswsJJBbShJCca4uHNZnTCVi7Dht3phfX2yWmG6amSzMYzziUqUQwaTTrV7KRHiJ9GpE75CkteS188D2ckPqpx1NgEQ5Wj2pAUguuUaBGkRCverwYvHSDLq48Scqbx5dy7YpZXkBAaRYgXYKXJWYdvJUQcEtPftSWxZYVHhvueVd6SLfWNSEyyFxpqRuya5cVD6xgzEGK7fbb3qh1", + "stackHeight": 2 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4WyeHbGaYB4b", + "stackHeight": 3 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 2 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 3 + }, + { + "programIdIndex": 6, + "accounts": [ + 11, + 8, + 2, + 1 + ], + "data": "HDtpqY3uCYv8VK5FAXvJVKJiyeFUY1KJsHnwwLbivMrxEE5JmPBPHoCLNUJzwdQDk68HHfELsoZuMAzM897F197cM6fBtvqHwCmMfTdTUT5BLUYT2ZkKvSo9LkzJtgUCa7enTPDgsy26TJuNM1oU39kZTGkNRvJ9WS1cfBLyEpaZ8Y4pLxV2ich7WTxyb2YEMkJy1qVArMVQqSeU4RsAyCA1CRCY8ssoSf18JME284V5WdmYPb2RkcLXrGY5VGy2ioJY2cdSpwpauMfMBFkMjqcWcVMRPtVgxY8HhxTYkmzat17oFGxEoneTuC4A2Zgb12FvgM5hP3R39hmabsDFCmXvxZGpVQdduJimw5w2o67s2hs81oGD8vb7VP1wJpBdkW9jfAhaMbZcTKD", + "stackHeight": 3 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy invoke [1]", + "Program log: Instruction: CreateCompressedPda", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [2]", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [3]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 32067 of 856915 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 155954 of 980764 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy consumed 175687 of 999850 compute units", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 175837 + }, + "blockTime": 1746055791 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_address_transactions/41EavvJ594A3j8Do8N7jJLmhGw544zGBje9Yx4vaDcXxLaMPM9rodjjvAL6SNB1rFyDfzZjguRUpsS4wjdBugAd1 b/tests/data/transactions/batched_address_transactions/41EavvJ594A3j8Do8N7jJLmhGw544zGBje9Yx4vaDcXxLaMPM9rodjjvAL6SNB1rFyDfzZjguRUpsS4wjdBugAd1 new file mode 100644 index 00000000..2435e70f --- /dev/null +++ b/tests/data/transactions/batched_address_transactions/41EavvJ594A3j8Do8N7jJLmhGw544zGBje9Yx4vaDcXxLaMPM9rodjjvAL6SNB1rFyDfzZjguRUpsS4wjdBugAd1 @@ -0,0 +1,126 @@ +{ + "slot": 84, + "transaction": [ + "AZZAw13xhQ/c7eOwSWiGBsPDVN0ej7yRGA0sI1MYzMsijskkJIAtZj/q1HNxp5qO7FYvSh+HnxAbCLwC+kBUPAQBAAkMlJweADw/IvfAeASqIJXdkEr0tY4lxcSIn8RlFcI4owENAckoq0XTZVlaNOh3F/uwAIoZ0i8FLJ2h+YjEfFfeOs/WpQaYLjyBdiAbgERJR/oGU7DHmYztCzftA7PyiiUMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E1Z6byxrTwcML2wmbOqw6yP5L52ofqLdMs3HqZb9jnGL1/80cujK4wPMl27m4TnIKo8EH53W767jgEzuUspZD8vuzKHUQXK6FtbREdgftv+FFJ7+0I5EcpAQjv9FSeiZ1iFwzHmCNvxQAADuYXPnxzhnT+zRL42Fut0MEhkDpZyACBAAFAkBCDwAJCwAFBgsIBwkKAwECzQHl6s6C/v8pEAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBr5KalqqhnKFY4ug+61Ru9BrzGkgw6InCyWKtorck/+Mp5HTOMFwcSrnxVvrxxWdjq3+n2K+6MD1nP8iMNLlHwSn7lgz9jlbYWvyWDI8sRKs3AI9V8X/zAV9mtCUaiD9gCwOPEMGeOFMK51RDsaV9+swwBvNTvp8+Rt2qOKrwcWu9fAlvTc9AD/3OsHXvMfyjtCemZqG1+e+bVz1vlGv8OwEBAAD/", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999586873, + 9496478460, + 290339187, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "postBalances": [ + 99999571572, + 9496483760, + 290344188, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 5, + "accounts": [ + 0, + 10, + 8, + 7, + 11, + 6, + 9, + 5, + 5, + 3, + 5, + 1, + 2 + ], + "data": "KWv8WR8JeWsurSTFu8dvpZudtkhrcRZCosEy3R1HZ63nnKeBGQZXCN19FMuJz9ufadfaCHvA13rwTnHS3mPp6b9eZzG76i9DmnKgeH2ossgkCJgbSSHKQZ427DkJzkEBaBRRYS8PWsfg77C1aQrPa4LxxVQyZY7Bskvi3rTc9MD72QaqAuiomF1JCQNaWeaCSntZXKA25KvRaBYvxirgLMHtUDmh2dpq38dgkiYFmdfSeSPpQzXXjTvsX4SVAzH6T6WPMD99cRqQvVheRfaCii5pwvE4BixLGwV6jMJmWzNA9yqcvY7EtQxaoTunRtJmxDq6QDLcqGkpNDp2bAnPXram11CdYcitDR9uxB8jUBezHvjJTu46WsdzwocfMwfDbWXoZCStdWbX3XkW32wjBnbyzUTtxj585EXzhtpSuk5LWfMDX7Y6az2LFQHdVNTsdM23QUYWMfqoPTDrmZQr92sdX7mAnyNtzFGCBdniga6EfwwkAHhLiLPa4KoPY19y", + "stackHeight": 2 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4WyeHbGaYB4b", + "stackHeight": 3 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 2 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 3 + }, + { + "programIdIndex": 6, + "accounts": [ + 11, + 8, + 2, + 1 + ], + "data": "HDtpqY3uCYv8VK5FAXvJVKJiyeFUY1KJsHnwwLbivMrxEE5JmPBPHoCLNUJzwdQDk68HHfEMhumM76AudnKpSGy6rumrjD8REoCq5wV47z9NX7hBGiNwVdCVtqzYfJBHwsG3KHtc5LXsdf5cG1Ah4s4WSToZqZ4Gjwtq7Xu6crkmjGRs3Rrfz3E3wm9fZW2dUXTnPkHCqSbxTmcEQq5xV9K2LQDoAAqUndPk4f1b7xbvffR8xDdPXKH4cjhQKSB3wyWCcX8VM8AS7xjRFSaio1o944uXbMMVG4cEURY3bCoupSY4n3zaY1kiwMTBFDqYTE7bDnxVe44you5bj6XaH13BQWsXZcrf7qoVENht823tPZiHzf587PoKQsGw5J5T8bM34VUUo7NtMPm", + "stackHeight": 3 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy invoke [1]", + "Program log: Instruction: CreateCompressedPda", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [2]", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [3]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 32046 of 856915 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 155933 of 980764 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy consumed 175666 of 999850 compute units", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 175816 + }, + "blockTime": 1746055790 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_address_transactions/44G4mh8T6WGCAuvufKLa8NUsiWffWuhDF5LiR3iJ8DNDatAZhzAufCz74DEYqLZfddVVSPR6Wh69ndEJbG2nSRVv b/tests/data/transactions/batched_address_transactions/44G4mh8T6WGCAuvufKLa8NUsiWffWuhDF5LiR3iJ8DNDatAZhzAufCz74DEYqLZfddVVSPR6Wh69ndEJbG2nSRVv new file mode 100644 index 00000000..782e543d --- /dev/null +++ b/tests/data/transactions/batched_address_transactions/44G4mh8T6WGCAuvufKLa8NUsiWffWuhDF5LiR3iJ8DNDatAZhzAufCz74DEYqLZfddVVSPR6Wh69ndEJbG2nSRVv @@ -0,0 +1,126 @@ +{ + "slot": 79, + "transaction": [ + "AZjcsMjlh3978cHkV4q7h84dHnGxenW/+9N2QeRvw9Tv7dcdOf5lGr43zbpmkLPR/enYphfh/1tzI5XC6a7cTwUBAAkMlJweADw/IvfAeASqIJXdkEr0tY4lxcSIn8RlFcI4owENAckoq0XTZVlaNOh3F/uwAIoZ0i8FLJ2h+YjEfFfeOs/WpQaYLjyBdiAbgERJR/oGU7DHmYztCzftA7PyiiUMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E1Z6byxrTwcML2wmbOqw6yP5L52ofqLdMs3HqZb9jnGL1/80cujK4wPMl27m4TnIKo8EH53W767jgEzuUspZD8vuzKHUQXK6FtbREdgftv+FFJ7+0I5EcpAQjv9FSeiZ17cw/tyVRve3llgKJ3VJkrU31kkFuh/7A2TqokrHHJzACBAAFAkBCDwAJCwAFBgsIBwkKAwECzQHl6s6C/v8pEAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBLMOT9pEiCMszDWwH2whAhsXfHhJYOoX2qMTVbUybWkse63LV5Gfm8+L/TpNwjF0EmTTQtOoDRqCgrPCfWGhp+iUBPtyRlgee8a7xZsTKSmeKB3P5K8/O6I+5FWHw9006LtPqsXKsiAMSkJmydnNdv4KJ1mJPKAZI5vjFPlp4NmVywxd3uvRUG5iJCdKSBVYMVzQAG8uswjmQpDVjENjfEwEBAAD/", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999632776, + 9496462560, + 290324184, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "postBalances": [ + 99999617475, + 9496467860, + 290329185, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 5, + "accounts": [ + 0, + 10, + 8, + 7, + 11, + 6, + 9, + 5, + 5, + 3, + 5, + 1, + 2 + ], + "data": "KWv8WR8JeWsurSTFu6MifCGB2grSXk5JLo7kiwz9zeek8h672MDMu2vxNYTQqFTiCRrmkquACxVGe64FWGrbWibrKpm9JTUjGf1rqV6jaXWwb2c223FjKLbx6CJ9wtQwWG1WHtm9JhhGtxM5EjFHuZXTqYHgffE4Qe1CJ3BcAjfedKBSeR56vkonkKhGqKBp9sHnUzi4Shxcv8YsAJ4V3EGEUJPxehB8eDne2f2UtTFa8NtfA2WUouASdo8KfeU3uZqk5g4SvDLT8VEknnxhFVgUTGZEWxSLxHEcGa4qhiPiiQAAK5194aDQbm2pXdNgyWYZWVgiMtSNAqp1A3AXENNNhPCjHe6yDWQMMuwRZ68dd3w86cYGMrXJszf7gywuF6TtWyrGLF8nQeVqMszDeCKUzvMV3SqG6knDRNUcADZgtfsxXsAvpCByNWvCJwutYzzn3zVp9rR1XeeYfUXA8bBtNvsYUqJucFb2CkbiKtYCMxSuoGoQr3ogFq15rCaK", + "stackHeight": 2 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4WyeHbGaYB4b", + "stackHeight": 3 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 2 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 3 + }, + { + "programIdIndex": 6, + "accounts": [ + 11, + 8, + 2, + 1 + ], + "data": "HDtpqY3uCYv8VK5FAXvJVKJiyeFUY1KJsHnwwLbivMrxEE5JmPBPHoCLNUJzwdQDk68HHfEPCta7ygsCyAwAGgwpgxvr2Pg1eKZnThCAHu3tLjkXEYJtue5ujpcxgkmnTHC5uVxLwyhFCXvSVBVNryzG6VSANjRqBFhiYSJYSpASJr7XdYXr9xQqjFMVUXHrL9wxvUXbDSomewFA7K82utaJwKUZKGx7K2TWD192FCFC7uHkpTgSJohJGhK9bJX9s9yLYhgVtEJjXdAWV3Ucu9gL2zZqXxYRc5ss4BPvMm8S6SwoL5gjsVTGoYaTxn97tDY3rPW5z2KSg1jb3xt7H4mWaGpu6HZBgBgHU3h6UjaMgfZV8qhLQKtubVyroWCESvmpQfdw4muAzqu", + "stackHeight": 3 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy invoke [1]", + "Program log: Instruction: CreateCompressedPda", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [2]", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [3]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 32088 of 856915 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 155975 of 980764 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy consumed 175708 of 999850 compute units", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 175858 + }, + "blockTime": 1746055788 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_address_transactions/4D3KVZTjrAtBR9gebtXgxrz3ERhgyBErM6rXzZMCKegCY915it7bmUxbpCpFxrXRSupZBWSYrVf5Kg521CdrKBip b/tests/data/transactions/batched_address_transactions/4D3KVZTjrAtBR9gebtXgxrz3ERhgyBErM6rXzZMCKegCY915it7bmUxbpCpFxrXRSupZBWSYrVf5Kg521CdrKBip new file mode 100644 index 00000000..b19100a0 --- /dev/null +++ b/tests/data/transactions/batched_address_transactions/4D3KVZTjrAtBR9gebtXgxrz3ERhgyBErM6rXzZMCKegCY915it7bmUxbpCpFxrXRSupZBWSYrVf5Kg521CdrKBip @@ -0,0 +1,126 @@ +{ + "slot": 42, + "transaction": [ + "AaBvDp4i6fRJS6Bz7GiI99ibnaOj/TsxlMHaJTip9T6bXETrNSTSEFOq5Y8YlvpprZCmffZ9zkilMf22Y752SAEBAAkMlJweADw/IvfAeASqIJXdkEr0tY4lxcSIn8RlFcI4owENAckoq0XTZVlaNOh3F/uwAIoZ0i8FLJ2h+YjEfFfeOs/WpQaYLjyBdiAbgERJR/oGU7DHmYztCzftA7PyiiUMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E1Z6byxrTwcML2wmbOqw6yP5L52ofqLdMs3HqZb9jnGL1/80cujK4wPMl27m4TnIKo8EH53W767jgEzuUspZD8vuzKHUQXK6FtbREdgftv+FFJ7+0I5EcpAQjv9FSeiZ1mhpDmCxjD6j5s/CWI2mQap/VWHutsMCGAR+XboxQ6JoCBAAFAkBCDwAJCwAFBgsIBwkKAwECzQHl6s6C/v8pEAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBotqrkLlYa/acT5kOQD5srtQZWm5HHTNtxS0u8iCbuSOBeZ+Ij1cbzSBpGCiXw+QL+w962wyYjvXnsoRTRXId+xlgtZxPTjCbJKzJqcHeHtnl55FwTEgwSfl6hcSKZPRmH9epMIuO2KdcY/bmKR3WsLGyGT999viGLH9H86OcCk5y7qURlBCXOuMorZKRYmgSjttHEG4a1qjD1UWEm4q4GwEBAAD/", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999969398, + 9496345960, + 290214162, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "postBalances": [ + 99999954097, + 9496351260, + 290219163, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 5, + "accounts": [ + 0, + 10, + 8, + 7, + 11, + 6, + 9, + 5, + 5, + 3, + 5, + 1, + 2 + ], + "data": "KWv8WR8JeWsurSTFu8R5FL15LwfKFvUNBXMUDonFpN1YwBAn9H9gCcYJ7cMT7Gd1hRApJgqMEG1rFB62cBdaTHmTZbCai4zsr2ZauLBmbyCCQVHbUC5Bg5ChDwypYiN8htk7KUrRXXUk5xdmyKo3WxJ3am5TAUsFoaY4kDW8M1hmsX5EPEjJVQFfyZwc8nK9YG8sCj4L84XsxfneAHNrbFyGMGPtVBgKaAR96UavZxqrKGygC4FNcgwqcBmEFTe7QeaZWQtHDRYxRkBfmxoDQQTDcuLrhE2X4vGTC6nLAP7UoAQgXKi2Bi369xYJGWsW3ZvYps3T8EZcHndLSb9pXAyNY2XwF44RrFHnYj8Ex3fCsSMJ9esHakzoq3wtrJZZioK2gTDAXEQYAUGkQD1xW4vZxPbh7keUKDujZ2MhEo7HVBgxDSCkNTWYARtJ1X7yRo4RTUV7cnWiuF1PeGcSH5wUGnCkUiVu2D5KiwzibdPNYn7puMf9XHXguiP2p1MH", + "stackHeight": 2 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4WyeHbGaYB4b", + "stackHeight": 3 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 2 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 3 + }, + { + "programIdIndex": 6, + "accounts": [ + 11, + 8, + 2, + 1 + ], + "data": "HDtpqY3uCYv8VK5FAXvJVKJiyeFUY1KJsHnwwLbivMrxEE5JmPBPHoCLNUJzwdQDk68HHfEQ27xqj3sn27Pyyvo6iZ8NqjerkCgLQXtcY9vYoqicyNUgKBGFojhZdjAQsspg9p87Szkb2EhjFYJUN6AEFuvEJLYLgoMh5Ho76xzagad8frhfwB6prjArvSVepnAUranQGmnxF3dYpyFJGybt4uu6YDcEfYzYNaG743LArfTNzer3nWZRMZJ39jEqHQ8mJE6S6zx3FXqXsm7Kj1TdDT1EuqQ6UxVX8cSaDsR2VHPWNRs2aXJf1ijfCbFsUoFGjfumTLTTNnE9VnCvEAqe9HRusQQVoy6JZhSzjaUxQ55hZYg7K2aQwSZXRw3SD85sfQU9K4hTEKh", + "stackHeight": 3 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy invoke [1]", + "Program log: Instruction: CreateCompressedPda", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [2]", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [3]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 32109 of 856915 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 155996 of 980764 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy consumed 175729 of 999850 compute units", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 175879 + }, + "blockTime": 1746055765 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_address_transactions/4DwVHAw91bDyCJnWcuGEqax3wJCmKaKgmhzFbAZ6y3k19SHHWsy1fvHkthunZ1dXcmiSgWArfEcJxuYEde2JdAdJ b/tests/data/transactions/batched_address_transactions/4DwVHAw91bDyCJnWcuGEqax3wJCmKaKgmhzFbAZ6y3k19SHHWsy1fvHkthunZ1dXcmiSgWArfEcJxuYEde2JdAdJ new file mode 100644 index 00000000..a718c16d --- /dev/null +++ b/tests/data/transactions/batched_address_transactions/4DwVHAw91bDyCJnWcuGEqax3wJCmKaKgmhzFbAZ6y3k19SHHWsy1fvHkthunZ1dXcmiSgWArfEcJxuYEde2JdAdJ @@ -0,0 +1,126 @@ +{ + "slot": 71, + "transaction": [ + "AaE1oFT3xsGwcaqsWOWz0Arc7ZVH3UjF2oQeiaKdMCMG2az3uG7QP2JBmD0Y0hLGo/jdr4HDeYOWHW6ocjXJ7A0BAAkMlJweADw/IvfAeASqIJXdkEr0tY4lxcSIn8RlFcI4owENAckoq0XTZVlaNOh3F/uwAIoZ0i8FLJ2h+YjEfFfeOs/WpQaYLjyBdiAbgERJR/oGU7DHmYztCzftA7PyiiUMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E1Z6byxrTwcML2wmbOqw6yP5L52ofqLdMs3HqZb9jnGL1/80cujK4wPMl27m4TnIKo8EH53W767jgEzuUspZD8vuzKHUQXK6FtbREdgftv+FFJ7+0I5EcpAQjv9FSeiZ1ga3CmARSiM/SHzpM7jTZmZTxRsyXWtOjNd41UPgFkFsCBAAFAkBCDwAJCwAFBgsIBwkKAwECzQHl6s6C/v8pEAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBEJ4GW6a00WyFnjQb5Rk+OBZDgLm/Im2XPnF1xfKqvnkoWXXLV810d2hgIH3O7aPcyBo2MQ9vbT4B3qWqCz0yyyzaE6eKXgYAn1DYVyjBbXVDRNPX0eprIPrOPLj6FYS6j456m6pPaX+yJaNJcZBruhPaICMxLe83B1k8STIcZgP2GHevTn+DE62CNDApULMxhNWrl9F7TDirQaKwZbvQwAEBAAD/", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999709281, + 9496436060, + 290299179, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "postBalances": [ + 99999693980, + 9496441360, + 290304180, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 5, + "accounts": [ + 0, + 10, + 8, + 7, + 11, + 6, + 9, + 5, + 5, + 3, + 5, + 1, + 2 + ], + "data": "KWv8WR8JeWsurSTFu5sGfd3gGiyZNwbJnuybHro2ctjcLZttq4vHyn6wGi4gMNSpUgvbRz47DLbFgKPfeihxadq3vstX2XEuU1rEfH7iedV45AzeHLuR4rHRYnKk9mEr5LfKNR1rpHyo8Dknh53gn7LYTMyRJPrCkqfkC6DLeBUtFkTvS5Q4WcPGxZw46gXTkQQLsVCLdU1FSkBLiNcJPpkfk8u1ADtW8pbqZRVYjiwFKBtZVvYRRpW74UbrrFvRvaXUGHL2aWsqnCJgFHGoGCGGGmAPw2YE7iT7YESQv9kNhQAi23i4ptDz1E8bLW2s1mkR1MXjArjPQpZxE637KYdwY5sFKhtYcnpdDzegi3HXwRyMV9EhRG1GUxi5zA56YCrqX9mNzQJDwKMu5gbVc1QBkJfyXtTi6mMyAyjBYkxL6dhD9gdK4hcE7wUraXfQMsuNVSQzzbxAbGk3zXLEnkeQXKKqXTqGqjLsFCkSBqfNHLF4CwwBA5hwu1Sss31h", + "stackHeight": 2 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4WyeHbGaYB4b", + "stackHeight": 3 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 2 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 3 + }, + { + "programIdIndex": 6, + "accounts": [ + 11, + 8, + 2, + 1 + ], + "data": "HDtpqY3uCYv8VK5FAXvJVKJiyeFUY1KJsHnwwLbivMrxEE5JmPBPHoCLNUJzwdQDk68HHfEPrcSiMXA7ksx3nbuFetsL8sEUAauDhqTAGpUUuFJv5xXUNmuGBwgK4cZWQ5xeV382xwwDGsmkv1e2tFdE1P9riKKfCUZmqQCuoZ9NQPYRmJ8mJocHaYE3tiCcvmkATGQQLuwWiyNmXQWuN4CUWrbd4SSLpfuM24UCUPNAajCnGveoyQTE5G6EBxy3UwdWPUcyy1hmK1z335v67zoVMhvJ5sLif45riwriTzwsqTnhfYm7AUMC6awYLzkhPsEJLqLB5TvRgaqCtpmDBiLBpTdBcN1dqNGKnXVc3aBvXXhHdhokJjJDDHKPQdCJxagtrZhQJwcw7Jo", + "stackHeight": 3 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy invoke [1]", + "Program log: Instruction: CreateCompressedPda", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [2]", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [3]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 32079 of 856915 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 155966 of 980764 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy consumed 175699 of 999850 compute units", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 175849 + }, + "blockTime": 1746055781 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_address_transactions/4JSfGv49Ltusd2AFYsiHi9nq1coLXy9qyLtwEhj53YTrbTQXH7DgrJtmnqwjjTex2E9fJZoCrSTaMofgLtqD8w2T b/tests/data/transactions/batched_address_transactions/4JSfGv49Ltusd2AFYsiHi9nq1coLXy9qyLtwEhj53YTrbTQXH7DgrJtmnqwjjTex2E9fJZoCrSTaMofgLtqD8w2T new file mode 100644 index 00000000..79f60106 --- /dev/null +++ b/tests/data/transactions/batched_address_transactions/4JSfGv49Ltusd2AFYsiHi9nq1coLXy9qyLtwEhj53YTrbTQXH7DgrJtmnqwjjTex2E9fJZoCrSTaMofgLtqD8w2T @@ -0,0 +1,126 @@ +{ + "slot": 89, + "transaction": [ + "AaUXuSxr+yuRCkIH3p1oJ//1YYyUSsjgMashmjtPCdUJO6i6L3C8fFP9joAq81kbf3vQYZCffZiqGOPQApREWQQBAAkMlJweADw/IvfAeASqIJXdkEr0tY4lxcSIn8RlFcI4owENAckoq0XTZVlaNOh3F/uwAIoZ0i8FLJ2h+YjEfFfeOs/WpQaYLjyBdiAbgERJR/oGU7DHmYztCzftA7PyiiUMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E1Z6byxrTwcML2wmbOqw6yP5L52ofqLdMs3HqZb9jnGL1/80cujK4wPMl27m4TnIKo8EH53W767jgEzuUspZD8vuzKHUQXK6FtbREdgftv+FFJ7+0I5EcpAQjv9FSeiZ1o1N1/dDK94sRwkCcmFlK10LJOpbCklZkClRNdTZEpKACBAAFAkBCDwAJCwAFBgsIBwkKAwECzQHl6s6C/v8pEAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBLvNpslZ5kbR/UirP3xg6qPpF6kIp28ILzMf17eEzO1Wqa9lG3JozwZxw2sTV7IuJdRbBSswNZKmnyIAvJNwDYAujahSrhEMZ/rqylzw9Ybjb5Fwew76+zZELon1xt7qMmDFavF6HmL2+NwQdSevxD4uctKBzF3Z7yEhbDcXGEKD5T1oX+nMdKEdj59mjdYFzQhuDkQcgrkBeBJbT2UQCbAEBAAD/", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999540970, + 9496494360, + 290354190, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "postBalances": [ + 99999525669, + 9496499660, + 290359191, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 5, + "accounts": [ + 0, + 10, + 8, + 7, + 11, + 6, + 9, + 5, + 5, + 3, + 5, + 1, + 2 + ], + "data": "KWv8WR8JeWsurSTFu6PvrZmy4H5rL7js7G8SD4sUYf9DroxQsYeXWv1upGnrNv1zn5eNEQvizRQFTcMFyJEZpG4ifJisCUxte1d23a1Kuq1DDjz63rj1Gr2wLayB77ZgZYbLjRghJCKPhWHYMyjdG25ujSTi8tuYsj6LWCjMJMJm6bUbFJs7xf6XKigQrYKEy3KgcXV21kmSELbncoSC7ot3QLhhGHXdotSUz9x7mnaAkrD37RragzskVEwNfb8kp5pxVZKcmmVp1zREDNH6SddfSun9aBUxhaBMySxbGMRfx1m6ucsFMUjmbD5UrKqCkfJ6UxbYj4TmANzS2rXv177Biq1DKJfCC6rwKY2PCna4uGjWi5jZQFA6WcfQg4CKzGbStZJiRAcFBSa596H6dowF7XuuSRaqkvg3qbFTopBsYq52zn8kyYZAZLngqsHHXTRroncQTP11kW3NwZXifihE3w6yoaakNE1524yaP1Z7WxMVWg4gUjBFAEGCjQ79", + "stackHeight": 2 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4WyeHbGaYB4b", + "stackHeight": 3 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 2 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 3 + }, + { + "programIdIndex": 6, + "accounts": [ + 11, + 8, + 2, + 1 + ], + "data": "HDtpqY3uCYv8VK5FAXvJVKJiyeFUY1KJsHnwwLbivMrxEE5JmPBPHoCLNUJzwdQDk68HHfENZQMQwh6eaivEh6jLJq16mDoDuWDGbUGDaJ2y3v7zTbqevAJDJ4ewcGxjV2wuL5Lo2jJoTqyFfnUm5dbs74ewcCJDJTjvuBXttJqfDLhdXzrkoG55CDfaGxXxQ3BkCesY7HceU2nQBDpajdAygjtHq41RuSV8MVdZuhAy7EeyjMsCWuiz2FLub2k79BHeLrzRDtkZMqfErg4fBgTZV7AA94pro89EYxUeY7Gb5p2uMq7YuKk6NMJdJVbtxo5LgeBPEG1HnmbJBMXshUhv7CmNnR5wGjmTDmDqTaGQpMWJ3SRtFf9oR3yVq9Tx2ZqgwgVA1knEkfZ", + "stackHeight": 3 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy invoke [1]", + "Program log: Instruction: CreateCompressedPda", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [2]", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [3]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 31202 of 856915 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 155089 of 980764 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy consumed 174822 of 999850 compute units", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 174972 + }, + "blockTime": 1746055793 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_address_transactions/4RncggqXKm85BWe6WviCBape2nbQZzCaFHTeqZKiYstWF9quFWv1xQoqZw3zZjHg3zjkQER3uidujFCDdMzd8mq6 b/tests/data/transactions/batched_address_transactions/4RncggqXKm85BWe6WviCBape2nbQZzCaFHTeqZKiYstWF9quFWv1xQoqZw3zZjHg3zjkQER3uidujFCDdMzd8mq6 new file mode 100644 index 00000000..a5d774c1 --- /dev/null +++ b/tests/data/transactions/batched_address_transactions/4RncggqXKm85BWe6WviCBape2nbQZzCaFHTeqZKiYstWF9quFWv1xQoqZw3zZjHg3zjkQER3uidujFCDdMzd8mq6 @@ -0,0 +1,126 @@ +{ + "slot": 43, + "transaction": [ + "AattCCmczr99DGR/yy8gYI+WloK9WsF+DIi3ZYV6a4jwAp+brJ6eCLw4w5BjwXiRiL6Pui2tr3rDv+3dvy8TtA0BAAkMlJweADw/IvfAeASqIJXdkEr0tY4lxcSIn8RlFcI4owENAckoq0XTZVlaNOh3F/uwAIoZ0i8FLJ2h+YjEfFfeOs/WpQaYLjyBdiAbgERJR/oGU7DHmYztCzftA7PyiiUMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E1Z6byxrTwcML2wmbOqw6yP5L52ofqLdMs3HqZb9jnGL1/80cujK4wPMl27m4TnIKo8EH53W767jgEzuUspZD8vuzKHUQXK6FtbREdgftv+FFJ7+0I5EcpAQjv9FSeiZ1pXUtHDa018caakg+/oqsN6UrsbyWJZpdTFeMhiN5mzsCBAAFAkBCDwAJCwAFBgsIBwkKAwECzQHl6s6C/v8pEAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBnfciO2CtcYmXRH6vlsxGiqXUBOMxE6u7Q48MWPteEp4CHKFQpjQgORYmGDi3a0rRz8WhndHOGxTbqW25+XPvCAQWCMqjfyKOJ39Z4MQ8V7xJqLm8J7jBgZcJ+obQDeTSF9lTDE3LBNdgkfRUsKjXcG0sn4813FMdu5xTKfdZQFoQGF0mAjs2EM632fV9SdKzh2OhKyu9+pMnWv8YKvuV3AEBAAD/", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999954097, + 9496351260, + 290219163, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "postBalances": [ + 99999938796, + 9496356560, + 290224164, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 5, + "accounts": [ + 0, + 10, + 8, + 7, + 11, + 6, + 9, + 5, + 5, + 3, + 5, + 1, + 2 + ], + "data": "KWv8WR8JeWsurSTFu8L8fDZdiLQ3JpNZ3KcJiFJCboyWfybK3L9QpXuZ3RPaV3CcVmsUW9zxJBHGtiHb1iPu8D3BLUHczwJujXDHBMDRbKVGRDco1iTAdXJvCkSfQeJwRswrAkRE2TCXjnjKYFW9C9PoZPu28M1eARXs6urxaUqhJZL3AJre9WKXeKkGHqAPAWigjNGbQefLvb44nMsv3txTWUjcMnaEen3eBd7t68HwZi1ei4aBW57nKCLaravY7yhBfcT4Tvp1MeA8RiDVVLugthm8KfvMGsJ4d4mr4QoYigZvGgMmSrxuCoKuv6cTr1dHPkPJgiTfCDDrjMCCDE4BNFZ8ffRqvbZtdC7xJACnZhsf96PkX94K2Fmz3dC5DtR6ANasKkowtt92rXASWYH3zxkuR9FiVSQWxmpBYMxwUSNFrtaDRhac279RqTGwMDGZyhZikhRCos14GpngVbJ6mHk97wFk5ppHvgrrgvjyWJC7LdmMawMsWHsBRDKV", + "stackHeight": 2 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4WyeHbGaYB4b", + "stackHeight": 3 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 2 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 3 + }, + { + "programIdIndex": 6, + "accounts": [ + 11, + 8, + 2, + 1 + ], + "data": "HDtpqY3uCYv8VK5FAXvJVKJiyeFUY1KJsHnwwLbivMrxEE5JmPBPHoCLNUJzwdQDk68HHfEQpaqLxz57WkbVu9JHGHk6EgYf2dTWXDWRBDf2d5uJ3PV7w8THHsTy6nF4ZMDrwFrwWfnGr4TkpqcwoggQaRzhjSCb8CfRtX7mAk4zX7k1WL9aEDnsBAWGH8NYJQSSgv4xe6PoxFLLFu95d6TuQRut2W6nBGvKrVZsVNBwMh1DnW8bpBaV7cHhjHkatGW7kyea8CjydUFrLa1B4vwZyQ2Fc71ep8Esng4bDB47fuXU42d63E8qexmaT1rYt7Db2CjCcrWKpaqhH4GuzYFkq6QWev1vrQBXeGhYQRXBhzVMoNVhw7VSy1qLJpSCgcYReUw5Q3yroiP", + "stackHeight": 3 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy invoke [1]", + "Program log: Instruction: CreateCompressedPda", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [2]", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [3]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 32088 of 856915 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 155975 of 980764 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy consumed 175708 of 999850 compute units", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 175858 + }, + "blockTime": 1746055765 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_address_transactions/4i72rF1xYCn1GNqJfBaLd27dno31b2TBGcTpies9fMTowcvyKoE6y458CLW7q5MRyA4vvHG9wfwbhM4tqkQW4XVN b/tests/data/transactions/batched_address_transactions/4i72rF1xYCn1GNqJfBaLd27dno31b2TBGcTpies9fMTowcvyKoE6y458CLW7q5MRyA4vvHG9wfwbhM4tqkQW4XVN new file mode 100644 index 00000000..6f94fc4c --- /dev/null +++ b/tests/data/transactions/batched_address_transactions/4i72rF1xYCn1GNqJfBaLd27dno31b2TBGcTpies9fMTowcvyKoE6y458CLW7q5MRyA4vvHG9wfwbhM4tqkQW4XVN @@ -0,0 +1,126 @@ +{ + "slot": 112, + "transaction": [ + "Abl/XaWtBD1Ak8N7H7NVOLMYAqAQq1RIj2u6bCrHJxRZzPa1xlH38cMQrbxASTkxlAPhdQ1xrocY7Tl+N7iZQQ0BAAkMlJweADw/IvfAeASqIJXdkEr0tY4lxcSIn8RlFcI4owENAckoq0XTZVlaNOh3F/uwAIoZ0i8FLJ2h+YjEfFfeOs/WpQaYLjyBdiAbgERJR/oGU7DHmYztCzftA7PyiiUMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E1Z6byxrTwcML2wmbOqw6yP5L52ofqLdMs3HqZb9jnGL1/80cujK4wPMl27m4TnIKo8EH53W767jgEzuUspZD8vuzKHUQXK6FtbREdgftv+FFJ7+0I5EcpAQjv9FSeiZ1XCtxP0FZA3Pmy9AAXay8bCKRvWzhdwXCOvTWHDiGM7QCBAAFAkBCDwAJCwAFBgsIBwkKAwECzQHl6s6C/v8pEAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBIW+o1TVkBfx9wwk1gD0gKL7lgXufex8L396jZWyJ+EIsU2fBbyvLpOUlZbeGj2VimERqt2b5kk3LHh4NKw66KgXyymbHkVExDYmz8n7K0uirPeeWFygKOerpnPJMIBcjBKTLPLwYXt1R9WE3YHY0fZqsyXUbnQS1WrjyfE9yN2pHLAh72vAXxP0trzECFod0wR5eoB0TAAhCgGqcSrMDrgEBAAD/", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999342057, + 9496563260, + 290419203, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "postBalances": [ + 99999326756, + 9496568560, + 290424204, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 5, + "accounts": [ + 0, + 10, + 8, + 7, + 11, + 6, + 9, + 5, + 5, + 3, + 5, + 1, + 2 + ], + "data": "KWv8WR8JeWsurSTFu6AGcKfofzZVfzrBDaEYSxShEki1wQ7tyneZJDEGcoccwVUjhH7tyBm7ESXiKSqfcjQbE2sVfb3tAafQyUoX7dkM5oz8d8z72ndBFFSGX26kh9DkJ3Mo35FwhahcX1ZEmU2ExJaZNzdgjCiVX8BmRkF7kVUJzy5QH1DXgzJwJ4UEnAYS5akqN5CcwAGgeFBH4MAkYATpDrpsfmndAhjDNoTQ8p7ErvQ9dZiSPKm2z2ckUHTNoNBwx7VCpXVufxWRVx7pCiWznXriT9nvpDsdYBn6pXBMYsCtTjZ4gVQCBamP8RVaBRaF5hdXNmpvUaFGEFZSfH6gaY5qLPq2c67jcGG68YYwZ6WxnKmef9kBhoiRNmHtgVs37xVgNrrvgpJ8e43BNzo13dn7kJBWUdP1GqW8iybQy1FhDX6ZUVeJNvVPmB8rm9SyVVGbQcsiPfQZkTgQgM3Yca8uwyh1uULAcgu7bnJv2cHyqgkSm4M3NbUW6LkX", + "stackHeight": 2 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4WyeHbGaYB4b", + "stackHeight": 3 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 2 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 3 + }, + { + "programIdIndex": 6, + "accounts": [ + 11, + 8, + 2, + 1 + ], + "data": "HDtpqY3uCYv8VK5FAXvJVKJiyeFUY1KJsHnwwLbivMrxEE5JmPBPHoCLNUJzwdQDk68HHfENX6qwJBpSz1WSauRRKBSTpTBfzEo61mxPggmvvVYUKUw3vPKpgee7ADaX4UdFMAxRTXxCgCMmrY1LGvoXCQcRQgpURQj9SezFywoimwexbyEv48AgziGZKYxvyNWz7FX8W7aS2dGPxB1fghuh6WnAU2yUZo922yfBVuRTKem1NRA1T3mAtmTzRMaApor1bFFfQmjgCZfHWq8kdSvwuFt3htfdhdKzUAhMECh9CMhFNs6KgiQRzcmdUkhq8V63C7yAbQ3iBCQv6VsVvn2AQbyKPKBd3ra6pdtAsaDr7arrhu6EGt57hjdEfhKzWSHMy2RXyn5zJ6s", + "stackHeight": 3 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy invoke [1]", + "Program log: Instruction: CreateCompressedPda", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [2]", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [3]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 32046 of 856915 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 155933 of 980764 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy consumed 175666 of 999850 compute units", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 175816 + }, + "blockTime": 1746055804 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_address_transactions/4nzEKjYGGbuV5LqJ7Ewk3diBTfDu6PEV6Ts1dicC3GzwYAk67rwTx74DYiVV2fD9vpkiGxfJLvkvV84Loeu554EG b/tests/data/transactions/batched_address_transactions/4nzEKjYGGbuV5LqJ7Ewk3diBTfDu6PEV6Ts1dicC3GzwYAk67rwTx74DYiVV2fD9vpkiGxfJLvkvV84Loeu554EG new file mode 100644 index 00000000..166725ea --- /dev/null +++ b/tests/data/transactions/batched_address_transactions/4nzEKjYGGbuV5LqJ7Ewk3diBTfDu6PEV6Ts1dicC3GzwYAk67rwTx74DYiVV2fD9vpkiGxfJLvkvV84Loeu554EG @@ -0,0 +1,126 @@ +{ + "slot": 116, + "transaction": [ + "Ab21TFahqbOuptpnRKS2z0brWEoYja45JoTe74KE1btuHbhrCYkBOBDRY2O9z/qLg9HIIL/oXrZuv2CwGoRdAw0BAAkMlJweADw/IvfAeASqIJXdkEr0tY4lxcSIn8RlFcI4owENAckoq0XTZVlaNOh3F/uwAIoZ0i8FLJ2h+YjEfFfeOs/WpQaYLjyBdiAbgERJR/oGU7DHmYztCzftA7PyiiUMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E1Z6byxrTwcML2wmbOqw6yP5L52ofqLdMs3HqZb9jnGL1/80cujK4wPMl27m4TnIKo8EH53W767jgEzuUspZD8vuzKHUQXK6FtbREdgftv+FFJ7+0I5EcpAQjv9FSeiZ1L7M/dgb//EBhJViv9z2kz6pXWhMjcjIw1kwknOVn+OQCBAAFAkBCDwAJCwAFBgsIBwkKAwECzQHl6s6C/v8pEAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBr/OkNooYeOKpHryM0MsWGRDUOVXm18sUSZ3OkYABiI8U4bPdrR42hxtK6eHJLJw2+3798ISmlEZmBsImoqDZSRpAKMocTNtbg1vvKrWmtnJ/F/y2KdYqJ3MghD4scBr6LwIhSmfZjjdI7MjWHUrYOGRRU04boQspDIe3IaMvi+L5upKmDo3KfF4AsTF0kfQVi5xKinLPCx9NkY9Q6nFHHQEBAAD/", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999311455, + 9496573860, + 290429205, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "postBalances": [ + 99999296154, + 9496579160, + 290434206, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 5, + "accounts": [ + 0, + 10, + 8, + 7, + 11, + 6, + 9, + 5, + 5, + 3, + 5, + 1, + 2 + ], + "data": "KWv8WR8JeWsurSTFu8eK3MpceNazgBPggF8jQ2tHNsncfzY1eDYkpxRP5oTU3f55vkR75B9nBp3bPqjRoi46MGK6Q2aZwJng6XGCtqnjF2cpYZxcaVmsg75vHcHajn3JzkPQiTSBogpxdnkPSmg31PxHrFGKsUrzd8NRujSrQmxeauqFSkSrqpntiGFo9DU7RYNExRJBRcEyeJk1iBCr7YvJY4e176TgGrtFfcr4aaknNbYUgeCQnvnj1cbbHNTQGBiV7z7G4s45sNwzEvCe4MSt48hEFoYL1AcY7tnHhPx8VvYW9thUoDShZEdqQnXFJNj3wKfxMbnr5wJsWFXfEpKMvsRqa6RiVyETA8u3UNszHnYTYfPuy13MQmf4kDq8QTF7RXUeV9EKoKCV1EabwHJGxRQe7deDUQb7pS3mXMGYDDSVEHsX6CiWVuBTje8T9iZyqM8SYgcp58mzoePaXVKiVKEaFRSBZMY993iBsfDcErBNhX7DjJsKJ7wgLzDV", + "stackHeight": 2 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4WyeHbGaYB4b", + "stackHeight": 3 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 2 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 3 + }, + { + "programIdIndex": 6, + "accounts": [ + 11, + 8, + 2, + 1 + ], + "data": "HDtpqY3uCYv8VK5FAXvJVKJiyeFUY1KJsHnwwLbivMrxEE5JmPBPHoCLNUJzwdQDk68HHfEQQjzSMYsEnv1pq5i4hkvJKEuaL7fDP9bmGSpmLfFbbEEy4jTXZv1jQpGcuuy887d5QdZW9XsqFFqrtigFKiqVHGC9mpHd622XkxGy6zoGD1fWjUoYNktLoDe6MmiQ1PDNBVuDF5mEHTAuDFfYD2FGPFh3JCvGtfdHAD4FxzJ2VewaevABFJaXY3aAy42dh4QFHDrTCC4xDTj77Ht2PgbdQSpdmcqxSSVc3wFcYe9cwRJmY4wqUrE6zmKqJH1kjoHyuqCrq851Ma361SyiYwkNFrr1MxMpCwsQauBdyiF8MsSUDts6WuNPUt8ehdFDufsY7NqpMju", + "stackHeight": 3 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy invoke [1]", + "Program log: Instruction: CreateCompressedPda", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [2]", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [3]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 32046 of 856915 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 155933 of 980764 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy consumed 175666 of 999850 compute units", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 175816 + }, + "blockTime": 1746055806 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_address_transactions/4o6BQVTmYBWxVqqzF1mb1bJ83aMfMH1QBgnj2HsqPhj9AHDXMnVeMxNq8AeSWNdedbPDYHrVdUnXm6LvTgmYBPAg b/tests/data/transactions/batched_address_transactions/4o6BQVTmYBWxVqqzF1mb1bJ83aMfMH1QBgnj2HsqPhj9AHDXMnVeMxNq8AeSWNdedbPDYHrVdUnXm6LvTgmYBPAg new file mode 100644 index 00000000..f2b8b99e --- /dev/null +++ b/tests/data/transactions/batched_address_transactions/4o6BQVTmYBWxVqqzF1mb1bJ83aMfMH1QBgnj2HsqPhj9AHDXMnVeMxNq8AeSWNdedbPDYHrVdUnXm6LvTgmYBPAg @@ -0,0 +1,126 @@ +{ + "slot": 73, + "transaction": [ + "Ab3L8cYQmlUmzPOF/ZLpaRZXWhIcchjCnCa3K9/eCuz3MLHfuwlPTCNyuhil2JmQKcww+2hWi/cdlOqpQzC1cQkBAAkMlJweADw/IvfAeASqIJXdkEr0tY4lxcSIn8RlFcI4owENAckoq0XTZVlaNOh3F/uwAIoZ0i8FLJ2h+YjEfFfeOs/WpQaYLjyBdiAbgERJR/oGU7DHmYztCzftA7PyiiUMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E1Z6byxrTwcML2wmbOqw6yP5L52ofqLdMs3HqZb9jnGL1/80cujK4wPMl27m4TnIKo8EH53W767jgEzuUspZD8vuzKHUQXK6FtbREdgftv+FFJ7+0I5EcpAQjv9FSeiZ1H7QXaqOPj7Sohjnc2km/bGPSbDWrLRXbC34FcOefFlcCBAAFAkBCDwAJCwAFBgsIBwkKAwECzQHl6s6C/v8pEAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBlbu+i4D5W2j+CHO4MiazI1+TAgajuHjyhCNpubOA+J8QAT5OI0gvIjeUgPhykshNTpeFZerhiUrdWm0UOuxPnQTwccdRM0wlC6tHS4HtX+wce+4HmFVvbC98s360A6WsLPk4C/r1ifzdcJ4+ie6bqnFYHp9RLfomb70beo6FjtE1/8HOHHv9+azhvJNrix3CdhJ/Si9qhPsnSep4AOWdUQEBAAD/", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999693980, + 9496441360, + 290304180, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "postBalances": [ + 99999678679, + 9496446660, + 290309181, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 5, + "accounts": [ + 0, + 10, + 8, + 7, + 11, + 6, + 9, + 5, + 5, + 3, + 5, + 1, + 2 + ], + "data": "KWv8WR8JeWsurSTFu8Bp6DFkdGG4KGPHXqtf23XZP5yoFbpU6iSH8CDxZ8oyQmNfU1mtuGX5JjKJps5BfYQtxXPHsPc9NCGKqWr5LE6onGWTK1Y3vtibrh64G7FnF9B3uK3dXLwio4n5zgGmaDHAsqopZKawUTQgcWNFrryKeVmgo913grw7HfXZV86uWTskqcCaQNtDuoSRkV2V4qfiN5rhpKVXu4dfmUdPekPNMFTH3xdFXgBy15ioe4a9oGPJXmyZxggoUKkETfdc4nhrussYv7FRaKWC3qHcXuBydtzVQ9WuJBJqE95UVnznGGGkSq3mL9UVFqtMhMHd9Lo4oKDw7AVMJYjHu1pU4fe8V7XNcA9m9d4EMMzAFY6FiDmGWjTkh4GCi693PH8xLj8M6LYR62HsRUFWqnud8kGysy39DQ3AKkhcYNFHpE66nzc4V4teWGinsnwzWqP8CFnRfn6bmK7e7HxnsuhV27hb2Bbas94ymG4XtHtYR6ivfQMV", + "stackHeight": 2 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4WyeHbGaYB4b", + "stackHeight": 3 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 2 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 3 + }, + { + "programIdIndex": 6, + "accounts": [ + 11, + 8, + 2, + 1 + ], + "data": "HDtpqY3uCYv8VK5FAXvJVKJiyeFUY1KJsHnwwLbivMrxEE5JmPBPHoCLNUJzwdQDk68HHfENiBJJnyMAhp91KE8C9TjiGAHDChLV8V1xbEFJGZ1jNj62c6WsHp7iwuJJCCYA4aRP9tE7JSkbipmnQcKS9uqhKczT6X1HF7zsWVMiiipJQHyGYXeADGp6WxNas1zEDDyJKmFryDhvhrMtN72a2TxCjysAvrtPAS3nPobysaZoKbVsGpifkDtcz29vcKWEzh6egCyMWwYcLkAqVEFmeozQaLvTqppgx9ksEhbJHCbejmas9oavgrijc1ZjsWPjBtm7vVyt2xid6pHy1LR5p6KFAd2erwaiwqJTwQp1UBRb57ToChPxpTLXtuLR1pUPAcE8sMVb8sZ", + "stackHeight": 3 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy invoke [1]", + "Program log: Instruction: CreateCompressedPda", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [2]", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [3]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 31244 of 856915 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 155131 of 980764 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy consumed 174864 of 999850 compute units", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 175014 + }, + "blockTime": 1746055783 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_address_transactions/4up8YnW3J7eBvtiUykPftyDTrn6MhEQuPWRxQZFrs6RqSgzegXKsuJcFp1g8XGDs1svgfC65UsWTJ6vQ1sjhDqYd b/tests/data/transactions/batched_address_transactions/4up8YnW3J7eBvtiUykPftyDTrn6MhEQuPWRxQZFrs6RqSgzegXKsuJcFp1g8XGDs1svgfC65UsWTJ6vQ1sjhDqYd new file mode 100644 index 00000000..60a50a02 --- /dev/null +++ b/tests/data/transactions/batched_address_transactions/4up8YnW3J7eBvtiUykPftyDTrn6MhEQuPWRxQZFrs6RqSgzegXKsuJcFp1g8XGDs1svgfC65UsWTJ6vQ1sjhDqYd @@ -0,0 +1,84 @@ +{ + "slot": 135, + "transaction": [ + "AcOYNYhR2YtlX/ZipuFGgvW7jIZIekQHph/I0bLPw1VBjKoNQ9zvPv22dx3QNRFXAOXCKFwxfDahVkjsaTBZ3AoBAAYJzLjCFXXnWj51s6K1RyQiLzHD11pzA0VK0kuivz8zqswhWc53yo4Lew6JOci1vTttbJcOTjfIMGIiy5vpCKZaRM/WpQaYLjyBdiAbgERJR/oGU7DHmYztCzftA7PyiiUMAwZGb+UhFzL/7K26csOb57yM5bvF9xJrLEObOkAAAAAFDSsTeVE2hc8C8rX9UpG9lZsrBgqlJepbNIE7Hbm3bgksNuwi9ReDAP20Sqpq/8/wpG4cvGQcDj7QnaE7nvUIC7wPwLtHyi90xBEulKsTz6PGNOXcF+rLA80aI81+eHwQpl591jkE+Dg60Dze4Hi5FNhzGIA7FTWAcNeS4Fz957/QmmoHZdEI20ACv+9MyGVTFGij2iz8yvlzRZ4iyBL0ZY8ZuRb7dxVSrvQC0ZI2kalLdGE8EoACCInPFZNwNSMCAwAFAkBCDwAEBwEABwgFBgKtAat/8kF9vXl1/6AAAAAT76ICIYkJjUPHP1gMLqjL00yUeFluH/igSrX0T7iFCCIcqR/L6UvC4Tai4K2T8ghTFGuHzYq028tky4TId0a0LRLl7SLcGqdNKH9cDd2VBPO6nwhckxvCQiqQovgWrfAKBSLw6kWqn6WPXUVDano48GyjvagNMMHV6NX6u+8R+Z9t6kPCPMmkMrK0gYkr9EDRvuFNLN/xMgTtouANBXn1", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999985000, + 2735280, + 290454210, + 1, + 1141440, + 1141440, + 1141440, + 0, + 1614720 + ], + "postBalances": [ + 99999980000, + 2735280, + 290454210, + 1, + 1141440, + 1141440, + 1141440, + 0, + 1614720 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 5, + "accounts": [ + 7, + 8, + 6, + 2 + ], + "data": "SBkMhczQ9esLdkDPW7tMUGm62SnaJtfkC45NYSfCfr8M4nr7i4yRZaVGk7erLcHeTzqfmPnMpLxXymM1wvLg72i53iKS7tDtj38hts7FJmU1ednmNqLEwF4PLTqnMEEE2cG2RxKTxpS9JNmkgJavq2FZxz2M1rKhugRgdzRJQrSvk9wiSfoUq9qGo8SAPXxL3CgJSvp81ueJiFLV1sWdvxtwH6cjuvKeDfXaB7CuwbS", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [], + "data": "3Q747BoHqHsBxkNHj5NHEZnP1TajcfmzuWaVnRBAGpdvhUvpLwjkwwa66zDdbmeSrgoQw4GwsiMjmkwLHpjRgd7gKmkncGxpXGrdePZxMtm8wWFhZ9A5yktynm8nyXdjjcq9aeUaXJyC8feo94V2P8XPENGSJ4Yw1", + "stackHeight": 3 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program Lighton6oQpVkeewmo2mcPTQQp7kYHr4fWpAgJyEmDX invoke [1]", + "Program log: Instruction: BatchUpdateAddressTree", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: BatchUpdateAddressTree", + "Program noopb9bkMVfRPU8AsbpTUg8AQkHtKwMYZiFUjNRtMmV invoke [3]", + "Program noopb9bkMVfRPU8AsbpTUg8AQkHtKwMYZiFUjNRtMmV consumed 38 of 881758 compute units", + "Program noopb9bkMVfRPU8AsbpTUg8AQkHtKwMYZiFUjNRtMmV success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 102385 of 983946 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program Lighton6oQpVkeewmo2mcPTQQp7kYHr4fWpAgJyEmDX consumed 120212 of 999850 compute units", + "Program Lighton6oQpVkeewmo2mcPTQQp7kYHr4fWpAgJyEmDX success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 120362 + }, + "blockTime": 1746055816 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_address_transactions/4xtjise6WXFFmUmetxQRpZiaF1Rbu8dkoTEJgVFmFAuQor4Capyo5crP5zvUAWzWQybxvgJQihJBZGQ3CjreREGP b/tests/data/transactions/batched_address_transactions/4xtjise6WXFFmUmetxQRpZiaF1Rbu8dkoTEJgVFmFAuQor4Capyo5crP5zvUAWzWQybxvgJQihJBZGQ3CjreREGP new file mode 100644 index 00000000..c71158be --- /dev/null +++ b/tests/data/transactions/batched_address_transactions/4xtjise6WXFFmUmetxQRpZiaF1Rbu8dkoTEJgVFmFAuQor4Capyo5crP5zvUAWzWQybxvgJQihJBZGQ3CjreREGP @@ -0,0 +1,126 @@ +{ + "slot": 46, + "transaction": [ + "AcZACWARZ2rGAtdO06AIEONeWznb7lW+ZWEknsaQZHgiLE0xwBeYo2hsuFdBH3wLZsnWGHyVUVDnb621GrJflwABAAkMlJweADw/IvfAeASqIJXdkEr0tY4lxcSIn8RlFcI4owENAckoq0XTZVlaNOh3F/uwAIoZ0i8FLJ2h+YjEfFfeOs/WpQaYLjyBdiAbgERJR/oGU7DHmYztCzftA7PyiiUMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E1Z6byxrTwcML2wmbOqw6yP5L52ofqLdMs3HqZb9jnGL1/80cujK4wPMl27m4TnIKo8EH53W767jgEzuUspZD8vuzKHUQXK6FtbREdgftv+FFJ7+0I5EcpAQjv9FSeiZ1l8Mn6skLoUSFie+nq+omIJvhxqFlje4x6zJ0xf1iQq8CBAAFAkBCDwAJCwAFBgsIBwkKAwECzQHl6s6C/v8pEAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBCcOFfakU2czbE+MMkXVhN0uRintFFTRq5RzIYImjMXYjLWBZa6hWDEuJ0J4OWB2jSRnhbh/u6M+1bwtkay93biw5sJH96rXWfWna5KvaudEl/TiRbmZjswSMq649Y9ytBIRYYdjQQ7krSKZsbSmhCIZnStbFEymsWMW3A7gRLGmxGOpVYWJNpsxTe67VbmAvk4yATif4MZZhDIgoxyP3mAEBAAD/", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999923495, + 9496361860, + 290229165, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "postBalances": [ + 99999908194, + 9496367160, + 290234166, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 5, + "accounts": [ + 0, + 10, + 8, + 7, + 11, + 6, + 9, + 5, + 5, + 3, + 5, + 1, + 2 + ], + "data": "KWv8WR8JeWsurSTFu5kLuRaNuQaEB4pssmLRNhLiPwcEFtULM3t4FmGUmaonpxQ54nkpk5drVkFuJhucukJ2RGrmGaxtJofTZFJ3X45Nu2q5ute8Kir4UCKKjYuyJCAHgV1qKGepWmrKa8wd8EX25nframw7HWMpk8kgYsLARcvUD1LWAm6o8NwN3HeewP3VHrWpegGwUdLMZnyxURii5eoQo9Ab9ZYjPoXENLz5L6KeoLZn3trM2pcA34yivBbVFrZtBcBQsyanxrhgAPc1ZTPtqx9WSPnrreAhyuTy7UuCCrjrr3mJsP4p97SLBkrhFo6mixC41GoH3affSpAMmorRMCivMkfrzGEcMz1w4QsSV31Syi1Ns1BdirPnAhV6K8DXPhybjhE2uCiByE7UGY1bA3pxeZSAuWh2Z6dgg1LZHYi2QkkHT2x4gpKPYQgFE4f6i5ZFqo7WRVcpMnV8MkFsGDgAUSukYVf5jub6MXSqKJu3zVzjCjbDzfrsAoFu", + "stackHeight": 2 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4WyeHbGaYB4b", + "stackHeight": 3 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 2 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 3 + }, + { + "programIdIndex": 6, + "accounts": [ + 11, + 8, + 2, + 1 + ], + "data": "HDtpqY3uCYv8VK5FAXvJVKJiyeFUY1KJsHnwwLbivMrxEE5JmPBPHoCLNUJzwdQDk68HHfEPBQAV7iwjjN6VrvNcc6CkjqZy6MDLZDdJvPyS6wNZdwx2TjDRGq1ChxY6Jj3y5K9hzKVvt3LaZh3F3U7oFnMQFQ98ABxcPSuQpoX8mpWW6z5ZjrvyupMM397hDVvJqenqPE6mYZVowVefrjQEuQvVL52WD1uwfB93t52tEkAZi1Fhn8fcpui3P5HUDJu8RhxSTtApkkpYrgbqgTTTsVzzAF9CZ8ygaaLnw7fU2Ht6SmTZ9oUsMGKtMNHnQWQydJjkWkuuzmjKbbGefKoZKYPcLU515AkVLYVdyqeCKHPErkaG61AEkAPGBJ8Ax4E29cwDFHxe8B9", + "stackHeight": 3 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy invoke [1]", + "Program log: Instruction: CreateCompressedPda", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [2]", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [3]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 32088 of 856915 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 155975 of 980764 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy consumed 175708 of 999850 compute units", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 175858 + }, + "blockTime": 1746055767 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_address_transactions/4z7wWPXwbKduPieGnHPLyRDMhzPRoSNiJAyYHw6gLyWogiZwDWrB29fVFcYYMRq62HtcZZjrbLZ2BezzpQj9yXv9 b/tests/data/transactions/batched_address_transactions/4z7wWPXwbKduPieGnHPLyRDMhzPRoSNiJAyYHw6gLyWogiZwDWrB29fVFcYYMRq62HtcZZjrbLZ2BezzpQj9yXv9 new file mode 100644 index 00000000..f9fd3a80 --- /dev/null +++ b/tests/data/transactions/batched_address_transactions/4z7wWPXwbKduPieGnHPLyRDMhzPRoSNiJAyYHw6gLyWogiZwDWrB29fVFcYYMRq62HtcZZjrbLZ2BezzpQj9yXv9 @@ -0,0 +1,126 @@ +{ + "slot": 39, + "transaction": [ + "AcdPDnHoh9Wwk//9rZ17lVK6kfEQgRE74dcJbZvFr2SSjUUJZQHTk44uuF1fjHyS2Jz3mGEIeRwylpGn87hQWAIBAAkMlJweADw/IvfAeASqIJXdkEr0tY4lxcSIn8RlFcI4owENAckoq0XTZVlaNOh3F/uwAIoZ0i8FLJ2h+YjEfFfeOs/WpQaYLjyBdiAbgERJR/oGU7DHmYztCzftA7PyiiUMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E1Z6byxrTwcML2wmbOqw6yP5L52ofqLdMs3HqZb9jnGL1/80cujK4wPMl27m4TnIKo8EH53W767jgEzuUspZD8vuzKHUQXK6FtbREdgftv+FFJ7+0I5EcpAQjv9FSeiZ1IWuwPIQMRyBHKNt06DKeWfqWu/FR5+nrwlwbSAEVtoQCBAAFAkBCDwAJCwAFBgsIBwkKAwECzQHl6s6C/v8pEAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBI0d+H7bfS69T1kV6ACLQ4HRhaAiB2TYpddPRsnkcmiSDL2XlNrs279lu4GegS6ADMkPV5gfhN+qGZxV6F6skjhlg1xPAVTFEEMvyh4Oce2asVyHm0yCNbCI011nmCReGgV2aInrK21m5spMQePoZP332hS4PDO1tCEBSamDOmXp/snuUFgLQHRFUIhETT8carK5U4359AHu7e1Xv8GKihAEBAAD/", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 100000000000, + 9496335360, + 290204160, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "postBalances": [ + 99999984699, + 9496340660, + 290209161, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 5, + "accounts": [ + 0, + 10, + 8, + 7, + 11, + 6, + 9, + 5, + 5, + 3, + 5, + 1, + 2 + ], + "data": "KWv8WR8JeWsurSTFu6C8eumhDKzYHsrJa3oqpdoWYP5QRQ8i1Skw6G1S4Ft7woBHv1FkMt626TebVnjQWQypxgeTQDHmsH5cwW4X2CY811vgCqgLn13yAta1dt4Wn2R1LxyZZstFbgSr1GznymUTw6KGR3C6KQ9v4GFrBSJmDnCdT51BNjLxZjpDjLxtsQ4bDZgwUTkZvHhtYWuATcgknmYbuM2P52sSJEthzR4rsFL59LVQMC2jcBRKfvVL4w7TsTtxh1fNAcFZC48AdbCELixNPHK9JSX3ucWqr6UNn6SM5rgtzkbY4weBYa88LAWUM44ZKexMRERA3tVoBJYnbKvCjx8G5fUDzHYcqWLwyMryZr4ooB4ZXeVZcYD9vxTQyTwyu8HevapYmV5r3dycSPboUy8zaeSNmX4pDBGzjZnG3unMJjqpJGkVHy3AWrbbDyEGH33Y7thxQhJ4KdeWP1WRVC9jkUb3TSKPT8ovS6vviFMtLDu8UZjtcpvwCMju", + "stackHeight": 2 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4WyeHbGaYB4b", + "stackHeight": 3 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 2 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 3 + }, + { + "programIdIndex": 6, + "accounts": [ + 11, + 8, + 2, + 1 + ], + "data": "HDtpqY3uCYv8VK5FAXvJVKJiyeFUY1KJsHnwwLbivMrxEE5JmPBPHoCLNUJzwdQDk68HHfEPEmhJuF94RCxsbX6shU8NiEMVJy1nHAM3hV1diKBNkk6eK1deb4cfuJRdyBWSvvVodTHf2M3D7f44EiSQdMF7WkWHA7U7UmbV7NovjDr3SDebb2U7aqLr5noV7EHhP2qNh5G4KARFrF7TKrwckW2Ppv4BHDuSwDtz2W7L2xQnRo52PPJ2wa9K6KJ6uieRNsyBcy7YL7QiC4zLrq1FoPfLSAaE7noiXy7snKLwWTi2hZ2FzZNEuFrWtZVcVeRhKiyJemKFmnrB6qgaDuEXD7w9GgAxcRdiGt5N31Pu9TNKiyvJwzcKXa1uEa88fW9im3vSmToitu5", + "stackHeight": 3 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy invoke [1]", + "Program log: Instruction: CreateCompressedPda", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [2]", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [3]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 31290 of 856915 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 155177 of 980764 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy consumed 174910 of 999850 compute units", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 175060 + }, + "blockTime": 1746055763 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_address_transactions/55hjNcSP1pud2VrdYhsdoDdc3PHsfATsxQkZnJTP4UY4gn4a5E1f7Rh3cUNhZAgsix6SkLbPWxrQiz8QwXvqQ65r b/tests/data/transactions/batched_address_transactions/55hjNcSP1pud2VrdYhsdoDdc3PHsfATsxQkZnJTP4UY4gn4a5E1f7Rh3cUNhZAgsix6SkLbPWxrQiz8QwXvqQ65r new file mode 100644 index 00000000..f9357ea5 --- /dev/null +++ b/tests/data/transactions/batched_address_transactions/55hjNcSP1pud2VrdYhsdoDdc3PHsfATsxQkZnJTP4UY4gn4a5E1f7Rh3cUNhZAgsix6SkLbPWxrQiz8QwXvqQ65r @@ -0,0 +1,126 @@ +{ + "slot": 107, + "transaction": [ + "Acwff0+xLGegfgGkxQUBQNoDeW0zC2LokMnXkrkdwwJ/G5b5WjS/X8B1Vntg4kD2E0fGue/D9tKqTe8JTqqMxQUBAAkMlJweADw/IvfAeASqIJXdkEr0tY4lxcSIn8RlFcI4owENAckoq0XTZVlaNOh3F/uwAIoZ0i8FLJ2h+YjEfFfeOs/WpQaYLjyBdiAbgERJR/oGU7DHmYztCzftA7PyiiUMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E1Z6byxrTwcML2wmbOqw6yP5L52ofqLdMs3HqZb9jnGL1/80cujK4wPMl27m4TnIKo8EH53W767jgEzuUspZD8vuzKHUQXK6FtbREdgftv+FFJ7+0I5EcpAQjv9FSeiZ10oJT4pGd6dI/gGTH7ZLcK6IPpbx1Lku87exwYjIobTsCBAAFAkBCDwAJCwAFBgsIBwkKAwECzQHl6s6C/v8pEAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBm4jrXgvn9NPb9uSRSLy93Xrob9IF2IueqvIlp0q2rTaNSIrA4PfBgYj2+vdzfsO2DYmu/Z5ctyI9X888PkIxgxCIquEZoIh+9rlTkeK1ekiV6ps9ZDEqw8JsiToMZFUqKrzhCrRA6zZZuquZsLpj0NCkgxG2KyNO91hR0/RrpGAcnL6dmnlNvcqqH6crzpmptDTg1n2JZyUqH21wehQzEwEBAAD/", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999387960, + 9496547360, + 290404200, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "postBalances": [ + 99999372659, + 9496552660, + 290409201, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 5, + "accounts": [ + 0, + 10, + 8, + 7, + 11, + 6, + 9, + 5, + 5, + 3, + 5, + 1, + 2 + ], + "data": "KWv8WR8JeWsurSTFu8HgBMzWZfZNdy9g5oV7vFcBjJ6jmXUx2oJFABRAYHauPBVfGWuJFdwGMjiCnkqpmKCif7v9Hcow4WZ1RMzvVCvdkDqvDvUHVrX7HmgBW6qpXb8FRgiSr9Kn12XCHFdizTfoGu2TWnscY8n7DfoCeQPV48HCaCGTpnkLWiQdZ7coXXyBbuYW1LkgY6LXR1XbbLkt4EyeR7fH7inctkpbVxFSR8XX521vbuSLXnqE3Ye6Upf2QWHvCFEr71EdMKFtYdnPgTypBBCYg1C4vxco1i6kfpURKQtjdbooneBCkLVBVpvVhBaUZZF6KXaS4ufZcJVunzYUK3yy7LKXDiwv5yjMvVhohhGPYzk8grTy7tFWNh4Pbcom36W6btZHryvrvhoQrzGDi4rfCQ8CBT1P5GkgTLAHh6KbqU8UxFbiFjbAn3rC2p5TnrmJc7zentLBesXtuf8fceYZnSc9gpD5ctkp8gh3F1phVYnGMHkWzhmCenUP", + "stackHeight": 2 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4WyeHbGaYB4b", + "stackHeight": 3 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 2 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 3 + }, + { + "programIdIndex": 6, + "accounts": [ + 11, + 8, + 2, + 1 + ], + "data": "HDtpqY3uCYv8VK5FAXvJVKJiyeFUY1KJsHnwwLbivMrxEE5JmPBPHoCLNUJzwdQDk68HHfENMEuNhNY7W9c5Jj1TJMZ7zaKXnLDDx6Pu69RwZJ2mRjf27s8tYDoTHQyVXnp7Rw5skzFjVQWTBjMcZMpzWaGDJT3we1tD5rLTYjPj69SuMn8TEeyWTjN8AhVV5aYdMaSyumrWX4RCn7HQZrBAxxVhGXMzb923Sm6YvKnDKWu8TFaSZV1xHFkSFHXYYPgemr6G1gVS88Xto4oUECabcBGyKdcLj7pD9F5TvnXGzi6Hj7bWn8HDUSfPCAEurETwhSoorE1J1ZxxWyLB3mEp9F2Uo6g2bZosMB455B9SicxrX5CVMH6DXxGfPWYKjtUJ5g6S6qNpozw", + "stackHeight": 3 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy invoke [1]", + "Program log: Instruction: CreateCompressedPda", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [2]", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [3]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 31244 of 856915 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 155131 of 980764 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy consumed 174864 of 999850 compute units", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 175014 + }, + "blockTime": 1746055802 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_address_transactions/58wDzwBQFz2V2LKADdB7GW1vHBE4rtRCKDEj4R5e5vZm1v2ri3LfiDwqMyp1GiLxGE5sJyxL81iHgEXbasqsuYR2 b/tests/data/transactions/batched_address_transactions/58wDzwBQFz2V2LKADdB7GW1vHBE4rtRCKDEj4R5e5vZm1v2ri3LfiDwqMyp1GiLxGE5sJyxL81iHgEXbasqsuYR2 new file mode 100644 index 00000000..e3444bb1 --- /dev/null +++ b/tests/data/transactions/batched_address_transactions/58wDzwBQFz2V2LKADdB7GW1vHBE4rtRCKDEj4R5e5vZm1v2ri3LfiDwqMyp1GiLxGE5sJyxL81iHgEXbasqsuYR2 @@ -0,0 +1,126 @@ +{ + "slot": 88, + "transaction": [ + "Ac7pJtaxTz4KrIcKyoJF3KyzyQrwU5Mkor//MPAHHRZjziysxjog6blilkOdMsJkoGDHoyCo7VmSX9C7K09l9Q0BAAkMlJweADw/IvfAeASqIJXdkEr0tY4lxcSIn8RlFcI4owENAckoq0XTZVlaNOh3F/uwAIoZ0i8FLJ2h+YjEfFfeOs/WpQaYLjyBdiAbgERJR/oGU7DHmYztCzftA7PyiiUMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E1Z6byxrTwcML2wmbOqw6yP5L52ofqLdMs3HqZb9jnGL1/80cujK4wPMl27m4TnIKo8EH53W767jgEzuUspZD8vuzKHUQXK6FtbREdgftv+FFJ7+0I5EcpAQjv9FSeiZ1SjJSyaP8SisNPv8dJoD/r3+GhZjChL9CxE/zWS1rfOACBAAFAkBCDwAJCwAFBgsIBwkKAwECzQHl6s6C/v8pEAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBDHibo8yzSvbUXkXxQCe8mXYn68u+gskDTMD3myZZhXorMSkFfAT62UfJTpq/fD7kXmBu7NHVub7KCbS0wol6rwMeFCoXIKR19lkAen2OJNpTXWMk5uK63aMFBSOB6hAJKyrnzfkPZHnCrp73MXtXm9T6sJaNqUWHoGFuQyk6j3t8EAKeFwdDSjP+KVyup9E/9o8IiMVaFHgs4+rDk4Tf9AEBAAD/", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999556271, + 9496489060, + 290349189, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "postBalances": [ + 99999540970, + 9496494360, + 290354190, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 5, + "accounts": [ + 0, + 10, + 8, + 7, + 11, + 6, + 9, + 5, + 5, + 3, + 5, + 1, + 2 + ], + "data": "KWv8WR8JeWsurSTFu5o5cZMrUEYeGm8erseD15FEN4ZeVVi2jDggS2Hn4NajyyHniAY4LWEvVHqQ7V3ohBHs2MwkDgZ1mmLBpXmT22Kge99hvSvATXqQukJxYmQWCqFNYqPhzd5i5E8R6mhoMG6E72jQ4hru4odt5aq5JE6n9t23RJaRKVxD7qn31CXjhanz3XteCYxCZDXrqioz2nDD189gbApYJUmMnuRvEJk5EPqqf9QgfwphvqysprXLvmvf6yRtFWmod1XiqHDc6yZQjsC5ixEVU1Axr1jhK3GSncksue5awmLVmYBtXNDXgs2yrNr2Xe5LraJfYpFsv4WRhac5dtef1Pwonq9XWTFiUsqNs2eZcHCyJgUz8x6EiNdhf2GL2JMeAbLR91yUoWQNmJbvxW74bm2PatLA2v96vjdn7HFg4XucLAMtB37yC8zT9UwtK99XZSxMVKVJaDaVraJn7DGAPoh76XDQs8qkVgPZdXsYJwKpdLRTmXCC6cKh", + "stackHeight": 2 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4WyeHbGaYB4b", + "stackHeight": 3 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 2 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 3 + }, + { + "programIdIndex": 6, + "accounts": [ + 11, + 8, + 2, + 1 + ], + "data": "HDtpqY3uCYv8VK5FAXvJVKJiyeFUY1KJsHnwwLbivMrxEE5JmPBPHoCLNUJzwdQDk68HHfEQrXwRdNotjkTpwjNUwpHT1avMfPuQLFpGUso7av5ppufeobApvWkNo85D1vFWDuLAkweXAsxN2NFtoFEhKKbJB6qxnrTnftKpf2UJP1LN7aBf6GL1fWQzsNNPpy6Te5UEbf8adoaYyLBpoHJQs4y5rwpKK2BNmJQ9zrAEtNrfPMo1GAZ8aww9SEBNHmwAHjsDNfYNwhRr4knmLoer2mNsF4K9mYpSbrBLSrh54Znw72KpUBdAV7zuX34Mo7pytzMD4kMmnhPGVb4TWVdNuvaLhs73L2TRG9Q3scTyjavysWFSMntBYxQ4YEKT8CoHJ9tU5v4JJYX", + "stackHeight": 3 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy invoke [1]", + "Program log: Instruction: CreateCompressedPda", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [2]", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [3]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 32058 of 856915 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 155945 of 980764 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy consumed 175678 of 999850 compute units", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 175828 + }, + "blockTime": 1746055792 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_address_transactions/5Ak2sBnv3srfpmLa7quZ9n3GPUR6zSPGVtAHn1KbMJTpNyukczwv7pawHYvxF4NfgeAHRG7hWcS2dECJugyf6EZ8 b/tests/data/transactions/batched_address_transactions/5Ak2sBnv3srfpmLa7quZ9n3GPUR6zSPGVtAHn1KbMJTpNyukczwv7pawHYvxF4NfgeAHRG7hWcS2dECJugyf6EZ8 new file mode 100644 index 00000000..1dd1d5ea --- /dev/null +++ b/tests/data/transactions/batched_address_transactions/5Ak2sBnv3srfpmLa7quZ9n3GPUR6zSPGVtAHn1KbMJTpNyukczwv7pawHYvxF4NfgeAHRG7hWcS2dECJugyf6EZ8 @@ -0,0 +1,126 @@ +{ + "slot": 91, + "transaction": [ + "AdB4FM3Tx/FR74GJ1tVNkvohzkOxIxHvP3HZ2+eyTA85JJynF+6icNkjs5/TEQNOIL9DF1yoXkBfZHGyxre9SQMBAAkMlJweADw/IvfAeASqIJXdkEr0tY4lxcSIn8RlFcI4owENAckoq0XTZVlaNOh3F/uwAIoZ0i8FLJ2h+YjEfFfeOs/WpQaYLjyBdiAbgERJR/oGU7DHmYztCzftA7PyiiUMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E1Z6byxrTwcML2wmbOqw6yP5L52ofqLdMs3HqZb9jnGL1/80cujK4wPMl27m4TnIKo8EH53W767jgEzuUspZD8vuzKHUQXK6FtbREdgftv+FFJ7+0I5EcpAQjv9FSeiZ1VmKjO0EpTZ6WhyC8MLZM/UE+hCK+XmwDcvGxE+JkkA8CBAAFAkBCDwAJCwAFBgsIBwkKAwECzQHl6s6C/v8pEAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBncMgxzEetCMR7MqHKsM5sriDnx8+Q3KjiVOjt9iN+7+JcZQMuW9SVqSkngPlEgNZ2ADm/46PYR5bwHFi2H7d8SllcxxtfoMDD03ME3qB2UCtzpIOM+4O5Y53NfoZg95vjawz8l9jLS7Ej/Q7DgyN7+XiqF5s9IgxNm4ai7yFYkHpgbN8eY609gQWhgW52wLGQMGADRwRoUflNriqkHkHxwEBAAD/", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999525669, + 9496499660, + 290359191, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "postBalances": [ + 99999510368, + 9496504960, + 290364192, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 5, + "accounts": [ + 0, + 10, + 8, + 7, + 11, + 6, + 9, + 5, + 5, + 3, + 5, + 1, + 2 + ], + "data": "KWv8WR8JeWsurSTFu8KvkWbVad3AHFP2ZHn3hXtnQhaYTrRX1m2FD2QMMpms3LrUu3CjWSz1n33pRRRdqMRfGy7GLGu7sbfwZsVEw9SQDySRHpXenj1qr9V5Rtu3b1oNWd5tYzmavgax1oswwTyPZfVt48BUsFfgmrH2YPmuoJxd8ixPddLMvLoJaXD4pcCUjmJ9byxFvbwJubvtmTdSpRXW6dy98BAY4yfrZy5eDEj4cyykW7y6mFqSLv4sQBxk2nsoodjzazsHkbNU63oxeYZZJtgXaeyJbBP1jAUVZn8PZWAHwj5mmeMdBpbEajCDZXGsQTmjeHZsi89MPrToLdLzvL1X9Yg8ZUUAiSBZkb2o1WbBvqXbzPEYsZjf1KhwnEnak59RnDoGEVzoQm1caKBvpMguxtupXAMiZbs7J4dBY2eWufKkNG4RycMh4PRu8PxdVmVyRX54Xv3r8H3VzARNqcf5E3UfZsGWLubrAgUjvUxxmHuiERNciPaRZAxf", + "stackHeight": 2 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4WyeHbGaYB4b", + "stackHeight": 3 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 2 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 3 + }, + { + "programIdIndex": 6, + "accounts": [ + 11, + 8, + 2, + 1 + ], + "data": "HDtpqY3uCYv8VK5FAXvJVKJiyeFUY1KJsHnwwLbivMrxEE5JmPBPHoCLNUJzwdQDk68HHfEQYJWNCZMd2FiavQg3BUvMrZKdGQQkJSMy5Ui1C94e4MdGTWHQtaufiKgQLdoXywtCJ5X5sdghY3cxYk4CTCyoRvNpTUmD9kyQxVhuPnmyba8LTo2wSH9snrLvCuR45HVicrrWzgcmvjB8uVFShrbbKcR83vsXjLxw8zohjB2mAHFrAz7sdu2JPEUR9Ar6Aqd5s76MYBYj36deNvoxkwuwjieiEV1ZF5Gtyee8E78nQJGPWLgEiprnnzpMG5K5natynPv61sajHDzJueSf2CL6CRxAVzbKGA6vX6ZBi3tpimtLQWT3T3gvtXN2VL7cpQXtY2ditKy", + "stackHeight": 3 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy invoke [1]", + "Program log: Instruction: CreateCompressedPda", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [2]", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [3]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 32025 of 856915 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 155912 of 980764 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy consumed 175645 of 999850 compute units", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 175795 + }, + "blockTime": 1746055794 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_address_transactions/5D1E7HWdUjjjRd2Yv37xrhRV8tziAYbH5dMVTogY54rzZontXEFx7qTUFJd4nPy6m4teKLAcBMb6qGKAYdCsZEfR b/tests/data/transactions/batched_address_transactions/5D1E7HWdUjjjRd2Yv37xrhRV8tziAYbH5dMVTogY54rzZontXEFx7qTUFJd4nPy6m4teKLAcBMb6qGKAYdCsZEfR new file mode 100644 index 00000000..595e3a93 --- /dev/null +++ b/tests/data/transactions/batched_address_transactions/5D1E7HWdUjjjRd2Yv37xrhRV8tziAYbH5dMVTogY54rzZontXEFx7qTUFJd4nPy6m4teKLAcBMb6qGKAYdCsZEfR @@ -0,0 +1,126 @@ +{ + "slot": 96, + "transaction": [ + "AdJrcVoADnv7+XbTNZOaWD19UIWar+tvietdhPAyPCMhP5gy1872AUpCGxD2RA+XQUQfsQp1uGAjl3OIymqjAwgBAAkMlJweADw/IvfAeASqIJXdkEr0tY4lxcSIn8RlFcI4owENAckoq0XTZVlaNOh3F/uwAIoZ0i8FLJ2h+YjEfFfeOs/WpQaYLjyBdiAbgERJR/oGU7DHmYztCzftA7PyiiUMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E1Z6byxrTwcML2wmbOqw6yP5L52ofqLdMs3HqZb9jnGL1/80cujK4wPMl27m4TnIKo8EH53W767jgEzuUspZD8vuzKHUQXK6FtbREdgftv+FFJ7+0I5EcpAQjv9FSeiZ1kcn/gLQ4YuMG+wxb4rATDw62gfPu8bhQV1sJhU5aokYCBAAFAkBCDwAJCwAFBgsIBwkKAwECzQHl6s6C/v8pEAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBn3RzgrbP5u54XZiaZhEw30D4HpUp7+cSoMMg0S2fpQgcJAuilZOLlpeDfBGor+CKsc0nirDM5ZrZOCnuRF6OOiCBd2ioe5vc6wOLif3T4we3bsD6l4Vp8KrFNyrHm/UDGTr45K2yiA3uKbPEyVpe9StosLdyO/7OzJlRVbyQf6YEqmk8IL0mBNTlGLjLhO8RyKy+5UKuX57H01D0dHy4jQEBAAD/", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999479766, + 9496515560, + 290374194, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "postBalances": [ + 99999464465, + 9496520860, + 290379195, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 5, + "accounts": [ + 0, + 10, + 8, + 7, + 11, + 6, + 9, + 5, + 5, + 3, + 5, + 1, + 2 + ], + "data": "KWv8WR8JeWsurSTFu8MdydiJXH9Ui2Lrnu3xqNxE8nwjYDXbmjX7K2BuAQovXPLzD5gxgTyK6P4NatQ6XJGS2bKpHJpwjy3QcMy8CWXHNJmBZJhMdNVGrzUE65rBTaXWToiSdomgDe5fnbTfHpUq3cpDrUmfRX94yvXW7iVGWxPe8dVKdQRKGF9SMCVMWbpGEvGvCD5pr4LAV3meLFjYgfr7pgAsNSeVKxKot2pTWaJy2Pz8XayoZ1Jczie8bek1A73ot1rA4eGWXS7z6sEKY2XkYgS6UZh1CZusQvoazpGLzXYVbpbLVjaF1CU2bxkRMqXhsXjfxciZtjNRoD5Jf39WebDC2VjQq68UeUZUa9MnN8Xo3ij1kAnRAWfaWTRJamK7G8AXfnYQjnajP48UrLiDvQ79d7N5ttXHcgDXbFtb7ZaBxAsd1GA4pH4nHzewouN1WGMGYnYcKiQ6acGRrfS9ugF1Yt3zEouPa1Yjjyos5A5F5Unsgy6xAspuGzEK", + "stackHeight": 2 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4WyeHbGaYB4b", + "stackHeight": 3 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 2 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 3 + }, + { + "programIdIndex": 6, + "accounts": [ + 11, + 8, + 2, + 1 + ], + "data": "HDtpqY3uCYv8VK5FAXvJVKJiyeFUY1KJsHnwwLbivMrxEE5JmPBPHoCLNUJzwdQDk68HHfEQhjwRwxrhA9osBJuVFLP4QpJh5g2NrvKeHGQLoAPGhmB7y8aXuKmkEXqgtZXW1tfmtcTxhQbgq15xzRv2mxXZkaF1jfR3MdfY6G5nhbf1VWVTyQZUHZ7o34oqgcVbZYNb2V6vDhWJeHRjwTyhYKHZjT3FG959P9u8m8VWdxgLoHfSj8tBan3DNVvx8kW62i5ATRC7LuYUjy5fFSXBLq8HbFAAEW8hkvNWH1DCwWGKV8oRSnGbpYpfvLaWGZFXy87FJqUo3BGDghE1bQ4XAaPWZYVafSWVaRYhvuctWDrWYFREHSFypm24AoXyMrsyV92mEJzZWRD", + "stackHeight": 3 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy invoke [1]", + "Program log: Instruction: CreateCompressedPda", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [2]", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [3]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 32088 of 856915 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 155975 of 980764 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy consumed 175708 of 999850 compute units", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 175858 + }, + "blockTime": 1746055796 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_address_transactions/5QiaGFFLVCbGjLgWvFeUqJCjZWy7vG9ZvYcFUAqsQxbo7wt8z8MNnYi9J19yh8pFTVW7s3XkNVWLx2Jr2rBgVEiX b/tests/data/transactions/batched_address_transactions/5QiaGFFLVCbGjLgWvFeUqJCjZWy7vG9ZvYcFUAqsQxbo7wt8z8MNnYi9J19yh8pFTVW7s3XkNVWLx2Jr2rBgVEiX new file mode 100644 index 00000000..dc74a207 --- /dev/null +++ b/tests/data/transactions/batched_address_transactions/5QiaGFFLVCbGjLgWvFeUqJCjZWy7vG9ZvYcFUAqsQxbo7wt8z8MNnYi9J19yh8pFTVW7s3XkNVWLx2Jr2rBgVEiX @@ -0,0 +1,126 @@ +{ + "slot": 121, + "transaction": [ + "AdyFPBdozu2yci8jxKefzbhDbQTpQvHLxA1ZRxon02HG5AZqxWNutkKyyP5RQXeFqsC0IE+KNpwk64FvSVoWegwBAAkMlJweADw/IvfAeASqIJXdkEr0tY4lxcSIn8RlFcI4owENAckoq0XTZVlaNOh3F/uwAIoZ0i8FLJ2h+YjEfFfeOs/WpQaYLjyBdiAbgERJR/oGU7DHmYztCzftA7PyiiUMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E1Z6byxrTwcML2wmbOqw6yP5L52ofqLdMs3HqZb9jnGL1/80cujK4wPMl27m4TnIKo8EH53W767jgEzuUspZD8vuzKHUQXK6FtbREdgftv+FFJ7+0I5EcpAQjv9FSeiZ15iHZ7ahfKphta+i2cq9Q9OmDyBZmgAduKik5mYoxfIQCBAAFAkBCDwAJCwAFBgsIBwkKAwECzQHl6s6C/v8pEAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBm0/Z0vdhJ9PV1o+cw/V/jtbznWxzW0zNhziso/8/vECADpc3fM2DUESqgDdlMEDXteM8nhSVX3qfHxxbg/nuGhe+VRmwm40aIyOj2rDEnlpMLqILeiy7GdFRDj2ivW8lru2ZQCLjb1Oet1sEhSTAWjK8l42z3CMiZGfxQ3cHuEQmueGdVy16NQpkZrWuEB9LFvzukixzka0zBEPBaud+1QEBAAD/", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999265552, + 9496589760, + 290444208, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "postBalances": [ + 99999250251, + 9496595060, + 290449209, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 5, + "accounts": [ + 0, + 10, + 8, + 7, + 11, + 6, + 9, + 5, + 5, + 3, + 5, + 1, + 2 + ], + "data": "KWv8WR8JeWsurSTFu8HT7R1pJq6podhmx8iUmfzNcv7VSMW6RstXdtpy46GpaukTEesr27U1fho7Dd466CeXfJ3K5NWgJXB8nFLxtbFHJyqM4SQjCiuCqEGqpj4WkUwvkKJ5LXZeJvuWyXdUyq7mF3FKFzUHfdUcJXx53KkESwk5r7VNqKinHjEezP9qojkhzzmsy4xq2CysQ5DhVwWRhaCuSFDCh3Pjw9UZLTjbsqneRMdRh1QUDzdazA7DBghfzgWZUmo57Frfks1v1uZtSThnQG13c8v1DA3ryDaGVCinBcNR1XGqXJ495ecmiQN8AJPkTXXa21ew6QCRM8gvkEoun1LLgsRgooU7S5uzHd8W8UtP57pFTzZ39peY4ud8fjEo8EF3NVcQeUyBmSY98KKpYC69dQkLV9sQvmcKSuHjWbqR43B8MEoCby3KVDtvwxmH8k2cQKJRS2XDgm6JeRScP5NmY2f4uBgCy52fqHjzmWJwvc8EqShuX67PMy8B", + "stackHeight": 2 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4WyeHbGaYB4b", + "stackHeight": 3 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 2 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 3 + }, + { + "programIdIndex": 6, + "accounts": [ + 11, + 8, + 2, + 1 + ], + "data": "HDtpqY3uCYv8VK5FAXvJVKJiyeFUY1KJsHnwwLbivMrxEE5JmPBPHoCLNUJzwdQDk68HHfEPykoy7MVMR3ip9Qvf5Z563bcLmSVhAWGqXzZvBP3xUUYMAn7qicoCZ5wjdKn3PVKk1b6rRBricePcxWPHDj1V8mfMFBaWih4q6mCxDtDhRLVCHzkrNanNWiZskRPimCV9vgyijMfu475dVdo4cQgeRpdA2mS5HFnTHq8Rk2mKLMPzD8R9Kou4PTJd9GkSoshPopczhevejDbVLzGBEYSRQ4C4JeoetMGJMABCDftzo3eBjkak8ujDBBMStxNmcJ6ZutZjyygMn6FffS6tpZzKdwzx1b5tMqzXKouHpuBcfrCbr6Jwv7EBTby1grdc4PJkZeE3yQj", + "stackHeight": 3 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy invoke [1]", + "Program log: Instruction: CreateCompressedPda", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [2]", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [3]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 32088 of 856915 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 155975 of 980764 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy consumed 175708 of 999850 compute units", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 175858 + }, + "blockTime": 1746055808 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_address_transactions/5SbDvA29FQhi1Av7Lmi4zjE1LLLMu28pQMAAuHYaLbdwLEHdA12xeVe6CU815p1spp4mnyaQALvuWcAXkMD3ZwL5 b/tests/data/transactions/batched_address_transactions/5SbDvA29FQhi1Av7Lmi4zjE1LLLMu28pQMAAuHYaLbdwLEHdA12xeVe6CU815p1spp4mnyaQALvuWcAXkMD3ZwL5 new file mode 100644 index 00000000..2b5f00b2 --- /dev/null +++ b/tests/data/transactions/batched_address_transactions/5SbDvA29FQhi1Av7Lmi4zjE1LLLMu28pQMAAuHYaLbdwLEHdA12xeVe6CU815p1spp4mnyaQALvuWcAXkMD3ZwL5 @@ -0,0 +1,126 @@ +{ + "slot": 41, + "transaction": [ + "Ad4iyOs7N+H9rEgSuo/o1U8ZS0el83DXzt3qu3w9E6U6F4P0yNOkGw5ENPoPjZODxo1++MRGItywmzmUYkTPSQoBAAkMlJweADw/IvfAeASqIJXdkEr0tY4lxcSIn8RlFcI4owENAckoq0XTZVlaNOh3F/uwAIoZ0i8FLJ2h+YjEfFfeOs/WpQaYLjyBdiAbgERJR/oGU7DHmYztCzftA7PyiiUMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E1Z6byxrTwcML2wmbOqw6yP5L52ofqLdMs3HqZb9jnGL1/80cujK4wPMl27m4TnIKo8EH53W767jgEzuUspZD8vuzKHUQXK6FtbREdgftv+FFJ7+0I5EcpAQjv9FSeiZ13nDtCjia7N1KnOurRKMAwKCsDBzma2lhciLrIeSd4e0CBAAFAkBCDwAJCwAFBgsIBwkKAwECzQHl6s6C/v8pEAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBmZXueFsm2nUa9NsnFhnF8z+ta/mRZgL/4mJLTVwAosgLYLgOgj9y+JafHPmKlFO7dJAZjxrBuL4s/E/eP6/82iOHXLySTtdbrIuaJLbAX2bnFN4mky456EXL7udhW5lIL+cgA+1iDYPyoUEUrSDD+l/n3BJbL4ggDHDrYKZeCDmaYyg8uvD9vOsfZHmxl/OojdDYCS/nKnxWKBU4c4sH4gEBAAD/", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999984699, + 9496340660, + 290209161, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "postBalances": [ + 99999969398, + 9496345960, + 290214162, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 5, + "accounts": [ + 0, + 10, + 8, + 7, + 11, + 6, + 9, + 5, + 5, + 3, + 5, + 1, + 2 + ], + "data": "KWv8WR8JeWsurSTFu8Fhv86d98YnwBjvcGtS8ziFqB3beVhrr3givAAUVe7mtU6d3g9SZq4cXGA6hVT5aMuB3eX9aAtS3wfQSrbTx9dy1CeievXScfx8MwcJnmBrNUE8SJQaymK1uQNwafZMhtjdoxSJG7Z3EijcvviGXwRPVZuhovQGehBPh9sjmFWoZ6pabasvc3XJCtqCbJV46AGyR6EkkpCqr3DCfoJzENRhQWafSFnB6zerzePU5Sd7jdZBdDMXtWK12fGbFhSw1FpTUL2jTDoFf5voomrND57CceDpyJkrsn2zZHatsFcth8wG8fvnFocTCsw8KBJn5Pichc21JhdicGVRvV5ZNC6gLNWtLhhYArq1ynqP5wr3srun3RSFPxVyJPzGdjNg7zmGXrzRGf5idmw1h9sRvWyWKFCu64aPwfYqiZhHFVhC1cfZt3SeNa5MB78ibAu1MYqwV8re5FjDVraqP6aUe5qwTXCHuS2v73iyQtsKNusS1x9d", + "stackHeight": 2 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4WyeHbGaYB4b", + "stackHeight": 3 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 2 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 3 + }, + { + "programIdIndex": 6, + "accounts": [ + 11, + 8, + 2, + 1 + ], + "data": "HDtpqY3uCYv8VK5FAXvJVKJiyeFUY1KJsHnwwLbivMrxEE5JmPBPHoCLNUJzwdQDk68HHfEQDcuEmVoA9SLg7re2kn2rpixta8RmGhUi82jSxex9cLMTjBpHW5oN8Cxzkcem4zG9xSM11S6LQFE7irjz87to4Gjz1YigSBQB6zDc1Hq1zRXQg1aJA3i5jowcRTJbQZwTjfquL2SxpKK79BfkkvdqfKFqeYYTrGLqAgSc4p8fjJgYsZ2fEhoLqfQpKE6VmK1VxLVDSYjqe9Bvqh7wR5czear3YUHv6DhgW6XS2J9WjzXHHVYUdAwwNJFyJTk6YVMhqd5cR5siGL4aYJTh3nv4q224ijjwyCUz6KaQpiChXnyZwVwQjfmuDkrpkTyvTCuYQAsnoGT", + "stackHeight": 3 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy invoke [1]", + "Program log: Instruction: CreateCompressedPda", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [2]", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [3]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 32109 of 856915 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 155996 of 980764 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy consumed 175729 of 999850 compute units", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 175879 + }, + "blockTime": 1746055764 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_address_transactions/5VoX5LcTKACd8bkuLvu4yCszs2RNQkY75c7gHr97c6Bj5KXwyVxw8CFe1hBtmmv6zePjh83qUmwEfJP8MKvDvBzB b/tests/data/transactions/batched_address_transactions/5VoX5LcTKACd8bkuLvu4yCszs2RNQkY75c7gHr97c6Bj5KXwyVxw8CFe1hBtmmv6zePjh83qUmwEfJP8MKvDvBzB new file mode 100644 index 00000000..32e24614 --- /dev/null +++ b/tests/data/transactions/batched_address_transactions/5VoX5LcTKACd8bkuLvu4yCszs2RNQkY75c7gHr97c6Bj5KXwyVxw8CFe1hBtmmv6zePjh83qUmwEfJP8MKvDvBzB @@ -0,0 +1,126 @@ +{ + "slot": 61, + "transaction": [ + "AeDn4V+P0PjlqQq+m4OZY1O/c4OcgyiiGmr0OK9Sfm5iCfDkWkyM5Hz4xFZ161Q4pfGuRQEhUQTwmPhHZkIRWwQBAAkMlJweADw/IvfAeASqIJXdkEr0tY4lxcSIn8RlFcI4owENAckoq0XTZVlaNOh3F/uwAIoZ0i8FLJ2h+YjEfFfeOs/WpQaYLjyBdiAbgERJR/oGU7DHmYztCzftA7PyiiUMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E1Z6byxrTwcML2wmbOqw6yP5L52ofqLdMs3HqZb9jnGL1/80cujK4wPMl27m4TnIKo8EH53W767jgEzuUspZD8vuzKHUQXK6FtbREdgftv+FFJ7+0I5EcpAQjv9FSeiZ1sm4ufrVMpQFPfZMUM2//FQIcpl6muQd3r6log/ehO9ACBAAFAkBCDwAJCwAFBgsIBwkKAwECzQHl6s6C/v8pEAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBkGZMdsTMdwG0MjHI60NjX7O5oPJgfpnhbhocRXqHM+eDWXtsxoC5UiVxEX/s4IH8Pm0WNsEqa8XV7AftCCkptAmHMio57bPcfNtwDNFNdc/Q0rxQJC3++Z3DiThqHjLBKouxjuXx3nfxmvnLSmV47gzifpQ93FIgubNNO8Mom5H1ofpz5QRjFSCT7EWcm+kCzfZq7VzIvKH0jmC61oeYqAEBAAD/", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999785786, + 9496409560, + 290274174, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "postBalances": [ + 99999770485, + 9496414860, + 290279175, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 5, + "accounts": [ + 0, + 10, + 8, + 7, + 11, + 6, + 9, + 5, + 5, + 3, + 5, + 1, + 2 + ], + "data": "KWv8WR8JeWsurSTFu86RREQZ2khLQGnVxvcoNdNL3teMV7AVCNw5gWh8tqNECR1kCEPw39uTshufkaWLDHUHatfjRC35BiZcfuum593RjmSkYDAxMphBjsjERhWbXX5QaBva26xG4mvjrP2ZbhZDNmWi4JT7PhNXNKT5cBLg1uD9akFjQkfw1rP55HBNZCWKqrf3wJXSj6Dfoim6cAubQBMGBmikoSsTni11ag2yDhkLfqp6U6EqeB7HsDMKcGeBFUYaXHayGPFbfNciQaD7V6rhoXxFXurpLwwSqH2LRSnnvJ3LjrUJU4XBtXKuHCH8K2tWaEip9sCW2UzPCEZjUtDJspPKrz66qzZmagN7xKRcuKbEKjdN4hWxB8zthtnt5mveJ9TcvooiwM7NSZ1u8fWtPsDKRp7BvdXtZweEGDNLffag62zYLAWqxRsL6Vmi4ARTm1aMmHXMRawJVUbrpCCL365KcJeiHVycWjutxGCUgQch3QGgKH2T3ck1rNN3", + "stackHeight": 2 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4WyeHbGaYB4b", + "stackHeight": 3 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 2 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 3 + }, + { + "programIdIndex": 6, + "accounts": [ + 11, + 8, + 2, + 1 + ], + "data": "HDtpqY3uCYv8VK5FAXvJVKJiyeFUY1KJsHnwwLbivMrxEE5JmPBPHoCLNUJzwdQDk68HHfENk6UuhTbFVztGCxKqvLgHKCHW6ou8RSvGDspTyuSB9dFYCoen1o6dpcD1xQSgpteL2dT2cNu1K1e2sSwFP7Wbp36TP45S8295Qe7MPdiFKGqe213P9RmSo3KXVh5oEZ6fjSPZhfA252S7WmWFRyzbTWP3xMEJ8E3zochb9Tq9LQvaF5asjfFTksBDT6MZxVEoEYKvpD6USE8BVaVGKUkoZsHWAR6TCwCajLgbm9mUHkx5jhYBczbzNVxjCuLbXrBYUJcjtP9yxK7Mnsm7ybHZFVoTAhzmH5eovsVXBT83cvmJWZQSSPNyEm4fYSxwwkxJcVHrfAw", + "stackHeight": 3 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy invoke [1]", + "Program log: Instruction: CreateCompressedPda", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [2]", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [3]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 32067 of 856915 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 155954 of 980764 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy consumed 175687 of 999850 compute units", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 175837 + }, + "blockTime": 1746055774 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_address_transactions/5VtMW9jpKqzWesQF6hEzdmgDJvNJcG2JCVMr3FHP46QgSVrEzFyXni7wbzsWmvFGUcJTqvTMCoMPJjb79jmXs3cU b/tests/data/transactions/batched_address_transactions/5VtMW9jpKqzWesQF6hEzdmgDJvNJcG2JCVMr3FHP46QgSVrEzFyXni7wbzsWmvFGUcJTqvTMCoMPJjb79jmXs3cU new file mode 100644 index 00000000..54b4e83a --- /dev/null +++ b/tests/data/transactions/batched_address_transactions/5VtMW9jpKqzWesQF6hEzdmgDJvNJcG2JCVMr3FHP46QgSVrEzFyXni7wbzsWmvFGUcJTqvTMCoMPJjb79jmXs3cU @@ -0,0 +1,126 @@ +{ + "slot": 122, + "transaction": [ + "AeD6SJtgnZPJ09rzgbMdTzwzCRMPDqnlw9CjEmMjxJ+NQ+t/9pGacVzIUoLsgord4VOmMiMUrPVgF4QjJJevggEBAAkMlJweADw/IvfAeASqIJXdkEr0tY4lxcSIn8RlFcI4owENAckoq0XTZVlaNOh3F/uwAIoZ0i8FLJ2h+YjEfFfeOs/WpQaYLjyBdiAbgERJR/oGU7DHmYztCzftA7PyiiUMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E1Z6byxrTwcML2wmbOqw6yP5L52ofqLdMs3HqZb9jnGL1/80cujK4wPMl27m4TnIKo8EH53W767jgEzuUspZD8vuzKHUQXK6FtbREdgftv+FFJ7+0I5EcpAQjv9FSeiZ1LSfeYQ02dkryVX8gDAmKiVKr3ql3ihCw72lySD+WbygCBAAFAkBCDwAJCwAFBgsIBwkKAwECzQHl6s6C/v8pEAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBHnV+JVPRByT7mSNtVMx7DFI70wm9vdwufriecvNZ0aEmEckGDgOQzXs03Yy0H7iCLs7hsKBqD3P+zjU1FRqtLSWHuWkhI9Vy+O6ajTFUx+cJzb5H8CekMOvcvU5+cCDeK3Jk9HwI+DXiIBGBNk4JU2UOlSn39mEt8OT4J8RoG4OKNmxl7I9zp7bGofme7c3HKFKSxIEgf7lCdxMVAwBwDQEBAAD/", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999250251, + 9496595060, + 290449209, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "postBalances": [ + 99999234950, + 9496600360, + 290454210, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 5, + "accounts": [ + 0, + 10, + 8, + 7, + 11, + 6, + 9, + 5, + 5, + 3, + 5, + 1, + 2 + ], + "data": "KWv8WR8JeWsurSTFu67G5i4suGat663eCr73vVPWw9VXSTwwzDZDnj3dEZnT6wUPDy8tuZkKAVq8FxjrELtucuKM5pD6GcPrZ1yvYx2gM8s2ev9qo1cKpp51wEV2xGFyWmGmjwavEywtXYZsEka2oNKqG7PZ1cMVzSCtELgEkBSv1uDDyYQpoAhVN9jNdbRerSLowKvr9W3qCXs9V6vFghneHgwd8sPZSfzXCqrpGKBzREipM7vMSVHvDRdyQRfbXCSVxCuJDJ4TUbVN3NeJuFpMN69haVdaZJQpaAYh2GjU6potHpxgXA8HMCYDy4LQ5ovpsVn6yag1x3iy2URLPbTAZzTMpRsmkhWz9rdbt6MXYyv59nvPRA1sDzBgfQPjPNFEEptxs6X3pu41saxJJGAX31RfG2MA3T7UYi4U5mzAh9ip3g5R2ybSUtMigtPEnNS6VNkoSPYsA69ksJPm2XTfpeaMGKzPWFQRkumymUUNMrrBzFx9FVJcu6GRVGBZ", + "stackHeight": 2 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4WyeHbGaYB4b", + "stackHeight": 3 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 2 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 3 + }, + { + "programIdIndex": 6, + "accounts": [ + 11, + 8, + 2, + 1 + ], + "data": "HDtpqY3uCYv8VK5FAXvJVKJiyeFUY1KJsHnwwLbivMrxEE5JmPBPHoCLNUJzwdQDk68HHfEQhAGXRdig31B2grZeunawUJJsMYkoRECmoU6NTQe8syjapeqzigyCt2VwnjqRMpT3aVxR7KJumjuFDWALTNthwMgncmcrjz1QhkQ5qssn7eBecLFfCQp7etLpwsTKQpcPg8MCRVdcRLuppnfH1XJKTbov5mF9oaLp7hBMjmk4fV3AFQpuvpXCQpFyjK7DtW9raYrbV5XGS73pfHWhQt9LiL9AiwvVscp3Ba51o9oKzZce88qzeu1hM1MTJHCd5seTnupKJPHJyFXS5SbKjr4kRSBWJhY7ZBCZHCecFJq2HtB3RU1Dg2FzeBWx1j8RfjzkJYChDrf", + "stackHeight": 3 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy invoke [1]", + "Program log: Instruction: CreateCompressedPda", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [2]", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [3]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 32098 of 856915 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 155985 of 980764 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy consumed 175718 of 999850 compute units", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 175868 + }, + "blockTime": 1746055809 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_address_transactions/5aV4e9vkYeARVoHWHrMZLoQiK4gxCACvDtsf42PL6AvdNUBkYjq9mMCB95HjMFhKriMyLaWDxBDQiv3jjjz8At9N b/tests/data/transactions/batched_address_transactions/5aV4e9vkYeARVoHWHrMZLoQiK4gxCACvDtsf42PL6AvdNUBkYjq9mMCB95HjMFhKriMyLaWDxBDQiv3jjjz8At9N new file mode 100644 index 00000000..d74ca1e7 --- /dev/null +++ b/tests/data/transactions/batched_address_transactions/5aV4e9vkYeARVoHWHrMZLoQiK4gxCACvDtsf42PL6AvdNUBkYjq9mMCB95HjMFhKriMyLaWDxBDQiv3jjjz8At9N @@ -0,0 +1,126 @@ +{ + "slot": 63, + "transaction": [ + "AeTxdLHDdvvn/AT/DhCJEPm9g/L+1MlVxeSyJLi4VZcyzEt9AMeuncD4BZFBZv+tTvW7LGWEZLfM4SdFQBH5AQkBAAkMlJweADw/IvfAeASqIJXdkEr0tY4lxcSIn8RlFcI4owENAckoq0XTZVlaNOh3F/uwAIoZ0i8FLJ2h+YjEfFfeOs/WpQaYLjyBdiAbgERJR/oGU7DHmYztCzftA7PyiiUMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E1Z6byxrTwcML2wmbOqw6yP5L52ofqLdMs3HqZb9jnGL1/80cujK4wPMl27m4TnIKo8EH53W767jgEzuUspZD8vuzKHUQXK6FtbREdgftv+FFJ7+0I5EcpAQjv9FSeiZ1USmRWgHgj1Qx7lNuN02ai4xWDtk0v7hdJQ/VIFwn074CBAAFAkBCDwAJCwAFBgsIBwkKAwECzQHl6s6C/v8pEAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBE1IjBw8qcfFscoQjKLNYF3AH3CtSvKEPHImVWBXrcO+KsocJlAa44cytj92qT+lijMwXS4phFPjsqRgw/U7QKgXVaL9siYOE0gOZnZmq7oTTU+s6nETYKdn8h7eGnx+CGKtayn3szYqdmNO/UobJxIOBcgVSdh68v0Ks3ebPligo0+/VJYqIp1wXnqXGdZ8BP5vAud0sNJFcyNzKObRp+AEBAAD/", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999770485, + 9496414860, + 290279175, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "postBalances": [ + 99999755184, + 9496420160, + 290284176, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 5, + "accounts": [ + 0, + 10, + 8, + 7, + 11, + 6, + 9, + 5, + 5, + 3, + 5, + 1, + 2 + ], + "data": "KWv8WR8JeWsurSTFu5v19p8eohQZi3nnZK3U3BDsVVTTWE6ifc61cEdBCaqzywD92dcrvYjLMw9QixgRuR1dgqLvPgQkXQ5Sy6u7N8tqeRYYuudhffHE4WrHPVBh2otP5mJdYL9gwLMFP8pguiZcQbP4hwW9ta9sh4bRxnzkWwHGcFN6daBjYtPafiJF1DBadma1iDuNeWezivrMRXoyAfThX2ZKXAEuAmuvsLVrjkxYTo1rkXt2fef5vzJTHUa7K5arzGHVx1wE3HcNrJZ49j7hmDTekXAK9vvEPg3g8ZiEnvYUzEN9kwH2JLykYK44bXsA3YZyNwCntzjBSW9WC745QyzNkxE7uVQ8FjJfa2dRMWtQ6Z6yuZZo5VbY6TtFZJdc4GAAQXJ4WkJWTi1itv9xdshuiug6qCQw5tFUa9eusFGQttEtbopdX3eNVpKdjTUobb1uV5USYWZyeQdaynPtxzFGMWXnGasTr55HbogfLGDXT9FcjAfdQaTjixAs", + "stackHeight": 2 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4WyeHbGaYB4b", + "stackHeight": 3 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 2 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 3 + }, + { + "programIdIndex": 6, + "accounts": [ + 11, + 8, + 2, + 1 + ], + "data": "HDtpqY3uCYv8VK5FAXvJVKJiyeFUY1KJsHnwwLbivMrxEE5JmPBPHoCLNUJzwdQDk68HHfEMpPxywCWsLKyqfPSZAvXeBsuTtEwnjA5ZUwbLZdvxa2ewSUiBRc7SPfkmqXLEPwrcUEiZt6fXwr6w9KkaRWr5z6UJXCGUcYRX7pNGgKvw8rRyPRUtHxTRxYnoNh2qH76f7LQvqoZqMx28Uu8ZsMVrCcVeoqMNAnUgp3vyXmFh7fALAUYertzb4uHsEGcKqahHmp96dbxqNCzGYhMzFwcn8eByFNH2UFDv2s6EPs5DoZsrP5d88A6M9jFQvF3HzxhY7GH55HSCziv24kcP1cYeQu26gkRM2GhGwmRx4YpEa81NSQ5mFHukgACxmkr8rEdgQPUUCRV", + "stackHeight": 3 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy invoke [1]", + "Program log: Instruction: CreateCompressedPda", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [2]", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [3]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 32046 of 856915 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 155933 of 980764 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy consumed 175666 of 999850 compute units", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 175816 + }, + "blockTime": 1746055775 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_address_transactions/5bJoMRz2zCJ6ZhaUUVK4eNGWUjFuHiwHBDtDu142eoJcZ96xKnaXVmNHqBDkbd1LEzsR5fC2JX7LAqud6vuMEBqs b/tests/data/transactions/batched_address_transactions/5bJoMRz2zCJ6ZhaUUVK4eNGWUjFuHiwHBDtDu142eoJcZ96xKnaXVmNHqBDkbd1LEzsR5fC2JX7LAqud6vuMEBqs new file mode 100644 index 00000000..dd22dbdc --- /dev/null +++ b/tests/data/transactions/batched_address_transactions/5bJoMRz2zCJ6ZhaUUVK4eNGWUjFuHiwHBDtDu142eoJcZ96xKnaXVmNHqBDkbd1LEzsR5fC2JX7LAqud6vuMEBqs @@ -0,0 +1,84 @@ +{ + "slot": 132, + "transaction": [ + "AeWnJ4KiinetGXfc5t//OVfXOma1W5EzwVwrQ5HnwOE9jCl3xDMui+NjgoS/anPTfL94IHjQH5C1Fwkb8Fn0cAIBAAYJzLjCFXXnWj51s6K1RyQiLzHD11pzA0VK0kuivz8zqswhWc53yo4Lew6JOci1vTttbJcOTjfIMGIiy5vpCKZaRM/WpQaYLjyBdiAbgERJR/oGU7DHmYztCzftA7PyiiUMAwZGb+UhFzL/7K26csOb57yM5bvF9xJrLEObOkAAAAAFDSsTeVE2hc8C8rX9UpG9lZsrBgqlJepbNIE7Hbm3bgksNuwi9ReDAP20Sqpq/8/wpG4cvGQcDj7QnaE7nvUIC7wPwLtHyi90xBEulKsTz6PGNOXcF+rLA80aI81+eHwQpl591jkE+Dg60Dze4Hi5FNhzGIA7FTWAcNeS4Fz957/QmmoHZdEI20ACv+9MyGVTFGij2iz8yvlzRZ4iyBL03m7nJ2DYOYvjB/WTqs+CMD/GFXadpI4XnqjxmKZsEx0CAwAFAkBCDwAEBwEABwgFBgKtAat/8kF9vXl1/6AAAAAiauxa+BYIlqgCi2KYtKq3wvJsdnqafvx6BOyQBkdt1o/d5yEkG98SVeP59gwaU5YuTuyyhAXl4mVkBvH41n0hDrx00nIPCZ4AFlcpurMRrXqTZl794Teopm9zYRhqA8gvb5S4lAuEMxRYUNIpmcUh98pfkGcRf2SBZqVm5QWpIBFN+NINNxBwoiVoy0FCwX6KGO97bfogHCyN1vM54AZQ", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 100000000000, + 2735280, + 290454210, + 1, + 1141440, + 1141440, + 1141440, + 0, + 1614720 + ], + "postBalances": [ + 99999995000, + 2735280, + 290454210, + 1, + 1141440, + 1141440, + 1141440, + 0, + 1614720 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 5, + "accounts": [ + 7, + 8, + 6, + 2 + ], + "data": "SBkMhczQ9esLdkDPWZRFRwNeYtVRwWvoXSdj12JK4Rwun9FtFZLoSq3FzLeekcJv9eD23E3jZKDzD1ePtLbamUTE3JGbQJt2Y3krrq3td4CN1HVxzSHVspaqUdjAiEBEXtiunqffsnmwsb9w9G8QtjErcxWLbiu6RMYzfbL25hGPbSmUXxxg2G2E9dhejfnDV4dw62UxVgJwJ9dcL1QDDqKQHA8UKzn6cFN2xvN2TDR", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [], + "data": "3Q747BoHqHsBxkNHj5NHEZnP1TajcfmzuWaVnRBAGpdvhUvpLwjkwwa65i3JiSbowtoxoqGhP5b7tFkhC2bj4MG7yy6NVYHr5WRYcRgjygHBjob6hvfEqMuhTHK7H8sbvSaCRP4hbgZu2L4YVaDNswEaH9HTDrBTD", + "stackHeight": 3 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program Lighton6oQpVkeewmo2mcPTQQp7kYHr4fWpAgJyEmDX invoke [1]", + "Program log: Instruction: BatchUpdateAddressTree", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: BatchUpdateAddressTree", + "Program noopb9bkMVfRPU8AsbpTUg8AQkHtKwMYZiFUjNRtMmV invoke [3]", + "Program noopb9bkMVfRPU8AsbpTUg8AQkHtKwMYZiFUjNRtMmV consumed 38 of 881758 compute units", + "Program noopb9bkMVfRPU8AsbpTUg8AQkHtKwMYZiFUjNRtMmV success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 102385 of 983946 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program Lighton6oQpVkeewmo2mcPTQQp7kYHr4fWpAgJyEmDX consumed 120212 of 999850 compute units", + "Program Lighton6oQpVkeewmo2mcPTQQp7kYHr4fWpAgJyEmDX success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 120362 + }, + "blockTime": 1746055814 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_address_transactions/5byb8WTZQYAwT3UF6q7X19KQiisLFRKrSvGnH1euro2CutmGDcWiAWosmDAkLkCX2Nr4UMGELQoXT6NsvU1tR4wo b/tests/data/transactions/batched_address_transactions/5byb8WTZQYAwT3UF6q7X19KQiisLFRKrSvGnH1euro2CutmGDcWiAWosmDAkLkCX2Nr4UMGELQoXT6NsvU1tR4wo new file mode 100644 index 00000000..4d35379d --- /dev/null +++ b/tests/data/transactions/batched_address_transactions/5byb8WTZQYAwT3UF6q7X19KQiisLFRKrSvGnH1euro2CutmGDcWiAWosmDAkLkCX2Nr4UMGELQoXT6NsvU1tR4wo @@ -0,0 +1,126 @@ +{ + "slot": 51, + "transaction": [ + "AeY6zCQKkNiTAOcrSe7PTvJHPtj79qUJ6/O4Mg61Uu+qkzrMADFRGFkGY24FSf4L0aFKZMSI50CKJ/o8jDsyDwYBAAkMlJweADw/IvfAeASqIJXdkEr0tY4lxcSIn8RlFcI4owENAckoq0XTZVlaNOh3F/uwAIoZ0i8FLJ2h+YjEfFfeOs/WpQaYLjyBdiAbgERJR/oGU7DHmYztCzftA7PyiiUMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E1Z6byxrTwcML2wmbOqw6yP5L52ofqLdMs3HqZb9jnGL1/80cujK4wPMl27m4TnIKo8EH53W767jgEzuUspZD8vuzKHUQXK6FtbREdgftv+FFJ7+0I5EcpAQjv9FSeiZ1f9XKa4rWKhRq43yi92Sfbd9b7qf/GS4pQL8sDK91AsMCBAAFAkBCDwAJCwAFBgsIBwkKAwECzQHl6s6C/v8pEAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBHVE2F0+bavb1yON1x2kdEe3ycfHQyJExu1i6c1lB9i0sCFtT09rUIZdlZVpyKepPhRzuGiIG2zzW+EtU9hzSnhi1QsaYlzxh/AyDdAz6PBZYfaG8lee6m3w6juzZAIQvmz36dQ0liBrhkX5z6FaDheGeMYqmwYQcum/AsCYkcIzDkz+rINAuxtjCYhJI6zvgTdRkHMQGLgFRVz/pxp3ymwEBAAD/", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999877592, + 9496377760, + 290244168, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "postBalances": [ + 99999862291, + 9496383060, + 290249169, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 5, + "accounts": [ + 0, + 10, + 8, + 7, + 11, + 6, + 9, + 5, + 5, + 3, + 5, + 1, + 2 + ], + "data": "KWv8WR8JeWsurSTFu6679p5DBd3rZQ2tdhABLqSt7bQPLfDibEjgHuMvXBkY2tZnXGDZQWedfbUVZ7F6gy26cfQERUa6SqpGiXFQEr3Fg62sfJoxhQa4Htq8owvcqczMGjuUpUvmS7WoRCXyxi4Me9HMQJrUBStr9LnfChsLJst6AtqWGusQbHp8RuWcWj56dyt4VnMjm7ybk2dssqrTb24nbuZJz3pEva5WsGMU1TeCJT8H22CAYX69gbbm4A5EV5VuLv28SLqc5oo7Mmyvt2eFJaxjJuwzo3XaByuqoddHkvWuLev89uyYBWF1s91uG3Y1fXpf4rH64FWU5FZK4sVYX8qc3Crr5QUXuK73EiBGxp5o2717dWZKSpEEQV1HqP7wXoH9SbFo5X6UYaeseqs2JWAuz9eWRaURMNVNM6yc6MaveQGC8eaj3AZTYK6ohmfvETgacZqYXuBHhdULqVTzkTjs5eo7aZSvJJsZqLxd9AQ4oi7zgy7B2VPKJN5V", + "stackHeight": 2 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4WyeHbGaYB4b", + "stackHeight": 3 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 2 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 3 + }, + { + "programIdIndex": 6, + "accounts": [ + 11, + 8, + 2, + 1 + ], + "data": "HDtpqY3uCYv8VK5FAXvJVKJiyeFUY1KJsHnwwLbivMrxEE5JmPBPHoCLNUJzwdQDk68HHfEMsYHBxzfv1yBc9w9Zg8zW2yqyNZC5LEB3dyuDKszwCqGhYYbdGvdTM5XHuFiYDrz7NNQJrJrJVzxwixjwDSzTfQrCvfsUF9DEHCGLvteZf9ABbbsNbJwL9wbSQrv16nxJvResGw6FBTVAg7KBEcd24ScBTKrQYjwfTuaDmtAHmcHkYUKd75LvcuYjbuu7fMXww5YndGRZyTaVVDAio6ny7YvFTfAPvcPavQkkWbdC5PEcnxYd4u5Ljfwn4tdrxig29bMPWJ9VJof3iXr923yAACtWN9onUYbnyNgwZzUs1NxkaLcyqJgsfC4wnBiSCmAYyPAmDjV", + "stackHeight": 3 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy invoke [1]", + "Program log: Instruction: CreateCompressedPda", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [2]", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [3]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 32109 of 856915 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 155996 of 980764 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy consumed 175729 of 999850 compute units", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 175879 + }, + "blockTime": 1746055769 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_address_transactions/5gicCEJ1DwiAM8GD9SwPtyFFJ4mpLUx5LcCe1fvcDRqvbnenEWCrAZ1EA1anAoySP4wgEhfwBrXaU3ssgbBaEwTv b/tests/data/transactions/batched_address_transactions/5gicCEJ1DwiAM8GD9SwPtyFFJ4mpLUx5LcCe1fvcDRqvbnenEWCrAZ1EA1anAoySP4wgEhfwBrXaU3ssgbBaEwTv new file mode 100644 index 00000000..3ab7624f --- /dev/null +++ b/tests/data/transactions/batched_address_transactions/5gicCEJ1DwiAM8GD9SwPtyFFJ4mpLUx5LcCe1fvcDRqvbnenEWCrAZ1EA1anAoySP4wgEhfwBrXaU3ssgbBaEwTv @@ -0,0 +1,126 @@ +{ + "slot": 99, + "transaction": [ + "AepRmKsBExXch1W0laTb/zv+xzYukdzq+Ze7h07r3wkVSQQojm6aH4TF+DqzWUAUh3qZPfnZi8PlVGXhrCwxywkBAAkMlJweADw/IvfAeASqIJXdkEr0tY4lxcSIn8RlFcI4owENAckoq0XTZVlaNOh3F/uwAIoZ0i8FLJ2h+YjEfFfeOs/WpQaYLjyBdiAbgERJR/oGU7DHmYztCzftA7PyiiUMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E1Z6byxrTwcML2wmbOqw6yP5L52ofqLdMs3HqZb9jnGL1/80cujK4wPMl27m4TnIKo8EH53W767jgEzuUspZD8vuzKHUQXK6FtbREdgftv+FFJ7+0I5EcpAQjv9FSeiZ1vkiRwnyf2y0aCZHBkI+XvVLUPpH6MjlvgO/5JpWXsFcCBAAFAkBCDwAJCwAFBgsIBwkKAwECzQHl6s6C/v8pEAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBHixJKuX8+ynjsJb1ceSMJWL3AiOlJeOZXeMMNkjwJiqV4tdu2cv1Zy4SEwewZionFmwrRJmTs3ArF3iMmw30LChYdyA9UeIUAulrfkv4++/JGYs4RinbY3gLzL6Gp4AarBp+/jgdjcVdfDxA6txgkOrstM9+bJOMl+4THaBew7fgpR3WuqvjGdDGrcyDqn+62Ehmrc5pRn9oFEHcbEf9igEBAAD/", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999464465, + 9496520860, + 290379195, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "postBalances": [ + 99999449164, + 9496526160, + 290384196, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 5, + "accounts": [ + 0, + 10, + 8, + 7, + 11, + 6, + 9, + 5, + 5, + 3, + 5, + 1, + 2 + ], + "data": "KWv8WR8JeWsurSTFu66yKRMkxM9SZUuxQg3wpiZce4t9TFRCfB6tGTYoFszDjJSUE7urQcHRmFibPjoFp51VXuqmGRK9wuhaKxBPXjBz1g8F7ezRBRikdY1exLM3C25AkJw6VEsVBhwy9FpWTtZvx73NPoKNTmA5G5Ku1PpDcdmgnz1UT56GXzMCgYSGcR3vbLw65BQ6jEmkWFfar2dzjLLF1yGkpXruGumQ1iM4zNn25GCXLdnAcW2pUzzr6dmpo8fhN5XGwYXmGN4xRwR8zG3TdhAbFbzZmyH11VHa72pukeJ8cgf23DXZLwPZyHYbhWNVG7fmEosC4padtAN52xFo3bTMnv3CbB1V98LMtnYsC7mncAhLGAVS9kBexTYJkDPYCy6Ysj5cKsfLqwgfHKFZRuU2GZnWVWiyFDDh6d71ZPaAU6QLETtrQmPsU7hrUPXmaHkLsQR5ffnGRRXDDbgRBhyCB1LmHsY22qNViqxEmZ7NrC7jd4yrmLCvfynF", + "stackHeight": 2 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4WyeHbGaYB4b", + "stackHeight": 3 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 2 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 3 + }, + { + "programIdIndex": 6, + "accounts": [ + 11, + 8, + 2, + 1 + ], + "data": "HDtpqY3uCYv8VK5FAXvJVKJiyeFUY1KJsHnwwLbivMrxEE5JmPBPHoCLNUJzwdQDk68HHfEQopuKwVYHpydqcwtQJwG8Gttaocsa99mjAGJmAUns1U57VPwr8L4Fzb5HqQMxGD69UTRwXZj8BWgKRcuqpXMC2CoA9kkfrT52gRpQSYygbHGqYH91yEvdzjiYyFHbVEuN3eWvsE61Rkoh7Kci7DhRFteWKKkFx9xXS6bVarSm5N59cVbVQjtwJyc9xqDiXGzr4vHSsZmsLXXPuoCuwnMBWY2EQdXtdTmmjnA9yZ4R327xH3GNvfSogg98axMsmKD4JHJgZBccZcPthkPN5oRMMenszVZam1E5f1nrMZP9JRDeuyRST3u9Mj68ub3DsrhHVwUDCKH", + "stackHeight": 3 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy invoke [1]", + "Program log: Instruction: CreateCompressedPda", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [2]", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [3]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 32067 of 856915 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 155954 of 980764 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy consumed 175687 of 999850 compute units", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 175837 + }, + "blockTime": 1746055798 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_address_transactions/5iMsuCdLU3dBuVzAtRu1jZoVZP7Zp1GodV3aWaGaia8sZV7VRhWjCHumAh3WXqqaEdWDYwPbNoVnWkwW2Gq2b6Ms b/tests/data/transactions/batched_address_transactions/5iMsuCdLU3dBuVzAtRu1jZoVZP7Zp1GodV3aWaGaia8sZV7VRhWjCHumAh3WXqqaEdWDYwPbNoVnWkwW2Gq2b6Ms new file mode 100644 index 00000000..93274e97 --- /dev/null +++ b/tests/data/transactions/batched_address_transactions/5iMsuCdLU3dBuVzAtRu1jZoVZP7Zp1GodV3aWaGaia8sZV7VRhWjCHumAh3WXqqaEdWDYwPbNoVnWkwW2Gq2b6Ms @@ -0,0 +1,126 @@ +{ + "slot": 78, + "transaction": [ + "Aeu8OXQKjUnOUrWPFzpVxwlz+tb9FX2YzH0jnG9EeI5MLpc+Jk7pKPoFsNGQPVoe0a8ZyfYPwW0F4kHSWuiQgA4BAAkMlJweADw/IvfAeASqIJXdkEr0tY4lxcSIn8RlFcI4owENAckoq0XTZVlaNOh3F/uwAIoZ0i8FLJ2h+YjEfFfeOs/WpQaYLjyBdiAbgERJR/oGU7DHmYztCzftA7PyiiUMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E1Z6byxrTwcML2wmbOqw6yP5L52ofqLdMs3HqZb9jnGL1/80cujK4wPMl27m4TnIKo8EH53W767jgEzuUspZD8vuzKHUQXK6FtbREdgftv+FFJ7+0I5EcpAQjv9FSeiZ17A6KE66Au3TeAN6Pnqd2HBz6Rjl+hDwr4Hm6JnYKW10CBAAFAkBCDwAJCwAFBgsIBwkKAwECzQHl6s6C/v8pEAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBHG3KC8Hlb9F1QuiMr/cz+jPDLC7lVArJch25i4U99LumykxvlggLXXjdp1DSnIWqQbDkItGIETFuGUVFadtY/AAGi+DBOFeAHI0cXIz4HanJR1hO508BKom4fr/89LKcDlEZvZ3p48frxvRTCn4r0bRulfesRiw/dbVX8AYWZY8Vq96MXS4TUFOQSxPbaFpTXiCioOIR+bVwaGDpMEAetQEBAAD/", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999648077, + 9496457260, + 290319183, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "postBalances": [ + 99999632776, + 9496462560, + 290324184, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 5, + "accounts": [ + 0, + 10, + 8, + 7, + 11, + 6, + 9, + 5, + 5, + 3, + 5, + 1, + 2 + ], + "data": "KWv8WR8JeWsurSTFu65D5LXKEGwzacQaok6A7Mu6uBfcN8qWopHnnQSkaKjYJjb16g47oyymGiC3wRYz7NMsCNXbxUH2iJrgftoG7Ftjn3THtVgMx4ubjAtE31YkCJ9FaAPymmzok8V7xuqfi26y3SMSK5jYeRK5Jq66PzerM216tQPMC3RM2NPhNerK8FRdG3o1Vrh8jKxJGvjvidvqXoujLgQQvw33c2zRJhRvoz6pBPjCDUSn3CWMjkAEJ6CMSwp5zLWLPZrHVo92taZqLr1229sNgGuduPTppMcgpZ1vvm44MkgePP7az4W4j8ahmDoy93r1bR36XPGsD6wUZF7TdajZmU6fWKT27U1L6eSPgssaAabgHdznBy8jodrAGGZH6QffBrjjkFzqZhEfdm2pfc18M4zKKHYcjudnaWR8UCmLXyieDhkG5QbVueQWupau1CENAzYkRB8CKG4pecy3gWMYEDA7rnZFmxh8iLf3BNL6CF7BE2WyjTkecHGs", + "stackHeight": 2 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4WyeHbGaYB4b", + "stackHeight": 3 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 2 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 3 + }, + { + "programIdIndex": 6, + "accounts": [ + 11, + 8, + 2, + 1 + ], + "data": "HDtpqY3uCYv8VK5FAXvJVKJiyeFUY1KJsHnwwLbivMrxEE5JmPBPHoCLNUJzwdQDk68HHfEPG4EHxTANd9bJKY8AqLMDn2VM6dyvjgC7L93GCdw4k2DjY96ESpRTPpJKnTkbVdwbm2xpDtq9u5e2LQ2Ky9eTdF8WkmeeJCP4pewwvKVwPmtLrCJrRU5JP246srJCcznzg7e7JtdFFgvw2oRNQqVi56b2zjBxdwFecbxZhvgN4ybEGKgJ6M56MHFyevqFtTxBym99mYhZgt7pzyEbmtLd3dSpQRQU6KTXhxoE5q5Bb8ZiKFWKPRXkoEKqyTEaATx6dVp8ztPT4eMUaLyRpSXvfmWfBCUKmLbtqpdEM9heQBu7ndTcBsiTVcs3pRuVjxyFDFSzYwq", + "stackHeight": 3 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy invoke [1]", + "Program log: Instruction: CreateCompressedPda", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [2]", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [3]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 32046 of 856915 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 155933 of 980764 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy consumed 175666 of 999850 compute units", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 175816 + }, + "blockTime": 1746055787 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_address_transactions/5icgw5bqFvPL44YzFhmps46EwsHBdqZxSHTdmSaZ4eANyboDcp3mmKnr5L8LyWVBmDi1d9eLXb6MnwgJGKAczDRv b/tests/data/transactions/batched_address_transactions/5icgw5bqFvPL44YzFhmps46EwsHBdqZxSHTdmSaZ4eANyboDcp3mmKnr5L8LyWVBmDi1d9eLXb6MnwgJGKAczDRv new file mode 100644 index 00000000..bb3734b2 --- /dev/null +++ b/tests/data/transactions/batched_address_transactions/5icgw5bqFvPL44YzFhmps46EwsHBdqZxSHTdmSaZ4eANyboDcp3mmKnr5L8LyWVBmDi1d9eLXb6MnwgJGKAczDRv @@ -0,0 +1,126 @@ +{ + "slot": 119, + "transaction": [ + "Aev0mVcWWrEC/pNFMYgbcETK1B5VGR+CYTuGCqoUC2A6qdqPOeMmZCNH2UDFguydvlVGi+bVraWFb8+H74fDVw0BAAkMlJweADw/IvfAeASqIJXdkEr0tY4lxcSIn8RlFcI4owENAckoq0XTZVlaNOh3F/uwAIoZ0i8FLJ2h+YjEfFfeOs/WpQaYLjyBdiAbgERJR/oGU7DHmYztCzftA7PyiiUMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E1Z6byxrTwcML2wmbOqw6yP5L52ofqLdMs3HqZb9jnGL1/80cujK4wPMl27m4TnIKo8EH53W767jgEzuUspZD8vuzKHUQXK6FtbREdgftv+FFJ7+0I5EcpAQjv9FSeiZ1KNDHtSy9U3NbcwIlwaTThYzv9KUQMQCLlh6eXVIPYQICBAAFAkBCDwAJCwAFBgsIBwkKAwECzQHl6s6C/v8pEAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBJHdViy8uS0PIcmRQvRiFRO5h5AqAqnympr2REtR0XCMCpqgVtUOOx+HBNcDYJyZ4FDyu6pqCdyv8nWW3WF/M+yLRJRgab3wvllKL+C32l4eVYJNRZQPe0RPr8mqEcD3KAXLOD4rYRtg0VsQ0CemUbDPTByIfB3pqg9T+2mbO9qJ40wvvci1CLpuM6a2RIOd/7U/PbijfdGsNaKT9CrUxGgEBAAD/", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999280853, + 9496584460, + 290439207, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "postBalances": [ + 99999265552, + 9496589760, + 290444208, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 5, + "accounts": [ + 0, + 10, + 8, + 7, + 11, + 6, + 9, + 5, + 5, + 3, + 5, + 1, + 2 + ], + "data": "KWv8WR8JeWsurSTFu6DLELfnzneznspsohGktmq448jafnrGh1Nexx3KDXMWGfxPgb4Utn8K6MDyJyMwifFPzTLiCy9KeJGdtmbDURjnqmesi5kgGSFgd5MB2yMx1gjkpn3sa9Xd6d7upc5UbuDqUDX7NDhwnFD7EmU61Jr8tpgbnTepZ8WvwwVSB2V69jKjyfRZHFs9Jdbu6TsLtBctp8peXuZehqNotFqCxJDqfauME9uXkFkqt7mQuAzRDX4WuTj4vuKv2zpWGAqNR2jSpQCi1x57E7PiHRYCGcrPYkFYQKqLz3NACd6JArDwFXvXaeJETuerRQ5G3asPN3n7cJbJsn7JVotpeaA6QfwH76DJvZgYmcWEGJDsXKuWsrTNbWCqf5HU1kzqN8NiS8hX78gttAcQSAAGBb9MQTXhNsEZL2w31Fb23CpH7RpoBEff5UhVcyK3tZSJw73wcqjfFv8AJ4RjkbiPgDAkbwpSwDRSYFTZyyZcoegTFdGE6VYK", + "stackHeight": 2 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4WyeHbGaYB4b", + "stackHeight": 3 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 2 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 3 + }, + { + "programIdIndex": 6, + "accounts": [ + 11, + 8, + 2, + 1 + ], + "data": "HDtpqY3uCYv8VK5FAXvJVKJiyeFUY1KJsHnwwLbivMrxEE5JmPBPHoCLNUJzwdQDk68HHfEQ9xdmjnqBKps7eCuraKQA8bJCNchDtxyahChtarYd1uf2DxP8yTfmpiEoCPmNvvhhRhVDJ2tXwYSamcngodnUc7T5tiEeiw5syjofrwuoktohU21jkAN745hdRBmgWFnmbH1ofujm7iV679GDat1jVMaFYBCeF4ZbJU9jaQ4DsE6udXsoNnwKvgYzBZVZYTL5gXga4iAopYThHBxJHEAJvJj1nwQDdsAZV16ErjqMxVCSdFFdRapjLsz26iHacXR8s7n7yT7ZwQXG8oJcAnePNP8MeFgG3s3vUZ5UjM5mLAoBmaP2zD1BtdUGPnTjeMN4ff1yJK9", + "stackHeight": 3 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy invoke [1]", + "Program log: Instruction: CreateCompressedPda", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [2]", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [3]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 32025 of 856915 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 155912 of 980764 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy consumed 175645 of 999850 compute units", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 175795 + }, + "blockTime": 1746055807 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_address_transactions/5yshbjucroxowGBiEp2fuPDM674UZUSmhYx1GhqWBwT2TU1Rw6tcfRWtusxeH1wXyVy5X1iojJKvxVuXHUxh3GTR b/tests/data/transactions/batched_address_transactions/5yshbjucroxowGBiEp2fuPDM674UZUSmhYx1GhqWBwT2TU1Rw6tcfRWtusxeH1wXyVy5X1iojJKvxVuXHUxh3GTR new file mode 100644 index 00000000..3724b8c1 --- /dev/null +++ b/tests/data/transactions/batched_address_transactions/5yshbjucroxowGBiEp2fuPDM674UZUSmhYx1GhqWBwT2TU1Rw6tcfRWtusxeH1wXyVy5X1iojJKvxVuXHUxh3GTR @@ -0,0 +1,126 @@ +{ + "slot": 104, + "transaction": [ + "AfkdNRBaOT/vdjiGMuPFP89KeQkpDJPuB47xGrAB4Qo57Zw6IZtiu8pPSEiMsYh8DriFtge1xeJ8nv8drUg0/ggBAAkMlJweADw/IvfAeASqIJXdkEr0tY4lxcSIn8RlFcI4owENAckoq0XTZVlaNOh3F/uwAIoZ0i8FLJ2h+YjEfFfeOs/WpQaYLjyBdiAbgERJR/oGU7DHmYztCzftA7PyiiUMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E1Z6byxrTwcML2wmbOqw6yP5L52ofqLdMs3HqZb9jnGL1/80cujK4wPMl27m4TnIKo8EH53W767jgEzuUspZD8vuzKHUQXK6FtbREdgftv+FFJ7+0I5EcpAQjv9FSeiZ14BNFv1QH/Tg3cO0fgoRnzhSEOQaaFlCDGZR8uv/Gz7ACBAAFAkBCDwAJCwAFBgsIBwkKAwECzQHl6s6C/v8pEAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBBZE8ezDsPJkm5dBHZUzbnFWh7nDWUs3Btgq3nh4ONleWa9zVaMfudo8bsXtWsyunSIkVxqJDqxMAaJEevfd+ngXIKguHzYUnLeUsbxuT7soxyu0LppsmzEtR2DoG0Tn5CgA1EgLxWzbXbTBIVrB2oksHcQUbFRJTUe5f5m43CeKMVfujOqOGz5OcnNYymWZzqxO0tuKHUWf38t67EdzR2QEBAAD/", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999418562, + 9496536760, + 290394198, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "postBalances": [ + 99999403261, + 9496542060, + 290399199, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 5, + "accounts": [ + 0, + 10, + 8, + 7, + 11, + 6, + 9, + 5, + 5, + 3, + 5, + 1, + 2 + ], + "data": "KWv8WR8JeWsurSTFu5g6uTAwtMCZHjfu95FHa9uba5yhSDe4uSNTMTNgDfHb3x6g15SwwKWCn94eKv7rAGSkrkZo4ojNxUHR2EchcqU9PFzdKdtCzQDLXnoubBj9WGW4hXeuU1oMWrbzaVvepxg8TXEuzqpNKLk31ZuCiB8mjuE7nkkcmF6CgfkJ4nYa2H66GsRzKuhfRb1gTUKdeCcTdPP3gvMv7jENFxF3cdQkofvkq2KTtsDRZoqjbcgoaKdVPmNQKdF9JBh2HuKBTByubFh3Ux72tkqDxw3rsUXGQ4Ei9wAKBPW1AeJjLjC1Sbq38thHc5p91zadgAhtSMMPu1UpzYBWCGx7zYjjhqsFzTBwMfhkXp38UEWpq7UGhnnUBha4MNYW5Jrf1aAcBjvx7k28jBrQaUKAxzueJXnQDtyMoS153V5bnutbjsX4ZPPvf1Wd4cy51mW5YYJXyywgtHyXjzFuHibswbS5Z8pEbaGywb1wPd9tPNFXBSmfXFvw", + "stackHeight": 2 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4WyeHbGaYB4b", + "stackHeight": 3 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 2 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 3 + }, + { + "programIdIndex": 6, + "accounts": [ + 11, + 8, + 2, + 1 + ], + "data": "HDtpqY3uCYv8VK5FAXvJVKJiyeFUY1KJsHnwwLbivMrxEE5JmPBPHoCLNUJzwdQDk68HHfEP4WYaXEakTr6hYsux18e6MXXVthKHGctSh82T2iTujLuvh1bpGAUU7muMgdSgDsnPPvqx3rJnJrkDMaBUKncGADmp4WfHphTecjSiPub3mMM2fTZEq2kUR7fgFRgdqCxHXS3FAPHZauUm511ZzFJftPZH73DPErGrPcLkAeUbfSGyLM4Fixo4UoPfFspRGuQgjLVf2WWSc73ewBgcbwxqQ2K5rX5tW3vTdsUhKkLnVVUdCejDLdnDJJ1TP3mVcp3pBfH5v3y9odRUQqeE5AgYXnJTquUCwZ7kQh6LrAKdhxGt3AJR33zeyrKzuP7uoBTND89CRaF", + "stackHeight": 3 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy invoke [1]", + "Program log: Instruction: CreateCompressedPda", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [2]", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [3]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 32067 of 856915 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 155954 of 980764 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy consumed 175687 of 999850 compute units", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 175837 + }, + "blockTime": 1746055800 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_address_transactions/65LymNk2ipP9e4XDZSSH9ikAd7q9TGcbeStt5x2EBnz11VBgoHjagAhZ9bFU4Kau2a86qU1hePpEPEm1tggD3o9G b/tests/data/transactions/batched_address_transactions/65LymNk2ipP9e4XDZSSH9ikAd7q9TGcbeStt5x2EBnz11VBgoHjagAhZ9bFU4Kau2a86qU1hePpEPEm1tggD3o9G new file mode 100644 index 00000000..64a196a9 --- /dev/null +++ b/tests/data/transactions/batched_address_transactions/65LymNk2ipP9e4XDZSSH9ikAd7q9TGcbeStt5x2EBnz11VBgoHjagAhZ9bFU4Kau2a86qU1hePpEPEm1tggD3o9G @@ -0,0 +1,126 @@ +{ + "slot": 94, + "transaction": [ + "Af3U3ILZz4AnCJ+pHbgG/r3elNYRk4Go9b31JLOZcrTUd+78q+h5POC3LNb9oecf5HB7boxQskcAZIntA5/vUgcBAAkMlJweADw/IvfAeASqIJXdkEr0tY4lxcSIn8RlFcI4owENAckoq0XTZVlaNOh3F/uwAIoZ0i8FLJ2h+YjEfFfeOs/WpQaYLjyBdiAbgERJR/oGU7DHmYztCzftA7PyiiUMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E1Z6byxrTwcML2wmbOqw6yP5L52ofqLdMs3HqZb9jnGL1/80cujK4wPMl27m4TnIKo8EH53W767jgEzuUspZD8vuzKHUQXK6FtbREdgftv+FFJ7+0I5EcpAQjv9FSeiZ1ruf4fnEP6U+TcsSzKasmPb22tU6mwXe8eUrmegyO4KQCBAAFAkBCDwAJCwAFBgsIBwkKAwECzQHl6s6C/v8pEAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBgT6JYnhdDvSqhKY9QjJW4PVdFLen+k0Ar/CymzafmU0U1aTUPtUt4283TB2zURbprTMlTRqGutY/7tk/bbZTcyJKMEQJ/1Hh9oIk1yye83yYwjTkUF+eJGYe625a8qUmi7/xtfWAUitqORJpdAgGZ0UWx7Hjvp1llVzMMrougedgOOcD62tN8vpacTNrd+pOgsoPFsW+Fhf1U1xA+qNseQEBAAD/", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999495067, + 9496510260, + 290369193, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "postBalances": [ + 99999479766, + 9496515560, + 290374194, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 5, + "accounts": [ + 0, + 10, + 8, + 7, + 11, + 6, + 9, + 5, + 5, + 3, + 5, + 1, + 2 + ], + "data": "KWv8WR8JeWsurSTFu7q6zhcSuSWJBB6cds697Ab65fAU51GseCTuS4F4b2TZj6nh2TxE9EKtvLyEMxEEzMFntZLJ8ftNoqUmtbbZmvzWRdEjri9F78hCmtsPML57aEYZB7AV8mnKig5fhTDDNPm5NXDDqEFpFfNBLBZJSdz3zvwo5jn8oF415qZw3bfauqjRvG5DyjB6KEvarXFN2tx5xknh2ZjRdoqiQHbecHa4svTGu1ZC86GHnYxz6auLqhHvrvk1hKgKTvooBqAfZJ8bufsMjb3Xhr9AtutoMfksFuCfYZpxBqpPctbikUeLhBhmdbKksAEHab5qhHPrFBA624HSAFmqtane73ucVyZ9qJ7Ga1B2SJ3oD5jVZ1c1FahLuuSubXARgX5LQkQdZqvKWw36XkrqDFFLD6Gsk6hSsLc2VWb7XxjjMqcWmdCeMxek5JsNLAvV5XSXPfff6uKVBu2EwosYfEkbXiPcVg8JvD9yshMErfAEDVQgbVcvKuHH", + "stackHeight": 2 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4WyeHbGaYB4b", + "stackHeight": 3 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 2 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 3 + }, + { + "programIdIndex": 6, + "accounts": [ + 11, + 8, + 2, + 1 + ], + "data": "HDtpqY3uCYv8VK5FAXvJVKJiyeFUY1KJsHnwwLbivMrxEE5JmPBPHoCLNUJzwdQDk68HHfEMivJe5yooXfTpvXyakmt243ph8teUTSnYiccpgtxZ8mDRtAajGvsat2iHzQV6wx8yuDnAqXCmzb4kU7bVcvj9gqwPKgjZhuJoFFcStShhJ4c8i98Awsd8RRzr6xzC3KmSZkm3eXc2FVN5UP7gE6n1du4AaDobjTmphWktzkceVp9S3k9qUE2NPDjMqgC8wPm5vNAxk6uzx6a7HJoHruWjJWeNPKqMjSsY5ocbzVjd51vFAPf95DthTgjv7ZxD3SP17yX8Ru9FjKbyhWo1L9iMGkqu825ePoH4etvZ89UfLaw2WZbDUmQirURbNMc8VDfc4pTPFLB", + "stackHeight": 3 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy invoke [1]", + "Program log: Instruction: CreateCompressedPda", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [2]", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [3]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 32088 of 856915 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 155975 of 980764 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy consumed 175708 of 999850 compute units", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 175858 + }, + "blockTime": 1746055795 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_address_transactions/PFp2Nba6UE7TZ7ZSzCfGFskeCeibYS8yZTH1UR8VQq49b5FcLRqM54hA1BX5APqNLwELPuFxBpGiDjiinoEHtvJ b/tests/data/transactions/batched_address_transactions/PFp2Nba6UE7TZ7ZSzCfGFskeCeibYS8yZTH1UR8VQq49b5FcLRqM54hA1BX5APqNLwELPuFxBpGiDjiinoEHtvJ new file mode 100644 index 00000000..41917a85 --- /dev/null +++ b/tests/data/transactions/batched_address_transactions/PFp2Nba6UE7TZ7ZSzCfGFskeCeibYS8yZTH1UR8VQq49b5FcLRqM54hA1BX5APqNLwELPuFxBpGiDjiinoEHtvJ @@ -0,0 +1,126 @@ +{ + "slot": 55, + "transaction": [ + "ARMxMm6gyBES8EX3ZP1ol6lxskVD++Snj56zlmavZWoW/frTGHnroTkHkAWSXdwQWINPkJPjqijSaqZC9FhH9g8BAAkMlJweADw/IvfAeASqIJXdkEr0tY4lxcSIn8RlFcI4owENAckoq0XTZVlaNOh3F/uwAIoZ0i8FLJ2h+YjEfFfeOs/WpQaYLjyBdiAbgERJR/oGU7DHmYztCzftA7PyiiUMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E1Z6byxrTwcML2wmbOqw6yP5L52ofqLdMs3HqZb9jnGL1/80cujK4wPMl27m4TnIKo8EH53W767jgEzuUspZD8vuzKHUQXK6FtbREdgftv+FFJ7+0I5EcpAQjv9FSeiZ1Yyp5pEDeH4Ro6K7nYKtQRf34tLCL6EpDCJg23FiM6tECBAAFAkBCDwAJCwAFBgsIBwkKAwECzQHl6s6C/v8pEAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBCdv4xIAFrcOA2k0jF7vb587p77OW8QIkaF8tvqBocwIAKptGQOf86JCzSTNsjwvX5i4k3ZQNFwdd/DmhKpXC3S2k/Tdcrl3AbY9+TpdGDfxjWHRl058OMjC39RC6wewGKQQqBP91aapeHDvdqJv6Xgf6g2qPZi129Ze1Ibs5moLLHhWBAyuFLFQJ1saBPEnRN5y7welogW4HXMFcEgLX6wEBAAD/", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999846990, + 9496388360, + 290254170, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "postBalances": [ + 99999831689, + 9496393660, + 290259171, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 5, + "accounts": [ + 0, + 10, + 8, + 7, + 11, + 6, + 9, + 5, + 5, + 3, + 5, + 1, + 2 + ], + "data": "KWv8WR8JeWsurSTFu5kSWA7HQMjW4rZr7b5ZAerHmSQn86d4GGcSVdQhH9ruuSMYnNqUCme8TTJ72YNsPfeh3c4KyMgzWbgKEFzn5o96HXcaeMU9xJaQZtz88HUzLupjLJUnCGyBd3ebeL1CmNHXQvQmQ3Uju4dQsVHX426NsQpYh1bsFwZQFpZHhzV5vLEfWYzPuAfhSNL92Gvx3t2DuRkQEHnDKQPTdT2izC9E8KebDDqeYS9HwZb3XxBW7yGrDPyQXjkFe2Cwq2WvPxquv2CWje7tMfpnUcA7KdH29BZLUoLb2BGbW6xbh5DvZCVWrnyHHf2GfWkJTddzWFfBQZwJTHX4FXNayUsdWeA8KHAsNXJSzmu4SNepXkP8yYSndTWi5R8LoBN5pyDnbh4CcZ9f8o1dmzqAvjnGCVhzgDeaqSiRJfpJo2QD8e3QJRdXYwwgHt7AXMbFsTEspngmsXBHc7JYqgTEy4AQ3EmwdvAzc94tndnmqVayKVUWS8Qw", + "stackHeight": 2 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4WyeHbGaYB4b", + "stackHeight": 3 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 2 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 3 + }, + { + "programIdIndex": 6, + "accounts": [ + 11, + 8, + 2, + 1 + ], + "data": "HDtpqY3uCYv8VK5FAXvJVKJiyeFUY1KJsHnwwLbivMrxEE5JmPBPHoCLNUJzwdQDk68HHfENoYmuk17hdarrmMKABqzyc5NS8kJPPoZFiX9a8j7Td51ATamXV44xavqdfUAzmA4XGis7XPhespnvgZn7cG1Q5b8e2znphP4dxy1J4zHiSn8jMzxNCWn3haJJGMYTCPdyu5trcg4pcH9qjHx8GVif1SrjQwxKPZ1SECB3P7hkkQRTkF7SpWV3mhsS2dGitLiuhXsYgEn44qNUi9skkHPmMqnap6ddfNEPnraK7hNxuSg2NS6aD1Epaz1d8A3MxCHYjRZtGPaoXsBeaQmZT8yPebshLSBtFeLi8P7KZFwNUCfy1HwFHPJapAJaYNHddk2C7WHdrBR", + "stackHeight": 3 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy invoke [1]", + "Program log: Instruction: CreateCompressedPda", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [2]", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [3]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 31244 of 856915 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 155131 of 980764 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy consumed 174864 of 999850 compute units", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 175014 + }, + "blockTime": 1746055771 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_address_transactions/ThDdJpiKP3o5f2YGZAqqHXYj3nhFQpW1Sq8RLLNsvwLeSDz4xacaB8bsiFZkWVzvMjBVzw65gQrMfdWSEbWwMTR b/tests/data/transactions/batched_address_transactions/ThDdJpiKP3o5f2YGZAqqHXYj3nhFQpW1Sq8RLLNsvwLeSDz4xacaB8bsiFZkWVzvMjBVzw65gQrMfdWSEbWwMTR new file mode 100644 index 00000000..8360c7bb --- /dev/null +++ b/tests/data/transactions/batched_address_transactions/ThDdJpiKP3o5f2YGZAqqHXYj3nhFQpW1Sq8RLLNsvwLeSDz4xacaB8bsiFZkWVzvMjBVzw65gQrMfdWSEbWwMTR @@ -0,0 +1,126 @@ +{ + "slot": 83, + "transaction": [ + "ARcE9jsa4GMIdSzRB8hx2T58pRNPDSmBshFCJpWcUFgICxNSwX0Ex5g5WDVVFFdwDUvDeS84UOqxX0gsnAekMAwBAAkMlJweADw/IvfAeASqIJXdkEr0tY4lxcSIn8RlFcI4owENAckoq0XTZVlaNOh3F/uwAIoZ0i8FLJ2h+YjEfFfeOs/WpQaYLjyBdiAbgERJR/oGU7DHmYztCzftA7PyiiUMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E1Z6byxrTwcML2wmbOqw6yP5L52ofqLdMs3HqZb9jnGL1/80cujK4wPMl27m4TnIKo8EH53W767jgEzuUspZD8vuzKHUQXK6FtbREdgftv+FFJ7+0I5EcpAQjv9FSeiZ1SeG8/Y7AT8DwwwBj2KVEuha8a4f3/MC5PImIFaXFqtoCBAAFAkBCDwAJCwAFBgsIBwkKAwECzQHl6s6C/v8pEAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBDYDzi5ARuwiUFhOjOgmw4NHM4PUdqXbE1+DlyPgByjuhg441t7xFcEI2LKi3KD6CVLCWKgLtoqf9wMYIH4BpWgG2lg0pNsQoW4UoQNzbKCtGwjVYL1uI453RzGCHKQyThtl2UaVcmfwgzqanCpGUpg2wzQr/5o28a9ZwtlNfe8CUrnG24k5jVWE5+5/i4JtkkUGTbGyKjEdKda6k/2ZUaQEBAAD/", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999602174, + 9496473160, + 290334186, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "postBalances": [ + 99999586873, + 9496478460, + 290339187, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 5, + "accounts": [ + 0, + 10, + 8, + 7, + 11, + 6, + 9, + 5, + 5, + 3, + 5, + 1, + 2 + ], + "data": "KWv8WR8JeWsurSTFu5p89Q7dX6CY488eXT19JVZBSjkDHYPMoGFayiVLzLVkstNwWnEUHxxzN3SQe8d8RK3QqHq8YUGbf7WPiuC2Amwgdmpz1K7qoRhmK44GF21WKRwnV49BnMh8FmHeihis4WVjPZDKCs8CM8pZEFdPekTgVFF17Yxs9bDy8fSJFLR7xy4uq36UykaDhcdS7KRtpZryvMCpJHPf78jeVemvhEmbDEU6BQ4cP9UQci87pCfcWdrJ2sy7smjuAyXi4a8SBq87JLGEnCq6tKKY8QS49jDvXXqUWndpk4nZsA8JxjnE5jZNiWc8QTkrV8sL9rwpNUweZP64ysLJ2i1io1eUets7avrmnmzKVjh6ifi6QiTtaf1ZPvwCnVN16utoTsaSmhrQMxyvMhSYsQeztpgKb1rLqAenGVTPaWQLnrfJiscbiVpVhiSvETyZ8GMFXoHujRYgto7QsSAFihPVGKC9BBxNENrfvtJ7dBP6VQFSQmEFctg7", + "stackHeight": 2 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4WyeHbGaYB4b", + "stackHeight": 3 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 2 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 3 + }, + { + "programIdIndex": 6, + "accounts": [ + 11, + 8, + 2, + 1 + ], + "data": "HDtpqY3uCYv8VK5FAXvJVKJiyeFUY1KJsHnwwLbivMrxEE5JmPBPHoCLNUJzwdQDk68HHfEPfnDYkdHZtVPTD6CvtCfBARBpmYpFb19Ld6PQ6reX4eG7zxu7uwAMRMPK2YV2stsRDnhYVPVAH2eXeQDhUoaHTQJZgA6gMFKTUNHfETs6k4AqcrQuKq7vsSCqS1eFm8qnvJnzuU358KRjLy1FWrh9zNZb2xFXgG25UM9gGWhPB3kk5QVJmKUPxKjh7BAYgciRv5yPNREB1x2F7XZuaQHJjmsNxnUZ66sKeZrsRL5ZAvoqo7uCBNTpfN8g2jSfKWELJMYfPCHDEaUtBpqnQnUeMuPCkD2qZLKzUnRgYxhNVwmkgpSHhVvAEWHsFGfaEitfDfMcHwD", + "stackHeight": 3 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy invoke [1]", + "Program log: Instruction: CreateCompressedPda", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [2]", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [3]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 32067 of 856915 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 155954 of 980764 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy consumed 175687 of 999850 compute units", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 175837 + }, + "blockTime": 1746055790 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_address_transactions/ThV9PGpdpX9eFuXYKsncwnfCPr2J4k8JgUxaP3M4nF5Ab2yPxHPmtm8LfsqUKyfxwKc45EATjSt6ZmgBpjAYhzR b/tests/data/transactions/batched_address_transactions/ThV9PGpdpX9eFuXYKsncwnfCPr2J4k8JgUxaP3M4nF5Ab2yPxHPmtm8LfsqUKyfxwKc45EATjSt6ZmgBpjAYhzR new file mode 100644 index 00000000..e55c013a --- /dev/null +++ b/tests/data/transactions/batched_address_transactions/ThV9PGpdpX9eFuXYKsncwnfCPr2J4k8JgUxaP3M4nF5Ab2yPxHPmtm8LfsqUKyfxwKc45EATjSt6ZmgBpjAYhzR @@ -0,0 +1,126 @@ +{ + "slot": 114, + "transaction": [ + "ARcF+vIBhxLRzRTlAAHfr+R31DIWV9xQj1FQo5MZoVZVsiAfV/5E8ltSxkez/nzf2puYG1pNzE5z9Xep9W76DQoBAAkMlJweADw/IvfAeASqIJXdkEr0tY4lxcSIn8RlFcI4owENAckoq0XTZVlaNOh3F/uwAIoZ0i8FLJ2h+YjEfFfeOs/WpQaYLjyBdiAbgERJR/oGU7DHmYztCzftA7PyiiUMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E1Z6byxrTwcML2wmbOqw6yP5L52ofqLdMs3HqZb9jnGL1/80cujK4wPMl27m4TnIKo8EH53W767jgEzuUspZD8vuzKHUQXK6FtbREdgftv+FFJ7+0I5EcpAQjv9FSeiZ189F3YguEB5EFwULgXDpi0xoNybTXwFlPL1rH82s5Q9ACBAAFAkBCDwAJCwAFBgsIBwkKAwECzQHl6s6C/v8pEAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBoWAKuqWrpYNHCW2ZZH2DVHC52FsHoZBcf28hDXyJ0xSf6dtTCbiL3swUTGNhtwptBxrg+FD8pQXSIk5WJ5qUshLu9bN3DofTSeKBWhKIrNWV5Zez8ufcGkljKN2FtkeVFbN4ezBt5ysGFGM8ke1e/9DXr1zkyGVqAKf2fteIMWagdVx3wq+orRwXpjf5nJb3wB22SrHBTFWZyxXsFvA+MQEBAAD/", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999326756, + 9496568560, + 290424204, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "postBalances": [ + 99999311455, + 9496573860, + 290429205, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 5, + "accounts": [ + 0, + 10, + 8, + 7, + 11, + 6, + 9, + 5, + 5, + 3, + 5, + 1, + 2 + ], + "data": "KWv8WR8JeWsurSTFu8PaYdR7L4KXkFdiRvZUhn8GiFt49MxPf4KTHgXphQhj9PPoLFJpzTJ1Y6QkBsSEUA9iZDtamm55oZDXf9eUcdWxEDbTUFNdvxRfgX9L4D4VLD3E9CGUxYVnLmup3EanDXNEJf9yohzqQPTwax4E4Q6cnwGs2SA7QKwwK9dkmvRU16nwLBVw1WMfYMWBYBzz57JWWndR3RCpS6JWj3G1zN9mdBLJe9CwRKRKFZXYefYZ9tcHkomafAEk4etF5Ni8DJB76o2qMgRqzGwUUmNSjCkrdoi1YbFGa2z4NpybpMp4XqFo9eB4yn7wgGr7o2iwGNLDLX3MTXTefz6XbQed9aycUooAeH3qhCoYSsT7et97o1TzLaptu7bFchCZaQmTyfeVjsa9Jrdbz2G7yJWyudDH6uXrBXwtBwxuopuA9awQXsr11H2XaYEhce19V3bsQhuKqiNptgcpMAsZp3TjKhqrtE6n44aZMC8Dy6kYTwCvURy9", + "stackHeight": 2 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4WyeHbGaYB4b", + "stackHeight": 3 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 2 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 3 + }, + { + "programIdIndex": 6, + "accounts": [ + 11, + 8, + 2, + 1 + ], + "data": "HDtpqY3uCYv8VK5FAXvJVKJiyeFUY1KJsHnwwLbivMrxEE5JmPBPHoCLNUJzwdQDk68HHfEQA4Dg87kMGYJV1Ue9yy7f47CcVtucGsAXSRJC3tiJMESe6voNakAv4re924VHqR6uPC72iZBM69WpaJGE6yT64tvubzbaydt2BNmM1eYdqLxNerCY947GpTbditoG5Aa1NjpreDhQd9kSqFFszNgDbX3GoyLdNTCohuhdck14Rya1ePyrrEJpPqtJu3bLqgaR4Hov8H58sRk3CdkKyAsKivePqvMRgX5BuuXWr3SRhKtiWxKLGMhtVtu7cQFb37Et8RjuLym467FSoBvW4RpyQv6vJW8wUhVWvU3oNBK5qvQk9wm34fhbumeCLwz9srRzGmmCwUK", + "stackHeight": 3 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy invoke [1]", + "Program log: Instruction: CreateCompressedPda", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [2]", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [3]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 32067 of 856915 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 155954 of 980764 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy consumed 175687 of 999850 compute units", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 175837 + }, + "blockTime": 1746055805 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_address_transactions/VnUYEWYsZTHgahy152W4Dojbo8URz2ZGypTrmN3Ssw3R1mAxWnmpzynJu6aioXhC7STePyiLxa56Pg4pHkV2vUo b/tests/data/transactions/batched_address_transactions/VnUYEWYsZTHgahy152W4Dojbo8URz2ZGypTrmN3Ssw3R1mAxWnmpzynJu6aioXhC7STePyiLxa56Pg4pHkV2vUo new file mode 100644 index 00000000..8b9200a1 --- /dev/null +++ b/tests/data/transactions/batched_address_transactions/VnUYEWYsZTHgahy152W4Dojbo8URz2ZGypTrmN3Ssw3R1mAxWnmpzynJu6aioXhC7STePyiLxa56Pg4pHkV2vUo @@ -0,0 +1,126 @@ +{ + "slot": 67, + "transaction": [ + "ARjSgFRDmVwIE6NyvLn4E/d4aRUbtvAbJAy4AZpwp10t0+g5bILQzsH4wlm6XPGkTJee90bgOdDMWJ0w9pBE0wgBAAkMlJweADw/IvfAeASqIJXdkEr0tY4lxcSIn8RlFcI4owENAckoq0XTZVlaNOh3F/uwAIoZ0i8FLJ2h+YjEfFfeOs/WpQaYLjyBdiAbgERJR/oGU7DHmYztCzftA7PyiiUMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E1Z6byxrTwcML2wmbOqw6yP5L52ofqLdMs3HqZb9jnGL1/80cujK4wPMl27m4TnIKo8EH53W767jgEzuUspZD8vuzKHUQXK6FtbREdgftv+FFJ7+0I5EcpAQjv9FSeiZ1krCSSb44cFNyL7Qetu3+IwNj/SRNxHDH5uwXWlqcniYCBAAFAkBCDwAJCwAFBgsIBwkKAwECzQHl6s6C/v8pEAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBJKlza6SePPaKvcDTYwzVF4o1zCXpJC19lVkSafrX9kQnKBbLI2IXCFywtaVIbwjUHWsN6vbfhPhYrh6pAMde1gfOpPsdC77PQg0QWgRPTMYk4/XQt9iee1JxfZDmH4kmhY7g/aR8lGfG2ytx9dLbxYr9zEReQYsU0sq+zIaGz2GlBBbidqDnnL5mU07RcTpARqJ6RWuAuqKjgNXt8VpdrwEBAAD/", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999739883, + 9496425460, + 290289177, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "postBalances": [ + 99999724582, + 9496430760, + 290294178, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 5, + "accounts": [ + 0, + 10, + 8, + 7, + 11, + 6, + 9, + 5, + 5, + 3, + 5, + 1, + 2 + ], + "data": "KWv8WR8JeWsurSTFu6DXhxXSiiAYi6g6MGHQQUhE98vd9QuM2jXLNQ4f3iQwiyTCh2MUD8kmeeSk2SdcH6bkD856V43a6Pa8drFoKYzoawDT1MYNDiFJVVbaaBMrYGQiJB5TsVubD7BNbr5kniPc8sPyg2yqEQhTMj9dC97A7M8jRrimfB2q8ZTNgcrK9Ep4AEdx5Q2zubXx6yZUvrmaH9v1D4ardRk5SsxMvDSW3VZUb7Bg8bGgowLFdxRDfqVSKowMJxRZi572742qWJ6DWKzpq5Z67dwnfpjqmTJJP6xqDhXdM2qMNVTSGRZgFcm2mCGwy8qc53yZycMtCdfUFazT5ZS1DUCtGZBfDVuu6EVDZvwtaPZwyG7NC32bFpTi2QPFGhbQ1khSKnuBJfzY6oc313KD8vC5pow8LSweSx7ASqxuqV1ynNefMusFNyh37F47QTWKGxnGcMVsmQzqkxLsSC2vu9uJsNt2ao582CW9muaScv3DmeUGTUER8kVd", + "stackHeight": 2 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4WyeHbGaYB4b", + "stackHeight": 3 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 2 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 3 + }, + { + "programIdIndex": 6, + "accounts": [ + 11, + 8, + 2, + 1 + ], + "data": "HDtpqY3uCYv8VK5FAXvJVKJiyeFUY1KJsHnwwLbivMrxEE5JmPBPHoCLNUJzwdQDk68HHfEQWm5CswnjM253B6jzomAnE71mbdop7j1iVXLeD5cTFduoGWmCraMaYPMmG3GugpwxzZmaY8bpBH18g1xCM73A6Ko5KGeFVue38Q26RKDuXn9UBFQCuUL9yfFhJNLtgybDqLNnQh4bWRsh8s8aJmKAzz2aj2LNWzYUr9kLTw8czYDTukz3JKd7BcdH9eQDbnMcJ5MoDA1xQo8VFiGVow58o6XdRSWcXdvUqSWFTkhQizEb9VoXgH5YQzpB7VhUcMhRmJ9MZ7R3ers5QcMnLRttxQxM1P4FGeNUhZY6cntzoJQ875XW2fx2v2yZPi1vKTUtYxBkbw5", + "stackHeight": 3 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy invoke [1]", + "Program log: Instruction: CreateCompressedPda", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [2]", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [3]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 32088 of 856915 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 155975 of 980764 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy consumed 175708 of 999850 compute units", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 175858 + }, + "blockTime": 1746055778 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_address_transactions/YuVNeH1RWKZbRu5qk3AF75nWGR5ehpM4WDTw4jeMZxr8QRreLZkg8NtsZPWn9oMymTU3nrs9gquaM2UMohxB6uK b/tests/data/transactions/batched_address_transactions/YuVNeH1RWKZbRu5qk3AF75nWGR5ehpM4WDTw4jeMZxr8QRreLZkg8NtsZPWn9oMymTU3nrs9gquaM2UMohxB6uK new file mode 100644 index 00000000..9d9c784d --- /dev/null +++ b/tests/data/transactions/batched_address_transactions/YuVNeH1RWKZbRu5qk3AF75nWGR5ehpM4WDTw4jeMZxr8QRreLZkg8NtsZPWn9oMymTU3nrs9gquaM2UMohxB6uK @@ -0,0 +1,85 @@ +{ + "slot": 137, + "transaction": [ + "ARuDfn67J3QiID6Y4WiC56ZWzX0a5C5J/K3jTOYg4q7Ff8tRAycdwiabPp/Lgc7oXbmUZACeOWCNTIj4OuARQQ4BAAYJzLjCFXXnWj51s6K1RyQiLzHD11pzA0VK0kuivz8zqswhWc53yo4Lew6JOci1vTttbJcOTjfIMGIiy5vpCKZaRM/WpQaYLjyBdiAbgERJR/oGU7DHmYztCzftA7PyiiUMAwZGb+UhFzL/7K26csOb57yM5bvF9xJrLEObOkAAAAAFDSsTeVE2hc8C8rX9UpG9lZsrBgqlJepbNIE7Hbm3bgksNuwi9ReDAP20Sqpq/8/wpG4cvGQcDj7QnaE7nvUIC7wPwLtHyi90xBEulKsTz6PGNOXcF+rLA80aI81+eHwQpl591jkE+Dg60Dze4Hi5FNhzGIA7FTWAcNeS4Fz957/QmmoHZdEI20ACv+9MyGVTFGij2iz8yvlzRZ4iyBL07V/kgJz6ecRxFo817d48sj8NV+n4sDPfkN2dyRpSwvACAwAFAkBCDwAEBwEABwgFBgKtAat/8kF9vXl1/6AAAAAQGKK+MVuFyrO8cAYDD2OP1JBj59aiFvCxJyNuvPf/C6OEoGYYLDiXnTNZIxZX8ojosrl5XmO2AhAHHjstUdU6mk/5ihlWp4zl7uz4RyMQ8Wv7XsK0H+952xfl4Nh4tHApIQrFhS+Imit5FCO7yBpPnW4Ha3A8g7Uh+53Dr0Sh95Bn/e0oVD8Ye7dD+9rZRJHAN4xO8cpB8Zm0Re5r16DT", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999980000, + 2735280, + 290454210, + 1, + 1141440, + 1141440, + 1141440, + 0, + 1614720 + ], + "postBalances": [ + 99999975000, + 2735280, + 290454210, + 1, + 1141440, + 1141440, + 1141440, + 0, + 1614720 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 5, + "accounts": [ + 7, + 8, + 6, + 2 + ], + "data": "SBkMhczQ9esLdkDPW17h1PrvsVACLEjLzR3kexZQL78xiq7gEo5ozKWFeAc2MHjYym6DzRvD7TFknCGfs7TZD7KYLugDGfhzWjjcrQTBKzJU9kWw2FkxzXD9PQ47VdjySZD6UsbzTHmK3JoJCy9NKJN2A9AWwZS9osnQJQKqybSKevBcJqHMgUNBmRowE9NRbgnFRDZD54w5GCYFiAcjvpaSpDZbtdnUgd2hFDgGmyk", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [], + "data": "3Q747BoHqHsBxkNHj5NHEZnP1TajcfmzuWaVnRBAGpdvhUvpLwjkwwa67QwjtszfAHTtyTwhNbHH4vfYf67KtiQCSNeFyrX9LXffM8P253AX7tdvQWkfUEy5SJVeGiTHyd7z8AzramouJ13uwx2RnPx6erXD5tequ", + "stackHeight": 3 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program Lighton6oQpVkeewmo2mcPTQQp7kYHr4fWpAgJyEmDX invoke [1]", + "Program log: Instruction: BatchUpdateAddressTree", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: BatchUpdateAddressTree", + "Program log: Incrementing next full batch index", + "Program noopb9bkMVfRPU8AsbpTUg8AQkHtKwMYZiFUjNRtMmV invoke [3]", + "Program noopb9bkMVfRPU8AsbpTUg8AQkHtKwMYZiFUjNRtMmV consumed 38 of 881605 compute units", + "Program noopb9bkMVfRPU8AsbpTUg8AQkHtKwMYZiFUjNRtMmV success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 102538 of 983946 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program Lighton6oQpVkeewmo2mcPTQQp7kYHr4fWpAgJyEmDX consumed 120365 of 999850 compute units", + "Program Lighton6oQpVkeewmo2mcPTQQp7kYHr4fWpAgJyEmDX success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 120515 + }, + "blockTime": 1746055817 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_address_transactions/aaGxqtYEDKbWuo2JkmmwiVmWer7wMPAs3KGbfyGCNiKRtt9yprJS5hMbBY49cJYPCiuCahmCQKN7qzSrbZaR86Q b/tests/data/transactions/batched_address_transactions/aaGxqtYEDKbWuo2JkmmwiVmWer7wMPAs3KGbfyGCNiKRtt9yprJS5hMbBY49cJYPCiuCahmCQKN7qzSrbZaR86Q new file mode 100644 index 00000000..0b8f3a82 --- /dev/null +++ b/tests/data/transactions/batched_address_transactions/aaGxqtYEDKbWuo2JkmmwiVmWer7wMPAs3KGbfyGCNiKRtt9yprJS5hMbBY49cJYPCiuCahmCQKN7qzSrbZaR86Q @@ -0,0 +1,126 @@ +{ + "slot": 48, + "transaction": [ + "ARzz47vR7KWlRwwXEXsioSaI//84NN4YphiLCE2dI3jtCobRxBqJgLkdDxQBUr9bND6RidBGFy6/Znsp7gBV7gUBAAkMlJweADw/IvfAeASqIJXdkEr0tY4lxcSIn8RlFcI4owENAckoq0XTZVlaNOh3F/uwAIoZ0i8FLJ2h+YjEfFfeOs/WpQaYLjyBdiAbgERJR/oGU7DHmYztCzftA7PyiiUMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E1Z6byxrTwcML2wmbOqw6yP5L52ofqLdMs3HqZb9jnGL1/80cujK4wPMl27m4TnIKo8EH53W767jgEzuUspZD8vuzKHUQXK6FtbREdgftv+FFJ7+0I5EcpAQjv9FSeiZ1QE7lnQyvVvU/rut6mGEp1j+vwHZwO/FPsi4KSlBUsAECBAAFAkBCDwAJCwAFBgsIBwkKAwECzQHl6s6C/v8pEAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBpFuRCh7WDJUrAtW02BTafC2Kk1NEuNUd5kS7YTqId7WmB32mCZc5CkXo14mW4maNP2kA9MD/IwP0qdEWo91I6SoHdfZ8qcP8Ob7qLpGXVcFNBSky3K+0dubVydlbg3GkIwt9RsuLR96w2i8VoZmXwKlCMp1skbFrPfSJeV5UDONQT7KkRGHMC+uzJSgO2RMKWbvbMRwB/XNJCaEfnkhmKAEBAAD/", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999908194, + 9496367160, + 290234166, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "postBalances": [ + 99999892893, + 9496372460, + 290239167, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 5, + "accounts": [ + 0, + 10, + 8, + 7, + 11, + 6, + 9, + 5, + 5, + 3, + 5, + 1, + 2 + ], + "data": "KWv8WR8JeWsurSTFu8SbPH3A9SqcFJ1AxGLJCpK3Jq1eBK6AvkV5DTcJ7s3fcfNbPKrvEQuqPbrLWfZsCAATFBET4DaJY17LhNZ7thjPcjrTNMuGVxDD6QHX9kAsXDA8EgfUmTsoFnoP1FBTW2JGuEAv5gv7XD4vZX8T7cAupcDu6HSgPJxVJPtSvFyTYhoBKVCRS5TxrziDwLu8xD9hGEAWPXy8jg4kFyCVLei2T8y2Ga9o3XbW1ArMbJHRWNpcZuWNHBjep5DBYQ4tahYEHMquQtUm3Y9akRG2pySJstwFxHqMNDWgBMHxorZ1TDscc92i3d6Xd8BFZartaCQ4g2CG3uWyHbhtczvQarMDLbr6kuM4h3hJmbqXjrbkaxXwDK1Fr6C1a9RCz5DcFKPWciPTmnWUD2TWat6LcYm9HwNLaJURGqkycjZ9vXFHUbHk7E7aDBassYTaknRhBHPK71Aex3GTsFfZLSikvWvPWkjmEAVo5XYfVS7xT2BC6M1y", + "stackHeight": 2 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4WyeHbGaYB4b", + "stackHeight": 3 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 2 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 3 + }, + { + "programIdIndex": 6, + "accounts": [ + 11, + 8, + 2, + 1 + ], + "data": "HDtpqY3uCYv8VK5FAXvJVKJiyeFUY1KJsHnwwLbivMrxEE5JmPBPHoCLNUJzwdQDk68HHfEP1wGdNfd3XUiEhnpdZZWz1SJes2MLdkJWYocKrR1U8beMoji17nAKtFmUdSzS4ZJ8zpEy1txXHJLohqWuwo4d7JYYeBK3a8bpdJCVGzMgmAkygLfZ1vJ6soTy29cirTcfxQ3qZ4aPb4TzDxADdAHML4cxsMt2dsoAACSRK4bYA7Fvu7jTtcvzV7vtbTuUn54d9RSs7rfx4qV1DSw8ky1ZZdj89NdrfRWTuAfVi3xCzZJLLGcLLCzsfwXZn9zQznQVv9bVaRNoCHyJ2QzfYzTZKqYmvMUUwvb6WHgBeeMqkRWXotgdxzsKtHKvyLBjXR5C1fAfbLj", + "stackHeight": 3 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy invoke [1]", + "Program log: Instruction: CreateCompressedPda", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [2]", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [3]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 32088 of 856915 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 155975 of 980764 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy consumed 175708 of 999850 compute units", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 175858 + }, + "blockTime": 1746055768 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_address_transactions/cvET1U2LFURfu7PaVkrKSt7WjnN9JnJg81mNEkzzqSwxVz3LYmiyUuBSBAMnHN9uh6CUjDaTLHgjhK43UQxbBHR b/tests/data/transactions/batched_address_transactions/cvET1U2LFURfu7PaVkrKSt7WjnN9JnJg81mNEkzzqSwxVz3LYmiyUuBSBAMnHN9uh6CUjDaTLHgjhK43UQxbBHR new file mode 100644 index 00000000..7dea2f04 --- /dev/null +++ b/tests/data/transactions/batched_address_transactions/cvET1U2LFURfu7PaVkrKSt7WjnN9JnJg81mNEkzzqSwxVz3LYmiyUuBSBAMnHN9uh6CUjDaTLHgjhK43UQxbBHR @@ -0,0 +1,126 @@ +{ + "slot": 105, + "transaction": [ + "AR75YTOYW9aLMwX7aaIQHdTfM1WHvrIJDlYza9yVv6Q0Gkj1btkDUgNo+oqPYrjCdc74aTmmYm8UhB887esw9QABAAkMlJweADw/IvfAeASqIJXdkEr0tY4lxcSIn8RlFcI4owENAckoq0XTZVlaNOh3F/uwAIoZ0i8FLJ2h+YjEfFfeOs/WpQaYLjyBdiAbgERJR/oGU7DHmYztCzftA7PyiiUMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E1Z6byxrTwcML2wmbOqw6yP5L52ofqLdMs3HqZb9jnGL1/80cujK4wPMl27m4TnIKo8EH53W767jgEzuUspZD8vuzKHUQXK6FtbREdgftv+FFJ7+0I5EcpAQjv9FSeiZ1G9NxUlaKFGLE7YLGAd/UcSKUcgExQzpOSKFL6IuKs+ECBAAFAkBCDwAJCwAFBgsIBwkKAwECzQHl6s6C/v8pEAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBGBRP6Q7g1CweDJUVz6B2UwLmwdoQcnXRMHu6JVY8/UKf2+UUAdOuOJwLg8lbPY8IGwIXSuS7v110R3o3kEUsKCpLbvci+kTQr1wc39JUFLRm6aEt8+esgTTfdDvHW01Okat4beaW5VKQU6rthZTJZ3t8rfKbCuSLXPAW3/1st8RH1liGbMswRsHPIaRBkADaXZc5kjlsm3XNtAsX6A3B/AEBAAD/", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999403261, + 9496542060, + 290399199, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "postBalances": [ + 99999387960, + 9496547360, + 290404200, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 5, + "accounts": [ + 0, + 10, + 8, + 7, + 11, + 6, + 9, + 5, + 5, + 3, + 5, + 1, + 2 + ], + "data": "KWv8WR8JeWsurSTFu5zp6qrMtWj8WcFFP2X4DWfYGMXKEewNgQkodXwNaC23xmfDk1BNCt19LMZSvNL1BsBGqTzWjwizCtnYz7SejHbaP9UV1oWWmKT8tWhVwWhLFyHv1nN2WtrxcbhNxnXFpqufNNqutficycrxGY7vZA3ea8s9WH9M6GEpyjU2dzqV82GJMifGu7bMXRm2VRC3kQHyczd8juqSgbWtkNew1nGpYv9SiM6Vrf5ft8R8qNdedhPBAswpSE11NcsF9KmHgviF5j8ZwuuMxzxzyvQS1TZw5tSwUn4sZwfJR8rXW61Ku7hWEJN6nRTasy3DwEFJSLGuGdjNpAPWZssRT3E2UoZf9guRwgXFKKbVf7YsKS6pmn4f3HVTkNycdxTYkUfQD9SjAnQKHsf4hhy8VD3ZJB4MRCu7HkZ7p5Fnf2M4s6aGFVGeCKmUViDtsiQxxSbchE8z1XbmfPYbEk3WCwnVgpNUEhzCuyJu28PNAxefF64eUp8f", + "stackHeight": 2 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4WyeHbGaYB4b", + "stackHeight": 3 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 2 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 3 + }, + { + "programIdIndex": 6, + "accounts": [ + 11, + 8, + 2, + 1 + ], + "data": "HDtpqY3uCYv8VK5FAXvJVKJiyeFUY1KJsHnwwLbivMrxEE5JmPBPHoCLNUJzwdQDk68HHfELwJPpzbdHF5VDvLhAiSHjv1uDmAfeuBXc1fh9x6hvj5hjgGFJP2CCtwozWo8bMbeDpcP22S6SHXs1QmzMWwhRW9iNjU5ucVpQKXXrLRgXPtnuWQU1j9jtK9adg1zgsxoLfL1LfpCaVeBotrRcJMDcxkWbJs2BkLP3oWkeSQtm3L325SMaywZqf2Mfvdk3cV3B9HQjT3KPtK5PCRAc5ztSBP8d4BKHhaP26j1YCghws7fJvcDCdK3nJuXwKLv1fLx2xfnaNHWQUrfGGCxU3DMVWNBaffu24TQkx3eEFxxqJQriX9swQmhGd1qtuWVh9b4JXK2C47q", + "stackHeight": 3 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy invoke [1]", + "Program log: Instruction: CreateCompressedPda", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [2]", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [3]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 32058 of 856915 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 155945 of 980764 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy consumed 175678 of 999850 compute units", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 175828 + }, + "blockTime": 1746055801 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_address_transactions/pTUW9ytome5y5cFoG2fTs9qgTYysMkL7nVkrJeT2NV8yGpotwA68FitHwpqmp4vvW2j5xhAYsiQpJp5aKThdT9w b/tests/data/transactions/batched_address_transactions/pTUW9ytome5y5cFoG2fTs9qgTYysMkL7nVkrJeT2NV8yGpotwA68FitHwpqmp4vvW2j5xhAYsiQpJp5aKThdT9w new file mode 100644 index 00000000..380c59a1 --- /dev/null +++ b/tests/data/transactions/batched_address_transactions/pTUW9ytome5y5cFoG2fTs9qgTYysMkL7nVkrJeT2NV8yGpotwA68FitHwpqmp4vvW2j5xhAYsiQpJp5aKThdT9w @@ -0,0 +1,126 @@ +{ + "slot": 117, + "transaction": [ + "ASjstVwnaDdNAXx7GIskdYG9EEf/+mdZx57Ykvn+IkGOfW1RzMkZS3slj6WKhTBRwzyE222gvyu9i2mfn2S24w4BAAkMlJweADw/IvfAeASqIJXdkEr0tY4lxcSIn8RlFcI4owENAckoq0XTZVlaNOh3F/uwAIoZ0i8FLJ2h+YjEfFfeOs/WpQaYLjyBdiAbgERJR/oGU7DHmYztCzftA7PyiiUMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E1Z6byxrTwcML2wmbOqw6yP5L52ofqLdMs3HqZb9jnGL1/80cujK4wPMl27m4TnIKo8EH53W767jgEzuUspZD8vuzKHUQXK6FtbREdgftv+FFJ7+0I5EcpAQjv9FSeiZ1ubsFQG6LV1ravENyqpdEin9TXiAgPKiLisgIwc0QaVECBAAFAkBCDwAJCwAFBgsIBwkKAwECzQHl6s6C/v8pEAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBIkjnh30VHtmlCQ7fF7hQZtcHAZ7xqPqS36xrP+4JV6yZarTFNZYMNGz/tl5kjSWLqksxC+dpiL1FGd+FjAENEhsyfAaI8VfJdO4TJwn1v5D2De/6lplvNEwbAX1Y/ebxpmSakvzTuvsRA9rdMWGEoT3Hu+vARnVqkAHQdep4W/WsZswifWjZZ1kmw0i0yf8GOySzFRxUs6zhCnl7hOMYuAEBAAD/", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999296154, + 9496579160, + 290434206, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "postBalances": [ + 99999280853, + 9496584460, + 290439207, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 5, + "accounts": [ + 0, + 10, + 8, + 7, + 11, + 6, + 9, + 5, + 5, + 3, + 5, + 1, + 2 + ], + "data": "KWv8WR8JeWsurSTFu6B8Mda7nki9roxmPjgnRhpwYYJbGuaFCAvmMA7JisstgpCN4irEQ4iEgdbUZA97cGE1t9zc97cd53KsDyRe3YVxj8MVusTm9sKyzcpcQFnhpso6RvADoGjGCzdWEheJoK8FPxTMYzwRLgzbqgi1j29VLKYbZShxsKwV8KeKepzPM3VjCNkyatGKE1FGThHg47ogByyW1D5PeUFvMthhVLmepqoBjznvwik7c5RFvGuwoFuaiHtpdbd5C7W2fpkNDwPT8zszjV4gYzS4KLnMg13qDLeboudct5iLf7K28kXCjqSuBLQ3JPs8kRpc8vAzXctKB67Z8xEDpaWp1Hv5Ub3HPv7PmHMXT3KmRjh9ZffirncgidLBfEG7w3rjjJZCvUL7GWxiif1aA4RZXk3mVnx1uzKhdy8M4ihgUEecL6h4vYWoFb3HEgJFJyf4wof7AVdTg7Mp9grFRRrgjWiM57dwQnNCtzVkm7kAhJie4kEDA2BH", + "stackHeight": 2 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4WyeHbGaYB4b", + "stackHeight": 3 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 2 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 3 + }, + { + "programIdIndex": 6, + "accounts": [ + 11, + 8, + 2, + 1 + ], + "data": "HDtpqY3uCYv8VK5FAXvJVKJiyeFUY1KJsHnwwLbivMrxEE5JmPBPHoCLNUJzwdQDk68HHfENYBWEY5KRYLgPzZX4wamdB7pJfq8UtM9RWxdtmtGtGDGCraL2xUBUhZKmNJDpPiD9CSHh81Q7i8xG7qBzgy4NLyLK62c8NrRcYQwD2Achpm9KRuKbZZGDfheuETELUfcTrTcXyDtPab7kZk1zqMk2ToEmkScECdXvtPDcX11BfYXa44hziUNJGc4hV943WPtW2JZY2fMNB5Uoz7j7SE2f6NGqJKUR7peFphH95hbUUm5guKYC1FrLi2zqFGEdZQt45hYoCWd32VuNAjXV6o7128wuAbc7dd2yZRoHT5vW7kxefnmqvMwddpDpoit75YUzv3CJsMR", + "stackHeight": 3 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy invoke [1]", + "Program log: Instruction: CreateCompressedPda", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [2]", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [3]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 32046 of 856915 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 155933 of 980764 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy consumed 175666 of 999850 compute units", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 175816 + }, + "blockTime": 1746055806 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_token_transactions/2aywxHHakkzp7XUbH5y2pgBe85AQXYGFxnRSJNnrFcHmEMa9nqCND2ZxB5mU2ip9pKzDC323whQPQ6GznXhJSzh2 b/tests/data/transactions/batched_tree_token_transactions/2aywxHHakkzp7XUbH5y2pgBe85AQXYGFxnRSJNnrFcHmEMa9nqCND2ZxB5mU2ip9pKzDC323whQPQ6GznXhJSzh2 new file mode 100644 index 00000000..a92864bf --- /dev/null +++ b/tests/data/transactions/batched_tree_token_transactions/2aywxHHakkzp7XUbH5y2pgBe85AQXYGFxnRSJNnrFcHmEMa9nqCND2ZxB5mU2ip9pKzDC323whQPQ6GznXhJSzh2 @@ -0,0 +1,115 @@ +{ + "slot": 23, + "transaction": [ + "AU9SWDR4ml9nJb13RPPxKrV3r0c4nwGbySv8AmIZSNLBIkQEWc4d5yXpWJmFjfWfLoADqV1B6RlOlnaOw7hhQg0BAAkMzLjCFXXnWj51s6K1RyQiLzHD11pzA0VK0kuivz8zqsxPL8LQWvwrEthMKXEIoXESvMrPc33rl26npvlOS90m2/KuWuX0POEKz8TJiMAjOgmV1yiV9Am40XHqZVvj8yn+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCRWjVyN5To+2XQdba3JpnDjdAuWUi3Ww5aBBjoCXW0QJLDbsIvUXgwD9tEqqav/P8KRuHLxkHA4+0J2hO571CAu8D8C7R8ovdMQRLpSrE8+jxjTl3BfqywPNGiPNfnh8HuvEjPsyZLvDS/XFpag0/GdQAG8phtlvI1vIh1703UTmyRiwvXzPkVREinq/ao85eCmh6P0Ip/DQs6q4eFL8MvuzKHUQXK6FtbREdgftv+FFJ7+0I5EcpAQjv9FSeiZ1FJddIwpWpB/5Pp+dvTlTWYsWkotSZJwZiEmAQjnVL9YCBAAFAkBCDwAGDwAACgUJCAsHBgYGBgMCAboCozTI54wDRbouAQAAALKhEY9SMt2zMH/xM5JCSdHnP1yNvd9oR6nJxbg4iDhRAAMAAAA1MAAAAAAAAAAAAQIAAAABAAABQEIPAAAAAAAANTAAAAAAAAAAAAEBAAAAAQAAAUBCDwAAAAAAADUwAAAAAAAAAAABAAAAAAEAAAFAQg8AAAAAAAAEAAAAwMB5lnHw3aAXzMUDxus9YrWsBO/pBM0h1RdpOJ5vPjonJAAAAAAAAAABACXplOjodEYkX7duwbzCHW6uTRk+rEUA6Qj1/BJ96L0SJyQAAAAAAAAAAQAVcKzyEviRSNxlhWoaGyrJiElwtA9IA8FxlakYxC0+HyckAAAAAAAAAAEAD8vFw46X0OItmdKnAR/LvMy0UP0Q16vsOrqXcFE/dk0qJAAAAAAAAAABAAAAAAA=", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 9992017517, + 29682443, + 290204160, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1141440, + 1614720, + 0, + 0 + ], + "postBalances": [ + 9992007512, + 29687448, + 290204160, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1141440, + 1614720, + 0, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 5, + "accounts": [ + 0, + 10, + 9, + 8, + 11, + 7, + 6, + 5, + 5, + 3, + 5, + 2, + 1 + ], + "data": "7Jop1ehcTzUcbdrxESMxCj3XEDupKXtQyVxkvmSw8Y9AFEDUBy1yYgrdCkTjLbXQuUFdwF3mFPhFihZv3aqJBeKUAbWjXfGeuJrp2NNjhqZYq1KZP51voGs368L6ZF1vgq8Vfcoa69NVzhmAQuqnRfMobKQM78yCoZgjnD4DWuFcNSeXme7o1qH6nSnmhtrusVo4h9KCMSUCjGoE4yniQRMhHjc69XkAyTN85Ex9b6KPf7goY4PwvEqSek9eJ5kF8mx3WQwAgTrr14hXkfM9zesFc6yZnfJtHHcXDX9E9AJJPBzs9DA92UynAzZuwUAnx1UarB1V33m74ZoNtFiKYM6VhF447ceVm3GqgqKTSLiEN7RG1qgd2efrgbLpq9F34FciVoNTMiRi8unWehFdPjvvpvwjCbxs93ZkecJXknVhBsfofptmZnA8nEGdeu3681b3gsQCfoqnjFuSXHfFof1dXzNDJzunft29BTTtzi4WMXe7gXAhcNgNXgRf8kedJcTrEeXBypSWLrLiQ4Fe8kjc8ihJS9HQuxtfHTcu41WwwomAod4mBBrdZikmYnfgmLNc9kELbjKjZJTgtpqrT8qpoVivkgAr8KgdBUKS46BS4VKs6jk5binZaVDADfE89Xy2f8U9nWP5uUm8CaykWysX3SwyVcA4Fye8KuG3r6T3JTzGY9PomG8P5ZLQXZVf9QZjZjiQh2RL42xghhpMH5aHTHhHHRN6qB6zLSHomYTTkMgBhb5KX9vU877oZR6KPZfkQ89PfB3kvSth2JZAjL9nw3kb7ERfYvP3RBES4sVc7VRYdnSNU1z7XCJ2Byyke3gEVCWfGB7THMABD5LjJncJ7EmDJqAfdhXQsTjXLtV4KUc6mFGoJV5GYk8ytC6AZsH7PxLueh3zGSnfVHoLpuHzrCfYmN31LQxC8Cux2CXZCWQc5Bxt2ryGJYunD9cPmTEW3kgagZwH2yqwoRVs4pMLFG6yRPaYBe9WNBE2HeGan15JAu5vwbtHkLPJycx9rHm2CpWtaPHnpvuH4TtDbgfPw2XYmqHfVi7dxSKPxiQ6NHMcZWPs7699DGC6okTm4XAnFLnL1NndYDHqAW6ozg34aP7XcK9SkuPoknaQdVJN5q4BVywHExd6qs32UbyVxxXjDjE7dAQ9iPwSdnThhuD5N96EWjypDNndnTBAFUJmfA8f7CfECfz2odMZqLGdwRFu7SmJj33zA8tbFaxMUbqTJpVyQDSTvjxnyvFy8UcJQZRaqZzP3g2DHNoJ6nhtcVgoUufkBUiA8M2ivstwUMYyfj8s159mx22DoikqafL8rqXdHiQsNrhHtRr5t3JRtNzUAhMAYKSetErn5u7eSymJpqPRdWstTo7opucf7NSsFDwKFYYNEugmxP2CxxmGkeDN9m1VRJTu5daMsT4HHVFKLcYLkmpvb6m75KgXPu7si1fuAAQpJ72azG6nZR5S1EdXBHh4PYW2tRLRZiuUge354ApvZDqQzAe7bCJ5ehcDQD5T45BQuNvNyMH4AMjaKXRNKqSA98ZaDZGGgLJpTjTzDRaxTVFpGmKEeFX4NtEMGbXNnWb2u447SvAeruS945ki8isnQk3Tt2Bi2zRSpDomFZbA4gzP93kWaTq8uopg4PxEXSbqHeanisSqsV3EUAeNPKHsUy2rZnpZgTaf", + "stackHeight": 2 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4QTFrZvAUYUX", + "stackHeight": 3 + }, + { + "programIdIndex": 7, + "accounts": [ + 11, + 9, + 1, + 2 + ], + "data": "FW3WfqGVQLkWVqFh6rNAYK6SUpt7wNrRnMDMaYM9wV1wucBzjA1PdJLz6UGeyBfT6Pgg6ym8hfDeWpadeBY2aJSEy4c7SnmTVMMigMdVqBjVqkz5YBLdCSFZ5bdHv2HCyU7TvTao8bUuF85ytXKfih5hjVdP7N1dtPb48izw3TEkZ4wMwctcpK1nCuzymXhgh4yKkm7U4AR6W9sFz7VMjK6fsr4Ac3i2KJ73VYqjYtPbWSX39utNTp21r1sPawot3Hv2mtfmKbwLaTMuJuhb1DvNmsPL1cKDS9hqqpwYAAFV2gzDNPZfxvA3FoAMChawCkVyuRFbTivacvFsrDGfJRfXcXpzkLiQhMHBcZJtjge6STxyHKQ9hyYfLyuoSPLzw79UrDj8LDj1jGg8Qin54XU9Ejit5CsgyuEjj2uQ69mmUrpxQdRS46kRiiQqW5S6KnVGoLzysjoKGvg2jPGm8eCYwfVRN5vmr5nKAvqbcRW9uD411ZBWbpPoa1a1dw33Nuwsm15C87ijrKSfDUFK8ZP6DBgcvf9bPExtX54LMZMNr9VdDD78yS9Sq6fkizWXu2bS8MWUo4ecrNhVcSJrKXBGPEo6o4QxYwzM9EpdxobjiGEXKqVRV4oHw8fHHBFd8u3o9UUFD6J3RoJ9sxV7MPEpoM8bTn23DnVFw8sLbUxVxeY1HpKWtPyX38ZLpyvyM1tp273xC4hMamRdYVfpePyzgnBuGnNui7imohtzbhBPgLnvUxH9rKaFbCugosFHeoB9sozZ75dP3Ue1uMHj7RLvctDhPZDRod9F4Z6uwBDwMjtAJuGtGQXyGKg73iX3ZWDWagocs8qVbXSgc9sm9hDsXbCZJmMf2DZh1BQYduEcsfNtbhMaoTgp1UJcYuKqf2YLimD6sMVJaDX8NcLdvwcbX1EToHjCbFCDD", + "stackHeight": 3 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program cTokenmWW8bLPjZEBAUgYy3zKxQZW6VKi7bqNFEVv3m invoke [1]", + "Program log: Instruction: Transfer", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [2]", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [3]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 22612 of 920925 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 68327 of 966602 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success", + "Program cTokenmWW8bLPjZEBAUgYy3zKxQZW6VKi7bqNFEVv3m consumed 102740 of 999850 compute units", + "Program cTokenmWW8bLPjZEBAUgYy3zKxQZW6VKi7bqNFEVv3m success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 102890 + }, + "blockTime": 1746053462 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_token_transactions/479JQtTnp7yrqUUMA4daPK1MVXEkvrK3rsfzKi1bYBcGnkMHf7L9CrzDZxinU91uTBtjZ5xnmAYW83ZG9xkvTAff b/tests/data/transactions/batched_tree_token_transactions/479JQtTnp7yrqUUMA4daPK1MVXEkvrK3rsfzKi1bYBcGnkMHf7L9CrzDZxinU91uTBtjZ5xnmAYW83ZG9xkvTAff new file mode 100644 index 00000000..a46368ba --- /dev/null +++ b/tests/data/transactions/batched_tree_token_transactions/479JQtTnp7yrqUUMA4daPK1MVXEkvrK3rsfzKi1bYBcGnkMHf7L9CrzDZxinU91uTBtjZ5xnmAYW83ZG9xkvTAff @@ -0,0 +1,170 @@ +{ + "slot": 22, + "transaction": [ + "AZtZPF6eTvZ6M0YsjrEXqZdY/FxQYSv3zko4HZrOBPycePm85z6lWyKYbVdQI2BqKv+mx1hJJv7TMcK6VngXyAYBAAoPzLjCFXXnWj51s6K1RyQiLzHD11pzA0VK0kuivz8zqswgAm94pMTUBYemcFeAL4IECAz/7vfle5tNgIaIMaCyGk8vwtBa/CsS2EwpcQihcRK8ys9zfeuXbqem+U5L3Sbbp55IOWxW4NVOP7mxA8WYXgvhjDmq6x139I1A8AZUoliyoRGPUjLdszB/8TOSQknR5z9cjb3faEepycW4OIg4UQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwZGb+UhFzL/7K26csOb57yM5bvF9xJrLEObOkAAAAAGp1X4ITkFTUQksVrwxDDPL0t/mHk62hJS1I82ZsbLzgbd9uHudY/eGEJdvORszdq2GvxNg7kNJ/69+SjYoYv8CRWjVyN5To+2XQdba3JpnDjdAuWUi3Ww5aBBjoCXW0QJLDbsIvUXgwD9tEqqav/P8KRuHLxkHA4+0J2hO571CAu8D8C7R8ovdMQRLpSrE8+jxjTl3BfqywPNGiPNfnh8HuvEjPsyZLvDS/XFpag0/GdQAG8phtlvI1vIh1703UTmyRiwvXzPkVREinq/ao85eCmh6P0Ip/DQs6q4eFL8MvuzKHUQXK6FtbREdgftv+FFJ7+0I5EcpAQjv9FSeiZ1cb4lRwzOSgXjaoEfhd0xEjDzZPF84zIOTieZq4BhC+QCBgAFAkBCDwAJDwAADQQBCAcMCw4KAgkFA5EB8SIwuiWze8ADAAAAzLjCFXXnWj51s6K1RyQiLzHD11pzA0VK0kuivz8zqszMuMIVdedaPnWzorVHJCIvMcPXWnMDRUrSS6K/PzOqzMy4whV151o+dbOitUckIi8xw9dacwNFStJLor8/M6rMAwAAADUwAAAAAAAANTAAAAAAAAA1MAAAAAAAAAFAQg8AAAAAAA==", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 9995027520, + 2039280, + 29677440, + 0, + 2923200, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1141440, + 1141440, + 1614720, + 0, + 0 + ], + "postBalances": [ + 9992017517, + 2039280, + 29682443, + 3000000, + 2923200, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1141440, + 1141440, + 1614720, + 0, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 8, + "accounts": [ + 4, + 1, + 0 + ], + "data": "6dRbrMDfHJ4F", + "stackHeight": 2 + }, + { + "programIdIndex": 7, + "accounts": [ + 0, + 13, + 12, + 11, + 14, + 10, + 9, + 3, + 7, + 5, + 7, + 2 + ], + "data": "WpwPmo3KqN4odjj6RZDrqHoBKMoVmyfrVCdxAhAm4BrLsRZXTihhk5jwWukjC2BVTjziHbCzQvjBvXq1JxEB3sYpk5s9NqfVDaGZShBs579Hw5gVwjvC1ejEQqQEb4S3RvwtxkFh4fCEPc5fXPAx9ZQS2MAE5k7gVd5igLqNxoyVhkZqKP98zNxw6VWhjsvjFACBXDYm2yQZfMLmvEGg4xLHef6BYupRDjEs4GyyKfrwht2dB3ovkeKrRJorsoZqowYENFkHZDNMSjAL89gwbC6bFMzhcu16iATEqsPfJVWCp5BgpLvFaN8BWSe9p1eSWtq5PzPWjc4oSHQQwSKd7DXm2bkcf89ojYyC3zy9XX12mGRqbreGDums4PH9BzaZphVdZyJbCj3reWgyQ4t2aubsaX2uNZRoqD3ouc2pfyo83zLPyEb7g3PcydDBA3vUK4Mz59dmgrwa9WgsBfDXFvUugqvQn9xyEqxJt6RAAKvvx8o1fMriE2xWjqKJPLPRaY5QuoQqJzUBwf424EQbgRZvNCsxgJ1o1cAyE5M7z91WdiKgpDoCom9MaeCfPkGZbY7keZLrdLK5iGUT1pjypTTMrsWx6sgG4rud3P2j4EUroDqfu3X3hiNVwo2jW8UmEREk6U9raokVzsDehiNNSh2f2eWbk4PmHypj1RkzKLizzLTW1svnS1P4QseSbAQ4ApH4bgRM9q", + "stackHeight": 2 + }, + { + "programIdIndex": 5, + "accounts": [ + 0, + 3 + ], + "data": "3Bxs4Z6oyhaczjLK", + "stackHeight": 3 + }, + { + "programIdIndex": 5, + "accounts": [ + 0, + 2 + ], + "data": "3Bxs4Q7rWYJXVKwV", + "stackHeight": 3 + }, + { + "programIdIndex": 10, + "accounts": [ + 14, + 12, + 2 + ], + "data": "2GyEsyUFPgHZTe1W8kkRx1VUajM5va3B1SJqpN9NjjM4GKctWtogtyXGwM9wog2RjBaJAateeDxbYP5NueinuPcR4YrwgKvrhmVDmsqp5ckhjHXvCvEe2vWx971UPtMGdEEAxYbotPHQndoJ4hQgCaJJDn3iQ4Bsc6rxh7vTZ9LDY9dufpDVMy4ao799C39amC9rmYeCmGEbAv4neFmWFhH8D8ExKNgynHgRUTfP3AgiwBHAD7potaTfFPCDfbvGa4GTD1wae8WTf12iPy5GVoZ5UKqE1bMtWNX3xRSJkosY9Km856EdCdHVQuYZoejtenb6FKX5e3cWKJJK3tdWwrGnB", + "stackHeight": 3 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program cTokenmWW8bLPjZEBAUgYy3zKxQZW6VKi7bqNFEVv3m invoke [1]", + "Program log: Instruction: MintTo", + "Program TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb invoke [2]", + "Program log: Instruction: MintTo", + "Program TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb consumed 958 of 982727 compute units", + "Program TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [2]", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [3]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 5863 of 945588 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 30092 of 969779 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success", + "Program cTokenmWW8bLPjZEBAUgYy3zKxQZW6VKi7bqNFEVv3m consumed 61044 of 999850 compute units", + "Program cTokenmWW8bLPjZEBAUgYy3zKxQZW6VKi7bqNFEVv3m success" + ], + "preTokenBalances": [ + { + "accountIndex": 1, + "mint": "D2J2AZChFBGxn4gYeE3gQsR85u3dWBL3foGobGeGxQfJ", + "uiTokenAmount": { + "uiAmount": null, + "decimals": 2, + "amount": "0", + "uiAmountString": "0" + }, + "owner": "GXtd2izAiMJPwMEjfgTRH3d7k9mjn4Jq3JrWFv9gySYy", + "programId": "TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb" + } + ], + "postTokenBalances": [ + { + "accountIndex": 1, + "mint": "D2J2AZChFBGxn4gYeE3gQsR85u3dWBL3foGobGeGxQfJ", + "uiTokenAmount": { + "uiAmount": 370.23, + "decimals": 2, + "amount": "37023", + "uiAmountString": "370.23" + }, + "owner": "GXtd2izAiMJPwMEjfgTRH3d7k9mjn4Jq3JrWFv9gySYy", + "programId": "TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb" + } + ], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 61194 + }, + "blockTime": 1746053462 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/221TsAnBdx5jFhSfALmXFfSs1KSPPaPcTdyYkxm1CzVsmHDPNS6mhEEb4ZiLQ4r9EQzRYbetcXaAhAnn9yF2pQWH b/tests/data/transactions/batched_tree_transactions/221TsAnBdx5jFhSfALmXFfSs1KSPPaPcTdyYkxm1CzVsmHDPNS6mhEEb4ZiLQ4r9EQzRYbetcXaAhAnn9yF2pQWH new file mode 100644 index 00000000..2b4b072e --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/221TsAnBdx5jFhSfALmXFfSs1KSPPaPcTdyYkxm1CzVsmHDPNS6mhEEb4ZiLQ4r9EQzRYbetcXaAhAnn9yF2pQWH @@ -0,0 +1,87 @@ +{ + "slot": 172, + "transaction": [ + "ATLi4RnRvEvOWRyt4HFIo8W7rP4nLdi8/5yOZsHRsUQH6AUm2JahwzX/xtHuOwPT8GxteHJ3WMi7XmwIp/wIYwYBAAcKeiGC7CowvJIstkh88PnSr2WEDY9TdVntq2WiGjIGJiNPL8LQWvwrEthMKXEIoXESvMrPc33rl26npvlOS90m2/KuWuX0POEKz8TJiMAjOgmV1yiV9Am40XHqZVvj8yn+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E+7ModRBcroW1tER2B+2/4UUnv7QjkRykBCO/0VJ6JnWrn20ZEH64sWrfq+KRxBX7bR8HxNxSABZRPfNEjXGaJgIEAAUCQEIPAAULAAAIBwkGBQUDAgF7GhCpBxXK8hlvAAAAAAEAAAB6IYLsKjC8kiy2SHzw+dKvZYQNj1N1We2rZaIaMgYmI0BCDwAAAAAAAAAAAQwAAAABAAAAAQAAAAAAAAAAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEIPAAAAAAAAAAEAAAAAAAAA", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999987867207, + 29742453, + 290204160, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "postBalances": [ + 99999987857206, + 29747454, + 290204160, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [ + 9, + 8, + 1, + 2 + ], + "data": "95YB9JH8MTYtuZfgNwFoqXrHy1qJq4fSepp1xto9FPm67R9Vrinv9kdtd9ULKUmqBphZXX9FHFk3mXbKLZLVNC7v5PN4bYMwNBDnZwVpmJYpmbycs2zWkuMhyaFwma2kEmyX1Pt9EGVm3dK8fwguKR7UPf68Wo9ssU3fDFUByPLWN98H7WCzjSXBeMsDgq3aGkZpTwfrBkymvz6EJPoBp9DSZpJ33JXrtV2awLRNoHbRxUFUfbhFmpJzavMzM8Bgoi7gxE59Tsys4tZJKmB3PD8ULAh2kGmyvVRpnnWvz5M2deTQqMHDSbFCroFVsSCyyccYhcSRgMwju9DYPLUZ3bia2K9Qr9VtZvKi2h1C7nQodcmRvzaQncDBb9FExj2tHH6SpTVXL8kxXBtZupXysm", + "stackHeight": 2 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [1]", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 10023 of 983192 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 26718 of 999850 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 26868 + }, + "blockTime": 1746552064 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/23qV8imre4HV96mn4x45age9F4GG9cYU5y5FNoxaaHPprUwnAvtocPX4UsfogzEPKqavqEMBhoVR5fDcpp2wsrmW b/tests/data/transactions/batched_tree_transactions/23qV8imre4HV96mn4x45age9F4GG9cYU5y5FNoxaaHPprUwnAvtocPX4UsfogzEPKqavqEMBhoVR5fDcpp2wsrmW new file mode 100644 index 00000000..fd36fdfc --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/23qV8imre4HV96mn4x45age9F4GG9cYU5y5FNoxaaHPprUwnAvtocPX4UsfogzEPKqavqEMBhoVR5fDcpp2wsrmW @@ -0,0 +1,83 @@ +{ + "slot": 309, + "transaction": [ + "ATR2bdOo2QXGzvl4o6ztpJKxgc03CiCVpRQKFi7X8nn8J5d/pOKbnpWeZb0sdASfYyTtvgy4C8b9kVBs+W04pwkBAAUJ7DDUiI4IcYFkGbvXWaOx6/U8oHfKVZ1qGOt5OIzPzJlMm20YZ6Hmhtq+9LocAayVnPPWJjXrHQ48WcmoYfd2+U8vwtBa/CsS2EwpcQihcRK8ys9zfeuXbqem+U5L3Sbb8q5a5fQ84QrPxMmIwCM6CZXXKJX0CbjRceplW+PzKf4FDSsTeVE2hc8C8rX9UpG9lZsrBgqlJepbNIE7Hbm3bgksNuwi9ReDAP20Sqpq/8/wpG4cvGQcDj7QnaE7nvUIC7wPwLtHyi90xBEulKsTz6PGNOXcF+rLA80aI81+eHwQpl591jkE+Dg60Dze4Hi5FNhzGIA7FTWAcNeS4Fz957/QmmoHZdEI20ACv+9MyGVTFGij2iz8yvlzRZ4iyBL0OeshMMdoopnQmM8rYB2jPwt4wYza1z59hlipVlqjVUoBBAgBAAcIBQYDAq0B3cID2CU+3JP/oAAAAAJ8sdrPVAnJflDM890aqQA6HzXGDO8NO+DOr9nVld8XJJ9aoqqTMV/dcNQosw2LNEMr9NqC/On0W4XCxAKNxKQmjFYV+yAzoHwxS5oaLSaBxQYUfZfeAJ4ZxVwh0AfUoQGAyHZPfqVZHW4OHWMLK5ADyntqRUFUe2yl2jjaZcwAhxWWJ6DIK1/myDm1Wd14i2hlTDuUjGLPp6F0bNTRH2k=", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999995073200, + 2735280, + 30177540, + 290204160, + 1141440, + 1141440, + 1141440, + 0, + 1614720 + ], + "postBalances": [ + 99999995068200, + 2735280, + 30177540, + 290204160, + 1141440, + 1141440, + 1141440, + 0, + 1614720 + ], + "innerInstructions": [ + { + "index": 0, + "instructions": [ + { + "programIdIndex": 5, + "accounts": [ + 7, + 8, + 6, + 3, + 2 + ], + "data": "ZZpa4B1Y3ym6r89418mrF164ehNozJomk6gyVS41DLE6ezfUpUYuKHDeKDK4cJRdwkw5Gj2tBycpe35cwDDHs6knTwhPQDyMauzLuLqt4ttKfi5AziVwAZ9jqq1xzHJSjcNBwpb8xYHDf8hwhrDWCUmu6NFzDCXuL6Pdod5qf6QHhErjBY7LQ6ckgNXKspZHMfBNxhyJNH5yXwFNXnoHjmRPVnw4XZASDNKusUg8u6G", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [], + "data": "V55KweBRnUHGkEaUisCdgyHtJHJb7ZCcjbWeUQUySHhE944JhfG7Jg5Mp7q2NP1tCYq1Pyxr3p3kiRQAuQ41mi8K7kvCexUvkdYg15VFedZtZmPWQaNvTbHdFxcQbfWZGtd49cp9ZtKC9Lit6ttyQoruDyKDsVRoT3PzuS17ZT7HhPKD68gnQ986Qh5kKJj2zRknyZG5DHr2", + "stackHeight": 3 + } + ] + } + ], + "logMessages": [ + "Program Lighton6oQpVkeewmo2mcPTQQp7kYHr4fWpAgJyEmDX invoke [1]", + "Program log: Instruction: BatchAppend", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: BatchAppend", + "Program noopb9bkMVfRPU8AsbpTUg8AQkHtKwMYZiFUjNRtMmV invoke [3]", + "Program noopb9bkMVfRPU8AsbpTUg8AQkHtKwMYZiFUjNRtMmV consumed 38 of 79855 compute units", + "Program noopb9bkMVfRPU8AsbpTUg8AQkHtKwMYZiFUjNRtMmV success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 103162 of 182790 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program Lighton6oQpVkeewmo2mcPTQQp7kYHr4fWpAgJyEmDX consumed 122351 of 200000 compute units", + "Program Lighton6oQpVkeewmo2mcPTQQp7kYHr4fWpAgJyEmDX success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 122351 + }, + "blockTime": 1746552128 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/2BkBJEMgJQZ5mKqQQDMhPaA7cXUF9PYCDTN4YeJPSKrJNwgUPbprpveSDMN147KpURjdTBprMYHxKAvcpPjbayMH b/tests/data/transactions/batched_tree_transactions/2BkBJEMgJQZ5mKqQQDMhPaA7cXUF9PYCDTN4YeJPSKrJNwgUPbprpveSDMN147KpURjdTBprMYHxKAvcpPjbayMH new file mode 100644 index 00000000..26e6b9f1 --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/2BkBJEMgJQZ5mKqQQDMhPaA7cXUF9PYCDTN4YeJPSKrJNwgUPbprpveSDMN147KpURjdTBprMYHxKAvcpPjbayMH @@ -0,0 +1,97 @@ +{ + "slot": 165, + "transaction": [ + "ATtIWDM6LBWYO1fNmTfHkc+dZaxgTSWecKx0BDwtv91CeDabkRMMVW1PMVymh0kMc85MBRl72HZV8UWBITz5jAABAAcKeiGC7CowvJIstkh88PnSr2WEDY9TdVntq2WiGjIGJiNPL8LQWvwrEthMKXEIoXESvMrPc33rl26npvlOS90m26eeSDlsVuDVTj+5sQPFmF4L4Yw5qusdd/SNQPAGVKJYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E+7ModRBcroW1tER2B+2/4UUnv7QjkRykBCO/0VJ6JnU0YndMCOE7sHue/wFh+WjdD+SsNC5TCCqXF2CQO0m5PQIEAAUCQEIPAAUKAAAIBwkGAgUDAU8aEKkHFcryGUMAAAAAAAAAAAEAAAB6IYLsKjC8kiy2SHzw+dKvZYQNj1N1We2rZaIaMgYmI0BCDwAAAAAAAAAAAAAAAAABQEIPAAAAAAAB", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999990917212, + 29717448, + 4000000, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "postBalances": [ + 99999989907211, + 29722449, + 5000000, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 3, + "accounts": [ + 0, + 2 + ], + "data": "3Bxs4Bc3VYuGVB19", + "stackHeight": 2 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [ + 9, + 8, + 1 + ], + "data": "21HGgNSLz1yYgjRayL37XWwxDSqDsgEEKzhJdvMbV9nnMr13tjtwkoLbMueYAc31hWMwJeumXFrTNcWfDR8kEsVunjUo4jPLuum2HEq8d4tRimkt2B2JKSHncqbFDDe6tCD5bP8aLGtkCLBf2pKWhtnBt2apHoTEsn88pxS35KJ7kG1r3j8u3JFo7cA441wBDpZFJiyVKydahaKdkxgjmLQbYS6qAAuKmrYJmrbzTf3wrGtiws99", + "stackHeight": 2 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [1]", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 4419 of 987457 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 16849 of 999850 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 16999 + }, + "blockTime": 1746552060 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/2DPRhvXPzyDjn8qDfwHuBChQ3dmbmowEfC7dWJ7cUYZteHoDSWQfUpTG8pR9E5YCm7JexF5PZJ812hGmp9CNU3yg b/tests/data/transactions/batched_tree_transactions/2DPRhvXPzyDjn8qDfwHuBChQ3dmbmowEfC7dWJ7cUYZteHoDSWQfUpTG8pR9E5YCm7JexF5PZJ812hGmp9CNU3yg new file mode 100644 index 00000000..ec865826 --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/2DPRhvXPzyDjn8qDfwHuBChQ3dmbmowEfC7dWJ7cUYZteHoDSWQfUpTG8pR9E5YCm7JexF5PZJ812hGmp9CNU3yg @@ -0,0 +1,97 @@ +{ + "slot": 214, + "transaction": [ + "ATyy4y4phzI4XL+wv38ybwvJXss/cHQ2aCCvgldqqgYFu9WHiXI3Yb/muiV6qDZ2ldx+e/9Ia8tR7baFbjOpwwcBAAcKeiGC7CowvJIstkh88PnSr2WEDY9TdVntq2WiGjIGJiNPL8LQWvwrEthMKXEIoXESvMrPc33rl26npvlOS90m26eeSDlsVuDVTj+5sQPFmF4L4Yw5qusdd/SNQPAGVKJYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E+7ModRBcroW1tER2B+2/4UUnv7QjkRykBCO/0VJ6JnVsO+jAsZosrVA15q3p+l4C0EqCSFxt75i48QSrRCDd4wIEAAUCQEIPAAUKAAAIBwkGAgUDAU8aEKkHFcryGUMAAAAAAAAAAAEAAAB6IYLsKjC8kiy2SHzw+dKvZYQNj1N1We2rZaIaMgYmI0BCDwAAAAAAAAAAAAAAAAABQEIPAAAAAAAB", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999970517172, + 29917488, + 24000000, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "postBalances": [ + 99999969507171, + 29922489, + 25000000, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 3, + "accounts": [ + 0, + 2 + ], + "data": "3Bxs4Bc3VYuGVB19", + "stackHeight": 2 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [ + 9, + 8, + 1 + ], + "data": "21HGgNSLz1yYgjRayL37XWwxDSqDsgEEKzhJdvMbV9nnMr13tjtwkoLbMueYAc31hWMwJeumWCjaYuDZ61tGykKzkC6cVMY2JH7nuw1yot1gWoEhEBXjDYPZeETsdijR7dkTfmmVpZLSeSXRaeWF6NLEBFpbVY2pHTwdYbmXW8DHLZ2KkQnbU6k25V2NjrddJsciDdXRzS3cwQg4p9Fy8eQ3ZtR6L9XgKdnauzhxMz4ta2mp74eK", + "stackHeight": 2 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [1]", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 4419 of 987457 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 16849 of 999850 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 16999 + }, + "blockTime": 1746552083 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/2DkZrkz5iXEPenPAmDGD8P9t9ZiPCJdkgn8sxBoq9tNptgXz6cxsy4ruyLATjf5FY2Jtb8y54aASUsUDT21Kckcy b/tests/data/transactions/batched_tree_transactions/2DkZrkz5iXEPenPAmDGD8P9t9ZiPCJdkgn8sxBoq9tNptgXz6cxsy4ruyLATjf5FY2Jtb8y54aASUsUDT21Kckcy new file mode 100644 index 00000000..8adebc44 --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/2DkZrkz5iXEPenPAmDGD8P9t9ZiPCJdkgn8sxBoq9tNptgXz6cxsy4ruyLATjf5FY2Jtb8y54aASUsUDT21Kckcy @@ -0,0 +1,87 @@ +{ + "slot": 229, + "transaction": [ + "AT0DWr5EDxbobGx5dYOQelSHLwdGsbkmasJUAxb2fxtVvdgAWrEpJYZJZMBxxQ+bXCJd/ufVPwK7jqZ85jZOrQoBAAcKeiGC7CowvJIstkh88PnSr2WEDY9TdVntq2WiGjIGJiNPL8LQWvwrEthMKXEIoXESvMrPc33rl26npvlOS90m2/KuWuX0POEKz8TJiMAjOgmV1yiV9Am40XHqZVvj8yn+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E+7ModRBcroW1tER2B+2/4UUnv7QjkRykBCO/0VJ6JnXfbFfSR6QPw+2BBvfsrIdTVy9Jp7wq4RBPg2cGbXc7iAIEAAUCQEIPAAULAAAIBwkGBQUDAgF7GhCpBxXK8hlvAAAAAAEAAAB6IYLsKjC8kiy2SHzw+dKvZYQNj1N1We2rZaIaMgYmI0BCDwAAAAAAAAAAATwAAAABAAAAAQAAAAAAAAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEIPAAAAAAAAAAEAAAAAAAAA", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999963387159, + 29982501, + 290204160, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "postBalances": [ + 99999963377158, + 29987502, + 290204160, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [ + 9, + 8, + 1, + 2 + ], + "data": "95YB9JH8MTYtuZfgNwFoqXrHy33X3xauEUHzBHXJjwKavV6pA7ohyPNRxPyMuAFGR4NPeeaYKqSEK6n2eA8W29kfShQPmsjubYY66LmpN5yc2JN4S13tgrRb1HUgfbckdBTy8xPpZuasVgV3cuKmUeC9MFVs7rhFnifxsdtKjcfW6HAW7xxvknNHpWPmfEusjAXujKZaBmdyUBd1LHyUtVcL47HJVppj4WDcmeSiKGYhbqbbrq8mhGcHAdvRvwT3TVYwYprGp86mKKQtx8uvW4MLWw4HKcFqhXtHAiwxkyFerpnuYUD9Kf8bVeuxBpJMKXZm8CdCCLsVb6MuLNA1NWRHr8guWsj4iKTo9AkJ5K9KYkUGz9rb6EmifkoNGUXNUD3MkkTaWpWeDiXnmyJrrT", + "stackHeight": 2 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [1]", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 9257 of 983192 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 25952 of 999850 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 26102 + }, + "blockTime": 1746552090 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/2GbaUHwnFoXi5SdwRpuTgm2yDU8n4qn2DN4azkqToGVqEHJUcwWELj3XMTJubugaA1JCXZVz6iJw1KXf7GEd2Cvy b/tests/data/transactions/batched_tree_transactions/2GbaUHwnFoXi5SdwRpuTgm2yDU8n4qn2DN4azkqToGVqEHJUcwWELj3XMTJubugaA1JCXZVz6iJw1KXf7GEd2Cvy new file mode 100644 index 00000000..6b381d48 --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/2GbaUHwnFoXi5SdwRpuTgm2yDU8n4qn2DN4azkqToGVqEHJUcwWELj3XMTJubugaA1JCXZVz6iJw1KXf7GEd2Cvy @@ -0,0 +1,87 @@ +{ + "slot": 232, + "transaction": [ + "AT93bqAXL8poaorX2M4t/yCzyaIvhSXT1Jis3R98z35ynMB/On5plRBq2UC1JEt144nXtCWIsPETVGwbeDU4XQ4BAAcKeiGC7CowvJIstkh88PnSr2WEDY9TdVntq2WiGjIGJiNPL8LQWvwrEthMKXEIoXESvMrPc33rl26npvlOS90m2/KuWuX0POEKz8TJiMAjOgmV1yiV9Am40XHqZVvj8yn+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E+7ModRBcroW1tER2B+2/4UUnv7QjkRykBCO/0VJ6JnXjRx/Jd3BCQfcdkgybljVKtR39WbWNq+w0cXAPJHVfvQIEAAUCQEIPAAULAAAIBwkGBQUDAgF7GhCpBxXK8hlvAAAAAAEAAAB6IYLsKjC8kiy2SHzw+dKvZYQNj1N1We2rZaIaMgYmI0BCDwAAAAAAAAAAAT4AAAABAAAAAQAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEIPAAAAAAAAAAEAAAAAAAAA", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999962367157, + 29992503, + 290204160, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "postBalances": [ + 99999962357156, + 29997504, + 290204160, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [ + 9, + 8, + 1, + 2 + ], + "data": "95YB9JH8MTYtuZfgNwFoqXrHy9kJfe7UEC65kZU85ujsfinWomksWYGxHDvmi7GWeihobr6C3L3sJ859Df4QoXQpNSUDZdhcAr1aYREB1GANWhkhcsRY4sfyTMpzKPjxibnjJ8aVKzvfsUuyyTpqhr7UzEiHVATMmNVb7aACbQ3f9H8tNUpkwcimVY3psn1Pf8T9V7rBWsu6m7sC5V2B9UZ5Xy7zkj1DXh4X6G2B9Hui8qeMKfMYXJqxBJGVEgXNZBK9KtGsVh9KsQRbZ44Q3zTib2qRaYQh4X5HxJV9FCUfs8ApRj4CgyzHKEhE6APanTPKcPhPcTb6zQ75kLvvpKRyNu8EECvH2vVLHAC7AtQwNVyTHeuSiakbvF3y17utCEV3uW2pNtEPgg9MHtWaRu", + "stackHeight": 2 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [1]", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 10101 of 983192 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 26796 of 999850 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 26946 + }, + "blockTime": 1746552092 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/2LMkyhXszbwy1msEo2oKGx1hcTkGFzQ32hRREarKqJAT9wWNabpN9yWBSPYfVDg5qeJAxpLcoYPP9ka1iyPdFNe9 b/tests/data/transactions/batched_tree_transactions/2LMkyhXszbwy1msEo2oKGx1hcTkGFzQ32hRREarKqJAT9wWNabpN9yWBSPYfVDg5qeJAxpLcoYPP9ka1iyPdFNe9 new file mode 100644 index 00000000..8e22f8fd --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/2LMkyhXszbwy1msEo2oKGx1hcTkGFzQ32hRREarKqJAT9wWNabpN9yWBSPYfVDg5qeJAxpLcoYPP9ka1iyPdFNe9 @@ -0,0 +1,87 @@ +{ + "slot": 199, + "transaction": [ + "AUK15HHnRFVIDSpKA8QOoHuvohR37msEZK1POob/hG2GCCfEAKoyCPBumODA6USvwyLseJACq3yWogVf3c4Pzw4BAAcKeiGC7CowvJIstkh88PnSr2WEDY9TdVntq2WiGjIGJiNPL8LQWvwrEthMKXEIoXESvMrPc33rl26npvlOS90m2/KuWuX0POEKz8TJiMAjOgmV1yiV9Am40XHqZVvj8yn+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E+7ModRBcroW1tER2B+2/4UUnv7QjkRykBCO/0VJ6JnX6w+HY6feMtulw53F5ConjCn0nRhHZELRumKYO+wUEEAIEAAUCQEIPAAULAAAIBwkGBQUDAgF7GhCpBxXK8hlvAAAAAAEAAAB6IYLsKjC8kiy2SHzw+dKvZYQNj1N1We2rZaIaMgYmI0BCDwAAAAAAAAAAASQAAAABAAAAAQAAAAAAAAAAAAATAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEIPAAAAAAAAAAEAAAAAAAAA", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999975627183, + 29862477, + 290204160, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "postBalances": [ + 99999975617182, + 29867478, + 290204160, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [ + 9, + 8, + 1, + 2 + ], + "data": "95YB9JH8MTYtuZfgNwFoqXrHy5gXnuRd5D8LKrr7MSEeEs5H4DU8rs8r5t6dhRkTkwcVF1MkexUDbxeNPhjRUJBWY2mpMqcsPtfWQURdKEYdrEYGT5f8uaEYs5tRYtr9LjaqYztJru8FAEAwnDjAvJN2c21Nmf2HrCfK8WKYxxxvP8cKPuwCTEZ7k14rdP3kx3Dq6do134enjznkrWZjCYaovFicFUvjWuA6A6E6H6r2MhaS5VHXoHiRY1W1FrKUEwxs3jjepZ3uYouwzmk5h99b6hWb9BeQqWHmPY6GEXauw9GqPpkL7hnKxpaG6TadXe67MssP6Qpqeei3FUVDWjYpWJg9jSGHSoHNQcxAogUqbC6RmiPWFjkKNhGXTebLsPzKXszDwCxu7E5aiNFh9q", + "stackHeight": 2 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [1]", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 10023 of 983192 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 26718 of 999850 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 26868 + }, + "blockTime": 1746552076 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/2Pf5VXFcs923yU2mQipBJJ26FQn6DLTTHyN7J4nkoFKQU41U1dFEZSUQPGV1wxnug2YWxtwQz4YPWMU844nnRzK2 b/tests/data/transactions/batched_tree_transactions/2Pf5VXFcs923yU2mQipBJJ26FQn6DLTTHyN7J4nkoFKQU41U1dFEZSUQPGV1wxnug2YWxtwQz4YPWMU844nnRzK2 new file mode 100644 index 00000000..ca8fab60 --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/2Pf5VXFcs923yU2mQipBJJ26FQn6DLTTHyN7J4nkoFKQU41U1dFEZSUQPGV1wxnug2YWxtwQz4YPWMU844nnRzK2 @@ -0,0 +1,87 @@ +{ + "slot": 234, + "transaction": [ + "AUWOG7nsg7Qf6QFWz/v8j9thMEGoK9zsY6dz/2URjYfWfG42Lbq2+gE//GUjdvmEuIeX94LNpKYda20rXgGzTQkBAAcKeiGC7CowvJIstkh88PnSr2WEDY9TdVntq2WiGjIGJiNPL8LQWvwrEthMKXEIoXESvMrPc33rl26npvlOS90m2/KuWuX0POEKz8TJiMAjOgmV1yiV9Am40XHqZVvj8yn+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E+7ModRBcroW1tER2B+2/4UUnv7QjkRykBCO/0VJ6JnVlk6qSaStcE2gyQH3IV1agxsWDHY2r9+lQFooYxHkc2AIEAAUCQEIPAAULAAAIBwkGBQUDAgF7GhCpBxXK8hlvAAAAAAEAAAB6IYLsKjC8kiy2SHzw+dKvZYQNj1N1We2rZaIaMgYmI0BCDwAAAAAAAAAAAUAAAAABAAAAAQAAAAAAAAAAAAAhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEIPAAAAAAAAAAEAAAAAAAAA", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999961347155, + 30002505, + 290204160, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "postBalances": [ + 99999961337154, + 30007506, + 290204160, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [ + 9, + 8, + 1, + 2 + ], + "data": "95YB9JH8MTYtuZfgNwFoqXrHxzF7ZAm89XdpPjE94FFcy9UqMwgtmRf5feJ4JvjNEVBTwDXTV9vwS6jDWfzvCTS5CgPpQrpdXhokoau8XXZFZ5vG2g15UC8UyCJWsq8JosydUXg3xCLFgpD6yALaMPiQigkRoGXoPYw8Xs1qHeFkDvxxA6APmcErRakEt6n3ThvBPS2oV5A7cLVSNM4F7o7A2ibYJ18fiLwcbnfWf1pETkuzd2zKmrCbcMBYEe1QqiLAkwvHnzLCQ5bKGpUqUEmNapNhL1JV1PSSLi9TM4YW4HXbemsgHRjYT5qbwe59aey9n8YGA4tVqakUJnCJs5ip794MskYaL9XBxFAzqdBktbGUs8PfPupeRWX26meDAhDYZWHNC7obJAgzGAKpyu", + "stackHeight": 2 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [1]", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 10101 of 983192 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 26796 of 999850 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 26946 + }, + "blockTime": 1746552093 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/2VdNCqLtrJSxcYRSZYYeDw3EcWsyD9E4Kb1UugbtruKKQLP35vQFeoS7oPUajsKFy9YN2rBxTKuznT3Ve4RLA4N7 b/tests/data/transactions/batched_tree_transactions/2VdNCqLtrJSxcYRSZYYeDw3EcWsyD9E4Kb1UugbtruKKQLP35vQFeoS7oPUajsKFy9YN2rBxTKuznT3Ve4RLA4N7 new file mode 100644 index 00000000..e3c4c528 --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/2VdNCqLtrJSxcYRSZYYeDw3EcWsyD9E4Kb1UugbtruKKQLP35vQFeoS7oPUajsKFy9YN2rBxTKuznT3Ve4RLA4N7 @@ -0,0 +1,87 @@ +{ + "slot": 240, + "transaction": [ + "AUq0Ljp0PsGOVjct4B4KBUS5ebf7rrZdohuKobl6T39AUerB4sNAC0MDblEFbSzYw0AKmFMVPRuaHUIRKULqvgwBAAcKeiGC7CowvJIstkh88PnSr2WEDY9TdVntq2WiGjIGJiNPL8LQWvwrEthMKXEIoXESvMrPc33rl26npvlOS90m2/KuWuX0POEKz8TJiMAjOgmV1yiV9Am40XHqZVvj8yn+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E+7ModRBcroW1tER2B+2/4UUnv7QjkRykBCO/0VJ6JnX37ajxA0Vtzf+VQRULweyEtZxVlShSDntdhOLcqoSPBwIEAAUCQEIPAAULAAAIBwkGBQUDAgF7GhCpBxXK8hlvAAAAAAEAAAB6IYLsKjC8kiy2SHzw+dKvZYQNj1N1We2rZaIaMgYmI0BCDwAAAAAAAAAAAUYAAAABAAAAAQAAAAAAAAAAAAAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEIPAAAAAAAAAAEAAAAAAAAA", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999958287149, + 30032511, + 290204160, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "postBalances": [ + 99999958277148, + 30037512, + 290204160, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [ + 9, + 8, + 1, + 2 + ], + "data": "95YB9JH8MTYtuZfgNwFoqXrHy7GL5S2HCmQM9qoY3KaSjUPG3PPUyBgo2JCrKfXVgipEMQCqedfx9N5yUrHu3QbNYhEtcxFEwAGUFcKfFNMZd6PWZ9Po7BSJoFiFTdanTCVpnv314hYviFPohntzToT5Rksu9sF1XNZHEkuNRv2Sj8PRJRGaKqWDvwscEin3jywSR3zfzMsp1KkUcv52kS4UR1bsPze94RkXkDMEuvz6UqBtRbbPdP98oBHkP1FJqLmnqiU449EyWUnjSXrLE8oZvUtPvNWfzDWwdCTpMP4rf5FGDRa4tRPTDuV5uCj3hR8x1c7AokaHGsCYGfrNcpjkwXsVfJs7dpfVnNC1B1pi6N14hMXd7kkdqiY3vF7pyiXUzpDfmmWaH7NWd5WRtB", + "stackHeight": 2 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [1]", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 10101 of 983192 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 26796 of 999850 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 26946 + }, + "blockTime": 1746552095 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/2WQyM33SrYwyytBDhzEVD553JANk3oFJCLEBYvTCxEmAWbdwxmTLxAr2iVaN8iSYL1HzKoKyYxVqmxMwYpxdAYBb b/tests/data/transactions/batched_tree_transactions/2WQyM33SrYwyytBDhzEVD553JANk3oFJCLEBYvTCxEmAWbdwxmTLxAr2iVaN8iSYL1HzKoKyYxVqmxMwYpxdAYBb new file mode 100644 index 00000000..cee2f8f1 --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/2WQyM33SrYwyytBDhzEVD553JANk3oFJCLEBYvTCxEmAWbdwxmTLxAr2iVaN8iSYL1HzKoKyYxVqmxMwYpxdAYBb @@ -0,0 +1,97 @@ +{ + "slot": 216, + "transaction": [ + "AUthxQsX9ptV5Z4Vh4hACCH9wvt9Xr+getiQUIvOCU9eJZQqjt0wvFhtULnCQ84EgJXJwkK++BsiUYKwJ5HrRgoBAAcKeiGC7CowvJIstkh88PnSr2WEDY9TdVntq2WiGjIGJiNPL8LQWvwrEthMKXEIoXESvMrPc33rl26npvlOS90m26eeSDlsVuDVTj+5sQPFmF4L4Yw5qusdd/SNQPAGVKJYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E+7ModRBcroW1tER2B+2/4UUnv7QjkRykBCO/0VJ6JnV1YpfITavfQ2c636JJYfGdFyu1hAiBewxgbsLq6bYXXwIEAAUCQEIPAAUKAAAIBwkGAgUDAU8aEKkHFcryGUMAAAAAAAAAAAEAAAB6IYLsKjC8kiy2SHzw+dKvZYQNj1N1We2rZaIaMgYmI0BCDwAAAAAAAAAAAAAAAAABQEIPAAAAAAAB", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999969497170, + 29927490, + 25000000, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "postBalances": [ + 99999968487169, + 29932491, + 26000000, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 3, + "accounts": [ + 0, + 2 + ], + "data": "3Bxs4Bc3VYuGVB19", + "stackHeight": 2 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [ + 9, + 8, + 1 + ], + "data": "21HGgNSLz1yYgjRayL37XWwxDSqDsgEEKzhJdvMbV9nnMr13tjtwkoLbMueYAc31hWMwJeumaHBhhucmWsEW8uhGC6pgvQ1n9raRjDiyDbkWGtknCxDX8Tq1uCTWJJ6CgaHeea8CwRFewe2b46e26i65HXdo5wb4fAWSxHJeJ6L4mG4YXHSYq9r2vEhbUdELX2yz6xmZxceCyWx4RdkvBAH9bUDf6RyyxAhRKj9GNxmvTA6V8mCT", + "stackHeight": 2 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [1]", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 3579 of 987457 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 16009 of 999850 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 16159 + }, + "blockTime": 1746552084 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/2Wy4nNvRG6g49QH7ZZkNouhocMdaqXFg2kGbL9N4XV2gBy9purj4k8PwGvfrRizqMBetq64Xny2yP7uKzFCfhRrE b/tests/data/transactions/batched_tree_transactions/2Wy4nNvRG6g49QH7ZZkNouhocMdaqXFg2kGbL9N4XV2gBy9purj4k8PwGvfrRizqMBetq64Xny2yP7uKzFCfhRrE new file mode 100644 index 00000000..db81f7c5 --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/2Wy4nNvRG6g49QH7ZZkNouhocMdaqXFg2kGbL9N4XV2gBy9purj4k8PwGvfrRizqMBetq64Xny2yP7uKzFCfhRrE @@ -0,0 +1,87 @@ +{ + "slot": 227, + "transaction": [ + "AUvb7X4/aE9QUcyCKIn3L2fo2L8gIenGrJsITZItmi1a7PNP/LWdITHy3I8DJCbW2x925w3Eo518E8X4PEZ4awcBAAcKeiGC7CowvJIstkh88PnSr2WEDY9TdVntq2WiGjIGJiNPL8LQWvwrEthMKXEIoXESvMrPc33rl26npvlOS90m2/KuWuX0POEKz8TJiMAjOgmV1yiV9Am40XHqZVvj8yn+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E+7ModRBcroW1tER2B+2/4UUnv7QjkRykBCO/0VJ6JnWEZMfm7luZda9g0WQMy1R6BKjRSHeSfvBdk6sZm23cdwIEAAUCQEIPAAULAAAIBwkGBQUDAgF7GhCpBxXK8hlvAAAAAAEAAAB6IYLsKjC8kiy2SHzw+dKvZYQNj1N1We2rZaIaMgYmI0BCDwAAAAAAAAAAAToAAAABAAAAAQAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEIPAAAAAAAAAAEAAAAAAAAA", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999964407161, + 29972499, + 290204160, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "postBalances": [ + 99999964397160, + 29977500, + 290204160, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [ + 9, + 8, + 1, + 2 + ], + "data": "95YB9JH8MTYtuZfgNwFoqXrHyAJcWTUi8XtKbTNacYh382HvoeB9QEKUUEGWraNy8ENzCmp7kAWaPQj3YjwkU4Pfe1iThxPBZGq7Ws8MFpZCqsPDDi3GpGPQsdmE8sXR7AH25KQ1uDjmQnFZ5bh15tt6gwWVQDKCDrKfZyeg9SgeaXMQcNjLmD3ak6DdhPtAGoFZ2mfaZsTiu3WvsZDAyf6cVMcYLF1tGUDgYBHVeqhoXEDc6wuQ2aajRfrMJdrUbSoH2tcrtxF5msvuJ61C5J2bFakhPZCA242BinXB31BvayXmk8sJzropJC9vSHdfYnHsMG9yQCiDdK4PAYBh5Jmyi2y1DjA4RYyr143Hd1iMQbKTAA3DFYzqayQDPadGRayoCfMa4HDNRnpon2Qh3d", + "stackHeight": 2 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [1]", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 10125 of 983192 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 26820 of 999850 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 26970 + }, + "blockTime": 1746552089 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/2Z46trc328DmXFwqEsKn2z9cmKeNymKEd5ND96KsP5UGZBAZ3AibTUWnSbFocRi1z3D6zfDq7ZJrWJ1AupGisAdW b/tests/data/transactions/batched_tree_transactions/2Z46trc328DmXFwqEsKn2z9cmKeNymKEd5ND96KsP5UGZBAZ3AibTUWnSbFocRi1z3D6zfDq7ZJrWJ1AupGisAdW new file mode 100644 index 00000000..5712c0c6 --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/2Z46trc328DmXFwqEsKn2z9cmKeNymKEd5ND96KsP5UGZBAZ3AibTUWnSbFocRi1z3D6zfDq7ZJrWJ1AupGisAdW @@ -0,0 +1,87 @@ +{ + "slot": 209, + "transaction": [ + "AU2ooIkJsmn489HsI12CTR/RT6fFsMo1J8dDnHCfJnJh0jxjytP1BUU64VfY9bNywFK8FuwVTTwOqFkd8nr6owkBAAcKeiGC7CowvJIstkh88PnSr2WEDY9TdVntq2WiGjIGJiNPL8LQWvwrEthMKXEIoXESvMrPc33rl26npvlOS90m2/KuWuX0POEKz8TJiMAjOgmV1yiV9Am40XHqZVvj8yn+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E+7ModRBcroW1tER2B+2/4UUnv7QjkRykBCO/0VJ6JnVf1KCcElvo2IZhBlEOUQWh5287jpimrVBwKLNtXeHuYAIEAAUCQEIPAAULAAAIBwkGBQUDAgF7GhCpBxXK8hlvAAAAAAEAAAB6IYLsKjC8kiy2SHzw+dKvZYQNj1N1We2rZaIaMgYmI0BCDwAAAAAAAAAAASwAAAABAAAAAQAAAAAAAAAAAAAXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEIPAAAAAAAAAAEAAAAAAAAA", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999971547175, + 29902485, + 290204160, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "postBalances": [ + 99999971537174, + 29907486, + 290204160, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [ + 9, + 8, + 1, + 2 + ], + "data": "95YB9JH8MTYtuZfgNwFoqXrHy2cvpSaMPZ4R8k7cS8sAkUCD3VDt7huBtZmDKTdkQQx1axtC6eLnUt5TpvXcRuuQm3KfDntzEVVb38SwPFd8YwkgDjB73Ywetu37fkqptfiQjB8pfkMrrcC32LVuPqvNL8bXUJgyGrvNFGMvjzR3GN8mfnZVmfeXAG3vjAoCTSMvFo1i4Q6Fa6HJtTYiJz1F6PKToUHsaxivYSh6gPVaDV4MZuhrW9UV7HWap3Bb9vKS3H8HwETxMNEqKVYy7cy68xMJHTaT2NCctFJnb6DBjsee1JaoY8URMWMVvRhTLNV5t13bWCKNqW67HriKbu6j6Q5sn2pBPySRUf4pbVJ8PMYs7tcYbHKu4hGBpfNxyQNwts3qwD6CnD8aMmNYnj", + "stackHeight": 2 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [1]", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 10023 of 983192 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 26718 of 999850 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 26868 + }, + "blockTime": 1746552081 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/2ZZuqLgu6jYfwx78h8bHREpBuxEgwpM62gJh6sjMUna41XGqDJkMe9w2d6NnPJPwvUxS2qv59yFwjKoCRgdMt3i b/tests/data/transactions/batched_tree_transactions/2ZZuqLgu6jYfwx78h8bHREpBuxEgwpM62gJh6sjMUna41XGqDJkMe9w2d6NnPJPwvUxS2qv59yFwjKoCRgdMt3i new file mode 100644 index 00000000..b29fac83 --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/2ZZuqLgu6jYfwx78h8bHREpBuxEgwpM62gJh6sjMUna41XGqDJkMe9w2d6NnPJPwvUxS2qv59yFwjKoCRgdMt3i @@ -0,0 +1,87 @@ +{ + "slot": 222, + "transaction": [ + "AQFYucajhfMcAGuMKUu1XDHeJfSKMWBJQJEW9Mbb65duP2RgrFAS1+7r2IMENQBbzZFDvlh9GbH1y/peytY+TwkBAAcKeiGC7CowvJIstkh88PnSr2WEDY9TdVntq2WiGjIGJiNPL8LQWvwrEthMKXEIoXESvMrPc33rl26npvlOS90m2/KuWuX0POEKz8TJiMAjOgmV1yiV9Am40XHqZVvj8yn+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E+7ModRBcroW1tER2B+2/4UUnv7QjkRykBCO/0VJ6JnXup11/5W79IKI+6t1MRt49IhsNP0ZmFTqw8aslMV0JFgIEAAUCQEIPAAULAAAIBwkGBQUDAgF7GhCpBxXK8hlvAAAAAAEAAAB6IYLsKjC8kiy2SHzw+dKvZYQNj1N1We2rZaIaMgYmI0BCDwAAAAAAAAAAATYAAAABAAAAAQAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEIPAAAAAAAAAAEAAAAAAAAA", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999966447165, + 29952495, + 290204160, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "postBalances": [ + 99999966437164, + 29957496, + 290204160, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [ + 9, + 8, + 1, + 2 + ], + "data": "95YB9JH8MTYtuZfgNwFoqXrHy9n8xFfMut6ThkvHRM5uEjiRhWUbrN6x5mSK7HW5YwiUwrVoSrtnBU7WjDpzU1qL5RUJJ7AdBh3NXoA1Dw49U7aQNwoyJ1H7nbuzsmpiqpgnkk8Uer8bDWXCDKoNWv9cVBeWjnFif1d2RuQu2EjcysPbgNM1NkRkJ8g6EVmJ3BBRh94wRUyunGW4VvavHfTPCtzexj4mKWw336ETTU44baErC7SGitoUhkHxMtLE8pMZ78UJUBZVdyqXYq2n5rrHeAGbLAteVgLJrnCLM9sTbPrdU9yoYDMzLDtboaFwb7r7oKVABN2kJBRDpUbAzEFPzwzcyzsppAZ1cqNyhLBwdtfCxSCsqb9KGFonnaDk87ZyGvzPt1rL4PsNnSBW7H", + "stackHeight": 2 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [1]", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 10101 of 983192 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 26796 of 999850 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 26946 + }, + "blockTime": 1746552087 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/2bAqyNCEdZyJzmAzyX6j4MqiFw3ur2GYCEKJon7wigGnYxvw1A9b4ZE4JDWbtcbR5DyfcgkNLZuCwofqP24fbh3i b/tests/data/transactions/batched_tree_transactions/2bAqyNCEdZyJzmAzyX6j4MqiFw3ur2GYCEKJon7wigGnYxvw1A9b4ZE4JDWbtcbR5DyfcgkNLZuCwofqP24fbh3i new file mode 100644 index 00000000..e94828ea --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/2bAqyNCEdZyJzmAzyX6j4MqiFw3ur2GYCEKJon7wigGnYxvw1A9b4ZE4JDWbtcbR5DyfcgkNLZuCwofqP24fbh3i @@ -0,0 +1,97 @@ +{ + "slot": 254, + "transaction": [ + "AU970jlewEUFPc9fwOtoFZ1Mpv25Fx5xj2FA1x1wNkHDr6O7UHeqFPqVzei+GKD+WyMi7FvoOVHNJocZyfBaSg0BAAcKeiGC7CowvJIstkh88PnSr2WEDY9TdVntq2WiGjIGJiNPL8LQWvwrEthMKXEIoXESvMrPc33rl26npvlOS90m26eeSDlsVuDVTj+5sQPFmF4L4Yw5qusdd/SNQPAGVKJYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E+7ModRBcroW1tER2B+2/4UUnv7QjkRykBCO/0VJ6JnVhj9XWz85pXJ1LbQwW9wPu+u3ZF62sdxmVVlZh1KCv7AIEAAUCQEIPAAUKAAAIBwkGAgUDAU8aEKkHFcryGUMAAAAAAAAAAAEAAAB6IYLsKjC8kiy2SHzw+dKvZYQNj1N1We2rZaIaMgYmI0BCDwAAAAAAAAAAAAAAAAABQEIPAAAAAAAB", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999953177138, + 30087522, + 41000000, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "postBalances": [ + 99999952167137, + 30092523, + 42000000, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 3, + "accounts": [ + 0, + 2 + ], + "data": "3Bxs4Bc3VYuGVB19", + "stackHeight": 2 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [ + 9, + 8, + 1 + ], + "data": "21HGgNSLz1yYgjRayL37XWwxDSqDsgEEKzhJdvMbV9nnMr13tjtwkoLbMueYAc31hWMwJeumQM5s1Ho7mFTkQXyJKrfiW4kSJhytRjPFX7f8mj5rc6ReMDYCLJ18nJXwdU3TJsjVt8xQqFoguEnvtn1i3uuwuH9UK6BpS33dXWNDZ6vNSjjiNxmntLDShkMmdUwCQF3M4EnTx1azZqYYxPDBrgB2Sn6KGoEd5yq52Xq7zw5kxMLT", + "stackHeight": 2 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [1]", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 4419 of 987457 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 16849 of 999850 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 16999 + }, + "blockTime": 1746552102 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/2biuf7Qw1gKVfE2WQ8LwhQv1jvfTGxYBc2JxeqYbCqvSrE7n5Fz8KprcLwci6NcfY3h2jNK5XmBiMsmuE4cqwrej b/tests/data/transactions/batched_tree_transactions/2biuf7Qw1gKVfE2WQ8LwhQv1jvfTGxYBc2JxeqYbCqvSrE7n5Fz8KprcLwci6NcfY3h2jNK5XmBiMsmuE4cqwrej new file mode 100644 index 00000000..e9b01c25 --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/2biuf7Qw1gKVfE2WQ8LwhQv1jvfTGxYBc2JxeqYbCqvSrE7n5Fz8KprcLwci6NcfY3h2jNK5XmBiMsmuE4cqwrej @@ -0,0 +1,87 @@ +{ + "slot": 178, + "transaction": [ + "AU/13T7QSS4nH0Bz0Z7vF8oYosNO2NDbp8aXDBnSyWNUFn1anpYlsGBm2nVzxtIoOrIJKtY3TRkJl4ZiOKdx2AABAAcKeiGC7CowvJIstkh88PnSr2WEDY9TdVntq2WiGjIGJiNPL8LQWvwrEthMKXEIoXESvMrPc33rl26npvlOS90m2/KuWuX0POEKz8TJiMAjOgmV1yiV9Am40XHqZVvj8yn+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E+7ModRBcroW1tER2B+2/4UUnv7QjkRykBCO/0VJ6JnX3j9r4k3a63Z7wBvhoRvR8M6CXU60sLDPYSKKTuxiVDAIEAAUCQEIPAAULAAAIBwkGBQUDAgF7GhCpBxXK8hlvAAAAAAEAAAB6IYLsKjC8kiy2SHzw+dKvZYQNj1N1We2rZaIaMgYmI0BCDwAAAAAAAAAAARIAAAABAAAAAQAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEIPAAAAAAAAAAEAAAAAAAAA", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999984807201, + 29772459, + 290204160, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "postBalances": [ + 99999984797200, + 29777460, + 290204160, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [ + 9, + 8, + 1, + 2 + ], + "data": "95YB9JH8MTYtuZfgNwFoqXrHyA78mBKxZNpZ1tqDEZBn8pSaTDGtxRX52emudWBSXrvYgRR54kDLsazVabEiyTtXezqCLjUNsb6wbAdoFe62RVxJK2ztxWxmiyfjkJ7wFziQ2PoRbTHayqJVxywfXKyyaAQMFuNXd79rNXY4xdMzTC4KHKJftJTs5zt3NVnij1J5X2knaqtmxbMKjhgC2XVNB7rXPwYF1SatigVK19cpAm7Pbp2JnrN7ePTaCDf4YALDGHK469ZS6H15bjeTNdR4fEgPNDRvATw1dDrTg1xBB6WderLwzNhhYHD38fEwiYmGD3fBU3Bu6tZKcyJ1rAXhYvKUoCqHXJCfhsg5ckFJxWspcavNkCTG5fPBfVsuwyakFwdirPsCAY2kBfzBNF", + "stackHeight": 2 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [1]", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 10047 of 983192 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 26742 of 999850 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 26892 + }, + "blockTime": 1746552066 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/2cn9SkNFaMFunpe9B6P4JYHEZTsUHpmkV8wpHYfmcgbHgbujwRT7pk9QPeTmeouXD7MPbpPqkKDm9boZsRFv2gnh b/tests/data/transactions/batched_tree_transactions/2cn9SkNFaMFunpe9B6P4JYHEZTsUHpmkV8wpHYfmcgbHgbujwRT7pk9QPeTmeouXD7MPbpPqkKDm9boZsRFv2gnh new file mode 100644 index 00000000..6cbe85d4 --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/2cn9SkNFaMFunpe9B6P4JYHEZTsUHpmkV8wpHYfmcgbHgbujwRT7pk9QPeTmeouXD7MPbpPqkKDm9boZsRFv2gnh @@ -0,0 +1,97 @@ +{ + "slot": 191, + "transaction": [ + "AVDe89q0OnHRtwejAcjSOLoAlaioARqZ6+wtBqzkCS8Z+muvUXAndh+N9OnOHihS+s35Nb+H2UtniImIei5L/w4BAAcKeiGC7CowvJIstkh88PnSr2WEDY9TdVntq2WiGjIGJiNPL8LQWvwrEthMKXEIoXESvMrPc33rl26npvlOS90m26eeSDlsVuDVTj+5sQPFmF4L4Yw5qusdd/SNQPAGVKJYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E+7ModRBcroW1tER2B+2/4UUnv7QjkRykBCO/0VJ6JnVejPrtUNN97eGD+5lEvfklWyYCub8f+xJpuALm00by6QIEAAUCQEIPAAUKAAAIBwkGAgUDAU8aEKkHFcryGUMAAAAAAAAAAAEAAAB6IYLsKjC8kiy2SHzw+dKvZYQNj1N1We2rZaIaMgYmI0BCDwAAAAAAAAAAAAAAAAABQEIPAAAAAAAB", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999979697190, + 29827470, + 15000000, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "postBalances": [ + 99999978687189, + 29832471, + 16000000, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 3, + "accounts": [ + 0, + 2 + ], + "data": "3Bxs4Bc3VYuGVB19", + "stackHeight": 2 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [ + 9, + 8, + 1 + ], + "data": "21HGgNSLz1yYgjRayL37XWwxDSqDsgEEKzhJdvMbV9nnMr13tjtwkoLbMueYAc31hWMwJeumbfMkgvfLaybpZTUak1TRUXZXpYsEMFFC6Hpt8AaJ5PXDy1E1SHbhrtdJN3XZpHGS4J2EQAB9DJH4XYqzRv2u72NVXr4qsQScYLaxLqT9R6cPLQvTNdeuVPmoFvdkGrZPVzdXSCS1mCejNsQ6kX1dYTjLy7mWGzCSsvSLKhbmcPR1", + "stackHeight": 2 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [1]", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 3575 of 987457 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 16005 of 999850 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 16155 + }, + "blockTime": 1746552072 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/2cum9GDi9wGjQyohhiJnNCejW5YvQrxBVT5AYXFpYQceb27JTJFQutHZfBDY8F8w6euVV9h1PGXCUWoLQpr7QrQR b/tests/data/transactions/batched_tree_transactions/2cum9GDi9wGjQyohhiJnNCejW5YvQrxBVT5AYXFpYQceb27JTJFQutHZfBDY8F8w6euVV9h1PGXCUWoLQpr7QrQR new file mode 100644 index 00000000..7bc12df5 --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/2cum9GDi9wGjQyohhiJnNCejW5YvQrxBVT5AYXFpYQceb27JTJFQutHZfBDY8F8w6euVV9h1PGXCUWoLQpr7QrQR @@ -0,0 +1,97 @@ +{ + "slot": 230, + "transaction": [ + "AVD78HaFA+wDljRHvn/c61Ty2RKb1aRyON5EEXqaMwJ20/HEaFajY+lI1kUG5yPo+GzAFA/A4axGnD/ibrcyhwoBAAcKeiGC7CowvJIstkh88PnSr2WEDY9TdVntq2WiGjIGJiNPL8LQWvwrEthMKXEIoXESvMrPc33rl26npvlOS90m26eeSDlsVuDVTj+5sQPFmF4L4Yw5qusdd/SNQPAGVKJYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E+7ModRBcroW1tER2B+2/4UUnv7QjkRykBCO/0VJ6JnUUMO+ZEaFAe5pOYOqSih3okdKncP2VKUyfBfgbPo5BMwIEAAUCQEIPAAUKAAAIBwkGAgUDAU8aEKkHFcryGUMAAAAAAAAAAAEAAAB6IYLsKjC8kiy2SHzw+dKvZYQNj1N1We2rZaIaMgYmI0BCDwAAAAAAAAAAAAAAAAABQEIPAAAAAAAB", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999963377158, + 29987502, + 31000000, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "postBalances": [ + 99999962367157, + 29992503, + 32000000, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 3, + "accounts": [ + 0, + 2 + ], + "data": "3Bxs4Bc3VYuGVB19", + "stackHeight": 2 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [ + 9, + 8, + 1 + ], + "data": "21HGgNSLz1yYgjRayL37XWwxDSqDsgEEKzhJdvMbV9nnMr13tjtwkoLbMueYAc31hWMwJeumUBDdaLsHo4RRZZFG1SNNT8m7Hv2xNLYoQB2R5BTbpCSLWE7YLzb5dhvN5AumQsH4g5CpKb9ngM6MS8hYcm47zqnqYgXrUkCkfoexoUAAMuJbCpW15898hwVicwSiTeudD51VSMqPqVcFsCEhoJ9D9HWRNujrsgGpZ2PMn33Zozj9", + "stackHeight": 2 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [1]", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 4419 of 987457 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 16849 of 999850 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 16999 + }, + "blockTime": 1746552091 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/2dRJHeED1UG9fVmwjND5PvncGbG4JpGKJCa663QDyQ1rd4bJdPW9Wtt3YthYGKkwGC4xXnYViex2412saadLrv7W b/tests/data/transactions/batched_tree_transactions/2dRJHeED1UG9fVmwjND5PvncGbG4JpGKJCa663QDyQ1rd4bJdPW9Wtt3YthYGKkwGC4xXnYViex2412saadLrv7W new file mode 100644 index 00000000..53e8f0ad --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/2dRJHeED1UG9fVmwjND5PvncGbG4JpGKJCa663QDyQ1rd4bJdPW9Wtt3YthYGKkwGC4xXnYViex2412saadLrv7W @@ -0,0 +1,97 @@ +{ + "slot": 224, + "transaction": [ + "AVFsXZMcqKBctVIFlzYM7utlBeT+EA+nFnX6fTJXbQphNZ5VkHyZutJn0LzVKf7ny//n+BBHYfSpWd6hPKZDewUBAAcKeiGC7CowvJIstkh88PnSr2WEDY9TdVntq2WiGjIGJiNPL8LQWvwrEthMKXEIoXESvMrPc33rl26npvlOS90m26eeSDlsVuDVTj+5sQPFmF4L4Yw5qusdd/SNQPAGVKJYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E+7ModRBcroW1tER2B+2/4UUnv7QjkRykBCO/0VJ6JnXhr2WrtJDohB5RU+CMY+DM82SQQynp2wWbl8tkHftCxQIEAAUCQEIPAAUKAAAIBwkGAgUDAU8aEKkHFcryGUMAAAAAAAAAAAEAAAB6IYLsKjC8kiy2SHzw+dKvZYQNj1N1We2rZaIaMgYmI0BCDwAAAAAAAAAAAAAAAAABQEIPAAAAAAAB", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999966437164, + 29957496, + 28000000, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "postBalances": [ + 99999965427163, + 29962497, + 29000000, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 3, + "accounts": [ + 0, + 2 + ], + "data": "3Bxs4Bc3VYuGVB19", + "stackHeight": 2 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [ + 9, + 8, + 1 + ], + "data": "21HGgNSLz1yYgjRayL37XWwxDSqDsgEEKzhJdvMbV9nnMr13tjtwkoLbMueYAc31hWMwJeumadxvzyEd8CdAoh1AzRfSoYyRYV6iVwuZxgNPE6t5ZXNszdQKjRkmvKy2wqjAovamU7cV82FzdkRzpxQbCMg3pUR4JfmwEP5NvGT5VGSav7QGzL5B3my2AFnJw9ygR3pRqKVNVUk65X6YDWPUYgbtnUUakZ42uPvRhKeXK6MGNg7q", + "stackHeight": 2 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [1]", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 4419 of 987457 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 16849 of 999850 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 16999 + }, + "blockTime": 1746552088 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/2gQzy2K4GVKgpTyVrfPMkUzQZ9M56EtFkdwvi7vXwBeBB2dvqcWkoVc4HdGYGfUAjW8R89MFrnLJkhSfNvgYbwYC b/tests/data/transactions/batched_tree_transactions/2gQzy2K4GVKgpTyVrfPMkUzQZ9M56EtFkdwvi7vXwBeBB2dvqcWkoVc4HdGYGfUAjW8R89MFrnLJkhSfNvgYbwYC new file mode 100644 index 00000000..9d229a79 --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/2gQzy2K4GVKgpTyVrfPMkUzQZ9M56EtFkdwvi7vXwBeBB2dvqcWkoVc4HdGYGfUAjW8R89MFrnLJkhSfNvgYbwYC @@ -0,0 +1,97 @@ +{ + "slot": 188, + "transaction": [ + "AVQBhdrTxdf7/zR3s9sTEsE7edqOnCRdm7WHrxLDjB51qACOB1jozeu5b/o+jaUUAjITHW5nQt2vU+TGWYLf5gkBAAcKeiGC7CowvJIstkh88PnSr2WEDY9TdVntq2WiGjIGJiNPL8LQWvwrEthMKXEIoXESvMrPc33rl26npvlOS90m26eeSDlsVuDVTj+5sQPFmF4L4Yw5qusdd/SNQPAGVKJYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E+7ModRBcroW1tER2B+2/4UUnv7QjkRykBCO/0VJ6JnUmAfnz52b8/1jgC09ZyykaelGmwN2qGJXMrHjb9AgFIwIEAAUCQEIPAAUKAAAIBwkGAgUDAU8aEKkHFcryGUMAAAAAAAAAAAEAAAB6IYLsKjC8kiy2SHzw+dKvZYQNj1N1We2rZaIaMgYmI0BCDwAAAAAAAAAAAAAAAAABQEIPAAAAAAAB", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999980717192, + 29817468, + 14000000, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "postBalances": [ + 99999979707191, + 29822469, + 15000000, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 3, + "accounts": [ + 0, + 2 + ], + "data": "3Bxs4Bc3VYuGVB19", + "stackHeight": 2 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [ + 9, + 8, + 1 + ], + "data": "21HGgNSLz1yYgjRayL37XWwxDSqDsgEEKzhJdvMbV9nnMr13tjtwkoLbMueYAc31hWMwJeumX9BThFMEcYtfbvBR5PSaewPSdiu77ZygkCEzppQuNnNJ8AyHfrunUvVCi9BymKNNSpBMFkQFQ9GgRyikGshxz7Zbgy2gxKAuaktdE5hTi9hpESGBrsaLn7PJqBcFT2nUShqusrh9mx6pXbKTwb36AKMg8qp6kjXbV2ZFP1L8P4kP", + "stackHeight": 2 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [1]", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 4419 of 987457 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 16849 of 999850 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 16999 + }, + "blockTime": 1746552071 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/2gzWSVSqFCfa4bU2PDKcHdtMfZ7M1864ci12A5uW9MCHcjCEm8eCq2HufWtvqNiSnpkjcK16Ewc8LAZKjYwZjqn3 b/tests/data/transactions/batched_tree_transactions/2gzWSVSqFCfa4bU2PDKcHdtMfZ7M1864ci12A5uW9MCHcjCEm8eCq2HufWtvqNiSnpkjcK16Ewc8LAZKjYwZjqn3 new file mode 100644 index 00000000..22cd62d4 --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/2gzWSVSqFCfa4bU2PDKcHdtMfZ7M1864ci12A5uW9MCHcjCEm8eCq2HufWtvqNiSnpkjcK16Ewc8LAZKjYwZjqn3 @@ -0,0 +1,97 @@ +{ + "slot": 177, + "transaction": [ + "AVSBEIimBVZcNbBg7R46Dl3CaHc9mVfD9IC4/5uoO3juMsHTxjEQxEPBdGaRmCT9GYctpeXBQahFnw7/fj49tgQBAAcKeiGC7CowvJIstkh88PnSr2WEDY9TdVntq2WiGjIGJiNPL8LQWvwrEthMKXEIoXESvMrPc33rl26npvlOS90m26eeSDlsVuDVTj+5sQPFmF4L4Yw5qusdd/SNQPAGVKJYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E+7ModRBcroW1tER2B+2/4UUnv7QjkRykBCO/0VJ6JnWQb3ejyQPg4/nfiDUV5HtKXK6DEJ4+kwybU2Ls5Hp1QwIEAAUCQEIPAAUKAAAIBwkGAgUDAU8aEKkHFcryGUMAAAAAAAAAAAEAAAB6IYLsKjC8kiy2SHzw+dKvZYQNj1N1We2rZaIaMgYmI0BCDwAAAAAAAAAAAAAAAAABQEIPAAAAAAAB", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999985817202, + 29767458, + 9000000, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "postBalances": [ + 99999984807201, + 29772459, + 10000000, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 3, + "accounts": [ + 0, + 2 + ], + "data": "3Bxs4Bc3VYuGVB19", + "stackHeight": 2 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [ + 9, + 8, + 1 + ], + "data": "21HGgNSLz1yYgjRayL37XWwxDSqDsgEEKzhJdvMbV9nnMr13tjtwkoLbMueYAc31hWMwJeumYqou9AEwRmMPw7V12PBkwqyuHhpyAZAc42tqdDrrUDKLb6QyibqgidJZ8WFfmygj32EfBK9PRmQzvEPfM1TwMecQZ5FUvjhx3mWNwGWty4ExwAineUQyrfZXu4LTpicGMwfNBpbYRgAJysVd7HmiSLiJYnJPSjt254bCUvprmWkX", + "stackHeight": 2 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [1]", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 4419 of 987457 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 16849 of 999850 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 16999 + }, + "blockTime": 1746552066 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/2hRiDRdvBkoRApZmQckH7ftjNbqkRHahKMgMLV1Do3aVCcjEaXCr6uA6v7fZJ7cjhKc4vaz5YjHMKYcigTRsoGMK b/tests/data/transactions/batched_tree_transactions/2hRiDRdvBkoRApZmQckH7ftjNbqkRHahKMgMLV1Do3aVCcjEaXCr6uA6v7fZJ7cjhKc4vaz5YjHMKYcigTRsoGMK new file mode 100644 index 00000000..fcb85d39 --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/2hRiDRdvBkoRApZmQckH7ftjNbqkRHahKMgMLV1Do3aVCcjEaXCr6uA6v7fZJ7cjhKc4vaz5YjHMKYcigTRsoGMK @@ -0,0 +1,87 @@ +{ + "slot": 246, + "transaction": [ + "AVTg/pePRR2TzFUA27nNqgJo3Kqsq2uUSeCIlwjbCj6BqOtJAsC/ybeYWzKYhGFGoV8vsazojucx+fcDTHW90AYBAAcKeiGC7CowvJIstkh88PnSr2WEDY9TdVntq2WiGjIGJiNPL8LQWvwrEthMKXEIoXESvMrPc33rl26npvlOS90m2/KuWuX0POEKz8TJiMAjOgmV1yiV9Am40XHqZVvj8yn+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E+7ModRBcroW1tER2B+2/4UUnv7QjkRykBCO/0VJ6JnUiXcfGyl2C4+2cn+clAKveWZbMqEaHVc65ukAp3wBkoAIEAAUCQEIPAAULAAAIBwkGBQUDAgF7GhCpBxXK8hlvAAAAAAEAAAB6IYLsKjC8kiy2SHzw+dKvZYQNj1N1We2rZaIaMgYmI0BCDwAAAAAAAAAAAUoAAAABAAAAAQAAAAAAAAAAAAAmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEIPAAAAAAAAAAEAAAAAAAAA", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999956247145, + 30052515, + 290204160, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "postBalances": [ + 99999956237144, + 30057516, + 290204160, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [ + 9, + 8, + 1, + 2 + ], + "data": "95YB9JH8MTYtuZfgNwFoqXrHy6Hk7vDU5w1mxBVYvCq3ex88p6MyCdM2r9nz5vugurs4mwE5WA2nF5exCNtJj9BnHgoB3Z4GPeEiWngcyS74nAT9JatJn4bayPDWVmtCcS9d3XABDBUgdbaMrLAMhXuK2Xz8RRxoWcHvue2hYtdmx4ZRHkRor4547fgVEkddD3WYrtxRszYnxXKcrFw324Ay1ZqHT4CJiwhA61u3jKhDP1Upf3iCrQFjJvXSzJK4s6CH3gGYuCv4QFxd8Qu4XLNRFRBwW2memTitBzzkhbY1WeDff63YY2ZJ3cyp7ZGVPzwqYkGB2tHcEVNxacmu2rytc7vAv1dZCkseMGUdhQ1AaxU4yMRb4TeHUVvZBz5aq82taDnb7A5dRKdZFW51kK", + "stackHeight": 2 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [1]", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 10101 of 983192 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 26796 of 999850 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 26946 + }, + "blockTime": 1746552098 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/2jWYcewUY6hyULzYuNE66XBrhzk3iv45qbcF9ZBFVw4iPaFNZ6zD7ja5Ho91yzmAyCPNytWPzxtaNQyzyjwmWSE7 b/tests/data/transactions/batched_tree_transactions/2jWYcewUY6hyULzYuNE66XBrhzk3iv45qbcF9ZBFVw4iPaFNZ6zD7ja5Ho91yzmAyCPNytWPzxtaNQyzyjwmWSE7 new file mode 100644 index 00000000..1ace805a --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/2jWYcewUY6hyULzYuNE66XBrhzk3iv45qbcF9ZBFVw4iPaFNZ6zD7ja5Ho91yzmAyCPNytWPzxtaNQyzyjwmWSE7 @@ -0,0 +1,87 @@ +{ + "slot": 183, + "transaction": [ + "AVas7OJyP0gr/UY0zxtyFUcoiSq+1LLi0r2quKT1Fgur5fz0UBnWTKDGCugYGx/iqAqDQi6EwoxiKOQzHB1TAAQBAAcKeiGC7CowvJIstkh88PnSr2WEDY9TdVntq2WiGjIGJiNPL8LQWvwrEthMKXEIoXESvMrPc33rl26npvlOS90m2/KuWuX0POEKz8TJiMAjOgmV1yiV9Am40XHqZVvj8yn+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E+7ModRBcroW1tER2B+2/4UUnv7QjkRykBCO/0VJ6JnVvxHf0Hae+XE5taSA4nSiXpvWFdlkdSU/xS63HDCHFCAIEAAUCQEIPAAULAAAIBwkGBQUDAgF7GhCpBxXK8hlvAAAAAAEAAAB6IYLsKjC8kiy2SHzw+dKvZYQNj1N1We2rZaIaMgYmI0BCDwAAAAAAAAAAARYAAAABAAAAAQAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEIPAAAAAAAAAAEAAAAAAAAA", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999982767197, + 29792463, + 290204160, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "postBalances": [ + 99999982757196, + 29797464, + 290204160, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [ + 9, + 8, + 1, + 2 + ], + "data": "95YB9JH8MTYtuZfgNwFoqXrHy3z6WKx8ZsZoRkanV2dggSWvTSZotUzHZ9HAh7RW6BgXyvckXrHfmuVJDAYyrH7mnF4VZEPR85cLNxoCDborAxn8Ax3JGyqNsxvKUMRFwWgHJxuT3JMrUQ4ZsXQLhVnT1LhA7GkwYD4DTwBn9dysDeFXaTW9abcpHNkkv6fHh866st8A588i2Byeyw6xoyVrS3eGsNvS98GLoX4K4V83TpgHZJSiPradQYjjwwL9nWBGkwuUg8Gaggrrtnk5oSVP6NcoDfPJQM4nYVweQSUv3kN5u92BMJnNRPiHooBKpPz89f23QzKVtcMems7AYZBctBfTzLGmtCxkRaps5i8bXbShrsFfR4rUbUiaCgqAP37mGCF1FeuxdS5fnR4w4b", + "stackHeight": 2 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [1]", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 10023 of 983192 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 26718 of 999850 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 26868 + }, + "blockTime": 1746552069 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/2n9Aq5oFsEH1J5Ly5jFoJ7Uteof69SmXTher34mwb1cxGdYiYsY5Tfb3nXFW12BhtDJmAjUYGNVRfmvBisxWBSjy b/tests/data/transactions/batched_tree_transactions/2n9Aq5oFsEH1J5Ly5jFoJ7Uteof69SmXTher34mwb1cxGdYiYsY5Tfb3nXFW12BhtDJmAjUYGNVRfmvBisxWBSjy new file mode 100644 index 00000000..24f27c5b --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/2n9Aq5oFsEH1J5Ly5jFoJ7Uteof69SmXTher34mwb1cxGdYiYsY5Tfb3nXFW12BhtDJmAjUYGNVRfmvBisxWBSjy @@ -0,0 +1,97 @@ +{ + "slot": 201, + "transaction": [ + "AVjx244I1SEFl3Rpo81l+BecI3G/TeHb/XpfohXVACp9R4k6nJjSegW5mMdn1XCQZ82PD7xaOLwBq6Qlr+X2awABAAcKeiGC7CowvJIstkh88PnSr2WEDY9TdVntq2WiGjIGJiNPL8LQWvwrEthMKXEIoXESvMrPc33rl26npvlOS90m26eeSDlsVuDVTj+5sQPFmF4L4Yw5qusdd/SNQPAGVKJYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E+7ModRBcroW1tER2B+2/4UUnv7QjkRykBCO/0VJ6JnXa8hH1eLBpDCiswwHBuCNJctrRysKNWE1Zs25LpZt7GQIEAAUCQEIPAAUKAAAIBwkGAgUDAU8aEKkHFcryGUMAAAAAAAAAAAEAAAB6IYLsKjC8kiy2SHzw+dKvZYQNj1N1We2rZaIaMgYmI0BCDwAAAAAAAAAAAAAAAAABQEIPAAAAAAAB", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999975617182, + 29867478, + 19000000, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "postBalances": [ + 99999974607181, + 29872479, + 20000000, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 3, + "accounts": [ + 0, + 2 + ], + "data": "3Bxs4Bc3VYuGVB19", + "stackHeight": 2 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [ + 9, + 8, + 1 + ], + "data": "21HGgNSLz1yYgjRayL37XWwxDSqDsgEEKzhJdvMbV9nnMr13tjtwkoLbMueYAc31hWMwJeumVUkjUf3u2WEmX3YrKMmtH5QYMVhTthMAb8kjVF36mfGNYsAjhvHA6iAKGzLjY37xsqkg5zaeiqvT6r6nvddjAYPfyFPXMyXMMWNBLbWQ4JBsPo7Hxb6Ye312TpQ9QinwMBrd5jvzzJJ6MDKBtbBoV5Ds2ZxEbVkpFkUKsZ4whzis", + "stackHeight": 2 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [1]", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 4419 of 987457 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 16849 of 999850 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 16999 + }, + "blockTime": 1746552077 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/2umtizbCVFnUkVHTEwWjGExN2Ti6hy1bEvEqXPyGZD89qXFEHDFm7ZJqnuzXiLG5edLwYUDnRgXLttVrBSGcz7Bo b/tests/data/transactions/batched_tree_transactions/2umtizbCVFnUkVHTEwWjGExN2Ti6hy1bEvEqXPyGZD89qXFEHDFm7ZJqnuzXiLG5edLwYUDnRgXLttVrBSGcz7Bo new file mode 100644 index 00000000..9983f970 --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/2umtizbCVFnUkVHTEwWjGExN2Ti6hy1bEvEqXPyGZD89qXFEHDFm7ZJqnuzXiLG5edLwYUDnRgXLttVrBSGcz7Bo @@ -0,0 +1,87 @@ +{ + "slot": 205, + "transaction": [ + "AV+G/HSpq0dF030dwCiD9j4GNy9/DChPZtpxuFCLbzEtnhjxyjZjQojh716zhSVkGWiCGdtk3w08Vg5dXz7StAIBAAcKeiGC7CowvJIstkh88PnSr2WEDY9TdVntq2WiGjIGJiNPL8LQWvwrEthMKXEIoXESvMrPc33rl26npvlOS90m2/KuWuX0POEKz8TJiMAjOgmV1yiV9Am40XHqZVvj8yn+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E+7ModRBcroW1tER2B+2/4UUnv7QjkRykBCO/0VJ6JnX3Ki464Q6NAenq5IGsN7/slenKypgK0P9DXrjFNP1dgAIEAAUCQEIPAAULAAAIBwkGBQUDAgF7GhCpBxXK8hlvAAAAAAEAAAB6IYLsKjC8kiy2SHzw+dKvZYQNj1N1We2rZaIaMgYmI0BCDwAAAAAAAAAAASgAAAABAAAAAQAAAAAAAAAAAAAVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEIPAAAAAAAAAAEAAAAAAAAA", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999973587179, + 29882481, + 290204160, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "postBalances": [ + 99999973577178, + 29887482, + 290204160, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [ + 9, + 8, + 1, + 2 + ], + "data": "95YB9JH8MTYtuZfgNwFoqXrHy1cKMcoeckaZeJAwUsfmqPprQa3Mq9bLM1Qrx37kjvkFqMBsi32LxjfXnpvKmH59hDRLocwYtVuviBSqYfR4r9qtjLcznKxYTHxgM5bzkdU8X1j8BgRhQDcRrzTUKEYGyZzYWzwQNeJXcrjnkxoqCBm43EaAjrx4EXGVPSxfpnUhkTXxgBEz31T8CPVpLwc6oPpznPzmHov6zS8x9MDHAj6Yd7yQonzph2r5i7zJgowreD6ZB5hu6GW61ACmVAiwwPn2Eaf2gtz8TxouahDT8XCiGbrVsG3sTvKc8sp97YQ2GgpMagutdA5oS967sdc9QGjK5TxntZg7FKbaJGKkSzR65WMme4ytyV4wNjHipiCVsWcnHfez31MPrvSqbu", + "stackHeight": 2 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [1]", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 9179 of 983192 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 25874 of 999850 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 26024 + }, + "blockTime": 1746552079 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/2x9WnDdwdzFcc2qpLfxBiwt3VApEffFzTtv38Ra7Vv6ti9nA7aBu1tPob86zVqfQji8ytqTmkMSPaYrjmLFSqjGp b/tests/data/transactions/batched_tree_transactions/2x9WnDdwdzFcc2qpLfxBiwt3VApEffFzTtv38Ra7Vv6ti9nA7aBu1tPob86zVqfQji8ytqTmkMSPaYrjmLFSqjGp new file mode 100644 index 00000000..72c2f9a3 --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/2x9WnDdwdzFcc2qpLfxBiwt3VApEffFzTtv38Ra7Vv6ti9nA7aBu1tPob86zVqfQji8ytqTmkMSPaYrjmLFSqjGp @@ -0,0 +1,97 @@ +{ + "slot": 208, + "transaction": [ + "AWGS0FDJg1EVnYQfr/z1NAouRx/9sZJtNMyMYB7kcAtVN8gySzXIU9V/DKqXU1sO4UxEEfaseE2L/AvFq0tMVQ0BAAcKeiGC7CowvJIstkh88PnSr2WEDY9TdVntq2WiGjIGJiNPL8LQWvwrEthMKXEIoXESvMrPc33rl26npvlOS90m26eeSDlsVuDVTj+5sQPFmF4L4Yw5qusdd/SNQPAGVKJYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E+7ModRBcroW1tER2B+2/4UUnv7QjkRykBCO/0VJ6JnVAGS/lrUKp9hfkV4DxjKr+dOO0XsufkXnStwLooI+49AIEAAUCQEIPAAUKAAAIBwkGAgUDAU8aEKkHFcryGUMAAAAAAAAAAAEAAAB6IYLsKjC8kiy2SHzw+dKvZYQNj1N1We2rZaIaMgYmI0BCDwAAAAAAAAAAAAAAAAABQEIPAAAAAAAB", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999972557176, + 29897484, + 22000000, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "postBalances": [ + 99999971547175, + 29902485, + 23000000, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 3, + "accounts": [ + 0, + 2 + ], + "data": "3Bxs4Bc3VYuGVB19", + "stackHeight": 2 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [ + 9, + 8, + 1 + ], + "data": "21HGgNSLz1yYgjRayL37XWwxDSqDsgEEKzhJdvMbV9nnMr13tjtwkoLbMueYAc31hWMwJeumaKE5X6JXu3NVUFBppXbkfxSKaFtk2H5ZE8MNZjFZfWUFjcFiYJ5dHgkpSPaP4DnaC9buAuaXXSXdNYrCNwckFw2511thUrYCCWZLnNDtnfVYHg7vbxJi7nsSr7k3NTEaVNJkaif4FmR4A43h9ojJDKDk2BriWinQwWE9t13RQ81m", + "stackHeight": 2 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [1]", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 4419 of 987457 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 16849 of 999850 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 16999 + }, + "blockTime": 1746552080 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/2zDFdEjeaQqxFniYAjzBXaGBHEFhCPCZktevv1GWMkP7XUZyA5uwkM1wKUmvtubzDUdaFvVh6ZiS4TsTZXCbtHUk b/tests/data/transactions/batched_tree_transactions/2zDFdEjeaQqxFniYAjzBXaGBHEFhCPCZktevv1GWMkP7XUZyA5uwkM1wKUmvtubzDUdaFvVh6ZiS4TsTZXCbtHUk new file mode 100644 index 00000000..81b298a0 --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/2zDFdEjeaQqxFniYAjzBXaGBHEFhCPCZktevv1GWMkP7XUZyA5uwkM1wKUmvtubzDUdaFvVh6ZiS4TsTZXCbtHUk @@ -0,0 +1,87 @@ +{ + "slot": 225, + "transaction": [ + "AWNakt4dAvNRQRPp1MgZWKygHHKfLjSTihiJe0uKBZ9X3C2TEFAhsa55Yr7gkmzv+D++7VOFZr6qyKZ/gwo8wgEBAAcKeiGC7CowvJIstkh88PnSr2WEDY9TdVntq2WiGjIGJiNPL8LQWvwrEthMKXEIoXESvMrPc33rl26npvlOS90m2/KuWuX0POEKz8TJiMAjOgmV1yiV9Am40XHqZVvj8yn+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E+7ModRBcroW1tER2B+2/4UUnv7QjkRykBCO/0VJ6JnVY1GDg+l3mPl5klb2FIhtEqtnFaAnTnBwEg7wA8GJrlgIEAAUCQEIPAAULAAAIBwkGBQUDAgF7GhCpBxXK8hlvAAAAAAEAAAB6IYLsKjC8kiy2SHzw+dKvZYQNj1N1We2rZaIaMgYmI0BCDwAAAAAAAAAAATgAAAABAAAAAQAAAAAAAAAAAAAdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEIPAAAAAAAAAAEAAAAAAAAA", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999965427163, + 29962497, + 290204160, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "postBalances": [ + 99999965417162, + 29967498, + 290204160, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [ + 9, + 8, + 1, + 2 + ], + "data": "95YB9JH8MTYtuZfgNwFoqXrHy8G2mFfFNTFrxQfehrUUBCz91ryz6E1Y1ZZiJNf4sFyZd4SC4N7sHdzjcxeyrc6GgJ7CDQcaxTRP72hg9fkEEZVEYd6REuHZEdRxzqhUjehdzv1EG5KgkUWYn9TYnXmHzpnsAJSt4rRqP8q8fF6228oYxGFeJVuyPnPCMcBigRTeGUSg4BPDqmiqAEhWhRhoXBc35BU1h2Ko5gvds8EcKZgm3UNdkQM2AYQwpeb8jwLeQ21u2yDdWNg1wps29HKykKMbsPLfMQpUiF8oNqurV3daYPtrdAWyAGPUCNKqYyiE79Xmg51y2SCTVKL45dL5yUoHivetMxDADZ9av2qbuiHmBptgfRjijtYF435Xz2SimytcG6PhzfTiiqQfd9", + "stackHeight": 2 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [1]", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 10101 of 983192 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 26796 of 999850 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 26946 + }, + "blockTime": 1746552088 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/31zKmbENG6BKk8CE7MxvZgwif8BWagfNfMZMtyJoU1nQNHtKYSBfwAini5GFbjav54cwJwPtFudGwmGPZfYTYS1d b/tests/data/transactions/batched_tree_transactions/31zKmbENG6BKk8CE7MxvZgwif8BWagfNfMZMtyJoU1nQNHtKYSBfwAini5GFbjav54cwJwPtFudGwmGPZfYTYS1d new file mode 100644 index 00000000..ab3dbf5e --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/31zKmbENG6BKk8CE7MxvZgwif8BWagfNfMZMtyJoU1nQNHtKYSBfwAini5GFbjav54cwJwPtFudGwmGPZfYTYS1d @@ -0,0 +1,97 @@ +{ + "slot": 272, + "transaction": [ + "AWTi5K4dMigmBkeQef48l09Cq1xUXck3mC7IAL8FGHVxpKGpAqXw4tCFGqpbqH9DsFBBqc4DxTc/W1z333Q0rwABAAcKeiGC7CowvJIstkh88PnSr2WEDY9TdVntq2WiGjIGJiNPL8LQWvwrEthMKXEIoXESvMrPc33rl26npvlOS90m26eeSDlsVuDVTj+5sQPFmF4L4Yw5qusdd/SNQPAGVKJYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E+7ModRBcroW1tER2B+2/4UUnv7QjkRykBCO/0VJ6JnVB4Dfman8mMsgD5UIt7ic2hORSyu4iPFfSTAFvd11OOQIEAAUCQEIPAAUKAAAIBwkGAgUDAU8aEKkHFcryGUMAAAAAAAAAAAEAAAB6IYLsKjC8kiy2SHzw+dKvZYQNj1N1We2rZaIaMgYmI0BCDwAAAAAAAAAAAAAAAAABQEIPAAAAAAAB", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999945017122, + 30167538, + 49000000, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "postBalances": [ + 99999944007121, + 30172539, + 50000000, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 3, + "accounts": [ + 0, + 2 + ], + "data": "3Bxs4Bc3VYuGVB19", + "stackHeight": 2 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [ + 9, + 8, + 1 + ], + "data": "21HGgNSLz1yYgjRayL37XWwxDSqDsgEEKzhJdvMbV9nnMr13tjtwkoLbMueYAc31hWMwJeumSN7bDPL3UVvqmbxw5KJXAfMvTjnyqKvvzwGt4QFztLChPx99Tr7tvsXJbjMjZQPsWLUFNHME8v4o2ARFyNcyCGbxH9CVUyaxKBYb3arDoriUMBNHU3cUCd6qGagRJd3o2psx4ynEPazUbTfickExjVY1yWL1x1i99HaXZTVb46tf", + "stackHeight": 2 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [1]", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 4419 of 987457 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 16849 of 999850 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 16999 + }, + "blockTime": 1746552110 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/33NBwzE7jK1AFhNjkjaKkTSQXo2CmcmjHnwYpoiJKE1qJRDshNhr1RT1xzjoGCY91Mdc6WmoZ6SQfQqCzCoCUDG8 b/tests/data/transactions/batched_tree_transactions/33NBwzE7jK1AFhNjkjaKkTSQXo2CmcmjHnwYpoiJKE1qJRDshNhr1RT1xzjoGCY91Mdc6WmoZ6SQfQqCzCoCUDG8 new file mode 100644 index 00000000..976f1b36 --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/33NBwzE7jK1AFhNjkjaKkTSQXo2CmcmjHnwYpoiJKE1qJRDshNhr1RT1xzjoGCY91Mdc6WmoZ6SQfQqCzCoCUDG8 @@ -0,0 +1,83 @@ +{ + "slot": 323, + "transaction": [ + "AWYS4g+WCngwT6axfVW/7vRaikM3flONP0nMN8RYh68X/wRun/HU7PuKCjGzgZ8vF1aR65rCun5D+9CcUTO5eAUBAAUJ7DDUiI4IcYFkGbvXWaOx6/U8oHfKVZ1qGOt5OIzPzJlMm20YZ6Hmhtq+9LocAayVnPPWJjXrHQ48WcmoYfd2+U8vwtBa/CsS2EwpcQihcRK8ys9zfeuXbqem+U5L3Sbb8q5a5fQ84QrPxMmIwCM6CZXXKJX0CbjRceplW+PzKf4FDSsTeVE2hc8C8rX9UpG9lZsrBgqlJepbNIE7Hbm3bgksNuwi9ReDAP20Sqpq/8/wpG4cvGQcDj7QnaE7nvUIC7wPwLtHyi90xBEulKsTz6PGNOXcF+rLA80aI81+eHwQpl591jkE+Dg60Dze4Hi5FNhzGIA7FTWAcNeS4Fz957/QmmoHZdEI20ACv+9MyGVTFGij2iz8yvlzRZ4iyBL0Qxy85Ew4hhWU6pX9ygIpSLP42KxNOhc6D4PchMR7fp4BBAgBAAcIBQYDAq0B3cID2CU+3JP/oAAAAA8tO9wtqff3JFuy/pzmbkpju4+nqQ57bcpOahSG7S6QIAe88vWEwsV4Zm1SkH4uQK6sKVmAUoTn9xoKZrkBwycq14GsS7nuH39Bp/IX1tiiZtrndNg137ArCeIcjzbeLiYPkXiMzzTR+QaVRBlvZXRMa9jXF/IF/qY1SCESNBuvo6LjqTD4MFbEdXoSeBvbHWgw6WltUSpwyoN8dE+xUQo=", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999995043200, + 2735280, + 30177540, + 290204160, + 1141440, + 1141440, + 1141440, + 0, + 1614720 + ], + "postBalances": [ + 99999995038200, + 2735280, + 30177540, + 290204160, + 1141440, + 1141440, + 1141440, + 0, + 1614720 + ], + "innerInstructions": [ + { + "index": 0, + "instructions": [ + { + "programIdIndex": 5, + "accounts": [ + 7, + 8, + 6, + 3, + 2 + ], + "data": "ZZpa4B1Y3ym6r8941X9VfsNzC2rNQ2TpSqSaJjT2zMx5xViAz3dQPME8iey42VWaUcAwtRC88BQDKHWreL7Yb7SzSPzuSagKHHzB7vkAvgF2HPZ6nmuysXGujVGNmHa2CVTQJxzxWkD4fB2tD9g5ZUbSjrmPbHjLthYHn5Sj41vXS1RRnjreh1HqVywPn2QtcDbkcKkCQ6AmwxW2nC1LrsLdB6siRkFQDWocwQupFmb", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [], + "data": "V55KweBRnUHGkEaUisCdgyHtJHJb7ZCcjbWeUQUySHhE99UpZCoaW1oHhTPFvfdUfQwkU8Erc8SpFCqwdugPR8BD9hJPgnm5jeUM1dqdmMogEJHhmqD9bS7X173VVCBjPxLuH2Et4PWzFrvJethBwKvrc16VFqmA2KYEfMLUWAWAKLmXKUnw24ZD9PotHQEtaRwgHrz2z15U", + "stackHeight": 3 + } + ] + } + ], + "logMessages": [ + "Program Lighton6oQpVkeewmo2mcPTQQp7kYHr4fWpAgJyEmDX invoke [1]", + "Program log: Instruction: BatchAppend", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: BatchAppend", + "Program noopb9bkMVfRPU8AsbpTUg8AQkHtKwMYZiFUjNRtMmV invoke [3]", + "Program noopb9bkMVfRPU8AsbpTUg8AQkHtKwMYZiFUjNRtMmV consumed 38 of 79855 compute units", + "Program noopb9bkMVfRPU8AsbpTUg8AQkHtKwMYZiFUjNRtMmV success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 103162 of 182790 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program Lighton6oQpVkeewmo2mcPTQQp7kYHr4fWpAgJyEmDX consumed 122351 of 200000 compute units", + "Program Lighton6oQpVkeewmo2mcPTQQp7kYHr4fWpAgJyEmDX success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 122351 + }, + "blockTime": 1746552135 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/3AQS4L9XTszaVLbbqurwewbe4dkhUquJb88d3FKLs7T9JWg1cesLyCLbevretqsSDdSGPo3Zt1hkLSJitESdXBiA b/tests/data/transactions/batched_tree_transactions/3AQS4L9XTszaVLbbqurwewbe4dkhUquJb88d3FKLs7T9JWg1cesLyCLbevretqsSDdSGPo3Zt1hkLSJitESdXBiA new file mode 100644 index 00000000..92b8da77 --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/3AQS4L9XTszaVLbbqurwewbe4dkhUquJb88d3FKLs7T9JWg1cesLyCLbevretqsSDdSGPo3Zt1hkLSJitESdXBiA @@ -0,0 +1,97 @@ +{ + "slot": 247, + "transaction": [ + "AWwkxjsiAlxOade0On6s2W6vY/Rf7QwxNzl9c8R1o5wpZ/IfuZkixwn2HCrsioxBfzkQ0avuFUSIgaFXHzCTaAsBAAcKeiGC7CowvJIstkh88PnSr2WEDY9TdVntq2WiGjIGJiNPL8LQWvwrEthMKXEIoXESvMrPc33rl26npvlOS90m26eeSDlsVuDVTj+5sQPFmF4L4Yw5qusdd/SNQPAGVKJYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E+7ModRBcroW1tER2B+2/4UUnv7QjkRykBCO/0VJ6JnUUpYyEAgjK66Nr4bDvBUW1kvyXXJRm19uQ1NgCh1V2AQIEAAUCQEIPAAUKAAAIBwkGAgUDAU8aEKkHFcryGUMAAAAAAAAAAAEAAAB6IYLsKjC8kiy2SHzw+dKvZYQNj1N1We2rZaIaMgYmI0BCDwAAAAAAAAAAAAAAAAABQEIPAAAAAAAB", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999956237144, + 30057516, + 38000000, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "postBalances": [ + 99999955227143, + 30062517, + 39000000, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 3, + "accounts": [ + 0, + 2 + ], + "data": "3Bxs4Bc3VYuGVB19", + "stackHeight": 2 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [ + 9, + 8, + 1 + ], + "data": "21HGgNSLz1yYgjRayL37XWwxDSqDsgEEKzhJdvMbV9nnMr13tjtwkoLbMueYAc31hWMwJeumb1BiNLgkSapCYu4aXP1PWELkfPJ2UVyWVwMSLxuX5UMFj9ZyMNyi6cfaFESPePzbjUoBVeoG4TxBMrZZQnrhf4YPQxQqg6PSDBkwcrvk21GixtSzwWTFw8onb2RWwQvZhDR7cAXWv2aNpKJ22VCx8Qy885tXMZpNEnEm4gTQZqdh", + "stackHeight": 2 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [1]", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 4419 of 987457 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 16849 of 999850 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 16999 + }, + "blockTime": 1746552099 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/3AbHNNSW5QL6w9Mde9iD5TSMAKnM9p395U99XniAXRcwcTmeD19ZmBjw89kkXzgovyf2K7uc23eNFYQxzGSC3B4D b/tests/data/transactions/batched_tree_transactions/3AbHNNSW5QL6w9Mde9iD5TSMAKnM9p395U99XniAXRcwcTmeD19ZmBjw89kkXzgovyf2K7uc23eNFYQxzGSC3B4D new file mode 100644 index 00000000..207d8f74 --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/3AbHNNSW5QL6w9Mde9iD5TSMAKnM9p395U99XniAXRcwcTmeD19ZmBjw89kkXzgovyf2K7uc23eNFYQxzGSC3B4D @@ -0,0 +1,87 @@ +{ + "slot": 215, + "transaction": [ + "AWxOEsLArzvkTf2it4mUmdYOVFtpmUBes30SXh9eyxlAHkx66yt4drRIN9tefUhJ6qP0Rx+6/w2mtxyN+XQ3YgIBAAcKeiGC7CowvJIstkh88PnSr2WEDY9TdVntq2WiGjIGJiNPL8LQWvwrEthMKXEIoXESvMrPc33rl26npvlOS90m2/KuWuX0POEKz8TJiMAjOgmV1yiV9Am40XHqZVvj8yn+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E+7ModRBcroW1tER2B+2/4UUnv7QjkRykBCO/0VJ6JnVTnh0qtNKM9JrSRcVt3HA00rtxGuLa/g2u4xOHttByGwIEAAUCQEIPAAULAAAIBwkGBQUDAgF7GhCpBxXK8hlvAAAAAAEAAAB6IYLsKjC8kiy2SHzw+dKvZYQNj1N1We2rZaIaMgYmI0BCDwAAAAAAAAAAATAAAAABAAAAAQAAAAAAAAAAAAAZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEIPAAAAAAAAAAEAAAAAAAAA", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999969507171, + 29922489, + 290204160, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "postBalances": [ + 99999969497170, + 29927490, + 290204160, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [ + 9, + 8, + 1, + 2 + ], + "data": "95YB9JH8MTYtuZfgNwFoqXrHy8Np6H7zG8fkbQzLATfCo1Q3RdhNCmUhq2APdkhaZuLXvqyPnqrYxfTMhjBfBMAcLaRQ3tesaca8Z9e77uYTz9N5M2bbG2sPb58FeBvrEnx1js8ff1zF12KtCptMeQY54FcKiC1PN1ms9KRsBomy12B7BJ9HMjQhh6RuBs67UUoSt2DKZkF7XJG3RyG79xEYoYeF1HKgpZPoSkxKitYNReVDCMPTcrWRr3EXdJmrGAvRHZFer4SpFD4gq2PwHiixjN5Ec3BEc85q62k2jfz4La9eMUGnZL563gnskKHcSUwdajGJpM2Kh8JvsqpundL7MoNiVzgHJfaVtepDhTW2wqAqnYH6ye3ayiKjeWL6txNQ4cKq8KFmjhthB7bDNX", + "stackHeight": 2 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [1]", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 10054 of 983192 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 26749 of 999850 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 26899 + }, + "blockTime": 1746552084 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/3CwP72AUSjabpvc8fP9DB2zLyDaci8gZL9AATziXio1X3hTNxYChJs63x4BtPbL2DvQJdMVEWyxsc2Y3Veh4NjQq b/tests/data/transactions/batched_tree_transactions/3CwP72AUSjabpvc8fP9DB2zLyDaci8gZL9AATziXio1X3hTNxYChJs63x4BtPbL2DvQJdMVEWyxsc2Y3Veh4NjQq new file mode 100644 index 00000000..46cc34a6 --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/3CwP72AUSjabpvc8fP9DB2zLyDaci8gZL9AATziXio1X3hTNxYChJs63x4BtPbL2DvQJdMVEWyxsc2Y3Veh4NjQq @@ -0,0 +1,87 @@ +{ + "slot": 212, + "transaction": [ + "AW5UGtNjHnmkLKW1c0eAdmntvEzoQBgTgrrDBjwUcUgBbXK76YtuTS0wpCRRVyi98YiFExjxLHIQ41lCshMVbAYBAAcKeiGC7CowvJIstkh88PnSr2WEDY9TdVntq2WiGjIGJiNPL8LQWvwrEthMKXEIoXESvMrPc33rl26npvlOS90m2/KuWuX0POEKz8TJiMAjOgmV1yiV9Am40XHqZVvj8yn+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E+7ModRBcroW1tER2B+2/4UUnv7QjkRykBCO/0VJ6JnVlvEdXxZ2ioRY4werdwqsDVx7S7RFu9gj5IGQngrzWBgIEAAUCQEIPAAULAAAIBwkGBQUDAgF7GhCpBxXK8hlvAAAAAAEAAAB6IYLsKjC8kiy2SHzw+dKvZYQNj1N1We2rZaIaMgYmI0BCDwAAAAAAAAAAAS4AAAABAAAAAQAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEIPAAAAAAAAAAEAAAAAAAAA", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999970527173, + 29912487, + 290204160, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "postBalances": [ + 99999970517172, + 29917488, + 290204160, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [ + 9, + 8, + 1, + 2 + ], + "data": "95YB9JH8MTYtuZfgNwFoqXrHy1oJwaDvjmyyZJxFtK5i4ta6UMBLmDh4a5SLz2VCNuc25rWtwmrUUv5L2Q7FJaT1M5T55JzN9zEBdfEuX9czT6hWUwr7C7s4sjNFn3VJ7yoHMqj6BarHPFnRYR7cQd3CvQsSXvF1VGj2QVdXvyfMgad9epvV24VX8PdZdFvwJEZWgwQM9v8iwBw6c8aMBYCrG8KHc2NVNCeJfsaaCYjUeEbv1yh8BaRva37hZ17C4Keu8q8ZKJYANGZFhS2HqodT9VNiv4RubecQPJLstoj1NpQaFRCAYgZzUwKX1o1oqGmyCi3purK4rMfCZEDRDo6iWZuSXmaAF4wySwH6mJGaSz55BHZvDDkJ5KKM4W549BSTjxi27rf9hpgpp7Ci3H", + "stackHeight": 2 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [1]", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 10023 of 983192 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 26718 of 999850 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 26868 + }, + "blockTime": 1746552082 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/3DMzvMkcWdQbftwkLYoCfU3pKt5MfzUiUDQTvCGmuJLkL5KUXAvZDf2XMPAtCxkDY2E3iXVhhfa3s1duDhj6WX8Y b/tests/data/transactions/batched_tree_transactions/3DMzvMkcWdQbftwkLYoCfU3pKt5MfzUiUDQTvCGmuJLkL5KUXAvZDf2XMPAtCxkDY2E3iXVhhfa3s1duDhj6WX8Y new file mode 100644 index 00000000..e675b4b7 --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/3DMzvMkcWdQbftwkLYoCfU3pKt5MfzUiUDQTvCGmuJLkL5KUXAvZDf2XMPAtCxkDY2E3iXVhhfa3s1duDhj6WX8Y @@ -0,0 +1,87 @@ +{ + "slot": 189, + "transaction": [ + "AW6xzl/e/MT4qz4Tt96ro0V6giDCVWX9CCOE+uSBlAHAKE0O4rWZKW0d/mD5jqsWJ0xNZR6Q9GGhRGwH94Co9AUBAAcKeiGC7CowvJIstkh88PnSr2WEDY9TdVntq2WiGjIGJiNPL8LQWvwrEthMKXEIoXESvMrPc33rl26npvlOS90m2/KuWuX0POEKz8TJiMAjOgmV1yiV9Am40XHqZVvj8yn+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E+7ModRBcroW1tER2B+2/4UUnv7QjkRykBCO/0VJ6JnUHTMSO6Q5moc45njrCeqehtUYYVvZnWPMygzw/ft2lvAIEAAUCQEIPAAULAAAIBwkGBQUDAgF7GhCpBxXK8hlvAAAAAAEAAAB6IYLsKjC8kiy2SHzw+dKvZYQNj1N1We2rZaIaMgYmI0BCDwAAAAAAAAAAARwAAAABAAAAAQAAAAAAAAAAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEIPAAAAAAAAAAEAAAAAAAAA", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999979707191, + 29822469, + 290204160, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "postBalances": [ + 99999979697190, + 29827470, + 290204160, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [ + 9, + 8, + 1, + 2 + ], + "data": "95YB9JH8MTYtuZfgNwFoqXrHxzUKjKRiULGUgrARWyUHEVSm1zrw36Z5FzKTMV6huFbbdtVbDLXyCDLMTmHgTQc9iKB5Bfg4mWrH2F6nLDJ5c27S1cfrGZTUkhx6o5yem7aoCLAZ4pvPFwVmmP6g7uXLBBdZkfq5q5rDLVMFyV8YYNgB1LU1AGiEgJHZPnaUHEagBFXA4RXmwZMdwLDBWumu2GUxko2omptkkMrd8ABfmm28YTsKMhAv4wFS4rsnMPm2a99KJ52FKKiopwu5XY21KKwVN8TJCJ1EkiWYj16DWhH3NdBdQ4Wx6QwaiATHdjjgram5FrnuXQcdQBteRAbsD1npd6JJRhW7zyKUTnWLZeBzeNPf9JotaS1B65Gc3DPTaR9wPoiFARDxbrvdRh", + "stackHeight": 2 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [1]", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 10035 of 983192 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 26730 of 999850 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 26880 + }, + "blockTime": 1746552072 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/3DzZbfyueZJsjhZRjTwFuHXkezes9hi7p9zgZEZXtuXESB5hQMkgSJABZfktuqH12djJ5f3q4VS7cdLc6RDXjuZ5 b/tests/data/transactions/batched_tree_transactions/3DzZbfyueZJsjhZRjTwFuHXkezes9hi7p9zgZEZXtuXESB5hQMkgSJABZfktuqH12djJ5f3q4VS7cdLc6RDXjuZ5 new file mode 100644 index 00000000..fc8945ee --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/3DzZbfyueZJsjhZRjTwFuHXkezes9hi7p9zgZEZXtuXESB5hQMkgSJABZfktuqH12djJ5f3q4VS7cdLc6RDXjuZ5 @@ -0,0 +1,80 @@ +{ + "slot": 328, + "transaction": [ + "AW88+h1DTxA4+OpYKYAAswfhFiBr//iBMTqYDzlxcU160InNMMVdw3KKLPmUKcYBiCPbuhoS1kCUD+nHdKCFjAQBAAUI7DDUiI4IcYFkGbvXWaOx6/U8oHfKVZ1qGOt5OIzPzJlMm20YZ6Hmhtq+9LocAayVnPPWJjXrHQ48WcmoYfd2+fKuWuX0POEKz8TJiMAjOgmV1yiV9Am40XHqZVvj8yn+BQ0rE3lRNoXPAvK1/VKRvZWbKwYKpSXqWzSBOx25t24JLDbsIvUXgwD9tEqqav/P8KRuHLxkHA4+0J2hO571CAu8D8C7R8ovdMQRLpSrE8+jxjTl3BfqywPNGiPNfnh8EKZefdY5BPg4OtA83uB4uRTYcxiAOxU1gHDXkuBc/ee/0JpqB2XRCNtAAr/vTMhlUxRoo9os/Mr5c0WeIsgS9OcQLTmSKksTDAm9d8ox1iSsbBF5xkwRT8V/Y/1pzErDAQMHAQAGBwQFAq0Bhp7S8Pwj/ff/oAAAAAz96Oa0xAmAf8SDbAhtkXSnv0cU7l6eIBs7d30h8BsoBWWyYjGuGKeg9ZSWmLxU6CjltHTtwvvVH1zgtpMz+LqIlVqopfRv3WdXTU0lD7edN78KMSxsQvk/kWnuG/do3hg0t6DkZlkP81H7yMuJVUXjL8siAlEfqovJpWOcYjgsEWq7jXzEoF3JRyUmDBbcXCTL/9VPp33yTwliNIgXBcA=", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999995033200, + 2735280, + 290204160, + 1141440, + 1141440, + 1141440, + 0, + 1614720 + ], + "postBalances": [ + 99999995028200, + 2735280, + 290204160, + 1141440, + 1141440, + 1141440, + 0, + 1614720 + ], + "innerInstructions": [ + { + "index": 0, + "instructions": [ + { + "programIdIndex": 4, + "accounts": [ + 6, + 7, + 5, + 2 + ], + "data": "LmdQuBbApKVFkG74xC87uz7JSbDPrs2jKfMSwmtTG2rXMofT3PWEFvwSoRasbpkyKGZ34HvSXBjvxXmMJAKEQ92UR131bg6qmZGZVeoUbhJL2Zd3SFbzGJeXHUv2MZC1YwjkZjMbAyWpuJnBicUDoZTboMgWdHXYFjhtM5FtzwRfayP6JKFkTv4LwFzoWCT5A6pNzJDgEzGXfZAXVdXgu3bbr6gXjd8S3GchZfH7Puq", + "stackHeight": 2 + }, + { + "programIdIndex": 5, + "accounts": [], + "data": "33RnrV5PeYSegsuxuyuhDrnnW8smoxASrgH5K6URdqG8Yoy9KvdLNguRu5TNwCiiFi8PyFubtQotzYkpntgKERc5Y6sJn9Mz2fXu27y45YFAoHA1Pn8yctgJXLS3ihRW338FS92TQ43DxndZPS2RAssHHDeGz7NNj", + "stackHeight": 3 + } + ] + } + ], + "logMessages": [ + "Program Lighton6oQpVkeewmo2mcPTQQp7kYHr4fWpAgJyEmDX invoke [1]", + "Program log: Instruction: BatchNullify", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: BatchNullify", + "Program noopb9bkMVfRPU8AsbpTUg8AQkHtKwMYZiFUjNRtMmV invoke [3]", + "Program noopb9bkMVfRPU8AsbpTUg8AQkHtKwMYZiFUjNRtMmV consumed 38 of 82866 compute units", + "Program noopb9bkMVfRPU8AsbpTUg8AQkHtKwMYZiFUjNRtMmV success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 101436 of 184105 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program Lighton6oQpVkeewmo2mcPTQQp7kYHr4fWpAgJyEmDX consumed 119254 of 200000 compute units", + "Program Lighton6oQpVkeewmo2mcPTQQp7kYHr4fWpAgJyEmDX success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 119254 + }, + "blockTime": 1746552137 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/3MMCEADBBLPCgsD8eoUfczBcwBoGeTL2oNyQhNs4CL5fci6LTqGwqYwUvaNVPAdWEA9WSw2TNyiiSLv6EGVuMHp1 b/tests/data/transactions/batched_tree_transactions/3MMCEADBBLPCgsD8eoUfczBcwBoGeTL2oNyQhNs4CL5fci6LTqGwqYwUvaNVPAdWEA9WSw2TNyiiSLv6EGVuMHp1 new file mode 100644 index 00000000..42afaca0 --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/3MMCEADBBLPCgsD8eoUfczBcwBoGeTL2oNyQhNs4CL5fci6LTqGwqYwUvaNVPAdWEA9WSw2TNyiiSLv6EGVuMHp1 @@ -0,0 +1,97 @@ +{ + "slot": 245, + "transaction": [ + "AXWU2/4hUjBqofAigCmluJituxNrzzSwhiFPNnwyApPFggH3V8pi4WFO0hH3WrOKNqPklsnKeiiqJd+HGWpXfgYBAAcKeiGC7CowvJIstkh88PnSr2WEDY9TdVntq2WiGjIGJiNPL8LQWvwrEthMKXEIoXESvMrPc33rl26npvlOS90m26eeSDlsVuDVTj+5sQPFmF4L4Yw5qusdd/SNQPAGVKJYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E+7ModRBcroW1tER2B+2/4UUnv7QjkRykBCO/0VJ6JnUPZFhn2Pi4ctivkCdzAzV/84k+gNzj5aokD3C4oMKjUgIEAAUCQEIPAAUKAAAIBwkGAgUDAU8aEKkHFcryGUMAAAAAAAAAAAEAAAB6IYLsKjC8kiy2SHzw+dKvZYQNj1N1We2rZaIaMgYmI0BCDwAAAAAAAAAAAAAAAAABQEIPAAAAAAAB", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999957257146, + 30047514, + 37000000, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "postBalances": [ + 99999956247145, + 30052515, + 38000000, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 3, + "accounts": [ + 0, + 2 + ], + "data": "3Bxs4Bc3VYuGVB19", + "stackHeight": 2 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [ + 9, + 8, + 1 + ], + "data": "21HGgNSLz1yYgjRayL37XWwxDSqDsgEEKzhJdvMbV9nnMr13tjtwkoLbMueYAc31hWMwJeumPNGuJaPoTbYKix3g7JUFedzYr2FV55hhqirQVtq7AAt7Jpbg1KE6ohKXfoAbgWaFCgHoRPxgxDH2H86M1HHvXxCmwfw5TAfqMQ2czdsL4gC33SQU4vG3PzYK1EQRk7qYY1hJJBBLGNoVWvmTLT3LhxmynDjzTGHQ8DnFofbEwGNb", + "stackHeight": 2 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [1]", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 4419 of 987457 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 16849 of 999850 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 16999 + }, + "blockTime": 1746552098 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/3P6wATSr8sBmjLrn8Bdg5u81vMy51WEDVbESHN8J3QWnEbVSL3LnGN7436msZSmpoMwxteid1sPTJU3KYbjbiAP8 b/tests/data/transactions/batched_tree_transactions/3P6wATSr8sBmjLrn8Bdg5u81vMy51WEDVbESHN8J3QWnEbVSL3LnGN7436msZSmpoMwxteid1sPTJU3KYbjbiAP8 new file mode 100644 index 00000000..00e9e4c6 --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/3P6wATSr8sBmjLrn8Bdg5u81vMy51WEDVbESHN8J3QWnEbVSL3LnGN7436msZSmpoMwxteid1sPTJU3KYbjbiAP8 @@ -0,0 +1,87 @@ +{ + "slot": 248, + "transaction": [ + "AXcYHLNCofC68otbJLrjIR7dWxuv7YCp8dYgv90YykdLyIwuqG5yfXiKHwku69vmSljcIpkGy365ZUsJ/ymQKA8BAAcKeiGC7CowvJIstkh88PnSr2WEDY9TdVntq2WiGjIGJiNPL8LQWvwrEthMKXEIoXESvMrPc33rl26npvlOS90m2/KuWuX0POEKz8TJiMAjOgmV1yiV9Am40XHqZVvj8yn+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E+7ModRBcroW1tER2B+2/4UUnv7QjkRykBCO/0VJ6JnWftM35wGe9/5sNAU8mDW5MO4PbQhc9ozxurnFNWkW7xgIEAAUCQEIPAAULAAAIBwkGBQUDAgF7GhCpBxXK8hlvAAAAAAEAAAB6IYLsKjC8kiy2SHzw+dKvZYQNj1N1We2rZaIaMgYmI0BCDwAAAAAAAAAAAUwAAAABAAAAAQAAAAAAAAAAAAAnAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEIPAAAAAAAAAAEAAAAAAAAA", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999955227143, + 30062517, + 290204160, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "postBalances": [ + 99999955217142, + 30067518, + 290204160, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [ + 9, + 8, + 1, + 2 + ], + "data": "95YB9JH8MTYtuZfgNwFoqXrHyB3kBRn6uyZMfPS9TGYe55T4q2fx6zm86BwKJhYVFQMwuhw12fp1z8HeB9zecY36v3mo2rDwqK1GQCCf7ymR2wbv7rFNpNV1QsuV2jSJuXBxWyhG5vYunKJ3epUtzZ6nMh6wq2kqAUmfPenvCXy4Jsr9pfchFWWZ1VjsR24v6safoMQVmHSzJLik1mvq8ozCW4yDtFJ73So8nmwEjjN6X3GoUhcxuAN9Sp3b53ZrZdU7SuBGwd6tT1wpk9vrHeyHzeEUgoLLuUEYAHSS3iguMGtZ2mBwVPNzp254Uph9sfULZRMTrY13ShURguinVNYpL8dg5TiiqqT3Y5Xb7VrsxinJanva3t7pK4xN32oKpEuuCQiMm4jm1jmQKSXJwZ", + "stackHeight": 2 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [1]", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 10101 of 983192 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 26796 of 999850 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 26946 + }, + "blockTime": 1746552099 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/3PLPUFnwPZi7iXJx1t2b38qooLnZj3VSzR4ZRnr7cXXA3s4rLjouTN73NGB36ov95918bUtNVMBD2mXqhD3xSs2q b/tests/data/transactions/batched_tree_transactions/3PLPUFnwPZi7iXJx1t2b38qooLnZj3VSzR4ZRnr7cXXA3s4rLjouTN73NGB36ov95918bUtNVMBD2mXqhD3xSs2q new file mode 100644 index 00000000..b6010eaf --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/3PLPUFnwPZi7iXJx1t2b38qooLnZj3VSzR4ZRnr7cXXA3s4rLjouTN73NGB36ov95918bUtNVMBD2mXqhD3xSs2q @@ -0,0 +1,97 @@ +{ + "slot": 167, + "transaction": [ + "AXdLUfxFLz19bejplntoySRXkc0xr7r1L9t/loj9KhJPoxLO7ihe6uy8ZHVb1ENeNi732JxUlxiqTqg3ADhv3AoBAAcKeiGC7CowvJIstkh88PnSr2WEDY9TdVntq2WiGjIGJiNPL8LQWvwrEthMKXEIoXESvMrPc33rl26npvlOS90m26eeSDlsVuDVTj+5sQPFmF4L4Yw5qusdd/SNQPAGVKJYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E+7ModRBcroW1tER2B+2/4UUnv7QjkRykBCO/0VJ6JnWoQ0TOl8x6uwzY99gj5n4XZ9bZ/AQa8yNUwhFXeSTG9gIEAAUCQEIPAAUKAAAIBwkGAgUDAU8aEKkHFcryGUMAAAAAAAAAAAEAAAB6IYLsKjC8kiy2SHzw+dKvZYQNj1N1We2rZaIaMgYmI0BCDwAAAAAAAAAAAAAAAAABQEIPAAAAAAAB", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999989897210, + 29727450, + 5000000, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "postBalances": [ + 99999988887209, + 29732451, + 6000000, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 3, + "accounts": [ + 0, + 2 + ], + "data": "3Bxs4Bc3VYuGVB19", + "stackHeight": 2 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [ + 9, + 8, + 1 + ], + "data": "21HGgNSLz1yYgjRayL37XWwxDSqDsgEEKzhJdvMbV9nnMr13tjtwkoLbMueYAc31hWMwJeumXsYpNZLNYRCbW1Tnf2UMUkBGLWSqKN4J44tF7RNq3i5WepbFQFvTdQZE3uGPfYRwqwWePh9gJuE1iuxVGJ4JE8cb8ivbvHLBb9xWTRFHSGNww6UEKS41exPmBU2j9LsKX4naecqM2h6ijQrFo4d9P3jzgCDPiMezDxQM9XrV7mm9", + "stackHeight": 2 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [1]", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 3575 of 987457 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 16005 of 999850 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 16155 + }, + "blockTime": 1746552061 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/3RFVGEq2HvBFxQTuDqnZWtMecxFp29dYtgRE3hRL8g2zvHPjD36H2wKj5NWMyN8KSqHdCrmo8NCQAcXdXQ68PatL b/tests/data/transactions/batched_tree_transactions/3RFVGEq2HvBFxQTuDqnZWtMecxFp29dYtgRE3hRL8g2zvHPjD36H2wKj5NWMyN8KSqHdCrmo8NCQAcXdXQ68PatL new file mode 100644 index 00000000..fbdcf4d7 --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/3RFVGEq2HvBFxQTuDqnZWtMecxFp29dYtgRE3hRL8g2zvHPjD36H2wKj5NWMyN8KSqHdCrmo8NCQAcXdXQ68PatL @@ -0,0 +1,97 @@ +{ + "slot": 170, + "transaction": [ + "AXjyMsZmdwfXnhGY6eEfeiY28nV3i0HiNBn48gktfC1i6JB9l7OmkKy5VVJVUMD2QSdB03ZcllOM+NiHezuJQwUBAAcKeiGC7CowvJIstkh88PnSr2WEDY9TdVntq2WiGjIGJiNPL8LQWvwrEthMKXEIoXESvMrPc33rl26npvlOS90m26eeSDlsVuDVTj+5sQPFmF4L4Yw5qusdd/SNQPAGVKJYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E+7ModRBcroW1tER2B+2/4UUnv7QjkRykBCO/0VJ6JnXfG+MJWhm45Layep2BJMLg9V6oYj67+gF+rGnActJ9HAIEAAUCQEIPAAUKAAAIBwkGAgUDAU8aEKkHFcryGUMAAAAAAAAAAAEAAAB6IYLsKjC8kiy2SHzw+dKvZYQNj1N1We2rZaIaMgYmI0BCDwAAAAAAAAAAAAAAAAABQEIPAAAAAAAB", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999988877208, + 29737452, + 6000000, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "postBalances": [ + 99999987867207, + 29742453, + 7000000, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 3, + "accounts": [ + 0, + 2 + ], + "data": "3Bxs4Bc3VYuGVB19", + "stackHeight": 2 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [ + 9, + 8, + 1 + ], + "data": "21HGgNSLz1yYgjRayL37XWwxDSqDsgEEKzhJdvMbV9nnMr13tjtwkoLbMueYAc31hWMwJeumX4M3GYiwTVVpRwsUJFuBjDpcHX587zkyAvJwrTK1KQw472fthZUY5ww8s7BdgSWNRsEJ4odEaUNBdYAibdSQVk4W4sZFUm7Y8bpzk6qSFodsq7r48vzzowBxbSweubFjKbKeYe8Nx3YF2QERJGjVy2QZL8UYoc3Uko6qa75D7dMy", + "stackHeight": 2 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [1]", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 4419 of 987457 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 16849 of 999850 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 16999 + }, + "blockTime": 1746552063 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/3UctLaStu1Z7qe39aUN41PLgycHgQGGUHSSBe6deBWwoY5pkXRH6XaKQSFueXy1zWomrPjrqTeGQbnE9gTFXQs8x b/tests/data/transactions/batched_tree_transactions/3UctLaStu1Z7qe39aUN41PLgycHgQGGUHSSBe6deBWwoY5pkXRH6XaKQSFueXy1zWomrPjrqTeGQbnE9gTFXQs8x new file mode 100644 index 00000000..54fae948 --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/3UctLaStu1Z7qe39aUN41PLgycHgQGGUHSSBe6deBWwoY5pkXRH6XaKQSFueXy1zWomrPjrqTeGQbnE9gTFXQs8x @@ -0,0 +1,83 @@ +{ + "slot": 321, + "transaction": [ + "AXvZ8FBb+AH/T9imtKe1UYZekdIjzdz7zMpS7YUKX77B0d2a3xig4UJDsz7ULF/xUSPWOE9lTjfQ3b12gRrFjQ0BAAUJ7DDUiI4IcYFkGbvXWaOx6/U8oHfKVZ1qGOt5OIzPzJlMm20YZ6Hmhtq+9LocAayVnPPWJjXrHQ48WcmoYfd2+U8vwtBa/CsS2EwpcQihcRK8ys9zfeuXbqem+U5L3Sbb8q5a5fQ84QrPxMmIwCM6CZXXKJX0CbjRceplW+PzKf4FDSsTeVE2hc8C8rX9UpG9lZsrBgqlJepbNIE7Hbm3bgksNuwi9ReDAP20Sqpq/8/wpG4cvGQcDj7QnaE7nvUIC7wPwLtHyi90xBEulKsTz6PGNOXcF+rLA80aI81+eHwQpl591jkE+Dg60Dze4Hi5FNhzGIA7FTWAcNeS4Fz957/QmmoHZdEI20ACv+9MyGVTFGij2iz8yvlzRZ4iyBL0bE3VGvNKau0khnFAeuoeRviF96xCHfhyc7Ezo0qbJCMBBAgBAAcIBQYDAq0B3cID2CU+3JP/oAAAAA5gAEQX284aSTpAlfwmW8CWwjYR5TABD/LTQk6N5C/Kk5J1RedWhK95CclcCUov3VQ72kM4d7D/40VGzz92ziqkpUl5Hyvnk/tFkW/mZGSQY9sOUu1ezzw2POE0zNT8AQVeRMzTvQmVR5q0jEPWvncXkM4qdq9qLTuwa4uqDGxoibCq5KJXp5qEJHGRGXkecYqWwtPWF+cwzx68diZduHc=", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999995048200, + 2735280, + 30177540, + 290204160, + 1141440, + 1141440, + 1141440, + 0, + 1614720 + ], + "postBalances": [ + 99999995043200, + 2735280, + 30177540, + 290204160, + 1141440, + 1141440, + 1141440, + 0, + 1614720 + ], + "innerInstructions": [ + { + "index": 0, + "instructions": [ + { + "programIdIndex": 5, + "accounts": [ + 7, + 8, + 6, + 3, + 2 + ], + "data": "ZZpa4B1Y3ym6r8941VjWksFVuhTSG6Q1QM3D8g5Cacc158kd21491USbjYuseJGLF2ExixfddWt5DmxqNNupvUGg6JFiApJVj2Xn1DJw1vxXe6eFimLrYBinZE1FZw2LKLYWhPoEKoS2VaPmeDUbzXRdJPYmhkr5qDYohGNuhwT1d5nYJejNG39nfA4yxHz2jmuDx9uCT51kCXx4xNP9iMfsuQTf4JzMnzK56KFjtni", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [], + "data": "V55KweBRnUHGkEaUisCdgyHtJHJb7ZCcjbWeUQUySHhE99UpZCoaW1oHa7N9GVrsyrMjxRXv2Vwt8fucimsGB1F1UVKEph3gegsvTtbrZ7sLno32gVbW1Tg1suJvUfzbSKxy99Mo5gT3Cd7JfAX3Cxe14s15NjH98MRtt3sZnZugD9MDx1so6GZ57GSNM9snt3mMsz2EmqM4", + "stackHeight": 3 + } + ] + } + ], + "logMessages": [ + "Program Lighton6oQpVkeewmo2mcPTQQp7kYHr4fWpAgJyEmDX invoke [1]", + "Program log: Instruction: BatchAppend", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: BatchAppend", + "Program noopb9bkMVfRPU8AsbpTUg8AQkHtKwMYZiFUjNRtMmV invoke [3]", + "Program noopb9bkMVfRPU8AsbpTUg8AQkHtKwMYZiFUjNRtMmV consumed 38 of 79855 compute units", + "Program noopb9bkMVfRPU8AsbpTUg8AQkHtKwMYZiFUjNRtMmV success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 103162 of 182790 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program Lighton6oQpVkeewmo2mcPTQQp7kYHr4fWpAgJyEmDX consumed 122351 of 200000 compute units", + "Program Lighton6oQpVkeewmo2mcPTQQp7kYHr4fWpAgJyEmDX success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 122351 + }, + "blockTime": 1746552134 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/3WNRHTsjMsspYdJAH4yewZMQN79UUXZwhXmMcvzjyV39GaybSBFgH4fLTyvEZKgxfqxrSjQNpnzNJmYPhi55W83E b/tests/data/transactions/batched_tree_transactions/3WNRHTsjMsspYdJAH4yewZMQN79UUXZwhXmMcvzjyV39GaybSBFgH4fLTyvEZKgxfqxrSjQNpnzNJmYPhi55W83E new file mode 100644 index 00000000..5e1b6361 --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/3WNRHTsjMsspYdJAH4yewZMQN79UUXZwhXmMcvzjyV39GaybSBFgH4fLTyvEZKgxfqxrSjQNpnzNJmYPhi55W83E @@ -0,0 +1,87 @@ +{ + "slot": 158, + "transaction": [ + "AX1cZ5cYCt42bmKqgCA1W7UpXVnUHKoJOoCPaN658ybssev8GOzMDcTAB7NWL3++2UrbgnLcRA1BA5r49rTCJgUBAAcKeiGC7CowvJIstkh88PnSr2WEDY9TdVntq2WiGjIGJiNPL8LQWvwrEthMKXEIoXESvMrPc33rl26npvlOS90m2/KuWuX0POEKz8TJiMAjOgmV1yiV9Am40XHqZVvj8yn+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E+7ModRBcroW1tER2B+2/4UUnv7QjkRykBCO/0VJ6JnWIUY4yA4yfiD8swsA2dKz/2lL01/YHFK7oCiknkvLongIEAAUCQEIPAAULAAAIBwkGBQUDAgF7GhCpBxXK8hlvAAAAAAEAAAB6IYLsKjC8kiy2SHzw+dKvZYQNj1N1We2rZaIaMgYmI0BCDwAAAAAAAAAAAQIAAAABAAAAAQAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEIPAAAAAAAAAAEAAAAAAAAA", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999992967217, + 29692443, + 290204160, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "postBalances": [ + 99999992957216, + 29697444, + 290204160, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [ + 9, + 8, + 1, + 2 + ], + "data": "95YB9JH8MTYtuZfgNwFoqXrHyADwiwhfzSRZ7jBCseYzgsTyUBrDy37H2wVrEC4quqZXSNBsS7CxiyqZn8VVcULSHVszHqLLJL1FzCV5tp7Z4cu9X3P6DNw3fP88YK7ARUeVtpvHCnTHPdsDiKKDq8duxiZQvrMka6ctAKPxHWMmtyuMf8VJHzbLMsC8SyUotVSdQMGVik7k4SRGJYJ2deE7BwxdG71z9VXrQMNncczGxRyiRWa6TsYyr3nMYqnyoeaaQwrDqNMHJEUVaog3toGNgrC26czEjTqaYpredikLMcmwCi4nn4eAVEE4d8kFmoB7i1BpMWHVEJ31p3EHGkptQn9sqva7VwXcfpJ2nTugg69sSjUKR2A11Wdmyi25jECBEAd7EfoSwXZpXQZbFV", + "stackHeight": 2 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [1]", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 10023 of 983192 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 26718 of 999850 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 26868 + }, + "blockTime": 1746552057 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/3YRkTBQKCcoybyS6bdXp9JMef8yhn8mCodaTiC2mEo4xUP4kYiVXkgahHN5bkcrZPuT6M4e2wkZdWPhZfBuhWM6N b/tests/data/transactions/batched_tree_transactions/3YRkTBQKCcoybyS6bdXp9JMef8yhn8mCodaTiC2mEo4xUP4kYiVXkgahHN5bkcrZPuT6M4e2wkZdWPhZfBuhWM6N new file mode 100644 index 00000000..2a95510f --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/3YRkTBQKCcoybyS6bdXp9JMef8yhn8mCodaTiC2mEo4xUP4kYiVXkgahHN5bkcrZPuT6M4e2wkZdWPhZfBuhWM6N @@ -0,0 +1,87 @@ +{ + "slot": 274, + "transaction": [ + "AX8inFqhwYd6ZLhGc+fouCkktATgb/kRN4yQ0ZKQ8xW2tMbMSx3s1qZirHGH04jsvv7oIPhF+nPNZ+2IWk5v6w8BAAcKeiGC7CowvJIstkh88PnSr2WEDY9TdVntq2WiGjIGJiNPL8LQWvwrEthMKXEIoXESvMrPc33rl26npvlOS90m2/KuWuX0POEKz8TJiMAjOgmV1yiV9Am40XHqZVvj8yn+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E+7ModRBcroW1tER2B+2/4UUnv7QjkRykBCO/0VJ6JnUyrQ6iAqOatjCxxNwBl7HYv5a+FmI/Vc0IsUgFtDTJ+gIEAAUCQEIPAAULAAAIBwkGBQUDAgF7GhCpBxXK8hlvAAAAAAEAAAB6IYLsKjC8kiy2SHzw+dKvZYQNj1N1We2rZaIaMgYmI0BCDwAAAAAAAAAAAWIAAAABAAAAAQAAAAAAAAAAAAAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEIPAAAAAAAAAAEAAAAAAAAA", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999944007121, + 30172539, + 290204160, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "postBalances": [ + 99999943997120, + 30177540, + 290204160, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [ + 9, + 8, + 1, + 2 + ], + "data": "95YB9JH8MTYtuZfgNwFoqXrHxzDTBkXHB774re1ghnLzgSbDi6jvZ7g2b4YaALn8bi6QGxMcfnn9Tjtou8uR4Zgoihs1JqzGCHXSdpT3VjCfNXDq1iwh4PWQH9zhjubne4CyR2D8ehcGWkakC81UUMLBvEqokMTDhRkR74VJ5dkJBmjnnz2TeVVrDHHSzyGgx6x1CgBLfEiqdb4GimS4LKkipmQeXWo6NdCMBZfWL3RgAK3cyeU1QBRiQEu2Bb8JxAmKoTszKb5gNFbSGXRf5L3JbVC5tdTrT8tpLqrSspNCnnr5Wi1BKydFo8HKmjiyvHp13Uk6MZb6C5VRmd2MDFoFq7LUGHc37vBegLzVADNwYxTBFAB8u626Brv4UZe3CawVLAPbXA6xBDWnhAxsvF", + "stackHeight": 2 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [1]", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 10163 of 983192 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 26858 of 999850 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 27008 + }, + "blockTime": 1746552111 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/3aTv6fDqR4nm8yMXXpJSVMYYsvuc47gY6bCGxxQc5HwkrxruHkiddc9WP1B67VU4AK1ySvsNgRtH4wpzWrxxvX5B b/tests/data/transactions/batched_tree_transactions/3aTv6fDqR4nm8yMXXpJSVMYYsvuc47gY6bCGxxQc5HwkrxruHkiddc9WP1B67VU4AK1ySvsNgRtH4wpzWrxxvX5B new file mode 100644 index 00000000..862c382b --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/3aTv6fDqR4nm8yMXXpJSVMYYsvuc47gY6bCGxxQc5HwkrxruHkiddc9WP1B67VU4AK1ySvsNgRtH4wpzWrxxvX5B @@ -0,0 +1,87 @@ +{ + "slot": 207, + "transaction": [ + "AYDkYr+fLk4fYHvBnrotApHsFogj+XefBMcmt7b0MVGmANy1myDgnLy0Ad2pJ4bAiD9jgML/iRtH4CIVGGxMWwIBAAcKeiGC7CowvJIstkh88PnSr2WEDY9TdVntq2WiGjIGJiNPL8LQWvwrEthMKXEIoXESvMrPc33rl26npvlOS90m2/KuWuX0POEKz8TJiMAjOgmV1yiV9Am40XHqZVvj8yn+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E+7ModRBcroW1tER2B+2/4UUnv7QjkRykBCO/0VJ6JnXC1Fav/jNilfR1uu9PeLiAKjsvOs4g8OpNE5KNfpoZqwIEAAUCQEIPAAULAAAIBwkGBQUDAgF7GhCpBxXK8hlvAAAAAAEAAAB6IYLsKjC8kiy2SHzw+dKvZYQNj1N1We2rZaIaMgYmI0BCDwAAAAAAAAAAASoAAAABAAAAAQAAAAAAAAAAAAAWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEIPAAAAAAAAAAEAAAAAAAAA", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999972567177, + 29892483, + 290204160, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "postBalances": [ + 99999972557176, + 29897484, + 290204160, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [ + 9, + 8, + 1, + 2 + ], + "data": "95YB9JH8MTYtuZfgNwFoqXrHy6VnYiDDMJvyhEMLpN1UnR53fZms4jrsL1FZWJd3hR5tdd13oqU27mc27WWf4rd5Z2F6J88GsHoh8rVtCTY19MuTDA7nR41B8cjRWuYsH7gfgzjSToKukY7NmDJbZ4co1YhssXRfut5sB5BqTRH75HkdPaMLtcvNXAGkizTCcVFynofzC33VyLk6v6u1GA2opoxaU4N7jr1HP8KhvXoRzuHUHipNHVH7GkJC4c2Z3ry8ucd9TsAn3HbVLbRNEa9nHMb8RUvK4fWJCYesWVJ1SXehiKdgeA3AbuPDefDxM8rvyBP4yJab8JpdXUAqDYj9rMZjSE6M8aiRbeZRuerGyxNNMDetD4fBCeE7fXFqzQQkWfZAVHwaKkHft142zT", + "stackHeight": 2 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [1]", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 10023 of 983192 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 26718 of 999850 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 26868 + }, + "blockTime": 1746552080 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/3bGS8YgaqgQPrX567h8ZCBjUieefcQcpeLRbEdWZNYzXmnX8isZ5HsEr3S291yCdQzCJgzCyVV4S5LBM4PT5iJHc b/tests/data/transactions/batched_tree_transactions/3bGS8YgaqgQPrX567h8ZCBjUieefcQcpeLRbEdWZNYzXmnX8isZ5HsEr3S291yCdQzCJgzCyVV4S5LBM4PT5iJHc new file mode 100644 index 00000000..bb5ba4fb --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/3bGS8YgaqgQPrX567h8ZCBjUieefcQcpeLRbEdWZNYzXmnX8isZ5HsEr3S291yCdQzCJgzCyVV4S5LBM4PT5iJHc @@ -0,0 +1,97 @@ +{ + "slot": 226, + "transaction": [ + "AYGVciSu2JNsazH3kgbj7cvRNztAbe3zMkHXp7v6QyUS+0x2vseNj+6d17CMP20IfcIjieS/eYnWIwVbga8F9w8BAAcKeiGC7CowvJIstkh88PnSr2WEDY9TdVntq2WiGjIGJiNPL8LQWvwrEthMKXEIoXESvMrPc33rl26npvlOS90m26eeSDlsVuDVTj+5sQPFmF4L4Yw5qusdd/SNQPAGVKJYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E+7ModRBcroW1tER2B+2/4UUnv7QjkRykBCO/0VJ6JnVZsbWBE8yscS3xWP+kzW1z8C9DaRZobF68cNcldSgvCgIEAAUCQEIPAAUKAAAIBwkGAgUDAU8aEKkHFcryGUMAAAAAAAAAAAEAAAB6IYLsKjC8kiy2SHzw+dKvZYQNj1N1We2rZaIaMgYmI0BCDwAAAAAAAAAAAAAAAAABQEIPAAAAAAAB", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999965417162, + 29967498, + 29000000, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "postBalances": [ + 99999964407161, + 29972499, + 30000000, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 3, + "accounts": [ + 0, + 2 + ], + "data": "3Bxs4Bc3VYuGVB19", + "stackHeight": 2 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [ + 9, + 8, + 1 + ], + "data": "21HGgNSLz1yYgjRayL37XWwxDSqDsgEEKzhJdvMbV9nnMr13tjtwkoLbMueYAc31hWMwJeumRHqEnfDEbbuyx7zLPnJYt8tHNwj87WM119abx4VU1ADeY7LKHMsp8QkBetqscfRB8Rs6YL3hsbGJzoNBkkQ51vAgqZZToXZgQZGQBad53z6n8kZJGxPveKz2Kp7pxxNC2qiga55DqQXdUTi9Q575Y3By2wYGqkzGwS5jyz3bMPUB", + "stackHeight": 2 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [1]", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 4419 of 987457 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 16849 of 999850 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 16999 + }, + "blockTime": 1746552089 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/3cQxvJN6KmWCpPgyiFoXYVdhC46xnwXg4dbswLMcw33fuS4B7qad2HBvyL4XkPPpQq1ksmdf3wK1ZvExJiAoFAnT b/tests/data/transactions/batched_tree_transactions/3cQxvJN6KmWCpPgyiFoXYVdhC46xnwXg4dbswLMcw33fuS4B7qad2HBvyL4XkPPpQq1ksmdf3wK1ZvExJiAoFAnT new file mode 100644 index 00000000..c0537aa5 --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/3cQxvJN6KmWCpPgyiFoXYVdhC46xnwXg4dbswLMcw33fuS4B7qad2HBvyL4XkPPpQq1ksmdf3wK1ZvExJiAoFAnT @@ -0,0 +1,87 @@ +{ + "slot": 203, + "transaction": [ + "AYKSrm/T3dntsDuAXoFsSKkqt9ZWzCX0BK8aD3OFeorXA9WYTYpwl69n5w441l40Tjq9tgU6V7v7HWwuvTnEGgABAAcKeiGC7CowvJIstkh88PnSr2WEDY9TdVntq2WiGjIGJiNPL8LQWvwrEthMKXEIoXESvMrPc33rl26npvlOS90m2/KuWuX0POEKz8TJiMAjOgmV1yiV9Am40XHqZVvj8yn+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E+7ModRBcroW1tER2B+2/4UUnv7QjkRykBCO/0VJ6JnUARKrAytgPzm7SNU6wm1QW2f7RiYwYdD0h1FxbwgdGrAIEAAUCQEIPAAULAAAIBwkGBQUDAgF7GhCpBxXK8hlvAAAAAAEAAAB6IYLsKjC8kiy2SHzw+dKvZYQNj1N1We2rZaIaMgYmI0BCDwAAAAAAAAAAASYAAAABAAAAAQAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEIPAAAAAAAAAAEAAAAAAAAA", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999974607181, + 29872479, + 290204160, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "postBalances": [ + 99999974597180, + 29877480, + 290204160, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [ + 9, + 8, + 1, + 2 + ], + "data": "95YB9JH8MTYtuZfgNwFoqXrHy2bLSzDQtDLniYS1J1zx53waG9LPWMU3dMDVzBVcJPw8jHkzXXjVeBYTvyZdGZnCkt31KMK3ykpsBjcUR4DwhJxLmmr12GRezUaBG3KF7GXspffNui8q6USgYY3PYFHUQ74Q96ibdacUSjuEvsp7JZWSTeyQ1UyrzvNp7fUEk6KgmE1FXt9t5x5CrT2raS5jTx9hn6is9WUM6GxaDkYjANaTnkHZrnbwiF6EVQMsxUkNxDYqUHHdZuqRvB6w8cWjMP133NtcvxgWSmosvBQXCFHhxwCn5TAQtcryWfLrPUZdVN9AQdpHB3uteCGwQMgJ3HP6Dbc9vdvtJz8sF8fLeVkpHtpXu4LjSffd8aDu7awAHuYp8mgnagA4A3N5rF", + "stackHeight": 2 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [1]", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 10047 of 983192 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 26742 of 999850 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 26892 + }, + "blockTime": 1746552078 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/3fKB6wfFJSJASKu77rPYfQ6rCfFF4s72jUi7acdTEakATZhwzSuiJhoa5DoauPuG4ty2gm8D9CECoAMVGBJEdFP8 b/tests/data/transactions/batched_tree_transactions/3fKB6wfFJSJASKu77rPYfQ6rCfFF4s72jUi7acdTEakATZhwzSuiJhoa5DoauPuG4ty2gm8D9CECoAMVGBJEdFP8 new file mode 100644 index 00000000..4291f4bf --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/3fKB6wfFJSJASKu77rPYfQ6rCfFF4s72jUi7acdTEakATZhwzSuiJhoa5DoauPuG4ty2gm8D9CECoAMVGBJEdFP8 @@ -0,0 +1,97 @@ +{ + "slot": 260, + "transaction": [ + "AYUS7/CmM1VomVtg9Eq8oKlliZuo3Of9EXsC2bwLuCXkB/j2mPn2dNvhWcvsxeo57mrRypf9HtBxK/4oMHRpaAsBAAcKeiGC7CowvJIstkh88PnSr2WEDY9TdVntq2WiGjIGJiNPL8LQWvwrEthMKXEIoXESvMrPc33rl26npvlOS90m26eeSDlsVuDVTj+5sQPFmF4L4Yw5qusdd/SNQPAGVKJYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E+7ModRBcroW1tER2B+2/4UUnv7QjkRykBCO/0VJ6JnVDE8bRY+qK4yHazzhYhNQPMdPh+FIykZsVwiGpyEC3QAIEAAUCQEIPAAUKAAAIBwkGAgUDAU8aEKkHFcryGUMAAAAAAAAAAAEAAAB6IYLsKjC8kiy2SHzw+dKvZYQNj1N1We2rZaIaMgYmI0BCDwAAAAAAAAAAAAAAAAABQEIPAAAAAAAB", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999950117132, + 30117528, + 44000000, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "postBalances": [ + 99999949107131, + 30122529, + 45000000, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 3, + "accounts": [ + 0, + 2 + ], + "data": "3Bxs4Bc3VYuGVB19", + "stackHeight": 2 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [ + 9, + 8, + 1 + ], + "data": "21HGgNSLz1yYgjRayL37XWwxDSqDsgEEKzhJdvMbV9nnMr13tjtwkoLbMueYAc31hWMwJeumSwDoJ9PvJN7JVz9V4khbWNJzvpdx8Nft7na4tpXaNXmPhfd9d5jFo7PmWFfmxaTrU9HQaQybgh7ASp2MeXTAwwokr8pTxTzwdvV8ACdmedeyX4C9kqa8K55YdeeKLk9bwjN1xRy6MyRyrpX1nUoSs2rnz4TTbKiruoMDa5CX6hnf", + "stackHeight": 2 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [1]", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 4419 of 987457 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 16849 of 999850 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 16999 + }, + "blockTime": 1746552105 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/3h6HRZpniWXqxcv7ESiSJpscfsw2aAiNbjNFKqm5N6kMwRZ7DMpq3rWcWGaLWbdf9FCVqjjKyTtEEmvWcTQPdAZi b/tests/data/transactions/batched_tree_transactions/3h6HRZpniWXqxcv7ESiSJpscfsw2aAiNbjNFKqm5N6kMwRZ7DMpq3rWcWGaLWbdf9FCVqjjKyTtEEmvWcTQPdAZi new file mode 100644 index 00000000..9e4395b6 --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/3h6HRZpniWXqxcv7ESiSJpscfsw2aAiNbjNFKqm5N6kMwRZ7DMpq3rWcWGaLWbdf9FCVqjjKyTtEEmvWcTQPdAZi @@ -0,0 +1,87 @@ +{ + "slot": 156, + "transaction": [ + "AYabZlPkhtxdvVGmKXASpzYKj984x1j3r6sMMJy56UbiSPc3b65hRy5WHioiIqrhMRkeBGL12WF8P3uFiouBdQ0BAAcKeiGC7CowvJIstkh88PnSr2WEDY9TdVntq2WiGjIGJiNPL8LQWvwrEthMKXEIoXESvMrPc33rl26npvlOS90m2/KuWuX0POEKz8TJiMAjOgmV1yiV9Am40XHqZVvj8yn+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E+7ModRBcroW1tER2B+2/4UUnv7QjkRykBCO/0VJ6JnUWz5oQb5IFsgJCrNIX8eNHOnsHaLTJvEui2vFhy2Np1gIEAAUCQEIPAAULAAAIBwkGBQUDAgF7GhCpBxXK8hlvAAAAAAEAAAB6IYLsKjC8kiy2SHzw+dKvZYQNj1N1We2rZaIaMgYmI0BCDwAAAAAAAAAAAQAAAAABAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEIPAAAAAAAAAAEAAAAAAAAA", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999993987219, + 29682441, + 290204160, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "postBalances": [ + 99999993977218, + 29687442, + 290204160, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [ + 9, + 8, + 1, + 2 + ], + "data": "95YB9JH8MTYtuZfgNwFoqXrHy7ojHEzkGpnPTSrNzRroATnru1dKgRJbSRZbgZgjs5nB8Wuqq3vMzpp6iNthJ9i5eadyqJS56WWZPXoak2m81QTQxNRvBUFPnHuYniAaPa96V5Qq34zp9D5c58npBJkgnjiYvMVLtQVyuNwFYpGE8YeP7ep12dTFXRhDW54ia2MWnzuWGkPupjUAESbjJ9u2eo3Gpu9jMZCkg3xW49qtCpTVjQcBUPKkSNVwRL28kSfACLmaqpQAVR5mXhbgUqNncbN36d62MjptSz8xg7Jr9jyaho7Mc4tepjac1e88G528B5LWqunKA7QYbsdVJ4p59pCYv6B7XRy72NawE7PfdzLkqZBsU3QPizbwtt6CKYuxJAiUPecADc5R79xMiF", + "stackHeight": 2 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [1]", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 9183 of 983192 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 25878 of 999850 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 26028 + }, + "blockTime": 1746552056 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/3iWopQbkHU3f2pV5oZL5YhXv5q4eqJRP2qxoZadQQXuaATgECKr1RFKstUcwFk6aoV6NqKVRn1bZSf21bQZjhoTA b/tests/data/transactions/batched_tree_transactions/3iWopQbkHU3f2pV5oZL5YhXv5q4eqJRP2qxoZadQQXuaATgECKr1RFKstUcwFk6aoV6NqKVRn1bZSf21bQZjhoTA new file mode 100644 index 00000000..dc220a17 --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/3iWopQbkHU3f2pV5oZL5YhXv5q4eqJRP2qxoZadQQXuaATgECKr1RFKstUcwFk6aoV6NqKVRn1bZSf21bQZjhoTA @@ -0,0 +1,97 @@ +{ + "slot": 184, + "transaction": [ + "AYfVgonmo4z8fm0wJZ6gI7sZNcLzDUhOGEO6LLtC5tys0+tH9TEArzvTWVuFKTDF4WKCMe+Z11eqfMoiJBW4IAUBAAcKeiGC7CowvJIstkh88PnSr2WEDY9TdVntq2WiGjIGJiNPL8LQWvwrEthMKXEIoXESvMrPc33rl26npvlOS90m26eeSDlsVuDVTj+5sQPFmF4L4Yw5qusdd/SNQPAGVKJYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E+7ModRBcroW1tER2B+2/4UUnv7QjkRykBCO/0VJ6JnWyT2pxuP49IUaCdY3v8eSH3eJkbsd6DnAc6LJQj1QYrwIEAAUCQEIPAAUKAAAIBwkGAgUDAU8aEKkHFcryGUMAAAAAAAAAAAEAAAB6IYLsKjC8kiy2SHzw+dKvZYQNj1N1We2rZaIaMgYmI0BCDwAAAAAAAAAAAAAAAAABQEIPAAAAAAAB", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999982757196, + 29797464, + 12000000, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "postBalances": [ + 99999981747195, + 29802465, + 13000000, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 3, + "accounts": [ + 0, + 2 + ], + "data": "3Bxs4Bc3VYuGVB19", + "stackHeight": 2 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [ + 9, + 8, + 1 + ], + "data": "21HGgNSLz1yYgjRayL37XWwxDSqDsgEEKzhJdvMbV9nnMr13tjtwkoLbMueYAc31hWMwJeumTq14VrskLit5CM49JMdRoz7gcJqoFYSk9j1tgGVt53tpCyuzpAXabdQBSkL1UDnwGfxwQ3CGjnqceQvK49BwVEh7kt1jDQWVuu1JU8zkxpKhBpXj1zyqaN5DCjsYdrHbhzHqNtTV9ixkLtZRFp6C2Z7PnH5PpuSmuqmtE1AXg6KZ", + "stackHeight": 2 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [1]", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 4419 of 987457 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 16849 of 999850 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 16999 + }, + "blockTime": 1746552069 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/3mB68BnFgvhmEwpMjc9v8s944hicnihHL1ubeJF2McMuu6occP8Es88gtQ8LLKMrbai47L7KAgwyB1yn5KbF3KGq b/tests/data/transactions/batched_tree_transactions/3mB68BnFgvhmEwpMjc9v8s944hicnihHL1ubeJF2McMuu6occP8Es88gtQ8LLKMrbai47L7KAgwyB1yn5KbF3KGq new file mode 100644 index 00000000..dc0a7526 --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/3mB68BnFgvhmEwpMjc9v8s944hicnihHL1ubeJF2McMuu6occP8Es88gtQ8LLKMrbai47L7KAgwyB1yn5KbF3KGq @@ -0,0 +1,87 @@ +{ + "slot": 271, + "transaction": [ + "AYogv5Mdp4WGHL+QnOl+f+tZXMYBYFgxRKjzCW6oZBsUcwTb7kNXMeoyIP7IjcsN3LlFQJRsjnRwODdd8+Na4g4BAAcKeiGC7CowvJIstkh88PnSr2WEDY9TdVntq2WiGjIGJiNPL8LQWvwrEthMKXEIoXESvMrPc33rl26npvlOS90m2/KuWuX0POEKz8TJiMAjOgmV1yiV9Am40XHqZVvj8yn+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E+7ModRBcroW1tER2B+2/4UUnv7QjkRykBCO/0VJ6JnXc7ZThu27cl5tmxF/F51pha3d+7DPRZTDOI+AoFjD/+QIEAAUCQEIPAAULAAAIBwkGBQUDAgF7GhCpBxXK8hlvAAAAAAEAAAB6IYLsKjC8kiy2SHzw+dKvZYQNj1N1We2rZaIaMgYmI0BCDwAAAAAAAAAAAWAAAAABAAAAAQAAAAAAAAAAAAAxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEIPAAAAAAAAAAEAAAAAAAAA", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999945027123, + 30162537, + 290204160, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "postBalances": [ + 99999945017122, + 30167538, + 290204160, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [ + 9, + 8, + 1, + 2 + ], + "data": "95YB9JH8MTYtuZfgNwFoqXrHy5nXB1YWGWxU6CiWCox4tGSQQWArQJR4oa5F8vRfmXntsdXGLGcQR9hWmdUJppgevQpqcYyGWmuwMsa9MvNXQW9W6v3VzpBUDSxMsBJpTGXCoi1g2T32Jtb2VVDN92Wijoo5J4qfFPNTsEjZrwc9Eapg5VXZPAaGkxYrZRkBs7fGLgeaD2xVcigqV1PkN9SEdopvbGzxe2SmZdXMq17wLFQXQ5UbhPFgGf9PSHSxT74reFaqmABewkRhd87vgSauzyBLzFK5ddEVmdfZFmGmpss4LikjLoRzyyqnZsd3N7DjodA6U8VaNp29Rbkiuq4SbHNS7ZpTVR9HsG8Jq7QvkTrX2Y6hjKHBdhQAYUgf7k2HAkjK1tyEsqfrmweErj", + "stackHeight": 2 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [1]", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 10101 of 983192 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 26796 of 999850 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 26946 + }, + "blockTime": 1746552110 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/3nme8fxRMhHSZT7nwLvtEDALyRyXYTDvukJpEU1jXNngVqqLG4wWsy5VQ5EgrDLMeDE5jEMuzZh2PJzv9ecgbegY b/tests/data/transactions/batched_tree_transactions/3nme8fxRMhHSZT7nwLvtEDALyRyXYTDvukJpEU1jXNngVqqLG4wWsy5VQ5EgrDLMeDE5jEMuzZh2PJzv9ecgbegY new file mode 100644 index 00000000..9c3c26a0 --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/3nme8fxRMhHSZT7nwLvtEDALyRyXYTDvukJpEU1jXNngVqqLG4wWsy5VQ5EgrDLMeDE5jEMuzZh2PJzv9ecgbegY @@ -0,0 +1,97 @@ +{ + "slot": 204, + "transaction": [ + "AYuBBwHHgl3zXrqNTudZuYS6XKQ0FXwOx4NY/xjIt685YlAfY6EX3+9vYTLeAtru1KWGrLYts0gT7RdyASmDGQkBAAcKeiGC7CowvJIstkh88PnSr2WEDY9TdVntq2WiGjIGJiNPL8LQWvwrEthMKXEIoXESvMrPc33rl26npvlOS90m26eeSDlsVuDVTj+5sQPFmF4L4Yw5qusdd/SNQPAGVKJYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E+7ModRBcroW1tER2B+2/4UUnv7QjkRykBCO/0VJ6JnW9fcZaQ/OnUoflp7y+g6ruwZHKpZbLTpg+66qVYJbZaAIEAAUCQEIPAAUKAAAIBwkGAgUDAU8aEKkHFcryGUMAAAAAAAAAAAEAAAB6IYLsKjC8kiy2SHzw+dKvZYQNj1N1We2rZaIaMgYmI0BCDwAAAAAAAAAAAAAAAAABQEIPAAAAAAAB", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999974597180, + 29877480, + 20000000, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "postBalances": [ + 99999973587179, + 29882481, + 21000000, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 3, + "accounts": [ + 0, + 2 + ], + "data": "3Bxs4Bc3VYuGVB19", + "stackHeight": 2 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [ + 9, + 8, + 1 + ], + "data": "21HGgNSLz1yYgjRayL37XWwxDSqDsgEEKzhJdvMbV9nnMr13tjtwkoLbMueYAc31hWMwJeumPu9RLrZuSq6rQG6z3JM9znMnUHdssifJKctwdNkLdJxyM2b5ECE1PmbGdhMPCG27VCaZ4EW6Vqoqz9stfosTdmQetsEzfvsJaQ5HfyUx44LQAXpwdMZCh5ERQira4zPVckeqC4Q6mAy4RoEu7mnsPJpz9HeVfjnxE1yemCscAhN7", + "stackHeight": 2 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [1]", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 3575 of 987457 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 16005 of 999850 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 16155 + }, + "blockTime": 1746552079 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/3tqYcMN33dfyjzxSQAexrn8nf8qTmk5i6fhZNUXtzL77hsiXHUKScqdbdhU1ocxp2LTSr2XLgWxC1g29eRGT9yLS b/tests/data/transactions/batched_tree_transactions/3tqYcMN33dfyjzxSQAexrn8nf8qTmk5i6fhZNUXtzL77hsiXHUKScqdbdhU1ocxp2LTSr2XLgWxC1g29eRGT9yLS new file mode 100644 index 00000000..23e6379e --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/3tqYcMN33dfyjzxSQAexrn8nf8qTmk5i6fhZNUXtzL77hsiXHUKScqdbdhU1ocxp2LTSr2XLgWxC1g29eRGT9yLS @@ -0,0 +1,87 @@ +{ + "slot": 250, + "transaction": [ + "AZC8emoWwAsdT3V3Yu4CNRxcfCjx774oZXvHPn9JAEpnJQG1NU8IP1e1fyO3+rt1r+ts/rqKR0SrS2r3iTXM9gcBAAcKeiGC7CowvJIstkh88PnSr2WEDY9TdVntq2WiGjIGJiNPL8LQWvwrEthMKXEIoXESvMrPc33rl26npvlOS90m2/KuWuX0POEKz8TJiMAjOgmV1yiV9Am40XHqZVvj8yn+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E+7ModRBcroW1tER2B+2/4UUnv7QjkRykBCO/0VJ6JnUUE7cVneDOZBMnTfyC4WwwtJFC9oOZ7y0MVnSsBUXXVAIEAAUCQEIPAAULAAAIBwkGBQUDAgF7GhCpBxXK8hlvAAAAAAEAAAB6IYLsKjC8kiy2SHzw+dKvZYQNj1N1We2rZaIaMgYmI0BCDwAAAAAAAAAAAU4AAAABAAAAAQAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEIPAAAAAAAAAAEAAAAAAAAA", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999954207141, + 30072519, + 290204160, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "postBalances": [ + 99999954197140, + 30077520, + 290204160, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [ + 9, + 8, + 1, + 2 + ], + "data": "95YB9JH8MTYtuZfgNwFoqXrHy4cF8iDkaGemdCBX57zTJvqaeKjo1LVA4Bn8yBjBWDLnMr7ihMjBAvCUbSddDzyD1PbXZq7f88jjh86ReMVEUANH1SuPNxHBaPFqR5QrHgcCDvdnpMs86dwBGuzmx8xtMRLzoLQfCBo35kXctMgLb2vQAhEb8Pryg86GihKoq15NJAEv7XnpyyD7kE7v3aDoMByjiKuBi6g58FbVvBUBHpdjtLCZukuWKbLQ763k7dDZKtFLgJpL6aVWTSy6HKm1nqGX3U83Bof6gcX3ajQVAPVViUizNd2Y71646WBZjGeRZ6hvBJjn7RhhQXPZSGPcuZB8s1sih7UX89HDueXgaZHDbGg8AaqcZVU8aLrZn6qJji8hMr3cTf5wUoCZj5", + "stackHeight": 2 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [1]", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 10125 of 983192 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 26820 of 999850 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 26970 + }, + "blockTime": 1746552100 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/3vrXwi9rnZCyHa61jiCn5saGc3itWDHJtWpG1RW5XAtYgN1deYQoni9F81g6fQG2mQf9YeNnurQxZguAK7NpXCrY b/tests/data/transactions/batched_tree_transactions/3vrXwi9rnZCyHa61jiCn5saGc3itWDHJtWpG1RW5XAtYgN1deYQoni9F81g6fQG2mQf9YeNnurQxZguAK7NpXCrY new file mode 100644 index 00000000..27cfd366 --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/3vrXwi9rnZCyHa61jiCn5saGc3itWDHJtWpG1RW5XAtYgN1deYQoni9F81g6fQG2mQf9YeNnurQxZguAK7NpXCrY @@ -0,0 +1,97 @@ +{ + "slot": 179, + "transaction": [ + "AZJ5xSYOcki6JwbkPs+xbvmQTMghgsTMR/Rr+uDypH227JJh+2xO9P3HwcYY0ElsnVNMWfiWnsGoDC2n1/4ueAUBAAcKeiGC7CowvJIstkh88PnSr2WEDY9TdVntq2WiGjIGJiNPL8LQWvwrEthMKXEIoXESvMrPc33rl26npvlOS90m26eeSDlsVuDVTj+5sQPFmF4L4Yw5qusdd/SNQPAGVKJYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E+7ModRBcroW1tER2B+2/4UUnv7QjkRykBCO/0VJ6JnVwAiX6GiX0nNUNXfSukn+IAOShNrFmSogcoJq1/MI08AIEAAUCQEIPAAUKAAAIBwkGAgUDAU8aEKkHFcryGUMAAAAAAAAAAAEAAAB6IYLsKjC8kiy2SHzw+dKvZYQNj1N1We2rZaIaMgYmI0BCDwAAAAAAAAAAAAAAAAABQEIPAAAAAAAB", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999984797200, + 29777460, + 10000000, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "postBalances": [ + 99999983787199, + 29782461, + 11000000, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 3, + "accounts": [ + 0, + 2 + ], + "data": "3Bxs4Bc3VYuGVB19", + "stackHeight": 2 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [ + 9, + 8, + 1 + ], + "data": "21HGgNSLz1yYgjRayL37XWwxDSqDsgEEKzhJdvMbV9nnMr13tjtwkoLbMueYAc31hWMwJeumauqoM8i4XC324V38wUwZv43gAxAH9ymTzkBMGFo2tU4sV5echQPxs4tT53U7A1G7Scp8rs5ggsm6jeAkrhbjSkpkjFTkxGg9jMqDzodCHuWgug62CDPKqauCixXLMpj1jj2CtV73JoEZNDvNr7ygXCyb5WfXmyq9x3ti5C12mBq9", + "stackHeight": 2 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [1]", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 3575 of 987457 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 16005 of 999850 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 16155 + }, + "blockTime": 1746552067 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/3wopCfeCCPebgC78Ls59DaD5t5sxH8kFus1EDPNYj2QGMUPBGmJC1GXCRngx5wXDMWxDr1j7M3q12mHSBW3wEZac b/tests/data/transactions/batched_tree_transactions/3wopCfeCCPebgC78Ls59DaD5t5sxH8kFus1EDPNYj2QGMUPBGmJC1GXCRngx5wXDMWxDr1j7M3q12mHSBW3wEZac new file mode 100644 index 00000000..226ba545 --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/3wopCfeCCPebgC78Ls59DaD5t5sxH8kFus1EDPNYj2QGMUPBGmJC1GXCRngx5wXDMWxDr1j7M3q12mHSBW3wEZac @@ -0,0 +1,87 @@ +{ + "slot": 168, + "transaction": [ + "AZNMLtA/hBYQPF/YMJl75286LgyNvTbKdWoZPstHmCW0O/mnNXXCWER43mi8YLo6ZowDVa8aLfF80bDQOow3fAUBAAcKeiGC7CowvJIstkh88PnSr2WEDY9TdVntq2WiGjIGJiNPL8LQWvwrEthMKXEIoXESvMrPc33rl26npvlOS90m2/KuWuX0POEKz8TJiMAjOgmV1yiV9Am40XHqZVvj8yn+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E+7ModRBcroW1tER2B+2/4UUnv7QjkRykBCO/0VJ6JnUAXepx5IBrDvpnwMCuMlu8WBkA3Am68O8cZ2RL+LKh1QIEAAUCQEIPAAULAAAIBwkGBQUDAgF7GhCpBxXK8hlvAAAAAAEAAAB6IYLsKjC8kiy2SHzw+dKvZYQNj1N1We2rZaIaMgYmI0BCDwAAAAAAAAAAAQoAAAABAAAAAQAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEIPAAAAAAAAAAEAAAAAAAAA", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999988887209, + 29732451, + 290204160, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "postBalances": [ + 99999988877208, + 29737452, + 290204160, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [ + 9, + 8, + 1, + 2 + ], + "data": "95YB9JH8MTYtuZfgNwFoqXrHy88KKimoekYM6kWkL2dhLeYJp8N8iJBFADGy9wHTjCVhs9amhy87pgRhjKR3ukS8z1YgqxHpENu5YXLBrLULzU5kNjK6VdpSj88WFgYU3sfAeRxbHT9mhkV5cQSnFRwDVMCKJyebkPoCqj9K7Lvmqi3LagWhRpgBFX8VdAbqiYZirBZjSuptPPnFC2X1T4onp2MLDYu8ZNLjwtYT8D2ZGCqyg3QaytUifwDw9bqKxoTipmMDPmFUt94CNTbF8djCndkN5RXzGEVrKpUgH6Dj1AWbe7U2D4TCL1xoV9AvCZjvfYkWkfRChqTb7zXFronwLjXQ2UbSFji8j2odkFdU6ANBnbF81Rg7z5PFxbsaDxdraCQ2ahjjVm7vTBKz5d", + "stackHeight": 2 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [1]", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 10023 of 983192 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 26718 of 999850 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 26868 + }, + "blockTime": 1746552062 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/3zXKv6JKMpRFACYncCLfkQoWrXuZzqtWdfz7tzjzPLes3JAnyX3kUgbse3Rg6CEL6RctaZpaH3foGwu5dLDhrGea b/tests/data/transactions/batched_tree_transactions/3zXKv6JKMpRFACYncCLfkQoWrXuZzqtWdfz7tzjzPLes3JAnyX3kUgbse3Rg6CEL6RctaZpaH3foGwu5dLDhrGea new file mode 100644 index 00000000..37f84cc6 --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/3zXKv6JKMpRFACYncCLfkQoWrXuZzqtWdfz7tzjzPLes3JAnyX3kUgbse3Rg6CEL6RctaZpaH3foGwu5dLDhrGea @@ -0,0 +1,97 @@ +{ + "slot": 258, + "transaction": [ + "AZWjuFRu+CZpEN7Lh62vLkwr4UCs/if9y7rJEzHXwty+mWgKZGwXY/d/cxnjk6je6zSYie4jh6U8qItxwobyagcBAAcKeiGC7CowvJIstkh88PnSr2WEDY9TdVntq2WiGjIGJiNPL8LQWvwrEthMKXEIoXESvMrPc33rl26npvlOS90m26eeSDlsVuDVTj+5sQPFmF4L4Yw5qusdd/SNQPAGVKJYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E+7ModRBcroW1tER2B+2/4UUnv7QjkRykBCO/0VJ6JnVWd9/oDz7U6rcPIpX5Xb/ku8wPnEM2CkXD9HGS+yNE3AIEAAUCQEIPAAUKAAAIBwkGAgUDAU8aEKkHFcryGUMAAAAAAAAAAAEAAAB6IYLsKjC8kiy2SHzw+dKvZYQNj1N1We2rZaIaMgYmI0BCDwAAAAAAAAAAAAAAAAABQEIPAAAAAAAB", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999951137134, + 30107526, + 43000000, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "postBalances": [ + 99999950127133, + 30112527, + 44000000, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 3, + "accounts": [ + 0, + 2 + ], + "data": "3Bxs4Bc3VYuGVB19", + "stackHeight": 2 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [ + 9, + 8, + 1 + ], + "data": "21HGgNSLz1yYgjRayL37XWwxDSqDsgEEKzhJdvMbV9nnMr13tjtwkoLbMueYAc31hWMwJeumW9tbEQ87uNn3ndnXLv64sqv1HtQUB44qq8U2ZHij4JaUgNREKAkqs2btVvn63jdDCSLq2o7mZ75q9ZYC4sC7rRS26LcsJNvV2tu1FHVCYJJ7XL1GPyhGfz6Uuf9iedEYbej6bHCJvyW3T4CJHq3VNpjNMRErz1daaWtUvD5ecw3m", + "stackHeight": 2 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [1]", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 4419 of 987457 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 16849 of 999850 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 16999 + }, + "blockTime": 1746552104 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/45K7KVx1Q599EoFh1HD6QZ3yAGvNTDSM9iJ9AW1haEseYXokFrm3xrYonfV5x92BkzjGK4WPcU7TCVHTieMjwBwK b/tests/data/transactions/batched_tree_transactions/45K7KVx1Q599EoFh1HD6QZ3yAGvNTDSM9iJ9AW1haEseYXokFrm3xrYonfV5x92BkzjGK4WPcU7TCVHTieMjwBwK new file mode 100644 index 00000000..5ea3bddd --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/45K7KVx1Q599EoFh1HD6QZ3yAGvNTDSM9iJ9AW1haEseYXokFrm3xrYonfV5x92BkzjGK4WPcU7TCVHTieMjwBwK @@ -0,0 +1,97 @@ +{ + "slot": 186, + "transaction": [ + "AZnFCpX/qRuAypFb8JTIMrPVF75OtDb/CPkDiG00FZo+8dXOeXKak7KhFiyHTGnok3XMm5wogTE3DQCWEQdvAQYBAAcKeiGC7CowvJIstkh88PnSr2WEDY9TdVntq2WiGjIGJiNPL8LQWvwrEthMKXEIoXESvMrPc33rl26npvlOS90m26eeSDlsVuDVTj+5sQPFmF4L4Yw5qusdd/SNQPAGVKJYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E+7ModRBcroW1tER2B+2/4UUnv7QjkRykBCO/0VJ6JnWoudQnLaVm2grh19J8/esIyLSNR2Pbu64DSIUL6brYCwIEAAUCQEIPAAUKAAAIBwkGAgUDAU8aEKkHFcryGUMAAAAAAAAAAAEAAAB6IYLsKjC8kiy2SHzw+dKvZYQNj1N1We2rZaIaMgYmI0BCDwAAAAAAAAAAAAAAAAABQEIPAAAAAAAB", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999981737194, + 29807466, + 13000000, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "postBalances": [ + 99999980727193, + 29812467, + 14000000, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 3, + "accounts": [ + 0, + 2 + ], + "data": "3Bxs4Bc3VYuGVB19", + "stackHeight": 2 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [ + 9, + 8, + 1 + ], + "data": "21HGgNSLz1yYgjRayL37XWwxDSqDsgEEKzhJdvMbV9nnMr13tjtwkoLbMueYAc31hWMwJeumXhGT1Th2ovqAzHzu3TgQGr8CiVeTazZGpzyHohGooSsTjwqRgwrrxxPF4PaG4Ljg4YhSAZsHuGUSgg2BpwrBU8oD3fcXSrVaHU1xwh8kZn8mWk8WhrWYPLDKM2kA123ourxio2hTVvpjJJg3o34hbx6P56GyetwStr9mmZijZky5", + "stackHeight": 2 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [1]", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 4419 of 987457 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 16849 of 999850 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 16999 + }, + "blockTime": 1746552070 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/46rsm8mRKHcdzDBgMqjSD5BP1j3N7REdEDo2H6xwBdRQ9uWpvPxNwrze3YjcjSZ3nK2uSgFaZFB5sVmF9PbuQXvv b/tests/data/transactions/batched_tree_transactions/46rsm8mRKHcdzDBgMqjSD5BP1j3N7REdEDo2H6xwBdRQ9uWpvPxNwrze3YjcjSZ3nK2uSgFaZFB5sVmF9PbuQXvv new file mode 100644 index 00000000..fcd77742 --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/46rsm8mRKHcdzDBgMqjSD5BP1j3N7REdEDo2H6xwBdRQ9uWpvPxNwrze3YjcjSZ3nK2uSgFaZFB5sVmF9PbuQXvv @@ -0,0 +1,97 @@ +{ + "slot": 270, + "transaction": [ + "AZsat60I0n2/Fv16VBz2lNRfYnscKtjVUpTDgAUZnWBDVwAqAMrfNBuutQKHq2npCmWa9dJs7srXRWdY8t7degcBAAcKeiGC7CowvJIstkh88PnSr2WEDY9TdVntq2WiGjIGJiNPL8LQWvwrEthMKXEIoXESvMrPc33rl26npvlOS90m26eeSDlsVuDVTj+5sQPFmF4L4Yw5qusdd/SNQPAGVKJYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E+7ModRBcroW1tER2B+2/4UUnv7QjkRykBCO/0VJ6JnXyRIoEK2KZP2M3Fojyr7qGW48ORPb+6zTkJEfxhR+y8wIEAAUCQEIPAAUKAAAIBwkGAgUDAU8aEKkHFcryGUMAAAAAAAAAAAEAAAB6IYLsKjC8kiy2SHzw+dKvZYQNj1N1We2rZaIaMgYmI0BCDwAAAAAAAAAAAAAAAAABQEIPAAAAAAAB", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999946037124, + 30157536, + 48000000, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "postBalances": [ + 99999945027123, + 30162537, + 49000000, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 3, + "accounts": [ + 0, + 2 + ], + "data": "3Bxs4Bc3VYuGVB19", + "stackHeight": 2 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [ + 9, + 8, + 1 + ], + "data": "21HGgNSLz1yYgjRayL37XWwxDSqDsgEEKzhJdvMbV9nnMr13tjtwkoLbMueYAc31hWMwJeumbZ2kUqQbDLrB3sfUWr3h8kYjk3D7ukA73jEQDxPCEVwbyRk17E5yH5RJv8ZwXwUkc7fjm5htNk9Dhxuic5Ahfj5KotGvXpk14NAwXcnfQtpPxtGymGR237e5Q6mJQcx9dpbFt2ZowKTQdgJxGR3sLq2ipW3DMirmvp82BaCUAMzF", + "stackHeight": 2 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [1]", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 4419 of 987457 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 16849 of 999850 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 16999 + }, + "blockTime": 1746552109 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/4AutMciq37aJtRQMGnqLxFxPEcj26hgENrx9X6RrayKWery8xcAm2G5Q5uhXG3mXpy8HYjWg9kU9mD6d5w4U4qb6 b/tests/data/transactions/batched_tree_transactions/4AutMciq37aJtRQMGnqLxFxPEcj26hgENrx9X6RrayKWery8xcAm2G5Q5uhXG3mXpy8HYjWg9kU9mD6d5w4U4qb6 new file mode 100644 index 00000000..b8a8549f --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/4AutMciq37aJtRQMGnqLxFxPEcj26hgENrx9X6RrayKWery8xcAm2G5Q5uhXG3mXpy8HYjWg9kU9mD6d5w4U4qb6 @@ -0,0 +1,84 @@ +{ + "slot": 313, + "transaction": [ + "AZ6ZO+194trjSaKV3p3ZQnN/pWfPwngv+XhWfstpAUz3yU3OQag2qE21W2C2xtDNLD2Rcr/1IzlpW0o+uWhbwAEBAAUJ7DDUiI4IcYFkGbvXWaOx6/U8oHfKVZ1qGOt5OIzPzJlMm20YZ6Hmhtq+9LocAayVnPPWJjXrHQ48WcmoYfd2+U8vwtBa/CsS2EwpcQihcRK8ys9zfeuXbqem+U5L3Sbb8q5a5fQ84QrPxMmIwCM6CZXXKJX0CbjRceplW+PzKf4FDSsTeVE2hc8C8rX9UpG9lZsrBgqlJepbNIE7Hbm3bgksNuwi9ReDAP20Sqpq/8/wpG4cvGQcDj7QnaE7nvUIC7wPwLtHyi90xBEulKsTz6PGNOXcF+rLA80aI81+eHwQpl591jkE+Dg60Dze4Hi5FNhzGIA7FTWAcNeS4Fz957/QmmoHZdEI20ACv+9MyGVTFGij2iz8yvlzRZ4iyBL0VR2zhxV616wSJAQkXQpMrDmDoU7ySIKzpGt3t+Zb5XsBBAgBAAcIBQYDAq0B3cID2CU+3JP/oAAAABIyLef6T/L7lj/QJL0qXQVkXVZinZ3NXU/rjioxaXIoGNXpcZhw2My2C4Q7tTjHM+k/fROCItFhB4zQY6TkPJybQ1FAF6zs5hIWkeSxSpASdsxGrbpAJvEWtfgRQm14+BpX2LEr9DCONT6rVcfcMIIYzU6KTQshWBUhhlcXkiTVIDt5UBHlkMiGdcqDq+B8ETcMQwNlgHRE2/fnwaJB9FA=", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999995063200, + 2735280, + 30177540, + 290204160, + 1141440, + 1141440, + 1141440, + 0, + 1614720 + ], + "postBalances": [ + 99999995058200, + 2735280, + 30177540, + 290204160, + 1141440, + 1141440, + 1141440, + 0, + 1614720 + ], + "innerInstructions": [ + { + "index": 0, + "instructions": [ + { + "programIdIndex": 5, + "accounts": [ + 7, + 8, + 6, + 3, + 2 + ], + "data": "ZZpa4B1Y3ym6r8941cUFaLTeuC3sLEo7yxWLWAUuLk3nXf1BnJCnrHts7WTEBRNSbGcgpK1pDrc49VM4HXwvKK2ufs5hvV77qjyARgGdnU4ga8YWyHXey5u6T2qFr2QSGNs4hvw3j3oPs7UVAtDk4nctFFtj5MFjBSWhQB1YC8uhSLpbi6AUqJMrv11WhHjS5VMvsBHiJSAVk6LNV56VpC5sfAb5f1f7e58ExUM5Pn7", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [], + "data": "V55KweBRnUHGkEaUisCdgyHtJHJb7ZCcjbWeUQUySHhE944JhfG7Jg5N4osFgiZ5Zg12RPNjD53cwVGpjfgGFwziUAtWP9uivYjd7LqpqHv1HJyivB3hJs9WD3QjjQhMgRUA9g3ou7o12aMaR58FDCpGPePkJUrLMvskMneJZm5xhNcz5nkjT6UsDncVP8ToVpnvxb9vwM6i", + "stackHeight": 3 + } + ] + } + ], + "logMessages": [ + "Program Lighton6oQpVkeewmo2mcPTQQp7kYHr4fWpAgJyEmDX invoke [1]", + "Program log: Instruction: BatchAppend", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: BatchAppend", + "Program log: Incrementing next full batch index", + "Program noopb9bkMVfRPU8AsbpTUg8AQkHtKwMYZiFUjNRtMmV invoke [3]", + "Program noopb9bkMVfRPU8AsbpTUg8AQkHtKwMYZiFUjNRtMmV consumed 38 of 79707 compute units", + "Program noopb9bkMVfRPU8AsbpTUg8AQkHtKwMYZiFUjNRtMmV success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 103310 of 182790 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program Lighton6oQpVkeewmo2mcPTQQp7kYHr4fWpAgJyEmDX consumed 122499 of 200000 compute units", + "Program Lighton6oQpVkeewmo2mcPTQQp7kYHr4fWpAgJyEmDX success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 122499 + }, + "blockTime": 1746552130 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/4B5UtDZsgXNuzPCMJGkbnLyb3QgR9aUCETuFi4813LgQYEE6Vgd3pRrWkHq1q8hmDAscsw5pNwM8tNfyfKU9g2q9 b/tests/data/transactions/batched_tree_transactions/4B5UtDZsgXNuzPCMJGkbnLyb3QgR9aUCETuFi4813LgQYEE6Vgd3pRrWkHq1q8hmDAscsw5pNwM8tNfyfKU9g2q9 new file mode 100644 index 00000000..10954360 --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/4B5UtDZsgXNuzPCMJGkbnLyb3QgR9aUCETuFi4813LgQYEE6Vgd3pRrWkHq1q8hmDAscsw5pNwM8tNfyfKU9g2q9 @@ -0,0 +1,83 @@ +{ + "slot": 318, + "transaction": [ + "AZ69wa8OR5NJY2dwGWM+rXF1jfcfEoHMiPMZmumi+42zUrjy2QPVqC7/kRkOzsT5jZsZ3YWzEuLQmhvK5SoV9AQBAAUJ7DDUiI4IcYFkGbvXWaOx6/U8oHfKVZ1qGOt5OIzPzJlMm20YZ6Hmhtq+9LocAayVnPPWJjXrHQ48WcmoYfd2+U8vwtBa/CsS2EwpcQihcRK8ys9zfeuXbqem+U5L3Sbb8q5a5fQ84QrPxMmIwCM6CZXXKJX0CbjRceplW+PzKf4FDSsTeVE2hc8C8rX9UpG9lZsrBgqlJepbNIE7Hbm3bgksNuwi9ReDAP20Sqpq/8/wpG4cvGQcDj7QnaE7nvUIC7wPwLtHyi90xBEulKsTz6PGNOXcF+rLA80aI81+eHwQpl591jkE+Dg60Dze4Hi5FNhzGIA7FTWAcNeS4Fz957/QmmoHZdEI20ACv+9MyGVTFGij2iz8yvlzRZ4iyBL09MTC0MkK0tPe3ouTSCMXrusYyKFAKkKwEbGtCOLTnRUBBAgBAAcIBQYDAq0B3cID2CU+3JP/oAAAAC6H5JkUbZBUFeyIcuvSa/IOpRpVp6zovWNCfi1Lu/xCDFzp0vvmOsPe4EQjC9vbLXtE1Sgb/ek2lNttPXAOXpOAbYH/ktD+26rA9Dpuk5ghq8CRvskeuu5Kuk21mESfmC7Ftj95A4cUvnEZq4AsQmhdmXdQzQYR7BqoCa0aWR3zCmakeEWwY493bk+DawpDXn0vgH5cLR5KPtgLqRa9wsI=", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999995058200, + 2735280, + 30177540, + 290204160, + 1141440, + 1141440, + 1141440, + 0, + 1614720 + ], + "postBalances": [ + 99999995053200, + 2735280, + 30177540, + 290204160, + 1141440, + 1141440, + 1141440, + 0, + 1614720 + ], + "innerInstructions": [ + { + "index": 0, + "instructions": [ + { + "programIdIndex": 5, + "accounts": [ + 7, + 8, + 6, + 3, + 2 + ], + "data": "ZZpa4B1Y3ym6r8942URnTg7yABmjzwVctVeRQ9qcWt7upfkf7HCdb4nyAspR8uEP9jzh5kjR7Qw7hA8ztnMCYvbRGwmfTu6QPiSwBG8LS96dh4a9qsX4JSb6nwBvcMhCn9s9iZTyJ2k7co7qJCWHx2Lwj7d5umdrAugppzbHG9iXZC4bAX2szjHtd11RrFwLoKsBb2nZ6K4dHQRTWypkC7mJXHM9TvMxr6XqvfwVzED", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [], + "data": "V55KweBRnUHGkEaUisCdgyHtJHJb7ZCcjbWeUQUySHhE99UpZCoaW1oHKRKuxAKgcjBiw282sEx1uc2xtWF1gmNc85Lw6VctUmhKm8VjsNCbSWoFAJUhdonWUn2Vje1WhNNCdrMZMDCgWSFUSqLbvFkbdyqx2QGZ2HBaGfxaXC4cUP8CuuBnUEktZGuGTRrHbpyeyCNLbauG", + "stackHeight": 3 + } + ] + } + ], + "logMessages": [ + "Program Lighton6oQpVkeewmo2mcPTQQp7kYHr4fWpAgJyEmDX invoke [1]", + "Program log: Instruction: BatchAppend", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: BatchAppend", + "Program noopb9bkMVfRPU8AsbpTUg8AQkHtKwMYZiFUjNRtMmV invoke [3]", + "Program noopb9bkMVfRPU8AsbpTUg8AQkHtKwMYZiFUjNRtMmV consumed 38 of 79855 compute units", + "Program noopb9bkMVfRPU8AsbpTUg8AQkHtKwMYZiFUjNRtMmV success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 103162 of 182790 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program Lighton6oQpVkeewmo2mcPTQQp7kYHr4fWpAgJyEmDX consumed 122351 of 200000 compute units", + "Program Lighton6oQpVkeewmo2mcPTQQp7kYHr4fWpAgJyEmDX success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 122351 + }, + "blockTime": 1746552133 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/4D2kGBaNLmCSX1VnArKK4y2vHNKC26zzjJXwCaAgikrys5MH9nafcRHs96oNjCnd914kruT8pcu8uQqsnaQHqoNo b/tests/data/transactions/batched_tree_transactions/4D2kGBaNLmCSX1VnArKK4y2vHNKC26zzjJXwCaAgikrys5MH9nafcRHs96oNjCnd914kruT8pcu8uQqsnaQHqoNo new file mode 100644 index 00000000..42826dda --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/4D2kGBaNLmCSX1VnArKK4y2vHNKC26zzjJXwCaAgikrys5MH9nafcRHs96oNjCnd914kruT8pcu8uQqsnaQHqoNo @@ -0,0 +1,80 @@ +{ + "slot": 336, + "transaction": [ + "AaBs4FZe4qwod/kDEzmUYRo8SojlJwDN7A6z9NoB6Vx1A2Aa6roJ1LOqeUbFRYp7+o6IuFDEz72P+jGDXO22MAgBAAUI7DDUiI4IcYFkGbvXWaOx6/U8oHfKVZ1qGOt5OIzPzJlMm20YZ6Hmhtq+9LocAayVnPPWJjXrHQ48WcmoYfd2+fKuWuX0POEKz8TJiMAjOgmV1yiV9Am40XHqZVvj8yn+BQ0rE3lRNoXPAvK1/VKRvZWbKwYKpSXqWzSBOx25t24JLDbsIvUXgwD9tEqqav/P8KRuHLxkHA4+0J2hO571CAu8D8C7R8ovdMQRLpSrE8+jxjTl3BfqywPNGiPNfnh8EKZefdY5BPg4OtA83uB4uRTYcxiAOxU1gHDXkuBc/ee/0JpqB2XRCNtAAr/vTMhlUxRoo9os/Mr5c0WeIsgS9DpIP5bWs8pFRNq74ycmVTdyCsnti1UnY9v69rNUDP2NAQMHAQAGBwQFAq0Bhp7S8Pwj/ff/oAAAABvpS4PTjLMJRVIqVMTPzp4geAec4BOFxNHCJX3JGdKppqOQwBxFoSyJs0I6wo8DInRvksVFW89ULVrXFgORH6kTd3V+A6EJext5o9SCoNg254TszvSnSB4Y9bhIyzaDXhzN2AvpO1Gr2ZlrLfOUIZ8ICfuM1AhkArEwqDDKLjCpJed/JpGCzpER6mGJle2D8Gs+hY798CoavA40XX6J6Oc=", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999995023200, + 2735280, + 290204160, + 1141440, + 1141440, + 1141440, + 0, + 1614720 + ], + "postBalances": [ + 99999995018200, + 2735280, + 290204160, + 1141440, + 1141440, + 1141440, + 0, + 1614720 + ], + "innerInstructions": [ + { + "index": 0, + "instructions": [ + { + "programIdIndex": 4, + "accounts": [ + 6, + 7, + 5, + 2 + ], + "data": "LmdQuBbApKVFkG74xeRnvub55u73B4y1ZCTFzdZ1drwqVVd74zYahbkuBBZcPdugPB9kKiRosogTPQi7Z28a8MyFpP1YMKQwwWFtsBgZe9pmKvhoNPpfaDwerWjcGWW8EX5Gj4KKGJau6pumwK4zxxWU5cpqcgurS4zocpZD65XJFtNu4hRJ9GcFGKvdNrGtWn2WEkfDMyz1SSRt3J1VdEXuxTHheKjFpw4wTfTSgxn", + "stackHeight": 2 + }, + { + "programIdIndex": 5, + "accounts": [], + "data": "33RnrV5PeYSegsuxuyuhDrnnW8smoxASrgH5K6URdqG8Yoy9KvdLNguRuvubXRR8ruTN45F6tAeyatDFXRS7ecB7mJeFXJUdfB9xz2dgNE3ZxFo7dZGwAKWLKLWhrQvSPBz4ghFXUCki1j9Wb4e7QZdCKoafCZjwm", + "stackHeight": 3 + } + ] + } + ], + "logMessages": [ + "Program Lighton6oQpVkeewmo2mcPTQQp7kYHr4fWpAgJyEmDX invoke [1]", + "Program log: Instruction: BatchNullify", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: BatchNullify", + "Program noopb9bkMVfRPU8AsbpTUg8AQkHtKwMYZiFUjNRtMmV invoke [3]", + "Program noopb9bkMVfRPU8AsbpTUg8AQkHtKwMYZiFUjNRtMmV consumed 38 of 82866 compute units", + "Program noopb9bkMVfRPU8AsbpTUg8AQkHtKwMYZiFUjNRtMmV success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 101436 of 184105 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program Lighton6oQpVkeewmo2mcPTQQp7kYHr4fWpAgJyEmDX consumed 119254 of 200000 compute units", + "Program Lighton6oQpVkeewmo2mcPTQQp7kYHr4fWpAgJyEmDX success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 119254 + }, + "blockTime": 1746552142 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/4Gf4C8Mnih6x7MHH8s2Xp5tgPUEeNqA7qLvrGDsQ9npe5Z71J7XgpZ9uUeTtpGmK1utT4aXWipcwa5HZs1Du1JuM b/tests/data/transactions/batched_tree_transactions/4Gf4C8Mnih6x7MHH8s2Xp5tgPUEeNqA7qLvrGDsQ9npe5Z71J7XgpZ9uUeTtpGmK1utT4aXWipcwa5HZs1Du1JuM new file mode 100644 index 00000000..b29208c5 --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/4Gf4C8Mnih6x7MHH8s2Xp5tgPUEeNqA7qLvrGDsQ9npe5Z71J7XgpZ9uUeTtpGmK1utT4aXWipcwa5HZs1Du1JuM @@ -0,0 +1,87 @@ +{ + "slot": 185, + "transaction": [ + "AaONX5axrPQ+hVKVyKmCnkrKjDA3eHxjA1dMWcxHgv+rsP29d79BSGoyjv3aqeWHr6Prc7xQa1JRBwZ4MNnV2wABAAcKeiGC7CowvJIstkh88PnSr2WEDY9TdVntq2WiGjIGJiNPL8LQWvwrEthMKXEIoXESvMrPc33rl26npvlOS90m2/KuWuX0POEKz8TJiMAjOgmV1yiV9Am40XHqZVvj8yn+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E+7ModRBcroW1tER2B+2/4UUnv7QjkRykBCO/0VJ6JnUmRBrljl76mBsqQGsLBmEErBVzmTcwxb/TaYLHJbr01QIEAAUCQEIPAAULAAAIBwkGBQUDAgF7GhCpBxXK8hlvAAAAAAEAAAB6IYLsKjC8kiy2SHzw+dKvZYQNj1N1We2rZaIaMgYmI0BCDwAAAAAAAAAAARgAAAABAAAAAQAAAAAAAAAAAAANAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEIPAAAAAAAAAAEAAAAAAAAA", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999981747195, + 29802465, + 290204160, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "postBalances": [ + 99999981737194, + 29807466, + 290204160, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [ + 9, + 8, + 1, + 2 + ], + "data": "95YB9JH8MTYtuZfgNwFoqXrHy8bS72keFvGDFueBxJfNAdZnVeKPVbaxJmbpbiXyijq6eg68BSqqvNppPxaej3a4NUv7qxogTpYZGgTKAW2xkM4Ukp27R4mF3o3e9ivtGj7xYkHG39fyyGoGGPkNoDHR3LjcMB9kDj3XDxdGe58gqvEf1W15cKkCLmezcUDrFC9bQv5Qtoog1c5EdaRc4cVSbuT1U3JL64YXttx7pZB7bjxoRCfxgYZba3WdZG42vBDUuR7L4p51f5DiyTzHpnPrc6mmEPkEgUDSX1T6G9sYTHeHDDBJoUW9Qir2yPVcYigY1zLpoPjVXaHExcG6ectruxb2ZMoGWzVLa2dHeiVahd2TuSAjXL1GXz9BrZK1DDasNj3S6d8XEwgHjrNhro", + "stackHeight": 2 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [1]", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 10023 of 983192 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 26718 of 999850 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 26868 + }, + "blockTime": 1746552070 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/4HYxoMs3weRQ6BSe79x1RYkzWukrZqSXAEU1DaJNARp2XYx1wrxDFteS3RoC54b6hHnkTrSnt5mhXC5aWK3PQBFy b/tests/data/transactions/batched_tree_transactions/4HYxoMs3weRQ6BSe79x1RYkzWukrZqSXAEU1DaJNARp2XYx1wrxDFteS3RoC54b6hHnkTrSnt5mhXC5aWK3PQBFy new file mode 100644 index 00000000..a9609151 --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/4HYxoMs3weRQ6BSe79x1RYkzWukrZqSXAEU1DaJNARp2XYx1wrxDFteS3RoC54b6hHnkTrSnt5mhXC5aWK3PQBFy @@ -0,0 +1,97 @@ +{ + "slot": 198, + "transaction": [ + "AaRS8ktHB3g7o4xY/qFpIM3gIkveIjEYugsnmzQ1JjfgR7BnZ/sLlfr+RyJBX1i206aMvOnnlvbP1fZwc33hMQQBAAcKeiGC7CowvJIstkh88PnSr2WEDY9TdVntq2WiGjIGJiNPL8LQWvwrEthMKXEIoXESvMrPc33rl26npvlOS90m26eeSDlsVuDVTj+5sQPFmF4L4Yw5qusdd/SNQPAGVKJYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E+7ModRBcroW1tER2B+2/4UUnv7QjkRykBCO/0VJ6JnXQIDjePbUjXNdrF5w1FFM+8lbcGQlAxIfrVpNTbbcHYAIEAAUCQEIPAAUKAAAIBwkGAgUDAU8aEKkHFcryGUMAAAAAAAAAAAEAAAB6IYLsKjC8kiy2SHzw+dKvZYQNj1N1We2rZaIaMgYmI0BCDwAAAAAAAAAAAAAAAAABQEIPAAAAAAAB", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999976637184, + 29857476, + 18000000, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "postBalances": [ + 99999975627183, + 29862477, + 19000000, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 3, + "accounts": [ + 0, + 2 + ], + "data": "3Bxs4Bc3VYuGVB19", + "stackHeight": 2 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [ + 9, + 8, + 1 + ], + "data": "21HGgNSLz1yYgjRayL37XWwxDSqDsgEEKzhJdvMbV9nnMr13tjtwkoLbMueYAc31hWMwJeumTpGC4nijB4HRfkGCuScssubA9M17MYDi4ySzJAMhRxZWHy248Y87F6MXY368RMMk6BkAuP37g5Hj1MkA5Va5egiegaoEKamrALSweSsUcRTiKedQGyfVnwio1MYTcijENtDbynnhsB8yU4GbgtV5JVMYA95aWaBudN9qFJqVjGFh", + "stackHeight": 2 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [1]", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 4419 of 987457 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 16849 of 999850 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 16999 + }, + "blockTime": 1746552076 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/4J6qJyw9nncbDRG9CNeTtXKzSWr9xnd5BDyH1jejug8oWMrKWi5PCa7NBVaobTyMXjdcWaLUuVtAf9LqkEbn86eG b/tests/data/transactions/batched_tree_transactions/4J6qJyw9nncbDRG9CNeTtXKzSWr9xnd5BDyH1jejug8oWMrKWi5PCa7NBVaobTyMXjdcWaLUuVtAf9LqkEbn86eG new file mode 100644 index 00000000..9aec7f2e --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/4J6qJyw9nncbDRG9CNeTtXKzSWr9xnd5BDyH1jejug8oWMrKWi5PCa7NBVaobTyMXjdcWaLUuVtAf9LqkEbn86eG @@ -0,0 +1,83 @@ +{ + "slot": 308, + "transaction": [ + "AaTMQZTKLlt1539J/oyCsaHrdETQPO0idYCp/g2BWWmFEbnXuZr/lN8x4FobhxtDzT6/u0o04m61NNHGcied/w0BAAUJ7DDUiI4IcYFkGbvXWaOx6/U8oHfKVZ1qGOt5OIzPzJlMm20YZ6Hmhtq+9LocAayVnPPWJjXrHQ48WcmoYfd2+U8vwtBa/CsS2EwpcQihcRK8ys9zfeuXbqem+U5L3Sbb8q5a5fQ84QrPxMmIwCM6CZXXKJX0CbjRceplW+PzKf4FDSsTeVE2hc8C8rX9UpG9lZsrBgqlJepbNIE7Hbm3bgksNuwi9ReDAP20Sqpq/8/wpG4cvGQcDj7QnaE7nvUIC7wPwLtHyi90xBEulKsTz6PGNOXcF+rLA80aI81+eHwQpl591jkE+Dg60Dze4Hi5FNhzGIA7FTWAcNeS4Fz957/QmmoHZdEI20ACv+9MyGVTFGij2iz8yvlzRZ4iyBL02yrVp2gTI5zxolc3DhyDlgHdB8Zju9Jdafh7/yEtxVkBBAgBAAcIBQYDAq0B3cID2CU+3JP/oAAAAC7Xsz879OGpv5K1Ks+Ii4HDqjdAjyItPyytL8TuDfzcnNyXCJlc3S90KpTOZ4I+aDVKN7Z39WDgbT0gZwQ1N0ORUN8c/K4Sc/hGrJDongRjwyQ/j28ygbsYBdYbxYlIRidt0Cb2fs1KeQNbfIS4WHX+/yZTOlVLaB7+M5i8+qtyKBJ3kWSY0p559uM1S4Xh5s1jJ3pZko/NBjl7GQJadYU=", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999995078200, + 2735280, + 30177540, + 290204160, + 1141440, + 1141440, + 1141440, + 0, + 1614720 + ], + "postBalances": [ + 99999995073200, + 2735280, + 30177540, + 290204160, + 1141440, + 1141440, + 1141440, + 0, + 1614720 + ], + "innerInstructions": [ + { + "index": 0, + "instructions": [ + { + "programIdIndex": 5, + "accounts": [ + 7, + 8, + 6, + 3, + 2 + ], + "data": "ZZpa4B1Y3ym6r8942UyfTyAiqKZ7bWCQZnmRKdgWnZSqWk1ob7hsJ6gFmSVpwQFX6XfykgrcGk4Kp4nxXWgomPdDiQJK5JPvaQ19oRuCQeZaD1ouVnW4XsYVfv4vtXidgTVMRYZtxEZJrhCUPRtWBe31yBNX2MmWEgsBg7DaFiMugFe9bX7wdehxQFZJ3qMwmScPoapDEayAZzpFfVjKDYRBw4rRGV9MFBcBiv5gP8Y", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [], + "data": "V55KweBRnUHGkEaUisCdgyHtJHJb7ZCcjbWeUQUySHhE944JhfG7Jg5MgmouiDFHWzEztHFuUBYpbtTqzGEtXbC7SYw3nrmXffxahtYm66F3DEjbddrTS5kK3fCAiZMUkNe66gMehuPmsiexR2YrVZ4ddq3BhTLmbzxvabq8shhs9XAnyS2B5LFDANUNwE8LpQWuzRFcnYcS", + "stackHeight": 3 + } + ] + } + ], + "logMessages": [ + "Program Lighton6oQpVkeewmo2mcPTQQp7kYHr4fWpAgJyEmDX invoke [1]", + "Program log: Instruction: BatchAppend", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: BatchAppend", + "Program noopb9bkMVfRPU8AsbpTUg8AQkHtKwMYZiFUjNRtMmV invoke [3]", + "Program noopb9bkMVfRPU8AsbpTUg8AQkHtKwMYZiFUjNRtMmV consumed 38 of 79855 compute units", + "Program noopb9bkMVfRPU8AsbpTUg8AQkHtKwMYZiFUjNRtMmV success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 103162 of 182790 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program Lighton6oQpVkeewmo2mcPTQQp7kYHr4fWpAgJyEmDX consumed 122351 of 200000 compute units", + "Program Lighton6oQpVkeewmo2mcPTQQp7kYHr4fWpAgJyEmDX success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 122351 + }, + "blockTime": 1746552128 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/4KxzEHVmDrrfSCd4V6hsjyTzENRDevUDoLMSHr98SEGyBWabzLrjxXW7efeNkFnRNaDwWwpzVF25k8T83bk5iP56 b/tests/data/transactions/batched_tree_transactions/4KxzEHVmDrrfSCd4V6hsjyTzENRDevUDoLMSHr98SEGyBWabzLrjxXW7efeNkFnRNaDwWwpzVF25k8T83bk5iP56 new file mode 100644 index 00000000..4fe7a70a --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/4KxzEHVmDrrfSCd4V6hsjyTzENRDevUDoLMSHr98SEGyBWabzLrjxXW7efeNkFnRNaDwWwpzVF25k8T83bk5iP56 @@ -0,0 +1,87 @@ +{ + "slot": 236, + "transaction": [ + "AaZn66maGdJ0J9zITlCk72qgdNsXiCU+BXQXMWPZhKn3gRyQwpahELhAXUNt3ZY6ovshwM0cA8pl+d2VtQK8sQ0BAAcKeiGC7CowvJIstkh88PnSr2WEDY9TdVntq2WiGjIGJiNPL8LQWvwrEthMKXEIoXESvMrPc33rl26npvlOS90m2/KuWuX0POEKz8TJiMAjOgmV1yiV9Am40XHqZVvj8yn+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E+7ModRBcroW1tER2B+2/4UUnv7QjkRykBCO/0VJ6JnUeJPNok8rz1wtpPtde4nKykidAaR5GxvZ9H2XouCCJWwIEAAUCQEIPAAULAAAIBwkGBQUDAgF7GhCpBxXK8hlvAAAAAAEAAAB6IYLsKjC8kiy2SHzw+dKvZYQNj1N1We2rZaIaMgYmI0BCDwAAAAAAAAAAAUIAAAABAAAAAQAAAAAAAAAAAAAiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEIPAAAAAAAAAAEAAAAAAAAA", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999960327153, + 30012507, + 290204160, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "postBalances": [ + 99999960317152, + 30017508, + 290204160, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [ + 9, + 8, + 1, + 2 + ], + "data": "95YB9JH8MTYtuZfgNwFoqXrHy4kWXg1ap1zHNazYxHKGSP4HmQGWWWgtN4ES5SVp6Z6NfzuucvFC2yz1osK8CgbgFyGm3qMUZcpLfmuwNW3vytE5TTJRc69K1J4TnyXLkuts6MAZw7hpPS55fw2TXHXwjhgSC7BsTDGBoPfib6xk6ufkEFkhGsNwtDW6xuMufYyBvjsrJu3oGpRmhnVV1sQyXMemxcbaT7L6sjY7iWALMjZqmn1E6bMS4Ebtc99psrabWYjE4rrTvmtdsJjAXjHz9tq7FXcU33QhfeCtAyxqcK2eHrEvACjh6naCy4yACSSfEYpRxn4fUf94csGwZZUMn4Aki6quzh2U6dfPdegJk6JEBRyPdHCN33EX55npZk6dLV7XTiAKj7DEZ3XDnF", + "stackHeight": 2 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [1]", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 10101 of 983192 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 26796 of 999850 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 26946 + }, + "blockTime": 1746552093 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/4L473o7RBaYs9gz2x8bvfeEiBfXygVoFjMp6Du2yqwHyk7F7LMbXUG72GV5qP128ZYZzHD6B4MYs29WTBVwH172p b/tests/data/transactions/batched_tree_transactions/4L473o7RBaYs9gz2x8bvfeEiBfXygVoFjMp6Du2yqwHyk7F7LMbXUG72GV5qP128ZYZzHD6B4MYs29WTBVwH172p new file mode 100644 index 00000000..1a1bc83d --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/4L473o7RBaYs9gz2x8bvfeEiBfXygVoFjMp6Du2yqwHyk7F7LMbXUG72GV5qP128ZYZzHD6B4MYs29WTBVwH172p @@ -0,0 +1,97 @@ +{ + "slot": 173, + "transaction": [ + "AaZ7ZkYD5Mvk/pvteft0tHGofNpv7aZelU6x9dPJ4He0m6mpqEF1icj7pxBA1vuEmtrv/jtI6rOU+cisAMEpvAEBAAcKeiGC7CowvJIstkh88PnSr2WEDY9TdVntq2WiGjIGJiNPL8LQWvwrEthMKXEIoXESvMrPc33rl26npvlOS90m26eeSDlsVuDVTj+5sQPFmF4L4Yw5qusdd/SNQPAGVKJYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E+7ModRBcroW1tER2B+2/4UUnv7QjkRykBCO/0VJ6JnV7/vEbjYywIsDGe11rmp+/st6B3eYilUEQ9J+/hruP9QIEAAUCQEIPAAUKAAAIBwkGAgUDAU8aEKkHFcryGUMAAAAAAAAAAAEAAAB6IYLsKjC8kiy2SHzw+dKvZYQNj1N1We2rZaIaMgYmI0BCDwAAAAAAAAAAAAAAAAABQEIPAAAAAAAB", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999987857206, + 29747454, + 7000000, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "postBalances": [ + 99999986847205, + 29752455, + 8000000, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 3, + "accounts": [ + 0, + 2 + ], + "data": "3Bxs4Bc3VYuGVB19", + "stackHeight": 2 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [ + 9, + 8, + 1 + ], + "data": "21HGgNSLz1yYgjRayL37XWwxDSqDsgEEKzhJdvMbV9nnMr13tjtwkoLbMueYAc31hWMwJeumPry5jmFEi7x4vWcS5RHJBa9oFWdWbxX6U1P2Lw9wckQgLNSdChq9BANFn7pcHRJRC8GE4Gax4pU72s95zaGzwQ9Gucj56PHvLt9rAeG5UGMxsQ3sPWfcTiTyazC3XTUxE2KEpVM6cpyBqRrx7SS17mm6q4f1qRx1Kh1X7hgzCJTH", + "stackHeight": 2 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [1]", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 4419 of 987457 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 16849 of 999850 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 16999 + }, + "blockTime": 1746552064 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/4M9weXLpW1SVuyfYuMSmr3FNGCbBsCQwugduWTj4JU71HQjPQ3tYcvv1G6nywRGuyKiviFHzgv3jXmtAdLAGRujY b/tests/data/transactions/batched_tree_transactions/4M9weXLpW1SVuyfYuMSmr3FNGCbBsCQwugduWTj4JU71HQjPQ3tYcvv1G6nywRGuyKiviFHzgv3jXmtAdLAGRujY new file mode 100644 index 00000000..484e636a --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/4M9weXLpW1SVuyfYuMSmr3FNGCbBsCQwugduWTj4JU71HQjPQ3tYcvv1G6nywRGuyKiviFHzgv3jXmtAdLAGRujY @@ -0,0 +1,87 @@ +{ + "slot": 269, + "transaction": [ + "AaduYowyJauOQtZvlCpqfhFfJ7tvZzDlYlAszxL0rpRol4sVItIpelJ9FmcE7LF2c/LMyyXMtkxihE847DVedwMBAAcKeiGC7CowvJIstkh88PnSr2WEDY9TdVntq2WiGjIGJiNPL8LQWvwrEthMKXEIoXESvMrPc33rl26npvlOS90m2/KuWuX0POEKz8TJiMAjOgmV1yiV9Am40XHqZVvj8yn+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E+7ModRBcroW1tER2B+2/4UUnv7QjkRykBCO/0VJ6JnUaOjZ+BUJzUgItf+j61aaUyQgi3c0rCU3YCW0rNfNZ9gIEAAUCQEIPAAULAAAIBwkGBQUDAgF7GhCpBxXK8hlvAAAAAAEAAAB6IYLsKjC8kiy2SHzw+dKvZYQNj1N1We2rZaIaMgYmI0BCDwAAAAAAAAAAAV4AAAABAAAAAQAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEIPAAAAAAAAAAEAAAAAAAAA", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999946047125, + 30152535, + 290204160, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "postBalances": [ + 99999946037124, + 30157536, + 290204160, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [ + 9, + 8, + 1, + 2 + ], + "data": "95YB9JH8MTYtuZfgNwFoqXrHy7o5L15xekz6wsumk1xGUJ9HqEK23amS7uZ3sCoS4SoHmw6oTBaYiuWtzP2ArxceG87MtfvbkvFTJyqo9Dsbj9RsVpJaVddvZ8SnnnY8vxbSgVXR1qAwKz8xkHA77CUkCnuQw7FHURNetj2Ancg1ruWFufdUvrEdcTbiNvED4d8YTCcNsymXMy62YLr3mDDwAmYUFm2xVMs9PSNUwfKxoc26aqJFTmxJ31rHxEGTRYW5CBig2gQNbDxqJz9ca7eKrkDFZKn88YnqLwqY8tPVmhhwo5oPNKQKxArnsqd2LtA5RqCCxbYhXAhv3Q55zUQtfEh65phrBPWvxJiiCq6qFqNJYJds7Yeo3t7Aa5yuL2yqmBMQmM2qyx8qcJrG8w", + "stackHeight": 2 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [1]", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 10101 of 983192 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 26796 of 999850 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 26946 + }, + "blockTime": 1746552109 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/4MgEiWt2CFcRGQxei9edEa3xavqZVzoAqoJybDbmZ61JokyouAcb8PRpyopYoCKrj8r7KvrMT4im4Rzk4YdyBEFt b/tests/data/transactions/batched_tree_transactions/4MgEiWt2CFcRGQxei9edEa3xavqZVzoAqoJybDbmZ61JokyouAcb8PRpyopYoCKrj8r7KvrMT4im4Rzk4YdyBEFt new file mode 100644 index 00000000..2ecbe5be --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/4MgEiWt2CFcRGQxei9edEa3xavqZVzoAqoJybDbmZ61JokyouAcb8PRpyopYoCKrj8r7KvrMT4im4Rzk4YdyBEFt @@ -0,0 +1,97 @@ +{ + "slot": 194, + "transaction": [ + "AafhsZiFUWXivLoHqiudf5vp+E5vLvm0IQhpFFwMGYE4kYmVx4cxyhDK+nP3/NyPgNCJGZWMza/zpwWo3zhAqAMBAAcKeiGC7CowvJIstkh88PnSr2WEDY9TdVntq2WiGjIGJiNPL8LQWvwrEthMKXEIoXESvMrPc33rl26npvlOS90m26eeSDlsVuDVTj+5sQPFmF4L4Yw5qusdd/SNQPAGVKJYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E+7ModRBcroW1tER2B+2/4UUnv7QjkRykBCO/0VJ6JnUxbm9oacC8SvIWxpf1wjHan1a8ARosPEA8Jh475b2GsQIEAAUCQEIPAAUKAAAIBwkGAgUDAU8aEKkHFcryGUMAAAAAAAAAAAEAAAB6IYLsKjC8kiy2SHzw+dKvZYQNj1N1We2rZaIaMgYmI0BCDwAAAAAAAAAAAAAAAAABQEIPAAAAAAAB", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999978677188, + 29837472, + 16000000, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "postBalances": [ + 99999977667187, + 29842473, + 17000000, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 3, + "accounts": [ + 0, + 2 + ], + "data": "3Bxs4Bc3VYuGVB19", + "stackHeight": 2 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [ + 9, + 8, + 1 + ], + "data": "21HGgNSLz1yYgjRayL37XWwxDSqDsgEEKzhJdvMbV9nnMr13tjtwkoLbMueYAc31hWMwJeumQD6D4ykRiHNKHfrSiAPdiagndFcW8vbjCDNTN62Uqixv7uLvgmg4KWTjfFvm6eDogJ64dJK6i9wp8FwHykbEjnqay3ogMXfGQFsX5hGWLTu818ho4gfuixFfSV7XBUd796nqovL3xswqUuH3LWVxR2zT92Sgw1t32qbiA5AWGTcb", + "stackHeight": 2 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [1]", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 4419 of 987457 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 16849 of 999850 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 16999 + }, + "blockTime": 1746552074 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/4PCFsFFwckMxuZUoHst2nTPtbMk89deEgxg9FtE4xENXXPgcxJAsSDCuZU9dLBF4uRbndyRbpiV9kRT8ikf5NJzu b/tests/data/transactions/batched_tree_transactions/4PCFsFFwckMxuZUoHst2nTPtbMk89deEgxg9FtE4xENXXPgcxJAsSDCuZU9dLBF4uRbndyRbpiV9kRT8ikf5NJzu new file mode 100644 index 00000000..d2d28739 --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/4PCFsFFwckMxuZUoHst2nTPtbMk89deEgxg9FtE4xENXXPgcxJAsSDCuZU9dLBF4uRbndyRbpiV9kRT8ikf5NJzu @@ -0,0 +1,87 @@ +{ + "slot": 255, + "transaction": [ + "AakwuPj6uwY/EhqANiGISZJjZpbdc840iCjg1zPyBSMmvbOSaQd8kXWCLkx/GetvA2V/SLBtyFm8q/NM2tnnegoBAAcKeiGC7CowvJIstkh88PnSr2WEDY9TdVntq2WiGjIGJiNPL8LQWvwrEthMKXEIoXESvMrPc33rl26npvlOS90m2/KuWuX0POEKz8TJiMAjOgmV1yiV9Am40XHqZVvj8yn+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E+7ModRBcroW1tER2B+2/4UUnv7QjkRykBCO/0VJ6JnWv7lID31843Ciz17QYquaU1szGVP4JKJlyyd8DcqfxLwIEAAUCQEIPAAULAAAIBwkGBQUDAgF7GhCpBxXK8hlvAAAAAAEAAAB6IYLsKjC8kiy2SHzw+dKvZYQNj1N1We2rZaIaMgYmI0BCDwAAAAAAAAAAAVIAAAABAAAAAQAAAAAAAAAAAAAqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEIPAAAAAAAAAAEAAAAAAAAA", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999952167137, + 30092523, + 290204160, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "postBalances": [ + 99999952157136, + 30097524, + 290204160, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [ + 9, + 8, + 1, + 2 + ], + "data": "95YB9JH8MTYtuZfgNwFoqXrHy1wLheFqBWeRpXXvUfuahgY8wHarGVessS8CJcfY2cirG6tNpnfL6Saw8eibqCU1nydJVRTip1WySdR3Dvg8ui2SK74e11aMpvD5DUDUem9tHTeC7EpbdcrqpijsP8CydVCHBemdmyimqBpUpZkG9z6cAcujgK8qJUA2Ug2W9B8nCvdAa9Fh3iqqHZZcuw2bLkwQR7AF7ZiZMBGmtHeg4d6c9sQhvdG4QNmkBeJ6QBGwwFBdZ3K3sPGsMinYsJU3XCJSYEz8z5CZqPETQgd9MSy8MA3G3iaWhfuF1SGAnTpikNrLampyfS1CRrgcvX3J78bUSPtsfUCCYTadDVp3n7LLjc1ryoUWhyr58XSDKKdUpxMW3nBVgkDPa8V6LF", + "stackHeight": 2 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [1]", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 10101 of 983192 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 26796 of 999850 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 26946 + }, + "blockTime": 1746552102 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/4PnJHE6X2hihqEKZZA2MzeWnYY1g8tePixBawR8FkeookFztKRk9JcBjVwAUJ5Xw688kqpqNQ3HbZkug5fqL3MYw b/tests/data/transactions/batched_tree_transactions/4PnJHE6X2hihqEKZZA2MzeWnYY1g8tePixBawR8FkeookFztKRk9JcBjVwAUJ5Xw688kqpqNQ3HbZkug5fqL3MYw new file mode 100644 index 00000000..14da2621 --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/4PnJHE6X2hihqEKZZA2MzeWnYY1g8tePixBawR8FkeookFztKRk9JcBjVwAUJ5Xw688kqpqNQ3HbZkug5fqL3MYw @@ -0,0 +1,84 @@ +{ + "slot": 324, + "transaction": [ + "AamyS3JI2EEtwEN7Xi+CAN4dIzOf7yoq0E4o2dWKRLw+suLvIc3pLYy02a9Gi3iND4CnwANLoZvP3DF+C6uMOwwBAAUJ7DDUiI4IcYFkGbvXWaOx6/U8oHfKVZ1qGOt5OIzPzJlMm20YZ6Hmhtq+9LocAayVnPPWJjXrHQ48WcmoYfd2+U8vwtBa/CsS2EwpcQihcRK8ys9zfeuXbqem+U5L3Sbb8q5a5fQ84QrPxMmIwCM6CZXXKJX0CbjRceplW+PzKf4FDSsTeVE2hc8C8rX9UpG9lZsrBgqlJepbNIE7Hbm3bgksNuwi9ReDAP20Sqpq/8/wpG4cvGQcDj7QnaE7nvUIC7wPwLtHyi90xBEulKsTz6PGNOXcF+rLA80aI81+eHwQpl591jkE+Dg60Dze4Hi5FNhzGIA7FTWAcNeS4Fz957/QmmoHZdEI20ACv+9MyGVTFGij2iz8yvlzRZ4iyBL0AddlIF7wgD2/mz3NlVIvJFLkqievSuR7sIERDiCVeFkBBAgBAAcIBQYDAq0B3cID2CU+3JP/oAAAABj5xjPbINqgxeJO5qzTrE+hP5gIsjSEqYQDHBKXT4SYDG6tpUbGfVla8VQE28ZEQiMGOXMJBBVtKwPOpDy0OkmQK4RXFPct296eHysBMH/ujI91Z+02tNbdAaBio2RU9QVOnrnv7wCiwGGgF606Zy0VcAwib7Lh4CoguyC/wGHrCuawDh3nRsSxfhEQbOFDGHJ8X42UkaiMke79yX1vI9s=", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999995038200, + 2735280, + 30177540, + 290204160, + 1141440, + 1141440, + 1141440, + 0, + 1614720 + ], + "postBalances": [ + 99999995033200, + 2735280, + 30177540, + 290204160, + 1141440, + 1141440, + 1141440, + 0, + 1614720 + ], + "innerInstructions": [ + { + "index": 0, + "instructions": [ + { + "programIdIndex": 5, + "accounts": [ + 7, + 8, + 6, + 3, + 2 + ], + "data": "ZZpa4B1Y3ym6r8941pRYX6bqgsHF6bxFHyHkkuXQNmPPmgadjtR1dYJGEBJXqeNT3bdF89e1bxFbGJ9PMQae9DVSBqddJ9A3b18dydeMKyjVRiuABe72MBoenj7SiL3uv2tn4oCUDrtkcGdqUdMacR7E1PuK9uLQqRpvduujWChtb8GH64T8iP8R32cvASAxnFo5PLMZA1XRQEEDHM2vWqZMhZ76pfF5QYr7CasYu1t", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [], + "data": "V55KweBRnUHGkEaUisCdgyHtJHJb7ZCcjbWeUQUySHhE99UpZCoaW1oHpoQNaqQ5LyXkypwoBkwkMjnGZ3VWfF7QpuHYYtUUpc4qPrB6qHj8kLm8CVS8o7N9KXhN3jCKE6sQu5Xrp9YPBK4n8PmzHbCuJmE1ayfnR8UyoaQcTkW5TMNmKHsyjqTbNR9He1hoV2JNa6SJu4bk", + "stackHeight": 3 + } + ] + } + ], + "logMessages": [ + "Program Lighton6oQpVkeewmo2mcPTQQp7kYHr4fWpAgJyEmDX invoke [1]", + "Program log: Instruction: BatchAppend", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: BatchAppend", + "Program log: Incrementing next full batch index", + "Program noopb9bkMVfRPU8AsbpTUg8AQkHtKwMYZiFUjNRtMmV invoke [3]", + "Program noopb9bkMVfRPU8AsbpTUg8AQkHtKwMYZiFUjNRtMmV consumed 38 of 79707 compute units", + "Program noopb9bkMVfRPU8AsbpTUg8AQkHtKwMYZiFUjNRtMmV success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 103310 of 182790 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program Lighton6oQpVkeewmo2mcPTQQp7kYHr4fWpAgJyEmDX consumed 122499 of 200000 compute units", + "Program Lighton6oQpVkeewmo2mcPTQQp7kYHr4fWpAgJyEmDX success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 122499 + }, + "blockTime": 1746552136 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/4UeHCmYD1Zf2V4aePYyDQHSackkzvASuZkt2qrujWcBrVTWUFdhAsduvTeYzevPoxd4R99aDNKo4V5oetBRFGjT1 b/tests/data/transactions/batched_tree_transactions/4UeHCmYD1Zf2V4aePYyDQHSackkzvASuZkt2qrujWcBrVTWUFdhAsduvTeYzevPoxd4R99aDNKo4V5oetBRFGjT1 new file mode 100644 index 00000000..228236c9 --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/4UeHCmYD1Zf2V4aePYyDQHSackkzvASuZkt2qrujWcBrVTWUFdhAsduvTeYzevPoxd4R99aDNKo4V5oetBRFGjT1 @@ -0,0 +1,97 @@ +{ + "slot": 241, + "transaction": [ + "Aa3jmN8ec+UJoDJHIIIYQZRqKRmjyHKqtLbOSAd6sw7Wb8lFBKkWt0rHR49u1/Q4H97Hn1D4UL1tEf4+J+5V2wQBAAcKeiGC7CowvJIstkh88PnSr2WEDY9TdVntq2WiGjIGJiNPL8LQWvwrEthMKXEIoXESvMrPc33rl26npvlOS90m26eeSDlsVuDVTj+5sQPFmF4L4Yw5qusdd/SNQPAGVKJYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E+7ModRBcroW1tER2B+2/4UUnv7QjkRykBCO/0VJ6JnVnFKngshRtWao8iz4BqpSH4zMF8PMEcQkay0dUn3z4fgIEAAUCQEIPAAUKAAAIBwkGAgUDAU8aEKkHFcryGUMAAAAAAAAAAAEAAAB6IYLsKjC8kiy2SHzw+dKvZYQNj1N1We2rZaIaMgYmI0BCDwAAAAAAAAAAAAAAAAABQEIPAAAAAAAB", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999958277148, + 30037512, + 36000000, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "postBalances": [ + 99999957267147, + 30042513, + 37000000, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 3, + "accounts": [ + 0, + 2 + ], + "data": "3Bxs4Bc3VYuGVB19", + "stackHeight": 2 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [ + 9, + 8, + 1 + ], + "data": "21HGgNSLz1yYgjRayL37XWwxDSqDsgEEKzhJdvMbV9nnMr13tjtwkoLbMueYAc31hWMwJeumW76iMSvvpUa7zgusKiziUBiiGCZBZMofH9JxmbY89hzHfjSJSLZV1cfB38MVv8ZEQZdMi6wj8fZJMnqWMXRyMXR1KTZgk2DD5ePQnsJEM8AdmGynEmJXiKuRGnrnoeVwZ2pLqRs7y3DgUenFWktGUPcacNGpRNCUX2XJUAwYn6uD", + "stackHeight": 2 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [1]", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 4419 of 987457 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 16849 of 999850 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 16999 + }, + "blockTime": 1746552096 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/4Vyv6DJkbFcSbCgr69s7pUTVFetH3EVBaGRipoKnsacaraQnPx3VNCbgFcZd8YBkZjzK15Q6vKKH4EcTKL6EF76o b/tests/data/transactions/batched_tree_transactions/4Vyv6DJkbFcSbCgr69s7pUTVFetH3EVBaGRipoKnsacaraQnPx3VNCbgFcZd8YBkZjzK15Q6vKKH4EcTKL6EF76o new file mode 100644 index 00000000..5d611308 --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/4Vyv6DJkbFcSbCgr69s7pUTVFetH3EVBaGRipoKnsacaraQnPx3VNCbgFcZd8YBkZjzK15Q6vKKH4EcTKL6EF76o @@ -0,0 +1,97 @@ +{ + "slot": 268, + "transaction": [ + "Aa8LGh7b0t60otyfG5q1L3WO7o0Ilpl9f9KkwX1031ytANaO6neSQTYjeWK8giRAdJMIrhlpMKi04HGZasWbvAgBAAcKeiGC7CowvJIstkh88PnSr2WEDY9TdVntq2WiGjIGJiNPL8LQWvwrEthMKXEIoXESvMrPc33rl26npvlOS90m26eeSDlsVuDVTj+5sQPFmF4L4Yw5qusdd/SNQPAGVKJYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E+7ModRBcroW1tER2B+2/4UUnv7QjkRykBCO/0VJ6JnVrKfgrvV2v9n+hJjw7KHPjwQ0OAhhmChRPHIwoGQJ1/QIEAAUCQEIPAAUKAAAIBwkGAgUDAU8aEKkHFcryGUMAAAAAAAAAAAEAAAB6IYLsKjC8kiy2SHzw+dKvZYQNj1N1We2rZaIaMgYmI0BCDwAAAAAAAAAAAAAAAAABQEIPAAAAAAAB", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999947057126, + 30147534, + 47000000, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "postBalances": [ + 99999946047125, + 30152535, + 48000000, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 3, + "accounts": [ + 0, + 2 + ], + "data": "3Bxs4Bc3VYuGVB19", + "stackHeight": 2 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [ + 9, + 8, + 1 + ], + "data": "21HGgNSLz1yYgjRayL37XWwxDSqDsgEEKzhJdvMbV9nnMr13tjtwkoLbMueYAc31hWMwJeumXocckuUAjgtxtMxvvZfNqb5PhiK6Vkz2QgSVNWgTEfUjnDjuH6XGcicZHvtZcNkrfw6Gjz33HbnKDf7DGs3zsGH7WXCVqyrsMvYQa6o8z9nT6pdtKDD5Q282ERecaykQArmDCAY7x6xhfzbysT63m3F9AJpaY4f9Dtmr838am9Vy", + "stackHeight": 2 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [1]", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 4419 of 987457 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 16849 of 999850 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 16999 + }, + "blockTime": 1746552109 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/4XMY3pAfYtSBdYpjJGzKjDmhnQc8rx2vhKZzqHEHzATtJfGqnB3XToFACKuJg6Z9sADMh8eo8XGNGU7SBbxDpDwY b/tests/data/transactions/batched_tree_transactions/4XMY3pAfYtSBdYpjJGzKjDmhnQc8rx2vhKZzqHEHzATtJfGqnB3XToFACKuJg6Z9sADMh8eo8XGNGU7SBbxDpDwY new file mode 100644 index 00000000..57e3aaaf --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/4XMY3pAfYtSBdYpjJGzKjDmhnQc8rx2vhKZzqHEHzATtJfGqnB3XToFACKuJg6Z9sADMh8eo8XGNGU7SBbxDpDwY @@ -0,0 +1,87 @@ +{ + "slot": 164, + "transaction": [ + "AbA6KJe5AXrHL45qpXVcO+/qQaFlAk16JvPJGM1jsM8Q60M4uOA8xcsDPFaGmushPS5va/Wg+sz+tSTkCKZQ4AMBAAcKeiGC7CowvJIstkh88PnSr2WEDY9TdVntq2WiGjIGJiNPL8LQWvwrEthMKXEIoXESvMrPc33rl26npvlOS90m2/KuWuX0POEKz8TJiMAjOgmV1yiV9Am40XHqZVvj8yn+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E+7ModRBcroW1tER2B+2/4UUnv7QjkRykBCO/0VJ6JnU/Ec/IGq8iMbv7CPa7vi9+jlCC1WThKC6/FTGaTDb12gIEAAUCQEIPAAULAAAIBwkGBQUDAgF7GhCpBxXK8hlvAAAAAAEAAAB6IYLsKjC8kiy2SHzw+dKvZYQNj1N1We2rZaIaMgYmI0BCDwAAAAAAAAAAAQYAAAABAAAAAQAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEIPAAAAAAAAAAEAAAAAAAAA", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999990927213, + 29712447, + 290204160, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "postBalances": [ + 99999990917212, + 29717448, + 290204160, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [ + 9, + 8, + 1, + 2 + ], + "data": "95YB9JH8MTYtuZfgNwFoqXrHy6pMKk4kZinqtJrJ221KEFsYSVviaxVqm6cFDxSeTMFHXQMHHuePFxre4NY4VC2b3T5YjyfmksSvv53UD2rtHapMuPWLegC5oofz9fhN37Ho1G1PwDYdneaDA2WBEDp72WU5dffsYMoEFvYdgKPsinYVAWaEQhL6qL95bpsEBbBWG7xsuLDGDWVq3Z2dznrigHnyE45CJrvRGwQV7q26G9LPygQJUBQkrCo89C3Ps5TJt1meEZ8vJSnmBGSA5niqUKBMYzDJRMYY3m2od9vDxiQyGygouK2zXNib3Lhz2cRczbTRAMnRtJXJcGrqdX5AGbkM55s6ANpZqFNE9t9e84FC7EU3uJ6cM5nKdabNzTFUuP3N6t7azJsBC7PxYF", + "stackHeight": 2 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [1]", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 10023 of 983192 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 26718 of 999850 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 26868 + }, + "blockTime": 1746552060 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/4arAS2BMnUSbARMWRfKJRzGpLLnaANxwj9pxqmsAzDSgYTA7P6ynkFzFGWJmCdawnn3joR9JTmDwAZm99YpnKknB b/tests/data/transactions/batched_tree_transactions/4arAS2BMnUSbARMWRfKJRzGpLLnaANxwj9pxqmsAzDSgYTA7P6ynkFzFGWJmCdawnn3joR9JTmDwAZm99YpnKknB new file mode 100644 index 00000000..6f76da82 --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/4arAS2BMnUSbARMWRfKJRzGpLLnaANxwj9pxqmsAzDSgYTA7P6ynkFzFGWJmCdawnn3joR9JTmDwAZm99YpnKknB @@ -0,0 +1,97 @@ +{ + "slot": 237, + "transaction": [ + "AbM9apO3aixVJ67riVruxdc8yC6HVlU2ihW6H9+hql9yQ2YhlW/PrgW6rMXWTOKADqGa5nIeo0G0qn3QKVZF2AgBAAcKeiGC7CowvJIstkh88PnSr2WEDY9TdVntq2WiGjIGJiNPL8LQWvwrEthMKXEIoXESvMrPc33rl26npvlOS90m26eeSDlsVuDVTj+5sQPFmF4L4Yw5qusdd/SNQPAGVKJYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E+7ModRBcroW1tER2B+2/4UUnv7QjkRykBCO/0VJ6JnVWpUGNUc3dleZS2dyZtL/XV/Bu048ZRw5xkc62R5VJugIEAAUCQEIPAAUKAAAIBwkGAgUDAU8aEKkHFcryGUMAAAAAAAAAAAEAAAB6IYLsKjC8kiy2SHzw+dKvZYQNj1N1We2rZaIaMgYmI0BCDwAAAAAAAAAAAAAAAAABQEIPAAAAAAAB", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999960317152, + 30017508, + 34000000, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "postBalances": [ + 99999959307151, + 30022509, + 35000000, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 3, + "accounts": [ + 0, + 2 + ], + "data": "3Bxs4Bc3VYuGVB19", + "stackHeight": 2 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [ + 9, + 8, + 1 + ], + "data": "21HGgNSLz1yYgjRayL37XWwxDSqDsgEEKzhJdvMbV9nnMr13tjtwkoLbMueYAc31hWMwJeumWrFU3SLCP6525RP5eQaoMQpTqdJyczCnSKShv9pMNHTuzXWVK9ZiQPCAggg4jZ2AiudgXXDsa8fKFHctBbTv3A1Rr3WwxYaPSF1DiMEGQZc9SfYDz6f9o2Xqy5ibGRmakoqj3FzGzS9AkSqi2JbYWrF5gc3VeNpbXD12PMmh2dSX", + "stackHeight": 2 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [1]", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 4419 of 987457 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 16849 of 999850 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 16999 + }, + "blockTime": 1746552094 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/4gY59VESWLoj8JpRqdSnsszy2Xb5ScLTUxtNRpHshhLN9uWTpDCqvMjDChTcxJVqhwapH5SzdLHzrPs4pkbRyGF4 b/tests/data/transactions/batched_tree_transactions/4gY59VESWLoj8JpRqdSnsszy2Xb5ScLTUxtNRpHshhLN9uWTpDCqvMjDChTcxJVqhwapH5SzdLHzrPs4pkbRyGF4 new file mode 100644 index 00000000..3a12b819 --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/4gY59VESWLoj8JpRqdSnsszy2Xb5ScLTUxtNRpHshhLN9uWTpDCqvMjDChTcxJVqhwapH5SzdLHzrPs4pkbRyGF4 @@ -0,0 +1,97 @@ +{ + "slot": 210, + "transaction": [ + "AbglJPdPzO5/ayIUAbQ+CqPdAmJPJgD4q/lmW1RLfWup9b2D0QiJ67QHrR7pLUL++apcbYw7BQGniNHx/z9jWwsBAAcKeiGC7CowvJIstkh88PnSr2WEDY9TdVntq2WiGjIGJiNPL8LQWvwrEthMKXEIoXESvMrPc33rl26npvlOS90m26eeSDlsVuDVTj+5sQPFmF4L4Yw5qusdd/SNQPAGVKJYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E+7ModRBcroW1tER2B+2/4UUnv7QjkRykBCO/0VJ6JnWiu85kEO6zBzd9/m2Nqz4f/Ox6nkIwIIDmNnmq3/8hlgIEAAUCQEIPAAUKAAAIBwkGAgUDAU8aEKkHFcryGUMAAAAAAAAAAAEAAAB6IYLsKjC8kiy2SHzw+dKvZYQNj1N1We2rZaIaMgYmI0BCDwAAAAAAAAAAAAAAAAABQEIPAAAAAAAB", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999971537174, + 29907486, + 23000000, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "postBalances": [ + 99999970527173, + 29912487, + 24000000, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 3, + "accounts": [ + 0, + 2 + ], + "data": "3Bxs4Bc3VYuGVB19", + "stackHeight": 2 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [ + 9, + 8, + 1 + ], + "data": "21HGgNSLz1yYgjRayL37XWwxDSqDsgEEKzhJdvMbV9nnMr13tjtwkoLbMueYAc31hWMwJeumZD1ec9dEHPqna3apecgYfS88BEEWCWQzHGyaLyzjDC6FGbcvRdurqqonu1JH3ms1j6YiBdo2LKn7uWDQjrk2T2dZB23fmj3vy8fMDF4MQEDkSvezwjBaTPZcgX5sAmmzVB7LebHSFbpZMYM2dpWRgR9XvXwsWYsL4beHGQSwWHm1", + "stackHeight": 2 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [1]", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 4419 of 987457 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 16849 of 999850 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 16999 + }, + "blockTime": 1746552081 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/4ji7HxV2jD6UpU7dbKUtW3cCz75jE5t9cQ4LcFGgHQWUd83tmzBikxy8PnHgaSQhJvqJUhBP1NL7swdgqfFj57xs b/tests/data/transactions/batched_tree_transactions/4ji7HxV2jD6UpU7dbKUtW3cCz75jE5t9cQ4LcFGgHQWUd83tmzBikxy8PnHgaSQhJvqJUhBP1NL7swdgqfFj57xs new file mode 100644 index 00000000..e1d2d89f --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/4ji7HxV2jD6UpU7dbKUtW3cCz75jE5t9cQ4LcFGgHQWUd83tmzBikxy8PnHgaSQhJvqJUhBP1NL7swdgqfFj57xs @@ -0,0 +1,87 @@ +{ + "slot": 197, + "transaction": [ + "AbrhpGRrW5g1TOALRl5l6RmIOW7Jr7zSA68CAD9wkZ3QXoOEeOTrulm0hll+owWmi6q8sgQtg4IJiV0h/iNz1AABAAcKeiGC7CowvJIstkh88PnSr2WEDY9TdVntq2WiGjIGJiNPL8LQWvwrEthMKXEIoXESvMrPc33rl26npvlOS90m2/KuWuX0POEKz8TJiMAjOgmV1yiV9Am40XHqZVvj8yn+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E+7ModRBcroW1tER2B+2/4UUnv7QjkRykBCO/0VJ6JnWDhZou9LDcXT7e6OaDNd3HAlMX9HbIWZSplnZefoRrQQIEAAUCQEIPAAULAAAIBwkGBQUDAgF7GhCpBxXK8hlvAAAAAAEAAAB6IYLsKjC8kiy2SHzw+dKvZYQNj1N1We2rZaIaMgYmI0BCDwAAAAAAAAAAASIAAAABAAAAAQAAAAAAAAAAAAASAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEIPAAAAAAAAAAEAAAAAAAAA", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999976647185, + 29852475, + 290204160, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "postBalances": [ + 99999976637184, + 29857476, + 290204160, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [ + 9, + 8, + 1, + 2 + ], + "data": "95YB9JH8MTYtuZfgNwFoqXrHy22NHPJgsLaLyMHBoEGMLHcBCh7MoiKMsW11kG9973uDpcFNHB8CC2XX1JbcKscA5wjJBhoH5BfP6Zhdr1SFzGMHvEm5cbYvvuHSUmTZBqtE9ZHvQnGasz3vsTpNgVBvRnbw6Wttb77XEiniECg76tghcFDdyTSBLzfofaMWLW9oXvN66jtRKfFiS56hPbDnhQUvKSW9ujMqey7A8yWoNik4uyR6JoN6XW831pTgL2ahb4D3MyNx8bTRQ8G4N2QzrMzKy3z8P6jiTX2oadURhaB6fKHtG5TB8f3KDP4sHxfMPDxiNq56KoeKUoLshWhcQNm4sqsWK3W9ieD8eYEiMc6d7S1fA7A8Mkn88S3DFNMuQtm79YmSrw23iwJERM", + "stackHeight": 2 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [1]", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 10023 of 983192 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 26718 of 999850 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 26868 + }, + "blockTime": 1746552075 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/4jpp8LkphZP5EyBMj82QRimagjYYrxSMeN1uVCAx4Au5odP4kPDSbcnPvAL1TF7xUxynsE8eVgRh35a81PfDoneY b/tests/data/transactions/batched_tree_transactions/4jpp8LkphZP5EyBMj82QRimagjYYrxSMeN1uVCAx4Au5odP4kPDSbcnPvAL1TF7xUxynsE8eVgRh35a81PfDoneY new file mode 100644 index 00000000..80486c1d --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/4jpp8LkphZP5EyBMj82QRimagjYYrxSMeN1uVCAx4Au5odP4kPDSbcnPvAL1TF7xUxynsE8eVgRh35a81PfDoneY @@ -0,0 +1,97 @@ +{ + "slot": 220, + "transaction": [ + "Abr7KN8cDM4xyiUVD9dm0TYaN32Dt00QZ63OFTLCw0L3AnFNp6z+jATJUY7zYMj7f7Q/cgqaOT8hYaUjPSRB6AUBAAcKeiGC7CowvJIstkh88PnSr2WEDY9TdVntq2WiGjIGJiNPL8LQWvwrEthMKXEIoXESvMrPc33rl26npvlOS90m26eeSDlsVuDVTj+5sQPFmF4L4Yw5qusdd/SNQPAGVKJYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E+7ModRBcroW1tER2B+2/4UUnv7QjkRykBCO/0VJ6JnWBExqPq7Q0WnAKa+oiUGi9tySTs4s+0dWX8gaAIPd42wIEAAUCQEIPAAUKAAAIBwkGAgUDAU8aEKkHFcryGUMAAAAAAAAAAAEAAAB6IYLsKjC8kiy2SHzw+dKvZYQNj1N1We2rZaIaMgYmI0BCDwAAAAAAAAAAAAAAAAABQEIPAAAAAAAB", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999967457166, + 29947494, + 27000000, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "postBalances": [ + 99999966447165, + 29952495, + 28000000, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 3, + "accounts": [ + 0, + 2 + ], + "data": "3Bxs4Bc3VYuGVB19", + "stackHeight": 2 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [ + 9, + 8, + 1 + ], + "data": "21HGgNSLz1yYgjRayL37XWwxDSqDsgEEKzhJdvMbV9nnMr13tjtwkoLbMueYAc31hWMwJeumTd6gHUMhYYiisoaGD6PMmkJPWNrjpDGwGBMmnUtkkEKnpWPWFr7eCCtM5bYsKt2ZBAwXMj8rPe9cQDZWBdTb2oMiowq3mLwxBfReMW3g3T18zyuc4KeJmJeF1Gn2ysQ6vpZZVWPAb9TA2xtGuzQ8ffBbVKP6BDH2ufNYkXfDL4zs", + "stackHeight": 2 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [1]", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 4419 of 987457 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 16849 of 999850 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 16999 + }, + "blockTime": 1746552086 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/4q1SasAEAJtPzZYGhLzqWpq6wgicJiW1rnMHKEypJasnUMNMU8MKpYhrYQNBmYjk2HqeZ1FVqSQzniHwKktzU5zn b/tests/data/transactions/batched_tree_transactions/4q1SasAEAJtPzZYGhLzqWpq6wgicJiW1rnMHKEypJasnUMNMU8MKpYhrYQNBmYjk2HqeZ1FVqSQzniHwKktzU5zn new file mode 100644 index 00000000..bb1c5b0f --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/4q1SasAEAJtPzZYGhLzqWpq6wgicJiW1rnMHKEypJasnUMNMU8MKpYhrYQNBmYjk2HqeZ1FVqSQzniHwKktzU5zn @@ -0,0 +1,97 @@ +{ + "slot": 239, + "transaction": [ + "Ab9zcEAasThm46TfKbD3LHDlyRL4OBTE+h38OxH6OpauUoZF00pWFxAMUvNExJ1cHieKvhXpCJXUAECWrLpIVw8BAAcKeiGC7CowvJIstkh88PnSr2WEDY9TdVntq2WiGjIGJiNPL8LQWvwrEthMKXEIoXESvMrPc33rl26npvlOS90m26eeSDlsVuDVTj+5sQPFmF4L4Yw5qusdd/SNQPAGVKJYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E+7ModRBcroW1tER2B+2/4UUnv7QjkRykBCO/0VJ6JnUG4FCb8ekxWdUOGPOGQ6saptATkLOvq2ORBg7Cpp2v+QIEAAUCQEIPAAUKAAAIBwkGAgUDAU8aEKkHFcryGUMAAAAAAAAAAAEAAAB6IYLsKjC8kiy2SHzw+dKvZYQNj1N1We2rZaIaMgYmI0BCDwAAAAAAAAAAAAAAAAABQEIPAAAAAAAB", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999959297150, + 30027510, + 35000000, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "postBalances": [ + 99999958287149, + 30032511, + 36000000, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 3, + "accounts": [ + 0, + 2 + ], + "data": "3Bxs4Bc3VYuGVB19", + "stackHeight": 2 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [ + 9, + 8, + 1 + ], + "data": "21HGgNSLz1yYgjRayL37XWwxDSqDsgEEKzhJdvMbV9nnMr13tjtwkoLbMueYAc31hWMwJeumb9Gc1LiMuYsMNygPUm4GLeEznXRmikdwMWrGY8wb9a5Cut7sbPnNE5uX8dmr3KyDHKZPajpz9g6Qa1DCEYv64bR2sh4Ff32phgCX4v9C4Y2QQwbGiHq8MMNA8VpHwMNCnWtMzn6F33iWdrL9vDs7pt2mLj9aXPdHd2EV4oF8d5Cb", + "stackHeight": 2 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [1]", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 3575 of 987457 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 16005 of 999850 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 16155 + }, + "blockTime": 1746552095 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/4yMU4gWnXfoLWoubDgUR4YZnjrEBw8umEFcYZKFvBqo5ynQDWqK6JvQBkDtKj5XRHQ5WA174LSW7JPgg1M62ws7C b/tests/data/transactions/batched_tree_transactions/4yMU4gWnXfoLWoubDgUR4YZnjrEBw8umEFcYZKFvBqo5ynQDWqK6JvQBkDtKj5XRHQ5WA174LSW7JPgg1M62ws7C new file mode 100644 index 00000000..c64dabc1 --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/4yMU4gWnXfoLWoubDgUR4YZnjrEBw8umEFcYZKFvBqo5ynQDWqK6JvQBkDtKj5XRHQ5WA174LSW7JPgg1M62ws7C @@ -0,0 +1,87 @@ +{ + "slot": 261, + "transaction": [ + "Acalx17MBOowBDXV2wv4VIdkJLg7wL4BQjmCL0onxvN5nWXPKupx/irb5ugLpY/ZNyXIOvm9tm/FcMby8HA+Kg8BAAcKeiGC7CowvJIstkh88PnSr2WEDY9TdVntq2WiGjIGJiNPL8LQWvwrEthMKXEIoXESvMrPc33rl26npvlOS90m2/KuWuX0POEKz8TJiMAjOgmV1yiV9Am40XHqZVvj8yn+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E+7ModRBcroW1tER2B+2/4UUnv7QjkRykBCO/0VJ6JnWrY4iAWvHsVg2VFyktcHcP2jMKKpzWs66D4AggZmq5SAIEAAUCQEIPAAULAAAIBwkGBQUDAgF7GhCpBxXK8hlvAAAAAAEAAAB6IYLsKjC8kiy2SHzw+dKvZYQNj1N1We2rZaIaMgYmI0BCDwAAAAAAAAAAAVgAAAABAAAAAQAAAAAAAAAAAAAtAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEIPAAAAAAAAAAEAAAAAAAAA", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999949107131, + 30122529, + 290204160, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "postBalances": [ + 99999949097130, + 30127530, + 290204160, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [ + 9, + 8, + 1, + 2 + ], + "data": "95YB9JH8MTYtuZfgNwFoqXrHy5VDXEW4kPmfEgc3KdSMnNobfdvWwaeY9fw2GKeGv5N3rG87DGxnpMSCwn1rYc7xuB4R2tABPs71USx2vCTVRLybLy9wZQ2qGGTck1JAZGnvZfBHXP8ScMcuUSrEr6GQG6HjLqGQoE4D32xLTxd2Fr33CFGKmaKnCWYoyZtmGcUaF93DvvLMkDqX75drkQQBwmHens197cjWGqARFE8eXoUb9zrDmE3DL5DbNtSscXybfzt2vy784BhhRaTznYNTiea8ev766trwm8QEY6DteXmH11qiRJeb2p3mJSP9toqS7EKNSBxkWNBQDH8S9KieHfy5qxfRRZgwPqW44Mnxnk5xF97NbzKB6Bt5dJgUufmcxcNpkfULf4PAFYTGyu", + "stackHeight": 2 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [1]", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 10113 of 983192 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 26808 of 999850 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 26958 + }, + "blockTime": 1746552105 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/4ziAGiDaJYa7VKk8mKD1ohKM8xXKvTCV7Q4kuHwdYGUVDVsuqNxuxtYeSrHea7Z87jezRSEw4oaHegWJbjEjsACz b/tests/data/transactions/batched_tree_transactions/4ziAGiDaJYa7VKk8mKD1ohKM8xXKvTCV7Q4kuHwdYGUVDVsuqNxuxtYeSrHea7Z87jezRSEw4oaHegWJbjEjsACz new file mode 100644 index 00000000..db3d86cd --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/4ziAGiDaJYa7VKk8mKD1ohKM8xXKvTCV7Q4kuHwdYGUVDVsuqNxuxtYeSrHea7Z87jezRSEw4oaHegWJbjEjsACz @@ -0,0 +1,97 @@ +{ + "slot": 163, + "transaction": [ + "AcfRTtAPevD1jct7gkf/P9yB7LRX+vjaXPBA8i9ex0YsbrD8THayy01jmiqARjqs/fu68J4CfIos2O1pxU1zRQsBAAcKeiGC7CowvJIstkh88PnSr2WEDY9TdVntq2WiGjIGJiNPL8LQWvwrEthMKXEIoXESvMrPc33rl26npvlOS90m26eeSDlsVuDVTj+5sQPFmF4L4Yw5qusdd/SNQPAGVKJYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E+7ModRBcroW1tER2B+2/4UUnv7QjkRykBCO/0VJ6JnUlVmozQpjQpT+xTSxR6W8ggp1YgCLzYF7qUZnThgJsVQIEAAUCQEIPAAUKAAAIBwkGAgUDAU8aEKkHFcryGUMAAAAAAAAAAAEAAAB6IYLsKjC8kiy2SHzw+dKvZYQNj1N1We2rZaIaMgYmI0BCDwAAAAAAAAAAAAAAAAABQEIPAAAAAAAB", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999991937214, + 29707446, + 3000000, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "postBalances": [ + 99999990927213, + 29712447, + 4000000, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 3, + "accounts": [ + 0, + 2 + ], + "data": "3Bxs4Bc3VYuGVB19", + "stackHeight": 2 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [ + 9, + 8, + 1 + ], + "data": "21HGgNSLz1yYgjRayL37XWwxDSqDsgEEKzhJdvMbV9nnMr13tjtwkoLbMueYAc31hWMwJeumRN3aWTqECf3YLJ6AtHS3RxdCZRtuBhmuxHrJKF8c8bNySZUZySLtXqQHzn7V8n1921jM5xcvF81c5nmnrJ56JWe3jFENPJxh5KS1kpc13jAejrJrKYNN42L5cJqfquXtEKq5ZZbJs9Yd1MK6uVXDMGj3w4zTAZJAM6njwcwevcP1", + "stackHeight": 2 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [1]", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 4419 of 987457 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 16849 of 999850 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 16999 + }, + "blockTime": 1746552059 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/54VRPEe3MaTAkF6aGFPJniFcFK8MXnn2wAaUSRYqRTPhSyBgAeQYenBhhD5Zaa1Lm9FatzcSBPaSEjR7BHtJwSU7 b/tests/data/transactions/batched_tree_transactions/54VRPEe3MaTAkF6aGFPJniFcFK8MXnn2wAaUSRYqRTPhSyBgAeQYenBhhD5Zaa1Lm9FatzcSBPaSEjR7BHtJwSU7 new file mode 100644 index 00000000..50acd6c3 --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/54VRPEe3MaTAkF6aGFPJniFcFK8MXnn2wAaUSRYqRTPhSyBgAeQYenBhhD5Zaa1Lm9FatzcSBPaSEjR7BHtJwSU7 @@ -0,0 +1,87 @@ +{ + "slot": 174, + "transaction": [ + "AcsT4GouvJ8zbYnlKO3oneLbkP2+ZwCSUoj3cqrG6QISLc9+IXpinM4l38boCwq3PrqV5cfemW9x98W+puQrIwgBAAcKeiGC7CowvJIstkh88PnSr2WEDY9TdVntq2WiGjIGJiNPL8LQWvwrEthMKXEIoXESvMrPc33rl26npvlOS90m2/KuWuX0POEKz8TJiMAjOgmV1yiV9Am40XHqZVvj8yn+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E+7ModRBcroW1tER2B+2/4UUnv7QjkRykBCO/0VJ6JnUVuircI737+F2TctR8E2z088wh/6wCL2PkmTwOAwZJHwIEAAUCQEIPAAULAAAIBwkGBQUDAgF7GhCpBxXK8hlvAAAAAAEAAAB6IYLsKjC8kiy2SHzw+dKvZYQNj1N1We2rZaIaMgYmI0BCDwAAAAAAAAAAAQ4AAAABAAAAAQAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEIPAAAAAAAAAAEAAAAAAAAA", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999986847205, + 29752455, + 290204160, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "postBalances": [ + 99999986837204, + 29757456, + 290204160, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [ + 9, + 8, + 1, + 2 + ], + "data": "95YB9JH8MTYtuZfgNwFoqXrHy1TvFCZ2x4S1aqttsC61BtzwFjuEAVFF2wXW8bsf5J4pKkfFtaeL1SjTvXvDjnycUZXh6HRgUM5xBPj59yBpmCPAaT4FSP3MNg35ZaarCVhFfn6gCMx1Z1cc64huYGR5gWxTVvNepVMYM5tRuaar4usVy8fQAW7yhnXAAQ9554u5WEKWvVqe7zqbzKrJvSGV5ABHX7DR2BEyBzZar1GKnTWL6jki3tNKtRRH1dxrieTf7z1D4HUscMALoQ48bgEKBNVc4mEFdzhna9ySLzZvGnm8PrvDaL1gwCk3eGXynNPoraEkKgmHbJsKDv8UnJmz6yJbbhGTVYnpYLJFXUJBZXHPmsjBJTKiBJ3FFoHacTLB4r491BY577hDBcb9Eo", + "stackHeight": 2 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [1]", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 10023 of 983192 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 26718 of 999850 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 26868 + }, + "blockTime": 1746552065 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/54g4aEKgEuaocPs2Eh8ipsviR67asWFnkPHSmaxBBMfreZZ4mzK6ZBSeqfMKt7MwPTqysYZVNof3rNfJPJtwdWNQ b/tests/data/transactions/batched_tree_transactions/54g4aEKgEuaocPs2Eh8ipsviR67asWFnkPHSmaxBBMfreZZ4mzK6ZBSeqfMKt7MwPTqysYZVNof3rNfJPJtwdWNQ new file mode 100644 index 00000000..1b641f4b --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/54g4aEKgEuaocPs2Eh8ipsviR67asWFnkPHSmaxBBMfreZZ4mzK6ZBSeqfMKt7MwPTqysYZVNof3rNfJPJtwdWNQ @@ -0,0 +1,97 @@ +{ + "slot": 206, + "transaction": [ + "Acs8YU1J+rCxW1qih7Atya9OtO+vJr+GFzkjgM3FA7JL9UTXGtj9A7evQ1nvlDK00FG0RyZUmZNccCmWtoH12g0BAAcKeiGC7CowvJIstkh88PnSr2WEDY9TdVntq2WiGjIGJiNPL8LQWvwrEthMKXEIoXESvMrPc33rl26npvlOS90m26eeSDlsVuDVTj+5sQPFmF4L4Yw5qusdd/SNQPAGVKJYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E+7ModRBcroW1tER2B+2/4UUnv7QjkRykBCO/0VJ6JnXXkMKKIQoyjQqGyrh1M2lGmJcLBIy2Sea69HwjVRSregIEAAUCQEIPAAUKAAAIBwkGAgUDAU8aEKkHFcryGUMAAAAAAAAAAAEAAAB6IYLsKjC8kiy2SHzw+dKvZYQNj1N1We2rZaIaMgYmI0BCDwAAAAAAAAAAAAAAAAABQEIPAAAAAAAB", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999973577178, + 29887482, + 21000000, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "postBalances": [ + 99999972567177, + 29892483, + 22000000, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 3, + "accounts": [ + 0, + 2 + ], + "data": "3Bxs4Bc3VYuGVB19", + "stackHeight": 2 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [ + 9, + 8, + 1 + ], + "data": "21HGgNSLz1yYgjRayL37XWwxDSqDsgEEKzhJdvMbV9nnMr13tjtwkoLbMueYAc31hWMwJeumbcEmuY7ko1E1kBBPyjiDJTddjV9HDA9toZ3fSmzTDMn4VaoMcqN87argXcLffDsQr9F2ERWo6j64yDcWdb1t5pN9cYsQ5XjAo9o466xQRW9g79sYBjwvVD9DSHwyRq1G46SpsmN8vZA4DC4ig66Z3GMbqD57ZVMEnGhiYSMC87r7", + "stackHeight": 2 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [1]", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 4419 of 987457 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 16849 of 999850 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 16999 + }, + "blockTime": 1746552079 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/59GGVQ6TsSVqbo64UBcvMiRFWE4aRVJ2aGWRMik95gENQhQ1ghEF391j7BAg1TnhxKih2MrRbsxDzD65hZt1ugog b/tests/data/transactions/batched_tree_transactions/59GGVQ6TsSVqbo64UBcvMiRFWE4aRVJ2aGWRMik95gENQhQ1ghEF391j7BAg1TnhxKih2MrRbsxDzD65hZt1ugog new file mode 100644 index 00000000..74edf6ea --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/59GGVQ6TsSVqbo64UBcvMiRFWE4aRVJ2aGWRMik95gENQhQ1ghEF391j7BAg1TnhxKih2MrRbsxDzD65hZt1ugog @@ -0,0 +1,97 @@ +{ + "slot": 160, + "transaction": [ + "Ac8xoneDQjfc2vaVl+mVc7lHS1jbe0rc6BTA21SBglvruf3iJoZSvuRbcmHRt6YEmjF+GulKU2LmV8T7vdSOFA8BAAcKeiGC7CowvJIstkh88PnSr2WEDY9TdVntq2WiGjIGJiNPL8LQWvwrEthMKXEIoXESvMrPc33rl26npvlOS90m26eeSDlsVuDVTj+5sQPFmF4L4Yw5qusdd/SNQPAGVKJYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E+7ModRBcroW1tER2B+2/4UUnv7QjkRykBCO/0VJ6JnW1A/RnEG6a0Ivo8Ect46zcqQkl6kqj6HUgjF9dawX0ZAIEAAUCQEIPAAUKAAAIBwkGAgUDAU8aEKkHFcryGUMAAAAAAAAAAAEAAAB6IYLsKjC8kiy2SHzw+dKvZYQNj1N1We2rZaIaMgYmI0BCDwAAAAAAAAAAAAAAAAABQEIPAAAAAAAB", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999992957216, + 29697444, + 2000000, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "postBalances": [ + 99999991947215, + 29702445, + 3000000, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 3, + "accounts": [ + 0, + 2 + ], + "data": "3Bxs4Bc3VYuGVB19", + "stackHeight": 2 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [ + 9, + 8, + 1 + ], + "data": "21HGgNSLz1yYgjRayL37XWwxDSqDsgEEKzhJdvMbV9nnMr13tjtwkoLbMueYAc31hWMwJeumUTfTLCyzFZFTCPVshgC69AVesVSmdkof8FvTLfbZvp2XJ4HTpWSuQGuSXBgCjv6WoiyAFW4845vnfXCrMp5ZHghyNmYoCULm3sXAFQifBcxo1MTnNW1kt2yQrupereeKnPn2B8jYG7beyz33usMHd1NqjCBwgFsvqNJYvumhHK35", + "stackHeight": 2 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [1]", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 4419 of 987457 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 16849 of 999850 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 16999 + }, + "blockTime": 1746552058 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/5BVxnCFLrjLUgXT9bouibZJtnpoBiUFcMSMvtPLWhvVDWP7pVG9RUBMPZfZaTos7jbgJXjm8rVpmo8CxvPb9UNYV b/tests/data/transactions/batched_tree_transactions/5BVxnCFLrjLUgXT9bouibZJtnpoBiUFcMSMvtPLWhvVDWP7pVG9RUBMPZfZaTos7jbgJXjm8rVpmo8CxvPb9UNYV new file mode 100644 index 00000000..99999e16 --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/5BVxnCFLrjLUgXT9bouibZJtnpoBiUFcMSMvtPLWhvVDWP7pVG9RUBMPZfZaTos7jbgJXjm8rVpmo8CxvPb9UNYV @@ -0,0 +1,97 @@ +{ + "slot": 266, + "transaction": [ + "AdEfSi5iwnSNqPwGObRL+xgF5hbPxxL4pkggvvZZ3ntp/bygyg0xbvqAbXVnIxEHlvd14uYUH2sHAoDijyxqvA4BAAcKeiGC7CowvJIstkh88PnSr2WEDY9TdVntq2WiGjIGJiNPL8LQWvwrEthMKXEIoXESvMrPc33rl26npvlOS90m26eeSDlsVuDVTj+5sQPFmF4L4Yw5qusdd/SNQPAGVKJYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E+7ModRBcroW1tER2B+2/4UUnv7QjkRykBCO/0VJ6JnVrT7fK/udjaMpk+mD/gQHOKzGuDMdFPL8Oa9679aH7DAIEAAUCQEIPAAUKAAAIBwkGAgUDAU8aEKkHFcryGUMAAAAAAAAAAAEAAAB6IYLsKjC8kiy2SHzw+dKvZYQNj1N1We2rZaIaMgYmI0BCDwAAAAAAAAAAAAAAAAABQEIPAAAAAAAB", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999948077128, + 30137532, + 46000000, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "postBalances": [ + 99999947067127, + 30142533, + 47000000, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 3, + "accounts": [ + 0, + 2 + ], + "data": "3Bxs4Bc3VYuGVB19", + "stackHeight": 2 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [ + 9, + 8, + 1 + ], + "data": "21HGgNSLz1yYgjRayL37XWwxDSqDsgEEKzhJdvMbV9nnMr13tjtwkoLbMueYAc31hWMwJeumXKhbhA8xPq9vdY9EbLc7mxXigtURM5f4nG7Ki9dss2woX4bLjR2fP49mXdAu4EgQiZTRdiF3ZhqZaEiKHkKJh6c48XNsNG78DG5tcrDGHPJdx2t5wqi1TQjV1D3rhYMwLsJ6imsd5NZKbcxMzvgb3aNdQuaQU5Tw8y4qJawhoamu", + "stackHeight": 2 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [1]", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 4419 of 987457 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 16849 of 999850 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 16999 + }, + "blockTime": 1746552108 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/5BumH2T9ZVMmzA5S8NZtwcHtuW6nXaZKuZBeA3GGiE7UzfJNPS39hAxj5NqJ5Kv51Wiuo7NhAtuaiVEtq2g6ZGgn b/tests/data/transactions/batched_tree_transactions/5BumH2T9ZVMmzA5S8NZtwcHtuW6nXaZKuZBeA3GGiE7UzfJNPS39hAxj5NqJ5Kv51Wiuo7NhAtuaiVEtq2g6ZGgn new file mode 100644 index 00000000..464264b6 --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/5BumH2T9ZVMmzA5S8NZtwcHtuW6nXaZKuZBeA3GGiE7UzfJNPS39hAxj5NqJ5Kv51Wiuo7NhAtuaiVEtq2g6ZGgn @@ -0,0 +1,87 @@ +{ + "slot": 219, + "transaction": [ + "AdF54sL1X2/d9JxsdjXdQifkx4WtsCD5ori/tAWkWCj+VgrjQM7mgYoG+jr7rvS5qq7HytFmez9yS+J5outvKw8BAAcKeiGC7CowvJIstkh88PnSr2WEDY9TdVntq2WiGjIGJiNPL8LQWvwrEthMKXEIoXESvMrPc33rl26npvlOS90m2/KuWuX0POEKz8TJiMAjOgmV1yiV9Am40XHqZVvj8yn+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E+7ModRBcroW1tER2B+2/4UUnv7QjkRykBCO/0VJ6JnVLgQtfVmdd2qhYyyl2SfVAh25VbNcRyxjOP4TDVuk6wwIEAAUCQEIPAAULAAAIBwkGBQUDAgF7GhCpBxXK8hlvAAAAAAEAAAB6IYLsKjC8kiy2SHzw+dKvZYQNj1N1We2rZaIaMgYmI0BCDwAAAAAAAAAAATQAAAABAAAAAQAAAAAAAAAAAAAbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEIPAAAAAAAAAAEAAAAAAAAA", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999967467167, + 29942493, + 290204160, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "postBalances": [ + 99999967457166, + 29947494, + 290204160, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [ + 9, + 8, + 1, + 2 + ], + "data": "95YB9JH8MTYtuZfgNwFoqXrHy7959YdieueKVvdviVmXuHNggmmuKUfUi1fJTAUGCjd6oma3xfqQzcvg6S2RqRiLwWLGXTuHoS3r38xa7csyamaxTeVgwFiQTETZnpyuvUr2gG8ER1AbKHGP3Y29BaydQn9VwhRxisdXWn7CS2Y8XyBSVdFFSjki4VmK32VJv6dS1ibeDBP3cZUoNCbp6LMjUYYtTPf4LTmgYC8x1HZwUHffkGB5gXJJ4uCRzpAuBaFtMnmtDxB93qYQoEWWT11DtcD6fUuWvzET4iARLevmQUgwK1CK9SzeBXMbHvJP72SNSot5huMPF1T56ow5aUXdsc7MaXyTWZj4R5hddwmvX62oPWbpgWfhD3ARhERimFziXLg4MLsJ5fZCJ8ZMBV", + "stackHeight": 2 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [1]", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 10101 of 983192 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 26796 of 999850 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 26946 + }, + "blockTime": 1746552086 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/5H9EjeV2UzmxU75VQLLnfe6XosLy2jUP7F9q5bz7j3LmrMGw2TZSgy3rjTeZD9S86bVx2rxvPnT1RoNBgnmjEbni b/tests/data/transactions/batched_tree_transactions/5H9EjeV2UzmxU75VQLLnfe6XosLy2jUP7F9q5bz7j3LmrMGw2TZSgy3rjTeZD9S86bVx2rxvPnT1RoNBgnmjEbni new file mode 100644 index 00000000..bfebf23d --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/5H9EjeV2UzmxU75VQLLnfe6XosLy2jUP7F9q5bz7j3LmrMGw2TZSgy3rjTeZD9S86bVx2rxvPnT1RoNBgnmjEbni @@ -0,0 +1,97 @@ +{ + "slot": 249, + "transaction": [ + "AdX8/jIqTXGarqo+XpfJlM62ZrSwB/ifpengBL4EbKp4/I3OqQvgwzQh0KlKYk6CEKtxWkZKaH8dDpmHsHIh0AsBAAcKeiGC7CowvJIstkh88PnSr2WEDY9TdVntq2WiGjIGJiNPL8LQWvwrEthMKXEIoXESvMrPc33rl26npvlOS90m26eeSDlsVuDVTj+5sQPFmF4L4Yw5qusdd/SNQPAGVKJYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E+7ModRBcroW1tER2B+2/4UUnv7QjkRykBCO/0VJ6JnWI0NtWzmJXvi6Mz1uGk8CbVgKyZABag84ORyZGocT7FQIEAAUCQEIPAAUKAAAIBwkGAgUDAU8aEKkHFcryGUMAAAAAAAAAAAEAAAB6IYLsKjC8kiy2SHzw+dKvZYQNj1N1We2rZaIaMgYmI0BCDwAAAAAAAAAAAAAAAAABQEIPAAAAAAAB", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999955217142, + 30067518, + 39000000, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "postBalances": [ + 99999954207141, + 30072519, + 40000000, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 3, + "accounts": [ + 0, + 2 + ], + "data": "3Bxs4Bc3VYuGVB19", + "stackHeight": 2 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [ + 9, + 8, + 1 + ], + "data": "21HGgNSLz1yYgjRayL37XWwxDSqDsgEEKzhJdvMbV9nnMr13tjtwkoLbMueYAc31hWMwJeumWvFbNewds8LCzyUdXnEbUpeL222qNyMV2VQB7pHwY7UN4HZnfj8WxKGWnYiDj5MYvjyTZSnngYQEkuNspVQcUjc5mMgbsrCJXnZLTgCztA813kkMRFneTfTAGEiBzkAbrzwY3G8xyaGPioiE9ARgnowow2ntb2jfFBsLNPvLxGP1", + "stackHeight": 2 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [1]", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 4419 of 987457 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 16849 of 999850 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 16999 + }, + "blockTime": 1746552100 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/5RUEfgGp77ith9BY6pmbi8cJ8vhzusdQcyayiYu5dEE9Xhs9uDSDh6vncw2cPF34fiQqe518neLpCWpdiA3whG2D b/tests/data/transactions/batched_tree_transactions/5RUEfgGp77ith9BY6pmbi8cJ8vhzusdQcyayiYu5dEE9Xhs9uDSDh6vncw2cPF34fiQqe518neLpCWpdiA3whG2D new file mode 100644 index 00000000..4a3aa594 --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/5RUEfgGp77ith9BY6pmbi8cJ8vhzusdQcyayiYu5dEE9Xhs9uDSDh6vncw2cPF34fiQqe518neLpCWpdiA3whG2D @@ -0,0 +1,97 @@ +{ + "slot": 196, + "transaction": [ + "Ad0rbOYrLna0p8Wv4tY8R1Gnm6imgAiNLO8O9VdhTKPG1ZuwcGXqPBbX7JkkNQmUa0zxB7dN7appYZfYXzVwVQIBAAcKeiGC7CowvJIstkh88PnSr2WEDY9TdVntq2WiGjIGJiNPL8LQWvwrEthMKXEIoXESvMrPc33rl26npvlOS90m26eeSDlsVuDVTj+5sQPFmF4L4Yw5qusdd/SNQPAGVKJYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E+7ModRBcroW1tER2B+2/4UUnv7QjkRykBCO/0VJ6JnVolMexjt1Jn6MFePJajapr0xIQA0S0i2cO/fBIAGJ9/QIEAAUCQEIPAAUKAAAIBwkGAgUDAU8aEKkHFcryGUMAAAAAAAAAAAEAAAB6IYLsKjC8kiy2SHzw+dKvZYQNj1N1We2rZaIaMgYmI0BCDwAAAAAAAAAAAAAAAAABQEIPAAAAAAAB", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999977657186, + 29847474, + 17000000, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "postBalances": [ + 99999976647185, + 29852475, + 18000000, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 3, + "accounts": [ + 0, + 2 + ], + "data": "3Bxs4Bc3VYuGVB19", + "stackHeight": 2 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [ + 9, + 8, + 1 + ], + "data": "21HGgNSLz1yYgjRayL37XWwxDSqDsgEEKzhJdvMbV9nnMr13tjtwkoLbMueYAc31hWMwJeumZnhnCaWq8HRH6yNhHLYbiTRzSxk4SK5MWUMnbLiagyiSLKXzFy6FVR1dv3VcCRbbYxDBU2k5HxUFoYARSrmbCphRnYsyYybVDSxW8XhisCcq1LMKjSefTBmYYKrYtFZezrpX4Rq1dC8JtYuDa7VAxdqurGDNXTbjzKqHzzo6D1ZH", + "stackHeight": 2 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [1]", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 4419 of 987457 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 16849 of 999850 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 16999 + }, + "blockTime": 1746552075 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/5T7cokcLawUu2NmqtupD96axnMUdVGU3aBHprJjcnMa6fv1xZ6mUky3hYVg4eWWisMZc6YHMcHahHxrHMSHoPCNe b/tests/data/transactions/batched_tree_transactions/5T7cokcLawUu2NmqtupD96axnMUdVGU3aBHprJjcnMa6fv1xZ6mUky3hYVg4eWWisMZc6YHMcHahHxrHMSHoPCNe new file mode 100644 index 00000000..369474b9 --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/5T7cokcLawUu2NmqtupD96axnMUdVGU3aBHprJjcnMa6fv1xZ6mUky3hYVg4eWWisMZc6YHMcHahHxrHMSHoPCNe @@ -0,0 +1,83 @@ +{ + "slot": 319, + "transaction": [ + "Ad6WecG/WVpTfG0Fm4fX6XoYRtz63+z/NGrQ4E70liU43kBQWtdvt49H0v76iD73Te7nxbrDs0msUDX/PdFnXAMBAAUJ7DDUiI4IcYFkGbvXWaOx6/U8oHfKVZ1qGOt5OIzPzJlMm20YZ6Hmhtq+9LocAayVnPPWJjXrHQ48WcmoYfd2+U8vwtBa/CsS2EwpcQihcRK8ys9zfeuXbqem+U5L3Sbb8q5a5fQ84QrPxMmIwCM6CZXXKJX0CbjRceplW+PzKf4FDSsTeVE2hc8C8rX9UpG9lZsrBgqlJepbNIE7Hbm3bgksNuwi9ReDAP20Sqpq/8/wpG4cvGQcDj7QnaE7nvUIC7wPwLtHyi90xBEulKsTz6PGNOXcF+rLA80aI81+eHwQpl591jkE+Dg60Dze4Hi5FNhzGIA7FTWAcNeS4Fz957/QmmoHZdEI20ACv+9MyGVTFGij2iz8yvlzRZ4iyBL0krp2Z9V7VlorJ5IJq2STxxwnVbk9kN17ZR9/n9uTutwBBAgBAAcIBQYDAq0B3cID2CU+3JP/oAAAACv8ve8MmiSoLzfcRNGA0RIClZe0OreDIR4Kbtv97Hg1HFH0X1GAwzStMrfxtkuihMqsXeI811pTEechnzVxeGEZKT7xxtH3Df5GjCObd2QnGDpxxqORIrKdV82SA6BjhB6djptiXmHaCAK/T1IlZ4bmb5rceEEd3Q8m4NP3/iYKmIAb7zeBWne23QkLkuAissNYx9yMdi7aSTUTWepiyvI=", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999995053200, + 2735280, + 30177540, + 290204160, + 1141440, + 1141440, + 1141440, + 0, + 1614720 + ], + "postBalances": [ + 99999995048200, + 2735280, + 30177540, + 290204160, + 1141440, + 1141440, + 1141440, + 0, + 1614720 + ], + "innerInstructions": [ + { + "index": 0, + "instructions": [ + { + "programIdIndex": 5, + "accounts": [ + 7, + 8, + 6, + 3, + 2 + ], + "data": "ZZpa4B1Y3ym6r8942PwgLZGUv7GjPQdxa8X8L8NtV2ZsWuKPnZj9GsJ7FDDy3QiZDGF4w3VkeCFkHEKXt31ZcTpJTpoUe7v3JNrGGEyCXbXPpRHUhywaunzfCzeQdVjHxfmRn7ViQms2YaZni9p7nThDL92WQ5WHK96WLQJi2sjP6HGWP3wwoQJKaszLeRXvKoE5QDTuU6iBDr8RghEDZnU7wcP65QcoHWNm8H1ycss", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [], + "data": "V55KweBRnUHGkEaUisCdgyHtJHJb7ZCcjbWeUQUySHhE99UpZCoaW1oHSmM2cL6HJHmjSipySsSx28yHoe48vtJooHL5xbLHZjHitAHPMHYZFK8erz7NKuYq5LJphyCk54sQZZkm8sshYJSD3sg8fNMsuMro9HmRQf548vQHmE4MxyQ3RxDtPyddi7ZmnNhVF1iYnSfxDxdg", + "stackHeight": 3 + } + ] + } + ], + "logMessages": [ + "Program Lighton6oQpVkeewmo2mcPTQQp7kYHr4fWpAgJyEmDX invoke [1]", + "Program log: Instruction: BatchAppend", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: BatchAppend", + "Program noopb9bkMVfRPU8AsbpTUg8AQkHtKwMYZiFUjNRtMmV invoke [3]", + "Program noopb9bkMVfRPU8AsbpTUg8AQkHtKwMYZiFUjNRtMmV consumed 38 of 79855 compute units", + "Program noopb9bkMVfRPU8AsbpTUg8AQkHtKwMYZiFUjNRtMmV success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 103162 of 182790 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program Lighton6oQpVkeewmo2mcPTQQp7kYHr4fWpAgJyEmDX consumed 122351 of 200000 compute units", + "Program Lighton6oQpVkeewmo2mcPTQQp7kYHr4fWpAgJyEmDX success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 122351 + }, + "blockTime": 1746552133 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/5Z32rKAgkoQm9SuTGgMKRaHPoQrciJHDr2nVEo7hosnBCuXQSyo9V1f1MD9KPpri2Y2rCpfCcGLN4BpsCJ55by2V b/tests/data/transactions/batched_tree_transactions/5Z32rKAgkoQm9SuTGgMKRaHPoQrciJHDr2nVEo7hosnBCuXQSyo9V1f1MD9KPpri2Y2rCpfCcGLN4BpsCJ55by2V new file mode 100644 index 00000000..2deb4e54 --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/5Z32rKAgkoQm9SuTGgMKRaHPoQrciJHDr2nVEo7hosnBCuXQSyo9V1f1MD9KPpri2Y2rCpfCcGLN4BpsCJ55by2V @@ -0,0 +1,97 @@ +{ + "slot": 256, + "transaction": [ + "AeOxnDT4I/P3m9JC8FNDGKPB0FMcNazD85tFieAdAChYR5BwqG11okl/I1m0roTeTgEsWpRpis5aFSmBhkISqgYBAAcKeiGC7CowvJIstkh88PnSr2WEDY9TdVntq2WiGjIGJiNPL8LQWvwrEthMKXEIoXESvMrPc33rl26npvlOS90m26eeSDlsVuDVTj+5sQPFmF4L4Yw5qusdd/SNQPAGVKJYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E+7ModRBcroW1tER2B+2/4UUnv7QjkRykBCO/0VJ6JnXdi2C4HK8ZOPL4lE/vrbvRGDzRrgsjTEtL21XOjMi5iQIEAAUCQEIPAAUKAAAIBwkGAgUDAU8aEKkHFcryGUMAAAAAAAAAAAEAAAB6IYLsKjC8kiy2SHzw+dKvZYQNj1N1We2rZaIaMgYmI0BCDwAAAAAAAAAAAAAAAAABQEIPAAAAAAAB", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999952157136, + 30097524, + 42000000, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "postBalances": [ + 99999951147135, + 30102525, + 43000000, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 3, + "accounts": [ + 0, + 2 + ], + "data": "3Bxs4Bc3VYuGVB19", + "stackHeight": 2 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [ + 9, + 8, + 1 + ], + "data": "21HGgNSLz1yYgjRayL37XWwxDSqDsgEEKzhJdvMbV9nnMr13tjtwkoLbMueYAc31hWMwJeumUsBxs5tBXQ5ohogdXRUnh1tYmEtoH67AfGvG8oUG4EYJadMpdeBcRKx9eBE7GF9uCv71WKATvHzT1WAeVT7Lya4acuVeMokxHR7n86GvZaay246BDq3gpSh1PXR37N51tAkZ6pzJn7VYofDX2NEvXotwDq9BTit9u4GzEAA4PJtF", + "stackHeight": 2 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [1]", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 4419 of 987457 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 16849 of 999850 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 16999 + }, + "blockTime": 1746552103 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/5aEpoHM1WLxCKb1Bzsbg56hsLd7W6TNJarC5tf5tjjutgLfd6yLzRbu9ceYcx9Ps5KzrVfAMsQDs3NPkZzPV9WTM b/tests/data/transactions/batched_tree_transactions/5aEpoHM1WLxCKb1Bzsbg56hsLd7W6TNJarC5tf5tjjutgLfd6yLzRbu9ceYcx9Ps5KzrVfAMsQDs3NPkZzPV9WTM new file mode 100644 index 00000000..0e8381f9 --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/5aEpoHM1WLxCKb1Bzsbg56hsLd7W6TNJarC5tf5tjjutgLfd6yLzRbu9ceYcx9Ps5KzrVfAMsQDs3NPkZzPV9WTM @@ -0,0 +1,87 @@ +{ + "slot": 267, + "transaction": [ + "AeS7Qmay/AfVyIsBTy3TYJ/4v8tJ0NgQqXLoPfhY4aXAa8ilZw0d2u+9korMBr7EBapLNB5OeksSpIRSXq+UXQwBAAcKeiGC7CowvJIstkh88PnSr2WEDY9TdVntq2WiGjIGJiNPL8LQWvwrEthMKXEIoXESvMrPc33rl26npvlOS90m2/KuWuX0POEKz8TJiMAjOgmV1yiV9Am40XHqZVvj8yn+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E+7ModRBcroW1tER2B+2/4UUnv7QjkRykBCO/0VJ6JnUcJExQaztVO15rCI1/l1t+vH9f+Fh/wdAchXvnmJYx/AIEAAUCQEIPAAULAAAIBwkGBQUDAgF7GhCpBxXK8hlvAAAAAAEAAAB6IYLsKjC8kiy2SHzw+dKvZYQNj1N1We2rZaIaMgYmI0BCDwAAAAAAAAAAAVwAAAABAAAAAQAAAAAAAAAAAAAvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEIPAAAAAAAAAAEAAAAAAAAA", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999947067127, + 30142533, + 290204160, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "postBalances": [ + 99999947057126, + 30147534, + 290204160, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [ + 9, + 8, + 1, + 2 + ], + "data": "95YB9JH8MTYtuZfgNwFoqXrHyBU1P2ZdVbWzsDYQobjeybRR1m9diRZYaXeKi9rj3a5cxhB7xjN3U1dGLfo8SF7GD1eRrHdBrTTvmUn5rpMLYZeJPArwaLPSssG1qM2tY2F4gJfuek1cCwNuxLvqcVJ2puAvR4AKveTXUzgSwCoiQyevdtjFa6auhZ6u7XuxbZWq1AMU6rJqbyPYoMS7jNoLZToQHWrzPv5MXt31xkGQDABtid2sdPK5PTXKkRQRguFJQMPCfxK2eMi9P79eXLpykKH1GU7kqaUNXPeyBp1Xw7M1Pjiribd4XnonkRyK11uVpsSLMW4QpWHkh5SvWzcPH6fMCsn9NT6RuPuWvMGLpzQi4yqftpcZRQ5Qt4vXKYwJJyEZBWpqxLfrWcLRPV", + "stackHeight": 2 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [1]", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 10101 of 983192 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 26796 of 999850 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 26946 + }, + "blockTime": 1746552108 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/5bvTAWNbP4YEjXz3GRzQnWKkEq9FffP3uqS7EHFhsjjrSZ3mMaJWuvThZv1Q2toPPSAWTmXHS9cNutkAEfnb7Fbi b/tests/data/transactions/batched_tree_transactions/5bvTAWNbP4YEjXz3GRzQnWKkEq9FffP3uqS7EHFhsjjrSZ3mMaJWuvThZv1Q2toPPSAWTmXHS9cNutkAEfnb7Fbi new file mode 100644 index 00000000..8d7c118b --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/5bvTAWNbP4YEjXz3GRzQnWKkEq9FffP3uqS7EHFhsjjrSZ3mMaJWuvThZv1Q2toPPSAWTmXHS9cNutkAEfnb7Fbi @@ -0,0 +1,97 @@ +{ + "slot": 155, + "transaction": [ + "AeYu2xbl9W+jxhTrflifAJbHJlybFSST6QEHUW1tfllpwko/3L9DyEziUIHTcWcX7yUrz2n9BJmeDs114Ecb/wUBAAcKeiGC7CowvJIstkh88PnSr2WEDY9TdVntq2WiGjIGJiNPL8LQWvwrEthMKXEIoXESvMrPc33rl26npvlOS90m26eeSDlsVuDVTj+5sQPFmF4L4Yw5qusdd/SNQPAGVKJYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E+7ModRBcroW1tER2B+2/4UUnv7QjkRykBCO/0VJ6JnUXsZe5Vkvv+X8Kxkxl5suy3HF9NdmMxwtCytOXMTzvvwIEAAUCQEIPAAUKAAAIBwkGAgUDAU8aEKkHFcryGUMAAAAAAAAAAAEAAAB6IYLsKjC8kiy2SHzw+dKvZYQNj1N1We2rZaIaMgYmI0BCDwAAAAAAAAAAAAAAAAABQEIPAAAAAAAB", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999994997220, + 29677440, + 0, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "postBalances": [ + 99999993987219, + 29682441, + 1000000, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 3, + "accounts": [ + 0, + 2 + ], + "data": "3Bxs4Bc3VYuGVB19", + "stackHeight": 2 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [ + 9, + 8, + 1 + ], + "data": "21HGgNSLz1yYgjRayL37XWwxDSqDsgEEKzhJdvMbV9nnMr13tjtwkoLbMueYAc31hWMwJeumcsZXCfopr3W6iZMTU79VGVRzbEymigfM8AwjCHN4LEhCFkjYT5GS1rbvbESWoe4ctSaTqMuTLkKiwtXwU4RxHedDrEZzAUCoxpXLsdoxY97ZboEX3wMugNZ4b3sabxHa16asHVHnNJ81Ugv8X2NwZgtYEJpaMGhRNF5RUVRNzUVd", + "stackHeight": 2 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [1]", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 3579 of 987457 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 16009 of 999850 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 16159 + }, + "blockTime": 1746552056 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/5gwPZZUz2YdQAShf3NDPYja37VsXatxnjkiBsRkXptQzV1cnYYrBa5n9SZqFDen7W1YYyPLEF831gRZJXoQfgUyz b/tests/data/transactions/batched_tree_transactions/5gwPZZUz2YdQAShf3NDPYja37VsXatxnjkiBsRkXptQzV1cnYYrBa5n9SZqFDen7W1YYyPLEF831gRZJXoQfgUyz new file mode 100644 index 00000000..1a94adca --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/5gwPZZUz2YdQAShf3NDPYja37VsXatxnjkiBsRkXptQzV1cnYYrBa5n9SZqFDen7W1YYyPLEF831gRZJXoQfgUyz @@ -0,0 +1,87 @@ +{ + "slot": 257, + "transaction": [ + "AeqCP8ULsRzOXxB8dnoCHlryie51T1Tn5G6lofKkH5+GdTBCTMLjGPVZtT2WY2RVV6RKLC5O2bYnDdPEs+LbUQ0BAAcKeiGC7CowvJIstkh88PnSr2WEDY9TdVntq2WiGjIGJiNPL8LQWvwrEthMKXEIoXESvMrPc33rl26npvlOS90m2/KuWuX0POEKz8TJiMAjOgmV1yiV9Am40XHqZVvj8yn+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E+7ModRBcroW1tER2B+2/4UUnv7QjkRykBCO/0VJ6JnUSG/4im2q2cSARIsW3u9oG3CuOrNNY4tS7Cx4j46be0QIEAAUCQEIPAAULAAAIBwkGBQUDAgF7GhCpBxXK8hlvAAAAAAEAAAB6IYLsKjC8kiy2SHzw+dKvZYQNj1N1We2rZaIaMgYmI0BCDwAAAAAAAAAAAVQAAAABAAAAAQAAAAAAAAAAAAArAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEIPAAAAAAAAAAEAAAAAAAAA", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999951147135, + 30102525, + 290204160, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "postBalances": [ + 99999951137134, + 30107526, + 290204160, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [ + 9, + 8, + 1, + 2 + ], + "data": "95YB9JH8MTYtuZfgNwFoqXrHxzVhbeC2NRqakF9oQuPh5djf5cmxkku89LCcBB8bCqUqdiLdL3uMPXgQB6z9pW3Z4HLifXrypcmknF9aRNvo9k6K4BxF9WNREbwKmVYPqdADmvS98CAqgRLxk9STbMP23D73EsMnm3ddJth9TLNj1rwo6rtLomM5eXgL76g62iVgWWVpvdv86EKFVVmwtq52YmjnCGZdnW6MptvtWWBYNgHZs3XhJeseB9fCSDfFK8RLmpgBdTiEqBFHZG3dW7c1BTgnMQTubwuAmPnMFzui1QMGwnEF98Yg3NwirNzRYVusN5s3pziPszH1uARuQPaNrLYVx6p93Xg6sCa9gysjMPQdHt9HsDY3HMxAZpGdUfo2csGuugANmSg1u6X9kb", + "stackHeight": 2 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [1]", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 10101 of 983192 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 26796 of 999850 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 26946 + }, + "blockTime": 1746552103 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/5hZkoNnDvWcnw56bGsF8enQVTgrszXdJA4ALA3hXV2L2d89GK5Yc8yfvfkFAuobhpeGznTM61nFcTSRvdQwB128m b/tests/data/transactions/batched_tree_transactions/5hZkoNnDvWcnw56bGsF8enQVTgrszXdJA4ALA3hXV2L2d89GK5Yc8yfvfkFAuobhpeGznTM61nFcTSRvdQwB128m new file mode 100644 index 00000000..845e81c6 --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/5hZkoNnDvWcnw56bGsF8enQVTgrszXdJA4ALA3hXV2L2d89GK5Yc8yfvfkFAuobhpeGznTM61nFcTSRvdQwB128m @@ -0,0 +1,97 @@ +{ + "slot": 218, + "transaction": [ + "AesMq1JefvMkp/0DCC7vdEQ/HRqC3XG2M9TRBmumgI0vb0QX0NmuCKbwGF3JjFNZ93Ut7CgAXQMJz6wZQe2BlAYBAAcKeiGC7CowvJIstkh88PnSr2WEDY9TdVntq2WiGjIGJiNPL8LQWvwrEthMKXEIoXESvMrPc33rl26npvlOS90m26eeSDlsVuDVTj+5sQPFmF4L4Yw5qusdd/SNQPAGVKJYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E+7ModRBcroW1tER2B+2/4UUnv7QjkRykBCO/0VJ6JnWMN7yks48RNgE9lmm7TuDkWTFsE3EpnFaEANybQvhKVQIEAAUCQEIPAAUKAAAIBwkGAgUDAU8aEKkHFcryGUMAAAAAAAAAAAEAAAB6IYLsKjC8kiy2SHzw+dKvZYQNj1N1We2rZaIaMgYmI0BCDwAAAAAAAAAAAAAAAAABQEIPAAAAAAAB", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999968477168, + 29937492, + 26000000, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "postBalances": [ + 99999967467167, + 29942493, + 27000000, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 3, + "accounts": [ + 0, + 2 + ], + "data": "3Bxs4Bc3VYuGVB19", + "stackHeight": 2 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [ + 9, + 8, + 1 + ], + "data": "21HGgNSLz1yYgjRayL37XWwxDSqDsgEEKzhJdvMbV9nnMr13tjtwkoLbMueYAc31hWMwJeumWRfFS3jubZiesiykv7gyfFJhorNvjrwCQJCrcTkvkFC4qX1KaDjW5cCdBxKiVKeDW6qvywTzdz4FFbXgCaTivcH8iUhN1N41DnCn95qWfwVAnJypDrSHk613Z1oqGX3YL5s2GG78jyJeSKoeXYz1fqXAs5LP5NEDXJBu5BiWFbzo", + "stackHeight": 2 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [1]", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 4419 of 987457 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 16849 of 999850 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 16999 + }, + "blockTime": 1746552085 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/5i18KvLpdTcu5sUHAqYiEJ4hkroV4vexJ5SuJmfW1fvrCqaXZm5qbczmXF6ax3v3tJ4KPfer7jrBeabq2cZ44p39 b/tests/data/transactions/batched_tree_transactions/5i18KvLpdTcu5sUHAqYiEJ4hkroV4vexJ5SuJmfW1fvrCqaXZm5qbczmXF6ax3v3tJ4KPfer7jrBeabq2cZ44p39 new file mode 100644 index 00000000..29db8f86 --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/5i18KvLpdTcu5sUHAqYiEJ4hkroV4vexJ5SuJmfW1fvrCqaXZm5qbczmXF6ax3v3tJ4KPfer7jrBeabq2cZ44p39 @@ -0,0 +1,87 @@ +{ + "slot": 217, + "transaction": [ + "AettPTaj1S7jowpQ6kgNj6McA7mApxB5PaNGa43emBw8gXkhe5Du/LBzuh5KeKC4rLqwCEgVwfqo9mOB5wyiCQABAAcKeiGC7CowvJIstkh88PnSr2WEDY9TdVntq2WiGjIGJiNPL8LQWvwrEthMKXEIoXESvMrPc33rl26npvlOS90m2/KuWuX0POEKz8TJiMAjOgmV1yiV9Am40XHqZVvj8yn+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E+7ModRBcroW1tER2B+2/4UUnv7QjkRykBCO/0VJ6JnXf0VGJdKBCT955GMmXt6GPf3qvuiJ/yMCU285RzJo4xgIEAAUCQEIPAAULAAAIBwkGBQUDAgF7GhCpBxXK8hlvAAAAAAEAAAB6IYLsKjC8kiy2SHzw+dKvZYQNj1N1We2rZaIaMgYmI0BCDwAAAAAAAAAAATIAAAABAAAAAQAAAAAAAAAAAAAaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEIPAAAAAAAAAAEAAAAAAAAA", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999968487169, + 29932491, + 290204160, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "postBalances": [ + 99999968477168, + 29937492, + 290204160, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [ + 9, + 8, + 1, + 2 + ], + "data": "95YB9JH8MTYtuZfgNwFoqXrHy4eVUCVWLyKwgoqoBjosAFmitsA8hMWG9PERjWZc22pLNxrEHscbVR9wcC82xNXiRTsuKPuMbBncpKTCh8xJkAwWUfygUyxf3FRWHLXtEPS2hnrNGYzAFvZ8U34anCvfoNG3cyz2kqixRM7H1SmAbaXRDCWSTFCjgGZqmcKKbXsfkwE1uTb3UsVYuzU8Mo7bxCFcSBy2CTniZQ4smpXH1gdzJbAKtQPKEuoBVwHp5DcXkkB99HMfwzWkuoEujNrECHMWG4ZjMY8gcdbspTCyhDHkpxUNtjakqxz74e2jXDpYGAs3U1cdt4aYTo6NQGRuT3zRYCYX5AwatfPzFNQh7ERfNiTtkSAvfUWtovxTHud3ti6cFUd8cJHHTS1pW3", + "stackHeight": 2 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [1]", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 10101 of 983192 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 26796 of 999850 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 26946 + }, + "blockTime": 1746552085 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/5kJXtZvkGPZQeTmAtHQV3CbGHAxcjD38NfPrvLwyXtbxgVTQmKK65EHaesWXtFkNxgwHeLpQMAkJFhPZ5WVsBiXC b/tests/data/transactions/batched_tree_transactions/5kJXtZvkGPZQeTmAtHQV3CbGHAxcjD38NfPrvLwyXtbxgVTQmKK65EHaesWXtFkNxgwHeLpQMAkJFhPZ5WVsBiXC new file mode 100644 index 00000000..e277e8dc --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/5kJXtZvkGPZQeTmAtHQV3CbGHAxcjD38NfPrvLwyXtbxgVTQmKK65EHaesWXtFkNxgwHeLpQMAkJFhPZ5WVsBiXC @@ -0,0 +1,97 @@ +{ + "slot": 251, + "transaction": [ + "Ae1pBY4juxoA6I/1xlJfJr1W1HAUuYJ0dUMp27kN1Jag7x3KUPNysjBSSF01VyQZeLj8dh9JTVAioWg6vHPaLQsBAAcKeiGC7CowvJIstkh88PnSr2WEDY9TdVntq2WiGjIGJiNPL8LQWvwrEthMKXEIoXESvMrPc33rl26npvlOS90m26eeSDlsVuDVTj+5sQPFmF4L4Yw5qusdd/SNQPAGVKJYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E+7ModRBcroW1tER2B+2/4UUnv7QjkRykBCO/0VJ6JnW7pd10kaJ1svZLoen7xzbgjuGPGtxfy5+HzZSMOobiewIEAAUCQEIPAAUKAAAIBwkGAgUDAU8aEKkHFcryGUMAAAAAAAAAAAEAAAB6IYLsKjC8kiy2SHzw+dKvZYQNj1N1We2rZaIaMgYmI0BCDwAAAAAAAAAAAAAAAAABQEIPAAAAAAAB", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999954197140, + 30077520, + 40000000, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "postBalances": [ + 99999953187139, + 30082521, + 41000000, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 3, + "accounts": [ + 0, + 2 + ], + "data": "3Bxs4Bc3VYuGVB19", + "stackHeight": 2 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [ + 9, + 8, + 1 + ], + "data": "21HGgNSLz1yYgjRayL37XWwxDSqDsgEEKzhJdvMbV9nnMr13tjtwkoLbMueYAc31hWMwJeumc84bL8XHepBq2JDEmM17zkHcmdrvcG41YnkhYd8TaNu4eZrU2wharYj5FkZLrVGGCb5uECwQeVnG7hpoFodkZFUipwRpE5axaL5NZ4SBq8fyhiaH23TeFjj5FAiWb7LjDPTBGRMXQWeKHj3zVGxwKqPmEm15VVeLXNDH7V5ZKWjR", + "stackHeight": 2 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [1]", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 3575 of 987457 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 16005 of 999850 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 16155 + }, + "blockTime": 1746552101 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/5omrVidybz4ZaWKmjdKruNE3Wp3KKZ8ZtU6FMQPTLW9SBZA7W1Dxk3DJfqy9CCz1qmtBgkAEWjpymVnjnmnF8xb6 b/tests/data/transactions/batched_tree_transactions/5omrVidybz4ZaWKmjdKruNE3Wp3KKZ8ZtU6FMQPTLW9SBZA7W1Dxk3DJfqy9CCz1qmtBgkAEWjpymVnjnmnF8xb6 new file mode 100644 index 00000000..a2721b85 --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/5omrVidybz4ZaWKmjdKruNE3Wp3KKZ8ZtU6FMQPTLW9SBZA7W1Dxk3DJfqy9CCz1qmtBgkAEWjpymVnjnmnF8xb6 @@ -0,0 +1,87 @@ +{ + "slot": 187, + "transaction": [ + "AfBnTnndCl4Bw1L6gphC93d9faWrcfdIQ2trwmrDSxDUQt658eBMbaHfeAyKOcbYY4aRxjjmcEiRskDRKWLcrQ0BAAcKeiGC7CowvJIstkh88PnSr2WEDY9TdVntq2WiGjIGJiNPL8LQWvwrEthMKXEIoXESvMrPc33rl26npvlOS90m2/KuWuX0POEKz8TJiMAjOgmV1yiV9Am40XHqZVvj8yn+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E+7ModRBcroW1tER2B+2/4UUnv7QjkRykBCO/0VJ6JnU6kdreADb9X9C4nQDV+m5DjMOL97KE09KXNGz/Io6nNAIEAAUCQEIPAAULAAAIBwkGBQUDAgF7GhCpBxXK8hlvAAAAAAEAAAB6IYLsKjC8kiy2SHzw+dKvZYQNj1N1We2rZaIaMgYmI0BCDwAAAAAAAAAAARoAAAABAAAAAQAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEIPAAAAAAAAAAEAAAAAAAAA", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999980727193, + 29812467, + 290204160, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "postBalances": [ + 99999980717192, + 29817468, + 290204160, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [ + 9, + 8, + 1, + 2 + ], + "data": "95YB9JH8MTYtuZfgNwFoqXrHy9t11ejDoypwMBfaoMeNd65k5gz3m8ZxT64nrg5QQvFqGdUsUGpeVdzdXS33up46zmum4kzUE2Zs9XrRF2j4nQRRFycVtKeMsBHMdTsPQrRxUchSeERWjjN54zwfhGz1vwtF2LBbvGEukynuFQamErN5opSspafBVuG6QZiV5JNjRY435rR9E5jxW5eYymj7Qar8n77Em13TTbBkPsCj6yoKxLPP5v82xxaDypnVKjoiEqz6GbnCaq1G7LPzVgCnhM5WYWy9XzthGtH8cNUNntREX6fe8mXUdTL4CVsQwwSo9atT2Csmx6XZvAE5i7FWkWLHCVu64NwtPMiFY1BeUcojizLPoyFLn7xeez9REf9HhCnzfgdWEtHBX3tfL3", + "stackHeight": 2 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [1]", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 10023 of 983192 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 26718 of 999850 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 26868 + }, + "blockTime": 1746552071 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/5pB3ndfTA9RdNrva16hZW6LSgLamzEQEBsKqVmX9KY8cU1mYyVrEoeoKmNziHpLMEVmoecvgYxmvYe9xWHmysrpi b/tests/data/transactions/batched_tree_transactions/5pB3ndfTA9RdNrva16hZW6LSgLamzEQEBsKqVmX9KY8cU1mYyVrEoeoKmNziHpLMEVmoecvgYxmvYe9xWHmysrpi new file mode 100644 index 00000000..e9f993a9 --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/5pB3ndfTA9RdNrva16hZW6LSgLamzEQEBsKqVmX9KY8cU1mYyVrEoeoKmNziHpLMEVmoecvgYxmvYe9xWHmysrpi @@ -0,0 +1,87 @@ +{ + "slot": 243, + "transaction": [ + "AfC/l5lIgrLyM6ZFaOFRJp+DYWDx8SJOl76N5RK1HlsIbSyoyOTV8tOXrfB4Ra+i673zYf83vGQCYJ5DGN8FNQMBAAcKeiGC7CowvJIstkh88PnSr2WEDY9TdVntq2WiGjIGJiNPL8LQWvwrEthMKXEIoXESvMrPc33rl26npvlOS90m2/KuWuX0POEKz8TJiMAjOgmV1yiV9Am40XHqZVvj8yn+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E+7ModRBcroW1tER2B+2/4UUnv7QjkRykBCO/0VJ6JnX2qbuVlFWOWJdJFzJ/CSY+4fQntdkBfels/9pDOFYb8gIEAAUCQEIPAAULAAAIBwkGBQUDAgF7GhCpBxXK8hlvAAAAAAEAAAB6IYLsKjC8kiy2SHzw+dKvZYQNj1N1We2rZaIaMgYmI0BCDwAAAAAAAAAAAUgAAAABAAAAAQAAAAAAAAAAAAAlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEIPAAAAAAAAAAEAAAAAAAAA", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999957267147, + 30042513, + 290204160, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "postBalances": [ + 99999957257146, + 30047514, + 290204160, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [ + 9, + 8, + 1, + 2 + ], + "data": "95YB9JH8MTYtuZfgNwFoqXrHy5js9Pb2398B6h31WoKtLt3aJ84ubRkpqbPUGE9j7AP5JFrM6R2WuGVLuKG2utCEmiUASuGB6jBjUgEGZttGDqNjZLXBXWoWuG5pFhP1Cd9Te4TFVeknsxoNc7xRJgbHpU8vN9BaquLNfjemMikuyjK4vWnYdCLVAtrN2R5KJYt9cu5e6m54Zz4KQ6xZugKo7Mh7Nci6VEQXvRaEBgKS3YoiQ7tktcVhYL2pg4BAUDucak728d3ThUbuaQHdR4zEyPatpE5ZY1guP83dzFkSGt2CrNeCPGjFkrbn6KRC3xXszoG9ktbidgahdw9nf2w2a1Vgr4Khe23eX5hM2gTE7fUEZK9XJn4i8wJTEY7T6bLVZRAfFCtXYfuDPzLC6B", + "stackHeight": 2 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [1]", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 10101 of 983192 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 26796 of 999850 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 26946 + }, + "blockTime": 1746552097 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/5q7auVbKz4KKbU6yJMZx9jiZTGMRwsnSFhBLzC8pQVMYvNxvCswJjhLieTUqbkABHc6r8oY1KDFTbd3jfuxs4Z3c b/tests/data/transactions/batched_tree_transactions/5q7auVbKz4KKbU6yJMZx9jiZTGMRwsnSFhBLzC8pQVMYvNxvCswJjhLieTUqbkABHc6r8oY1KDFTbd3jfuxs4Z3c new file mode 100644 index 00000000..8369a85b --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/5q7auVbKz4KKbU6yJMZx9jiZTGMRwsnSFhBLzC8pQVMYvNxvCswJjhLieTUqbkABHc6r8oY1KDFTbd3jfuxs4Z3c @@ -0,0 +1,87 @@ +{ + "slot": 265, + "transaction": [ + "AfGPLILrRNb9VOdybQmEqAmaaQi5RVgeMgawkLFiYZw9MBTmmhdFF0/JvD5V4G16whOkRMBbPmtwswzRwshsGA8BAAcKeiGC7CowvJIstkh88PnSr2WEDY9TdVntq2WiGjIGJiNPL8LQWvwrEthMKXEIoXESvMrPc33rl26npvlOS90m2/KuWuX0POEKz8TJiMAjOgmV1yiV9Am40XHqZVvj8yn+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E+7ModRBcroW1tER2B+2/4UUnv7QjkRykBCO/0VJ6JnUGdVqcel4YRhXKOLtqXYY/RVC15Sh9wKNomkyyks/uiQIEAAUCQEIPAAULAAAIBwkGBQUDAgF7GhCpBxXK8hlvAAAAAAEAAAB6IYLsKjC8kiy2SHzw+dKvZYQNj1N1We2rZaIaMgYmI0BCDwAAAAAAAAAAAVoAAAABAAAAAQAAAAAAAAAAAAAuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEIPAAAAAAAAAAEAAAAAAAAA", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999948087129, + 30132531, + 290204160, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "postBalances": [ + 99999948077128, + 30137532, + 290204160, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [ + 9, + 8, + 1, + 2 + ], + "data": "95YB9JH8MTYtuZfgNwFoqXrHy7bseZYWdfPN774Zt1qEiuua2Kt59XL8zj8RWfvmgZjwoQhThYfKkNwLEjqPyCqcoT9pLgVzAHSBNQ9teFZNJY7NuJpGCPPXMnk5xLwsEgp9eim5MNhTXEfN1Vbvyp89qcEpZCCerv3ct6tLSMZcwiiLACyBqWErwfGmnMd32MrdfuqsJc4qmVKuy1PQk23HS4xZx1sQSBa2nng5Uief2ssbXJUTB8rKdyfrp6xU6Q33UrXKJJufkMVCqLQKko7Pw4CCPYDkRM45ngZzX8wEeeAQF3XCtwQenabLSPt54SiZeiXie7fJRAZVjrCJFHEkbExgPQsxAH4sxDTz6Zvpw5yxE51MNgSEUPAbE4Z8Ucq3mufF9gaWV6CcYECRR9", + "stackHeight": 2 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [1]", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 10101 of 983192 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 26796 of 999850 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 26946 + }, + "blockTime": 1746552107 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/5uAuqSJ1v8FL8LyTH8BtsPiZvsjAb5Q31FUoF4KRJQAbrVfsnkrgbNKZfAWECkvFq4EysCy9m5JmUEQp978mKJdJ b/tests/data/transactions/batched_tree_transactions/5uAuqSJ1v8FL8LyTH8BtsPiZvsjAb5Q31FUoF4KRJQAbrVfsnkrgbNKZfAWECkvFq4EysCy9m5JmUEQp978mKJdJ new file mode 100644 index 00000000..ceb48340 --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/5uAuqSJ1v8FL8LyTH8BtsPiZvsjAb5Q31FUoF4KRJQAbrVfsnkrgbNKZfAWECkvFq4EysCy9m5JmUEQp978mKJdJ @@ -0,0 +1,87 @@ +{ + "slot": 166, + "transaction": [ + "AfUO5M2iElhfFfdfeElcidvqGi5Dk2n/Xo+qN6EYOVP/31I737qNV5IAXpfC2161sMjoPfyMqMyQytYRoeuNXw0BAAcKeiGC7CowvJIstkh88PnSr2WEDY9TdVntq2WiGjIGJiNPL8LQWvwrEthMKXEIoXESvMrPc33rl26npvlOS90m2/KuWuX0POEKz8TJiMAjOgmV1yiV9Am40XHqZVvj8yn+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E+7ModRBcroW1tER2B+2/4UUnv7QjkRykBCO/0VJ6JnXl/9w916aYxsg4r8y5KDqjSvZdHIvZaBrVeJGT3JrnKwIEAAUCQEIPAAULAAAIBwkGBQUDAgF7GhCpBxXK8hlvAAAAAAEAAAB6IYLsKjC8kiy2SHzw+dKvZYQNj1N1We2rZaIaMgYmI0BCDwAAAAAAAAAAAQgAAAABAAAAAQAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEIPAAAAAAAAAAEAAAAAAAAA", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999989907211, + 29722449, + 290204160, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "postBalances": [ + 99999989897210, + 29727450, + 290204160, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [ + 9, + 8, + 1, + 2 + ], + "data": "95YB9JH8MTYtuZfgNwFoqXrHy8snfFq1WA3Fic4KgYpK9EzGUabMYd861fHzy5YfcbzVNZS1k4h8uovt6HLnkuUACgiz471vafyqo57N9KFmq4gywz7PezZkZiJxnvhAe43dzgLDjJoH64oC36UVWjwqQ2CFk5uLXXeX2QxGe7SrmycdtTHEz8s6L7oNDgHHiq8h6Li56SSxpsDScnurWRt95ZYkntTbemm2rfegaUeuEkS2Z74e6gQBDxPrHTyEBpHraQffBEskpj3eKQYe5vHWQ79tvHgtQTEk25kdKZA65K7iQcneYfitZKhzvCLPqASBzcfCJBB4122wmwk8V79pi6pLd51TW5tYjCqYk2eBpDwW9QdjvALrvftkT5T8NFdjXZn7UmD5FTzTaTkrrB", + "stackHeight": 2 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [1]", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 10035 of 983192 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 26730 of 999850 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 26880 + }, + "blockTime": 1746552061 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/5uBQXkkfNrt7CZa11r71RLmWkfakiefGQxhuDyanQV5PEBc2h2EonmuN9mgeb6zTvdYBtrsTGzw8PG4EUn9CzHif b/tests/data/transactions/batched_tree_transactions/5uBQXkkfNrt7CZa11r71RLmWkfakiefGQxhuDyanQV5PEBc2h2EonmuN9mgeb6zTvdYBtrsTGzw8PG4EUn9CzHif new file mode 100644 index 00000000..801fdd92 --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/5uBQXkkfNrt7CZa11r71RLmWkfakiefGQxhuDyanQV5PEBc2h2EonmuN9mgeb6zTvdYBtrsTGzw8PG4EUn9CzHif @@ -0,0 +1,97 @@ +{ + "slot": 235, + "transaction": [ + "AfUQxuLsDodZkSfRYdZoSdumoUUCI3r7cHIae9PqRCZDVF3pxnlLxHPf1ylP29fD/hoUc0yLqOOd4vg2iavW9wgBAAcKeiGC7CowvJIstkh88PnSr2WEDY9TdVntq2WiGjIGJiNPL8LQWvwrEthMKXEIoXESvMrPc33rl26npvlOS90m26eeSDlsVuDVTj+5sQPFmF4L4Yw5qusdd/SNQPAGVKJYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E+7ModRBcroW1tER2B+2/4UUnv7QjkRykBCO/0VJ6JnUzFbrMysIwDsCEN3M5xlpv14LeACBBClcS4ZLg4sQzngIEAAUCQEIPAAUKAAAIBwkGAgUDAU8aEKkHFcryGUMAAAAAAAAAAAEAAAB6IYLsKjC8kiy2SHzw+dKvZYQNj1N1We2rZaIaMgYmI0BCDwAAAAAAAAAAAAAAAAABQEIPAAAAAAAB", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999961337154, + 30007506, + 33000000, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "postBalances": [ + 99999960327153, + 30012507, + 34000000, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 3, + "accounts": [ + 0, + 2 + ], + "data": "3Bxs4Bc3VYuGVB19", + "stackHeight": 2 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [ + 9, + 8, + 1 + ], + "data": "21HGgNSLz1yYgjRayL37XWwxDSqDsgEEKzhJdvMbV9nnMr13tjtwkoLbMueYAc31hWMwJeumTAex92DKAw58MD5omUBPWUpSUK5dRmj4MuhM3wodGjLyrj3h4qLC7xCcxPmwuVoASXnB5z6FUjCrEKs1N9kTzt8V7yQyYRrB16iSRGHVrTbSKYbS7GtPPunmB3r6HPCzFCTkxWpyVH4Zj1GExVcbFTs7yZ5WjBvvJUmjVyzctmJo", + "stackHeight": 2 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [1]", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 4419 of 987457 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 16849 of 999850 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 16999 + }, + "blockTime": 1746552093 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/5wRSTZ8nUnahHpPbFT18Dyna7BzU1XrTAHqNB7A3NpzDCvU39q3aGn4XNyCNpgDsXhT7fpWTUqBDDjyeBvKhSZMP b/tests/data/transactions/batched_tree_transactions/5wRSTZ8nUnahHpPbFT18Dyna7BzU1XrTAHqNB7A3NpzDCvU39q3aGn4XNyCNpgDsXhT7fpWTUqBDDjyeBvKhSZMP new file mode 100644 index 00000000..0b05d7cb --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/5wRSTZ8nUnahHpPbFT18Dyna7BzU1XrTAHqNB7A3NpzDCvU39q3aGn4XNyCNpgDsXhT7fpWTUqBDDjyeBvKhSZMP @@ -0,0 +1,87 @@ +{ + "slot": 252, + "transaction": [ + "Afb/uIW8YHKfvq8gi525qXybj0fevfTXrG1Ya53MyJ4DtnEApAEYrqw9Ghfgd/ZDeBGO0mHpB1lbYXjvxyW0uAYBAAcKeiGC7CowvJIstkh88PnSr2WEDY9TdVntq2WiGjIGJiNPL8LQWvwrEthMKXEIoXESvMrPc33rl26npvlOS90m2/KuWuX0POEKz8TJiMAjOgmV1yiV9Am40XHqZVvj8yn+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E+7ModRBcroW1tER2B+2/4UUnv7QjkRykBCO/0VJ6JnWSSm66Atvr+rq6YWsp9DTxxGou3/ohQEsyMtU0nsQXKwIEAAUCQEIPAAULAAAIBwkGBQUDAgF7GhCpBxXK8hlvAAAAAAEAAAB6IYLsKjC8kiy2SHzw+dKvZYQNj1N1We2rZaIaMgYmI0BCDwAAAAAAAAAAAVAAAAABAAAAAQAAAAAAAAAAAAApAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEIPAAAAAAAAAAEAAAAAAAAA", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999953187139, + 30082521, + 290204160, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "postBalances": [ + 99999953177138, + 30087522, + 290204160, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [ + 9, + 8, + 1, + 2 + ], + "data": "95YB9JH8MTYtuZfgNwFoqXrHy7zUemAeqxYEnok48xPntCXF7huyLw6j9rmfYkZUhta4twSTC57C6XTu4BQz9pHpbz5aZ1Hcg6Ao6tJcQ6nFd2rfQ4aGCLtM13PapfwrFAxNQm5eaZanrmw8yLYW6tXf1tToA5PmXTS1zPsFYsDaHkNeB6HdbJ14TsuNPaSvKK3Nx4YUEejLScXE8XQGKgMX2kMjjZKKbJi2amqsLs5ZQdF2YEJf3NZWicgNjyiH6sLvP4xGX8rjidDQXTC36dKBkL2DSRP8NxmoHofrAspaTfJV9oeEaM9UYonyFmiWKvWhKwQ1usa1QW58TbF3WHybbdMPdFXgR4tL2noyDiMn2xoRer6Wh8bQHD35uz2LXyPcNUepV7kZXu3xHdBDbD", + "stackHeight": 2 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [1]", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 9257 of 983192 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 25952 of 999850 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 26102 + }, + "blockTime": 1746552101 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/5yfxKKWUUyzRYhTcbtL3Gm6T1rmZ1ERdEEdRSjH3JBwpsYSUM6a5dc2Vc9dqBu8hDqB3bWCTHMKtYct57GhJuADT b/tests/data/transactions/batched_tree_transactions/5yfxKKWUUyzRYhTcbtL3Gm6T1rmZ1ERdEEdRSjH3JBwpsYSUM6a5dc2Vc9dqBu8hDqB3bWCTHMKtYct57GhJuADT new file mode 100644 index 00000000..f36769e2 --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/5yfxKKWUUyzRYhTcbtL3Gm6T1rmZ1ERdEEdRSjH3JBwpsYSUM6a5dc2Vc9dqBu8hDqB3bWCTHMKtYct57GhJuADT @@ -0,0 +1,80 @@ +{ + "slot": 332, + "transaction": [ + "Afjwf2T2uiYzzcddScCKA/zliuT//Im/sPOcSj9ccI0SSjR8+uUlxs4mSImiLr51TGxXKGPyMxZ/OlvudpnB6wYBAAUI7DDUiI4IcYFkGbvXWaOx6/U8oHfKVZ1qGOt5OIzPzJlMm20YZ6Hmhtq+9LocAayVnPPWJjXrHQ48WcmoYfd2+fKuWuX0POEKz8TJiMAjOgmV1yiV9Am40XHqZVvj8yn+BQ0rE3lRNoXPAvK1/VKRvZWbKwYKpSXqWzSBOx25t24JLDbsIvUXgwD9tEqqav/P8KRuHLxkHA4+0J2hO571CAu8D8C7R8ovdMQRLpSrE8+jxjTl3BfqywPNGiPNfnh8EKZefdY5BPg4OtA83uB4uRTYcxiAOxU1gHDXkuBc/ee/0JpqB2XRCNtAAr/vTMhlUxRoo9os/Mr5c0WeIsgS9Mmf8WUvxHtpNQ5wdBpokpXbUHF8I0VA3jQToM7D3unTAQMHAQAGBwQFAq0Bhp7S8Pwj/ff/oAAAACjV14g0sG8+hiUJeADYOe2CkWbjaUV1lDhWrVDCwZrJGyEfY4M5FCu7PzIut7K8hsqi0q9nNzXCwjCFsNdFgkYSdq8NgHMoCzT0BtpTgNQ8m+IFSkQvG+H5S1zi1Ik0vhGDK3QI1NfRAnB/ITUe3WrEcqo04LuEMdVUjPqcyt7OL9zXdXz5b+4IRg8BZ6SVl0aLb18F/M6Xgc6ZjpjhiG0=", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999995028200, + 2735280, + 290204160, + 1141440, + 1141440, + 1141440, + 0, + 1614720 + ], + "postBalances": [ + 99999995023200, + 2735280, + 290204160, + 1141440, + 1141440, + 1141440, + 0, + 1614720 + ], + "innerInstructions": [ + { + "index": 0, + "instructions": [ + { + "programIdIndex": 4, + "accounts": [ + 6, + 7, + 5, + 2 + ], + "data": "LmdQuBbApKVFkG74y3DQeLi9P5kdtbg5ZN6pEGcjuSnJ5K2bakwp7WXahxSp6XeiRVCrGKitepsQ7tRaY6fvRUBSKHszJ6H2MEWBqgw7smcX1reE1E1YhZTaWEqnEXmFGjpQLQX3Mp7KoTx25TrAwfhk9YUjo4vHXyxVT3FPbuMEdSQXLPnMKcv4GjtAi2AajKSanruzSy1fX3nEzKFTBSU416h9K5ZZ74mhRhfa1uW", + "stackHeight": 2 + }, + { + "programIdIndex": 5, + "accounts": [], + "data": "33RnrV5PeYSegsuxuyuhDrnnW8smoxASrgH5K6URdqG8Yoy9KvdLNguRuWBVEK4vZJnt1faMPHjSHiV3AA4DSWtbehkn9ivJqvLwWKwkvwLNLMjKhJrDWzA2mudnQeL4C5L9axnRqwUG46o56N8DwFdykFuP8FGC7", + "stackHeight": 3 + } + ] + } + ], + "logMessages": [ + "Program Lighton6oQpVkeewmo2mcPTQQp7kYHr4fWpAgJyEmDX invoke [1]", + "Program log: Instruction: BatchNullify", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: BatchNullify", + "Program noopb9bkMVfRPU8AsbpTUg8AQkHtKwMYZiFUjNRtMmV invoke [3]", + "Program noopb9bkMVfRPU8AsbpTUg8AQkHtKwMYZiFUjNRtMmV consumed 38 of 82866 compute units", + "Program noopb9bkMVfRPU8AsbpTUg8AQkHtKwMYZiFUjNRtMmV success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 101436 of 184105 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program Lighton6oQpVkeewmo2mcPTQQp7kYHr4fWpAgJyEmDX consumed 119254 of 200000 compute units", + "Program Lighton6oQpVkeewmo2mcPTQQp7kYHr4fWpAgJyEmDX success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 119254 + }, + "blockTime": 1746552140 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/61sk1ZtUk1pRN6tku4fi3YQb4ufaeHZai7HzjEVGdbjw4g1qMiYHsrW8ab584UoQpnajLh1MFTABujsVyjri6kGb b/tests/data/transactions/batched_tree_transactions/61sk1ZtUk1pRN6tku4fi3YQb4ufaeHZai7HzjEVGdbjw4g1qMiYHsrW8ab584UoQpnajLh1MFTABujsVyjri6kGb new file mode 100644 index 00000000..a155437f --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/61sk1ZtUk1pRN6tku4fi3YQb4ufaeHZai7HzjEVGdbjw4g1qMiYHsrW8ab584UoQpnajLh1MFTABujsVyjri6kGb @@ -0,0 +1,83 @@ +{ + "slot": 311, + "transaction": [ + "AfrW5RValAK+3Ra6vBJUn10uARoySX4xaz+nTxV6dDZrfQHY213xHCdK8ipKyEmjgE0pTSeiIMLuNaFK1u3u4QwBAAUJ7DDUiI4IcYFkGbvXWaOx6/U8oHfKVZ1qGOt5OIzPzJlMm20YZ6Hmhtq+9LocAayVnPPWJjXrHQ48WcmoYfd2+U8vwtBa/CsS2EwpcQihcRK8ys9zfeuXbqem+U5L3Sbb8q5a5fQ84QrPxMmIwCM6CZXXKJX0CbjRceplW+PzKf4FDSsTeVE2hc8C8rX9UpG9lZsrBgqlJepbNIE7Hbm3bgksNuwi9ReDAP20Sqpq/8/wpG4cvGQcDj7QnaE7nvUIC7wPwLtHyi90xBEulKsTz6PGNOXcF+rLA80aI81+eHwQpl591jkE+Dg60Dze4Hi5FNhzGIA7FTWAcNeS4Fz957/QmmoHZdEI20ACv+9MyGVTFGij2iz8yvlzRZ4iyBL00Z39MZHpfgeo+orpsk7d0q0/wSQyTaaqjQqelC0axJEBBAgBAAcIBQYDAq0B3cID2CU+3JP/oAAAABeP35ay0EiMoxkCRSdJWEdCEid9pAMZYuJ19cwn1zUFjHtBenUxBxaoD5qXrK+Y15ORD9ybv9tL0nqI0YaICySkx8K4ByhxX6fytSDAw7+Lu2oXeAtOyiwmYdXKSajcmSMAFy4OyifyRUxNVR/Q8gsLjlH/RUegiEHxACsivGH0J81ycJ1TDXcHJnpvk9kX4OdF8SEZoXZpodZPVcA6s9M=", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999995068200, + 2735280, + 30177540, + 290204160, + 1141440, + 1141440, + 1141440, + 0, + 1614720 + ], + "postBalances": [ + 99999995063200, + 2735280, + 30177540, + 290204160, + 1141440, + 1141440, + 1141440, + 0, + 1614720 + ], + "innerInstructions": [ + { + "index": 0, + "instructions": [ + { + "programIdIndex": 5, + "accounts": [ + 7, + 8, + 6, + 3, + 2 + ], + "data": "ZZpa4B1Y3ym6r8941mvyrnFcf2PWC97nLVv9oh2ycJicQHnPeSPFYABhrpLjbJgJeWG2NDg41vsQxzHbpA2b92KS2ggri5AAGi5ch9tLweQHwZXewqnUPCyZVAnuXmrc1AxN3EH247uE6YXmyt5obhrLdTnB3Zf9zkuaojuCfnr7csj3nCXecrCVdQqA76mQGkTPJGNbMRqSWfxNJHeuRzoJpPXCfQchAqaPWehmF5t", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [], + "data": "V55KweBRnUHGkEaUisCdgyHtJHJb7ZCcjbWeUQUySHhE944JhfG7Jg5MwTr92YnUt7R1ugfndSYgpxLVpXs91q4WnxuMX4CKqb9FC6jQXWabhirVSC5RNNKmsgt2gWervhFAzgDTKczwz2btv4cJcb1uLCFaPTvrxVZySkFN3VRc783KY4x3sHKtNjYeT13XseNeJbv1eXfY", + "stackHeight": 3 + } + ] + } + ], + "logMessages": [ + "Program Lighton6oQpVkeewmo2mcPTQQp7kYHr4fWpAgJyEmDX invoke [1]", + "Program log: Instruction: BatchAppend", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: BatchAppend", + "Program noopb9bkMVfRPU8AsbpTUg8AQkHtKwMYZiFUjNRtMmV invoke [3]", + "Program noopb9bkMVfRPU8AsbpTUg8AQkHtKwMYZiFUjNRtMmV consumed 38 of 79855 compute units", + "Program noopb9bkMVfRPU8AsbpTUg8AQkHtKwMYZiFUjNRtMmV success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 103162 of 182790 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program Lighton6oQpVkeewmo2mcPTQQp7kYHr4fWpAgJyEmDX consumed 122351 of 200000 compute units", + "Program Lighton6oQpVkeewmo2mcPTQQp7kYHr4fWpAgJyEmDX success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 122351 + }, + "blockTime": 1746552129 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/62J4yReV3iQ4MfL8ziwBnrynb6HZvTCv6gZQKZ7ur6QfGQ2p83kdggXG4MphuBUUmNJqRkDFNP7j1mzqnEKU5ZQ2 b/tests/data/transactions/batched_tree_transactions/62J4yReV3iQ4MfL8ziwBnrynb6HZvTCv6gZQKZ7ur6QfGQ2p83kdggXG4MphuBUUmNJqRkDFNP7j1mzqnEKU5ZQ2 new file mode 100644 index 00000000..c1685f29 --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/62J4yReV3iQ4MfL8ziwBnrynb6HZvTCv6gZQKZ7ur6QfGQ2p83kdggXG4MphuBUUmNJqRkDFNP7j1mzqnEKU5ZQ2 @@ -0,0 +1,83 @@ +{ + "slot": 306, + "transaction": [ + "AfszfX9OhPS0GN4Hdtq4OxgTcokqPEme1oZG7jUGjfI+Woopyc0eD8iBPbhGrBs6eVdL7zKT89wKLS94ytCPbAcBAAUJ7DDUiI4IcYFkGbvXWaOx6/U8oHfKVZ1qGOt5OIzPzJlMm20YZ6Hmhtq+9LocAayVnPPWJjXrHQ48WcmoYfd2+U8vwtBa/CsS2EwpcQihcRK8ys9zfeuXbqem+U5L3Sbb8q5a5fQ84QrPxMmIwCM6CZXXKJX0CbjRceplW+PzKf4FDSsTeVE2hc8C8rX9UpG9lZsrBgqlJepbNIE7Hbm3bgksNuwi9ReDAP20Sqpq/8/wpG4cvGQcDj7QnaE7nvUIC7wPwLtHyi90xBEulKsTz6PGNOXcF+rLA80aI81+eHwQpl591jkE+Dg60Dze4Hi5FNhzGIA7FTWAcNeS4Fz957/QmmoHZdEI20ACv+9MyGVTFGij2iz8yvlzRZ4iyBL0j7dz77cxAagGHcpnAuXl6WC7JG13suCrDFpTDqR4ptEBBAgBAAcIBQYDAq0B3cID2CU+3JP/oAAAACNR4z5mJFVJKm5l/tl2qgdPiazKU4o+nM/meKuQGV7Eigh3ZmwMxM7HFqYjsyFXiTS6RoMgNEnOn4D+SIAM5oUtSDAEHMnOkmdQYLmbGN7o7o3tB7bNYjChOpw3iwh7dhxU9g0Z4EKLC/fCnLYKLUMlDD0dsGie02Lk410PqOqpkT1qB3MUB4IqTinm3SO5Kg5wkMduyiK3y++MeTo+L5g=", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999995083200, + 2735280, + 30177540, + 290204160, + 1141440, + 1141440, + 1141440, + 0, + 1614720 + ], + "postBalances": [ + 99999995078200, + 2735280, + 30177540, + 290204160, + 1141440, + 1141440, + 1141440, + 0, + 1614720 + ], + "innerInstructions": [ + { + "index": 0, + "instructions": [ + { + "programIdIndex": 5, + "accounts": [ + 7, + 8, + 6, + 3, + 2 + ], + "data": "ZZpa4B1Y3ym6r89428fM3wWgzCV6yrHWj3V4WnQVfY91dfpRfWWJj3F67pfvjWy3ASeoAJT7kj6BKM2TebhcmyNv1zZuwMHan7StZcjqHxWZh4v8LgH7jY8VEkLkQeje2Cybnuech7uHkk4ZVd1aKt2fwxk1yiqsHWpi1bSuDjEAxPyPZcMEvqxwXtCwnFxdoARsPFqzK8okw2nXhsNJVoknRZ2KoymfDkMfXF28fyh", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [], + "data": "V55KweBRnUHGkEaUisCdgyHtJHJb7ZCcjbWeUQUySHhE944JhfG7Jg5MZRno43UgqRezNaYxtZ3tVMXX58RmHUFumLwtvm48aiN5b4DGgAWGT3jMHnjSsaah8cUGF6AshJuVXWC49qJzQ4KipP9tFpskuxMzTuN3jZq9WtLVnD2eazFVRd6pcA43sa615DUkVxwD8AHjtNen", + "stackHeight": 3 + } + ] + } + ], + "logMessages": [ + "Program Lighton6oQpVkeewmo2mcPTQQp7kYHr4fWpAgJyEmDX invoke [1]", + "Program log: Instruction: BatchAppend", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: BatchAppend", + "Program noopb9bkMVfRPU8AsbpTUg8AQkHtKwMYZiFUjNRtMmV invoke [3]", + "Program noopb9bkMVfRPU8AsbpTUg8AQkHtKwMYZiFUjNRtMmV consumed 38 of 79855 compute units", + "Program noopb9bkMVfRPU8AsbpTUg8AQkHtKwMYZiFUjNRtMmV success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 103162 of 182790 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program Lighton6oQpVkeewmo2mcPTQQp7kYHr4fWpAgJyEmDX consumed 122351 of 200000 compute units", + "Program Lighton6oQpVkeewmo2mcPTQQp7kYHr4fWpAgJyEmDX success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 122351 + }, + "blockTime": 1746552127 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/65hAPBDfAvEUuCnrYpucFj7vPXJoQNS7fntaYrTNMLJbHJMPndhqPUe6cn9foKsX7s4XB4ugbyjwEJNvXDsJdZMM b/tests/data/transactions/batched_tree_transactions/65hAPBDfAvEUuCnrYpucFj7vPXJoQNS7fntaYrTNMLJbHJMPndhqPUe6cn9foKsX7s4XB4ugbyjwEJNvXDsJdZMM new file mode 100644 index 00000000..fc8362ab --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/65hAPBDfAvEUuCnrYpucFj7vPXJoQNS7fntaYrTNMLJbHJMPndhqPUe6cn9foKsX7s4XB4ugbyjwEJNvXDsJdZMM @@ -0,0 +1,97 @@ +{ + "slot": 175, + "transaction": [ + "Af4hrxNagyCBTRhWYs8Lryz2HS2ZIcfGX960Uho4Wn6LevZMALXn9YgEZCgWKSHAps6U/uDfAWnHG4d1134idwwBAAcKeiGC7CowvJIstkh88PnSr2WEDY9TdVntq2WiGjIGJiNPL8LQWvwrEthMKXEIoXESvMrPc33rl26npvlOS90m26eeSDlsVuDVTj+5sQPFmF4L4Yw5qusdd/SNQPAGVKJYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E+7ModRBcroW1tER2B+2/4UUnv7QjkRykBCO/0VJ6JnWxdLYma+mAgQrLZlFhTPMqra8gE9wDFBaPEsuRnKxF0AIEAAUCQEIPAAUKAAAIBwkGAgUDAU8aEKkHFcryGUMAAAAAAAAAAAEAAAB6IYLsKjC8kiy2SHzw+dKvZYQNj1N1We2rZaIaMgYmI0BCDwAAAAAAAAAAAAAAAAABQEIPAAAAAAAB", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999986837204, + 29757456, + 8000000, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "postBalances": [ + 99999985827203, + 29762457, + 9000000, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 3, + "accounts": [ + 0, + 2 + ], + "data": "3Bxs4Bc3VYuGVB19", + "stackHeight": 2 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [ + 9, + 8, + 1 + ], + "data": "21HGgNSLz1yYgjRayL37XWwxDSqDsgEEKzhJdvMbV9nnMr13tjtwkoLbMueYAc31hWMwJeumXVRxJtAHDqt5iFBRux9RhV4gNT4DS3D2BaQnuUnsBNei64UmcDm5qfieuccQF81gkTYtLuQMoJcETnVfTUEHGL6uNNAvKBRbSebwfoqwQhL2HFi58q8D7X7ViZMv1iefvhUGhnQFthRsgjwMRDQG15fGsDt5rrgsAM9q8h3mgt23", + "stackHeight": 2 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [1]", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 4419 of 987457 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 16849 of 999850 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 16999 + }, + "blockTime": 1746552065 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/65hPpSyz8KjoKGWqjBNJv6A8c5z4fgx86SxN8rJXy8XugLwj4xRSauH1eJx5xAUosGFustkzoUSfPPGFi6DN7zj7 b/tests/data/transactions/batched_tree_transactions/65hPpSyz8KjoKGWqjBNJv6A8c5z4fgx86SxN8rJXy8XugLwj4xRSauH1eJx5xAUosGFustkzoUSfPPGFi6DN7zj7 new file mode 100644 index 00000000..36dedcd0 --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/65hPpSyz8KjoKGWqjBNJv6A8c5z4fgx86SxN8rJXy8XugLwj4xRSauH1eJx5xAUosGFustkzoUSfPPGFi6DN7zj7 @@ -0,0 +1,87 @@ +{ + "slot": 195, + "transaction": [ + "Af4ikMxFrnMK3s8QQZd6XqvjIPD90Oh8lMTbV3dpgRj0nzYxGmMg7Ejt/ZfAUOmsb3X4ierMLBd0ynh57A/U0w4BAAcKeiGC7CowvJIstkh88PnSr2WEDY9TdVntq2WiGjIGJiNPL8LQWvwrEthMKXEIoXESvMrPc33rl26npvlOS90m2/KuWuX0POEKz8TJiMAjOgmV1yiV9Am40XHqZVvj8yn+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E+7ModRBcroW1tER2B+2/4UUnv7QjkRykBCO/0VJ6JnW2YuxGqiH5R1bqJVrUt2jDq4ZxSp+I8Nr8PJe3oxrTLAIEAAUCQEIPAAULAAAIBwkGBQUDAgF7GhCpBxXK8hlvAAAAAAEAAAB6IYLsKjC8kiy2SHzw+dKvZYQNj1N1We2rZaIaMgYmI0BCDwAAAAAAAAAAASAAAAABAAAAAQAAAAAAAAAAAAARAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEIPAAAAAAAAAAEAAAAAAAAA", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999977667187, + 29842473, + 290204160, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "postBalances": [ + 99999977657186, + 29847474, + 290204160, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [ + 9, + 8, + 1, + 2 + ], + "data": "95YB9JH8MTYtuZfgNwFoqXrHy6amXskh6Ris2mpZn7cp7wBKSpoXnMWtCRomscxHr7CexGrj7fv6MmvJfdQDVRZr3v8EgUPpcceH4gKQtm1h7S6J1x4LvyCG4vDRg1Jm4dBsVUjSHpXJnKrXMFKL2RNu1bUgx2dVK5CYKPPuPjQdNqdYewa8FA6cEoPB55Wgi2wPgVY7TEwSfrJ5R6FAhAahb1t8cyWrqSYmBNaTcwH7vbN4wNHBUdjEQNMdUerd9gCi1F2FpsPmNkYuLBWKSnksLCGi5gvYhucjJr5WXavDc7TcpDVwideni9FBPL6Ko2x24BQ4Y9zgbUbsTUviegoEof4cH9EvVrvLBuiNTumxP4zeANTQNi4aUcPmE3r4fAp4MKoGuy5zwVBGrxqWWB", + "stackHeight": 2 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [1]", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 10023 of 983192 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 26718 of 999850 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 26868 + }, + "blockTime": 1746552074 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/66oWMgiERunTE3RkxDGKpGZTcS8LheLjnYGtN3Hdqa6a9HPxtRtgTAU6divY1MvUtCbE33AUyTs4YoQtrrQRt3cz b/tests/data/transactions/batched_tree_transactions/66oWMgiERunTE3RkxDGKpGZTcS8LheLjnYGtN3Hdqa6a9HPxtRtgTAU6divY1MvUtCbE33AUyTs4YoQtrrQRt3cz new file mode 100644 index 00000000..9779c361 --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/66oWMgiERunTE3RkxDGKpGZTcS8LheLjnYGtN3Hdqa6a9HPxtRtgTAU6divY1MvUtCbE33AUyTs4YoQtrrQRt3cz @@ -0,0 +1,97 @@ +{ + "slot": 182, + "transaction": [ + "Af8WmN0JD30UTC7u+omNVAFB7DTyR9mxkhiIRhRLcX+2udK+2KQfi+c9oS9vVrK8qh8i6jik2U+k6yPjJMasQQcBAAcKeiGC7CowvJIstkh88PnSr2WEDY9TdVntq2WiGjIGJiNPL8LQWvwrEthMKXEIoXESvMrPc33rl26npvlOS90m26eeSDlsVuDVTj+5sQPFmF4L4Yw5qusdd/SNQPAGVKJYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E+7ModRBcroW1tER2B+2/4UUnv7QjkRykBCO/0VJ6JnWAGresnZAn8zevCwcn+Mv0rvt/zMyktOK7L4slKHGcuwIEAAUCQEIPAAUKAAAIBwkGAgUDAU8aEKkHFcryGUMAAAAAAAAAAAEAAAB6IYLsKjC8kiy2SHzw+dKvZYQNj1N1We2rZaIaMgYmI0BCDwAAAAAAAAAAAAAAAAABQEIPAAAAAAAB", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999983777198, + 29787462, + 11000000, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "postBalances": [ + 99999982767197, + 29792463, + 12000000, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 3, + "accounts": [ + 0, + 2 + ], + "data": "3Bxs4Bc3VYuGVB19", + "stackHeight": 2 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [ + 9, + 8, + 1 + ], + "data": "21HGgNSLz1yYgjRayL37XWwxDSqDsgEEKzhJdvMbV9nnMr13tjtwkoLbMueYAc31hWMwJeumcS6G2AScGR4UvyKSs9jWS4YG9hoRRqLS88xtCSABx8JXgmM3JKFpnT6mRao3nTvcoMT3N2mfSkVDcZkwVQi3zsQvLBfsPYZTs9qYpQLxm65KyngBUqdUKxvzYAPYz31ukuJYCCMsdwQvm5pEyRB4tNTUm5teQ8ry9c9HtNzqjrYf", + "stackHeight": 2 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [1]", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 4419 of 987457 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 16849 of 999850 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 16999 + }, + "blockTime": 1746552068 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/67Yv7sR6varZAq3a17M64miBtnqXt29YYeh558YQDjwY8nR3NmRoaGX9Hnw9qkyPdmu8agkR8zDMpf5K5LP8ShGj b/tests/data/transactions/batched_tree_transactions/67Yv7sR6varZAq3a17M64miBtnqXt29YYeh558YQDjwY8nR3NmRoaGX9Hnw9qkyPdmu8agkR8zDMpf5K5LP8ShGj new file mode 100644 index 00000000..6e0750ca --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/67Yv7sR6varZAq3a17M64miBtnqXt29YYeh558YQDjwY8nR3NmRoaGX9Hnw9qkyPdmu8agkR8zDMpf5K5LP8ShGj @@ -0,0 +1,87 @@ +{ + "slot": 162, + "transaction": [ + "Af+7064Mq1SPeVgiyML2ohWV0Y+KWUZ2/qyceStkyAuF46eyT2XeBxqogKifV30skGjoCCuhd2bMSRmfJKxHwQgBAAcKeiGC7CowvJIstkh88PnSr2WEDY9TdVntq2WiGjIGJiNPL8LQWvwrEthMKXEIoXESvMrPc33rl26npvlOS90m2/KuWuX0POEKz8TJiMAjOgmV1yiV9Am40XHqZVvj8yn+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E+7ModRBcroW1tER2B+2/4UUnv7QjkRykBCO/0VJ6JnVCloMZpbZjTYAHmb3Y8KvjIresclH5j9m6ylPiJHHNhgIEAAUCQEIPAAULAAAIBwkGBQUDAgF7GhCpBxXK8hlvAAAAAAEAAAB6IYLsKjC8kiy2SHzw+dKvZYQNj1N1We2rZaIaMgYmI0BCDwAAAAAAAAAAAQQAAAABAAAAAQAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEIPAAAAAAAAAAEAAAAAAAAA", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999991947215, + 29702445, + 290204160, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "postBalances": [ + 99999991937214, + 29707446, + 290204160, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [ + 9, + 8, + 1, + 2 + ], + "data": "95YB9JH8MTYtuZfgNwFoqXrHy43mDJyBnZPDP5Ck56nq6fgAhyig889F5ctrfY8g3m9zn8hHQTDVDHXAAy1SzJKTKS2jnS3s3WQ7DKjmL2DSmTgUm9t3SgZrFSDhHpo8aTEvU35BMd92YbPzQfZrEqCKQhbt57EiQLkinnaP81bJVSf37U5wogj5Rs8cfEJCUadVDtoToiqmtyiyUcjvRRPKbfasqBRedGN3uj8CQi4kTbd34G836umbma4ghaf8jgCr8Ra8ibAdq9hwWu8BaDm6LbdiuwovgahpqCLJDpB6XTQX1JytueDso3NKySkWVqQN85Z88dHc1NRgiQ77MPup9jRTEeSkyxUg9LGrqHATERgGb6tLjC9tSU8swou5bPC6K1YCMkgAqDV7SgEpNB", + "stackHeight": 2 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [1]", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 10023 of 983192 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 26718 of 999850 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 26868 + }, + "blockTime": 1746552059 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/74XoswLbsBESKoTJD5Mxit2joCJgLCYri9epVmfpUczXt6DHdLEh7TTQ4S6JGzk7P7zTRegwi6Fjxgy2FPjVRXM b/tests/data/transactions/batched_tree_transactions/74XoswLbsBESKoTJD5Mxit2joCJgLCYri9epVmfpUczXt6DHdLEh7TTQ4S6JGzk7P7zTRegwi6Fjxgy2FPjVRXM new file mode 100644 index 00000000..809ebb5e --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/74XoswLbsBESKoTJD5Mxit2joCJgLCYri9epVmfpUczXt6DHdLEh7TTQ4S6JGzk7P7zTRegwi6Fjxgy2FPjVRXM @@ -0,0 +1,80 @@ +{ + "slot": 339, + "transaction": [ + "AQU6B11pUs0b+vIQWC63pKJN00Z7VLkfywIhda/6TOlBiF3Tf2GMg9excIFeXDLsTuFO1E51s0i8xhpBJJsoOwABAAUI7DDUiI4IcYFkGbvXWaOx6/U8oHfKVZ1qGOt5OIzPzJlMm20YZ6Hmhtq+9LocAayVnPPWJjXrHQ48WcmoYfd2+fKuWuX0POEKz8TJiMAjOgmV1yiV9Am40XHqZVvj8yn+BQ0rE3lRNoXPAvK1/VKRvZWbKwYKpSXqWzSBOx25t24JLDbsIvUXgwD9tEqqav/P8KRuHLxkHA4+0J2hO571CAu8D8C7R8ovdMQRLpSrE8+jxjTl3BfqywPNGiPNfnh8EKZefdY5BPg4OtA83uB4uRTYcxiAOxU1gHDXkuBc/ee/0JpqB2XRCNtAAr/vTMhlUxRoo9os/Mr5c0WeIsgS9F5Nv/x9w7hKdaZ4V5XwWByCXWfKnnugzZKNW81XtvxJAQMHAQAGBwQFAq0Bhp7S8Pwj/ff/oAAAACvEnsOKlrAwJt+Oz9RDHxNVHpp/RO6EY+FB6sNM1YrkAvBwJhCCT6FaAxXZjPGDfRHDqjuqvjk/xCuT14KuGmkbRVhUmKhO0H7TpnBVdvQWSc1TaphrQSP3W9zmWly5yBgrDgSWE+nnhEKTrrHA3KDaPKnOpoIWoriPAFYIXt8hn6xF2nVUPihtT4ZNWB5yw/spjp+x0NBTYsRCZTqYiFk=", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999995018200, + 2735280, + 290204160, + 1141440, + 1141440, + 1141440, + 0, + 1614720 + ], + "postBalances": [ + 99999995013200, + 2735280, + 290204160, + 1141440, + 1141440, + 1141440, + 0, + 1614720 + ], + "innerInstructions": [ + { + "index": 0, + "instructions": [ + { + "programIdIndex": 4, + "accounts": [ + 6, + 7, + 5, + 2 + ], + "data": "LmdQuBbApKVFkG74y8PJyChSwRWUFqv6yv91unogNkbeF4RFmy1sKCkL1KymrPSbv4ee5nfGw6gRjbTF75KdtdM4RsqFxNS2F5HDHobTnPu9f6odZ92zPFV87wJ5NJFpxE5HnrB3hha7BBFpgg2M8yLiJ3CPVVTDM38NLNXeex7uDhWtPn345CQ4PBGjnLHmVnChA6aH9d2BLJu4fEFZb4JX9xYfZD66PQhjD9cTQkY", + "stackHeight": 2 + }, + { + "programIdIndex": 5, + "accounts": [], + "data": "33RnrV5PeYSegsuxuyuhDrnnW8smoxASrgH5K6URdqG8Yoy9KvdLNguRvMdhpXmMAW7r6UurP3aWt3wTtgp1rhTdsuXitt2xURy1B2thBrZHU4eKW4igBqcxmU3qTdRFiQPmQwHxmjdvBmVXyX4a4P6cSGhbUn2Zd", + "stackHeight": 3 + } + ] + } + ], + "logMessages": [ + "Program Lighton6oQpVkeewmo2mcPTQQp7kYHr4fWpAgJyEmDX invoke [1]", + "Program log: Instruction: BatchNullify", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: BatchNullify", + "Program noopb9bkMVfRPU8AsbpTUg8AQkHtKwMYZiFUjNRtMmV invoke [3]", + "Program noopb9bkMVfRPU8AsbpTUg8AQkHtKwMYZiFUjNRtMmV consumed 38 of 82866 compute units", + "Program noopb9bkMVfRPU8AsbpTUg8AQkHtKwMYZiFUjNRtMmV success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 101436 of 184105 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program Lighton6oQpVkeewmo2mcPTQQp7kYHr4fWpAgJyEmDX consumed 119254 of 200000 compute units", + "Program Lighton6oQpVkeewmo2mcPTQQp7kYHr4fWpAgJyEmDX success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 119254 + }, + "blockTime": 1746552143 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/8FhHByhBRdoosYkVCwk5B7oqNYPhUze4hYwTP51y1PgfPK6Tfvf2gg2PFMSN6MUmDhNsSEZ195p6czpgvZFwYWB b/tests/data/transactions/batched_tree_transactions/8FhHByhBRdoosYkVCwk5B7oqNYPhUze4hYwTP51y1PgfPK6Tfvf2gg2PFMSN6MUmDhNsSEZ195p6czpgvZFwYWB new file mode 100644 index 00000000..0efa3f48 --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/8FhHByhBRdoosYkVCwk5B7oqNYPhUze4hYwTP51y1PgfPK6Tfvf2gg2PFMSN6MUmDhNsSEZ195p6czpgvZFwYWB @@ -0,0 +1,87 @@ +{ + "slot": 193, + "transaction": [ + "AQZBSL3vmwcB840LTR1C6/ewllKZsftB2bhQugtWvgB3g0h15HXGX3Yg4vlyejyHGGMYc2KoXK2l/Q7fIARGzwgBAAcKeiGC7CowvJIstkh88PnSr2WEDY9TdVntq2WiGjIGJiNPL8LQWvwrEthMKXEIoXESvMrPc33rl26npvlOS90m2/KuWuX0POEKz8TJiMAjOgmV1yiV9Am40XHqZVvj8yn+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E+7ModRBcroW1tER2B+2/4UUnv7QjkRykBCO/0VJ6JnUWDQNw8PmGzfOoL5FKEc5McjjyuOVthfrUUcpwO+crIAIEAAUCQEIPAAULAAAIBwkGBQUDAgF7GhCpBxXK8hlvAAAAAAEAAAB6IYLsKjC8kiy2SHzw+dKvZYQNj1N1We2rZaIaMgYmI0BCDwAAAAAAAAAAAR4AAAABAAAAAQAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEIPAAAAAAAAAAEAAAAAAAAA", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999978687189, + 29832471, + 290204160, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "postBalances": [ + 99999978677188, + 29837472, + 290204160, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [ + 9, + 8, + 1, + 2 + ], + "data": "95YB9JH8MTYtuZfgNwFoqXrHyBYZX3QyMqK82tWSRSrQb7Jmyzv4CVeb6jwKngzHtD4MNmkU4741w2ojrqdjPdewP5o97GE3J2FVPfwG9CPhX6Ac4wNQcoGnZ16ymMHo4cRAf5wCh2VcGGqSqbX8jPoj2dxJoZw92MPKXdX2Eh2nvuu8aGogcshKQtGtczoQXq1MZDUuX6UrurwGWPEbvFXUCCj3rB26oJ3EAy3N3ZaWbjtWXHMS5xERT9G4xBqSHBFgaVhqpfSvxL1EBRaGygZ9UhhozeCpm1K6tMxPAfmj51YVB1pE1god1HarQ4n2kXq9TwV6AafPWddJDcPQQFF33LohY3Uz8UMvA4gzZwSXcYwBZAvmAURxUCQpHDoomUecwzGU6g6fC71Y3qdTfV", + "stackHeight": 2 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [1]", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 10023 of 983192 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 26718 of 999850 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 26868 + }, + "blockTime": 1746552073 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/KEDxBy4WN28XgH9AXvfukkZRohwaCybdTHeYuEaVXEb1hfm6rXSsJ2hxBckAjH3EDNMUpFnzTqo7oKsC6SXHtAC b/tests/data/transactions/batched_tree_transactions/KEDxBy4WN28XgH9AXvfukkZRohwaCybdTHeYuEaVXEb1hfm6rXSsJ2hxBckAjH3EDNMUpFnzTqo7oKsC6SXHtAC new file mode 100644 index 00000000..c5379a3e --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/KEDxBy4WN28XgH9AXvfukkZRohwaCybdTHeYuEaVXEb1hfm6rXSsJ2hxBckAjH3EDNMUpFnzTqo7oKsC6SXHtAC @@ -0,0 +1,97 @@ +{ + "slot": 157, + "transaction": [ + "AQ+4GJH7YkjA5DOjLd3tPpkoFBhlnRJAKjTzqIqAnVd7WR+I70moqkpt9aejb6sZRFqT2lLrSchI74Wvl6j4KAEBAAcKeiGC7CowvJIstkh88PnSr2WEDY9TdVntq2WiGjIGJiNPL8LQWvwrEthMKXEIoXESvMrPc33rl26npvlOS90m26eeSDlsVuDVTj+5sQPFmF4L4Yw5qusdd/SNQPAGVKJYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E+7ModRBcroW1tER2B+2/4UUnv7QjkRykBCO/0VJ6JnVN+EoN+l+fkuEeNW2fr9KApmKmX0QAglY3RyTWb7QQ/gIEAAUCQEIPAAUKAAAIBwkGAgUDAU8aEKkHFcryGUMAAAAAAAAAAAEAAAB6IYLsKjC8kiy2SHzw+dKvZYQNj1N1We2rZaIaMgYmI0BCDwAAAAAAAAAAAAAAAAABQEIPAAAAAAAB", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999993977218, + 29687442, + 1000000, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "postBalances": [ + 99999992967217, + 29692443, + 2000000, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 3, + "accounts": [ + 0, + 2 + ], + "data": "3Bxs4Bc3VYuGVB19", + "stackHeight": 2 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [ + 9, + 8, + 1 + ], + "data": "21HGgNSLz1yYgjRayL37XWwxDSqDsgEEKzhJdvMbV9nnMr13tjtwkoLbMueYAc31hWMwJeumYKb1xSaNCFZ1bjo4YjJQVRY8XKY7J4VgfWWb2ujRc6PE4cct8eaWQ2YqaMyikMAg83Hh7ah3ScvXx1CjXrzA5Wb9vU9RrwiXzVsPVkLrM8GWjMBwnMEToPdBjfAiauf9CP8ftYS5qLVhbPd7KJSaQUctsQVyiP8JHz37C2Qa6SxF", + "stackHeight": 2 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [1]", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 4419 of 987457 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 16849 of 999850 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 16999 + }, + "blockTime": 1746552057 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/MAJxdpo6YpXKbLve9CqYZpEBTWDmtPxUaLpjmkD7duCESnzH2uW6jvPZzsBZLchkbtW1E2wtniwqnUETCgYf488 b/tests/data/transactions/batched_tree_transactions/MAJxdpo6YpXKbLve9CqYZpEBTWDmtPxUaLpjmkD7duCESnzH2uW6jvPZzsBZLchkbtW1E2wtniwqnUETCgYf488 new file mode 100644 index 00000000..d0f4f281 --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/MAJxdpo6YpXKbLve9CqYZpEBTWDmtPxUaLpjmkD7duCESnzH2uW6jvPZzsBZLchkbtW1E2wtniwqnUETCgYf488 @@ -0,0 +1,97 @@ +{ + "slot": 233, + "transaction": [ + "ARFiupRBkgCgds+9KSPmBxU5CNJprifzPCO39ZFvbDF7XMx0EvT4X0TLW+M0ALztEdtdBCywLGcoK7q1sINfgAkBAAcKeiGC7CowvJIstkh88PnSr2WEDY9TdVntq2WiGjIGJiNPL8LQWvwrEthMKXEIoXESvMrPc33rl26npvlOS90m26eeSDlsVuDVTj+5sQPFmF4L4Yw5qusdd/SNQPAGVKJYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E+7ModRBcroW1tER2B+2/4UUnv7QjkRykBCO/0VJ6JnU5b3dOAp9QVTAlQ+GTFdmAJkVkzMdpDKQz4nOruw+UXgIEAAUCQEIPAAUKAAAIBwkGAgUDAU8aEKkHFcryGUMAAAAAAAAAAAEAAAB6IYLsKjC8kiy2SHzw+dKvZYQNj1N1We2rZaIaMgYmI0BCDwAAAAAAAAAAAAAAAAABQEIPAAAAAAAB", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999962357156, + 29997504, + 32000000, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "postBalances": [ + 99999961347155, + 30002505, + 33000000, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 3, + "accounts": [ + 0, + 2 + ], + "data": "3Bxs4Bc3VYuGVB19", + "stackHeight": 2 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [ + 9, + 8, + 1 + ], + "data": "21HGgNSLz1yYgjRayL37XWwxDSqDsgEEKzhJdvMbV9nnMr13tjtwkoLbMueYAc31hWMwJeumaPtd9q9PyCivz9kD8sAVh4aqEacXwVuEy4kPu5JQFFjN5PGB2UxMGkAfFA5xokdHDwRVhkwWBZjkyTq5sn9VMBqor2FRiiNJTtkF1YVwrbqam4tTHVtRP477AWQoeKKV6QmmnQMedfMAAsS1MbxSErUKHienCmvuT7mBcV7YTHVh", + "stackHeight": 2 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [1]", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 4419 of 987457 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 16849 of 999850 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 16999 + }, + "blockTime": 1746552092 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/PYjvxszV4ZGnRdTWNmvyB3PxCuFyr8rs8zNKgtmmFwotgxdtXqzaCuSNpDJxmofZ5wsP7f4dd32UfBtNsnQxdbM b/tests/data/transactions/batched_tree_transactions/PYjvxszV4ZGnRdTWNmvyB3PxCuFyr8rs8zNKgtmmFwotgxdtXqzaCuSNpDJxmofZ5wsP7f4dd32UfBtNsnQxdbM new file mode 100644 index 00000000..792f4776 --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/PYjvxszV4ZGnRdTWNmvyB3PxCuFyr8rs8zNKgtmmFwotgxdtXqzaCuSNpDJxmofZ5wsP7f4dd32UfBtNsnQxdbM @@ -0,0 +1,87 @@ +{ + "slot": 238, + "transaction": [ + "ARNxoqDlxWxsq/MQeoFmZDOR1CfmQgnIU3wP28l3Y8tV9LEkD9zZ3+TaVaLezxesWHOXiTGoTQ71H0+mIyLFxQABAAcKeiGC7CowvJIstkh88PnSr2WEDY9TdVntq2WiGjIGJiNPL8LQWvwrEthMKXEIoXESvMrPc33rl26npvlOS90m2/KuWuX0POEKz8TJiMAjOgmV1yiV9Am40XHqZVvj8yn+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E+7ModRBcroW1tER2B+2/4UUnv7QjkRykBCO/0VJ6JnWcUqxAnt6b8Dxe34diUt1Vh26MZ54+WjG4mVoeDTmAZAIEAAUCQEIPAAULAAAIBwkGBQUDAgF7GhCpBxXK8hlvAAAAAAEAAAB6IYLsKjC8kiy2SHzw+dKvZYQNj1N1We2rZaIaMgYmI0BCDwAAAAAAAAAAAUQAAAABAAAAAQAAAAAAAAAAAAAjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEIPAAAAAAAAAAEAAAAAAAAA", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999959307151, + 30022509, + 290204160, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "postBalances": [ + 99999959297150, + 30027510, + 290204160, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [ + 9, + 8, + 1, + 2 + ], + "data": "95YB9JH8MTYtuZfgNwFoqXrHyAGbLDGnJGTP7W65BVLs9PQFLKHxNm7AGLwFbQ7W4FLTQyngcuAM9rxBcraYnZj4ki2F4UPRZ5woGjikfoHpEQ43R5yxwp9JRwuf74r5dsQxWgd163Ujy81CrzDhJd2vUk3WhV2sAi6SVctDsVRj1TifSN5zN2F7aPCm152HrUbe7vqiqEL557fxiULgGfQJgQ1KvS2A5yGUnenVnQYU9TU5HuzrE5qAvmjGYpor1FUXrjB9gJAV94ZucHpMG8gk1Sv5pRTkSPrw1nTfvtHiLorWFXiX9T9VY1ow1j9cTiMVmLgUbFEvhifebNqvSMPjGR7VtciJiBkEjmo7b9JM1XjziDodY16XRd573SCeE53sMztwpPQdWuCFtgzybu", + "stackHeight": 2 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [1]", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 10113 of 983192 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 26808 of 999850 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 26958 + }, + "blockTime": 1746552094 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/SZf4xqeJQKirbgpC6EiJKeKMHJDfTEyyxurqNM1PR8SW2u8fvDy7Ui94cZ3W5FjjThAaCoiugqyER5S89nsDXAb b/tests/data/transactions/batched_tree_transactions/SZf4xqeJQKirbgpC6EiJKeKMHJDfTEyyxurqNM1PR8SW2u8fvDy7Ui94cZ3W5FjjThAaCoiugqyER5S89nsDXAb new file mode 100644 index 00000000..978f15b6 --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/SZf4xqeJQKirbgpC6EiJKeKMHJDfTEyyxurqNM1PR8SW2u8fvDy7Ui94cZ3W5FjjThAaCoiugqyER5S89nsDXAb @@ -0,0 +1,97 @@ +{ + "slot": 228, + "transaction": [ + "ARYLaqFriRM0qfR4eFxDsfFdbxORHIwUhR6SIQNtWDkIOAaq2wA8zFD9Sl7INewCvSFpq0HCx4saaMmbYeaVpQQBAAcKeiGC7CowvJIstkh88PnSr2WEDY9TdVntq2WiGjIGJiNPL8LQWvwrEthMKXEIoXESvMrPc33rl26npvlOS90m26eeSDlsVuDVTj+5sQPFmF4L4Yw5qusdd/SNQPAGVKJYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E+7ModRBcroW1tER2B+2/4UUnv7QjkRykBCO/0VJ6JnX5wdIl+bPABG9gbbYMX6mJa6qy9ES6Ydj2Lw3HtTI7SgIEAAUCQEIPAAUKAAAIBwkGAgUDAU8aEKkHFcryGUMAAAAAAAAAAAEAAAB6IYLsKjC8kiy2SHzw+dKvZYQNj1N1We2rZaIaMgYmI0BCDwAAAAAAAAAAAAAAAAABQEIPAAAAAAAB", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999964397160, + 29977500, + 30000000, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "postBalances": [ + 99999963387159, + 29982501, + 31000000, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 3, + "accounts": [ + 0, + 2 + ], + "data": "3Bxs4Bc3VYuGVB19", + "stackHeight": 2 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [ + 9, + 8, + 1 + ], + "data": "21HGgNSLz1yYgjRayL37XWwxDSqDsgEEKzhJdvMbV9nnMr13tjtwkoLbMueYAc31hWMwJeumcm253WZPnfHF8vHAyypKxJznN6jf76rofRRrd4qqyJYaWoCEapfWsx3HPrAnt2PGgmbNPg71hahDaWbqC89dtY6naw32u8AfcPaXcBfguw46naVXvoDmJuEsLucPYebaDf9bzBinSnfcwLk7NSxoGh3LrZLSoyQU5vo1tdoTvhhh", + "stackHeight": 2 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [1]", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 3575 of 987457 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 16005 of 999850 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 16155 + }, + "blockTime": 1746552090 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/UCcga7ob38iFzPtpjYN7Ka7TwvwV9kDx5sVUfEVmKZv1mSaBdcneHupV4qcvpfDNq3HbWvzbnKZScBinHQimnny b/tests/data/transactions/batched_tree_transactions/UCcga7ob38iFzPtpjYN7Ka7TwvwV9kDx5sVUfEVmKZv1mSaBdcneHupV4qcvpfDNq3HbWvzbnKZScBinHQimnny new file mode 100644 index 00000000..592bf23a --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/UCcga7ob38iFzPtpjYN7Ka7TwvwV9kDx5sVUfEVmKZv1mSaBdcneHupV4qcvpfDNq3HbWvzbnKZScBinHQimnny @@ -0,0 +1,87 @@ +{ + "slot": 259, + "transaction": [ + "ARd023WcehkmIKgVlLwG0DzpZjLHG2A257l44HIZaeW7G8mTRwdbUHcJAZp5kb59VRv8ZVgoV88bPmHKsCFenw4BAAcKeiGC7CowvJIstkh88PnSr2WEDY9TdVntq2WiGjIGJiNPL8LQWvwrEthMKXEIoXESvMrPc33rl26npvlOS90m2/KuWuX0POEKz8TJiMAjOgmV1yiV9Am40XHqZVvj8yn+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E+7ModRBcroW1tER2B+2/4UUnv7QjkRykBCO/0VJ6JnXof4piccEPU1uqF5K9D/jljpOmCvI/v1+EPYuaL0+jSwIEAAUCQEIPAAULAAAIBwkGBQUDAgF7GhCpBxXK8hlvAAAAAAEAAAB6IYLsKjC8kiy2SHzw+dKvZYQNj1N1We2rZaIaMgYmI0BCDwAAAAAAAAAAAVYAAAABAAAAAQAAAAAAAAAAAAAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEIPAAAAAAAAAAEAAAAAAAAA", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999950127133, + 30112527, + 290204160, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "postBalances": [ + 99999950117132, + 30117528, + 290204160, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [ + 9, + 8, + 1, + 2 + ], + "data": "95YB9JH8MTYtuZfgNwFoqXrHy6HWbGCAkCeWQRXdA6Aae9mRSPdHqu6qbvXxSCTBtwepLfWrXkKtqG2k1Yo84ivS1AJYV5ijgszAtSJ1iWCwao1cHXKXi5KW2GtWXHejgQ7TyuFjpMPY5qJhH7PZRCmbNde1p1wzhyrTCx22qFatc6zdZJQb1dSvRHDzzXrsnucNbiNQRSZfgbfpDenRuXjiuNvxinmgLSRnirUEGgHC3niV9tyXbqZzYk1xnEGmogo6nTx3tTXDMn42pGa2AEcG5W942FvvUhfgCcKM6W41HjiE27MNBGgTqpxcf83pnZzsdD8ofTts2qXfFHYSEwX7xT2cEanRjK6d8Vx9qoST4FdHeoiQ1ERqAWKtn6QZ6xfPE4RudZ8ziyD7sj6AaT", + "stackHeight": 2 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [1]", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 10101 of 983192 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 26796 of 999850 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 26946 + }, + "blockTime": 1746552104 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/atVddsJJmxhSJ1Bp6n9RV6MBmRsmmd3xEJusfiyXZ9p9DN4Uq8UDBt1seTASvEWggNXjmxdf4QzsPd9wknfdH9V b/tests/data/transactions/batched_tree_transactions/atVddsJJmxhSJ1Bp6n9RV6MBmRsmmd3xEJusfiyXZ9p9DN4Uq8UDBt1seTASvEWggNXjmxdf4QzsPd9wknfdH9V new file mode 100644 index 00000000..9bad2161 --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/atVddsJJmxhSJ1Bp6n9RV6MBmRsmmd3xEJusfiyXZ9p9DN4Uq8UDBt1seTASvEWggNXjmxdf4QzsPd9wknfdH9V @@ -0,0 +1,87 @@ +{ + "slot": 176, + "transaction": [ + "AR05O/IYvGiYZTCKe1J7MbxeeuGmBkyMIbHx8gPVUneJ9S94c3C6/8BTn2zYNnci0nLWC/96rSXqvXM9ewvKSwwBAAcKeiGC7CowvJIstkh88PnSr2WEDY9TdVntq2WiGjIGJiNPL8LQWvwrEthMKXEIoXESvMrPc33rl26npvlOS90m2/KuWuX0POEKz8TJiMAjOgmV1yiV9Am40XHqZVvj8yn+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E+7ModRBcroW1tER2B+2/4UUnv7QjkRykBCO/0VJ6JnXZGqT2e0Jo/bmMKd03tfYcVXeFCOAQNoj0OM6l99ARqgIEAAUCQEIPAAULAAAIBwkGBQUDAgF7GhCpBxXK8hlvAAAAAAEAAAB6IYLsKjC8kiy2SHzw+dKvZYQNj1N1We2rZaIaMgYmI0BCDwAAAAAAAAAAARAAAAABAAAAAQAAAAAAAAAAAAAJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEIPAAAAAAAAAAEAAAAAAAAA", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999985827203, + 29762457, + 290204160, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "postBalances": [ + 99999985817202, + 29767458, + 290204160, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [ + 9, + 8, + 1, + 2 + ], + "data": "95YB9JH8MTYtuZfgNwFoqXrHy8UteYqxDUREb9xaG7pRP9yEKE6Bnm8PDDpeDLucYSDgATty69NfuW1yRiCEVoKY6kjcS2CnXqko6rKSBGKVPJnTEbsXYFvPyjv1KZz65qvPQsGz5SL7m6pqzcQzdFG5pcAtPRVabEaPGQA4P2RsUcbbK4ursUGwep1rkEKFQPTJjqde39FS4iVzqf9nZbny34qaaJHPiNYEbj39CayhyvyKfgMsB8cbX6dUaDV9twpfQd2nhMsrk1ELQcVyNosa1mSJNeQPuJVY7ACZKgG7HmAwET85CmjXCux7eQT4EpFbB3scSrEYZnf6dJzWi5WCYXNuTTEuskGqGkipLc1CHu2sxg2FWL9nfFWdDcK7QeqMnfW6iDNpfsG87NLxzK", + "stackHeight": 2 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [1]", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 10023 of 983192 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 26718 of 999850 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 26868 + }, + "blockTime": 1746552065 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/ghDKvW7ogsGLGZ7SPnutvRouNjhiK7zQE6cUtXZtNiPnLE95zPREEvoEn12sTuoQuLGEDi79tsi95Au2eL8s9zU b/tests/data/transactions/batched_tree_transactions/ghDKvW7ogsGLGZ7SPnutvRouNjhiK7zQE6cUtXZtNiPnLE95zPREEvoEn12sTuoQuLGEDi79tsi95Au2eL8s9zU new file mode 100644 index 00000000..330c0fdb --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/ghDKvW7ogsGLGZ7SPnutvRouNjhiK7zQE6cUtXZtNiPnLE95zPREEvoEn12sTuoQuLGEDi79tsi95Au2eL8s9zU @@ -0,0 +1,87 @@ +{ + "slot": 181, + "transaction": [ + "ASI64g8DwjNh8rL6M1Xas2WsPRepZaGp45vR7/qGrsCs8z/RYfn79bXqHLH/TMrVAN/vj9JVOjwB1SzE8XzlmAUBAAcKeiGC7CowvJIstkh88PnSr2WEDY9TdVntq2WiGjIGJiNPL8LQWvwrEthMKXEIoXESvMrPc33rl26npvlOS90m2/KuWuX0POEKz8TJiMAjOgmV1yiV9Am40XHqZVvj8yn+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E+7ModRBcroW1tER2B+2/4UUnv7QjkRykBCO/0VJ6JnWqzF3oXlVGGEn0Q3FfYOx1zT2J95M75keicU677J656gIEAAUCQEIPAAULAAAIBwkGBQUDAgF7GhCpBxXK8hlvAAAAAAEAAAB6IYLsKjC8kiy2SHzw+dKvZYQNj1N1We2rZaIaMgYmI0BCDwAAAAAAAAAAARQAAAABAAAAAQAAAAAAAAAAAAALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEIPAAAAAAAAAAEAAAAAAAAA", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999983787199, + 29782461, + 290204160, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "postBalances": [ + 99999983777198, + 29787462, + 290204160, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [ + 9, + 8, + 1, + 2 + ], + "data": "95YB9JH8MTYtuZfgNwFoqXrHyARJtbARGfhAuajVFFDv4fddexutpc8DY6DqEoUsfevcnfysQjxcQeoq4CB5a5AMLezBhYCvh3DK5Y2PTdtJTktcBGHkbAUkuf7fmGd2pjxAQMTRV11BYTAmm5qTBzkZ58jQQk9ccwua6iFpHo6qDDnfrkvSDXyRmZGCZsAm5V7w7TGb7kQCw6dAF5LF8Ergs7YrCxDnCfmSgYeCZ1kLybtEL8FYh24brwksy4B1R1fB3QasoRRe6XC1CovHEwsbu1kFbX15WX59SKjTcvj8H8iypsehy88kFLwinZFeCU291HzgGrPN2ocEgYpTszDSVdZhX29L58RfPP6tv85janb9eaAL3HVKxwBiSzX9cXFEfdgRFtnCH3c4CU4nsH", + "stackHeight": 2 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [1]", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 9179 of 983192 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 25874 of 999850 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 26024 + }, + "blockTime": 1746552068 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/nV6bdjyKntG6wyQFRs6jGHKNkmoSPP5gbt8mgCegmjXKCu6LMEdhwXAPJxNLPVYRh4YyCWkZpqJXBt8X3NYmsW3 b/tests/data/transactions/batched_tree_transactions/nV6bdjyKntG6wyQFRs6jGHKNkmoSPP5gbt8mgCegmjXKCu6LMEdhwXAPJxNLPVYRh4YyCWkZpqJXBt8X3NYmsW3 new file mode 100644 index 00000000..46039fdc --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/nV6bdjyKntG6wyQFRs6jGHKNkmoSPP5gbt8mgCegmjXKCu6LMEdhwXAPJxNLPVYRh4YyCWkZpqJXBt8X3NYmsW3 @@ -0,0 +1,97 @@ +{ + "slot": 263, + "transaction": [ + "ASc5WqUi7h4NdI8LI7oWcNrIRRPkAAJzZmBio0dQV3lv3KFp/8n8+3LmtZEoIhMg7l5kKzeVG8vO1z8tDCLM1gwBAAcKeiGC7CowvJIstkh88PnSr2WEDY9TdVntq2WiGjIGJiNPL8LQWvwrEthMKXEIoXESvMrPc33rl26npvlOS90m26eeSDlsVuDVTj+5sQPFmF4L4Yw5qusdd/SNQPAGVKJYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAanVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOCSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fB7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1E+7ModRBcroW1tER2B+2/4UUnv7QjkRykBCO/0VJ6JnW79IGQO0R6X/H/IeBO41jCCbA3u9hjdg1FXSSF7In6awIEAAUCQEIPAAUKAAAIBwkGAgUDAU8aEKkHFcryGUMAAAAAAAAAAAEAAAB6IYLsKjC8kiy2SHzw+dKvZYQNj1N1We2rZaIaMgYmI0BCDwAAAAAAAAAAAAAAAAABQEIPAAAAAAAB", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999949097130, + 30127530, + 45000000, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "postBalances": [ + 99999948087129, + 30132531, + 46000000, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 3, + "accounts": [ + 0, + 2 + ], + "data": "3Bxs4Bc3VYuGVB19", + "stackHeight": 2 + }, + { + "programIdIndex": 3, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 2 + }, + { + "programIdIndex": 6, + "accounts": [ + 9, + 8, + 1 + ], + "data": "21HGgNSLz1yYgjRayL37XWwxDSqDsgEEKzhJdvMbV9nnMr13tjtwkoLbMueYAc31hWMwJeumRxR3C1D3ye9m7Z2HLJEvUZVU9iXUnXkX1E3Fc7aeY4G5URuULB4kYxvibcnGEeamAii4TdsamAXhgP7T3vZoXix8WhCqHrsJm8SxqNapn4NicnEc9etsXGFD6GeR9tLxPVv5txyAktFGHKwfx2abAEonS2qk5EFBejUx4nAwSuPD", + "stackHeight": 2 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [1]", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program 11111111111111111111111111111111 invoke [2]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 3575 of 987457 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 16005 of 999850 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 16155 + }, + "blockTime": 1746552106 +} \ No newline at end of file diff --git a/tests/data/transactions/batched_tree_transactions/z8q9idnkZYE8XwNxGSgfzFX3JuibNL6stoBLLntwMhBArqWQ2zn2WwasLL3g3En21RA6PaNtyBBKqE6PpCrPqYV b/tests/data/transactions/batched_tree_transactions/z8q9idnkZYE8XwNxGSgfzFX3JuibNL6stoBLLntwMhBArqWQ2zn2WwasLL3g3En21RA6PaNtyBBKqE6PpCrPqYV new file mode 100644 index 00000000..4c24a36d --- /dev/null +++ b/tests/data/transactions/batched_tree_transactions/z8q9idnkZYE8XwNxGSgfzFX3JuibNL6stoBLLntwMhBArqWQ2zn2WwasLL3g3En21RA6PaNtyBBKqE6PpCrPqYV @@ -0,0 +1,81 @@ +{ + "slot": 343, + "transaction": [ + "ATFFZAxF/6gifYkNMlRBedtoZ9bJEOFO1rsd87XxoOyL4IZHLCLZ6BJ9m933StVgIAxUbhH8IFMtK8qN6qI2XwIBAAUI7DDUiI4IcYFkGbvXWaOx6/U8oHfKVZ1qGOt5OIzPzJlMm20YZ6Hmhtq+9LocAayVnPPWJjXrHQ48WcmoYfd2+fKuWuX0POEKz8TJiMAjOgmV1yiV9Am40XHqZVvj8yn+BQ0rE3lRNoXPAvK1/VKRvZWbKwYKpSXqWzSBOx25t24JLDbsIvUXgwD9tEqqav/P8KRuHLxkHA4+0J2hO571CAu8D8C7R8ovdMQRLpSrE8+jxjTl3BfqywPNGiPNfnh8EKZefdY5BPg4OtA83uB4uRTYcxiAOxU1gHDXkuBc/ee/0JpqB2XRCNtAAr/vTMhlUxRoo9os/Mr5c0WeIsgS9Jd6nebw9gB4GRW7+dK5xTCysi2BpBzxqM1kg6OsB5RSAQMHAQAGBwQFAq0Bhp7S8Pwj/ff/oAAAAADgNtoy0wkN5FLjSxU9oxO/Nrfkr0Fbkjpy/jMdeVrEhVzcT93EjwOqDj/Aj/Q8JhB5r6zaoUitiVm3Lkcc5ZcYlVtWmnTAp5kmPzFzMcEiKjUES8CaRMboyYO7T1qOVirezFVRQAOjtktRrNAOtc2T2LR0c6NDvwfK7FlhkBmtJAXR/CZBjLI0v5GxbU5iB4Tfq9ouoKe5l0GI5n9UAnI=", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 99999995013200, + 2735280, + 290204160, + 1141440, + 1141440, + 1141440, + 0, + 1614720 + ], + "postBalances": [ + 99999995008200, + 2735280, + 290204160, + 1141440, + 1141440, + 1141440, + 0, + 1614720 + ], + "innerInstructions": [ + { + "index": 0, + "instructions": [ + { + "programIdIndex": 4, + "accounts": [ + 6, + 7, + 5, + 2 + ], + "data": "LmdQuBbApKVFkG74wpm8ce9u3wVLowqALuAwcj9FyzDHw7rR6pGxyk7ifMxsnxgL4J8TmJP6Ue15GJg3JjtgsP1ykJuKJC6AbX1vMmjXPGdB8jAyxHHFHNwbnL6LNNvVT7boxhh3xk6bwBXfiPqz4wtzqb6f4dbXJKiT1j4LjBdi72GsetPd4hyJahiyKTu7Zm62qw1RCGifvUTHKJhzLFEeMr767UX8S3m5rNv1SYy", + "stackHeight": 2 + }, + { + "programIdIndex": 5, + "accounts": [], + "data": "33RnrV5PeYSegsuxuyuhDrnnW8smoxASrgH5K6URdqG8Yoy9KvdLNguRvnMp7e7ZU6nL8tabsvW4BDfgFxBv4nk9zWRCGTbHHgn1ujAwxk9rmF9rDkB8PHxAQ2Nhwvkzb8grq8m7TJGf5BcCLiCsoawdeataedFYs", + "stackHeight": 3 + } + ] + } + ], + "logMessages": [ + "Program Lighton6oQpVkeewmo2mcPTQQp7kYHr4fWpAgJyEmDX invoke [1]", + "Program log: Instruction: BatchNullify", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [2]", + "Program log: Instruction: BatchNullify", + "Program log: Incrementing next full batch index", + "Program noopb9bkMVfRPU8AsbpTUg8AQkHtKwMYZiFUjNRtMmV invoke [3]", + "Program noopb9bkMVfRPU8AsbpTUg8AQkHtKwMYZiFUjNRtMmV consumed 38 of 82713 compute units", + "Program noopb9bkMVfRPU8AsbpTUg8AQkHtKwMYZiFUjNRtMmV success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 101589 of 184105 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program Lighton6oQpVkeewmo2mcPTQQp7kYHr4fWpAgJyEmDX consumed 119407 of 200000 compute units", + "Program Lighton6oQpVkeewmo2mcPTQQp7kYHr4fWpAgJyEmDX success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 119407 + }, + "blockTime": 1746552145 +} \ No newline at end of file diff --git a/tests/data/transactions/four_cpi_events/AxJEkZHRgs4QdppdzRWKNBvxX3yjPhRR17CJ8EYe6ooneNe4Yiziggn6hs3iNezXeuMM8VtUZ2as7ZTZfcbQ4GR b/tests/data/transactions/four_cpi_events/AxJEkZHRgs4QdppdzRWKNBvxX3yjPhRR17CJ8EYe6ooneNe4Yiziggn6hs3iNezXeuMM8VtUZ2as7ZTZfcbQ4GR new file mode 100644 index 00000000..61606422 --- /dev/null +++ b/tests/data/transactions/four_cpi_events/AxJEkZHRgs4QdppdzRWKNBvxX3yjPhRR17CJ8EYe6ooneNe4Yiziggn6hs3iNezXeuMM8VtUZ2as7ZTZfcbQ4GR @@ -0,0 +1,272 @@ +{ + "slot": 20, + "transaction": [ + "AQiVW/G68AX4mHs6VsBFCiw8B213VHPqDxeno/j2UjfgbHeQuUpMDWgViEzQk5lTYpCaEMRRuYFO303vYrybZQIBAAkLTc8+B3ami5nK2Ix7Ds8n2peuunf+1+h1jfTidiMykilPL8LQWvwrEthMKXEIoXESvMrPc33rl26npvlOS90m2wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwZGb+UhFzL/7K26csOb57yM5bvF9xJrLEObOkAAAAAGp1X4ITkFTUQksVrwxDDPL0t/mHk62hJS1I82ZsbLzgksNuwi9ReDAP20Sqpq/8/wpG4cvGQcDj7QnaE7nvUIC7wPwLtHyi90xBEulKsTz6PGNOXcF+rLA80aI81+eHwe68SM+zJku8NL9cWlqDT8Z1AAbymG2W8jW8iHXvTdRNWem8sa08HDC9sJmzqsOsj+S+dqH6i3TLNx6mW/Y5xi9f/NHLoyuMDzJdu5uE5yCqPBB+d1u+u44BM7lLKWQ/L7syh1EFyuhbW0RHYH7b/hRSe/tCORHKQEI7/RUnomdbZ+P+kyPOzLxthhcWGuQmhHHvh1Gjvn0wdf6rcc7T0FAgMABQJAQg8ACAoABAUKBwYICQIByQG0hQwQUFe47rsAAAAA/9Wem8sa08HDC9sJmzqsOsj+S+dqH6i3TLNx6mW/Y5xiAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAABAAAA1Z6byxrTwcML2wmbOqw6yP5L52ofqLdMs3HqZb9jnGIAAAAAAAAAAAAB//////////8fAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAAAAAAAAAAAA/wQ=", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 10000000000, + 29677440, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "postBalances": [ + 9999974996, + 29697444, + 1, + 1, + 1141440, + 1141440, + 1141440, + 1614720, + 1141440, + 0, + 0 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 4, + "accounts": [ + 0, + 9, + 7, + 6, + 10, + 5, + 8, + 4, + 4, + 2, + 4, + 1 + ], + "data": "8YvCdR88QohB6scj6CwdqrrQWvmU6JX91YahJ5wrQFm91E1qHMAgWkERrdjKQGzyrNVF54jmNKaVYaCXRjSTQ4A8qQQTRy6jYQRoQh1zHkwVYqXyrAJvtN5bBNYzAGuiYZaeMpooJfHc4gUi6cohUBXtc3eUbebLeYF1D3jV3ekiv2REcwdPgmg6kWSz8ZjykWiRNHE3VnqUfYcgGLVL9u3J3MiUmX9u58e8BgZa81PfyLhprYc3kgtyMKNWypT2NmuHaBbTrcH5kzN3", + "stackHeight": 2 + }, + { + "programIdIndex": 2, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 3 + }, + { + "programIdIndex": 5, + "accounts": [ + 10, + 7, + 1 + ], + "data": "21HGgNSLz1yYgjRayL37XWwxDSqDsgEEKzhJdvMbV9nnMr13tjtwkoLbMueYAc31hWMwJeumQbiUnvkiVA9xpvWxFZbxzApjqEZoZxgDonG9VPqbSAPH7L56CN7ZgSYhgfa8G5NeSiXACEHdxBA5qhyvHVZWqvi3d5Pq4Ux1rFE4FVwQJBMYSAwW4WMxCzNqiqqJe5nLNPFGpgCqrRYfXACAEFoEypHG5Hawkupa5nfsHFup6bC3", + "stackHeight": 3 + }, + { + "programIdIndex": 4, + "accounts": [ + 0, + 9, + 7, + 6, + 10, + 5, + 8, + 4, + 4, + 2, + 4, + 1 + ], + "data": "8YvCdR88QohB6scj6CwdqrrQWvmU6JX91YahJ5wrQFm91E1qHMAgWkERrdjKQGzyrNVF54jmNKaVYaCXRjSTQ4A8qQQTRy6jYQRoQh1zHkwVYqXyrAJvtN5bBNYzAGuiYZaeMpooJfHc4gUi6cohUBXtc3eUbebLeYF1D3jV3ekiv2REcwdPgmg6kWSz8ZjykWiRNHE3VnqUfYcgGLVL9u3J3MiUmX9u58e8BgZa81PfyLhprYc3kgtyMKNWypT2NmuHaBbTrcH5kzN3", + "stackHeight": 2 + }, + { + "programIdIndex": 2, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 3 + }, + { + "programIdIndex": 5, + "accounts": [ + 10, + 7, + 1 + ], + "data": "21HGgNSLz1yYgjRayL37XWwxDSqDsgEEKzhJdvMbV9nnMr13tjtwkoLbMueYAc31hWMwJeumPteQvCXTe2Ky8tVPZgXcX8SxD86Dwq2rm7hBBdrG7gMRc6PLBYt7X8BrD34eFvzrCPcMWAG29txgCgf4ei6A6Cec3Rwn3Hy9179CQv6jE1rBC451Njm435NZgsi12a4d8kCYXBMETqR2XH4fWjuMXRX5W9qK7MY4rP864hPA8a7R", + "stackHeight": 3 + }, + { + "programIdIndex": 4, + "accounts": [ + 0, + 9, + 7, + 6, + 10, + 5, + 8, + 4, + 4, + 2, + 4, + 1 + ], + "data": "8YvCdR88QohB6scj6CwdqrrQWvmU6JX91YahJ5wrQFm91E1qHMAgWkERrdjKQGzyrNVF54jmNKaVYaCXRjSTQ4A8qQQTRy6jYQRoQh1zHkwVYqXyrAJvtN5bBNYzAGuiYZaeMpooJfHc4gUi6cohUBXtc3eUbebLeYF1D3jV3ekiv2REcwdPgmg6kWSz8ZjykWiRNHE3VnqUfYcgGLVL9u3J3MiUmX9u58e8BgZa81PfyLhprYc3kgtyMKNWypT2NmuHaBbTrcH5kzN3", + "stackHeight": 2 + }, + { + "programIdIndex": 2, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 3 + }, + { + "programIdIndex": 5, + "accounts": [ + 10, + 7, + 1 + ], + "data": "21HGgNSLz1yYgjRayL37XWwxDSqDsgEEKzhJdvMbV9nnMr13tjtwkoLbMueYAc31hWMwJeuma4BKXuLreV7ZqyzhJmYiDwbs5n99aCMjn1U5e4QFCmPoSkBJMwnBGaM32SNPJXgxXbAZk3176PwCHBXuw7f9UFo8FNUCdHmJ8dufL2xnPvvsT4ARsZzQn6UzwMnWZndNVTGUcMhBKYQPaWEKre1xT8j27EBJesmkF9E7wTZvHWWB", + "stackHeight": 3 + }, + { + "programIdIndex": 4, + "accounts": [ + 0, + 9, + 7, + 6, + 10, + 5, + 8, + 4, + 4, + 2, + 4, + 1 + ], + "data": "8YvCdR88QohB6scj6CwdqrrQWvmU6JX91YahJ5wrQFm91E1qHMAgWkERrdjKQGzyrNVF54jmNKaVYaCXRjSTQ4A8qQQTRy6jYQRoQh1zHkwVYqXyrAJvtN5bBNYzAGuiYZaeMpooJfHc4gUi6cohUBXtc3eUbebLeYF1D3jV3ekiv2REcwdPgmg6kWSz8ZjykWiRNHE3VnqUfYcgGLVL9u3J3MiUmX9u58e8BgZa81PfyLhprYc3kgtyMKNWypT2NmuHaBbTrcH5kzN3", + "stackHeight": 2 + }, + { + "programIdIndex": 2, + "accounts": [ + 0, + 1 + ], + "data": "3Bxs4PnTAWgtW7QT", + "stackHeight": 3 + }, + { + "programIdIndex": 5, + "accounts": [ + 10, + 7, + 1 + ], + "data": "21HGgNSLz1yYgjRayL37XWwxDSqDsgEEKzhJdvMbV9nnMr13tjtwkoLbMueYAc31hWMwJeumcbwCGdWF8m3K1hbCPK3UGyzhhFyPqXMPs8pWKWd7RmSoqj7BNqD1Ne2ok9tQnWVLtjY5NCmbXM5k2E7FBU5CJnLmz6dQaBVJ8Ux1Mw45KnmyKE7AjE3GAwkshod8T2AGabtiPdAPgU9JgFwF78WET2JSV4ojmUwm9jApkBMDuWCF", + "stackHeight": 3 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy invoke [1]", + "Program log: Instruction: InvokeCpiMultiple", + "Program log: invoke_cpi_multiple cpi 0", + "Program consumption: 995967 units remaining", + "Program consumption: 995476 units remaining", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [2]", + "Program log: invoke_cpi_with_read_only", + "Program log: mode Anchor", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [3]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 3579 of 976107 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 16561 of 989046 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success", + "Program log: invoke_cpi_multiple cpi 1", + "Program consumption: 971619 units remaining", + "Program consumption: 971128 units remaining", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [2]", + "Program log: invoke_cpi_with_read_only", + "Program log: mode Anchor", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [3]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 4419 of 951759 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 17401 of 964698 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success", + "Program log: invoke_cpi_multiple cpi 2", + "Program consumption: 946431 units remaining", + "Program consumption: 945940 units remaining", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [2]", + "Program log: invoke_cpi_with_read_only", + "Program log: mode Anchor", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [3]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 4419 of 926571 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 17401 of 939510 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success", + "Program log: invoke_cpi_multiple cpi 3", + "Program consumption: 921243 units remaining", + "Program consumption: 920752 units remaining", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [2]", + "Program log: invoke_cpi_with_read_only", + "Program log: mode Anchor", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [3]", + "Program log: Instruction: InsertIntoQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 4419 of 901383 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 17401 of 914322 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy consumed 103541 of 999850 compute units", + "Program FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 103691 + }, + "blockTime": 1746054441 +} \ No newline at end of file diff --git a/tests/integration_tests/batched_address_tree_tests.rs b/tests/integration_tests/batched_address_tree_tests.rs new file mode 100644 index 00000000..9679a034 --- /dev/null +++ b/tests/integration_tests/batched_address_tree_tests.rs @@ -0,0 +1,282 @@ +use crate::utils::*; +use function_name::named; +use light_hasher::hash_to_field_size::hashv_to_bn254_field_size_be_const_array; +use light_hasher::Poseidon; +use num_bigint::BigUint; +use photon_indexer::api::method::get_batch_address_update_info::GetBatchAddressUpdateInfoRequest; +use photon_indexer::api::method::get_multiple_new_address_proofs::{ + AddressListWithTrees, AddressWithTree, +}; +use photon_indexer::common::typedefs::serializable_pubkey::SerializablePubkey; +use rand::prelude::StdRng; +use rand::{Rng, SeedableRng}; +use serial_test::serial; +use solana_pubkey::Pubkey; +use solana_transaction_status::EncodedConfirmedTransactionWithStatusMeta; +use std::str::FromStr; + +/// Derives a compressed address from the provided seed, merkle tree pubkey, and program ID. +fn derive_address( + seed: &[u8; 32], + merkle_tree_pubkey: &[u8; 32], + program_id_bytes: &[u8; 32], +) -> [u8; 32] { + let slices = [ + seed.as_slice(), + merkle_tree_pubkey.as_slice(), + program_id_bytes.as_slice(), + ]; + hashv_to_bn254_field_size_be_const_array::<4>(&slices).unwrap() +} + +/// Tests the batched address update process with varying transaction configurations. +/// +/// Test flow: +/// 1. Index transactions creating compressed addresses via CPI. +/// 2. Verify address queue population reflects the indexed state. +/// 3. Index transaction performing BatchAddressUpdate instruction. +/// 4. Verify address queue is cleared by the indexer processing the update. +/// 5. Verify the final Merkle tree root and proofs against a reference tree. +/// +/// # Parameters +/// * `db_backend` - The database backend to use (Sqlite or Postgres) +/// * `addresses_per_tx` - Number of addresses generated per transaction +/// * `num_creation_txs` - Number of creation transactions to process +/// * `test_name` - The original test name to use for finding test data files +async fn run_batched_address_test( + db_backend: DatabaseBackend, + addresses_per_tx: usize, + num_creation_txs: usize, + test_name: &str, +) { + // --- Test Setup --- + let name = test_name; + let setup = setup_with_options( + name.parse().unwrap(), + TestSetupOptions { + network: Network::Localnet, + db_backend, + }, + ) + .await; + reset_tables(setup.db_conn.as_ref()).await.unwrap(); + let sort_by_slot = true; + let signatures = read_file_names(&name, sort_by_slot); + let index_individually = true; // Index one by one + + for (i, sig) in signatures.iter().enumerate() { + println!("{} signature {}", i, sig); + } + + assert!( + !signatures.is_empty(), + "No transaction signatures found for test {}", + name + ); + + // ========================================================================= + // Constants and known values + let address_tree_pubkey = + Pubkey::from_str("EzKE84aVTkCUhDHLELqyJaq1Y7UVVmqxXqZjVHwHY3rK").expect("Invalid Pubkey"); + + let program_id = + Pubkey::from_str("FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy").expect("Invalid Pubkey"); + + // Generate expected addresses + let total_addresses = num_creation_txs * addresses_per_tx; + let mut expected_addresses: Vec<([u8; 32], u64)> = Vec::new(); + let seed = 0; + let mut rng = StdRng::seed_from_u64(seed); + + for i in 0..total_addresses { + let seed = rng.gen(); + let address = derive_address( + &seed, + &address_tree_pubkey.to_bytes(), + &program_id.to_bytes(), + ); + println!("{} address: {:?}", i, address); + expected_addresses.push((address, i as u64)); + } + + assert!( + !expected_addresses.is_empty(), + "expected_addresses list cannot be empty. Provide the known data." + ); + + assert!( + signatures.len() > num_creation_txs, + "Signatures list should contain creation txs + at least one batch update tx" + ); + + // --- Phase 1: Index Address Creation Transactions --- + let creation_signatures = &signatures[..num_creation_txs]; // Assume first N are creations + let batch_update_signatures = &signatures[num_creation_txs..]; // Assume the transaction *immediately following* the creations is the batch update + + println!( + "Indexing {} address creation transactions ({} addresses per tx)...", + creation_signatures.len(), + addresses_per_tx + ); + + for (i, signature) in creation_signatures.iter().enumerate() { + println!( + "Indexing creation signature {}/{}: {}", + i + 1, + num_creation_txs, + signature + ); + index( + &name, + setup.db_conn.clone(), + setup.client.clone(), + &[signature.clone()], + index_individually, + ) + .await; + + // Verify the tree pubkey derived from tx matches the expected one (optional sanity check) + let json_str = + std::fs::read_to_string(format!("tests/data/transactions/{}/{}", name, signature)) + .unwrap(); + let tx_meta: EncodedConfirmedTransactionWithStatusMeta = + serde_json::from_str(&json_str).expect("Failed to parse transaction JSON"); + let accounts = tx_meta + .transaction + .transaction + .decode() + .map(|tx| tx.message.static_account_keys().to_vec()) + .unwrap_or_default() + .into_iter() + .map(|key| Pubkey::from(key.to_bytes())) + .collect::>(); + + assert!( + accounts.contains(&address_tree_pubkey), + "Indexed tx {} does not involve the expected address tree {}", + signature, + address_tree_pubkey + ); + } + + // --- Verify Address Queue State BEFORE Batch Update --- + println!("Verifying address queue state before batch update..."); + let queue_elements_before = setup + .api + .get_batch_address_update_info(GetBatchAddressUpdateInfoRequest { + tree: address_tree_pubkey.to_bytes().into(), + start_offset: None, + batch_size: 100, + }) + .await + .expect("Failed to get address queue elements before batch update"); + + assert_eq!( + queue_elements_before.addresses.len(), + total_addresses, + "Address queue length mismatch before batch update" + ); + + println!("expected_addresses len: {}", expected_addresses.len()); + println!( + "addresses in queue len: {}", + queue_elements_before.addresses.len() + ); + + for (i, element) in queue_elements_before.addresses.iter().enumerate() { + assert_eq!( + element.address.0.to_bytes(), + expected_addresses[i].0, // Compare the underlying [u8; 32] + "Address queue content mismatch at index {} before batch update", + i + ); + } + + println!("Address queue state verified before batch update."); + + // --- Phase 2: Index Batch Update Transaction --- + for signature in batch_update_signatures { + println!("Indexing batch update signature: {}", signature); + index( + &name, + setup.db_conn.clone(), + setup.client.clone(), + &[signature.clone()], + index_individually, + ) + .await; + } + + // --- Verify Address Queue State AFTER Batch Update --- + println!("Verifying address queue state after batch update..."); + let queue_elements_after = setup + .api + .get_batch_address_update_info(GetBatchAddressUpdateInfoRequest { + tree: address_tree_pubkey.to_bytes().into(), + start_offset: None, + batch_size: 100, + }) + .await + .expect("Failed to get address queue elements after batch update"); + + println!("Queue elements after update: {:?}", queue_elements_after); + assert!( + queue_elements_after.addresses.is_empty(), + "Address queue should be empty after batch update, but found {} elements", + queue_elements_after.addresses.len() + ); + println!("Address queue state verified after batch update (empty)."); + + // --- Phase 3: Verify Final Tree State and Proofs --- + let mut reference_tree = + light_merkle_tree_reference::indexed::IndexedMerkleTree::::new(40, 0) + .unwrap(); + + for (hash, _) in &expected_addresses { + let hash_bn = BigUint::from_bytes_be(hash); + reference_tree + .append(&hash_bn) + .expect("Failed to update reference tree"); + } + let final_reference_root = reference_tree.root(); + let new_addresses: Vec = vec![AddressWithTree { + address: SerializablePubkey::from(Pubkey::from(expected_addresses[0].0)), + tree: SerializablePubkey::from(Pubkey::new_from_array(address_tree_pubkey.to_bytes())), + }]; + let proof = setup + .api + .get_multiple_new_address_proofs_v2(AddressListWithTrees(new_addresses)) + .await + .expect("Failed to get multiple new address proofs"); + + let proof_root = proof.value.first().unwrap().root.0; + assert_eq!(final_reference_root, proof_root, "Final tree root mismatch"); + + println!("Final tree state and proofs verified."); +} + +/// Test with 1 address per transaction (50 transactions for 50 addresses) +#[named] +#[rstest] +#[tokio::test] +#[serial] +async fn test_batched_address_transactions( + #[values(DatabaseBackend::Sqlite, DatabaseBackend::Postgres)] db_backend: DatabaseBackend, +) { + // 1 address per transaction, 50 transactions + let test_name = trim_test_name(function_name!()); + run_batched_address_test(db_backend, 1, 50, &test_name).await; +} + +/// Test with 2 addresses per transaction (25 transactions for 50 addresses) +#[named] +#[rstest] +#[tokio::test] +#[serial] +async fn test_batched_address_2_transactions( + #[values(DatabaseBackend::Sqlite, DatabaseBackend::Postgres)] db_backend: DatabaseBackend, +) { + // 2 addresses per transaction, 25 transactions + let test_name = trim_test_name(function_name!()); + run_batched_address_test(db_backend, 2, 25, &test_name).await; +} diff --git a/tests/integration_tests/batched_state_tree_tests.rs b/tests/integration_tests/batched_state_tree_tests.rs new file mode 100644 index 00000000..3d94273f --- /dev/null +++ b/tests/integration_tests/batched_state_tree_tests.rs @@ -0,0 +1,841 @@ +use crate::utils::*; +use borsh::BorshSerialize; +use function_name::named; +use light_compressed_account::QueueType; +use light_hasher::zero_bytes::poseidon::ZERO_BYTES; +use photon_indexer::api::method::get_compressed_accounts_by_owner::GetCompressedAccountsByOwnerRequest; +use photon_indexer::api::method::get_compressed_token_balances_by_owner::{ + GetCompressedTokenBalancesByOwnerRequest, TokenBalance, +}; +use photon_indexer::api::method::get_multiple_compressed_account_proofs::HashList; +use photon_indexer::api::method::get_queue_elements::GetQueueElementsRequest; +use photon_indexer::api::method::get_transaction_with_compression_info::{ + get_transaction_helper, get_transaction_helper_v2, +}; +use photon_indexer::api::method::get_validity_proof::GetValidityProofRequestV2; +use photon_indexer::api::method::utils::GetCompressedTokenAccountsByOwner; +use photon_indexer::common::typedefs::hash::Hash; +use photon_indexer::common::typedefs::serializable_pubkey::SerializablePubkey; +use photon_indexer::common::typedefs::serializable_signature::SerializableSignature; +use photon_indexer::common::typedefs::token_data::TokenData; +use photon_indexer::common::typedefs::unsigned_integer::UnsignedInteger; +use photon_indexer::ingester::persist::COMPRESSED_TOKEN_PROGRAM; +use serial_test::serial; +use solana_pubkey::Pubkey; +use solana_sdk::signature::Signature; +use solana_transaction_status::EncodedConfirmedTransactionWithStatusMeta; +use std::str::FromStr; + +/// Test: +/// 1. get compressed account by owner +/// 2. get compressed account proofs +/// 3. correct root update after batch append and batch nullify events +/// 4. get_validity_proof_v2 +/// 5. get_queue_elements +/// +/// Data: +/// - 50 active compressed accounts with 1_000_000 each owned by Pubkey::new_unique() +/// - 50 nullified compressed accounts +/// - all accounts are inserted into the batched Merkle tree +/// - 10 append events and 5 nullify events (zero knowledge proof size 10) +/// - queues are empty once all transactions are indexed +#[named] +#[rstest] +#[tokio::test] +#[serial] +async fn test_batched_tree_transactions( + #[values(DatabaseBackend::Sqlite)] db_backend: DatabaseBackend, +) { + let trim_test_name = trim_test_name(function_name!()); + let name = trim_test_name; + let setup = setup_with_options( + name.clone(), + TestSetupOptions { + network: Network::Localnet, + db_backend, + }, + ) + .await; + reset_tables(setup.db_conn.as_ref()).await.unwrap(); + let sort_by_slot = true; + let signatures = read_file_names(&name, sort_by_slot); + let index_individually = true; + + let mut collected_target_owners: Vec = Vec::new(); + const TARGET_OWNER_COUNT: usize = 51; + const TARGET_ACCOUNT_LAMPORTS: u64 = 1_000_000; + + for (i, signature) in signatures.iter().enumerate() { + println!("{} signature {}", i, signature); + } + // build tree + let mut merkle_tree = + light_merkle_tree_reference::MerkleTree::::new(32, 0); + let mut merkle_tree_pubkey = Pubkey::default(); + let mut queue_pubkey = Pubkey::default(); + let mut output_queue_len = 0; + let mut input_queue_len = 0; + let mut output_queue_elements = Vec::new(); + let mut input_queue_elements = Vec::new(); + let num_append_events = 10; + let num_nullify_events = 5; + for signature in + signatures[..signatures.len() - (num_append_events + num_nullify_events)].iter() + { + // Index transactions. + index( + &name, + setup.db_conn.clone(), + setup.client.clone(), + &[signature.to_string()], + index_individually, + ) + .await; + let json_str = + std::fs::read_to_string(format!("tests/data/transactions/{}/{}", name, signature)) + .unwrap(); + let transaction: EncodedConfirmedTransactionWithStatusMeta = + serde_json::from_str(&json_str).unwrap(); + + println!("signature {}", signature); + // use get_transaction_helper because get_transaction_with_compression_info requires an rpc endpoint. + // It fetches the instruction and parses the data. + let accounts = get_transaction_helper_v2( + &setup.db_conn, + SerializableSignature(Signature::from_str(signature).unwrap()), + transaction, + ) + .await + .unwrap() + .compressionInfo; + + for opened_account_info in accounts.openedAccounts.iter() { + let account_data = &opened_account_info.account; + if account_data.lamports.0 == TARGET_ACCOUNT_LAMPORTS { + let owner_pk = account_data.owner.0; + if collected_target_owners.len() < TARGET_OWNER_COUNT + && !collected_target_owners.contains(&owner_pk) + { + collected_target_owners.push(owner_pk); + println!( + "Collected target owner ({} of {}): {}", + collected_target_owners.len(), + TARGET_OWNER_COUNT, + owner_pk + ); + } + } + } + + for account in accounts.closedAccounts.iter() { + input_queue_elements + .push((account.account.account.hash.0, account.account.nullifier.0)); + merkle_tree + .update( + &account.account.nullifier.0, + account.account.account.leaf_index.0 as usize, + ) + .unwrap(); + } + for account in accounts.openedAccounts.iter() { + output_queue_elements.push(account.account.hash.0); + while merkle_tree.rightmost_index <= account.account.leaf_index.0 as usize + 2 { + merkle_tree.append(&[0u8; 32]).unwrap(); + } + merkle_tree + .update( + &account.account.hash.0, + account.account.leaf_index.0 as usize, + ) + .unwrap(); + } + + println!("accounts {:?}", accounts); + + // Get output queue elements + if !accounts.openedAccounts.is_empty() { + output_queue_len += accounts.openedAccounts.len(); + merkle_tree_pubkey = accounts.openedAccounts[0].account.merkle_context.tree.0; + queue_pubkey = accounts.openedAccounts[0].account.merkle_context.queue.0; + let get_queue_elements_result = setup + .api + .get_queue_elements(GetQueueElementsRequest { + tree: merkle_tree_pubkey.to_bytes().into(), + start_offset: None, + queue_type: QueueType::OutputStateV2 as u8, + num_elements: 100, + }) + .await + .unwrap(); + assert_eq!(get_queue_elements_result.value.len(), output_queue_len); + for (i, element) in get_queue_elements_result.value.iter().enumerate() { + assert_eq!(element.account_hash.0, output_queue_elements[i]); + let proof = element.proof.iter().map(|x| x.0).collect::>(); + assert_eq!(proof, ZERO_BYTES[..proof.len()].to_vec()); + } + } + // Get input queue elements + if !accounts.closedAccounts.is_empty() { + input_queue_len += accounts.closedAccounts.len(); + merkle_tree_pubkey = accounts.closedAccounts[0] + .account + .account + .merkle_context + .tree + .0; + let get_queue_elements_result = setup + .api + .get_queue_elements(GetQueueElementsRequest { + tree: merkle_tree_pubkey.to_bytes().into(), + start_offset: None, + queue_type: QueueType::InputStateV2 as u8, + num_elements: 100, + }) + .await + .unwrap(); + assert_eq!(get_queue_elements_result.value.len(), input_queue_len); + for (i, element) in get_queue_elements_result.value.iter().enumerate() { + assert_eq!(element.account_hash.0, input_queue_elements[i].0); + let proof = element.proof.iter().map(|x| x.0).collect::>(); + assert_eq!(proof, ZERO_BYTES[..proof.len()].to_vec()); + } + } + } + let filtered_outputs = output_queue_elements + .iter() + .enumerate() + .filter(|(i, _)| i % 2 == 1) + .map(|(_, x)| x) + .collect::>(); + for (_, chunk) in filtered_outputs.chunks(4).enumerate() { + let validity_proof = setup + .api + .get_validity_proof_v2(GetValidityProofRequestV2 { + hashes: chunk + .iter() + .map(|x| Hash::new(&x[..]).unwrap()) + .collect::>(), + new_addresses_with_trees: vec![], + }) + .await + .unwrap(); + + // No value has been inserted into the tree yet -> all proof by index. + assert!(validity_proof + .value + .accounts + .iter() + .all(|x| x.root_index.prove_by_index)); + assert!(validity_proof + .value + .accounts + .iter() + .all(|x| x.merkle_context.tree.to_string() == merkle_tree_pubkey.to_string())); + assert!(validity_proof + .value + .accounts + .iter() + .all(|x| x.merkle_context.queue.to_string() == queue_pubkey.to_string())); + assert!(validity_proof + .value + .accounts + .iter() + .all(|x| x.root.is_empty())); + } + + // Merkle tree which is created along side indexing the event transactions. + let mut event_merkle_tree = + light_merkle_tree_reference::MerkleTree::::new(32, 0); + // Init all 100 elements so that we can just update. + for _ in 0..100 { + event_merkle_tree.append(&[0u8; 32]).unwrap(); + } + let mut last_inserted_index = 0; + + println!("===="); + for (i, signature) in signatures[signatures.len() - (num_append_events + num_nullify_events)..] + .iter() + .take(15) + .enumerate() + { + println!("{} {}", i, signature); + } + println!("===="); + // Index and assert the batch events. + // 10 append events and 5 nullify events. + // The order is: + // append, nullify, append, nullify, append, nullify, append, nullify, append, append, append, append, append, append, nullify + for (i, signature) in signatures[signatures.len() - (num_append_events + num_nullify_events)..] + .iter() + .take(15) + .enumerate() + { + let pre_output_queue_elements = setup + .api + .get_queue_elements(GetQueueElementsRequest { + tree: merkle_tree_pubkey.to_bytes().into(), + start_offset: None, + queue_type: QueueType::OutputStateV2 as u8, + num_elements: 100, + }) + .await + .unwrap(); + let pre_input_queue_elements = setup + .api + .get_queue_elements(GetQueueElementsRequest { + tree: merkle_tree_pubkey.to_bytes().into(), + start_offset: None, + queue_type: QueueType::InputStateV2 as u8, + num_elements: 100, + }) + .await + .unwrap(); + // Index transactions. + index( + &name, + setup.db_conn.clone(), + setup.client.clone(), + &[signature.to_string()], + index_individually, + ) + .await; + let post_output_queue_elements = setup + .api + .get_queue_elements(GetQueueElementsRequest { + tree: merkle_tree_pubkey.to_bytes().into(), + start_offset: None, + queue_type: QueueType::OutputStateV2 as u8, + num_elements: 100, + }) + .await + .unwrap(); + let post_input_queue_elements = setup + .api + .get_queue_elements(GetQueueElementsRequest { + tree: merkle_tree_pubkey.to_bytes().into(), + start_offset: None, + queue_type: QueueType::InputStateV2 as u8, + num_elements: 100, + }) + .await + .unwrap(); + let is_nullify_event = i > 9; + if is_nullify_event { + println!("nullify event {} {}", i, signature); + assert_eq!( + post_output_queue_elements.value.len(), + pre_output_queue_elements.value.len(), + "Nullify event should not change the length of the output queue." + ); + assert_eq!( + post_input_queue_elements.value.len(), + pre_input_queue_elements.value.len() - 10, + "Nullify event should decrease the length of the input queue by 10." + ); + // Insert 1 batch. + for element in pre_input_queue_elements.value[..10].iter() { + println!("nullify leaf index {}", element.leaf_index); + let nullifier = input_queue_elements + .iter() + .find(|x| x.0 == element.account_hash.0) + .unwrap() + .1; + event_merkle_tree + .update(&nullifier, element.leaf_index as usize) + .unwrap(); + } + for element in post_input_queue_elements.value.iter() { + let proof_result = event_merkle_tree + .get_proof_of_leaf(element.leaf_index as usize, true) + .unwrap() + .to_vec(); + let proof = element.proof.iter().map(|x| x.0).collect::>(); + assert_eq!(proof, proof_result); + } + } else { + last_inserted_index += 10; + assert_eq!( + post_input_queue_elements.value.len(), + pre_input_queue_elements.value.len(), + "Append event should not change the length of the input queue." + ); + assert_eq!( + post_output_queue_elements.value.len(), + pre_output_queue_elements.value.len().saturating_sub(10), + "Append event should decrease the length of the output queue by 10." + ); + + println!( + "post input queue len {}", + post_input_queue_elements.value.len(), + ); + println!( + "pre input queue len {}", + pre_input_queue_elements.value.len(), + ); + // Insert 1 batch. + + let slice_length = pre_output_queue_elements.value.len().min(10); + for element in pre_output_queue_elements.value[..slice_length].iter() { + // for element in pre_output_queue_elements.value[..10].iter() { + let leaf = event_merkle_tree.leaf(element.leaf_index as usize); + if leaf == [0u8; 32] { + event_merkle_tree + .update(&element.account_hash.0, element.leaf_index as usize) + .unwrap(); + println!("append leaf index {}", element.leaf_index); + } + } + for element in post_output_queue_elements.value.iter() { + let proof_result = event_merkle_tree + .get_proof_of_leaf(element.leaf_index as usize, true) + .unwrap() + .to_vec(); + let proof = element.proof.iter().map(|x| x.0).collect::>(); + assert_eq!(proof, proof_result); + } + } + for (j, chunk) in filtered_outputs.chunks(4).enumerate() { + let validity_proof = setup + .api + .get_validity_proof_v2(GetValidityProofRequestV2 { + hashes: chunk + .iter() + .map(|x| Hash::new(&x[..]).unwrap()) + .collect::>(), + new_addresses_with_trees: vec![], + }) + .await + .unwrap(); + println!("j {}, validity_proof {:?}", j, validity_proof.value); + + // No value has been inserted into the tree yet -> all proof by index. + let mut base_index = j * 8; + for (z, account_proof) in validity_proof.value.accounts.iter().enumerate() { + println!("z + base index {} {}", z, base_index); + println!("last inserted index {}", last_inserted_index); + if base_index < last_inserted_index { + assert!(!account_proof.root_index.prove_by_index); + } else { + assert!(account_proof.root_index.prove_by_index); + assert_eq!(account_proof.root, ""); + } + base_index += 2; + } + assert!(validity_proof.value.accounts.iter().all(|x| x + .merkle_context + .tree + .to_string() + == merkle_tree_pubkey.to_string())); + assert!(validity_proof.value.accounts.iter().all(|x| x + .merkle_context + .queue + .to_string() + == queue_pubkey.to_string())); + } + } + assert_eq!(event_merkle_tree.root(), merkle_tree.root()); + assert_eq!(output_queue_len, 100); + assert_eq!(input_queue_len, 50); + let get_queue_elements_result = setup + .api + .get_queue_elements(GetQueueElementsRequest { + tree: merkle_tree_pubkey.to_bytes().into(), + start_offset: None, + queue_type: QueueType::OutputStateV2 as u8, + num_elements: 100, + }) + .await + .unwrap(); + assert_eq!( + get_queue_elements_result.value.len(), + 0, + "Batched append events not indexed correctly." + ); + + let get_queue_elements_result = setup + .api + .get_queue_elements(GetQueueElementsRequest { + tree: merkle_tree_pubkey.to_bytes().into(), + start_offset: None, + queue_type: QueueType::InputStateV2 as u8, + num_elements: 100, + }) + .await + .unwrap(); + assert_eq!( + get_queue_elements_result.value.len(), + 0, + "Batched nullify events not indexed correctly." + ); + + // Reprocess the same transactions. + index( + &name, + setup.db_conn.clone(), + setup.client.clone(), + &signatures, + index_individually, + ) + .await; + + assert_eq!( + collected_target_owners.len(), + TARGET_OWNER_COUNT, + "Expected to collect {} target owners from initial transactions, but found {}. Check test data and collection logic.", + TARGET_OWNER_COUNT, + collected_target_owners.len() + ); + let mut expected_owners = collected_target_owners; + expected_owners.remove(0); // closed account owner + + for owner in expected_owners.iter().enumerate() { + println!("{} {}", owner.0, owner.1); + } + // Slot created is wrong likely because of the test environment. + let mut leaf_index = 1; + for (i, current_owner_pk) in expected_owners.iter().enumerate() { + let owner = *current_owner_pk; + + println!( + "Verifying owner (iteration {} from collected list): {}", + i, owner + ); + + println!("Querying for owner: {}", owner); + let accounts = setup + .api + .get_compressed_accounts_by_owner_v2(GetCompressedAccountsByOwnerRequest { + owner: SerializablePubkey::from(owner.to_bytes()), + ..Default::default() + }) + .await + .unwrap(); + + for acc in accounts.value.items.iter() { + println!("acc owner {}", acc.owner); + } + assert_eq!( + accounts.value.items.len(), + 1, + "Expected 1 account for owner {}, but found {}. Iteration index: {}.", + owner, + accounts.value.items.len(), + i + ); + + let account = &accounts.value.items[0]; + assert_eq!(account.lamports.0, 1_000_000u64); + assert_eq!(account.owner.0, owner); + assert_eq!( + account.leaf_index.0, + leaf_index, + "owner {:?} i {}", + owner.to_bytes(), + i + ); + + let reference_merkle_proof = merkle_tree + .get_proof_of_leaf(leaf_index as usize, true) + .unwrap() + .to_vec(); + let merkle_proof = setup + .api + .get_multiple_compressed_account_proofs(HashList(vec![account.hash.clone()])) + .await + .unwrap(); + assert_eq!(merkle_proof.value[0].hash.0, account.hash.0,); + assert_eq!( + merkle_proof.value[0].hash.0, + merkle_tree.leaf(leaf_index as usize) + ); + assert_eq!(account.hash.0, merkle_tree.leaf(leaf_index as usize)); + assert_eq!(merkle_proof.value.len(), 1); + assert_eq!(merkle_proof.value[0].root.0, merkle_tree.root()); + assert_eq!( + merkle_proof.value[0] + .proof + .iter() + .map(|x| x.0) + .collect::>(), + reference_merkle_proof + ); + leaf_index += 2; + } +} + +/// Test correct indexing of token accounts in a batched state Merkle tree. +/// Data: +/// - 4 recipients with 1 token account each +/// - 1 sender with 3 token accounts +/// +/// Asserts: +/// 1. Sender has 3 token accounts with 12341 balance each. +/// 2. Recipients have 1 token account each with 9255, 9255, 9255, 9258 balance. +/// 3. Sender's token balances are correct. +/// 4. Recipients' token balances are correct. +#[named] +#[rstest] +#[tokio::test] +#[serial] +async fn test_batched_tree_token_transactions( + #[values(DatabaseBackend::Sqlite)] db_backend: DatabaseBackend, +) { + for index_individually in [true] { + let trim_test_name = trim_test_name(function_name!()); + let name = trim_test_name; + let setup = setup_with_options( + name.clone(), + TestSetupOptions { + network: Network::Localnet, + db_backend, + }, + ) + .await; + // reset_tables doesn't seem to work. + reset_tables(setup.db_conn.as_ref()).await.unwrap(); + let sort_by_slot = true; + let signatures = read_file_names(&name, sort_by_slot); + println!("signatures {:?}", signatures); + // Index first transaction. + index( + &name, + setup.db_conn.clone(), + setup.client.clone(), + &[signatures[0].clone()], + index_individually, + ) + .await; + + let mint = SerializablePubkey::from( + Pubkey::from_str("D2J2AZChFBGxn4gYeE3gQsR85u3dWBL3foGobGeGxQfJ").unwrap(), + ); + let recipients = [ + Pubkey::from_str("DyRWDm81iYePWsdw1Yn2ue8CPcp7Lba6XsB8DVSGM7HK").unwrap(), + Pubkey::from_str("3YzfcCyqUPE9oubX2Ct9xWn1u5urqmGu6wfcFavHsCQZ").unwrap(), + Pubkey::from_str("2ShDKqkcMmacgYeSsEjwjLVJcoERZ9jgZ8tFyssxd82S").unwrap(), + Pubkey::from_str("24fLJv6tHmsxQg5vDD7XWy85TMhFzJdkqZ9Ta3LtVReU").unwrap(), + ]; + + // sender En9a97stB3Ek2n6Ey3NJwCUJnmTzLMMEA5C69upGDuQP should have spent 3 inputs with 12341 each. + let sender = Pubkey::from_str("En9a97stB3Ek2n6Ey3NJwCUJnmTzLMMEA5C69upGDuQP").unwrap(); + let expected_sender_token_data = TokenData { + mint, + owner: SerializablePubkey::from(sender), + tlv: None, + amount: UnsignedInteger(12341), + delegate: None, + state: photon_indexer::common::typedefs::token_data::AccountState::initialized, + }; + + // 1. assert sender created token accounts + // 3 accounts with balance 12341 each + { + let mut accounts = setup + .api + .get_compressed_token_accounts_by_owner(GetCompressedTokenAccountsByOwner { + owner: SerializablePubkey::from(sender), + ..Default::default() + }) + .await + .unwrap(); + assert_eq!(accounts.value.items.len(), 3); + accounts.value.items.sort_by_key(|a| a.account.leaf_index.0); + for (i, account) in accounts.value.items.iter().enumerate() { + assert_eq!( + account.token_data, expected_sender_token_data, + "Expected sender token data to be {:?}", + expected_sender_token_data + ); + let mut token_data_bytes = Vec::new(); + account.token_data.serialize(&mut token_data_bytes).unwrap(); + + assert_eq!(account.account.address, None); + assert_eq!(account.account.lamports, UnsignedInteger(1_000_000)); + assert_eq!( + account.account.owner, + SerializablePubkey::from(COMPRESSED_TOKEN_PROGRAM) + ); + assert_eq!(account.account.leaf_index.0, i as u64); + assert_eq!(account.account.seq, None); + assert!(account.account.data.is_some()); + } + let sender_balance = setup + .api + .get_compressed_token_balances_by_owner(GetCompressedTokenBalancesByOwnerRequest { + owner: SerializablePubkey::from(sender), + ..Default::default() + }) + .await + .unwrap(); + assert_eq!(sender_balance.value.token_balances.len(), 1); + assert_eq!( + sender_balance.value.token_balances[0], + TokenBalance { + mint, + balance: UnsignedInteger(12341 * 3), + } + ); + } + let mut expected_recipient_token_data_vec = Vec::new(); + + // Reprocess the first transaction, and process the second transaction. + index( + &name, + setup.db_conn.clone(), + setup.client.clone(), + &signatures, + index_individually, + ) + .await; + + // 2. assert sender nullified token accounts when sent to recipients + { + let json_str = std::fs::read_to_string(format!( + "tests/data/transactions/{}/{}", + name, signatures[1] + )) + .unwrap(); + let transaction: EncodedConfirmedTransactionWithStatusMeta = + serde_json::from_str(&json_str).unwrap(); + + // use get_transaction_helper because get_transaction_with_compression_info requires an rpc endpoint. + // It fetches the instruction and parses the data. + let accounts = get_transaction_helper( + &setup.db_conn, + SerializableSignature(Signature::from_str(&signatures[1]).unwrap()), + transaction, + ) + .await + .unwrap() + .compressionInfo; + assert_eq!(accounts.closedAccounts.len(), 3); + // 4 recipients + 1 change account for sol + assert_eq!(accounts.openedAccounts.len(), 4 + 1); + for account in accounts.closedAccounts.iter() { + assert_eq!( + *account.optionalTokenData.as_ref().unwrap(), + expected_sender_token_data + ); + } + + for (i, account) in accounts.openedAccounts.iter().enumerate() { + // Skip sol change account. + let account_token_data = if let Some(account) = &account.optionalTokenData { + account + } else { + continue; + }; + let mut amount = 9255; + if i == 3 { + amount += 3; + } + let owner = recipients[i]; + let expected_recipient_token_data = TokenData { + mint, + owner: SerializablePubkey::from(owner), + tlv: None, + amount: UnsignedInteger(amount), + delegate: None, + state: photon_indexer::common::typedefs::token_data::AccountState::initialized, + }; + expected_recipient_token_data_vec.push(expected_recipient_token_data.clone()); + + assert_eq!(*account_token_data, expected_recipient_token_data); + } + } + // 3. assert recipients: + // 1. created token accounts (get_compressed_token_accounts_by_owner) + // 2. token balances (get_compressed_token_balances_by_owner) + for expected_recipient_token_data in expected_recipient_token_data_vec.iter() { + let accounts = setup + .api + .get_compressed_token_accounts_by_owner(GetCompressedTokenAccountsByOwner { + owner: expected_recipient_token_data.owner, + ..Default::default() + }) + .await + .unwrap(); + + assert_eq!( + accounts.value.items.len(), + 1, + "Expected 1 compressed token account per recipient." + ); + let account = &accounts.value.items[0]; + assert_eq!(account.token_data, *expected_recipient_token_data); + + let accounts = setup + .api + .get_compressed_token_balances_by_owner(GetCompressedTokenBalancesByOwnerRequest { + owner: expected_recipient_token_data.owner, + ..Default::default() + }) + .await + .unwrap(); + assert_eq!(accounts.value.token_balances.len(), 1); + let balance = &accounts.value.token_balances[0]; + let expected_balance = TokenBalance { + mint, + balance: expected_recipient_token_data.amount, + }; + assert_eq!(*balance, expected_balance); + } + } +} + +/// Test indexes a transaction which creates +/// 4 compressed accounts in 4 cpis that create a transaction event each +/// in one outer instruction. +#[named] +#[rstest] +#[tokio::test] +#[serial] +async fn test_four_cpi_events(#[values(DatabaseBackend::Postgres)] db_backend: DatabaseBackend) { + let trim_test_name = trim_test_name(function_name!()); + let name = trim_test_name; + let setup = setup_with_options( + name.clone(), + TestSetupOptions { + network: Network::Localnet, + db_backend, + }, + ) + .await; + reset_tables(setup.db_conn.as_ref()).await.unwrap(); + let sort_by_slot = true; + let signatures = read_file_names(&name, sort_by_slot); + let index_individually = false; + let owner = Pubkey::from_str("FNt7byTHev1k5x2cXZLBr8TdWiC3zoP5vcnZR4P682Uy").unwrap(); + + index( + &name, + setup.db_conn.clone(), + setup.client.clone(), + &signatures, + index_individually, + ) + .await; + let mut leaf_index = 0; + let accounts = setup + .api + .get_compressed_accounts_by_owner_v2(GetCompressedAccountsByOwnerRequest { + owner: SerializablePubkey::from(owner.to_bytes()), + ..Default::default() + }) + .await + .unwrap(); + assert_eq!(accounts.value.items.len(), 4); + for (i, account) in accounts.value.items.iter().enumerate() { + assert_eq!(account.lamports.0, 0u64); + assert_eq!(account.owner.0, owner); + assert_eq!( + account.leaf_index.0, + leaf_index, + "owner {:?} i {}", + owner.to_bytes(), + i + ); + leaf_index += 1; + } +} diff --git a/tests/integration_tests/e2e_tests.rs b/tests/integration_tests/e2e_tests.rs index 0fe10ed7..b2696388 100644 --- a/tests/integration_tests/e2e_tests.rs +++ b/tests/integration_tests/e2e_tests.rs @@ -4,12 +4,14 @@ use function_name::named; use futures::Stream; use photon_indexer::api::method::get_compressed_accounts_by_owner::GetCompressedAccountsByOwnerRequest; use photon_indexer::api::method::get_multiple_new_address_proofs::AddressList; -use photon_indexer::api::method::get_transaction_with_compression_info::get_transaction_helper; -use photon_indexer::api::method::get_validity_proof::CompressedProof; +use photon_indexer::api::method::get_transaction_with_compression_info::{ + get_transaction_helper, get_transaction_helper_v2, +}; +use photon_indexer::api::method::get_validity_proof::{CompressedProof, GetValidityProofRequestV2}; use photon_indexer::common::typedefs::serializable_pubkey::SerializablePubkey; use photon_indexer::ingester::index_block; use solana_client::nonblocking::rpc_client::RpcClient; -use solana_sdk::pubkey::Pubkey; +use solana_pubkey::Pubkey; use crate::utils::*; use futures::pin_mut; @@ -30,10 +32,11 @@ use serial_test::serial; use std::str::FromStr; use futures::StreamExt; +use photon_indexer::common::typedefs::limit::Limit; use photon_indexer::{ api::method::{ get_compression_signatures_for_token_owner::GetCompressionSignaturesForTokenOwnerRequest, - utils::{Limit, SignatureInfo}, + utils::SignatureInfo, }, common::typedefs::serializable_signature::SerializableSignature, }; @@ -148,6 +151,22 @@ async fn test_e2e_mint_and_transfer_transactions( .await .unwrap(); assert_json_snapshot!(format!("{}-{}-accounts", name.clone(), person), accounts); + + // V2 Test + let accounts_v2 = setup + .api + .get_compressed_token_accounts_by_owner_v2(GetCompressedTokenAccountsByOwner { + owner: pubkey, + ..Default::default() + }) + .await + .unwrap(); + + assert_json_snapshot!( + format!("{}-{}-accounts-v2", name.clone(), person), + accounts_v2 + ); + let hash_list = HashList( accounts .value @@ -168,19 +187,33 @@ async fn test_e2e_mint_and_transfer_transactions( .api .get_validity_proof(GetValidityProofRequest { hashes: hash_list.0.clone(), - newAddresses: vec![], - newAddressesWithTrees: vec![], + new_addresses: vec![], + new_addresses_with_trees: vec![], }) .await .unwrap(); // The Gnark prover has some randomness. - validity_proof.value.compressedProof = CompressedProof::default(); - + validity_proof.value.compressed_proof = CompressedProof::default(); assert_json_snapshot!( format!("{}-{}-validity-proof", name.clone(), person), validity_proof ); + // V2 Test for Validity Proof + let mut validity_proof_v2 = setup + .api + .get_validity_proof_v2(GetValidityProofRequestV2 { + hashes: hash_list.0.clone(), + new_addresses_with_trees: vec![], + }) + .await + .unwrap(); + validity_proof_v2.value.compressed_proof = Some(CompressedProof::default()); + assert_json_snapshot!( + format!("{}-{}-validity-proof-v2", name.clone(), person), + validity_proof_v2 + ); + let mut cursor = None; let limit = Limit::new(1).unwrap(); let mut signatures = Vec::new(); @@ -225,13 +258,22 @@ async fn test_e2e_mint_and_transfer_transactions( for (txn_name, txn_signature) in [("mint", mint_tx), ("transfer", transfer_tx)] { let txn = cached_fetch_transaction(&setup.name, setup.client.clone(), txn_signature).await; + let txn_clone = + cached_fetch_transaction(&setup.name, setup.client.clone(), txn_signature).await; let txn_signature = SerializableSignature(Signature::from_str(txn_signature).unwrap()); // Test get transaction - let parsed_transaction: photon_indexer::api::method::get_transaction_with_compression_info::GetTransactionResponse = get_transaction_helper(&setup.db_conn, txn_signature, txn).await.unwrap(); + let parsed_transaction: photon_indexer::api::method::get_transaction_with_compression_info::GetTransactionResponse = get_transaction_helper(&setup.db_conn, txn_signature.clone(), txn).await.unwrap(); assert_json_snapshot!( format!("{}-{}-transaction", name.clone(), txn_name), parsed_transaction ); + + // V2 Test for Transactions + let parsed_transaction_v2: photon_indexer::api::method::get_transaction_with_compression_info::GetTransactionResponseV2 = get_transaction_helper_v2(&setup.db_conn, txn_signature, txn_clone).await.unwrap(); + assert_json_snapshot!( + format!("{}-{}-transaction-v2", name.clone(), txn_name), + parsed_transaction_v2 + ); } let mut cursor = None; @@ -347,19 +389,21 @@ async fn test_lamport_transfers( .map(|x| x.hash.clone()) .collect(), ); + let proofs = setup .api .get_multiple_compressed_account_proofs(hash_list.clone()) .await .unwrap(); + assert_json_snapshot!(format!("{}-{}-proofs", name.clone(), owner_name), proofs); let mut validity_proof = setup .api .get_validity_proof(GetValidityProofRequest { hashes: hash_list.0.clone(), - newAddresses: vec![], - newAddressesWithTrees: vec![], + new_addresses: vec![], + new_addresses_with_trees: vec![], }) .await .unwrap_or_else(|_| { @@ -369,8 +413,9 @@ async fn test_lamport_transfers( hash_list.0.len() ) }); + // The Gnark prover has some randomness. - validity_proof.value.compressedProof = CompressedProof::default(); + validity_proof.value.compressed_proof = CompressedProof::default(); assert_json_snapshot!( format!("{}-{}-validity-proof", name.clone(), owner_name), @@ -386,7 +431,7 @@ async fn test_lamport_transfers( .await .unwrap(); - let limit = photon_indexer::api::method::utils::Limit::new(1).unwrap(); + let limit = Limit::new(1).unwrap(); let mut cursor = None; let mut paginated_signatures = Vec::new(); loop { @@ -416,7 +461,6 @@ async fn test_lamport_transfers( .api .get_compressed_balance_by_owner(photon_indexer::api::method::get_compressed_balance_by_owner::GetCompressedBalanceByOwnerRequest { owner, - ..Default::default() }) .await .unwrap(); @@ -565,7 +609,7 @@ async fn test_nullfiier_and_address_queue_transactions( #[values(DatabaseBackend::Sqlite, DatabaseBackend::Postgres)] db_backend: DatabaseBackend, ) { use photon_indexer::api::method::get_multiple_new_address_proofs::{ - AddressListWithTrees, AddressWithTree, ADDRESS_TREE_ADDRESS, + AddressListWithTrees, AddressWithTree, ADDRESS_TREE_V1, }; let name = trim_test_name(function_name!()); @@ -634,7 +678,7 @@ async fn test_nullfiier_and_address_queue_transactions( let address_list_with_trees = AddressListWithTrees(vec![AddressWithTree { address: SerializablePubkey::try_from(address).unwrap(), - tree: SerializablePubkey::from(ADDRESS_TREE_ADDRESS), + tree: SerializablePubkey::from(ADDRESS_TREE_V1), }]); let proof_v2 = setup diff --git a/tests/integration_tests/main.rs b/tests/integration_tests/main.rs index 3b3b58ca..325e77e0 100644 --- a/tests/integration_tests/main.rs +++ b/tests/integration_tests/main.rs @@ -2,6 +2,8 @@ // binary. This has a number of benefits: // 1. Faster compile time since we only have 1 binary. // 2. The ability to add global locks on the DB to prevent tests from interfering with each other. +mod batched_address_tree_tests; +mod batched_state_tree_tests; mod e2e_tests; mod mock_tests; mod open_api_tests; diff --git a/tests/integration_tests/mock_tests.rs b/tests/integration_tests/mock_tests.rs index 32c67b04..6950ed41 100644 --- a/tests/integration_tests/mock_tests.rs +++ b/tests/integration_tests/mock_tests.rs @@ -1,3 +1,4 @@ +use crate::utils::compare_account_with_account_v2; use crate::utils::*; use ::borsh::{to_vec, BorshDeserialize, BorshSerialize}; use function_name::named; @@ -8,7 +9,7 @@ use photon_indexer::api::method::get_compressed_balance_by_owner::GetCompressedB use photon_indexer::api::method::get_compressed_token_balances_by_owner::GetCompressedTokenBalancesByOwnerRequest; use photon_indexer::api::method::get_multiple_compressed_accounts::GetMultipleCompressedAccountsRequest; use photon_indexer::api::method::get_validity_proof::{ - get_validity_proof, GetValidityProofRequest, + get_validity_proof, get_validity_proof_v2, GetValidityProofRequest, GetValidityProofRequestV2, }; use photon_indexer::api::method::utils::{ CompressedAccountRequest, GetCompressedTokenAccountsByDelegate, @@ -16,26 +17,24 @@ use photon_indexer::api::method::utils::{ }; use photon_indexer::common::typedefs::bs58_string::Base58String; use photon_indexer::ingester::persist::persisted_indexed_merkle_tree::{ - get_exclusion_range_with_proof, update_indexed_tree_leaves, validate_tree, + get_exclusion_range_with_proof_v2, update_indexed_tree_leaves_v1, validate_tree, }; use photon_indexer::common::typedefs::unsigned_integer::UnsignedInteger; use photon_indexer::dao::generated::{indexed_trees, state_trees}; use photon_indexer::ingester::persist::persisted_indexed_merkle_tree::multi_append; -use photon_indexer::ingester::persist::persisted_state_tree::{ - get_multiple_compressed_leaf_proofs, ZERO_BYTES, -}; +use photon_indexer::ingester::persist::persisted_state_tree::ZERO_BYTES; use sea_orm::{QueryFilter, TransactionTrait}; -use photon_indexer::common::typedefs::account::Account; +use photon_indexer::common::typedefs::account::{Account, AccountContext, AccountWithContext}; use photon_indexer::common::typedefs::bs64_string::Base64String; use photon_indexer::common::typedefs::{hash::Hash, serializable_pubkey::SerializablePubkey}; use photon_indexer::dao::generated::accounts; use photon_indexer::ingester::index_block; use photon_indexer::ingester::parser::state_update::StateUpdate; -use photon_indexer::ingester::persist::persisted_state_tree::{persist_leaf_nodes, LeafNode}; use photon_indexer::ingester::persist::{ - compute_parent_hash, persist_token_accounts, EnrichedTokenAccount, + compute_parent_hash, get_multiple_compressed_leaf_proofs, persist_leaf_nodes, + persist_token_accounts, EnrichedTokenAccount, LeafNode, }; use photon_indexer::ingester::typedefs::block_info::{BlockInfo, BlockMetadata}; @@ -48,9 +47,10 @@ use std::collections::{HashMap, HashSet}; use photon_indexer::common::typedefs::token_data::{AccountState, TokenData}; use sqlx::types::Decimal; -use photon_indexer::api::method::utils::Limit; +use light_compressed_account::TreeType; +use photon_indexer::common::typedefs::limit::Limit; use sea_orm::ColumnTrait; -use solana_sdk::pubkey::Pubkey; +use solana_pubkey::Pubkey; use std::vec; #[derive(BorshSerialize, BorshDeserialize, PartialEq, Debug, Clone)] @@ -96,11 +96,14 @@ async fn test_persist_state_update_basic( lamports: UnsignedInteger(1000), tree: SerializablePubkey::new_unique(), leaf_index: UnsignedInteger(0), - seq: UnsignedInteger(0), + seq: Some(UnsignedInteger(0)), slot_created: UnsignedInteger(0), }; - state_update.out_accounts.push(account.clone()); + state_update.out_accounts.push(AccountWithContext { + account: account.clone(), + context: AccountContext::default(), + }); persist_state_update_using_connection(&setup.db_conn, state_update) .await .unwrap(); @@ -139,11 +142,17 @@ async fn test_persist_state_update_basic( assert_eq!(null_value.value, None); } - #[named] #[rstest] #[tokio::test] #[serial] +// Test V1 accounts with V1 and V2 endpoints: +// get_compressed_accounts_by_owner +// get_compressed_accounts_by_owner_v2 +// get_multiple_compressed_accounts +// get_multiple_compressed_accounts_v2 +// get_compressed_account +// get_compressed_account_v2 async fn test_multiple_accounts( #[values(DatabaseBackend::Sqlite, DatabaseBackend::Postgres)] db_backend: DatabaseBackend, ) { @@ -169,65 +178,89 @@ async fn test_multiple_accounts( let mut state_update = StateUpdate::default(); let accounts = vec![ - Account { - hash: Hash::new_unique(), - address: Some(SerializablePubkey::new_unique()), - data: Some(AccountData { - discriminator: UnsignedInteger(0), - data: Base64String(vec![1; 500]), - data_hash: Hash::new_unique(), - }), - owner: owner1, - lamports: UnsignedInteger(1000), - tree: SerializablePubkey::new_unique(), - leaf_index: UnsignedInteger(10), - seq: UnsignedInteger(1), - slot_created: UnsignedInteger(0), + AccountWithContext { + account: Account { + hash: Hash::new_unique(), + address: Some(SerializablePubkey::new_unique()), + data: Some(AccountData { + discriminator: UnsignedInteger(0), + data: Base64String(vec![1; 500]), + data_hash: Hash::new_unique(), + }), + owner: owner1, + lamports: UnsignedInteger(1000), + tree: SerializablePubkey::new_unique(), + leaf_index: UnsignedInteger(10), + seq: Some(UnsignedInteger(1)), + slot_created: UnsignedInteger(0), + }, + context: AccountContext { + tree_type: TreeType::StateV1 as u16, + ..AccountContext::default() + }, }, - Account { - hash: Hash::new_unique(), - address: None, - data: Some(AccountData { - discriminator: UnsignedInteger(1), - data: Base64String(vec![2; 500]), - data_hash: Hash::new_unique(), - }), - owner: owner1, - lamports: UnsignedInteger(1030), - tree: SerializablePubkey::new_unique(), - leaf_index: UnsignedInteger(11), - seq: UnsignedInteger(2), - slot_created: UnsignedInteger(0), + AccountWithContext { + account: Account { + hash: Hash::new_unique(), + address: None, + data: Some(AccountData { + discriminator: UnsignedInteger(1), + data: Base64String(vec![2; 500]), + data_hash: Hash::new_unique(), + }), + owner: owner1, + lamports: UnsignedInteger(1030), + tree: SerializablePubkey::new_unique(), + leaf_index: UnsignedInteger(11), + seq: Some(UnsignedInteger(2)), + slot_created: UnsignedInteger(0), + }, + context: AccountContext { + tree_type: TreeType::StateV1 as u16, + ..AccountContext::default() + }, }, - Account { - hash: Hash::new_unique(), - address: Some(SerializablePubkey::new_unique()), - data: Some(AccountData { - discriminator: UnsignedInteger(4), - data: Base64String(vec![4; 500]), - data_hash: Hash::new_unique(), - }), - owner: owner2, - lamports: UnsignedInteger(10020), - tree: SerializablePubkey::new_unique(), - leaf_index: UnsignedInteger(13), - seq: UnsignedInteger(3), - slot_created: UnsignedInteger(1), + AccountWithContext { + account: Account { + hash: Hash::new_unique(), + address: Some(SerializablePubkey::new_unique()), + data: Some(AccountData { + discriminator: UnsignedInteger(4), + data: Base64String(vec![4; 500]), + data_hash: Hash::new_unique(), + }), + owner: owner2, + lamports: UnsignedInteger(10020), + tree: SerializablePubkey::new_unique(), + leaf_index: UnsignedInteger(13), + seq: Some(UnsignedInteger(3)), + slot_created: UnsignedInteger(1), + }, + context: AccountContext { + tree_type: TreeType::StateV1 as u16, + ..AccountContext::default() + }, }, - Account { - hash: Hash::new_unique(), - address: Some(SerializablePubkey::new_unique()), - data: Some(AccountData { - discriminator: UnsignedInteger(10), - data: Base64String(vec![5; 500]), - data_hash: Hash::new_unique(), - }), - owner: owner2, - lamports: UnsignedInteger(10100), - tree: SerializablePubkey::new_unique(), - leaf_index: UnsignedInteger(23), - seq: UnsignedInteger(1), - slot_created: UnsignedInteger(0), + AccountWithContext { + account: Account { + hash: Hash::new_unique(), + address: Some(SerializablePubkey::new_unique()), + data: Some(AccountData { + discriminator: UnsignedInteger(10), + data: Base64String(vec![5; 500]), + data_hash: Hash::new_unique(), + }), + owner: owner2, + lamports: UnsignedInteger(10100), + tree: SerializablePubkey::new_unique(), + leaf_index: UnsignedInteger(23), + seq: Some(UnsignedInteger(1)), + slot_created: UnsignedInteger(0), + }, + context: AccountContext { + tree_type: TreeType::StateV1 as u16, + ..AccountContext::default() + }, }, ]; state_update.out_accounts = accounts.clone(); @@ -274,6 +307,7 @@ async fn test_multiple_accounts( let mut accounts_of_interest = accounts .clone() .into_iter() + .map(|x| x.account) .filter(|x| x.owner == owner) .collect::>(); @@ -294,9 +328,24 @@ async fn test_multiple_accounts( .value; assert_eq!(res.0, total_balance); + + // V2 Endpoint + let res_v2 = setup + .api + .get_compressed_accounts_by_owner_v2(GetCompressedAccountsByOwnerRequest { + owner, + ..Default::default() + }) + .await + .unwrap() + .value; + + for (account, account_v2) in response_accounts.iter().zip(res_v2.items.iter()) { + compare_account_with_account_v2(account, account_v2); + } } - let mut accounts_of_interest = vec![accounts[0].clone(), accounts[2].clone()]; + let mut accounts_of_interest = vec![accounts[0].account.clone(), accounts[2].account.clone()]; let res = setup .api .get_multiple_compressed_accounts(GetMultipleCompressedAccountsRequest { @@ -316,12 +365,66 @@ async fn test_multiple_accounts( &mut res.items.iter().map(|x| x.clone().unwrap()).collect(), &mut accounts_of_interest, ); + + // V2 Endpoint + let res_v2 = setup + .api + .get_multiple_compressed_accounts_v2(GetMultipleCompressedAccountsRequest { + addresses: None, + hashes: Some( + accounts_of_interest + .iter() + .map(|x| x.hash.clone()) + .collect(), + ), + }) + .await + .unwrap() + .value; + + assert_account_response_list_matches_input_v2( + &mut res_v2.items.iter().map(|x| x.clone().unwrap()).collect(), + &mut accounts_of_interest, + ); + + for account in accounts.iter() { + let request = CompressedAccountRequest { + address: account.account.address, + hash: Some(account.account.hash.clone()), + }; + + let res = setup + .api + .get_compressed_account(request.clone()) + .await + .unwrap() + .value; + + assert_eq!(res, Some(account.account.clone())); + + let res_v2 = setup + .api + .get_compressed_account_v2(request) + .await + .unwrap() + .value; + + compare_account_with_account_v2(&res.unwrap(), &res_v2.unwrap()); + } } #[named] #[rstest] #[tokio::test] #[serial] +// Test V1 token accounts with V1 and V2 endpoints: +// get_compressed_token_accounts_by_owner +// get_compressed_token_accounts_by_owner_v2 +// get_compressed_token_balances_by_owner +// get_compressed_token_balances_by_owner_v2 +// get_compressed_token_account_balance +// get_compressed_token_accounts_by_delegate +// get_compressed_token_accounts_by_delegate_v2 async fn test_persist_token_data( #[values(DatabaseBackend::Sqlite, DatabaseBackend::Postgres)] db_backend: DatabaseBackend, ) { @@ -468,7 +571,9 @@ async fn test_persist_token_data( discriminator: Set(Some(Decimal::from(1))), data_hash: Set(Some(Hash::new_unique().to_vec())), tree: Set(Pubkey::new_unique().to_bytes().to_vec()), - seq: Set(0), + queue: Set(Pubkey::new_unique().to_bytes().to_vec()), + tree_type: Set(TreeType::StateV1 as i32), + seq: Set(Some(0)), ..Default::default() }; accounts::Entity::insert(model).exec(&txn).await.unwrap(); @@ -499,6 +604,20 @@ async fn test_persist_token_data( .value; verify_response_matches_input_token_data(res.clone(), owner_tlv); + let res_v2 = setup + .api + .get_compressed_token_accounts_by_owner_v2(GetCompressedTokenAccountsByOwner { + owner: owner1, + mint: Some(mint1), + ..Default::default() + }) + .await + .unwrap() + .value; + for (item, item_v2) in res.items.iter().zip(res_v2.items.iter()) { + compare_token_account_with_token_account_v2(item, item_v2); + } + for owner in [owner2] { let owner_tlv = all_token_data .iter() @@ -515,6 +634,20 @@ async fn test_persist_token_data( .unwrap() .value; + let res_v2 = setup + .api + .get_compressed_token_accounts_by_owner_v2(GetCompressedTokenAccountsByOwner { + owner, + ..Default::default() + }) + .await + .unwrap() + .value; + + for (item, item_v2) in res.items.iter().zip(res_v2.items.iter()) { + compare_token_account_with_token_account_v2(item, item_v2); + } + let mut paginated_res = Vec::new(); let mut cursor = None; loop { @@ -523,7 +656,7 @@ async fn test_persist_token_data( .get_compressed_token_accounts_by_owner(GetCompressedTokenAccountsByOwner { owner, cursor: cursor.clone(), - limit: Some(photon_indexer::api::method::utils::Limit::new(1).unwrap()), + limit: Some(Limit::new(1).unwrap()), ..Default::default() }) .await @@ -536,7 +669,10 @@ async fn test_persist_token_data( break; } } - assert_eq!(paginated_res, res.items); + + for (item, item_v2) in paginated_res.iter().zip(res_v2.items.iter()) { + compare_token_account_with_token_account_v2(item, item_v2); + } let mut mint_to_balance: HashMap = HashMap::new(); @@ -586,12 +722,14 @@ async fn test_persist_token_data( } } for delegate in [delegate1, delegate2] { - let delegate_tlv = all_token_data + let delegate_tlv: Vec = all_token_data .clone() .into_iter() .filter(|x| x.token_data.delegate == Some(delegate)) .collect(); - let res = setup + + // V1 Endpoint + let res_v1 = setup .api .get_compressed_token_accounts_by_delegate(GetCompressedTokenAccountsByDelegate { delegate, @@ -600,7 +738,8 @@ async fn test_persist_token_data( .await .unwrap() .value; - let mut paginated_res = Vec::new(); + + let mut paginated_res_v1 = Vec::new(); let mut cursor = None; loop { let res = setup @@ -608,21 +747,58 @@ async fn test_persist_token_data( .get_compressed_token_accounts_by_delegate(GetCompressedTokenAccountsByDelegate { delegate, cursor: cursor.clone(), - limit: Some(photon_indexer::api::method::utils::Limit::new(1).unwrap()), + limit: Some(Limit::new(1).unwrap()), ..Default::default() }) .await .unwrap() .value; - paginated_res.extend(res.items.clone()); + paginated_res_v1.extend(res.items.clone()); + cursor = res.cursor; + if cursor.is_none() { + break; + } + } + assert_eq!(paginated_res_v1, res_v1.items); + verify_response_matches_input_token_data(res_v1.clone(), delegate_tlv.clone()); + + // V2 Endpoint + let res_v2 = setup + .api + .get_compressed_token_accounts_by_delegate_v2(GetCompressedTokenAccountsByDelegate { + delegate, + ..Default::default() + }) + .await + .unwrap() + .value; + + let mut paginated_res_v2 = Vec::new(); + let mut cursor = None; + loop { + let res = setup + .api + .get_compressed_token_accounts_by_delegate_v2( + GetCompressedTokenAccountsByDelegate { + delegate, + cursor: cursor.clone(), + limit: Some(Limit::new(1).unwrap()), + ..Default::default() + }, + ) + .await + .unwrap() + .value; + + paginated_res_v2.extend(res.items.clone()); cursor = res.cursor; if cursor.is_none() { break; } } - assert_eq!(paginated_res, res.items); - verify_response_matches_input_token_data(res, delegate_tlv); + assert_eq!(paginated_res_v2, res_v2.items); + verify_response_matches_input_token_data_v2(res_v2, delegate_tlv); } for (mint, owner_to_balance) in mint_to_owner_to_balance.iter() { @@ -633,8 +809,8 @@ async fn test_persist_token_data( let res = setup .api .get_compressed_mint_token_holders(GetCompressedMintTokenHoldersRequest { - mint: mint.clone(), - limit: Some(photon_indexer::api::method::utils::Limit::new(1).unwrap()), + mint: *mint, + limit: Some(Limit::new(1).unwrap()), cursor, }) .await @@ -673,9 +849,9 @@ async fn test_persist_token_data( loop { let request = GetCompressedTokenBalancesByOwnerRequest { - owner: owner.clone(), + owner: *owner, cursor, - limit: Some(photon_indexer::api::method::utils::Limit::new(1).unwrap()), + limit: Some(Limit::new(1).unwrap()), ..Default::default() }; let res = setup @@ -723,11 +899,11 @@ async fn test_persisted_state_trees( hash: Hash::new_unique(), leaf_index: i, tree, - seq: i, + seq: Some(i), }) .collect(); let txn = setup.db_conn.as_ref().begin().await.unwrap(); - let tree_height = 5; + let tree_height = 32; // prev. 5 persist_leaf_nodes(&txn, leaf_nodes.clone(), tree_height) .await .unwrap(); @@ -748,8 +924,8 @@ async fn test_persisted_state_trees( assert_eq!(proof_hashes, leaf_hashes); for proof in proofs { - assert_eq!(proof.merkleTree, tree); - assert_eq!(num_nodes as u64 - 1, proof.rootSeq); + assert_eq!(proof.merkle_tree, tree); + assert_eq!(num_nodes as u64 - 1, proof.root_seq); assert_eq!(tree_height - 1, proof.proof.len() as u32); } @@ -760,7 +936,7 @@ async fn test_persisted_state_trees( hash: Hash::new_unique(), leaf_index: i, tree, - seq: i + num_nodes, + seq: Some(i + num_nodes), }) .collect(); let txn = setup.db_conn.as_ref().begin().await.unwrap(); @@ -769,23 +945,22 @@ async fn test_persisted_state_trees( .unwrap(); txn.commit().await.unwrap(); - let proofs = get_multiple_compressed_leaf_proofs( - &setup.db_conn.begin().await.unwrap(), - leaf_nodes - .iter() - .map(|x| Hash::try_from(x.hash.clone()).unwrap()) - .collect(), - ) - .await - .unwrap(); + let leaves = leaf_nodes + .iter() + .map(|x| Hash::try_from(x.hash.clone()).unwrap()) + .collect(); + + let proofs = get_multiple_compressed_leaf_proofs(&setup.db_conn.begin().await.unwrap(), leaves) + .await + .unwrap(); let proof_hashes: HashSet = proofs.iter().map(|x| x.hash.clone()).collect(); let leaf_hashes: HashSet = leaf_nodes.iter().map(|x| x.hash.clone()).collect(); assert_eq!(proof_hashes, leaf_hashes); for proof in proofs { - assert_eq!(proof.merkleTree, tree); - assert_eq!(num_nodes as u64 - 1 + num_nodes as u64, proof.rootSeq); + assert_eq!(proof.merkle_tree, tree); + assert_eq!(num_nodes as u64 - 1 + num_nodes as u64, proof.root_seq); assert_eq!(tree_height - 1, proof.proof.len() as u32); } } @@ -809,15 +984,15 @@ async fn test_indexed_merkle_trees( .unwrap(); let values = (0..num_nodes).map(|i| vec![i * 4 + 1]).collect(); - let tree_height = 4; + let tree_height = 33; // prev. 4 - multi_append(&txn, values, tree.to_bytes_vec(), tree_height) + multi_append(&txn, values, tree.to_bytes_vec(), tree_height - 1) .await .unwrap(); txn.commit().await.unwrap(); - let (model, _) = get_exclusion_range_with_proof( + let (model, _) = get_exclusion_range_with_proof_v2( &setup.db_conn.begin().await.unwrap(), tree.to_bytes_vec(), tree_height, @@ -828,11 +1003,11 @@ async fn test_indexed_merkle_trees( let expected_model = indexed_trees::Model { tree: tree.to_bytes_vec(), - leaf_index: 2, + leaf_index: 1, value: vec![1], - next_index: 3, + next_index: 2, next_value: vec![5], - seq: 0, + seq: Some(0), }; assert_eq!(model, expected_model); @@ -843,7 +1018,7 @@ async fn test_indexed_merkle_trees( let values = vec![vec![3]]; - multi_append(&txn, values, tree.to_bytes_vec(), tree_height) + multi_append(&txn, values, tree.to_bytes_vec(), tree_height - 1) .await .unwrap(); @@ -851,7 +1026,7 @@ async fn test_indexed_merkle_trees( validate_tree(setup.db_conn.as_ref(), tree).await; - let (model, _) = get_exclusion_range_with_proof( + let (model, _) = get_exclusion_range_with_proof_v2( &setup.db_conn.begin().await.unwrap(), tree.to_bytes_vec(), tree_height, @@ -862,11 +1037,11 @@ async fn test_indexed_merkle_trees( let expected_model = indexed_trees::Model { tree: tree.to_bytes_vec(), - leaf_index: 4, + leaf_index: 3, value: vec![3], - next_index: 3, + next_index: 2, next_value: vec![5], - seq: 0, + seq: Some(0), }; assert_eq!(model, expected_model); @@ -920,7 +1095,7 @@ async fn test_get_multiple_new_address_proofs_interop( use photon_indexer::api::method::{ get_multiple_new_address_proofs::{ get_multiple_new_address_proofs, get_multiple_new_address_proofs_v2, AddressList, - AddressListWithTrees, AddressWithTree, ADDRESS_TREE_ADDRESS, + AddressListWithTrees, AddressWithTree, ADDRESS_TREE_V1, }, get_validity_proof::CompressedProof, }; @@ -955,15 +1130,15 @@ async fn test_get_multiple_new_address_proofs_interop( &setup.db_conn, &setup.prover_url, GetValidityProofRequest { - newAddresses: addresses.clone(), - newAddressesWithTrees: vec![], + new_addresses: addresses.clone(), + new_addresses_with_trees: vec![], hashes: vec![], }, ) .await .unwrap(); // The Gnark prover has some randomness. - validity_proof.value.compressedProof = CompressedProof::default(); + validity_proof.value.compressed_proof = CompressedProof::default(); insta::assert_json_snapshot!(format!("{}-validity-proof", name), validity_proof); @@ -973,7 +1148,7 @@ async fn test_get_multiple_new_address_proofs_interop( .into_iter() .map(|address| AddressWithTree { address, - tree: SerializablePubkey::from(ADDRESS_TREE_ADDRESS), + tree: SerializablePubkey::from(ADDRESS_TREE_V1), }) .collect(); let proof_v2 = get_multiple_new_address_proofs_v2( @@ -984,21 +1159,20 @@ async fn test_get_multiple_new_address_proofs_interop( .unwrap(); insta::assert_json_snapshot!(name.clone(), proof_v2); - let mut validity_proof_v2 = get_validity_proof( + let mut validity_proof_v2 = get_validity_proof_v2( &setup.db_conn, &setup.prover_url, - GetValidityProofRequest { - newAddressesWithTrees: addresses_with_trees.clone(), + GetValidityProofRequestV2 { + new_addresses_with_trees: addresses_with_trees.clone(), hashes: vec![], - newAddresses: vec![], }, ) .await .unwrap(); // The Gnark prover has some randomness. - validity_proof_v2.value.compressedProof = CompressedProof::default(); + validity_proof_v2.value.compressed_proof = Some(CompressedProof::default()); - insta::assert_json_snapshot!(format!("{}-validity-proof", name), validity_proof_v2); + insta::assert_json_snapshot!(format!("{}-validity-proof-v2", name), validity_proof_v2); } #[named] @@ -1028,21 +1202,24 @@ async fn load_test(#[values(DatabaseBackend::Postgres)] db_backend: DatabaseBack let tree = SerializablePubkey::new_unique(); - fn generate_mock_account(leaf_index: u64, tree: SerializablePubkey) -> Account { - Account { - hash: Hash::new_unique(), - address: Some(SerializablePubkey::new_unique()), - data: Some(AccountData { - discriminator: UnsignedInteger(1), - data: Base64String(vec![1; 500]), - data_hash: Hash::new_unique(), - }), - owner: SerializablePubkey::new_unique(), - lamports: UnsignedInteger(1000), - tree, - leaf_index: UnsignedInteger(leaf_index), - seq: UnsignedInteger(0), - slot_created: UnsignedInteger(0), + fn generate_mock_account(leaf_index: u64, tree: SerializablePubkey) -> AccountWithContext { + AccountWithContext { + account: Account { + hash: Hash::new_unique(), + address: Some(SerializablePubkey::new_unique()), + data: Some(AccountData { + discriminator: UnsignedInteger(1), + data: Base64String(vec![1; 500]), + data_hash: Hash::new_unique(), + }), + owner: SerializablePubkey::new_unique(), + lamports: UnsignedInteger(1000), + tree, + leaf_index: UnsignedInteger(leaf_index), + seq: Some(UnsignedInteger(0)), + slot_created: UnsignedInteger(0), + }, + context: AccountContext::default(), } } @@ -1094,19 +1271,19 @@ async fn test_persisted_state_trees_bug_with_latter_smaller_seq_values( tree, leaf_index: 0, hash: Hash::try_from("34yinGSAmWKeXw61zZzd8hbE1ySB1pDmgiHzJhRtVwJY").unwrap(), - seq: 4, + seq: Some(4), }, LeafNode { tree, leaf_index: 1, hash: Hash::try_from("34cMT7MjFrs8hLp2zHMrPJHKkUxBDBwBTNck77wLjjcY").unwrap(), - seq: 0, + seq: Some(0), }, LeafNode { tree, leaf_index: 2, hash: Hash::try_from("TTSZiUJsGTcU7sXqYtw53yFY5Ag7DmHXR4GzEjVk7J7").unwrap(), - seq: 5, + seq: Some(5), }, ]; let leaf_nodes_2 = vec![ @@ -1114,29 +1291,26 @@ async fn test_persisted_state_trees_bug_with_latter_smaller_seq_values( tree, leaf_index: 0, hash: Hash::try_from("3hH3oNVj2bafrqqXLnZjLjkuDaoxKhyyvmxaSs939hws").unwrap(), - seq: 0, + seq: Some(0), }, LeafNode { tree, leaf_index: 1, hash: Hash::try_from("34cMT7MjFrs8hLp2zHMrPJHKkUxBDBwBTNck77wLjjcY").unwrap(), - seq: 0, + seq: Some(0), }, LeafNode { tree, leaf_index: 2, hash: Hash::try_from("25D2cs6h29NZgmDepVqc7bLLSWcNJnMvGoxeTpyZjF3u").unwrap(), - seq: 10, + seq: Some(10), }, ]; let leaf_node_chunks = vec![leaf_nodes_1, leaf_nodes_2]; - let tree_height = 3; for chunk in leaf_node_chunks { let txn = setup.db_conn.as_ref().begin().await.unwrap(); - persist_leaf_nodes(&txn, chunk.clone(), tree_height) - .await - .unwrap(); + persist_leaf_nodes(&txn, chunk.clone(), 26).await.unwrap(); txn.commit().await.unwrap(); let proof_address = "12prJNGB6sfTMrZM1Udv2Aamv9fLzpm5YfMqssTmGrWy"; @@ -1179,20 +1353,23 @@ async fn test_gpa_filters( let owner1 = SerializablePubkey::new_unique(); let mut state_update = StateUpdate::default(); - let accounts = vec![Account { - hash: Hash::new_unique(), - address: Some(SerializablePubkey::new_unique()), - data: Some(AccountData { - discriminator: UnsignedInteger(0), - data: Base64String(vec![1, 2, 3]), - data_hash: Hash::new_unique(), - }), - owner: owner1, - lamports: UnsignedInteger(1000), - tree: SerializablePubkey::new_unique(), - leaf_index: UnsignedInteger(10), - seq: UnsignedInteger(1), - slot_created: UnsignedInteger(0), + let accounts = vec![AccountWithContext { + account: Account { + hash: Hash::new_unique(), + address: Some(SerializablePubkey::new_unique()), + data: Some(AccountData { + discriminator: UnsignedInteger(0), + data: Base64String(vec![1, 2, 3]), + data_hash: Hash::new_unique(), + }), + owner: owner1, + lamports: UnsignedInteger(1000), + tree: SerializablePubkey::new_unique(), + leaf_index: UnsignedInteger(10), + seq: Some(UnsignedInteger(1)), + slot_created: UnsignedInteger(0), + }, + context: AccountContext::default(), }]; state_update.out_accounts = accounts.clone(); persist_state_update_using_connection(&setup.db_conn, state_update) @@ -1203,7 +1380,6 @@ async fn test_gpa_filters( .api .get_compressed_accounts_by_owner(GetCompressedAccountsByOwnerRequest { owner: owner1, - dataSlice: Some(DataSlice { offset: 0, length: 2, @@ -1254,7 +1430,7 @@ async fn test_persisted_state_trees_multiple_cases( ) { let name = trim_test_name(function_name!()); let tree = SerializablePubkey::new_unique(); - let tree_height = 10; + let tree_height = 32; // prev. 10 info!("Test case 1: Sequential leaf nodes"); let leaf_nodes_1 = create_leaf_nodes(tree, 0..5, |i| i); @@ -1276,7 +1452,7 @@ async fn test_persisted_state_trees_multiple_cases( test_persist_and_verify(name.clone(), db_backend, tree, leaf_nodes_4, tree_height).await; info!("Test case 7: Very large tree"); - let large_tree_height = 20; + let large_tree_height = 32; // prev. 20 let leaf_nodes_7 = create_leaf_nodes(tree, 0..20, |i| i); test_persist_and_verify( name.clone(), @@ -1310,7 +1486,7 @@ async fn test_persisted_state_trees_multiple_cases( hash: Hash::try_from(vec![0; 32]).unwrap(), leaf_index: i, tree, - seq: i, + seq: Some(i), }) .collect::>(); test_persist_and_verify(name.clone(), db_backend, tree, leaf_nodes_13, tree_height).await; @@ -1329,7 +1505,7 @@ where hash: Hash::new_unique(), leaf_index: i as u32, tree, - seq: seq_fn(i) as u32, + seq: Some(seq_fn(i) as u32), }) .collect() } @@ -1381,7 +1557,7 @@ async fn test_persist_and_verify( ( Hash::try_from(x.hash.clone()).unwrap(), x.leaf_idx.unwrap_or(0) as u64, - x.seq as u64, + x.seq, ) }) .collect::>(); @@ -1408,12 +1584,16 @@ async fn test_persist_and_verify( "Proof hashes should match leaf hashes" ); - let max_seq = leaf_nodes.iter().map(|x| x.seq).max().unwrap_or(0) as u64; + let max_seq = leaf_nodes + .iter() + .map(|x| x.seq.unwrap_or_default()) + .max() + .unwrap_or(0) as u64; for proof in proofs { - assert_eq!(proof.merkleTree, tree, "Merkle tree should match"); + assert_eq!(proof.merkle_tree, tree, "Merkle tree should match"); assert_eq!( - max_seq, proof.rootSeq, + max_seq, proof.root_seq, "Root sequence should be the maximum sequence number" ); assert_eq!( @@ -1440,7 +1620,6 @@ async fn test_update_indexed_merkle_tree( let name = trim_test_name(function_name!()); let setup = setup(name.clone(), db_backend).await; let tree = Pubkey::new_unique(); - let tree_height = 10; let index = 1; let value = [1; 32]; let index_element_1 = RawIndexedElement { @@ -1455,8 +1634,8 @@ async fn test_update_indexed_merkle_tree( next_value: [7; 32], index, }; - let paramaeters = vec![(index_element_1, 0), (index_element_2, 1)]; - for permutation in paramaeters.iter().permutations(2) { + let parameters = [(index_element_1, 0), (index_element_2, 1)]; + for permutation in parameters.iter().permutations(2) { let txn = setup.db_conn.as_ref().begin().await.unwrap(); for (indexed_element, seq) in permutation { let mut indexed_leaf_updates = HashMap::new(); @@ -1464,12 +1643,12 @@ async fn test_update_indexed_merkle_tree( (tree, index as u64), IndexedTreeLeafUpdate { tree, - leaf: indexed_element.clone(), + leaf: *indexed_element, hash: Hash::new_unique().into(), // HACK: We don't care about the hash seq: *seq as u64, }, ); - update_indexed_tree_leaves(&txn, indexed_leaf_updates, tree_height) + update_indexed_tree_leaves_v1(&txn, indexed_leaf_updates) .await .unwrap(); } @@ -1487,6 +1666,6 @@ async fn test_update_indexed_merkle_tree( assert_eq!(tree_model.value, index_element_2.value); assert_eq!(tree_model.next_value, index_element_2.next_value); assert_eq!(tree_model.next_index, index_element_2.next_index as i64); - assert_eq!(tree_model.seq, 1 as i64); + assert_eq!(tree_model.seq, Some(1i64)); } } diff --git a/tests/integration_tests/snapshots/integration_tests__e2e_tests__e2e_mint_and_transfer_transactions-bob-accounts-v2.snap b/tests/integration_tests/snapshots/integration_tests__e2e_tests__e2e_mint_and_transfer_transactions-bob-accounts-v2.snap new file mode 100644 index 00000000..5ce4649c --- /dev/null +++ b/tests/integration_tests/snapshots/integration_tests__e2e_tests__e2e_mint_and_transfer_transactions-bob-accounts-v2.snap @@ -0,0 +1,79 @@ +--- +source: tests/integration_tests/e2e_tests.rs +assertion_line: 165 +expression: accounts_v2 +--- +{ + "context": { + "slot": 0 + }, + "value": { + "items": [ + { + "account": { + "hash": "JReC6h68m3EdCKP7S35e7BE4pBPwQz1HfjUkboeQy9r", + "address": null, + "data": { + "discriminator": 2, + "data": "Fci4U9QOCVoeSJNu52uQTHTZkN+jGh5G5VqySLzUdo/IF0SuAAU/8W2JwQ9eoK7yn7i6O/dx7aXfmnaBmwIYnAUAAAAAAAAAAAAA", + "dataHash": "4C8Wy6GxRZhiUfR6aSDejhYhnyixhtsNUFbKdPCUcNoq" + }, + "owner": "cTokenmWW8bLPjZEBAUgYy3zKxQZW6VKi7bqNFEVv3m", + "lamports": 0, + "leafIndex": 6, + "seq": 7, + "slotCreated": 0, + "proveByIndex": false, + "merkleContext": { + "treeType": 1, + "tree": "smt1NamzXdq4AMqS2fS2F1i5KTYPZRhoHgWx38d8WsT", + "queue": "nfq1NvQDJ2GEgnS8zt9prAe8rjjpAW1zFkrvZoBR148", + "cpiContext": null, + "nextTreeContext": null + } + }, + "tokenData": { + "mint": "2U35cKS3Cj2xs5EBdByXYU7LaKAitqjSZc1Jnvu4iPf4", + "owner": "EU57rQxcmFhJ24ApVdUy3y4MxFXcTUN3uiVeWvGgtWXu", + "amount": 5, + "delegate": null, + "state": "initialized", + "tlv": null + } + }, + { + "account": { + "hash": "2R46QL8CSripTWvEsESL39ccripkjs9MjGtwnbJMzJET", + "address": null, + "data": { + "discriminator": 2, + "data": "Fci4U9QOCVoeSJNu52uQTHTZkN+jGh5G5VqySLzUdo/IF0SuAAU/8W2JwQ9eoK7yn7i6O/dx7aXfmnaBmwIYnGQAAAAAAAAAAAAA", + "dataHash": "RP7MSHC1TfribGPwba1Cs8LZYLhNNfiAeTxmcGQ5Cpk" + }, + "owner": "cTokenmWW8bLPjZEBAUgYy3zKxQZW6VKi7bqNFEVv3m", + "lamports": 0, + "leafIndex": 3, + "seq": 4, + "slotCreated": 0, + "proveByIndex": false, + "merkleContext": { + "treeType": 1, + "tree": "smt1NamzXdq4AMqS2fS2F1i5KTYPZRhoHgWx38d8WsT", + "queue": "nfq1NvQDJ2GEgnS8zt9prAe8rjjpAW1zFkrvZoBR148", + "cpiContext": null, + "nextTreeContext": null + } + }, + "tokenData": { + "mint": "2U35cKS3Cj2xs5EBdByXYU7LaKAitqjSZc1Jnvu4iPf4", + "owner": "EU57rQxcmFhJ24ApVdUy3y4MxFXcTUN3uiVeWvGgtWXu", + "amount": 100, + "delegate": null, + "state": "initialized", + "tlv": null + } + } + ], + "cursor": null + } +} diff --git a/tests/integration_tests/snapshots/integration_tests__e2e_tests__e2e_mint_and_transfer_transactions-bob-validity-proof-v2.snap b/tests/integration_tests/snapshots/integration_tests__e2e_tests__e2e_mint_and_transfer_transactions-bob-validity-proof-v2.snap new file mode 100644 index 00000000..f9b6e68d --- /dev/null +++ b/tests/integration_tests/snapshots/integration_tests__e2e_tests__e2e_mint_and_transfer_transactions-bob-validity-proof-v2.snap @@ -0,0 +1,52 @@ +--- +source: tests/integration_tests/e2e_tests.rs +assertion_line: 212 +expression: validity_proof_v2 +--- +{ + "value": { + "compressedProof": { + "a": [], + "b": [], + "c": [] + }, + "accounts": [ + { + "hash": "JReC6h68m3EdCKP7S35e7BE4pBPwQz1HfjUkboeQy9r", + "root": "2wBDKLscN4SBNzNdVsHq17PVXycvM8n4LNiKzJrebqZ7", + "rootIndex": { + "rootIndex": 7, + "proveByIndex": false + }, + "leafIndex": 6, + "merkleContext": { + "treeType": 1, + "tree": "smt1NamzXdq4AMqS2fS2F1i5KTYPZRhoHgWx38d8WsT", + "queue": "nfq1NvQDJ2GEgnS8zt9prAe8rjjpAW1zFkrvZoBR148", + "cpiContext": null, + "nextTreeContext": null + } + }, + { + "hash": "2R46QL8CSripTWvEsESL39ccripkjs9MjGtwnbJMzJET", + "root": "2wBDKLscN4SBNzNdVsHq17PVXycvM8n4LNiKzJrebqZ7", + "rootIndex": { + "rootIndex": 7, + "proveByIndex": false + }, + "leafIndex": 3, + "merkleContext": { + "treeType": 1, + "tree": "smt1NamzXdq4AMqS2fS2F1i5KTYPZRhoHgWx38d8WsT", + "queue": "nfq1NvQDJ2GEgnS8zt9prAe8rjjpAW1zFkrvZoBR148", + "cpiContext": null, + "nextTreeContext": null + } + } + ], + "addresses": [] + }, + "context": { + "slot": 0 + } +} diff --git a/tests/integration_tests/snapshots/integration_tests__e2e_tests__e2e_mint_and_transfer_transactions-charles-accounts-v2.snap b/tests/integration_tests/snapshots/integration_tests__e2e_tests__e2e_mint_and_transfer_transactions-charles-accounts-v2.snap new file mode 100644 index 00000000..e38b1fb7 --- /dev/null +++ b/tests/integration_tests/snapshots/integration_tests__e2e_tests__e2e_mint_and_transfer_transactions-charles-accounts-v2.snap @@ -0,0 +1,79 @@ +--- +source: tests/integration_tests/e2e_tests.rs +assertion_line: 165 +expression: accounts_v2 +--- +{ + "context": { + "slot": 0 + }, + "value": { + "items": [ + { + "account": { + "hash": "2TxrLe9HDTRDpVXmbkXUgXNksCZ7RdU4Tc2Ea1B8ADs2", + "address": null, + "data": { + "discriminator": 2, + "data": "Fci4U9QOCVoeSJNu52uQTHTZkN+jGh5G5VqySLzUdo+nxtjG3Di8aQSbzY12Qevlz6m4DW8xABfetteH8ywAxsgAAAAAAAAAAAAA", + "dataHash": "3mCzppQKSYcGTuLb4VPKnMohtVkoEnsFYK7yYB5Rf1Pg" + }, + "owner": "cTokenmWW8bLPjZEBAUgYy3zKxQZW6VKi7bqNFEVv3m", + "lamports": 0, + "leafIndex": 4, + "seq": 5, + "slotCreated": 0, + "proveByIndex": false, + "merkleContext": { + "treeType": 1, + "tree": "smt1NamzXdq4AMqS2fS2F1i5KTYPZRhoHgWx38d8WsT", + "queue": "nfq1NvQDJ2GEgnS8zt9prAe8rjjpAW1zFkrvZoBR148", + "cpiContext": null, + "nextTreeContext": null + } + }, + "tokenData": { + "mint": "2U35cKS3Cj2xs5EBdByXYU7LaKAitqjSZc1Jnvu4iPf4", + "owner": "CHvwuTvTiwRSNBwAnrCG14V8YTJ6wwhHQrifxdFzHzsX", + "amount": 200, + "delegate": null, + "state": "initialized", + "tlv": null + } + }, + { + "account": { + "hash": "2o5puhnQbtqyyrcZrsow4DSs6kafmyUTYmgdwXfMMehS", + "address": null, + "data": { + "discriminator": 2, + "data": "Fci4U9QOCVoeSJNu52uQTHTZkN+jGh5G5VqySLzUdo+nxtjG3Di8aQSbzY12Qevlz6m4DW8xABfetteH8ywAxrcCAAAAAAAAAAAA", + "dataHash": "2CHL3b2vQV4xoxMmwxHn3jYYBKNafmpmEWsAHNmFp6iP" + }, + "owner": "cTokenmWW8bLPjZEBAUgYy3zKxQZW6VKi7bqNFEVv3m", + "lamports": 0, + "leafIndex": 5, + "seq": 6, + "slotCreated": 0, + "proveByIndex": false, + "merkleContext": { + "treeType": 1, + "tree": "smt1NamzXdq4AMqS2fS2F1i5KTYPZRhoHgWx38d8WsT", + "queue": "nfq1NvQDJ2GEgnS8zt9prAe8rjjpAW1zFkrvZoBR148", + "cpiContext": null, + "nextTreeContext": null + } + }, + "tokenData": { + "mint": "2U35cKS3Cj2xs5EBdByXYU7LaKAitqjSZc1Jnvu4iPf4", + "owner": "CHvwuTvTiwRSNBwAnrCG14V8YTJ6wwhHQrifxdFzHzsX", + "amount": 695, + "delegate": null, + "state": "initialized", + "tlv": null + } + } + ], + "cursor": null + } +} diff --git a/tests/integration_tests/snapshots/integration_tests__e2e_tests__e2e_mint_and_transfer_transactions-charles-validity-proof-v2.snap b/tests/integration_tests/snapshots/integration_tests__e2e_tests__e2e_mint_and_transfer_transactions-charles-validity-proof-v2.snap new file mode 100644 index 00000000..25e2a0c8 --- /dev/null +++ b/tests/integration_tests/snapshots/integration_tests__e2e_tests__e2e_mint_and_transfer_transactions-charles-validity-proof-v2.snap @@ -0,0 +1,52 @@ +--- +source: tests/integration_tests/e2e_tests.rs +assertion_line: 212 +expression: validity_proof_v2 +--- +{ + "value": { + "compressedProof": { + "a": [], + "b": [], + "c": [] + }, + "accounts": [ + { + "hash": "2TxrLe9HDTRDpVXmbkXUgXNksCZ7RdU4Tc2Ea1B8ADs2", + "root": "2wBDKLscN4SBNzNdVsHq17PVXycvM8n4LNiKzJrebqZ7", + "rootIndex": { + "rootIndex": 7, + "proveByIndex": false + }, + "leafIndex": 4, + "merkleContext": { + "treeType": 1, + "tree": "smt1NamzXdq4AMqS2fS2F1i5KTYPZRhoHgWx38d8WsT", + "queue": "nfq1NvQDJ2GEgnS8zt9prAe8rjjpAW1zFkrvZoBR148", + "cpiContext": null, + "nextTreeContext": null + } + }, + { + "hash": "2o5puhnQbtqyyrcZrsow4DSs6kafmyUTYmgdwXfMMehS", + "root": "2wBDKLscN4SBNzNdVsHq17PVXycvM8n4LNiKzJrebqZ7", + "rootIndex": { + "rootIndex": 7, + "proveByIndex": false + }, + "leafIndex": 5, + "merkleContext": { + "treeType": 1, + "tree": "smt1NamzXdq4AMqS2fS2F1i5KTYPZRhoHgWx38d8WsT", + "queue": "nfq1NvQDJ2GEgnS8zt9prAe8rjjpAW1zFkrvZoBR148", + "cpiContext": null, + "nextTreeContext": null + } + } + ], + "addresses": [] + }, + "context": { + "slot": 0 + } +} diff --git a/tests/integration_tests/snapshots/integration_tests__e2e_tests__e2e_mint_and_transfer_transactions-mint-transaction-v2.snap b/tests/integration_tests/snapshots/integration_tests__e2e_tests__e2e_mint_and_transfer_transactions-mint-transaction-v2.snap new file mode 100644 index 00000000..90e6450b --- /dev/null +++ b/tests/integration_tests/snapshots/integration_tests__e2e_tests__e2e_mint_and_transfer_transactions-mint-transaction-v2.snap @@ -0,0 +1,216 @@ +--- +source: tests/integration_tests/e2e_tests.rs +assertion_line: 273 +expression: parsed_transaction_v2 +--- +{ + "transaction": { + "slot": 40, + "transaction": [ + "Av1M5coyCBRFlJLdHnkBSpeRX41BqfBpbEMHFU3Ymzgw7DD02dZOVmS5oz9T+ysR8gF0CI0KTnvqBMcF9vQ7ZwXYeIxAsLPNzfTYq6DRVSP9Xng+23cTgpr9Irzce4GkpIe1bcvZ+KNqkj2UcRyiU+1KaCG7aq+S8sJAStBOy1ADgAIBCg866kqIOraYFYwcowNemgzSTbOfydVbCHmiihSANjBfSzUCamdpaW6jJk0dkvQSSxU6C7Beq3/cyBndHXL2UooHFci4U9QOCVoeSJNu52uQTHTZkN+jGh5G5VqySLzUdo9YzU8McJgr9g3zMjAsAP8J/xRNYQ/k9AYLKFVDvbK7QA0BySirRdNlWVo06HcX+7AAihnSLwUsnaH5iMR8V946AwZGb+UhFzL/7K26csOb57yM5bvF9xJrLEObOkAAAAAJFaNXI3lOj7ZdB1trcmmcON0C5ZSLdbDloEGOgJdbRObJGLC9fM+RVESKer9qjzl4KaHo/Qin8NCzqrh4UvwyBt324ddloZPZy+FGzut5rBy0he1fWzeROoz1hX7/AKkGp1X4ITkFTUQksVrwxDDPL0t/mHk62hJS1I82ZsbLzh7rxIz7MmS7w0v1xaWoNPxnUABvKYbZbyNbyIde9N1EC7wPwLtHyi90xBEulKsTz6PGNOXcF+rLA80aI81+eHz7syh1EFyuhbW0RHYH7b/hRSe/tCORHKQEI7/RUnomdQksNuwi9ReDAP20Sqpq/8/wpG4cvGQcDj7QnaE7nvUIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAxxWjAF6rEl0s3Qx5KBE7vnzk8hjI0sG7lCeku9TYgQwIFAAUCQEIPAAYPAAEHAgMICQoLDA0EBg4GOfEiMLols3vAAQAAAMgXRK4ABT/xbYnBD16grvKfuLo793Htpd+adoGbAhicAQAAAOgDAAAAAAAAAAA=", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 10000, + "preBalances": [ + 996489120, + 0, + 1461600, + 2039280, + 9496335360, + 1, + 1141440, + 0, + 929020800, + 1141440, + 1392000, + 1141440, + 0, + 1141440, + 1 + ], + "postBalances": [ + 996478820, + 0, + 1461600, + 2039280, + 9496335660, + 1, + 1141440, + 0, + 929020800, + 1141440, + 1392000, + 1141440, + 0, + 1141440, + 1 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 8, + "accounts": [ + 2, + 3, + 1 + ], + "data": "6qYT3cRnoTxb", + "stackHeight": 2 + }, + { + "programIdIndex": 9, + "accounts": [ + 0, + 7, + 10, + 11, + 12, + 13, + 6, + 9, + 9, + 14, + 9, + 4 + ], + "data": "oMTGA8J44vo3pCVmAjiCzPxz4nKYu5pf4p77ndgiag9jWL7qUTZBRHXZCsJYSncxYpaNZ1zdfXqF9itYqNQYyrBWZkLdpDDCiHwk66fUrYRq1KzHBenArUyQgcSUQL1Db1dEwCamK6YndRTwJRoFXehx6GUjcmoPvZoBjQMBHrFde3toS6zggLvMjjPj336LEygGFBviVhnLTZetnJbHAdS1rLy39FWaGjy5sRuwepzHQjzZnsHoLHayrFXC2gRfSWvuHCXmxdcEA3PHtpW2LMKwQnCdKgzhdAHqCNzj", + "stackHeight": 2 + }, + { + "programIdIndex": 13, + "accounts": [ + 0, + 12, + 10, + 14, + 4 + ], + "data": "5wPdbtbk7M4b3JSHrvzp49cK7MJKLz3eiaWoe12TF8geEycnf73aGL16Po6xXa", + "stackHeight": 3 + }, + { + "programIdIndex": 14, + "accounts": [ + 0, + 4 + ], + "data": "3Bxs48DZ3Zx6m4mD", + "stackHeight": 4 + }, + { + "programIdIndex": 11, + "accounts": [], + "data": "11112kX1UNg3Ss6u31SHRNEUMH1PP8MFsJ91vhLPkmasgKG7UpXkT3Uwne1qeLtZ5fsY18AomPhHZYJ26yKPmRHuJrbmrFmQNXpJ1ykjzeGYBJhLhhbe1b6BwGr5RjtdfGu7CXNYyEDTYv2imajTa3kaM7fjMFbtATFzHYqvy569nFZPp6vhePrQStjcqscjUrn4CfXb5Vnb4jeYMMpPxaFe7VwAU1UoTnR1WVBqVFRsMdtitHkiy81cH8gdEypM2QXhPNpj8JhBfzKn1HbWeAJUuL4vSMwdMiy6n1CdJ5JaGNXttenqcXkpiPJfGE5MyhNccRYkESkGmjNw7UgxJMoogsvggKXr9EJsXxAZ7k1ghRaaqaEjMkbLj1ETyiJeb5N5DQnUJPvi5AEEHFzDu", + "stackHeight": 3 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program cTokenmWW8bLPjZEBAUgYy3zKxQZW6VKi7bqNFEVv3m invoke [1]", + "Program log: Instruction: MintTo", + "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]", + "Program log: Instruction: MintTo", + "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4492 of 983765 compute units", + "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [2]", + "Program log: Instruction: InvokeCpi", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [3]", + "Program log: Instruction: AppendLeavesToMerkleTrees", + "Program 11111111111111111111111111111111 invoke [4]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 41970 of 937220 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program noopb9bkMVfRPU8AsbpTUg8AQkHtKwMYZiFUjNRtMmV invoke [3]", + "Program noopb9bkMVfRPU8AsbpTUg8AQkHtKwMYZiFUjNRtMmV consumed 38 of 892657 compute units", + "Program noopb9bkMVfRPU8AsbpTUg8AQkHtKwMYZiFUjNRtMmV success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 71757 of 963800 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success", + "Program cTokenmWW8bLPjZEBAUgYy3zKxQZW6VKi7bqNFEVv3m consumed 108660 of 999850 compute units", + "Program cTokenmWW8bLPjZEBAUgYy3zKxQZW6VKi7bqNFEVv3m success" + ], + "preTokenBalances": [ + { + "accountIndex": 3, + "mint": "2U35cKS3Cj2xs5EBdByXYU7LaKAitqjSZc1Jnvu4iPf4", + "uiTokenAmount": { + "uiAmount": null, + "decimals": 2, + "amount": "0", + "uiAmountString": "0" + }, + "owner": "GXtd2izAiMJPwMEjfgTRH3d7k9mjn4Jq3JrWFv9gySYy", + "programId": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" + } + ], + "postTokenBalances": [ + { + "accountIndex": 3, + "mint": "2U35cKS3Cj2xs5EBdByXYU7LaKAitqjSZc1Jnvu4iPf4", + "uiTokenAmount": { + "uiAmount": 10.0, + "decimals": 2, + "amount": "1000", + "uiAmountString": "10" + }, + "owner": "GXtd2izAiMJPwMEjfgTRH3d7k9mjn4Jq3JrWFv9gySYy", + "programId": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" + } + ], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 108810 + }, + "version": 0, + "blockTime": 1724707606 + }, + "compressionInfo": { + "closedAccounts": [], + "openedAccounts": [ + { + "account": { + "hash": "38eTBdRT4kdFELvNfbJbFZNvGWUvXbn3DdJn3PzMtsqJ", + "address": null, + "data": { + "discriminator": 2, + "data": "Fci4U9QOCVoeSJNu52uQTHTZkN+jGh5G5VqySLzUdo/IF0SuAAU/8W2JwQ9eoK7yn7i6O/dx7aXfmnaBmwIYnOgDAAAAAAAAAAAA", + "dataHash": "4D9BW6ThazKaSy7U91cnSWF9E9pCtTFkomd25Pt6CL7k" + }, + "owner": "cTokenmWW8bLPjZEBAUgYy3zKxQZW6VKi7bqNFEVv3m", + "lamports": 0, + "leafIndex": 0, + "seq": 1, + "slotCreated": 40, + "proveByIndex": false, + "merkleContext": { + "treeType": 1, + "tree": "smt1NamzXdq4AMqS2fS2F1i5KTYPZRhoHgWx38d8WsT", + "queue": "nfq1NvQDJ2GEgnS8zt9prAe8rjjpAW1zFkrvZoBR148", + "cpiContext": null, + "nextTreeContext": null + } + }, + "optionalTokenData": { + "mint": "2U35cKS3Cj2xs5EBdByXYU7LaKAitqjSZc1Jnvu4iPf4", + "owner": "EU57rQxcmFhJ24ApVdUy3y4MxFXcTUN3uiVeWvGgtWXu", + "amount": 1000, + "delegate": null, + "state": "initialized", + "tlv": null + } + } + ] + } +} diff --git a/tests/integration_tests/snapshots/integration_tests__e2e_tests__e2e_mint_and_transfer_transactions-transfer-transaction-v2.snap b/tests/integration_tests/snapshots/integration_tests__e2e_tests__e2e_mint_and_transfer_transactions-transfer-transaction-v2.snap new file mode 100644 index 00000000..b4c1a554 --- /dev/null +++ b/tests/integration_tests/snapshots/integration_tests__e2e_tests__e2e_mint_and_transfer_transactions-transfer-transaction-v2.snap @@ -0,0 +1,270 @@ +--- +source: tests/integration_tests/e2e_tests.rs +assertion_line: 273 +expression: parsed_transaction_v2 +--- +{ + "transaction": { + "slot": 41, + "transaction": [ + "At/XUFEMc3ZIkI51Qbm583tNKDnXKuIQphGozZpBYbgf6ABvMzFeUeahUxgDAgkI33pxxlJfE3i95GhjWmfyLwaHa1sOEKHckTKk/ifklOEXG3gTUvhPxNxUB0RrUjYF/1ijF7YVYteThMGEZ9mCeI+gJT2cKpJZKrD9GcMRiJQAgAIBCQ066kqIOraYFYwcowNemgzSTbOfydVbCHmiihSANjBfS8gXRK4ABT/xbYnBD16grvKfuLo793Htpd+adoGbAhicDQHJKKtF02VZWjTodxf7sACKGdIvBSydofmIxHxX3joLswn9rg461IPpB0O026fShVGVgZIix3Jdq2rkkoz9VQMGRm/lIRcy/+ytunLDm+e8jOW7xfcSayxDmzpAAAAACRWjVyN5To+2XQdba3JpnDjdAuWUi3Ww5aBBjoCXW0TmyRiwvXzPkVREinq/ao85eCmh6P0Ip/DQs6q4eFL8MganVfghOQVNRCSxWvDEMM8vS3+YeTraElLUjzZmxsvOHuvEjPsyZLvDS/XFpag0/GdQAG8phtlvI1vIh1703UQLvA/Au0fKL3TEES6UqxPPo8Y05dwX6ssDzRojzX54fPuzKHUQXK6FtbREdgftv+FFJ7+0I5EcpAQjv9FSeiZ1CSw27CL1F4MA/bRKqmr/z/Ckbhy8ZBwOPtCdoTue9QgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAzoq24lR6p63KQOIfgiPwbv0t7D+R1bXllwgxkAvhbAgQABQJAQg8ABQ8AAQYHCAkKCwUFBQUMAgOkAqM0yOeMA0W6GAEAAAEgDcybE/kuYR/226yAHSns5YxBIS+MafsL6LZ76CWmBidm2F6NUKzyXU5As+YZxSeFS0YYAp2+ExHTXSRZD16+GUg4TLuYYlT/8n3syXmgaOMOjTFhA3NMwhClrZFJCDgSWq4illaD5NIyFAhqWIq24GV3Vfz6uLZFHmPN3BMORhXIuFPUDglaHkiTbudrkEx02ZDfoxoeRuVaski81HaPAAEAAADoAwAAAAAAAAAAAQAAAAAAAQAAAAIAAADIF0SuAAU/8W2JwQ9eoK7yn7i6O/dx7aXfmnaBmwIYnCwBAAAAAAAAAAAAp8bYxtw4vGkEm82NdkHr5c+puA1vMQAX3rbXh/MsAMa8AgAAAAAAAAAAAAAAAAAA", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 10000, + "preBalances": [ + 996478820, + 1000000000, + 9496335660, + 9626515200, + 1, + 1141440, + 0, + 1141440, + 1392000, + 1141440, + 0, + 1141440, + 1 + ], + "postBalances": [ + 996463220, + 1000000000, + 9496336260, + 9626520200, + 1, + 1141440, + 0, + 1141440, + 1392000, + 1141440, + 0, + 1141440, + 1 + ], + "innerInstructions": [ + { + "index": 1, + "instructions": [ + { + "programIdIndex": 7, + "accounts": [ + 0, + 6, + 8, + 9, + 10, + 11, + 5, + 7, + 7, + 12, + 7, + 2, + 3 + ], + "data": "937WU34kkomRjqL5P2hp1SbqWHwD5pRSGWyy7XyDP3pxV6i4ivMQB9NKuV76N7qHVV5WGB7cnvwPCGAMGR7LabEYg4PsaiG9YUxLnWjPDuda3S6ubBZaenVjuTaB91mN3KvYigLFUDh6LdQh8EkdHrMm9agzrXKtuuxXTw1XK4dAru2DULfq4VmJaMYWfjkysrodDEaLoCYq4vh72f8AQZaYFRQNWudt2LKSarMjV5nuitv7VpfGftNefn335k9PoZgHoYhBqrC69Y9CwAWhS4qRBWWbkiAZ7NbvUiuXQbknw4LPS2hWHSoXYTRNodhiakWAQ1JarRhmSovXTYmbKgpPXA4nDBRi6AjJHmNQY62ihcFy4PE3SiGsfZ84ZPVXcb6nd8QszARZWshgCMPsbp8Mc5fMH2r8NJNBDwbaBCFXeWf1wAuujtzEE3rUuCbpYc67KNhsNCxUX9xEaTRgKNv7hQ8tusxsbfT5FnK4N1R8gG4bTv4Qs17EFeKJoUwVNZ7Y7VDnmzR9hfH9Lhjf1jeqATPJQ49j7zS43yCDGcknvAFfH1JkMhz4a1B9ogvGkSzQ7uNo6Kq62Y4ZkKD9XxfkFfrQ6PKb2H6k6gwPSgLDPouD8GSmWGKh9EcmhbVceqFNfkJCnH4s2xUMrW48Kkk8p77i3LCKmkZjK9ku2cXRZUDhHPAsrdx8BSNKSoQHUGMbxCMkAcUNa4gYy66iEw2C19xS4Rsax5gHrTsAWHDtG7XXTHM6rF4ArMssE36Fc1nWQ4ztZeRLGBryQtq2hVkgaM3wiD3HP9PKfN7wN1EkswHys9Edguw8sqYDrHYycS3LC53dcMCZ35PcpRVNH2Rovz74ySoatCexpNSYcdYgJJRFjHuugYiFrfPXyKdcZGRMgzwWr4CCfwWHiVo7jUaF5hbypj", + "stackHeight": 2 + }, + { + "programIdIndex": 11, + "accounts": [ + 0, + 10, + 8, + 12, + 3, + 2 + ], + "data": "WiZw2hSp2LSxinAV5ctBYvWDDSU14rCTxqkLwHaascRSSVs2Ae96G4wBHXzG", + "stackHeight": 3 + }, + { + "programIdIndex": 12, + "accounts": [ + 0, + 3 + ], + "data": "3Bxs4PckVVt51W8w", + "stackHeight": 3 + }, + { + "programIdIndex": 11, + "accounts": [ + 0, + 10, + 8, + 12, + 2 + ], + "data": "7UWNMdwFJEWBQPSoUMHnfbtZXYrrKsYRgF3rcaBXJ5Y63X3JDyfzGgf77mdDcK1ZSE86z7Ww19naJk5hZX477ckk7JwJn6rwGwKAVHp4PHd", + "stackHeight": 3 + }, + { + "programIdIndex": 12, + "accounts": [ + 0, + 2 + ], + "data": "3Bxs4FaSqfLcHjgs", + "stackHeight": 4 + }, + { + "programIdIndex": 9, + "accounts": [], + "data": "68rmtMKBQBY7KzgV6jpsERynVafHJshkjDnzH6ZtThsukHbuLHS1Gpk4ziL62hpYRadTMDZMwL7K1Mv7nEi2a1cRDYyA13BmAeNBnnsoT8t4qJvKDDmKdCP8Hija2eyx7DF5z8ACHtRXRm7wKe84JQyd6pPr99sQTNXKEifstc3sXCDdwSQDDw6K4WxwS3i6Xy2fzcCcDs3bL545Zx8z7d7pkJsrAfXikqnWaV2ik54qTgHvTSQi6HyVdoiANwTtanHhdfDY888iS4aSN7uCq3dTv6pcBYwbvXLPvQjdXJequ8dD3eC4HkMV7PZEA8nrJ6J6RvoRCW444qkw3gpRWmSctWvVJM1mQUtJRTqMNpCaaQuE4jd7wTA7n9ZiY4onEyYh7DA2H1nseDvpWCKABmivXLWA4VQba5B3orvKXbrxXWptxfyiuUaMbLc1yhfmX7N4MtyQSL7MZCGdR845iYn5NcWXTuE4hPah3Tgw1R8iJo94x84ia4YsXS6a42szu7ySxbHiNoLg9zqm52W1y7eMVVhymEPjXXiK99jNmNCqfgg4jArx15ieQrWhcCMoG4gCoH71CQHiyUTtPmjrjLDDioP1XwbMcE1QrJjE8s7c5xjE3nL8pVmG1Sis2mpSwGxJyCzntBLweAK22JL2pVtHB8h41Am696DVME69t2uteek4FAmHkwL7nxrsA4f1FwMJ8dqPDGeMJp3dt7dWy6n6N8Xdes9c7wWTRZFZVgaLZ7R6CUEJfGrxmYgX", + "stackHeight": 3 + } + ] + } + ], + "logMessages": [ + "Program ComputeBudget111111111111111111111111111111 invoke [1]", + "Program ComputeBudget111111111111111111111111111111 success", + "Program cTokenmWW8bLPjZEBAUgYy3zKxQZW6VKi7bqNFEVv3m invoke [1]", + "Program log: Instruction: Transfer", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 invoke [2]", + "Program log: Instruction: InvokeCpi", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [3]", + "Program log: Instruction: InsertIntoNullifierQueues", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 10546 of 816776 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program 11111111111111111111111111111111 invoke [3]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq invoke [3]", + "Program log: Instruction: AppendLeavesToMerkleTrees", + "Program 11111111111111111111111111111111 invoke [4]", + "Program 11111111111111111111111111111111 success", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq consumed 43797 of 783655 compute units", + "Program compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq success", + "Program noopb9bkMVfRPU8AsbpTUg8AQkHtKwMYZiFUjNRtMmV invoke [3]", + "Program noopb9bkMVfRPU8AsbpTUg8AQkHtKwMYZiFUjNRtMmV consumed 38 of 736395 compute units", + "Program noopb9bkMVfRPU8AsbpTUg8AQkHtKwMYZiFUjNRtMmV success", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 consumed 221647 of 957354 compute units", + "Program SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7 success", + "Program cTokenmWW8bLPjZEBAUgYy3zKxQZW6VKi7bqNFEVv3m consumed 265204 of 999850 compute units", + "Program cTokenmWW8bLPjZEBAUgYy3zKxQZW6VKi7bqNFEVv3m success" + ], + "preTokenBalances": [], + "postTokenBalances": [], + "rewards": [], + "loadedAddresses": { + "writable": [], + "readonly": [] + }, + "computeUnitsConsumed": 265354 + }, + "version": 0, + "blockTime": 1724707606 + }, + "compressionInfo": { + "closedAccounts": [ + { + "account": { + "account": { + "hash": "38eTBdRT4kdFELvNfbJbFZNvGWUvXbn3DdJn3PzMtsqJ", + "address": null, + "data": { + "discriminator": 2, + "data": "Fci4U9QOCVoeSJNu52uQTHTZkN+jGh5G5VqySLzUdo/IF0SuAAU/8W2JwQ9eoK7yn7i6O/dx7aXfmnaBmwIYnOgDAAAAAAAAAAAA", + "dataHash": "4D9BW6ThazKaSy7U91cnSWF9E9pCtTFkomd25Pt6CL7k" + }, + "owner": "cTokenmWW8bLPjZEBAUgYy3zKxQZW6VKi7bqNFEVv3m", + "lamports": 0, + "leafIndex": 0, + "seq": 1, + "slotCreated": 0, + "proveByIndex": false, + "merkleContext": { + "treeType": 1, + "tree": "smt1NamzXdq4AMqS2fS2F1i5KTYPZRhoHgWx38d8WsT", + "queue": "nfq1NvQDJ2GEgnS8zt9prAe8rjjpAW1zFkrvZoBR148", + "cpiContext": null, + "nextTreeContext": null + } + }, + "nullifier": "11111111111111111111111111111111", + "txHash": "11111111111111111111111111111111" + }, + "optionalTokenData": { + "mint": "2U35cKS3Cj2xs5EBdByXYU7LaKAitqjSZc1Jnvu4iPf4", + "owner": "EU57rQxcmFhJ24ApVdUy3y4MxFXcTUN3uiVeWvGgtWXu", + "amount": 1000, + "delegate": null, + "state": "initialized", + "tlv": null + } + } + ], + "openedAccounts": [ + { + "account": { + "hash": "cvUsqXvgkibEQc14JS4JiM5e1mePhiTDWkChWDRLPxW", + "address": null, + "data": { + "discriminator": 2, + "data": "Fci4U9QOCVoeSJNu52uQTHTZkN+jGh5G5VqySLzUdo/IF0SuAAU/8W2JwQ9eoK7yn7i6O/dx7aXfmnaBmwIYnCwBAAAAAAAAAAAA", + "dataHash": "319XRFbciSvN3d9nBhehg8uB4T4xUyn8fd3oejJUXZrQ" + }, + "owner": "cTokenmWW8bLPjZEBAUgYy3zKxQZW6VKi7bqNFEVv3m", + "lamports": 0, + "leafIndex": 1, + "seq": 2, + "slotCreated": 41, + "proveByIndex": false, + "merkleContext": { + "treeType": 1, + "tree": "smt1NamzXdq4AMqS2fS2F1i5KTYPZRhoHgWx38d8WsT", + "queue": "nfq1NvQDJ2GEgnS8zt9prAe8rjjpAW1zFkrvZoBR148", + "cpiContext": null, + "nextTreeContext": null + } + }, + "optionalTokenData": { + "mint": "2U35cKS3Cj2xs5EBdByXYU7LaKAitqjSZc1Jnvu4iPf4", + "owner": "EU57rQxcmFhJ24ApVdUy3y4MxFXcTUN3uiVeWvGgtWXu", + "amount": 300, + "delegate": null, + "state": "initialized", + "tlv": null + } + }, + { + "account": { + "hash": "2cnNeqdyWE7w5GSqP1sHrZ6TtDXDbwa1i9hqQQT5Nhco", + "address": null, + "data": { + "discriminator": 2, + "data": "Fci4U9QOCVoeSJNu52uQTHTZkN+jGh5G5VqySLzUdo+nxtjG3Di8aQSbzY12Qevlz6m4DW8xABfetteH8ywAxrwCAAAAAAAAAAAA", + "dataHash": "3CkCBHBK63DnSuMT25NgxPAdfSeBFgyedYR1gygpHnsD" + }, + "owner": "cTokenmWW8bLPjZEBAUgYy3zKxQZW6VKi7bqNFEVv3m", + "lamports": 0, + "leafIndex": 2, + "seq": 3, + "slotCreated": 41, + "proveByIndex": false, + "merkleContext": { + "treeType": 1, + "tree": "smt1NamzXdq4AMqS2fS2F1i5KTYPZRhoHgWx38d8WsT", + "queue": "nfq1NvQDJ2GEgnS8zt9prAe8rjjpAW1zFkrvZoBR148", + "cpiContext": null, + "nextTreeContext": null + } + }, + "optionalTokenData": { + "mint": "2U35cKS3Cj2xs5EBdByXYU7LaKAitqjSZc1Jnvu4iPf4", + "owner": "CHvwuTvTiwRSNBwAnrCG14V8YTJ6wwhHQrifxdFzHzsX", + "amount": 700, + "delegate": null, + "state": "initialized", + "tlv": null + } + } + ] + } +} diff --git a/tests/integration_tests/snapshots/integration_tests__e2e_tests__lamport_transfers-receiver-accounts.snap b/tests/integration_tests/snapshots/integration_tests__e2e_tests__lamport_transfers-receiver-accounts.snap index bb4759b4..77058a5a 100644 --- a/tests/integration_tests/snapshots/integration_tests__e2e_tests__lamport_transfers-receiver-accounts.snap +++ b/tests/integration_tests/snapshots/integration_tests__e2e_tests__lamport_transfers-receiver-accounts.snap @@ -1,5 +1,6 @@ --- source: tests/integration_tests/e2e_tests.rs +assertion_line: 380 expression: accounts --- { @@ -9,25 +10,25 @@ expression: accounts "value": { "items": [ { - "hash": "2eoEsJByEcWpLTdaEwr1DB6cwXkFxqAVZnbvWoQSDm4V", + "hash": "3q5dSVJCK4Tk2VU9C4MaPPw4TdzKdtp1M5Dug3zERSx4", "address": null, "data": null, "owner": "FLkMEA7eA82Cvp7MqamqFKsRN3E2Vfg3Xa8NRyVARq5n", "lamports": 1000, "tree": "smt1NamzXdq4AMqS2fS2F1i5KTYPZRhoHgWx38d8WsT", - "leafIndex": 4, - "seq": 5, + "leafIndex": 2, + "seq": 3, "slotCreated": 0 }, { - "hash": "3q5dSVJCK4Tk2VU9C4MaPPw4TdzKdtp1M5Dug3zERSx4", + "hash": "2eoEsJByEcWpLTdaEwr1DB6cwXkFxqAVZnbvWoQSDm4V", "address": null, "data": null, "owner": "FLkMEA7eA82Cvp7MqamqFKsRN3E2Vfg3Xa8NRyVARq5n", "lamports": 1000, "tree": "smt1NamzXdq4AMqS2fS2F1i5KTYPZRhoHgWx38d8WsT", - "leafIndex": 2, - "seq": 3, + "leafIndex": 4, + "seq": 5, "slotCreated": 0 } ], diff --git a/tests/integration_tests/snapshots/integration_tests__e2e_tests__lamport_transfers-receiver-proofs.snap b/tests/integration_tests/snapshots/integration_tests__e2e_tests__lamport_transfers-receiver-proofs.snap index ebfe0056..6d03fe28 100644 --- a/tests/integration_tests/snapshots/integration_tests__e2e_tests__lamport_transfers-receiver-proofs.snap +++ b/tests/integration_tests/snapshots/integration_tests__e2e_tests__lamport_transfers-receiver-proofs.snap @@ -1,5 +1,6 @@ --- source: tests/integration_tests/e2e_tests.rs +assertion_line: 397 expression: proofs --- { @@ -9,9 +10,9 @@ expression: proofs "value": [ { "proof": [ - "11111111111111111111111111111111", - "3CFKteYSRSkp9EGFPzibgzCPtNuJ5HeZ31fAsBpgcHwZ", - "2pUPvHKWnmbQA5ybaG1QiUuxbBgMdHefYz3uFymwXkVG", + "2veKUPKieajFG7yzPNGARHq7jYS1FiXcXG8P9Txhvhcn", + "3ty9eaQ1hvD7y1gFkDUaBeMj6F9LhxK4rwTcaiJRnw6p", + "2yubnov8tB2zqryTMjPJj41vncMPmFR51VK6SQTpknAU", "2gQksfK543Jw196amPxXWceFzNTfRHiqb7x2edvupftT", "Y8pRoGMGXJPGZyb7m4sqkPsTSJvzZ7oSVnaybCcYbgd", "3w895nemtSxb1fEjFT3cXkVpW3y6f9uHQn43jEwu1RWc", @@ -37,16 +38,16 @@ expression: proofs "4EE5KQnQ6Tvo78gGhTu8serpJV4srbRhYZ3rdvCiRa5e" ], "root": "DQ366kMe5qRsNQecusoD3tzJk79CT88MuPpRhx3nSzz", - "leafIndex": 4, - "hash": "2eoEsJByEcWpLTdaEwr1DB6cwXkFxqAVZnbvWoQSDm4V", + "leafIndex": 2, + "hash": "3q5dSVJCK4Tk2VU9C4MaPPw4TdzKdtp1M5Dug3zERSx4", "merkleTree": "smt1NamzXdq4AMqS2fS2F1i5KTYPZRhoHgWx38d8WsT", "rootSeq": 5 }, { "proof": [ - "2veKUPKieajFG7yzPNGARHq7jYS1FiXcXG8P9Txhvhcn", - "3ty9eaQ1hvD7y1gFkDUaBeMj6F9LhxK4rwTcaiJRnw6p", - "2yubnov8tB2zqryTMjPJj41vncMPmFR51VK6SQTpknAU", + "11111111111111111111111111111111", + "3CFKteYSRSkp9EGFPzibgzCPtNuJ5HeZ31fAsBpgcHwZ", + "2pUPvHKWnmbQA5ybaG1QiUuxbBgMdHefYz3uFymwXkVG", "2gQksfK543Jw196amPxXWceFzNTfRHiqb7x2edvupftT", "Y8pRoGMGXJPGZyb7m4sqkPsTSJvzZ7oSVnaybCcYbgd", "3w895nemtSxb1fEjFT3cXkVpW3y6f9uHQn43jEwu1RWc", @@ -72,8 +73,8 @@ expression: proofs "4EE5KQnQ6Tvo78gGhTu8serpJV4srbRhYZ3rdvCiRa5e" ], "root": "DQ366kMe5qRsNQecusoD3tzJk79CT88MuPpRhx3nSzz", - "leafIndex": 2, - "hash": "3q5dSVJCK4Tk2VU9C4MaPPw4TdzKdtp1M5Dug3zERSx4", + "leafIndex": 4, + "hash": "2eoEsJByEcWpLTdaEwr1DB6cwXkFxqAVZnbvWoQSDm4V", "merkleTree": "smt1NamzXdq4AMqS2fS2F1i5KTYPZRhoHgWx38d8WsT", "rootSeq": 5 } diff --git a/tests/integration_tests/snapshots/integration_tests__e2e_tests__lamport_transfers-receiver-validity-proof.snap b/tests/integration_tests/snapshots/integration_tests__e2e_tests__lamport_transfers-receiver-validity-proof.snap index 0e49af53..fa5db5cb 100644 --- a/tests/integration_tests/snapshots/integration_tests__e2e_tests__lamport_transfers-receiver-validity-proof.snap +++ b/tests/integration_tests/snapshots/integration_tests__e2e_tests__lamport_transfers-receiver-validity-proof.snap @@ -1,5 +1,6 @@ --- source: tests/integration_tests/e2e_tests.rs +assertion_line: 417 expression: validity_proof --- { @@ -18,12 +19,12 @@ expression: validity_proof 5 ], "leafIndices": [ - 4, - 2 + 2, + 4 ], "leaves": [ - "2eoEsJByEcWpLTdaEwr1DB6cwXkFxqAVZnbvWoQSDm4V", - "3q5dSVJCK4Tk2VU9C4MaPPw4TdzKdtp1M5Dug3zERSx4" + "3q5dSVJCK4Tk2VU9C4MaPPw4TdzKdtp1M5Dug3zERSx4", + "2eoEsJByEcWpLTdaEwr1DB6cwXkFxqAVZnbvWoQSDm4V" ], "merkleTrees": [ "smt1NamzXdq4AMqS2fS2F1i5KTYPZRhoHgWx38d8WsT", diff --git a/tests/integration_tests/snapshots/integration_tests__e2e_tests__nullfiier_and_address_queue_transactions-proof-address.snap b/tests/integration_tests/snapshots/integration_tests__e2e_tests__nullfiier_and_address_queue_transactions-proof-address.snap index 2ce0acc7..09b60cfd 100644 --- a/tests/integration_tests/snapshots/integration_tests__e2e_tests__nullfiier_and_address_queue_transactions-proof-address.snap +++ b/tests/integration_tests/snapshots/integration_tests__e2e_tests__nullfiier_and_address_queue_transactions-proof-address.snap @@ -1,6 +1,7 @@ --- source: tests/integration_tests/e2e_tests.rs -expression: proof +assertion_line: 686 +expression: proof_v1 --- { "context": { @@ -8,13 +9,13 @@ expression: proof }, "value": [ { - "root": "2RHRJrmNU2fLCBTr9gtxaz8F1o8vnVc6wdJEZyDSSQf9", + "root": "21SAoPAaCduuzL7Hrc37eWgE1fwDruxcEbUBLgAnAg4E", "address": "1111111ogCyDbaRMvkdsHB3qfdyFYaG1WtRUAfdh", "lowerRangeAddress": "11111111111111111111111111111111", "higherRangeAddress": "143oE544fmAqpnwRQYAmNCKFaweMsg7wSbGfihU8RdU5", "nextIndex": 2, "proof": [ - "34cMT7MjFrs8hLp2zHMrPJHKkUxBDBwBTNck77wLjjcY", + "11111111111111111111111111111111", "3NsrDVjX6esWviMzLrRNkvZ9RguhuMqRwyviKQ3Kr2Ni", "274k4KPY5VhmU5pCwwJzyHaY4AH4m7SjnZnyj44UitJc", "2gQksfK543Jw196amPxXWceFzNTfRHiqb7x2edvupftT", diff --git a/tests/integration_tests/snapshots/integration_tests__mock_tests__get_multiple_new_address_proofs_interop-validity-proof-v2.snap b/tests/integration_tests/snapshots/integration_tests__mock_tests__get_multiple_new_address_proofs_interop-validity-proof-v2.snap new file mode 100644 index 00000000..222d2f23 --- /dev/null +++ b/tests/integration_tests/snapshots/integration_tests__mock_tests__get_multiple_new_address_proofs_interop-validity-proof-v2.snap @@ -0,0 +1,35 @@ +--- +source: tests/integration_tests/mock_tests.rs +assertion_line: 1175 +expression: validity_proof_v2 +--- +{ + "value": { + "compressedProof": { + "a": [], + "b": [], + "c": [] + }, + "accounts": [], + "addresses": [ + { + "address": "12nCKqGG85jHxbTeA8i2Z7D4vnNUUrQ4r5e8dv2o16X", + "root": "3FrGzyXtjqjnukHDS2M5oyVj8tMVcHSahcHpWBGR5MHY", + "rootIndex": { + "rootIndex": 3, + "proveByIndex": false + }, + "merkleContext": { + "treeType": 2, + "tree": "amt1Ayt45jfbdw5YSo7iz6WZxUmnZsQTYXy82hVwyC2", + "queue": "aq1S9z4reTSQAdgWHGD2zDaS39sjGrAxbR31vxJ2F4F", + "cpiContext": null, + "nextTreeContext": null + } + } + ] + }, + "context": { + "slot": 0 + } +} diff --git a/tests/integration_tests/snapshots/integration_tests__mock_tests__get_multiple_new_address_proofs_interop-validity-proof.snap b/tests/integration_tests/snapshots/integration_tests__mock_tests__get_multiple_new_address_proofs_interop-validity-proof.snap index 68327607..bd8c9ae3 100644 --- a/tests/integration_tests/snapshots/integration_tests__mock_tests__get_multiple_new_address_proofs_interop-validity-proof.snap +++ b/tests/integration_tests/snapshots/integration_tests__mock_tests__get_multiple_new_address_proofs_interop-validity-proof.snap @@ -1,5 +1,6 @@ --- source: tests/integration_tests/mock_tests.rs +assertion_line: 1124 expression: validity_proof --- { diff --git a/tests/integration_tests/utils.rs b/tests/integration_tests/utils.rs index e6df7910..e264519e 100644 --- a/tests/integration_tests/utils.rs +++ b/tests/integration_tests/utils.rs @@ -1,6 +1,8 @@ use std::{env, path::Path, str::FromStr, sync::Mutex}; use once_cell::sync::Lazy; +use photon_indexer::api::method::utils::{TokenAccount, TokenAccountListV2, TokenAccountV2}; +use photon_indexer::common::typedefs::account::AccountV2; use photon_indexer::common::typedefs::hash::Hash; use photon_indexer::migration::{MigractorWithCustomMigrations, MigratorTrait}; use photon_indexer::{ @@ -21,6 +23,8 @@ use sea_orm::{ SqlxSqliteConnector, Statement, TransactionTrait, }; +use photon_indexer::ingester::index_block; +use photon_indexer::ingester::typedefs::block_info::BlockMetadata; pub use rstest::rstest; use solana_client::{ nonblocking::rpc_client::RpcClient, rpc_config::RpcTransactionConfig, rpc_request::RpcRequest, @@ -131,8 +135,8 @@ pub async fn setup_with_options(name: String, opts: TestSetupOptions) -> TestSet } let rpc_url = match opts.network { - Network::Mainnet => std::env::var("MAINNET_RPC_URL").unwrap(), - Network::Devnet => std::env::var("DEVNET_RPC_URL").unwrap(), + Network::Mainnet => env::var("MAINNET_RPC_URL").unwrap(), + Network::Devnet => env::var("DEVNET_RPC_URL").unwrap(), Network::Localnet => "http://127.0.0.1:8899".to_string(), }; let client = get_rpc_client(&rpc_url); @@ -194,7 +198,6 @@ pub async fn reset_tables(conn: &DatabaseConnection) -> Result<(), DbErr> { .into_iter() .map(|row| row.try_get("", "tablename").unwrap()) .collect::>(); - for table in tables { truncate_table(conn, table.to_string()).await?; } @@ -347,6 +350,32 @@ pub fn verify_response_matches_input_token_data( ); } } + +pub fn verify_response_matches_input_token_data_v2( + response: TokenAccountListV2, + tlvs: Vec, +) { + if response.items.len() != tlvs.len() { + panic!( + "Mismatch in number of accounts. Expected: {}, Actual: {}", + tlvs.len(), + response.items.len() + ); + } + let token_accounts = response.items; + for (account, tlv) in token_accounts.iter().zip(order_token_datas(tlvs).iter()) { + let account = account.clone(); + assert_eq!(account.token_data.mint, tlv.token_data.mint); + assert_eq!(account.token_data.owner, tlv.token_data.owner); + assert_eq!(account.token_data.amount, tlv.token_data.amount); + assert_eq!( + account.token_data.delegate, + tlv.token_data.delegate.map(Into::into) + ); + assert_eq!(account.token_data.state, tlv.token_data.state); + } +} + pub fn assert_account_response_list_matches_input( account_response: &mut Vec, input_accounts: &mut Vec, @@ -356,6 +385,45 @@ pub fn assert_account_response_list_matches_input( input_accounts.sort_by(|a, b| a.hash.to_vec().cmp(&b.hash.to_vec())); assert_eq!(account_response, input_accounts); } +pub fn assert_account_response_list_matches_input_v2( + account_response_v2: &mut Vec, + input_accounts: &mut Vec, +) { + assert_eq!(account_response_v2.len(), input_accounts.len()); + account_response_v2.sort_by(|a, b| a.hash.to_vec().cmp(&b.hash.to_vec())); + input_accounts.sort_by(|a, b| a.hash.to_vec().cmp(&b.hash.to_vec())); + + for (account_v2, account) in account_response_v2.iter().zip(input_accounts.iter()) { + compare_account_with_account_v2(account, account_v2); + } +} + +pub fn compare_account_with_account_v2(account: &Account, account_v2: &AccountV2) { + assert_eq!(account.hash, account_v2.hash); + assert_eq!(account.address, account_v2.address); + assert_eq!(account.data, account_v2.data); + assert_eq!(account.owner, account_v2.owner); + assert_eq!(account.lamports, account_v2.lamports); + assert_eq!(account.tree, account_v2.merkle_context.tree); + assert_eq!(account.leaf_index, account_v2.leaf_index); + assert_eq!(account.seq, account_v2.seq); + assert_eq!(account.slot_created, account_v2.slot_created); +} + +pub fn compare_token_account_with_token_account_v2( + token_acc: &TokenAccount, + token_acc_v2: &TokenAccountV2, +) { + compare_account_with_account_v2(&token_acc.account, &token_acc_v2.account); + assert_eq!(token_acc.token_data.mint, token_acc_v2.token_data.mint); + assert_eq!(token_acc.token_data.owner, token_acc_v2.token_data.owner); + assert_eq!(token_acc.token_data.amount, token_acc_v2.token_data.amount); + assert_eq!( + token_acc.token_data.delegate, + token_acc_v2.token_data.delegate + ); + assert_eq!(token_acc.token_data.state, token_acc_v2.token_data.state); +} /// Persist using a database connection instead of a transaction. Should only be use for tests. pub async fn persist_state_update_using_connection( @@ -424,3 +492,86 @@ pub async fn cached_fetch_account(setup: &TestSetup, account: Pubkey) -> SolanaA async fn fetch_account(client: &RpcClient, account: Pubkey) -> SolanaAccount { client.get_account(&account).await.unwrap() } + +/// Reads file names from tests/data/transactions/ +/// returns a vector of file names sorted by slot +pub fn read_file_names(name: &str, sort_by_slot: bool) -> Vec { + let signatures = std::fs::read_dir(format!("tests/data/transactions/{}", name)) + .unwrap() + .filter_map(|entry| { + entry + .ok() + .and_then(|e| e.file_name().to_str().map(|s| s.to_string())) + }) + .collect::>(); + if sort_by_slot { + let mut sorted_files: Vec<(String, u64)> = Vec::new(); + for filename in signatures { + let json_str = + std::fs::read_to_string(format!("tests/data/transactions/{}/{}", name, filename)) + .unwrap(); + let json: serde_json::Value = serde_json::from_str(&json_str).unwrap(); + let slot = json["slot"].as_u64().unwrap_or(0); + sorted_files.push((filename, slot)); + } + sorted_files.sort_by_key(|k| k.1); + sorted_files.into_iter().map(|(name, _)| name).collect() + } else { + signatures + } +} + +/// Reset table +/// Index transactions individually or in one batch +pub async fn index( + test_name: &str, + db_conn: Arc, + rpc_client: Arc, + txns: &[String], + index_transactions_individually: bool, +) { + let txs_permutations = txns + .iter() + .map(|x| vec![x.to_string()]) + .collect::>>(); + + for index_transactions_individually in [index_transactions_individually] { + for (i, txs) in txs_permutations.clone().iter().enumerate() { + println!( + "indexing tx {} {}/{}", + index_transactions_individually, + i + 1, + txs_permutations.len() + ); + println!("tx {:?}", txs); + + // HACK: We index a block so that API methods can fetch the current slot. + index_block( + db_conn.as_ref(), + &BlockInfo { + metadata: BlockMetadata { + slot: 0, + ..Default::default() + }, + ..Default::default() + }, + ) + .await + .unwrap(); + + if index_transactions_individually { + for tx in txs { + index_transaction(test_name, db_conn.clone(), rpc_client.clone(), tx).await; + } + } else { + index_multiple_transactions( + test_name, + db_conn.clone(), + rpc_client.clone(), + txs.iter().map(|x| x.as_str()).collect(), + ) + .await; + } + } + } +} diff --git a/tree.txt b/tree.txt new file mode 100644 index 00000000..7c13af39 --- /dev/null +++ b/tree.txt @@ -0,0 +1,2716 @@ +photon-indexer v0.50.0 (/Users/tsv/Developer/photon) +├── anchor-lang v0.29.0 +│ ├── anchor-attribute-access-control v0.29.0 (proc-macro) +│ │ ├── anchor-syn v0.29.0 +│ │ │ ├── anyhow v1.0.97 +│ │ │ ├── bs58 v0.5.1 +│ │ │ ├── heck v0.3.3 +│ │ │ │ └── unicode-segmentation v1.12.0 +│ │ │ ├── proc-macro2 v1.0.94 +│ │ │ │ └── unicode-ident v1.0.18 +│ │ │ ├── quote v1.0.40 +│ │ │ │ └── proc-macro2 v1.0.94 (*) +│ │ │ ├── serde v1.0.219 +│ │ │ │ └── serde_derive v1.0.219 (proc-macro) +│ │ │ │ ├── proc-macro2 v1.0.94 (*) +│ │ │ │ ├── quote v1.0.40 (*) +│ │ │ │ └── syn v2.0.100 +│ │ │ │ ├── proc-macro2 v1.0.94 (*) +│ │ │ │ ├── quote v1.0.40 (*) +│ │ │ │ └── unicode-ident v1.0.18 +│ │ │ ├── serde_json v1.0.140 +│ │ │ │ ├── itoa v1.0.15 +│ │ │ │ ├── memchr v2.7.4 +│ │ │ │ ├── ryu v1.0.20 +│ │ │ │ └── serde v1.0.219 (*) +│ │ │ ├── sha2 v0.10.8 +│ │ │ │ ├── cfg-if v1.0.0 +│ │ │ │ ├── cpufeatures v0.2.17 +│ │ │ │ │ └── libc v0.2.171 +│ │ │ │ └── digest v0.10.7 +│ │ │ │ ├── block-buffer v0.10.4 +│ │ │ │ │ └── generic-array v0.14.7 +│ │ │ │ │ ├── serde v1.0.219 (*) +│ │ │ │ │ └── typenum v1.18.0 +│ │ │ │ │ [build-dependencies] +│ │ │ │ │ └── version_check v0.9.5 +│ │ │ │ ├── crypto-common v0.1.6 +│ │ │ │ │ ├── generic-array v0.14.7 (*) +│ │ │ │ │ └── typenum v1.18.0 +│ │ │ │ └── subtle v2.4.1 +│ │ │ ├── syn v1.0.109 +│ │ │ │ ├── proc-macro2 v1.0.94 (*) +│ │ │ │ ├── quote v1.0.40 (*) +│ │ │ │ └── unicode-ident v1.0.18 +│ │ │ └── thiserror v1.0.69 +│ │ │ └── thiserror-impl v1.0.69 (proc-macro) +│ │ │ ├── proc-macro2 v1.0.94 (*) +│ │ │ ├── quote v1.0.40 (*) +│ │ │ └── syn v2.0.100 (*) +│ │ ├── proc-macro2 v1.0.94 (*) +│ │ ├── quote v1.0.40 (*) +│ │ └── syn v1.0.109 (*) +│ ├── anchor-attribute-account v0.29.0 (proc-macro) +│ │ ├── anchor-syn v0.29.0 (*) +│ │ ├── bs58 v0.5.1 +│ │ ├── proc-macro2 v1.0.94 (*) +│ │ ├── quote v1.0.40 (*) +│ │ └── syn v1.0.109 (*) +│ ├── anchor-attribute-constant v0.29.0 (proc-macro) +│ │ ├── anchor-syn v0.29.0 (*) +│ │ ├── quote v1.0.40 (*) +│ │ └── syn v1.0.109 (*) +│ ├── anchor-attribute-error v0.29.0 (proc-macro) +│ │ ├── anchor-syn v0.29.0 (*) +│ │ ├── quote v1.0.40 (*) +│ │ └── syn v1.0.109 (*) +│ ├── anchor-attribute-event v0.29.0 (proc-macro) +│ │ ├── anchor-syn v0.29.0 (*) +│ │ ├── proc-macro2 v1.0.94 (*) +│ │ ├── quote v1.0.40 (*) +│ │ └── syn v1.0.109 (*) +│ ├── anchor-attribute-program v0.29.0 (proc-macro) +│ │ ├── anchor-syn v0.29.0 (*) +│ │ ├── quote v1.0.40 (*) +│ │ └── syn v1.0.109 (*) +│ ├── anchor-derive-accounts v0.29.0 (proc-macro) +│ │ ├── anchor-syn v0.29.0 (*) +│ │ ├── quote v1.0.40 (*) +│ │ └── syn v1.0.109 (*) +│ ├── anchor-derive-serde v0.29.0 (proc-macro) +│ │ ├── anchor-syn v0.29.0 (*) +│ │ ├── borsh-derive-internal v0.10.4 +│ │ │ ├── proc-macro2 v1.0.94 (*) +│ │ │ ├── quote v1.0.40 (*) +│ │ │ └── syn v1.0.109 (*) +│ │ ├── proc-macro2 v1.0.94 (*) +│ │ ├── quote v1.0.40 (*) +│ │ └── syn v1.0.109 (*) +│ ├── anchor-derive-space v0.29.0 (proc-macro) +│ │ ├── proc-macro2 v1.0.94 (*) +│ │ ├── quote v1.0.40 (*) +│ │ └── syn v1.0.109 (*) +│ ├── arrayref v0.3.9 +│ ├── base64 v0.13.1 +│ ├── bincode v1.3.3 +│ │ └── serde v1.0.219 (*) +│ ├── borsh v0.10.4 +│ │ ├── borsh-derive v0.10.4 (proc-macro) +│ │ │ ├── borsh-derive-internal v0.10.4 (*) +│ │ │ ├── borsh-schema-derive-internal v0.10.4 +│ │ │ │ ├── proc-macro2 v1.0.94 (*) +│ │ │ │ ├── quote v1.0.40 (*) +│ │ │ │ └── syn v1.0.109 (*) +│ │ │ ├── proc-macro-crate v0.1.5 +│ │ │ │ └── toml v0.5.11 +│ │ │ │ └── serde v1.0.219 (*) +│ │ │ ├── proc-macro2 v1.0.94 (*) +│ │ │ └── syn v1.0.109 (*) +│ │ └── hashbrown v0.13.2 +│ │ └── ahash v0.8.11 +│ │ ├── cfg-if v1.0.0 +│ │ ├── getrandom v0.2.15 +│ │ │ ├── cfg-if v1.0.0 +│ │ │ └── libc v0.2.171 +│ │ ├── once_cell v1.21.3 +│ │ └── zerocopy v0.7.35 +│ │ [build-dependencies] +│ │ └── version_check v0.9.5 +│ ├── bytemuck v1.22.0 +│ │ └── bytemuck_derive v1.9.3 (proc-macro) +│ │ ├── proc-macro2 v1.0.94 (*) +│ │ ├── quote v1.0.40 (*) +│ │ └── syn v2.0.100 (*) +│ ├── getrandom v0.2.15 (*) +│ ├── solana-program v1.18.22 +│ │ ├── ark-bn254 v0.4.0 +│ │ │ ├── ark-ec v0.4.2 +│ │ │ │ ├── ark-ff v0.4.2 +│ │ │ │ │ ├── ark-ff-asm v0.4.2 (proc-macro) +│ │ │ │ │ │ ├── quote v1.0.40 (*) +│ │ │ │ │ │ └── syn v1.0.109 (*) +│ │ │ │ │ ├── ark-ff-macros v0.4.2 (proc-macro) +│ │ │ │ │ │ ├── num-bigint v0.4.6 +│ │ │ │ │ │ │ ├── num-integer v0.1.46 +│ │ │ │ │ │ │ │ └── num-traits v0.2.19 +│ │ │ │ │ │ │ │ [build-dependencies] +│ │ │ │ │ │ │ │ └── autocfg v1.4.0 +│ │ │ │ │ │ │ └── num-traits v0.2.19 (*) +│ │ │ │ │ │ ├── num-traits v0.2.19 (*) +│ │ │ │ │ │ ├── proc-macro2 v1.0.94 (*) +│ │ │ │ │ │ ├── quote v1.0.40 (*) +│ │ │ │ │ │ └── syn v1.0.109 (*) +│ │ │ │ │ ├── ark-serialize v0.4.2 +│ │ │ │ │ │ ├── ark-serialize-derive v0.4.2 (proc-macro) +│ │ │ │ │ │ │ ├── proc-macro2 v1.0.94 (*) +│ │ │ │ │ │ │ ├── quote v1.0.40 (*) +│ │ │ │ │ │ │ └── syn v1.0.109 (*) +│ │ │ │ │ │ ├── ark-std v0.4.0 +│ │ │ │ │ │ │ ├── num-traits v0.2.19 (*) +│ │ │ │ │ │ │ └── rand v0.8.5 +│ │ │ │ │ │ │ ├── libc v0.2.171 +│ │ │ │ │ │ │ ├── rand_chacha v0.3.1 +│ │ │ │ │ │ │ │ ├── ppv-lite86 v0.2.21 +│ │ │ │ │ │ │ │ │ └── zerocopy v0.8.24 +│ │ │ │ │ │ │ │ │ └── zerocopy-derive v0.8.24 (proc-macro) +│ │ │ │ │ │ │ │ │ ├── proc-macro2 v1.0.94 (*) +│ │ │ │ │ │ │ │ │ ├── quote v1.0.40 (*) +│ │ │ │ │ │ │ │ │ └── syn v2.0.100 (*) +│ │ │ │ │ │ │ │ └── rand_core v0.6.4 +│ │ │ │ │ │ │ │ └── getrandom v0.2.15 (*) +│ │ │ │ │ │ │ └── rand_core v0.6.4 (*) +│ │ │ │ │ │ ├── digest v0.10.7 (*) +│ │ │ │ │ │ └── num-bigint v0.4.6 +│ │ │ │ │ │ ├── num-integer v0.1.46 (*) +│ │ │ │ │ │ ├── num-traits v0.2.19 (*) +│ │ │ │ │ │ ├── rand v0.8.5 (*) +│ │ │ │ │ │ └── serde v1.0.219 (*) +│ │ │ │ │ ├── ark-std v0.4.0 (*) +│ │ │ │ │ ├── derivative v2.2.0 (proc-macro) +│ │ │ │ │ │ ├── proc-macro2 v1.0.94 (*) +│ │ │ │ │ │ ├── quote v1.0.40 (*) +│ │ │ │ │ │ └── syn v1.0.109 (*) +│ │ │ │ │ ├── digest v0.10.7 (*) +│ │ │ │ │ ├── itertools v0.10.5 +│ │ │ │ │ │ └── either v1.15.0 +│ │ │ │ │ │ └── serde v1.0.219 (*) +│ │ │ │ │ ├── num-bigint v0.4.6 (*) +│ │ │ │ │ ├── num-traits v0.2.19 (*) +│ │ │ │ │ ├── paste v1.0.15 (proc-macro) +│ │ │ │ │ └── zeroize v1.3.0 +│ │ │ │ │ └── zeroize_derive v1.4.2 (proc-macro) +│ │ │ │ │ ├── proc-macro2 v1.0.94 (*) +│ │ │ │ │ ├── quote v1.0.40 (*) +│ │ │ │ │ └── syn v2.0.100 (*) +│ │ │ │ │ [build-dependencies] +│ │ │ │ │ └── rustc_version v0.4.1 +│ │ │ │ │ └── semver v1.0.26 +│ │ │ │ ├── ark-poly v0.4.2 +│ │ │ │ │ ├── ark-ff v0.4.2 (*) +│ │ │ │ │ ├── ark-serialize v0.4.2 (*) +│ │ │ │ │ ├── ark-std v0.4.0 (*) +│ │ │ │ │ ├── derivative v2.2.0 (proc-macro) (*) +│ │ │ │ │ └── hashbrown v0.13.2 (*) +│ │ │ │ ├── ark-serialize v0.4.2 (*) +│ │ │ │ ├── ark-std v0.4.0 (*) +│ │ │ │ ├── derivative v2.2.0 (proc-macro) (*) +│ │ │ │ ├── hashbrown v0.13.2 (*) +│ │ │ │ ├── itertools v0.10.5 (*) +│ │ │ │ ├── num-traits v0.2.19 (*) +│ │ │ │ └── zeroize v1.3.0 (*) +│ │ │ ├── ark-ff v0.4.2 (*) +│ │ │ └── ark-std v0.4.0 (*) +│ │ ├── ark-ec v0.4.2 (*) +│ │ ├── ark-ff v0.4.2 (*) +│ │ ├── ark-serialize v0.4.2 (*) +│ │ ├── base64 v0.21.7 +│ │ ├── bincode v1.3.3 (*) +│ │ ├── bitflags v2.9.0 +│ │ │ └── serde v1.0.219 (*) +│ │ ├── blake3 v1.8.0 +│ │ │ ├── arrayref v0.3.9 +│ │ │ ├── arrayvec v0.7.6 +│ │ │ ├── cfg-if v1.0.0 +│ │ │ ├── constant_time_eq v0.3.1 +│ │ │ └── digest v0.10.7 (*) +│ │ │ [build-dependencies] +│ │ │ └── cc v1.2.17 +│ │ │ ├── jobserver v0.1.33 +│ │ │ │ └── libc v0.2.171 +│ │ │ ├── libc v0.2.171 +│ │ │ └── shlex v1.3.0 +│ │ ├── borsh v0.9.3 +│ │ │ ├── borsh-derive v0.9.3 (proc-macro) +│ │ │ │ ├── borsh-derive-internal v0.9.3 +│ │ │ │ │ ├── proc-macro2 v1.0.94 (*) +│ │ │ │ │ ├── quote v1.0.40 (*) +│ │ │ │ │ └── syn v1.0.109 (*) +│ │ │ │ ├── borsh-schema-derive-internal v0.9.3 +│ │ │ │ │ ├── proc-macro2 v1.0.94 (*) +│ │ │ │ │ ├── quote v1.0.40 (*) +│ │ │ │ │ └── syn v1.0.109 (*) +│ │ │ │ ├── proc-macro-crate v0.1.5 (*) +│ │ │ │ ├── proc-macro2 v1.0.94 (*) +│ │ │ │ └── syn v1.0.109 (*) +│ │ │ └── hashbrown v0.11.2 +│ │ │ └── ahash v0.7.8 +│ │ │ ├── getrandom v0.2.15 (*) +│ │ │ └── once_cell v1.21.3 +│ │ │ [build-dependencies] +│ │ │ └── version_check v0.9.5 +│ │ ├── borsh v0.10.4 (*) +│ │ ├── borsh v1.5.7 +│ │ │ └── borsh-derive v1.5.7 (proc-macro) +│ │ │ ├── once_cell v1.21.3 +│ │ │ ├── proc-macro-crate v3.3.0 +│ │ │ │ └── toml_edit v0.22.24 +│ │ │ │ ├── indexmap v2.8.0 +│ │ │ │ │ ├── equivalent v1.0.2 +│ │ │ │ │ └── hashbrown v0.15.2 +│ │ │ │ │ └── allocator-api2 v0.2.21 +│ │ │ │ ├── toml_datetime v0.6.8 +│ │ │ │ └── winnow v0.7.4 +│ │ │ ├── proc-macro2 v1.0.94 (*) +│ │ │ ├── quote v1.0.40 (*) +│ │ │ └── syn v2.0.100 (*) +│ │ │ [build-dependencies] +│ │ │ └── cfg_aliases v0.2.1 +│ │ ├── bs58 v0.4.0 +│ │ ├── bv v0.11.1 +│ │ │ └── serde v1.0.219 (*) +│ │ │ [build-dependencies] +│ │ │ └── feature-probe v0.1.1 +│ │ ├── bytemuck v1.22.0 (*) +│ │ ├── curve25519-dalek v3.2.1 +│ │ │ ├── byteorder v1.5.0 +│ │ │ ├── digest v0.9.0 +│ │ │ │ └── generic-array v0.14.7 (*) +│ │ │ ├── rand_core v0.5.1 +│ │ │ │ └── getrandom v0.1.16 +│ │ │ │ ├── cfg-if v1.0.0 +│ │ │ │ └── libc v0.2.171 +│ │ │ ├── serde v1.0.219 (*) +│ │ │ ├── subtle v2.4.1 +│ │ │ └── zeroize v1.3.0 (*) +│ │ ├── itertools v0.10.5 (*) +│ │ ├── lazy_static v1.5.0 +│ │ ├── libc v0.2.171 +│ │ ├── libsecp256k1 v0.6.0 +│ │ │ ├── arrayref v0.3.9 +│ │ │ ├── base64 v0.12.3 +│ │ │ ├── digest v0.9.0 (*) +│ │ │ ├── hmac-drbg v0.3.0 +│ │ │ │ ├── digest v0.9.0 (*) +│ │ │ │ ├── generic-array v0.14.7 (*) +│ │ │ │ └── hmac v0.8.1 +│ │ │ │ ├── crypto-mac v0.8.0 +│ │ │ │ │ ├── generic-array v0.14.7 (*) +│ │ │ │ │ └── subtle v2.4.1 +│ │ │ │ └── digest v0.9.0 (*) +│ │ │ ├── libsecp256k1-core v0.2.2 +│ │ │ │ ├── crunchy v0.2.3 +│ │ │ │ ├── digest v0.9.0 (*) +│ │ │ │ └── subtle v2.4.1 +│ │ │ ├── rand v0.7.3 +│ │ │ │ ├── getrandom v0.1.16 (*) +│ │ │ │ ├── libc v0.2.171 +│ │ │ │ ├── rand_chacha v0.2.2 +│ │ │ │ │ ├── ppv-lite86 v0.2.21 (*) +│ │ │ │ │ └── rand_core v0.5.1 (*) +│ │ │ │ └── rand_core v0.5.1 (*) +│ │ │ ├── serde v1.0.219 (*) +│ │ │ ├── sha2 v0.9.9 +│ │ │ │ ├── block-buffer v0.9.0 +│ │ │ │ │ ├── block-padding v0.2.1 +│ │ │ │ │ └── generic-array v0.14.7 (*) +│ │ │ │ ├── cfg-if v1.0.0 +│ │ │ │ ├── cpufeatures v0.2.17 (*) +│ │ │ │ ├── digest v0.9.0 (*) +│ │ │ │ └── opaque-debug v0.3.1 +│ │ │ └── typenum v1.18.0 +│ │ │ [build-dependencies] +│ │ │ ├── libsecp256k1-gen-ecmult v0.2.1 +│ │ │ │ └── libsecp256k1-core v0.2.2 +│ │ │ │ ├── crunchy v0.2.3 +│ │ │ │ ├── digest v0.9.0 (*) +│ │ │ │ └── subtle v2.4.1 +│ │ │ └── libsecp256k1-gen-genmult v0.2.1 +│ │ │ └── libsecp256k1-core v0.2.2 (*) +│ │ ├── light-poseidon v0.2.0 +│ │ │ ├── ark-bn254 v0.4.0 (*) +│ │ │ ├── ark-ff v0.4.2 (*) +│ │ │ ├── num-bigint v0.4.6 (*) +│ │ │ └── thiserror v1.0.69 (*) +│ │ ├── log v0.4.27 +│ │ │ └── value-bag v1.11.1 +│ │ ├── memoffset v0.9.1 +│ │ │ [build-dependencies] +│ │ │ └── autocfg v1.4.0 +│ │ ├── num-bigint v0.4.6 (*) +│ │ ├── num-derive v0.4.2 (proc-macro) +│ │ │ ├── proc-macro2 v1.0.94 (*) +│ │ │ ├── quote v1.0.40 (*) +│ │ │ └── syn v2.0.100 (*) +│ │ ├── num-traits v0.2.19 (*) +│ │ ├── rand v0.8.5 (*) +│ │ ├── rustversion v1.0.20 (proc-macro) +│ │ ├── serde v1.0.219 (*) +│ │ ├── serde_bytes v0.11.17 +│ │ │ └── serde v1.0.219 (*) +│ │ ├── serde_derive v1.0.219 (proc-macro) (*) +│ │ ├── serde_json v1.0.140 +│ │ │ ├── itoa v1.0.15 +│ │ │ ├── memchr v2.7.4 +│ │ │ ├── ryu v1.0.20 +│ │ │ └── serde v1.0.219 (*) +│ │ ├── sha2 v0.10.8 (*) +│ │ ├── sha3 v0.10.8 +│ │ │ ├── digest v0.10.7 (*) +│ │ │ └── keccak v0.1.5 +│ │ │ └── cpufeatures v0.2.17 (*) +│ │ ├── solana-frozen-abi v1.18.22 +│ │ │ ├── block-buffer v0.10.4 (*) +│ │ │ ├── bs58 v0.4.0 +│ │ │ ├── bv v0.11.1 (*) +│ │ │ ├── either v1.15.0 (*) +│ │ │ ├── generic-array v0.14.7 (*) +│ │ │ ├── im v15.1.0 +│ │ │ │ ├── bitmaps v2.1.0 +│ │ │ │ │ └── typenum v1.18.0 +│ │ │ │ ├── rand_core v0.6.4 (*) +│ │ │ │ ├── rand_xoshiro v0.6.0 +│ │ │ │ │ └── rand_core v0.6.4 (*) +│ │ │ │ ├── rayon v1.10.0 +│ │ │ │ │ ├── either v1.15.0 (*) +│ │ │ │ │ └── rayon-core v1.12.1 +│ │ │ │ │ ├── crossbeam-deque v0.8.6 +│ │ │ │ │ │ ├── crossbeam-epoch v0.9.18 +│ │ │ │ │ │ │ └── crossbeam-utils v0.8.21 +│ │ │ │ │ │ └── crossbeam-utils v0.8.21 +│ │ │ │ │ └── crossbeam-utils v0.8.21 +│ │ │ │ ├── serde v1.0.219 (*) +│ │ │ │ ├── sized-chunks v0.6.5 +│ │ │ │ │ ├── bitmaps v2.1.0 (*) +│ │ │ │ │ └── typenum v1.18.0 +│ │ │ │ └── typenum v1.18.0 +│ │ │ │ [build-dependencies] +│ │ │ │ └── version_check v0.9.5 +│ │ │ ├── lazy_static v1.5.0 +│ │ │ ├── log v0.4.27 (*) +│ │ │ ├── memmap2 v0.5.10 +│ │ │ │ └── libc v0.2.171 +│ │ │ ├── serde v1.0.219 (*) +│ │ │ ├── serde_bytes v0.11.17 (*) +│ │ │ ├── serde_derive v1.0.219 (proc-macro) (*) +│ │ │ ├── sha2 v0.10.8 (*) +│ │ │ ├── solana-frozen-abi-macro v1.18.22 (proc-macro) +│ │ │ │ ├── proc-macro2 v1.0.94 (*) +│ │ │ │ ├── quote v1.0.40 (*) +│ │ │ │ └── syn v2.0.100 (*) +│ │ │ │ [build-dependencies] +│ │ │ │ └── rustc_version v0.4.1 (*) +│ │ │ ├── subtle v2.4.1 +│ │ │ └── thiserror v1.0.69 (*) +│ │ │ [build-dependencies] +│ │ │ └── rustc_version v0.4.1 (*) +│ │ ├── solana-frozen-abi-macro v1.18.22 (proc-macro) (*) +│ │ ├── solana-sdk-macro v1.18.22 (proc-macro) +│ │ │ ├── bs58 v0.4.0 +│ │ │ ├── proc-macro2 v1.0.94 (*) +│ │ │ ├── quote v1.0.40 (*) +│ │ │ ├── rustversion v1.0.20 (proc-macro) +│ │ │ └── syn v2.0.100 (*) +│ │ ├── thiserror v1.0.69 (*) +│ │ ├── tiny-bip39 v0.8.2 +│ │ │ ├── anyhow v1.0.97 +│ │ │ ├── hmac v0.8.1 (*) +│ │ │ ├── once_cell v1.21.3 +│ │ │ ├── pbkdf2 v0.4.0 +│ │ │ │ └── crypto-mac v0.8.0 (*) +│ │ │ ├── rand v0.7.3 (*) +│ │ │ ├── rustc-hash v1.1.0 +│ │ │ ├── sha2 v0.9.9 (*) +│ │ │ ├── thiserror v1.0.69 (*) +│ │ │ ├── unicode-normalization v0.1.24 +│ │ │ │ └── tinyvec v1.9.0 +│ │ │ │ └── tinyvec_macros v0.1.1 +│ │ │ └── zeroize v1.3.0 (*) +│ │ ├── wasm-bindgen v0.2.100 +│ │ │ ├── cfg-if v1.0.0 +│ │ │ ├── once_cell v1.21.3 +│ │ │ ├── rustversion v1.0.20 (proc-macro) +│ │ │ └── wasm-bindgen-macro v0.2.100 (proc-macro) +│ │ │ ├── quote v1.0.40 (*) +│ │ │ └── wasm-bindgen-macro-support v0.2.100 +│ │ │ ├── proc-macro2 v1.0.94 (*) +│ │ │ ├── quote v1.0.40 (*) +│ │ │ ├── syn v2.0.100 (*) +│ │ │ ├── wasm-bindgen-backend v0.2.100 +│ │ │ │ ├── bumpalo v3.17.0 +│ │ │ │ ├── log v0.4.27 +│ │ │ │ ├── proc-macro2 v1.0.94 (*) +│ │ │ │ ├── quote v1.0.40 (*) +│ │ │ │ ├── syn v2.0.100 (*) +│ │ │ │ └── wasm-bindgen-shared v0.2.100 +│ │ │ │ └── unicode-ident v1.0.18 +│ │ │ └── wasm-bindgen-shared v0.2.100 (*) +│ │ └── zeroize v1.3.0 (*) +│ │ [build-dependencies] +│ │ ├── cc v1.2.17 (*) +│ │ └── rustc_version v0.4.1 (*) +│ └── thiserror v1.0.69 (*) +├── anyhow v1.0.97 +├── ark-bn254 v0.4.0 (*) +├── async-std v1.13.1 +│ ├── async-attributes v1.1.2 (proc-macro) +│ │ ├── quote v1.0.40 (*) +│ │ └── syn v1.0.109 (*) +│ ├── async-channel v1.9.0 +│ │ ├── concurrent-queue v2.5.0 +│ │ │ └── crossbeam-utils v0.8.21 +│ │ ├── event-listener v2.5.3 +│ │ └── futures-core v0.3.31 +│ ├── async-global-executor v2.4.1 +│ │ ├── async-channel v2.3.1 +│ │ │ ├── concurrent-queue v2.5.0 (*) +│ │ │ ├── event-listener-strategy v0.5.4 +│ │ │ │ ├── event-listener v5.4.0 +│ │ │ │ │ ├── concurrent-queue v2.5.0 (*) +│ │ │ │ │ ├── parking v2.2.1 +│ │ │ │ │ └── pin-project-lite v0.2.16 +│ │ │ │ └── pin-project-lite v0.2.16 +│ │ │ ├── futures-core v0.3.31 +│ │ │ └── pin-project-lite v0.2.16 +│ │ ├── async-executor v1.13.1 +│ │ │ ├── async-task v4.7.1 +│ │ │ ├── concurrent-queue v2.5.0 (*) +│ │ │ ├── fastrand v2.3.0 +│ │ │ ├── futures-lite v2.6.0 +│ │ │ │ ├── fastrand v2.3.0 +│ │ │ │ ├── futures-core v0.3.31 +│ │ │ │ ├── futures-io v0.3.31 +│ │ │ │ ├── parking v2.2.1 +│ │ │ │ └── pin-project-lite v0.2.16 +│ │ │ └── slab v0.4.9 +│ │ │ [build-dependencies] +│ │ │ └── autocfg v1.4.0 +│ │ ├── async-io v2.4.0 +│ │ │ ├── async-lock v3.4.0 +│ │ │ │ ├── event-listener v5.4.0 (*) +│ │ │ │ ├── event-listener-strategy v0.5.4 (*) +│ │ │ │ └── pin-project-lite v0.2.16 +│ │ │ ├── cfg-if v1.0.0 +│ │ │ ├── concurrent-queue v2.5.0 (*) +│ │ │ ├── futures-io v0.3.31 +│ │ │ ├── futures-lite v2.6.0 (*) +│ │ │ ├── parking v2.2.1 +│ │ │ ├── polling v3.7.4 +│ │ │ │ ├── cfg-if v1.0.0 +│ │ │ │ ├── rustix v0.38.44 +│ │ │ │ │ ├── bitflags v2.9.0 (*) +│ │ │ │ │ ├── errno v0.3.10 +│ │ │ │ │ │ └── libc v0.2.171 +│ │ │ │ │ └── libc v0.2.171 +│ │ │ │ └── tracing v0.1.41 +│ │ │ │ ├── log v0.4.27 (*) +│ │ │ │ ├── pin-project-lite v0.2.16 +│ │ │ │ ├── tracing-attributes v0.1.28 (proc-macro) +│ │ │ │ │ ├── proc-macro2 v1.0.94 (*) +│ │ │ │ │ ├── quote v1.0.40 (*) +│ │ │ │ │ └── syn v2.0.100 (*) +│ │ │ │ └── tracing-core v0.1.33 +│ │ │ │ └── once_cell v1.21.3 +│ │ │ ├── rustix v0.38.44 (*) +│ │ │ ├── slab v0.4.9 (*) +│ │ │ └── tracing v0.1.41 (*) +│ │ ├── async-lock v3.4.0 (*) +│ │ ├── blocking v1.6.1 +│ │ │ ├── async-channel v2.3.1 (*) +│ │ │ ├── async-task v4.7.1 +│ │ │ ├── futures-io v0.3.31 +│ │ │ ├── futures-lite v2.6.0 (*) +│ │ │ └── piper v0.2.4 +│ │ │ ├── atomic-waker v1.1.2 +│ │ │ ├── fastrand v2.3.0 +│ │ │ └── futures-io v0.3.31 +│ │ ├── futures-lite v2.6.0 (*) +│ │ ├── once_cell v1.21.3 +│ │ └── tokio v1.44.1 +│ │ ├── bytes v1.10.1 +│ │ ├── libc v0.2.171 +│ │ ├── mio v1.0.3 +│ │ │ └── libc v0.2.171 +│ │ ├── parking_lot v0.12.3 +│ │ │ ├── lock_api v0.4.12 +│ │ │ │ └── scopeguard v1.2.0 +│ │ │ │ [build-dependencies] +│ │ │ │ └── autocfg v1.4.0 +│ │ │ └── parking_lot_core v0.9.10 +│ │ │ ├── cfg-if v1.0.0 +│ │ │ ├── libc v0.2.171 +│ │ │ └── smallvec v1.14.0 +│ │ ├── pin-project-lite v0.2.16 +│ │ ├── signal-hook-registry v1.4.2 +│ │ │ └── libc v0.2.171 +│ │ ├── socket2 v0.5.9 +│ │ │ └── libc v0.2.171 +│ │ └── tokio-macros v2.5.0 (proc-macro) +│ │ ├── proc-macro2 v1.0.94 (*) +│ │ ├── quote v1.0.40 (*) +│ │ └── syn v2.0.100 (*) +│ ├── async-io v2.4.0 (*) +│ ├── async-lock v3.4.0 (*) +│ ├── crossbeam-utils v0.8.21 +│ ├── futures-core v0.3.31 +│ ├── futures-io v0.3.31 +│ ├── futures-lite v2.6.0 (*) +│ ├── kv-log-macro v1.0.7 +│ │ └── log v0.4.27 (*) +│ ├── log v0.4.27 (*) +│ ├── memchr v2.7.4 +│ ├── once_cell v1.21.3 +│ ├── pin-project-lite v0.2.16 +│ ├── pin-utils v0.1.0 +│ └── slab v0.4.9 (*) +├── async-stream v0.3.6 +│ ├── async-stream-impl v0.3.6 (proc-macro) +│ │ ├── proc-macro2 v1.0.94 (*) +│ │ ├── quote v1.0.40 (*) +│ │ └── syn v2.0.100 (*) +│ ├── futures-core v0.3.31 +│ └── pin-project-lite v0.2.16 +├── async-trait v0.1.88 (proc-macro) +│ ├── proc-macro2 v1.0.94 (*) +│ ├── quote v1.0.40 (*) +│ └── syn v2.0.100 (*) +├── base64 v0.21.7 +├── bincode v1.3.3 (*) +├── borsh v0.10.4 (*) +├── bs58 v0.4.0 +├── byteorder v1.5.0 +├── bytes v1.10.1 +├── cadence v1.5.0 +│ └── crossbeam-channel v0.5.14 +│ └── crossbeam-utils v0.8.21 +├── cadence-macros v1.5.0 +│ └── cadence v1.5.0 (*) +├── clap v4.5.35 +│ ├── clap_builder v4.5.35 +│ │ ├── anstream v0.6.18 +│ │ │ ├── anstyle v1.0.10 +│ │ │ ├── anstyle-parse v0.2.6 +│ │ │ │ └── utf8parse v0.2.2 +│ │ │ ├── anstyle-query v1.1.2 +│ │ │ ├── colorchoice v1.0.3 +│ │ │ ├── is_terminal_polyfill v1.70.1 +│ │ │ └── utf8parse v0.2.2 +│ │ ├── anstyle v1.0.10 +│ │ ├── clap_lex v0.7.4 +│ │ └── strsim v0.11.1 +│ └── clap_derive v4.5.32 (proc-macro) +│ ├── heck v0.5.0 +│ ├── proc-macro2 v1.0.94 (*) +│ ├── quote v1.0.40 (*) +│ └── syn v2.0.100 (*) +├── dirs v5.0.1 +│ └── dirs-sys v0.4.1 +│ ├── libc v0.2.171 +│ └── option-ext v0.2.0 +├── futures v0.3.31 +│ ├── futures-channel v0.3.31 +│ │ ├── futures-core v0.3.31 +│ │ └── futures-sink v0.3.31 +│ ├── futures-core v0.3.31 +│ ├── futures-executor v0.3.31 +│ │ ├── futures-core v0.3.31 +│ │ ├── futures-task v0.3.31 +│ │ └── futures-util v0.3.31 +│ │ ├── futures-channel v0.3.31 (*) +│ │ ├── futures-core v0.3.31 +│ │ ├── futures-io v0.3.31 +│ │ ├── futures-macro v0.3.31 (proc-macro) +│ │ │ ├── proc-macro2 v1.0.94 (*) +│ │ │ ├── quote v1.0.40 (*) +│ │ │ └── syn v2.0.100 (*) +│ │ ├── futures-sink v0.3.31 +│ │ ├── futures-task v0.3.31 +│ │ ├── memchr v2.7.4 +│ │ ├── pin-project-lite v0.2.16 +│ │ ├── pin-utils v0.1.0 +│ │ └── slab v0.4.9 (*) +│ ├── futures-io v0.3.31 +│ ├── futures-sink v0.3.31 +│ ├── futures-task v0.3.31 +│ └── futures-util v0.3.31 (*) +├── hex v0.4.3 +├── hyper v0.14.32 +│ ├── bytes v1.10.1 +│ ├── futures-channel v0.3.31 (*) +│ ├── futures-core v0.3.31 +│ ├── futures-util v0.3.31 (*) +│ ├── h2 v0.3.26 +│ │ ├── bytes v1.10.1 +│ │ ├── fnv v1.0.7 +│ │ ├── futures-core v0.3.31 +│ │ ├── futures-sink v0.3.31 +│ │ ├── futures-util v0.3.31 (*) +│ │ ├── http v0.2.12 +│ │ │ ├── bytes v1.10.1 +│ │ │ ├── fnv v1.0.7 +│ │ │ └── itoa v1.0.15 +│ │ ├── indexmap v2.8.0 +│ │ │ ├── equivalent v1.0.2 +│ │ │ ├── hashbrown v0.15.2 (*) +│ │ │ └── serde v1.0.219 (*) +│ │ ├── slab v0.4.9 (*) +│ │ ├── tokio v1.44.1 (*) +│ │ ├── tokio-util v0.7.14 +│ │ │ ├── bytes v1.10.1 +│ │ │ ├── futures-core v0.3.31 +│ │ │ ├── futures-io v0.3.31 +│ │ │ ├── futures-sink v0.3.31 +│ │ │ ├── pin-project-lite v0.2.16 +│ │ │ └── tokio v1.44.1 (*) +│ │ └── tracing v0.1.41 (*) +│ ├── http v0.2.12 (*) +│ ├── http-body v0.4.6 +│ │ ├── bytes v1.10.1 +│ │ ├── http v0.2.12 (*) +│ │ └── pin-project-lite v0.2.16 +│ ├── httparse v1.10.1 +│ ├── httpdate v1.0.3 +│ ├── itoa v1.0.15 +│ ├── pin-project-lite v0.2.16 +│ ├── socket2 v0.5.9 (*) +│ ├── tokio v1.44.1 (*) +│ ├── tower-service v0.3.3 +│ ├── tracing v0.1.41 (*) +│ └── want v0.3.1 +│ └── try-lock v0.2.5 +├── insta v1.42.2 +│ ├── console v0.15.11 +│ │ ├── libc v0.2.171 +│ │ ├── once_cell v1.21.3 +│ │ └── unicode-width v0.2.0 +│ ├── linked-hash-map v0.5.6 +│ ├── once_cell v1.21.3 +│ ├── pin-project v1.1.10 +│ │ └── pin-project-internal v1.1.10 (proc-macro) +│ │ ├── proc-macro2 v1.0.94 (*) +│ │ ├── quote v1.0.40 (*) +│ │ └── syn v2.0.100 (*) +│ ├── serde v1.0.219 (*) +│ └── similar v2.7.0 +├── itertools v0.12.1 +│ └── either v1.15.0 (*) +├── jsonrpsee v0.16.3 +│ ├── jsonrpsee-core v0.16.3 +│ │ ├── anyhow v1.0.97 +│ │ ├── arrayvec v0.7.6 +│ │ ├── async-trait v0.1.88 (proc-macro) (*) +│ │ ├── beef v0.5.2 +│ │ │ └── serde v1.0.219 (*) +│ │ ├── futures-channel v0.3.31 (*) +│ │ ├── futures-util v0.3.31 (*) +│ │ ├── globset v0.4.16 +│ │ │ ├── aho-corasick v1.1.3 +│ │ │ │ └── memchr v2.7.4 +│ │ │ ├── bstr v1.11.3 +│ │ │ │ └── memchr v2.7.4 +│ │ │ ├── log v0.4.27 (*) +│ │ │ ├── regex-automata v0.4.9 +│ │ │ │ ├── aho-corasick v1.1.3 (*) +│ │ │ │ ├── memchr v2.7.4 +│ │ │ │ └── regex-syntax v0.8.5 +│ │ │ └── regex-syntax v0.8.5 +│ │ ├── hyper v0.14.32 (*) +│ │ ├── jsonrpsee-types v0.16.3 +│ │ │ ├── anyhow v1.0.97 +│ │ │ ├── beef v0.5.2 (*) +│ │ │ ├── serde v1.0.219 (*) +│ │ │ ├── serde_json v1.0.140 (*) +│ │ │ ├── thiserror v1.0.69 (*) +│ │ │ └── tracing v0.1.41 (*) +│ │ ├── parking_lot v0.12.3 (*) +│ │ ├── rand v0.8.5 (*) +│ │ ├── rustc-hash v1.1.0 +│ │ ├── serde v1.0.219 (*) +│ │ ├── serde_json v1.0.140 (*) +│ │ ├── soketto v0.7.1 +│ │ │ ├── base64 v0.13.1 +│ │ │ ├── bytes v1.10.1 +│ │ │ ├── futures v0.3.31 (*) +│ │ │ ├── http v0.2.12 (*) +│ │ │ ├── httparse v1.10.1 +│ │ │ ├── log v0.4.27 (*) +│ │ │ ├── rand v0.8.5 (*) +│ │ │ └── sha-1 v0.9.8 +│ │ │ ├── block-buffer v0.9.0 (*) +│ │ │ ├── cfg-if v1.0.0 +│ │ │ ├── cpufeatures v0.2.17 (*) +│ │ │ ├── digest v0.9.0 (*) +│ │ │ └── opaque-debug v0.3.1 +│ │ ├── thiserror v1.0.69 (*) +│ │ ├── tokio v1.44.1 (*) +│ │ └── tracing v0.1.41 (*) +│ ├── jsonrpsee-proc-macros v0.16.3 (proc-macro) +│ │ ├── heck v0.4.1 +│ │ │ └── unicode-segmentation v1.12.0 +│ │ ├── proc-macro-crate v1.3.1 +│ │ │ ├── once_cell v1.21.3 +│ │ │ └── toml_edit v0.19.15 +│ │ │ ├── indexmap v2.8.0 (*) +│ │ │ ├── toml_datetime v0.6.8 +│ │ │ └── winnow v0.5.40 +│ │ ├── proc-macro2 v1.0.94 (*) +│ │ ├── quote v1.0.40 (*) +│ │ └── syn v1.0.109 (*) +│ ├── jsonrpsee-server v0.16.3 +│ │ ├── futures-channel v0.3.31 (*) +│ │ ├── futures-util v0.3.31 (*) +│ │ ├── http v0.2.12 (*) +│ │ ├── hyper v0.14.32 (*) +│ │ ├── jsonrpsee-core v0.16.3 (*) +│ │ ├── jsonrpsee-types v0.16.3 (*) +│ │ ├── serde v1.0.219 (*) +│ │ ├── serde_json v1.0.140 (*) +│ │ ├── soketto v0.7.1 (*) +│ │ ├── tokio v1.44.1 (*) +│ │ ├── tokio-stream v0.1.17 +│ │ │ ├── futures-core v0.3.31 +│ │ │ ├── pin-project-lite v0.2.16 +│ │ │ └── tokio v1.44.1 (*) +│ │ ├── tokio-util v0.7.14 (*) +│ │ ├── tower v0.4.13 +│ │ │ ├── futures-core v0.3.31 +│ │ │ ├── futures-util v0.3.31 (*) +│ │ │ ├── hdrhistogram v7.5.4 +│ │ │ │ ├── byteorder v1.5.0 +│ │ │ │ └── num-traits v0.2.19 (*) +│ │ │ ├── indexmap v1.9.3 +│ │ │ │ └── hashbrown v0.12.3 +│ │ │ │ [build-dependencies] +│ │ │ │ └── autocfg v1.4.0 +│ │ │ ├── pin-project v1.1.10 (*) +│ │ │ ├── pin-project-lite v0.2.16 +│ │ │ ├── rand v0.8.5 (*) +│ │ │ ├── slab v0.4.9 (*) +│ │ │ ├── tokio v1.44.1 (*) +│ │ │ ├── tokio-util v0.7.14 (*) +│ │ │ ├── tower-layer v0.3.3 +│ │ │ ├── tower-service v0.3.3 +│ │ │ └── tracing v0.1.41 (*) +│ │ └── tracing v0.1.41 (*) +│ ├── jsonrpsee-types v0.16.3 (*) +│ └── tracing v0.1.41 (*) +├── jsonrpsee-core v0.16.3 (*) +├── lazy_static v1.5.0 +├── light-batched-merkle-tree v0.1.0 (https://github.com/Lightprotocol/light-protocol?rev=236481dd3316eadff722247a497f454fa17e0915#236481dd) +│ ├── aligned-sized v1.1.0 (proc-macro) (https://github.com/Lightprotocol/light-protocol?rev=236481dd3316eadff722247a497f454fa17e0915#236481dd) +│ │ ├── proc-macro2 v1.0.94 (*) +│ │ ├── quote v1.0.40 (*) +│ │ └── syn v2.0.100 (*) +│ ├── borsh v0.10.4 (*) +│ ├── light-account-checks v0.1.0 (https://github.com/Lightprotocol/light-protocol?rev=236481dd3316eadff722247a497f454fa17e0915#236481dd) +│ │ ├── solana-program v1.18.22 (*) +│ │ └── thiserror v2.0.12 +│ │ └── thiserror-impl v2.0.12 (proc-macro) +│ │ ├── proc-macro2 v1.0.94 (*) +│ │ ├── quote v1.0.40 (*) +│ │ └── syn v2.0.100 (*) +│ ├── light-bloom-filter v0.1.0 (https://github.com/Lightprotocol/light-protocol?rev=236481dd3316eadff722247a497f454fa17e0915#236481dd) +│ │ ├── bitvec v1.0.1 +│ │ │ ├── funty v2.0.0 +│ │ │ ├── radium v0.7.0 +│ │ │ ├── tap v1.0.1 +│ │ │ └── wyz v0.5.1 +│ │ │ └── tap v1.0.1 +│ │ ├── fastmurmur3 v0.2.0 +│ │ ├── num-bigint v0.4.6 (*) +│ │ ├── solana-program v1.18.22 (*) +│ │ └── thiserror v2.0.12 (*) +│ ├── light-compressed-account v0.1.1 (https://github.com/Lightprotocol/light-protocol?rev=236481dd3316eadff722247a497f454fa17e0915#236481dd) +│ │ ├── borsh v0.10.4 (*) +│ │ ├── bytemuck v1.22.0 (*) +│ │ ├── light-hasher v1.1.0 (https://github.com/Lightprotocol/light-protocol?rev=236481dd3316eadff722247a497f454fa17e0915#236481dd) +│ │ │ ├── ark-bn254 v0.5.0 +│ │ │ │ ├── ark-ec v0.5.0 +│ │ │ │ │ ├── ahash v0.8.11 (*) +│ │ │ │ │ ├── ark-ff v0.5.0 +│ │ │ │ │ │ ├── ark-ff-asm v0.5.0 (proc-macro) +│ │ │ │ │ │ │ ├── quote v1.0.40 (*) +│ │ │ │ │ │ │ └── syn v2.0.100 (*) +│ │ │ │ │ │ ├── ark-ff-macros v0.5.0 (proc-macro) +│ │ │ │ │ │ │ ├── num-bigint v0.4.6 (*) +│ │ │ │ │ │ │ ├── num-traits v0.2.19 (*) +│ │ │ │ │ │ │ ├── proc-macro2 v1.0.94 (*) +│ │ │ │ │ │ │ ├── quote v1.0.40 (*) +│ │ │ │ │ │ │ └── syn v2.0.100 (*) +│ │ │ │ │ │ ├── ark-serialize v0.5.0 +│ │ │ │ │ │ │ ├── ark-serialize-derive v0.5.0 (proc-macro) +│ │ │ │ │ │ │ │ ├── proc-macro2 v1.0.94 (*) +│ │ │ │ │ │ │ │ ├── quote v1.0.40 (*) +│ │ │ │ │ │ │ │ └── syn v2.0.100 (*) +│ │ │ │ │ │ │ ├── ark-std v0.5.0 +│ │ │ │ │ │ │ │ ├── num-traits v0.2.19 (*) +│ │ │ │ │ │ │ │ ├── rand v0.8.5 (*) +│ │ │ │ │ │ │ │ └── rayon v1.10.0 (*) +│ │ │ │ │ │ │ ├── arrayvec v0.7.6 +│ │ │ │ │ │ │ ├── digest v0.10.7 (*) +│ │ │ │ │ │ │ └── num-bigint v0.4.6 (*) +│ │ │ │ │ │ ├── ark-std v0.5.0 (*) +│ │ │ │ │ │ ├── arrayvec v0.7.6 +│ │ │ │ │ │ ├── digest v0.10.7 (*) +│ │ │ │ │ │ ├── educe v0.6.0 (proc-macro) +│ │ │ │ │ │ │ ├── enum-ordinalize v4.3.0 +│ │ │ │ │ │ │ │ └── enum-ordinalize-derive v4.3.1 (proc-macro) +│ │ │ │ │ │ │ │ ├── proc-macro2 v1.0.94 (*) +│ │ │ │ │ │ │ │ ├── quote v1.0.40 (*) +│ │ │ │ │ │ │ │ └── syn v2.0.100 (*) +│ │ │ │ │ │ │ ├── proc-macro2 v1.0.94 (*) +│ │ │ │ │ │ │ ├── quote v1.0.40 (*) +│ │ │ │ │ │ │ └── syn v2.0.100 (*) +│ │ │ │ │ │ ├── itertools v0.13.0 +│ │ │ │ │ │ │ └── either v1.15.0 (*) +│ │ │ │ │ │ ├── num-bigint v0.4.6 (*) +│ │ │ │ │ │ ├── num-traits v0.2.19 (*) +│ │ │ │ │ │ ├── paste v1.0.15 (proc-macro) +│ │ │ │ │ │ └── zeroize v1.3.0 (*) +│ │ │ │ │ ├── ark-poly v0.5.0 +│ │ │ │ │ │ ├── ahash v0.8.11 (*) +│ │ │ │ │ │ ├── ark-ff v0.5.0 (*) +│ │ │ │ │ │ ├── ark-serialize v0.5.0 (*) +│ │ │ │ │ │ ├── ark-std v0.5.0 (*) +│ │ │ │ │ │ ├── educe v0.6.0 (proc-macro) (*) +│ │ │ │ │ │ └── hashbrown v0.15.2 (*) +│ │ │ │ │ ├── ark-serialize v0.5.0 (*) +│ │ │ │ │ ├── ark-std v0.5.0 (*) +│ │ │ │ │ ├── educe v0.6.0 (proc-macro) (*) +│ │ │ │ │ ├── hashbrown v0.15.2 (*) +│ │ │ │ │ ├── itertools v0.13.0 (*) +│ │ │ │ │ ├── num-bigint v0.4.6 (*) +│ │ │ │ │ ├── num-integer v0.1.46 (*) +│ │ │ │ │ ├── num-traits v0.2.19 (*) +│ │ │ │ │ └── zeroize v1.3.0 (*) +│ │ │ │ ├── ark-ff v0.5.0 (*) +│ │ │ │ └── ark-std v0.5.0 (*) +│ │ │ ├── ark-ff v0.5.0 (*) +│ │ │ ├── arrayvec v0.7.6 +│ │ │ ├── light-poseidon v0.3.0 +│ │ │ │ ├── ark-bn254 v0.5.0 (*) +│ │ │ │ ├── ark-ff v0.5.0 (*) +│ │ │ │ ├── num-bigint v0.4.6 (*) +│ │ │ │ └── thiserror v1.0.69 (*) +│ │ │ ├── num-bigint v0.4.6 (*) +│ │ │ ├── sha2 v0.10.8 (*) +│ │ │ ├── sha3 v0.10.8 (*) +│ │ │ ├── solana-program v1.18.22 (*) +│ │ │ └── thiserror v2.0.12 (*) +│ │ ├── light-macros v1.1.0 (proc-macro) (https://github.com/Lightprotocol/light-protocol?rev=236481dd3316eadff722247a497f454fa17e0915#236481dd) +│ │ │ ├── bs58 v0.5.1 +│ │ │ ├── proc-macro2 v1.0.94 (*) +│ │ │ ├── quote v1.0.40 (*) +│ │ │ └── syn v2.0.100 (*) +│ │ ├── light-zero-copy v0.1.0 (https://github.com/Lightprotocol/light-protocol?rev=236481dd3316eadff722247a497f454fa17e0915#236481dd) +│ │ │ ├── solana-program v1.18.22 (*) +│ │ │ ├── thiserror v2.0.12 (*) +│ │ │ └── zerocopy v0.8.24 (*) +│ │ ├── rand v0.8.5 (*) +│ │ ├── solana-program v1.18.22 (*) +│ │ ├── thiserror v2.0.12 (*) +│ │ └── zerocopy v0.8.24 (*) +│ ├── light-hasher v1.1.0 (https://github.com/Lightprotocol/light-protocol?rev=236481dd3316eadff722247a497f454fa17e0915#236481dd) (*) +│ ├── light-macros v1.1.0 (proc-macro) (https://github.com/Lightprotocol/light-protocol?rev=236481dd3316eadff722247a497f454fa17e0915#236481dd) (*) +│ ├── light-merkle-tree-metadata v0.1.0 (https://github.com/Lightprotocol/light-protocol?rev=236481dd3316eadff722247a497f454fa17e0915#236481dd) +│ │ ├── borsh v0.10.4 (*) +│ │ ├── bytemuck v1.22.0 (*) +│ │ ├── light-compressed-account v0.1.1 (https://github.com/Lightprotocol/light-protocol?rev=236481dd3316eadff722247a497f454fa17e0915#236481dd) (*) +│ │ ├── solana-program v1.18.22 (*) +│ │ ├── thiserror v2.0.12 (*) +│ │ └── zerocopy v0.8.24 (*) +│ ├── light-verifier v1.1.0 (https://github.com/Lightprotocol/light-protocol?rev=236481dd3316eadff722247a497f454fa17e0915#236481dd) +│ │ ├── groth16-solana v0.0.3 +│ │ │ ├── ark-bn254 v0.4.0 (*) +│ │ │ ├── ark-ec v0.4.2 (*) +│ │ │ ├── ark-ff v0.4.2 (*) +│ │ │ ├── ark-serialize v0.4.2 (*) +│ │ │ ├── solana-program v1.18.22 (*) +│ │ │ └── thiserror v1.0.69 (*) +│ │ ├── light-compressed-account v0.1.1 (https://github.com/Lightprotocol/light-protocol?rev=236481dd3316eadff722247a497f454fa17e0915#236481dd) (*) +│ │ ├── solana-program v1.18.22 (*) +│ │ └── thiserror v2.0.12 (*) +│ ├── light-zero-copy v0.1.0 (https://github.com/Lightprotocol/light-protocol?rev=236481dd3316eadff722247a497f454fa17e0915#236481dd) (*) +│ ├── solana-program v1.18.22 (*) +│ ├── thiserror v2.0.12 (*) +│ └── zerocopy v0.8.24 (*) +├── light-compressed-account v0.1.1 (https://github.com/Lightprotocol/light-protocol?rev=236481dd3316eadff722247a497f454fa17e0915#236481dd) (*) +├── light-concurrent-merkle-tree v1.1.0 (https://github.com/Lightprotocol/light-protocol?rev=236481dd3316eadff722247a497f454fa17e0915#236481dd) +│ ├── borsh v0.10.4 (*) +│ ├── light-bounded-vec v1.1.0 +│ │ ├── bytemuck v1.22.0 (*) +│ │ ├── memoffset v0.9.1 (*) +│ │ ├── solana-program v1.18.22 (*) +│ │ └── thiserror v1.0.69 (*) +│ ├── light-hasher v1.1.0 (https://github.com/Lightprotocol/light-protocol?rev=236481dd3316eadff722247a497f454fa17e0915#236481dd) (*) +│ ├── light-utils v1.1.0 +│ │ ├── anyhow v1.0.97 +│ │ ├── ark-bn254 v0.4.0 (*) +│ │ ├── ark-ff v0.4.2 (*) +│ │ ├── light-bounded-vec v1.1.0 (*) +│ │ ├── num-bigint v0.4.6 (*) +│ │ ├── rand v0.8.5 (*) +│ │ ├── solana-program v1.18.22 (*) +│ │ └── thiserror v1.0.69 (*) +│ ├── memoffset v0.9.1 (*) +│ ├── solana-program v1.18.22 (*) +│ └── thiserror v2.0.12 (*) +├── light-hasher v1.1.0 (https://github.com/Lightprotocol/light-protocol?rev=236481dd3316eadff722247a497f454fa17e0915#236481dd) (*) +├── light-indexed-merkle-tree v1.1.0 (https://github.com/Lightprotocol/light-protocol?rev=236481dd3316eadff722247a497f454fa17e0915#236481dd) +│ ├── light-bounded-vec v1.1.0 (*) +│ ├── light-concurrent-merkle-tree v1.1.0 (https://github.com/Lightprotocol/light-protocol?rev=236481dd3316eadff722247a497f454fa17e0915#236481dd) (*) +│ ├── light-hasher v1.1.0 (https://github.com/Lightprotocol/light-protocol?rev=236481dd3316eadff722247a497f454fa17e0915#236481dd) (*) +│ ├── light-merkle-tree-reference v1.1.0 (https://github.com/Lightprotocol/light-protocol?rev=236481dd3316eadff722247a497f454fa17e0915#236481dd) +│ │ ├── light-hasher v1.1.0 (https://github.com/Lightprotocol/light-protocol?rev=236481dd3316eadff722247a497f454fa17e0915#236481dd) (*) +│ │ ├── light-indexed-array v0.1.0 (https://github.com/Lightprotocol/light-protocol?rev=236481dd3316eadff722247a497f454fa17e0915#236481dd) +│ │ │ ├── light-hasher v1.1.0 (https://github.com/Lightprotocol/light-protocol?rev=236481dd3316eadff722247a497f454fa17e0915#236481dd) (*) +│ │ │ ├── num-bigint v0.4.6 (*) +│ │ │ ├── num-traits v0.2.19 (*) +│ │ │ └── thiserror v2.0.12 (*) +│ │ ├── num-bigint v0.4.6 (*) +│ │ ├── num-traits v0.2.19 (*) +│ │ └── thiserror v2.0.12 (*) +│ ├── light-utils v1.1.0 (*) +│ ├── num-bigint v0.4.6 (*) +│ ├── num-traits v0.2.19 (*) +│ ├── solana-program v1.18.22 (*) +│ └── thiserror v2.0.12 (*) +├── light-merkle-tree-metadata v0.1.0 (https://github.com/Lightprotocol/light-protocol?rev=236481dd3316eadff722247a497f454fa17e0915#236481dd) (*) +├── light-merkle-tree-reference v1.1.0 (https://github.com/Lightprotocol/light-protocol?rev=236481dd3316eadff722247a497f454fa17e0915#236481dd) (*) +├── light-poseidon v0.2.0 (*) +├── light-prover-client v1.2.0 (https://github.com/Lightprotocol/light-protocol?rev=236481dd3316eadff722247a497f454fa17e0915#236481dd) +│ ├── ark-bn254 v0.5.0 (*) +│ ├── ark-serialize v0.5.0 (*) +│ ├── ark-std v0.5.0 (*) +│ ├── env_logger v0.11.8 +│ │ ├── anstream v0.6.18 (*) +│ │ ├── anstyle v1.0.10 +│ │ ├── env_filter v0.1.3 +│ │ │ ├── log v0.4.27 (*) +│ │ │ └── regex v1.11.1 +│ │ │ ├── aho-corasick v1.1.3 (*) +│ │ │ ├── memchr v2.7.4 +│ │ │ ├── regex-automata v0.4.9 (*) +│ │ │ └── regex-syntax v0.8.5 +│ │ ├── jiff v0.2.6 +│ │ └── log v0.4.27 (*) +│ ├── groth16-solana v0.0.3 (*) +│ ├── light-batched-merkle-tree v0.1.0 (https://github.com/Lightprotocol/light-protocol?rev=236481dd3316eadff722247a497f454fa17e0915#236481dd) (*) +│ ├── light-bounded-vec v1.1.0 (*) +│ ├── light-compressed-account v0.1.1 (https://github.com/Lightprotocol/light-protocol?rev=236481dd3316eadff722247a497f454fa17e0915#236481dd) (*) +│ ├── light-concurrent-merkle-tree v1.1.0 (https://github.com/Lightprotocol/light-protocol?rev=236481dd3316eadff722247a497f454fa17e0915#236481dd) (*) +│ ├── light-hasher v1.1.0 (https://github.com/Lightprotocol/light-protocol?rev=236481dd3316eadff722247a497f454fa17e0915#236481dd) (*) +│ ├── light-indexed-array v0.1.0 (https://github.com/Lightprotocol/light-protocol?rev=236481dd3316eadff722247a497f454fa17e0915#236481dd) (*) +│ ├── light-indexed-merkle-tree v1.1.0 (https://github.com/Lightprotocol/light-protocol?rev=236481dd3316eadff722247a497f454fa17e0915#236481dd) (*) +│ ├── light-merkle-tree-reference v1.1.0 (https://github.com/Lightprotocol/light-protocol?rev=236481dd3316eadff722247a497f454fa17e0915#236481dd) (*) +│ ├── num-bigint v0.4.6 (*) +│ ├── num-traits v0.2.19 (*) +│ ├── once_cell v1.21.3 +│ ├── reqwest v0.11.27 +│ │ ├── async-compression v0.4.22 +│ │ │ ├── brotli v7.0.0 +│ │ │ │ ├── alloc-no-stdlib v2.0.4 +│ │ │ │ ├── alloc-stdlib v0.2.2 +│ │ │ │ │ └── alloc-no-stdlib v2.0.4 +│ │ │ │ └── brotli-decompressor v4.0.2 +│ │ │ │ ├── alloc-no-stdlib v2.0.4 +│ │ │ │ └── alloc-stdlib v0.2.2 (*) +│ │ │ ├── flate2 v1.1.1 +│ │ │ │ ├── crc32fast v1.4.2 +│ │ │ │ │ └── cfg-if v1.0.0 +│ │ │ │ └── miniz_oxide v0.8.5 +│ │ │ │ └── adler2 v2.0.0 +│ │ │ ├── futures-core v0.3.31 +│ │ │ ├── memchr v2.7.4 +│ │ │ ├── pin-project-lite v0.2.16 +│ │ │ └── tokio v1.44.1 (*) +│ │ ├── base64 v0.21.7 +│ │ ├── bytes v1.10.1 +│ │ ├── encoding_rs v0.8.35 +│ │ │ └── cfg-if v1.0.0 +│ │ ├── futures-core v0.3.31 +│ │ ├── futures-util v0.3.31 (*) +│ │ ├── h2 v0.3.26 (*) +│ │ ├── http v0.2.12 (*) +│ │ ├── http-body v0.4.6 (*) +│ │ ├── hyper v0.14.32 (*) +│ │ ├── hyper-rustls v0.24.2 +│ │ │ ├── futures-util v0.3.31 (*) +│ │ │ ├── http v0.2.12 (*) +│ │ │ ├── hyper v0.14.32 (*) +│ │ │ ├── rustls v0.21.12 +│ │ │ │ ├── log v0.4.27 (*) +│ │ │ │ ├── ring v0.17.14 +│ │ │ │ │ ├── cfg-if v1.0.0 +│ │ │ │ │ ├── getrandom v0.2.15 (*) +│ │ │ │ │ ├── libc v0.2.171 +│ │ │ │ │ └── untrusted v0.9.0 +│ │ │ │ │ [build-dependencies] +│ │ │ │ │ └── cc v1.2.17 (*) +│ │ │ │ ├── rustls-webpki v0.101.7 +│ │ │ │ │ ├── ring v0.17.14 (*) +│ │ │ │ │ └── untrusted v0.9.0 +│ │ │ │ └── sct v0.7.1 +│ │ │ │ ├── ring v0.17.14 (*) +│ │ │ │ └── untrusted v0.9.0 +│ │ │ ├── tokio v1.44.1 (*) +│ │ │ └── tokio-rustls v0.24.1 +│ │ │ ├── rustls v0.21.12 (*) +│ │ │ └── tokio v1.44.1 (*) +│ │ ├── hyper-tls v0.5.0 +│ │ │ ├── bytes v1.10.1 +│ │ │ ├── hyper v0.14.32 (*) +│ │ │ ├── native-tls v0.2.14 +│ │ │ │ ├── libc v0.2.171 +│ │ │ │ ├── security-framework v2.11.1 +│ │ │ │ │ ├── bitflags v2.9.0 (*) +│ │ │ │ │ ├── core-foundation v0.9.4 +│ │ │ │ │ │ ├── core-foundation-sys v0.8.7 +│ │ │ │ │ │ └── libc v0.2.171 +│ │ │ │ │ ├── core-foundation-sys v0.8.7 +│ │ │ │ │ ├── libc v0.2.171 +│ │ │ │ │ └── security-framework-sys v2.14.0 +│ │ │ │ │ ├── core-foundation-sys v0.8.7 +│ │ │ │ │ └── libc v0.2.171 +│ │ │ │ ├── security-framework-sys v2.14.0 (*) +│ │ │ │ └── tempfile v3.19.1 +│ │ │ │ ├── fastrand v2.3.0 +│ │ │ │ ├── getrandom v0.3.2 +│ │ │ │ │ ├── cfg-if v1.0.0 +│ │ │ │ │ └── libc v0.2.171 +│ │ │ │ ├── once_cell v1.21.3 +│ │ │ │ └── rustix v1.0.5 +│ │ │ │ ├── bitflags v2.9.0 (*) +│ │ │ │ ├── errno v0.3.10 (*) +│ │ │ │ └── libc v0.2.171 +│ │ │ ├── tokio v1.44.1 (*) +│ │ │ └── tokio-native-tls v0.3.1 +│ │ │ ├── native-tls v0.2.14 (*) +│ │ │ └── tokio v1.44.1 (*) +│ │ ├── ipnet v2.11.0 +│ │ ├── log v0.4.27 (*) +│ │ ├── mime v0.3.17 +│ │ ├── native-tls v0.2.14 (*) +│ │ ├── once_cell v1.21.3 +│ │ ├── percent-encoding v2.3.1 +│ │ ├── pin-project-lite v0.2.16 +│ │ ├── rustls v0.21.12 (*) +│ │ ├── rustls-pemfile v1.0.4 +│ │ │ └── base64 v0.21.7 +│ │ ├── serde v1.0.219 (*) +│ │ ├── serde_json v1.0.140 (*) +│ │ ├── serde_urlencoded v0.7.1 +│ │ │ ├── form_urlencoded v1.2.1 +│ │ │ │ └── percent-encoding v2.3.1 +│ │ │ ├── itoa v1.0.15 +│ │ │ ├── ryu v1.0.20 +│ │ │ └── serde v1.0.219 (*) +│ │ ├── sync_wrapper v0.1.2 +│ │ ├── system-configuration v0.5.1 +│ │ │ ├── bitflags v1.3.2 +│ │ │ ├── core-foundation v0.9.4 (*) +│ │ │ └── system-configuration-sys v0.5.0 +│ │ │ ├── core-foundation-sys v0.8.7 +│ │ │ └── libc v0.2.171 +│ │ ├── tokio v1.44.1 (*) +│ │ ├── tokio-native-tls v0.3.1 (*) +│ │ ├── tokio-rustls v0.24.1 (*) +│ │ ├── tokio-util v0.7.14 (*) +│ │ ├── tower-service v0.3.3 +│ │ ├── url v2.5.4 +│ │ │ ├── form_urlencoded v1.2.1 (*) +│ │ │ ├── idna v1.0.3 +│ │ │ │ ├── idna_adapter v1.2.0 +│ │ │ │ │ ├── icu_normalizer v1.5.0 +│ │ │ │ │ │ ├── displaydoc v0.2.5 (proc-macro) +│ │ │ │ │ │ │ ├── proc-macro2 v1.0.94 (*) +│ │ │ │ │ │ │ ├── quote v1.0.40 (*) +│ │ │ │ │ │ │ └── syn v2.0.100 (*) +│ │ │ │ │ │ ├── icu_collections v1.5.0 +│ │ │ │ │ │ │ ├── displaydoc v0.2.5 (proc-macro) (*) +│ │ │ │ │ │ │ ├── yoke v0.7.5 +│ │ │ │ │ │ │ │ ├── stable_deref_trait v1.2.0 +│ │ │ │ │ │ │ │ ├── yoke-derive v0.7.5 (proc-macro) +│ │ │ │ │ │ │ │ │ ├── proc-macro2 v1.0.94 (*) +│ │ │ │ │ │ │ │ │ ├── quote v1.0.40 (*) +│ │ │ │ │ │ │ │ │ ├── syn v2.0.100 (*) +│ │ │ │ │ │ │ │ │ └── synstructure v0.13.1 +│ │ │ │ │ │ │ │ │ ├── proc-macro2 v1.0.94 (*) +│ │ │ │ │ │ │ │ │ ├── quote v1.0.40 (*) +│ │ │ │ │ │ │ │ │ └── syn v2.0.100 (*) +│ │ │ │ │ │ │ │ └── zerofrom v0.1.6 +│ │ │ │ │ │ │ │ └── zerofrom-derive v0.1.6 (proc-macro) +│ │ │ │ │ │ │ │ ├── proc-macro2 v1.0.94 (*) +│ │ │ │ │ │ │ │ ├── quote v1.0.40 (*) +│ │ │ │ │ │ │ │ ├── syn v2.0.100 (*) +│ │ │ │ │ │ │ │ └── synstructure v0.13.1 (*) +│ │ │ │ │ │ │ ├── zerofrom v0.1.6 (*) +│ │ │ │ │ │ │ └── zerovec v0.10.4 +│ │ │ │ │ │ │ ├── yoke v0.7.5 (*) +│ │ │ │ │ │ │ ├── zerofrom v0.1.6 (*) +│ │ │ │ │ │ │ └── zerovec-derive v0.10.3 (proc-macro) +│ │ │ │ │ │ │ ├── proc-macro2 v1.0.94 (*) +│ │ │ │ │ │ │ ├── quote v1.0.40 (*) +│ │ │ │ │ │ │ └── syn v2.0.100 (*) +│ │ │ │ │ │ ├── icu_normalizer_data v1.5.1 +│ │ │ │ │ │ ├── icu_properties v1.5.1 +│ │ │ │ │ │ │ ├── displaydoc v0.2.5 (proc-macro) (*) +│ │ │ │ │ │ │ ├── icu_collections v1.5.0 (*) +│ │ │ │ │ │ │ ├── icu_locid_transform v1.5.0 +│ │ │ │ │ │ │ │ ├── displaydoc v0.2.5 (proc-macro) (*) +│ │ │ │ │ │ │ │ ├── icu_locid v1.5.0 +│ │ │ │ │ │ │ │ │ ├── displaydoc v0.2.5 (proc-macro) (*) +│ │ │ │ │ │ │ │ │ ├── litemap v0.7.5 +│ │ │ │ │ │ │ │ │ ├── tinystr v0.7.6 +│ │ │ │ │ │ │ │ │ │ ├── displaydoc v0.2.5 (proc-macro) (*) +│ │ │ │ │ │ │ │ │ │ └── zerovec v0.10.4 (*) +│ │ │ │ │ │ │ │ │ ├── writeable v0.5.5 +│ │ │ │ │ │ │ │ │ └── zerovec v0.10.4 (*) +│ │ │ │ │ │ │ │ ├── icu_locid_transform_data v1.5.1 +│ │ │ │ │ │ │ │ ├── icu_provider v1.5.0 +│ │ │ │ │ │ │ │ │ ├── displaydoc v0.2.5 (proc-macro) (*) +│ │ │ │ │ │ │ │ │ ├── icu_locid v1.5.0 (*) +│ │ │ │ │ │ │ │ │ ├── icu_provider_macros v1.5.0 (proc-macro) +│ │ │ │ │ │ │ │ │ │ ├── proc-macro2 v1.0.94 (*) +│ │ │ │ │ │ │ │ │ │ ├── quote v1.0.40 (*) +│ │ │ │ │ │ │ │ │ │ └── syn v2.0.100 (*) +│ │ │ │ │ │ │ │ │ ├── stable_deref_trait v1.2.0 +│ │ │ │ │ │ │ │ │ ├── tinystr v0.7.6 (*) +│ │ │ │ │ │ │ │ │ ├── writeable v0.5.5 +│ │ │ │ │ │ │ │ │ ├── yoke v0.7.5 (*) +│ │ │ │ │ │ │ │ │ ├── zerofrom v0.1.6 (*) +│ │ │ │ │ │ │ │ │ └── zerovec v0.10.4 (*) +│ │ │ │ │ │ │ │ ├── tinystr v0.7.6 (*) +│ │ │ │ │ │ │ │ └── zerovec v0.10.4 (*) +│ │ │ │ │ │ │ ├── icu_properties_data v1.5.1 +│ │ │ │ │ │ │ ├── icu_provider v1.5.0 (*) +│ │ │ │ │ │ │ ├── tinystr v0.7.6 (*) +│ │ │ │ │ │ │ └── zerovec v0.10.4 (*) +│ │ │ │ │ │ ├── icu_provider v1.5.0 (*) +│ │ │ │ │ │ ├── smallvec v1.14.0 +│ │ │ │ │ │ ├── utf16_iter v1.0.5 +│ │ │ │ │ │ ├── utf8_iter v1.0.4 +│ │ │ │ │ │ ├── write16 v1.0.0 +│ │ │ │ │ │ └── zerovec v0.10.4 (*) +│ │ │ │ │ └── icu_properties v1.5.1 (*) +│ │ │ │ ├── smallvec v1.14.0 +│ │ │ │ └── utf8_iter v1.0.4 +│ │ │ └── percent-encoding v2.3.1 +│ │ └── webpki-roots v0.25.4 +│ ├── serde v1.0.219 (*) +│ ├── serde_json v1.0.140 (*) +│ ├── solana-program v1.18.22 (*) +│ ├── sysinfo v0.33.1 +│ │ ├── core-foundation-sys v0.8.7 +│ │ ├── libc v0.2.171 +│ │ ├── memchr v2.7.4 +│ │ └── rayon v1.10.0 (*) +│ ├── thiserror v2.0.12 (*) +│ ├── tokio v1.44.1 (*) +│ └── tracing v0.1.41 (*) +├── light-sdk v0.11.0 (https://github.com/Lightprotocol/light-protocol?rev=236481dd3316eadff722247a497f454fa17e0915#236481dd) +│ ├── borsh v0.10.4 (*) +│ ├── light-compressed-account v0.1.1 (https://github.com/Lightprotocol/light-protocol?rev=236481dd3316eadff722247a497f454fa17e0915#236481dd) (*) +│ ├── light-hasher v1.1.0 (https://github.com/Lightprotocol/light-protocol?rev=236481dd3316eadff722247a497f454fa17e0915#236481dd) (*) +│ ├── light-macros v1.1.0 (proc-macro) (https://github.com/Lightprotocol/light-protocol?rev=236481dd3316eadff722247a497f454fa17e0915#236481dd) (*) +│ ├── light-sdk-macros v0.4.0 (proc-macro) (https://github.com/Lightprotocol/light-protocol?rev=236481dd3316eadff722247a497f454fa17e0915#236481dd) +│ │ ├── ark-bn254 v0.5.0 (*) +│ │ ├── light-hasher v1.1.0 (https://github.com/Lightprotocol/light-protocol?rev=236481dd3316eadff722247a497f454fa17e0915#236481dd) (*) +│ │ ├── light-poseidon v0.3.0 (*) +│ │ ├── proc-macro2 v1.0.94 (*) +│ │ ├── quote v1.0.40 (*) +│ │ └── syn v2.0.100 (*) +│ ├── light-verifier v1.1.0 (https://github.com/Lightprotocol/light-protocol?rev=236481dd3316eadff722247a497f454fa17e0915#236481dd) (*) +│ ├── num-bigint v0.4.6 (*) +│ ├── solana-program v1.18.22 (*) +│ └── thiserror v2.0.12 (*) +├── log v0.4.27 (*) +├── num-bigint v0.4.6 (*) +├── num-traits v0.2.19 (*) +├── num_enum v0.7.3 +│ └── num_enum_derive v0.7.3 (proc-macro) +│ ├── proc-macro-crate v3.3.0 (*) +│ ├── proc-macro2 v1.0.94 (*) +│ ├── quote v1.0.40 (*) +│ └── syn v2.0.100 (*) +├── once_cell v1.21.3 +├── rand v0.8.5 (*) +├── reqwest v0.12.4 +│ ├── base64 v0.22.1 +│ ├── bytes v1.10.1 +│ ├── encoding_rs v0.8.35 (*) +│ ├── futures-core v0.3.31 +│ ├── futures-util v0.3.31 (*) +│ ├── h2 v0.4.8 +│ │ ├── atomic-waker v1.1.2 +│ │ ├── bytes v1.10.1 +│ │ ├── fnv v1.0.7 +│ │ ├── futures-core v0.3.31 +│ │ ├── futures-sink v0.3.31 +│ │ ├── http v1.3.1 +│ │ │ ├── bytes v1.10.1 +│ │ │ ├── fnv v1.0.7 +│ │ │ └── itoa v1.0.15 +│ │ ├── indexmap v2.8.0 (*) +│ │ ├── slab v0.4.9 (*) +│ │ ├── tokio v1.44.1 (*) +│ │ ├── tokio-util v0.7.14 (*) +│ │ └── tracing v0.1.41 (*) +│ ├── http v1.3.1 (*) +│ ├── http-body v1.0.1 +│ │ ├── bytes v1.10.1 +│ │ └── http v1.3.1 (*) +│ ├── http-body-util v0.1.3 +│ │ ├── bytes v1.10.1 +│ │ ├── futures-core v0.3.31 +│ │ ├── http v1.3.1 (*) +│ │ ├── http-body v1.0.1 (*) +│ │ └── pin-project-lite v0.2.16 +│ ├── hyper v1.6.0 +│ │ ├── bytes v1.10.1 +│ │ ├── futures-channel v0.3.31 (*) +│ │ ├── futures-util v0.3.31 (*) +│ │ ├── h2 v0.4.8 (*) +│ │ ├── http v1.3.1 (*) +│ │ ├── http-body v1.0.1 (*) +│ │ ├── httparse v1.10.1 +│ │ ├── itoa v1.0.15 +│ │ ├── pin-project-lite v0.2.16 +│ │ ├── smallvec v1.14.0 +│ │ ├── tokio v1.44.1 (*) +│ │ └── want v0.3.1 (*) +│ ├── hyper-tls v0.6.0 +│ │ ├── bytes v1.10.1 +│ │ ├── http-body-util v0.1.3 (*) +│ │ ├── hyper v1.6.0 (*) +│ │ ├── hyper-util v0.1.11 +│ │ │ ├── bytes v1.10.1 +│ │ │ ├── futures-channel v0.3.31 (*) +│ │ │ ├── futures-util v0.3.31 (*) +│ │ │ ├── http v1.3.1 (*) +│ │ │ ├── http-body v1.0.1 (*) +│ │ │ ├── hyper v1.6.0 (*) +│ │ │ ├── libc v0.2.171 +│ │ │ ├── pin-project-lite v0.2.16 +│ │ │ ├── socket2 v0.5.9 (*) +│ │ │ ├── tokio v1.44.1 (*) +│ │ │ ├── tower-service v0.3.3 +│ │ │ └── tracing v0.1.41 (*) +│ │ ├── native-tls v0.2.14 (*) +│ │ ├── tokio v1.44.1 (*) +│ │ ├── tokio-native-tls v0.3.1 (*) +│ │ └── tower-service v0.3.3 +│ ├── hyper-util v0.1.11 (*) +│ ├── ipnet v2.11.0 +│ ├── log v0.4.27 (*) +│ ├── mime v0.3.17 +│ ├── native-tls v0.2.14 (*) +│ ├── once_cell v1.21.3 +│ ├── percent-encoding v2.3.1 +│ ├── pin-project-lite v0.2.16 +│ ├── rustls-pemfile v2.2.0 +│ │ └── rustls-pki-types v1.11.0 +│ ├── serde v1.0.219 (*) +│ ├── serde_urlencoded v0.7.1 (*) +│ ├── sync_wrapper v0.1.2 +│ ├── system-configuration v0.5.1 (*) +│ ├── tokio v1.44.1 (*) +│ ├── tokio-native-tls v0.3.1 (*) +│ ├── tokio-util v0.7.14 (*) +│ ├── tower-service v0.3.3 +│ └── url v2.5.4 (*) +├── rstest v0.18.2 +│ ├── futures v0.3.31 (*) +│ ├── futures-timer v3.0.3 +│ └── rstest_macros v0.18.2 (proc-macro) +│ ├── cfg-if v1.0.0 +│ ├── glob v0.3.2 +│ ├── proc-macro2 v1.0.94 (*) +│ ├── quote v1.0.40 (*) +│ ├── regex v1.11.1 (*) +│ ├── relative-path v1.9.3 +│ ├── syn v2.0.100 (*) +│ └── unicode-ident v1.0.18 +│ [build-dependencies] +│ └── rustc_version v0.4.1 (*) +│ [build-dependencies] +│ └── rustc_version v0.4.1 (*) +├── rust-s3 v0.34.0 +│ ├── async-trait v0.1.88 (proc-macro) (*) +│ ├── aws-creds v0.36.0 +│ │ ├── attohttpc v0.26.1 +│ │ │ ├── http v0.2.12 (*) +│ │ │ ├── log v0.4.27 (*) +│ │ │ ├── native-tls v0.2.14 (*) +│ │ │ ├── serde v1.0.219 (*) +│ │ │ ├── serde_json v1.0.140 (*) +│ │ │ └── url v2.5.4 (*) +│ │ ├── home v0.5.11 +│ │ ├── log v0.4.27 (*) +│ │ ├── quick-xml v0.30.0 +│ │ │ ├── memchr v2.7.4 +│ │ │ └── serde v1.0.219 (*) +│ │ ├── rust-ini v0.19.0 +│ │ │ ├── cfg-if v1.0.0 +│ │ │ └── ordered-multimap v0.6.0 +│ │ │ ├── dlv-list v0.5.2 +│ │ │ │ └── const-random v0.1.18 +│ │ │ │ └── const-random-macro v0.1.16 (proc-macro) +│ │ │ │ ├── getrandom v0.2.15 +│ │ │ │ │ ├── cfg-if v1.0.0 +│ │ │ │ │ └── libc v0.2.171 +│ │ │ │ ├── once_cell v1.21.3 +│ │ │ │ └── tiny-keccak v2.0.2 +│ │ │ │ └── crunchy v0.2.3 +│ │ │ └── hashbrown v0.13.2 (*) +│ │ ├── serde v1.0.219 (*) +│ │ ├── thiserror v1.0.69 (*) +│ │ ├── time v0.3.41 +│ │ │ ├── deranged v0.4.1 +│ │ │ │ ├── powerfmt v0.2.0 +│ │ │ │ └── serde v1.0.219 (*) +│ │ │ ├── itoa v1.0.15 +│ │ │ ├── num-conv v0.1.0 +│ │ │ ├── powerfmt v0.2.0 +│ │ │ ├── serde v1.0.219 (*) +│ │ │ ├── time-core v0.1.4 +│ │ │ └── time-macros v0.2.22 (proc-macro) +│ │ │ ├── num-conv v0.1.0 +│ │ │ └── time-core v0.1.4 +│ │ └── url v2.5.4 (*) +│ ├── aws-region v0.25.5 +│ │ └── thiserror v1.0.69 (*) +│ ├── base64 v0.21.7 +│ ├── bytes v1.10.1 +│ ├── cfg-if v1.0.0 +│ ├── futures v0.3.31 (*) +│ ├── hex v0.4.3 +│ ├── hmac v0.12.1 +│ │ └── digest v0.10.7 (*) +│ ├── http v0.2.12 (*) +│ ├── hyper v0.14.32 (*) +│ ├── hyper-tls v0.5.0 (*) +│ ├── log v0.4.27 (*) +│ ├── maybe-async v0.2.10 (proc-macro) +│ │ ├── proc-macro2 v1.0.94 (*) +│ │ ├── quote v1.0.40 (*) +│ │ └── syn v2.0.100 (*) +│ ├── md5 v0.7.0 +│ ├── minidom v0.15.2 +│ │ └── rxml v0.9.1 +│ │ ├── bytes v1.10.1 +│ │ ├── rxml_validation v0.9.1 +│ │ └── smartstring v1.0.1 +│ │ └── static_assertions v1.1.0 +│ │ [build-dependencies] +│ │ ├── autocfg v1.4.0 +│ │ └── version_check v0.9.5 +│ ├── native-tls v0.2.14 (*) +│ ├── percent-encoding v2.3.1 +│ ├── quick-xml v0.30.0 (*) +│ ├── serde v1.0.219 (*) +│ ├── serde_derive v1.0.219 (proc-macro) (*) +│ ├── serde_json v1.0.140 (*) +│ ├── sha2 v0.10.8 (*) +│ ├── thiserror v1.0.69 (*) +│ ├── time v0.3.41 (*) +│ ├── tokio v1.44.1 (*) +│ ├── tokio-native-tls v0.3.1 (*) +│ ├── tokio-stream v0.1.17 (*) +│ └── url v2.5.4 (*) +├── sea-orm v0.10.7 +│ ├── async-stream v0.3.6 (*) +│ ├── async-trait v0.1.88 (proc-macro) (*) +│ ├── chrono v0.4.40 +│ │ ├── iana-time-zone v0.1.63 +│ │ │ └── core-foundation-sys v0.8.7 +│ │ ├── num-traits v0.2.19 (*) +│ │ └── serde v1.0.219 (*) +│ ├── futures v0.3.31 (*) +│ ├── futures-util v0.3.31 (*) +│ ├── log v0.4.27 (*) +│ ├── ouroboros v0.15.6 +│ │ ├── aliasable v0.1.3 +│ │ └── ouroboros_macro v0.15.6 (proc-macro) +│ │ ├── Inflector v0.11.4 +│ │ ├── proc-macro-error v1.0.4 +│ │ │ ├── proc-macro-error-attr v1.0.4 (proc-macro) +│ │ │ │ ├── proc-macro2 v1.0.94 (*) +│ │ │ │ └── quote v1.0.40 (*) +│ │ │ │ [build-dependencies] +│ │ │ │ └── version_check v0.9.5 +│ │ │ ├── proc-macro2 v1.0.94 (*) +│ │ │ ├── quote v1.0.40 (*) +│ │ │ └── syn v1.0.109 (*) +│ │ │ [build-dependencies] +│ │ │ └── version_check v0.9.5 +│ │ ├── proc-macro2 v1.0.94 (*) +│ │ ├── quote v1.0.40 (*) +│ │ └── syn v1.0.109 (*) +│ ├── rust_decimal v1.37.1 +│ │ ├── arrayvec v0.7.6 +│ │ ├── num-traits v0.2.19 (*) +│ │ └── serde v1.0.219 (*) +│ ├── sea-orm-macros v0.10.7 (proc-macro) +│ │ ├── bae v0.1.7 (proc-macro) +│ │ │ ├── heck v0.3.3 (*) +│ │ │ ├── proc-macro-error v1.0.4 (*) +│ │ │ ├── proc-macro2 v1.0.94 (*) +│ │ │ ├── quote v1.0.40 (*) +│ │ │ └── syn v1.0.109 (*) +│ │ ├── heck v0.3.3 (*) +│ │ ├── proc-macro2 v1.0.94 (*) +│ │ ├── quote v1.0.40 (*) +│ │ └── syn v1.0.109 (*) +│ ├── sea-query v0.27.2 +│ │ ├── chrono v0.4.40 (*) +│ │ ├── rust_decimal v1.37.1 (*) +│ │ ├── sea-query-derive v0.2.0 (proc-macro) +│ │ │ ├── heck v0.3.3 (*) +│ │ │ ├── proc-macro2 v1.0.94 (*) +│ │ │ ├── quote v1.0.40 (*) +│ │ │ ├── syn v1.0.109 (*) +│ │ │ └── thiserror v1.0.69 (*) +│ │ ├── serde_json v1.0.140 (*) +│ │ ├── time v0.3.41 (*) +│ │ └── uuid v1.16.0 +│ │ ├── getrandom v0.3.2 (*) +│ │ └── serde v1.0.219 (*) +│ ├── sea-query-binder v0.2.2 +│ │ ├── chrono v0.4.40 (*) +│ │ ├── rust_decimal v1.37.1 (*) +│ │ ├── sea-query v0.27.2 (*) +│ │ ├── serde_json v1.0.140 (*) +│ │ ├── sqlx v0.6.3 +│ │ │ ├── sqlx-core v0.6.3 +│ │ │ │ ├── ahash v0.7.8 (*) +│ │ │ │ ├── atoi v1.0.0 +│ │ │ │ │ └── num-traits v0.2.19 (*) +│ │ │ │ ├── base64 v0.13.1 +│ │ │ │ ├── bitflags v1.3.2 +│ │ │ │ ├── byteorder v1.5.0 +│ │ │ │ ├── bytes v1.10.1 +│ │ │ │ ├── chrono v0.4.40 (*) +│ │ │ │ ├── crc v3.2.1 +│ │ │ │ │ └── crc-catalog v2.4.0 +│ │ │ │ ├── crossbeam-queue v0.3.12 +│ │ │ │ │ └── crossbeam-utils v0.8.21 +│ │ │ │ ├── dirs v4.0.0 +│ │ │ │ │ └── dirs-sys v0.3.7 +│ │ │ │ │ └── libc v0.2.171 +│ │ │ │ ├── dotenvy v0.15.7 +│ │ │ │ ├── either v1.15.0 (*) +│ │ │ │ ├── event-listener v2.5.3 +│ │ │ │ ├── flume v0.10.14 +│ │ │ │ │ ├── futures-core v0.3.31 +│ │ │ │ │ ├── futures-sink v0.3.31 +│ │ │ │ │ ├── pin-project v1.1.10 (*) +│ │ │ │ │ └── spin v0.9.8 +│ │ │ │ │ └── lock_api v0.4.12 (*) +│ │ │ │ ├── futures-channel v0.3.31 (*) +│ │ │ │ ├── futures-core v0.3.31 +│ │ │ │ ├── futures-executor v0.3.31 (*) +│ │ │ │ ├── futures-intrusive v0.4.2 +│ │ │ │ │ ├── futures-core v0.3.31 +│ │ │ │ │ ├── lock_api v0.4.12 (*) +│ │ │ │ │ └── parking_lot v0.11.2 +│ │ │ │ │ ├── instant v0.1.13 +│ │ │ │ │ │ └── cfg-if v1.0.0 +│ │ │ │ │ ├── lock_api v0.4.12 (*) +│ │ │ │ │ └── parking_lot_core v0.8.6 +│ │ │ │ │ ├── cfg-if v1.0.0 +│ │ │ │ │ ├── instant v0.1.13 (*) +│ │ │ │ │ ├── libc v0.2.171 +│ │ │ │ │ └── smallvec v1.14.0 +│ │ │ │ ├── futures-util v0.3.31 (*) +│ │ │ │ ├── hashlink v0.8.4 +│ │ │ │ │ └── hashbrown v0.14.5 +│ │ │ │ │ ├── ahash v0.8.11 (*) +│ │ │ │ │ └── allocator-api2 v0.2.21 +│ │ │ │ ├── hex v0.4.3 +│ │ │ │ ├── hkdf v0.12.4 +│ │ │ │ │ └── hmac v0.12.1 (*) +│ │ │ │ ├── hmac v0.12.1 (*) +│ │ │ │ ├── indexmap v1.9.3 (*) +│ │ │ │ ├── itoa v1.0.15 +│ │ │ │ ├── libc v0.2.171 +│ │ │ │ ├── libsqlite3-sys v0.24.2 +│ │ │ │ │ [build-dependencies] +│ │ │ │ │ ├── cc v1.2.17 (*) +│ │ │ │ │ ├── pkg-config v0.3.32 +│ │ │ │ │ └── vcpkg v0.2.15 +│ │ │ │ ├── log v0.4.27 (*) +│ │ │ │ ├── md-5 v0.10.6 +│ │ │ │ │ ├── cfg-if v1.0.0 +│ │ │ │ │ └── digest v0.10.7 (*) +│ │ │ │ ├── memchr v2.7.4 +│ │ │ │ ├── num-bigint v0.4.6 (*) +│ │ │ │ ├── once_cell v1.21.3 +│ │ │ │ ├── paste v1.0.15 (proc-macro) +│ │ │ │ ├── percent-encoding v2.3.1 +│ │ │ │ ├── rand v0.8.5 (*) +│ │ │ │ ├── rust_decimal v1.37.1 (*) +│ │ │ │ ├── rustls v0.20.9 +│ │ │ │ │ ├── log v0.4.27 (*) +│ │ │ │ │ ├── ring v0.16.20 +│ │ │ │ │ │ └── untrusted v0.7.1 +│ │ │ │ │ │ [build-dependencies] +│ │ │ │ │ │ └── cc v1.2.17 (*) +│ │ │ │ │ ├── sct v0.7.1 (*) +│ │ │ │ │ └── webpki v0.22.4 +│ │ │ │ │ ├── ring v0.17.14 (*) +│ │ │ │ │ └── untrusted v0.9.0 +│ │ │ │ ├── rustls-pemfile v1.0.4 (*) +│ │ │ │ ├── serde v1.0.219 (*) +│ │ │ │ ├── serde_json v1.0.140 (*) +│ │ │ │ ├── sha1 v0.10.6 +│ │ │ │ │ ├── cfg-if v1.0.0 +│ │ │ │ │ ├── cpufeatures v0.2.17 (*) +│ │ │ │ │ └── digest v0.10.7 (*) +│ │ │ │ ├── sha2 v0.10.8 (*) +│ │ │ │ ├── smallvec v1.14.0 +│ │ │ │ ├── sqlformat v0.2.6 +│ │ │ │ │ ├── nom v7.1.3 +│ │ │ │ │ │ ├── memchr v2.7.4 +│ │ │ │ │ │ └── minimal-lexical v0.2.1 +│ │ │ │ │ └── unicode_categories v0.1.1 +│ │ │ │ ├── sqlx-rt v0.6.3 +│ │ │ │ │ ├── once_cell v1.21.3 +│ │ │ │ │ ├── tokio v1.44.1 (*) +│ │ │ │ │ └── tokio-rustls v0.23.4 +│ │ │ │ │ ├── rustls v0.20.9 (*) +│ │ │ │ │ ├── tokio v1.44.1 (*) +│ │ │ │ │ └── webpki v0.22.4 (*) +│ │ │ │ ├── stringprep v0.1.5 +│ │ │ │ │ ├── unicode-bidi v0.3.18 +│ │ │ │ │ ├── unicode-normalization v0.1.24 (*) +│ │ │ │ │ └── unicode-properties v0.1.3 +│ │ │ │ ├── thiserror v1.0.69 (*) +│ │ │ │ ├── time v0.3.41 (*) +│ │ │ │ ├── tokio-stream v0.1.17 (*) +│ │ │ │ ├── url v2.5.4 (*) +│ │ │ │ ├── uuid v1.16.0 (*) +│ │ │ │ ├── webpki-roots v0.22.6 +│ │ │ │ │ └── webpki v0.22.4 (*) +│ │ │ │ └── whoami v1.6.0 +│ │ │ └── sqlx-macros v0.6.3 (proc-macro) +│ │ │ ├── dotenvy v0.15.7 +│ │ │ ├── either v1.15.0 (*) +│ │ │ ├── heck v0.4.1 (*) +│ │ │ ├── hex v0.4.3 +│ │ │ ├── once_cell v1.21.3 +│ │ │ ├── proc-macro2 v1.0.94 (*) +│ │ │ ├── quote v1.0.40 (*) +│ │ │ ├── serde v1.0.219 (*) +│ │ │ ├── serde_json v1.0.140 (*) +│ │ │ ├── sha2 v0.10.8 (*) +│ │ │ ├── sqlx-core v0.6.3 +│ │ │ │ ├── ahash v0.7.8 (*) +│ │ │ │ ├── atoi v1.0.0 (*) +│ │ │ │ ├── base64 v0.13.1 +│ │ │ │ ├── bitflags v1.3.2 +│ │ │ │ ├── byteorder v1.5.0 +│ │ │ │ ├── bytes v1.10.1 +│ │ │ │ ├── chrono v0.4.40 +│ │ │ │ │ ├── iana-time-zone v0.1.63 (*) +│ │ │ │ │ └── num-traits v0.2.19 (*) +│ │ │ │ ├── crc v3.2.1 (*) +│ │ │ │ ├── crossbeam-queue v0.3.12 (*) +│ │ │ │ ├── dirs v4.0.0 (*) +│ │ │ │ ├── dotenvy v0.15.7 +│ │ │ │ ├── either v1.15.0 (*) +│ │ │ │ ├── event-listener v2.5.3 +│ │ │ │ ├── flume v0.10.14 (*) +│ │ │ │ ├── futures-channel v0.3.31 +│ │ │ │ │ ├── futures-core v0.3.31 +│ │ │ │ │ └── futures-sink v0.3.31 +│ │ │ │ ├── futures-core v0.3.31 +│ │ │ │ ├── futures-executor v0.3.31 (*) +│ │ │ │ ├── futures-intrusive v0.4.2 (*) +│ │ │ │ ├── futures-util v0.3.31 +│ │ │ │ │ ├── futures-core v0.3.31 +│ │ │ │ │ ├── futures-sink v0.3.31 +│ │ │ │ │ ├── futures-task v0.3.31 +│ │ │ │ │ ├── pin-project-lite v0.2.16 +│ │ │ │ │ ├── pin-utils v0.1.0 +│ │ │ │ │ └── slab v0.4.9 (*) +│ │ │ │ ├── hashlink v0.8.4 (*) +│ │ │ │ ├── hex v0.4.3 +│ │ │ │ ├── hkdf v0.12.4 (*) +│ │ │ │ ├── hmac v0.12.1 (*) +│ │ │ │ ├── indexmap v1.9.3 +│ │ │ │ │ └── hashbrown v0.12.3 +│ │ │ │ │ [build-dependencies] +│ │ │ │ │ └── autocfg v1.4.0 +│ │ │ │ ├── itoa v1.0.15 +│ │ │ │ ├── libc v0.2.171 +│ │ │ │ ├── libsqlite3-sys v0.24.2 (*) +│ │ │ │ ├── log v0.4.27 +│ │ │ │ ├── md-5 v0.10.6 (*) +│ │ │ │ ├── memchr v2.7.4 +│ │ │ │ ├── num-bigint v0.4.6 (*) +│ │ │ │ ├── once_cell v1.21.3 +│ │ │ │ ├── paste v1.0.15 (proc-macro) +│ │ │ │ ├── percent-encoding v2.3.1 +│ │ │ │ ├── rand v0.8.5 +│ │ │ │ │ ├── libc v0.2.171 +│ │ │ │ │ ├── rand_chacha v0.3.1 (*) +│ │ │ │ │ └── rand_core v0.6.4 (*) +│ │ │ │ ├── rust_decimal v1.37.1 (*) +│ │ │ │ ├── rustls v0.20.9 (*) +│ │ │ │ ├── rustls-pemfile v1.0.4 (*) +│ │ │ │ ├── serde v1.0.219 (*) +│ │ │ │ ├── serde_json v1.0.140 (*) +│ │ │ │ ├── sha1 v0.10.6 +│ │ │ │ │ ├── cfg-if v1.0.0 +│ │ │ │ │ ├── cpufeatures v0.2.17 (*) +│ │ │ │ │ └── digest v0.10.7 (*) +│ │ │ │ ├── sha2 v0.10.8 (*) +│ │ │ │ ├── smallvec v1.14.0 +│ │ │ │ ├── sqlformat v0.2.6 (*) +│ │ │ │ ├── sqlx-rt v0.6.3 (*) +│ │ │ │ ├── stringprep v0.1.5 (*) +│ │ │ │ ├── thiserror v1.0.69 (*) +│ │ │ │ ├── time v0.3.41 +│ │ │ │ │ ├── deranged v0.4.1 +│ │ │ │ │ │ └── powerfmt v0.2.0 +│ │ │ │ │ ├── itoa v1.0.15 +│ │ │ │ │ ├── num-conv v0.1.0 +│ │ │ │ │ ├── powerfmt v0.2.0 +│ │ │ │ │ ├── time-core v0.1.4 +│ │ │ │ │ └── time-macros v0.2.22 (proc-macro) (*) +│ │ │ │ ├── tokio-stream v0.1.17 (*) +│ │ │ │ ├── url v2.5.4 +│ │ │ │ │ ├── form_urlencoded v1.2.1 +│ │ │ │ │ │ └── percent-encoding v2.3.1 +│ │ │ │ │ ├── idna v1.0.3 +│ │ │ │ │ │ ├── idna_adapter v1.2.0 (*) +│ │ │ │ │ │ ├── smallvec v1.14.0 +│ │ │ │ │ │ └── utf8_iter v1.0.4 +│ │ │ │ │ └── percent-encoding v2.3.1 +│ │ │ │ ├── uuid v1.16.0 +│ │ │ │ ├── webpki-roots v0.22.6 (*) +│ │ │ │ └── whoami v1.6.0 +│ │ │ ├── sqlx-rt v0.6.3 (*) +│ │ │ ├── syn v1.0.109 (*) +│ │ │ └── url v2.5.4 (*) +│ │ ├── time v0.3.41 (*) +│ │ └── uuid v1.16.0 (*) +│ ├── sea-strum v0.23.0 +│ │ └── sea-strum_macros v0.23.0 (proc-macro) +│ │ ├── heck v0.3.3 (*) +│ │ ├── proc-macro2 v1.0.94 (*) +│ │ ├── quote v1.0.40 (*) +│ │ ├── rustversion v1.0.20 (proc-macro) +│ │ └── syn v1.0.109 (*) +│ ├── serde v1.0.219 (*) +│ ├── serde_json v1.0.140 (*) +│ ├── sqlx v0.6.3 (*) +│ ├── thiserror v1.0.69 (*) +│ ├── time v0.3.41 (*) +│ ├── tracing v0.1.41 (*) +│ ├── url v2.5.4 (*) +│ └── uuid v1.16.0 (*) +├── sea-orm-migration v0.10.7 +│ ├── async-trait v0.1.88 (proc-macro) (*) +│ ├── clap v3.2.25 +│ │ ├── atty v0.2.14 +│ │ │ └── libc v0.2.171 +│ │ ├── bitflags v1.3.2 +│ │ ├── clap_derive v3.2.25 (proc-macro) +│ │ │ ├── heck v0.4.1 (*) +│ │ │ ├── proc-macro-error v1.0.4 (*) +│ │ │ ├── proc-macro2 v1.0.94 (*) +│ │ │ ├── quote v1.0.40 (*) +│ │ │ └── syn v1.0.109 (*) +│ │ ├── clap_lex v0.2.4 +│ │ │ └── os_str_bytes v6.6.1 +│ │ ├── indexmap v1.9.3 (*) +│ │ ├── once_cell v1.21.3 +│ │ ├── strsim v0.10.0 +│ │ ├── termcolor v1.4.1 +│ │ └── textwrap v0.16.2 +│ ├── dotenvy v0.15.7 +│ ├── sea-orm v0.10.7 (*) +│ ├── sea-orm-cli v0.10.7 +│ │ ├── chrono v0.4.40 (*) +│ │ ├── clap v3.2.25 (*) +│ │ ├── dotenvy v0.15.7 +│ │ ├── regex v1.11.1 (*) +│ │ ├── sea-schema v0.10.3 +│ │ │ ├── futures v0.3.31 (*) +│ │ │ ├── sea-query v0.27.2 (*) +│ │ │ └── sea-schema-derive v0.1.0 (proc-macro) +│ │ │ ├── heck v0.3.3 (*) +│ │ │ ├── proc-macro2 v1.0.94 (*) +│ │ │ ├── quote v1.0.40 (*) +│ │ │ └── syn v1.0.109 (*) +│ │ ├── tracing v0.1.41 (*) +│ │ ├── tracing-subscriber v0.3.19 +│ │ │ ├── matchers v0.1.0 +│ │ │ │ └── regex-automata v0.1.10 +│ │ │ │ └── regex-syntax v0.6.29 +│ │ │ ├── nu-ansi-term v0.46.0 +│ │ │ │ └── overload v0.1.1 +│ │ │ ├── once_cell v1.21.3 +│ │ │ ├── regex v1.11.1 (*) +│ │ │ ├── serde v1.0.219 (*) +│ │ │ ├── serde_json v1.0.140 (*) +│ │ │ ├── sharded-slab v0.1.7 +│ │ │ │ └── lazy_static v1.5.0 +│ │ │ ├── smallvec v1.14.0 +│ │ │ ├── thread_local v1.1.8 +│ │ │ │ ├── cfg-if v1.0.0 +│ │ │ │ └── once_cell v1.21.3 +│ │ │ ├── tracing v0.1.41 (*) +│ │ │ ├── tracing-core v0.1.33 (*) +│ │ │ ├── tracing-log v0.2.0 +│ │ │ │ ├── log v0.4.27 (*) +│ │ │ │ ├── once_cell v1.21.3 +│ │ │ │ └── tracing-core v0.1.33 (*) +│ │ │ └── tracing-serde v0.2.0 +│ │ │ ├── serde v1.0.219 (*) +│ │ │ └── tracing-core v0.1.33 (*) +│ │ └── url v2.5.4 (*) +│ ├── sea-schema v0.10.3 (*) +│ ├── tracing v0.1.41 (*) +│ └── tracing-subscriber v0.3.19 (*) +├── serde v1.0.219 (*) +├── serde_json v1.0.140 (*) +├── solana-client v1.18.22 +│ ├── async-trait v0.1.88 (proc-macro) (*) +│ ├── bincode v1.3.3 (*) +│ ├── dashmap v5.5.3 +│ │ ├── cfg-if v1.0.0 +│ │ ├── hashbrown v0.14.5 (*) +│ │ ├── lock_api v0.4.12 (*) +│ │ ├── once_cell v1.21.3 +│ │ └── parking_lot_core v0.9.10 (*) +│ ├── futures v0.3.31 (*) +│ ├── futures-util v0.3.31 (*) +│ ├── indexmap v2.8.0 (*) +│ ├── indicatif v0.17.11 +│ │ ├── console v0.15.11 (*) +│ │ ├── number_prefix v0.4.0 +│ │ ├── portable-atomic v1.11.0 +│ │ └── unicode-width v0.2.0 +│ ├── log v0.4.27 (*) +│ ├── quinn v0.10.2 +│ │ ├── bytes v1.10.1 +│ │ ├── pin-project-lite v0.2.16 +│ │ ├── quinn-proto v0.10.6 +│ │ │ ├── bytes v1.10.1 +│ │ │ ├── rand v0.8.5 (*) +│ │ │ ├── ring v0.16.20 (*) +│ │ │ ├── rustc-hash v1.1.0 +│ │ │ ├── rustls v0.21.12 (*) +│ │ │ ├── rustls-native-certs v0.6.3 +│ │ │ │ ├── rustls-pemfile v1.0.4 (*) +│ │ │ │ └── security-framework v2.11.1 (*) +│ │ │ ├── slab v0.4.9 (*) +│ │ │ ├── thiserror v1.0.69 (*) +│ │ │ ├── tinyvec v1.9.0 (*) +│ │ │ └── tracing v0.1.41 (*) +│ │ ├── quinn-udp v0.4.1 +│ │ │ ├── bytes v1.10.1 +│ │ │ ├── libc v0.2.171 +│ │ │ ├── socket2 v0.5.9 (*) +│ │ │ └── tracing v0.1.41 (*) +│ │ ├── rustc-hash v1.1.0 +│ │ ├── rustls v0.21.12 (*) +│ │ ├── thiserror v1.0.69 (*) +│ │ ├── tokio v1.44.1 (*) +│ │ └── tracing v0.1.41 (*) +│ ├── rayon v1.10.0 (*) +│ ├── solana-connection-cache v1.18.22 +│ │ ├── async-trait v0.1.88 (proc-macro) (*) +│ │ ├── bincode v1.3.3 (*) +│ │ ├── crossbeam-channel v0.5.14 (*) +│ │ ├── futures-util v0.3.31 (*) +│ │ ├── indexmap v2.8.0 (*) +│ │ ├── log v0.4.27 (*) +│ │ ├── rand v0.8.5 (*) +│ │ ├── rayon v1.10.0 (*) +│ │ ├── rcgen v0.10.0 +│ │ │ ├── pem v1.1.1 +│ │ │ │ └── base64 v0.13.1 +│ │ │ ├── ring v0.16.20 (*) +│ │ │ ├── time v0.3.41 (*) +│ │ │ └── yasna v0.5.2 +│ │ │ └── time v0.3.41 (*) +│ │ ├── solana-measure v1.18.22 +│ │ │ ├── log v0.4.27 (*) +│ │ │ └── solana-sdk v1.18.22 +│ │ │ ├── assert_matches v1.5.0 +│ │ │ ├── base64 v0.21.7 +│ │ │ ├── bincode v1.3.3 (*) +│ │ │ ├── bitflags v2.9.0 (*) +│ │ │ ├── borsh v1.5.7 (*) +│ │ │ ├── bs58 v0.4.0 +│ │ │ ├── bytemuck v1.22.0 (*) +│ │ │ ├── byteorder v1.5.0 +│ │ │ ├── chrono v0.4.40 (*) +│ │ │ ├── derivation-path v0.2.0 +│ │ │ ├── digest v0.10.7 (*) +│ │ │ ├── ed25519-dalek v1.0.1 +│ │ │ │ ├── curve25519-dalek v3.2.1 (*) +│ │ │ │ ├── ed25519 v1.5.3 +│ │ │ │ │ └── signature v1.6.4 +│ │ │ │ ├── rand v0.7.3 (*) +│ │ │ │ ├── serde v1.0.219 (*) +│ │ │ │ ├── sha2 v0.9.9 (*) +│ │ │ │ └── zeroize v1.3.0 (*) +│ │ │ ├── ed25519-dalek-bip32 v0.2.0 +│ │ │ │ ├── derivation-path v0.2.0 +│ │ │ │ ├── ed25519-dalek v1.0.1 (*) +│ │ │ │ ├── hmac v0.12.1 (*) +│ │ │ │ └── sha2 v0.10.8 (*) +│ │ │ ├── generic-array v0.14.7 (*) +│ │ │ ├── hmac v0.12.1 (*) +│ │ │ ├── itertools v0.10.5 (*) +│ │ │ ├── lazy_static v1.5.0 +│ │ │ ├── libsecp256k1 v0.6.0 (*) +│ │ │ ├── log v0.4.27 (*) +│ │ │ ├── memmap2 v0.5.10 (*) +│ │ │ ├── num-derive v0.4.2 (proc-macro) (*) +│ │ │ ├── num-traits v0.2.19 (*) +│ │ │ ├── num_enum v0.7.3 (*) +│ │ │ ├── pbkdf2 v0.11.0 +│ │ │ │ └── digest v0.10.7 (*) +│ │ │ ├── qstring v0.7.2 +│ │ │ │ └── percent-encoding v2.3.1 +│ │ │ ├── qualifier_attr v0.2.2 (proc-macro) +│ │ │ │ ├── proc-macro2 v1.0.94 (*) +│ │ │ │ ├── quote v1.0.40 (*) +│ │ │ │ └── syn v2.0.100 (*) +│ │ │ ├── rand v0.7.3 (*) +│ │ │ ├── rand v0.8.5 (*) +│ │ │ ├── rustversion v1.0.20 (proc-macro) +│ │ │ ├── serde v1.0.219 (*) +│ │ │ ├── serde_bytes v0.11.17 (*) +│ │ │ ├── serde_derive v1.0.219 (proc-macro) (*) +│ │ │ ├── serde_json v1.0.140 (*) +│ │ │ ├── serde_with v2.3.3 +│ │ │ │ ├── serde v1.0.219 (*) +│ │ │ │ └── serde_with_macros v2.3.3 (proc-macro) +│ │ │ │ ├── darling v0.20.11 +│ │ │ │ │ ├── darling_core v0.20.11 +│ │ │ │ │ │ ├── fnv v1.0.7 +│ │ │ │ │ │ ├── ident_case v1.0.1 +│ │ │ │ │ │ ├── proc-macro2 v1.0.94 (*) +│ │ │ │ │ │ ├── quote v1.0.40 (*) +│ │ │ │ │ │ ├── strsim v0.11.1 +│ │ │ │ │ │ └── syn v2.0.100 (*) +│ │ │ │ │ └── darling_macro v0.20.11 (proc-macro) +│ │ │ │ │ ├── darling_core v0.20.11 (*) +│ │ │ │ │ ├── quote v1.0.40 (*) +│ │ │ │ │ └── syn v2.0.100 (*) +│ │ │ │ ├── proc-macro2 v1.0.94 (*) +│ │ │ │ ├── quote v1.0.40 (*) +│ │ │ │ └── syn v2.0.100 (*) +│ │ │ ├── sha2 v0.10.8 (*) +│ │ │ ├── sha3 v0.10.8 (*) +│ │ │ ├── siphasher v0.3.11 +│ │ │ ├── solana-frozen-abi v1.18.22 (*) +│ │ │ ├── solana-frozen-abi-macro v1.18.22 (proc-macro) (*) +│ │ │ ├── solana-logger v1.18.22 +│ │ │ │ ├── env_logger v0.9.3 +│ │ │ │ │ ├── atty v0.2.14 (*) +│ │ │ │ │ ├── humantime v2.2.0 +│ │ │ │ │ ├── log v0.4.27 (*) +│ │ │ │ │ ├── regex v1.11.1 (*) +│ │ │ │ │ └── termcolor v1.4.1 +│ │ │ │ ├── lazy_static v1.5.0 +│ │ │ │ └── log v0.4.27 (*) +│ │ │ ├── solana-program v1.18.22 (*) +│ │ │ ├── solana-sdk-macro v1.18.22 (proc-macro) (*) +│ │ │ ├── thiserror v1.0.69 (*) +│ │ │ ├── uriparse v0.6.4 +│ │ │ │ ├── fnv v1.0.7 +│ │ │ │ └── lazy_static v1.5.0 +│ │ │ └── wasm-bindgen v0.2.100 (*) +│ │ │ [build-dependencies] +│ │ │ └── rustc_version v0.4.1 (*) +│ │ ├── solana-metrics v1.18.22 +│ │ │ ├── crossbeam-channel v0.5.14 (*) +│ │ │ ├── gethostname v0.2.3 +│ │ │ │ └── libc v0.2.171 +│ │ │ ├── lazy_static v1.5.0 +│ │ │ ├── log v0.4.27 (*) +│ │ │ ├── reqwest v0.11.27 (*) +│ │ │ ├── solana-sdk v1.18.22 (*) +│ │ │ └── thiserror v1.0.69 (*) +│ │ ├── solana-sdk v1.18.22 (*) +│ │ ├── thiserror v1.0.69 (*) +│ │ └── tokio v1.44.1 (*) +│ ├── solana-measure v1.18.22 (*) +│ ├── solana-metrics v1.18.22 (*) +│ ├── solana-pubsub-client v1.18.22 +│ │ ├── crossbeam-channel v0.5.14 (*) +│ │ ├── futures-util v0.3.31 (*) +│ │ ├── log v0.4.27 (*) +│ │ ├── reqwest v0.11.27 (*) +│ │ ├── semver v1.0.26 +│ │ ├── serde v1.0.219 (*) +│ │ ├── serde_derive v1.0.219 (proc-macro) (*) +│ │ ├── serde_json v1.0.140 (*) +│ │ ├── solana-account-decoder v1.18.22 +│ │ │ ├── Inflector v0.11.4 +│ │ │ │ ├── lazy_static v1.5.0 +│ │ │ │ └── regex v1.11.1 (*) +│ │ │ ├── base64 v0.21.7 +│ │ │ ├── bincode v1.3.3 (*) +│ │ │ ├── bs58 v0.4.0 +│ │ │ ├── bv v0.11.1 (*) +│ │ │ ├── lazy_static v1.5.0 +│ │ │ ├── serde v1.0.219 (*) +│ │ │ ├── serde_derive v1.0.219 (proc-macro) (*) +│ │ │ ├── serde_json v1.0.140 (*) +│ │ │ ├── solana-config-program v1.18.22 +│ │ │ │ ├── bincode v1.3.3 (*) +│ │ │ │ ├── chrono v0.4.40 (*) +│ │ │ │ ├── serde v1.0.219 (*) +│ │ │ │ ├── serde_derive v1.0.219 (proc-macro) (*) +│ │ │ │ ├── solana-program-runtime v1.18.22 +│ │ │ │ │ ├── base64 v0.21.7 +│ │ │ │ │ ├── bincode v1.3.3 (*) +│ │ │ │ │ ├── eager v0.1.0 +│ │ │ │ │ ├── enum-iterator v1.5.0 +│ │ │ │ │ │ └── enum-iterator-derive v1.4.0 (proc-macro) +│ │ │ │ │ │ ├── proc-macro2 v1.0.94 (*) +│ │ │ │ │ │ ├── quote v1.0.40 (*) +│ │ │ │ │ │ └── syn v2.0.100 (*) +│ │ │ │ │ ├── itertools v0.10.5 (*) +│ │ │ │ │ ├── libc v0.2.171 +│ │ │ │ │ ├── log v0.4.27 (*) +│ │ │ │ │ ├── num-derive v0.4.2 (proc-macro) (*) +│ │ │ │ │ ├── num-traits v0.2.19 (*) +│ │ │ │ │ ├── percentage v0.1.0 +│ │ │ │ │ │ └── num v0.2.1 +│ │ │ │ │ │ ├── num-bigint v0.2.6 +│ │ │ │ │ │ │ ├── num-integer v0.1.46 (*) +│ │ │ │ │ │ │ └── num-traits v0.2.19 (*) +│ │ │ │ │ │ │ [build-dependencies] +│ │ │ │ │ │ │ └── autocfg v1.4.0 +│ │ │ │ │ │ ├── num-complex v0.2.4 +│ │ │ │ │ │ │ └── num-traits v0.2.19 (*) +│ │ │ │ │ │ │ [build-dependencies] +│ │ │ │ │ │ │ └── autocfg v1.4.0 +│ │ │ │ │ │ ├── num-integer v0.1.46 (*) +│ │ │ │ │ │ ├── num-iter v0.1.45 +│ │ │ │ │ │ │ ├── num-integer v0.1.46 (*) +│ │ │ │ │ │ │ └── num-traits v0.2.19 (*) +│ │ │ │ │ │ │ [build-dependencies] +│ │ │ │ │ │ │ └── autocfg v1.4.0 +│ │ │ │ │ │ ├── num-rational v0.2.4 +│ │ │ │ │ │ │ ├── num-bigint v0.2.6 (*) +│ │ │ │ │ │ │ ├── num-integer v0.1.46 (*) +│ │ │ │ │ │ │ └── num-traits v0.2.19 (*) +│ │ │ │ │ │ │ [build-dependencies] +│ │ │ │ │ │ │ └── autocfg v1.4.0 +│ │ │ │ │ │ └── num-traits v0.2.19 (*) +│ │ │ │ │ ├── rand v0.8.5 (*) +│ │ │ │ │ ├── serde v1.0.219 (*) +│ │ │ │ │ ├── solana-frozen-abi v1.18.22 (*) +│ │ │ │ │ ├── solana-frozen-abi-macro v1.18.22 (proc-macro) (*) +│ │ │ │ │ ├── solana-measure v1.18.22 (*) +│ │ │ │ │ ├── solana-metrics v1.18.22 (*) +│ │ │ │ │ ├── solana-sdk v1.18.22 (*) +│ │ │ │ │ ├── solana_rbpf v0.8.3 +│ │ │ │ │ │ ├── byteorder v1.5.0 +│ │ │ │ │ │ ├── combine v3.8.1 +│ │ │ │ │ │ │ ├── ascii v0.9.3 +│ │ │ │ │ │ │ ├── byteorder v1.5.0 +│ │ │ │ │ │ │ ├── either v1.15.0 (*) +│ │ │ │ │ │ │ ├── memchr v2.7.4 +│ │ │ │ │ │ │ └── unreachable v1.0.0 +│ │ │ │ │ │ │ └── void v1.0.2 +│ │ │ │ │ │ ├── goblin v0.5.4 +│ │ │ │ │ │ │ ├── log v0.4.27 (*) +│ │ │ │ │ │ │ ├── plain v0.2.3 +│ │ │ │ │ │ │ └── scroll v0.11.0 +│ │ │ │ │ │ │ └── scroll_derive v0.11.1 (proc-macro) +│ │ │ │ │ │ │ ├── proc-macro2 v1.0.94 (*) +│ │ │ │ │ │ │ ├── quote v1.0.40 (*) +│ │ │ │ │ │ │ └── syn v2.0.100 (*) +│ │ │ │ │ │ ├── hash32 v0.2.1 +│ │ │ │ │ │ │ └── byteorder v1.5.0 +│ │ │ │ │ │ ├── libc v0.2.171 +│ │ │ │ │ │ ├── log v0.4.27 (*) +│ │ │ │ │ │ ├── rand v0.8.5 (*) +│ │ │ │ │ │ ├── rustc-demangle v0.1.24 +│ │ │ │ │ │ ├── scroll v0.11.0 (*) +│ │ │ │ │ │ └── thiserror v1.0.69 (*) +│ │ │ │ │ └── thiserror v1.0.69 (*) +│ │ │ │ │ [build-dependencies] +│ │ │ │ │ └── rustc_version v0.4.1 (*) +│ │ │ │ └── solana-sdk v1.18.22 (*) +│ │ │ ├── solana-sdk v1.18.22 (*) +│ │ │ ├── spl-token v4.0.0 +│ │ │ │ ├── arrayref v0.3.9 +│ │ │ │ ├── bytemuck v1.22.0 (*) +│ │ │ │ ├── num-derive v0.3.3 (proc-macro) +│ │ │ │ │ ├── proc-macro2 v1.0.94 (*) +│ │ │ │ │ ├── quote v1.0.40 (*) +│ │ │ │ │ └── syn v1.0.109 (*) +│ │ │ │ ├── num-traits v0.2.19 (*) +│ │ │ │ ├── num_enum v0.6.1 +│ │ │ │ │ └── num_enum_derive v0.6.1 (proc-macro) +│ │ │ │ │ ├── proc-macro-crate v1.3.1 (*) +│ │ │ │ │ ├── proc-macro2 v1.0.94 (*) +│ │ │ │ │ ├── quote v1.0.40 (*) +│ │ │ │ │ └── syn v2.0.100 (*) +│ │ │ │ ├── solana-program v1.18.22 (*) +│ │ │ │ └── thiserror v1.0.69 (*) +│ │ │ ├── spl-token-2022 v1.0.0 +│ │ │ │ ├── arrayref v0.3.9 +│ │ │ │ ├── bytemuck v1.22.0 (*) +│ │ │ │ ├── num-derive v0.4.2 (proc-macro) (*) +│ │ │ │ ├── num-traits v0.2.19 (*) +│ │ │ │ ├── num_enum v0.7.3 (*) +│ │ │ │ ├── solana-program v1.18.22 (*) +│ │ │ │ ├── solana-security-txt v1.1.1 +│ │ │ │ ├── solana-zk-token-sdk v1.18.22 +│ │ │ │ │ ├── aes-gcm-siv v0.10.3 +│ │ │ │ │ │ ├── aead v0.4.3 +│ │ │ │ │ │ │ └── generic-array v0.14.7 (*) +│ │ │ │ │ │ ├── aes v0.7.5 +│ │ │ │ │ │ │ ├── cfg-if v1.0.0 +│ │ │ │ │ │ │ ├── cipher v0.3.0 +│ │ │ │ │ │ │ │ └── generic-array v0.14.7 (*) +│ │ │ │ │ │ │ ├── cpufeatures v0.2.17 (*) +│ │ │ │ │ │ │ └── opaque-debug v0.3.1 +│ │ │ │ │ │ ├── cipher v0.3.0 (*) +│ │ │ │ │ │ ├── ctr v0.8.0 +│ │ │ │ │ │ │ └── cipher v0.3.0 (*) +│ │ │ │ │ │ ├── polyval v0.5.3 +│ │ │ │ │ │ │ ├── cfg-if v1.0.0 +│ │ │ │ │ │ │ ├── cpufeatures v0.2.17 (*) +│ │ │ │ │ │ │ ├── opaque-debug v0.3.1 +│ │ │ │ │ │ │ └── universal-hash v0.4.1 +│ │ │ │ │ │ │ ├── generic-array v0.14.7 (*) +│ │ │ │ │ │ │ └── subtle v2.4.1 +│ │ │ │ │ │ ├── subtle v2.4.1 +│ │ │ │ │ │ └── zeroize v1.3.0 (*) +│ │ │ │ │ ├── base64 v0.21.7 +│ │ │ │ │ ├── bincode v1.3.3 (*) +│ │ │ │ │ ├── bytemuck v1.22.0 (*) +│ │ │ │ │ ├── byteorder v1.5.0 +│ │ │ │ │ ├── curve25519-dalek v3.2.1 (*) +│ │ │ │ │ ├── getrandom v0.1.16 (*) +│ │ │ │ │ ├── itertools v0.10.5 (*) +│ │ │ │ │ ├── lazy_static v1.5.0 +│ │ │ │ │ ├── merlin v3.0.0 +│ │ │ │ │ │ ├── byteorder v1.5.0 +│ │ │ │ │ │ ├── keccak v0.1.5 (*) +│ │ │ │ │ │ ├── rand_core v0.6.4 (*) +│ │ │ │ │ │ └── zeroize v1.3.0 (*) +│ │ │ │ │ ├── num-derive v0.4.2 (proc-macro) (*) +│ │ │ │ │ ├── num-traits v0.2.19 (*) +│ │ │ │ │ ├── rand v0.7.3 (*) +│ │ │ │ │ ├── serde v1.0.219 (*) +│ │ │ │ │ ├── serde_json v1.0.140 (*) +│ │ │ │ │ ├── sha3 v0.9.1 +│ │ │ │ │ │ ├── block-buffer v0.9.0 (*) +│ │ │ │ │ │ ├── digest v0.9.0 (*) +│ │ │ │ │ │ ├── keccak v0.1.5 (*) +│ │ │ │ │ │ └── opaque-debug v0.3.1 +│ │ │ │ │ ├── solana-program v1.18.22 (*) +│ │ │ │ │ ├── solana-sdk v1.18.22 (*) +│ │ │ │ │ ├── subtle v2.4.1 +│ │ │ │ │ ├── thiserror v1.0.69 (*) +│ │ │ │ │ └── zeroize v1.3.0 (*) +│ │ │ │ ├── spl-memo v4.0.0 +│ │ │ │ │ └── solana-program v1.18.22 (*) +│ │ │ │ ├── spl-pod v0.1.0 +│ │ │ │ │ ├── borsh v0.10.4 (*) +│ │ │ │ │ ├── bytemuck v1.22.0 (*) +│ │ │ │ │ ├── solana-program v1.18.22 (*) +│ │ │ │ │ ├── solana-zk-token-sdk v1.18.22 (*) +│ │ │ │ │ └── spl-program-error v0.3.0 +│ │ │ │ │ ├── num-derive v0.4.2 (proc-macro) (*) +│ │ │ │ │ ├── num-traits v0.2.19 (*) +│ │ │ │ │ ├── solana-program v1.18.22 (*) +│ │ │ │ │ ├── spl-program-error-derive v0.3.2 (proc-macro) +│ │ │ │ │ │ ├── proc-macro2 v1.0.94 (*) +│ │ │ │ │ │ ├── quote v1.0.40 (*) +│ │ │ │ │ │ ├── sha2 v0.10.8 (*) +│ │ │ │ │ │ └── syn v2.0.100 (*) +│ │ │ │ │ └── thiserror v1.0.69 (*) +│ │ │ │ ├── spl-token v4.0.0 (*) +│ │ │ │ ├── spl-token-group-interface v0.1.0 +│ │ │ │ │ ├── bytemuck v1.22.0 (*) +│ │ │ │ │ ├── solana-program v1.18.22 (*) +│ │ │ │ │ ├── spl-discriminator v0.1.0 +│ │ │ │ │ │ ├── bytemuck v1.22.0 (*) +│ │ │ │ │ │ ├── solana-program v1.18.22 (*) +│ │ │ │ │ │ └── spl-discriminator-derive v0.1.2 (proc-macro) +│ │ │ │ │ │ ├── quote v1.0.40 (*) +│ │ │ │ │ │ ├── spl-discriminator-syn v0.1.2 +│ │ │ │ │ │ │ ├── proc-macro2 v1.0.94 (*) +│ │ │ │ │ │ │ ├── quote v1.0.40 (*) +│ │ │ │ │ │ │ ├── sha2 v0.10.8 (*) +│ │ │ │ │ │ │ ├── syn v2.0.100 (*) +│ │ │ │ │ │ │ └── thiserror v1.0.69 (*) +│ │ │ │ │ │ └── syn v2.0.100 (*) +│ │ │ │ │ ├── spl-pod v0.1.0 (*) +│ │ │ │ │ └── spl-program-error v0.3.0 (*) +│ │ │ │ ├── spl-token-metadata-interface v0.2.0 +│ │ │ │ │ ├── borsh v0.10.4 (*) +│ │ │ │ │ ├── solana-program v1.18.22 (*) +│ │ │ │ │ ├── spl-discriminator v0.1.0 (*) +│ │ │ │ │ ├── spl-pod v0.1.0 (*) +│ │ │ │ │ ├── spl-program-error v0.3.0 (*) +│ │ │ │ │ └── spl-type-length-value v0.3.0 +│ │ │ │ │ ├── bytemuck v1.22.0 (*) +│ │ │ │ │ ├── solana-program v1.18.22 (*) +│ │ │ │ │ ├── spl-discriminator v0.1.0 (*) +│ │ │ │ │ ├── spl-pod v0.1.0 (*) +│ │ │ │ │ └── spl-program-error v0.3.0 (*) +│ │ │ │ ├── spl-transfer-hook-interface v0.4.1 +│ │ │ │ │ ├── arrayref v0.3.9 +│ │ │ │ │ ├── bytemuck v1.22.0 (*) +│ │ │ │ │ ├── solana-program v1.18.22 (*) +│ │ │ │ │ ├── spl-discriminator v0.1.0 (*) +│ │ │ │ │ ├── spl-pod v0.1.0 (*) +│ │ │ │ │ ├── spl-program-error v0.3.0 (*) +│ │ │ │ │ ├── spl-tlv-account-resolution v0.5.1 +│ │ │ │ │ │ ├── bytemuck v1.22.0 (*) +│ │ │ │ │ │ ├── solana-program v1.18.22 (*) +│ │ │ │ │ │ ├── spl-discriminator v0.1.0 (*) +│ │ │ │ │ │ ├── spl-pod v0.1.0 (*) +│ │ │ │ │ │ ├── spl-program-error v0.3.0 (*) +│ │ │ │ │ │ └── spl-type-length-value v0.3.0 (*) +│ │ │ │ │ └── spl-type-length-value v0.3.0 (*) +│ │ │ │ ├── spl-type-length-value v0.3.0 (*) +│ │ │ │ └── thiserror v1.0.69 (*) +│ │ │ ├── spl-token-group-interface v0.1.0 (*) +│ │ │ ├── spl-token-metadata-interface v0.2.0 (*) +│ │ │ ├── thiserror v1.0.69 (*) +│ │ │ └── zstd v0.11.2+zstd.1.5.2 +│ │ │ └── zstd-safe v5.0.2+zstd.1.5.2 +│ │ │ ├── libc v0.2.171 +│ │ │ └── zstd-sys v2.0.15+zstd.1.5.7 +│ │ │ [build-dependencies] +│ │ │ ├── cc v1.2.17 (*) +│ │ │ └── pkg-config v0.3.32 +│ │ ├── solana-rpc-client-api v1.18.22 +│ │ │ ├── base64 v0.21.7 +│ │ │ ├── bs58 v0.4.0 +│ │ │ ├── jsonrpc-core v18.0.0 +│ │ │ │ ├── futures v0.3.31 (*) +│ │ │ │ ├── futures-executor v0.3.31 (*) +│ │ │ │ ├── futures-util v0.3.31 (*) +│ │ │ │ ├── log v0.4.27 (*) +│ │ │ │ ├── serde v1.0.219 (*) +│ │ │ │ ├── serde_derive v1.0.219 (proc-macro) (*) +│ │ │ │ └── serde_json v1.0.140 (*) +│ │ │ ├── reqwest v0.11.27 (*) +│ │ │ ├── semver v1.0.26 +│ │ │ ├── serde v1.0.219 (*) +│ │ │ ├── serde_derive v1.0.219 (proc-macro) (*) +│ │ │ ├── serde_json v1.0.140 (*) +│ │ │ ├── solana-account-decoder v1.18.22 (*) +│ │ │ ├── solana-sdk v1.18.22 (*) +│ │ │ ├── solana-transaction-status v1.18.22 +│ │ │ │ ├── Inflector v0.11.4 (*) +│ │ │ │ ├── base64 v0.21.7 +│ │ │ │ ├── bincode v1.3.3 (*) +│ │ │ │ ├── borsh v0.10.4 (*) +│ │ │ │ ├── bs58 v0.4.0 +│ │ │ │ ├── lazy_static v1.5.0 +│ │ │ │ ├── log v0.4.27 (*) +│ │ │ │ ├── serde v1.0.219 (*) +│ │ │ │ ├── serde_derive v1.0.219 (proc-macro) (*) +│ │ │ │ ├── serde_json v1.0.140 (*) +│ │ │ │ ├── solana-account-decoder v1.18.22 (*) +│ │ │ │ ├── solana-sdk v1.18.22 (*) +│ │ │ │ ├── spl-associated-token-account v2.3.0 +│ │ │ │ │ ├── assert_matches v1.5.0 +│ │ │ │ │ ├── borsh v0.10.4 (*) +│ │ │ │ │ ├── num-derive v0.4.2 (proc-macro) (*) +│ │ │ │ │ ├── num-traits v0.2.19 (*) +│ │ │ │ │ ├── solana-program v1.18.22 (*) +│ │ │ │ │ ├── spl-token v4.0.0 (*) +│ │ │ │ │ ├── spl-token-2022 v1.0.0 (*) +│ │ │ │ │ └── thiserror v1.0.69 (*) +│ │ │ │ ├── spl-memo v4.0.0 (*) +│ │ │ │ ├── spl-token v4.0.0 (*) +│ │ │ │ ├── spl-token-2022 v1.0.0 (*) +│ │ │ │ └── thiserror v1.0.69 (*) +│ │ │ ├── solana-version v1.18.22 +│ │ │ │ ├── log v0.4.27 (*) +│ │ │ │ ├── semver v1.0.26 +│ │ │ │ ├── serde v1.0.219 (*) +│ │ │ │ ├── serde_derive v1.0.219 (proc-macro) (*) +│ │ │ │ ├── solana-frozen-abi v1.18.22 (*) +│ │ │ │ ├── solana-frozen-abi-macro v1.18.22 (proc-macro) (*) +│ │ │ │ └── solana-sdk v1.18.22 (*) +│ │ │ │ [build-dependencies] +│ │ │ │ └── rustc_version v0.4.1 (*) +│ │ │ ├── spl-token-2022 v1.0.0 (*) +│ │ │ └── thiserror v1.0.69 (*) +│ │ ├── solana-sdk v1.18.22 (*) +│ │ ├── thiserror v1.0.69 (*) +│ │ ├── tokio v1.44.1 (*) +│ │ ├── tokio-stream v0.1.17 (*) +│ │ ├── tokio-tungstenite v0.20.1 +│ │ │ ├── futures-util v0.3.31 (*) +│ │ │ ├── log v0.4.27 (*) +│ │ │ ├── rustls v0.21.12 (*) +│ │ │ ├── tokio v1.44.1 (*) +│ │ │ ├── tokio-rustls v0.24.1 (*) +│ │ │ ├── tungstenite v0.20.1 +│ │ │ │ ├── byteorder v1.5.0 +│ │ │ │ ├── bytes v1.10.1 +│ │ │ │ ├── data-encoding v2.8.0 +│ │ │ │ ├── http v0.2.12 (*) +│ │ │ │ ├── httparse v1.10.1 +│ │ │ │ ├── log v0.4.27 (*) +│ │ │ │ ├── rand v0.8.5 (*) +│ │ │ │ ├── rustls v0.21.12 (*) +│ │ │ │ ├── sha1 v0.10.6 (*) +│ │ │ │ ├── thiserror v1.0.69 (*) +│ │ │ │ ├── url v2.5.4 (*) +│ │ │ │ ├── utf-8 v0.7.6 +│ │ │ │ └── webpki-roots v0.24.0 +│ │ │ │ └── rustls-webpki v0.101.7 (*) +│ │ │ └── webpki-roots v0.25.4 +│ │ ├── tungstenite v0.20.1 (*) +│ │ └── url v2.5.4 (*) +│ ├── solana-quic-client v1.18.22 +│ │ ├── async-mutex v1.4.1 +│ │ │ └── event-listener v2.5.3 +│ │ ├── async-trait v0.1.88 (proc-macro) (*) +│ │ ├── futures v0.3.31 (*) +│ │ ├── itertools v0.10.5 (*) +│ │ ├── lazy_static v1.5.0 +│ │ ├── log v0.4.27 (*) +│ │ ├── quinn v0.10.2 (*) +│ │ ├── quinn-proto v0.10.6 (*) +│ │ ├── rcgen v0.10.0 (*) +│ │ ├── rustls v0.21.12 (*) +│ │ ├── solana-connection-cache v1.18.22 (*) +│ │ ├── solana-measure v1.18.22 (*) +│ │ ├── solana-metrics v1.18.22 (*) +│ │ ├── solana-net-utils v1.18.22 +│ │ │ ├── bincode v1.3.3 (*) +│ │ │ ├── clap v3.2.25 (*) +│ │ │ ├── crossbeam-channel v0.5.14 (*) +│ │ │ ├── log v0.4.27 (*) +│ │ │ ├── nix v0.26.4 +│ │ │ │ ├── bitflags v1.3.2 +│ │ │ │ ├── cfg-if v1.0.0 +│ │ │ │ ├── libc v0.2.171 +│ │ │ │ ├── memoffset v0.7.1 +│ │ │ │ │ [build-dependencies] +│ │ │ │ │ └── autocfg v1.4.0 +│ │ │ │ └── pin-utils v0.1.0 +│ │ │ ├── rand v0.8.5 (*) +│ │ │ ├── serde v1.0.219 (*) +│ │ │ ├── serde_derive v1.0.219 (proc-macro) (*) +│ │ │ ├── socket2 v0.5.9 (*) +│ │ │ ├── solana-logger v1.18.22 (*) +│ │ │ ├── solana-sdk v1.18.22 (*) +│ │ │ ├── solana-version v1.18.22 (*) +│ │ │ ├── tokio v1.44.1 (*) +│ │ │ └── url v2.5.4 (*) +│ │ ├── solana-rpc-client-api v1.18.22 (*) +│ │ ├── solana-sdk v1.18.22 (*) +│ │ ├── solana-streamer v1.18.22 +│ │ │ ├── async-channel v1.9.0 (*) +│ │ │ ├── bytes v1.10.1 +│ │ │ ├── crossbeam-channel v0.5.14 (*) +│ │ │ ├── futures-util v0.3.31 (*) +│ │ │ ├── histogram v0.6.9 +│ │ │ ├── indexmap v2.8.0 (*) +│ │ │ ├── itertools v0.10.5 (*) +│ │ │ ├── libc v0.2.171 +│ │ │ ├── log v0.4.27 (*) +│ │ │ ├── nix v0.26.4 (*) +│ │ │ ├── pem v1.1.1 (*) +│ │ │ ├── percentage v0.1.0 (*) +│ │ │ ├── pkcs8 v0.8.0 +│ │ │ │ ├── der v0.5.1 +│ │ │ │ │ └── const-oid v0.7.1 +│ │ │ │ ├── spki v0.5.4 +│ │ │ │ │ ├── base64ct v1.7.3 +│ │ │ │ │ └── der v0.5.1 (*) +│ │ │ │ └── zeroize v1.3.0 (*) +│ │ │ ├── quinn v0.10.2 (*) +│ │ │ ├── quinn-proto v0.10.6 (*) +│ │ │ ├── rand v0.8.5 (*) +│ │ │ ├── rcgen v0.10.0 (*) +│ │ │ ├── rustls v0.21.12 (*) +│ │ │ ├── smallvec v1.14.0 +│ │ │ ├── solana-metrics v1.18.22 (*) +│ │ │ ├── solana-perf v1.18.22 +│ │ │ │ ├── ahash v0.8.11 (*) +│ │ │ │ ├── bincode v1.3.3 (*) +│ │ │ │ ├── bv v0.11.1 (*) +│ │ │ │ ├── curve25519-dalek v3.2.1 (*) +│ │ │ │ ├── dlopen2 v0.5.0 +│ │ │ │ │ ├── dlopen2_derive v0.3.0 (proc-macro) +│ │ │ │ │ │ ├── proc-macro2 v1.0.94 (*) +│ │ │ │ │ │ ├── quote v1.0.40 (*) +│ │ │ │ │ │ └── syn v2.0.100 (*) +│ │ │ │ │ ├── libc v0.2.171 +│ │ │ │ │ └── once_cell v1.21.3 +│ │ │ │ ├── fnv v1.0.7 +│ │ │ │ ├── lazy_static v1.5.0 +│ │ │ │ ├── log v0.4.27 (*) +│ │ │ │ ├── rand v0.8.5 (*) +│ │ │ │ ├── rayon v1.10.0 (*) +│ │ │ │ ├── serde v1.0.219 (*) +│ │ │ │ ├── solana-frozen-abi v1.18.22 (*) +│ │ │ │ ├── solana-frozen-abi-macro v1.18.22 (proc-macro) (*) +│ │ │ │ ├── solana-metrics v1.18.22 (*) +│ │ │ │ ├── solana-rayon-threadlimit v1.18.22 +│ │ │ │ │ ├── lazy_static v1.5.0 +│ │ │ │ │ └── num_cpus v1.16.0 +│ │ │ │ │ └── libc v0.2.171 +│ │ │ │ ├── solana-sdk v1.18.22 (*) +│ │ │ │ └── solana-vote-program v1.18.22 +│ │ │ │ ├── bincode v1.3.3 (*) +│ │ │ │ ├── log v0.4.27 (*) +│ │ │ │ ├── num-derive v0.4.2 (proc-macro) (*) +│ │ │ │ ├── num-traits v0.2.19 (*) +│ │ │ │ ├── serde v1.0.219 (*) +│ │ │ │ ├── serde_derive v1.0.219 (proc-macro) (*) +│ │ │ │ ├── solana-frozen-abi v1.18.22 (*) +│ │ │ │ ├── solana-frozen-abi-macro v1.18.22 (proc-macro) (*) +│ │ │ │ ├── solana-metrics v1.18.22 (*) +│ │ │ │ ├── solana-program v1.18.22 (*) +│ │ │ │ ├── solana-program-runtime v1.18.22 (*) +│ │ │ │ ├── solana-sdk v1.18.22 (*) +│ │ │ │ └── thiserror v1.0.69 (*) +│ │ │ │ [build-dependencies] +│ │ │ │ └── rustc_version v0.4.1 (*) +│ │ │ │ [build-dependencies] +│ │ │ │ └── rustc_version v0.4.1 (*) +│ │ │ ├── solana-sdk v1.18.22 (*) +│ │ │ ├── thiserror v1.0.69 (*) +│ │ │ ├── tokio v1.44.1 (*) +│ │ │ └── x509-parser v0.14.0 +│ │ │ ├── asn1-rs v0.5.2 +│ │ │ │ ├── asn1-rs-derive v0.4.0 (proc-macro) +│ │ │ │ │ ├── proc-macro2 v1.0.94 (*) +│ │ │ │ │ ├── quote v1.0.40 (*) +│ │ │ │ │ ├── syn v1.0.109 (*) +│ │ │ │ │ └── synstructure v0.12.6 +│ │ │ │ │ ├── proc-macro2 v1.0.94 (*) +│ │ │ │ │ ├── quote v1.0.40 (*) +│ │ │ │ │ ├── syn v1.0.109 (*) +│ │ │ │ │ └── unicode-xid v0.2.6 +│ │ │ │ ├── asn1-rs-impl v0.1.0 (proc-macro) +│ │ │ │ │ ├── proc-macro2 v1.0.94 (*) +│ │ │ │ │ ├── quote v1.0.40 (*) +│ │ │ │ │ └── syn v1.0.109 (*) +│ │ │ │ ├── displaydoc v0.2.5 (proc-macro) (*) +│ │ │ │ ├── nom v7.1.3 (*) +│ │ │ │ ├── num-traits v0.2.19 (*) +│ │ │ │ ├── rusticata-macros v4.1.0 +│ │ │ │ │ └── nom v7.1.3 (*) +│ │ │ │ ├── thiserror v1.0.69 (*) +│ │ │ │ └── time v0.3.41 (*) +│ │ │ ├── base64 v0.13.1 +│ │ │ ├── data-encoding v2.8.0 +│ │ │ ├── der-parser v8.2.0 +│ │ │ │ ├── asn1-rs v0.5.2 (*) +│ │ │ │ ├── displaydoc v0.2.5 (proc-macro) (*) +│ │ │ │ ├── nom v7.1.3 (*) +│ │ │ │ ├── num-bigint v0.4.6 (*) +│ │ │ │ ├── num-traits v0.2.19 (*) +│ │ │ │ └── rusticata-macros v4.1.0 (*) +│ │ │ ├── lazy_static v1.5.0 +│ │ │ ├── nom v7.1.3 (*) +│ │ │ ├── oid-registry v0.6.1 +│ │ │ │ └── asn1-rs v0.5.2 (*) +│ │ │ ├── rusticata-macros v4.1.0 (*) +│ │ │ ├── thiserror v1.0.69 (*) +│ │ │ └── time v0.3.41 (*) +│ │ ├── thiserror v1.0.69 (*) +│ │ └── tokio v1.44.1 (*) +│ ├── solana-rpc-client v1.18.22 +│ │ ├── async-trait v0.1.88 (proc-macro) (*) +│ │ ├── base64 v0.21.7 +│ │ ├── bincode v1.3.3 (*) +│ │ ├── bs58 v0.4.0 +│ │ ├── indicatif v0.17.11 (*) +│ │ ├── log v0.4.27 (*) +│ │ ├── reqwest v0.11.27 (*) +│ │ ├── semver v1.0.26 +│ │ ├── serde v1.0.219 (*) +│ │ ├── serde_derive v1.0.219 (proc-macro) (*) +│ │ ├── serde_json v1.0.140 (*) +│ │ ├── solana-account-decoder v1.18.22 (*) +│ │ ├── solana-rpc-client-api v1.18.22 (*) +│ │ ├── solana-sdk v1.18.22 (*) +│ │ ├── solana-transaction-status v1.18.22 (*) +│ │ ├── solana-version v1.18.22 (*) +│ │ ├── solana-vote-program v1.18.22 (*) +│ │ └── tokio v1.44.1 (*) +│ ├── solana-rpc-client-api v1.18.22 (*) +│ ├── solana-rpc-client-nonce-utils v1.18.22 +│ │ ├── clap v2.34.0 +│ │ │ ├── ansi_term v0.12.1 +│ │ │ ├── atty v0.2.14 (*) +│ │ │ ├── bitflags v1.3.2 +│ │ │ ├── strsim v0.8.0 +│ │ │ ├── textwrap v0.11.0 +│ │ │ │ └── unicode-width v0.1.14 +│ │ │ ├── unicode-width v0.1.14 +│ │ │ └── vec_map v0.8.2 +│ │ ├── solana-clap-utils v1.18.22 +│ │ │ ├── chrono v0.4.40 (*) +│ │ │ ├── clap v2.34.0 (*) +│ │ │ ├── rpassword v7.3.1 +│ │ │ │ ├── libc v0.2.171 +│ │ │ │ └── rtoolbox v0.0.2 +│ │ │ │ └── libc v0.2.171 +│ │ │ ├── solana-remote-wallet v1.18.22 +│ │ │ │ ├── console v0.15.11 (*) +│ │ │ │ ├── dialoguer v0.10.4 +│ │ │ │ │ ├── console v0.15.11 (*) +│ │ │ │ │ ├── shell-words v1.1.0 +│ │ │ │ │ ├── tempfile v3.19.1 (*) +│ │ │ │ │ └── zeroize v1.3.0 (*) +│ │ │ │ ├── log v0.4.27 (*) +│ │ │ │ ├── num-derive v0.4.2 (proc-macro) (*) +│ │ │ │ ├── num-traits v0.2.19 (*) +│ │ │ │ ├── parking_lot v0.12.3 (*) +│ │ │ │ ├── qstring v0.7.2 (*) +│ │ │ │ ├── semver v1.0.26 +│ │ │ │ ├── solana-sdk v1.18.22 (*) +│ │ │ │ ├── thiserror v1.0.69 (*) +│ │ │ │ └── uriparse v0.6.4 (*) +│ │ │ ├── solana-sdk v1.18.22 (*) +│ │ │ ├── thiserror v1.0.69 (*) +│ │ │ ├── tiny-bip39 v0.8.2 (*) +│ │ │ ├── uriparse v0.6.4 (*) +│ │ │ └── url v2.5.4 (*) +│ │ ├── solana-rpc-client v1.18.22 (*) +│ │ ├── solana-sdk v1.18.22 (*) +│ │ └── thiserror v1.0.69 (*) +│ ├── solana-sdk v1.18.22 (*) +│ ├── solana-streamer v1.18.22 (*) +│ ├── solana-thin-client v1.18.22 +│ │ ├── bincode v1.3.3 (*) +│ │ ├── log v0.4.27 (*) +│ │ ├── rayon v1.10.0 (*) +│ │ ├── solana-connection-cache v1.18.22 (*) +│ │ ├── solana-rpc-client v1.18.22 (*) +│ │ ├── solana-rpc-client-api v1.18.22 (*) +│ │ └── solana-sdk v1.18.22 (*) +│ ├── solana-tpu-client v1.18.22 +│ │ ├── async-trait v0.1.88 (proc-macro) (*) +│ │ ├── bincode v1.3.3 (*) +│ │ ├── futures-util v0.3.31 (*) +│ │ ├── indexmap v2.8.0 (*) +│ │ ├── indicatif v0.17.11 (*) +│ │ ├── log v0.4.27 (*) +│ │ ├── rayon v1.10.0 (*) +│ │ ├── solana-connection-cache v1.18.22 (*) +│ │ ├── solana-measure v1.18.22 (*) +│ │ ├── solana-metrics v1.18.22 (*) +│ │ ├── solana-pubsub-client v1.18.22 (*) +│ │ ├── solana-rpc-client v1.18.22 (*) +│ │ ├── solana-rpc-client-api v1.18.22 (*) +│ │ ├── solana-sdk v1.18.22 (*) +│ │ ├── thiserror v1.0.69 (*) +│ │ └── tokio v1.44.1 (*) +│ ├── solana-udp-client v1.18.22 +│ │ ├── async-trait v0.1.88 (proc-macro) (*) +│ │ ├── solana-connection-cache v1.18.22 (*) +│ │ ├── solana-net-utils v1.18.22 (*) +│ │ ├── solana-sdk v1.18.22 (*) +│ │ ├── solana-streamer v1.18.22 (*) +│ │ ├── thiserror v1.0.69 (*) +│ │ └── tokio v1.44.1 (*) +│ ├── thiserror v1.0.69 (*) +│ └── tokio v1.44.1 (*) +├── solana-program v1.18.22 (*) +├── solana-sdk v1.18.22 (*) +├── solana-transaction-status v1.18.22 (*) +├── sqlx v0.6.3 (*) +├── thiserror v1.0.69 (*) +├── tokio v1.44.1 (*) +├── tower v0.4.13 (*) +├── tower-http v0.3.5 +│ ├── async-compression v0.3.15 +│ │ ├── brotli v3.5.0 +│ │ │ ├── alloc-no-stdlib v2.0.4 +│ │ │ ├── alloc-stdlib v0.2.2 (*) +│ │ │ └── brotli-decompressor v2.5.1 +│ │ │ ├── alloc-no-stdlib v2.0.4 +│ │ │ └── alloc-stdlib v0.2.2 (*) +│ │ ├── flate2 v1.1.1 (*) +│ │ ├── futures-core v0.3.31 +│ │ ├── memchr v2.7.4 +│ │ ├── pin-project-lite v0.2.16 +│ │ └── tokio v1.44.1 (*) +│ ├── base64 v0.13.1 +│ ├── bitflags v1.3.2 +│ ├── bytes v1.10.1 +│ ├── futures-core v0.3.31 +│ ├── futures-util v0.3.31 (*) +│ ├── http v0.2.12 (*) +│ ├── http-body v0.4.6 (*) +│ ├── http-range-header v0.3.1 +│ ├── httpdate v1.0.3 +│ ├── iri-string v0.4.1 +│ │ └── nom v7.1.3 (*) +│ ├── mime v0.3.17 +│ ├── mime_guess v2.0.5 +│ │ ├── mime v0.3.17 +│ │ └── unicase v2.8.1 +│ │ [build-dependencies] +│ │ └── unicase v2.8.1 +│ ├── percent-encoding v2.3.1 +│ ├── pin-project-lite v0.2.16 +│ ├── tokio v1.44.1 (*) +│ ├── tokio-util v0.7.14 (*) +│ ├── tower v0.4.13 (*) +│ ├── tower-layer v0.3.3 +│ ├── tower-service v0.3.3 +│ ├── tracing v0.1.41 (*) +│ └── uuid v1.16.0 (*) +├── tracing v0.1.41 (*) +├── tracing-subscriber v0.3.19 (*) +├── utoipa v4.2.3 +│ ├── indexmap v2.8.0 (*) +│ ├── serde v1.0.219 (*) +│ ├── serde_json v1.0.140 (*) +│ ├── serde_yaml v0.9.34+deprecated +│ │ ├── indexmap v2.8.0 (*) +│ │ ├── itoa v1.0.15 +│ │ ├── ryu v1.0.20 +│ │ ├── serde v1.0.219 (*) +│ │ └── unsafe-libyaml v0.2.11 +│ └── utoipa-gen v4.3.1 (proc-macro) +│ ├── proc-macro-error v1.0.4 (*) +│ ├── proc-macro2 v1.0.94 (*) +│ ├── quote v1.0.40 (*) +│ └── syn v2.0.100 (*) +├── yellowstone-grpc-client v1.15.4 +│ ├── bytes v1.10.1 +│ ├── futures v0.3.31 (*) +│ ├── thiserror v1.0.69 (*) +│ ├── tonic v0.10.2 +│ │ ├── async-stream v0.3.6 (*) +│ │ ├── async-trait v0.1.88 (proc-macro) (*) +│ │ ├── axum v0.6.20 +│ │ │ ├── async-trait v0.1.88 (proc-macro) (*) +│ │ │ ├── axum-core v0.3.4 +│ │ │ │ ├── async-trait v0.1.88 (proc-macro) (*) +│ │ │ │ ├── bytes v1.10.1 +│ │ │ │ ├── futures-util v0.3.31 (*) +│ │ │ │ ├── http v0.2.12 (*) +│ │ │ │ ├── http-body v0.4.6 (*) +│ │ │ │ ├── mime v0.3.17 +│ │ │ │ ├── tower-layer v0.3.3 +│ │ │ │ └── tower-service v0.3.3 +│ │ │ │ [build-dependencies] +│ │ │ │ └── rustversion v1.0.20 (proc-macro) +│ │ │ ├── bitflags v1.3.2 +│ │ │ ├── bytes v1.10.1 +│ │ │ ├── futures-util v0.3.31 (*) +│ │ │ ├── http v0.2.12 (*) +│ │ │ ├── http-body v0.4.6 (*) +│ │ │ ├── hyper v0.14.32 (*) +│ │ │ ├── itoa v1.0.15 +│ │ │ ├── matchit v0.7.3 +│ │ │ ├── memchr v2.7.4 +│ │ │ ├── mime v0.3.17 +│ │ │ ├── percent-encoding v2.3.1 +│ │ │ ├── pin-project-lite v0.2.16 +│ │ │ ├── serde v1.0.219 (*) +│ │ │ ├── sync_wrapper v0.1.2 +│ │ │ ├── tower v0.4.13 (*) +│ │ │ ├── tower-layer v0.3.3 +│ │ │ └── tower-service v0.3.3 +│ │ │ [build-dependencies] +│ │ │ └── rustversion v1.0.20 (proc-macro) +│ │ ├── base64 v0.21.7 +│ │ ├── bytes v1.10.1 +│ │ ├── h2 v0.3.26 (*) +│ │ ├── http v0.2.12 (*) +│ │ ├── http-body v0.4.6 (*) +│ │ ├── hyper v0.14.32 (*) +│ │ ├── hyper-timeout v0.4.1 +│ │ │ ├── hyper v0.14.32 (*) +│ │ │ ├── pin-project-lite v0.2.16 +│ │ │ ├── tokio v1.44.1 (*) +│ │ │ └── tokio-io-timeout v1.2.0 +│ │ │ ├── pin-project-lite v0.2.16 +│ │ │ └── tokio v1.44.1 (*) +│ │ ├── percent-encoding v2.3.1 +│ │ ├── pin-project v1.1.10 (*) +│ │ ├── prost v0.12.6 +│ │ │ ├── bytes v1.10.1 +│ │ │ └── prost-derive v0.12.6 (proc-macro) +│ │ │ ├── anyhow v1.0.97 +│ │ │ ├── itertools v0.12.1 +│ │ │ │ └── either v1.15.0 (*) +│ │ │ ├── proc-macro2 v1.0.94 (*) +│ │ │ ├── quote v1.0.40 (*) +│ │ │ └── syn v2.0.100 (*) +│ │ ├── rustls v0.21.12 (*) +│ │ ├── rustls-native-certs v0.6.3 (*) +│ │ ├── rustls-pemfile v1.0.4 (*) +│ │ ├── tokio v1.44.1 (*) +│ │ ├── tokio-rustls v0.24.1 (*) +│ │ ├── tokio-stream v0.1.17 (*) +│ │ ├── tower v0.4.13 (*) +│ │ ├── tower-layer v0.3.3 +│ │ ├── tower-service v0.3.3 +│ │ └── tracing v0.1.41 (*) +│ ├── tonic-health v0.10.2 +│ │ ├── async-stream v0.3.6 (*) +│ │ ├── prost v0.12.6 (*) +│ │ ├── tokio v1.44.1 (*) +│ │ ├── tokio-stream v0.1.17 (*) +│ │ └── tonic v0.10.2 (*) +│ └── yellowstone-grpc-proto v1.14.2 +│ ├── bincode v1.3.3 (*) +│ ├── prost v0.12.6 (*) +│ ├── solana-account-decoder v1.18.22 (*) +│ ├── solana-sdk v1.18.22 (*) +│ ├── solana-transaction-status v1.18.22 (*) +│ └── tonic v0.10.2 (*) +│ [build-dependencies] +│ ├── anyhow v1.0.97 +│ ├── protobuf-src v1.1.0+21.5 +│ │ [build-dependencies] +│ │ └── autotools v0.2.7 +│ │ └── cc v1.2.17 (*) +│ └── tonic-build v0.10.2 +│ ├── prettyplease v0.2.31 +│ │ ├── proc-macro2 v1.0.94 (*) +│ │ └── syn v2.0.100 (*) +│ ├── proc-macro2 v1.0.94 (*) +│ ├── prost-build v0.12.6 +│ │ ├── bytes v1.10.1 +│ │ ├── heck v0.5.0 +│ │ ├── itertools v0.12.1 (*) +│ │ ├── log v0.4.27 +│ │ ├── multimap v0.10.0 +│ │ ├── once_cell v1.21.3 +│ │ ├── petgraph v0.6.5 +│ │ │ ├── fixedbitset v0.4.2 +│ │ │ └── indexmap v2.8.0 (*) +│ │ ├── prettyplease v0.2.31 (*) +│ │ ├── prost v0.12.6 +│ │ │ ├── bytes v1.10.1 +│ │ │ └── prost-derive v0.12.6 (proc-macro) (*) +│ │ ├── prost-types v0.12.6 +│ │ │ └── prost v0.12.6 (*) +│ │ ├── regex v1.11.1 (*) +│ │ ├── syn v2.0.100 (*) +│ │ └── tempfile v3.19.1 (*) +│ ├── quote v1.0.40 (*) +│ └── syn v2.0.100 (*) +└── yellowstone-grpc-proto v1.14.2 (*) +[dev-dependencies] +├── function_name v0.3.0 +│ └── function_name-proc-macro v0.3.0 (proc-macro) +├── light-hasher v1.1.0 (https://github.com/Lightprotocol/light-protocol?rev=236481dd3316eadff722247a497f454fa17e0915#236481dd) (*) +└── serial_test v2.0.0 + ├── dashmap v5.5.3 (*) + ├── futures v0.3.31 (*) + ├── lazy_static v1.5.0 + ├── log v0.4.27 (*) + ├── parking_lot v0.12.3 (*) + └── serial_test_derive v2.0.0 (proc-macro) + ├── proc-macro2 v1.0.94 (*) + ├── quote v1.0.40 (*) + └── syn v2.0.100 (*)