diff --git a/Cargo.lock b/Cargo.lock index 47db692..3a4e5b3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -14,6 +14,12 @@ dependencies = [ "zerocopy", ] +[[package]] +name = "allocator-api2" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" + [[package]] name = "android_system_properties" version = "0.1.5" @@ -23,12 +29,6 @@ dependencies = [ "libc", ] -[[package]] -name = "anyhow" -version = "1.0.102" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c" - [[package]] name = "arbitrary" version = "1.3.2" @@ -44,10 +44,33 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c775f0d12169cba7aae4caeb547bb6a50781c7449a8aa53793827c9ec4abf488" dependencies = [ - "ark-ec", - "ark-ff", - "ark-serialize", - "ark-std", + "ark-ec 0.4.2", + "ark-ff 0.4.2", + "ark-serialize 0.4.2", + "ark-std 0.4.0", +] + +[[package]] +name = "ark-bls12-381" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3df4dcc01ff89867cd86b0da835f23c3f02738353aaee7dde7495af71363b8d5" +dependencies = [ + "ark-ec 0.5.0", + "ark-ff 0.5.0", + "ark-serialize 0.5.0", + "ark-std 0.5.0", +] + +[[package]] +name = "ark-bn254" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d69eab57e8d2663efa5c63135b2af4f396d66424f88954c21104125ab6b3e6bc" +dependencies = [ + "ark-ec 0.5.0", + "ark-ff 0.5.0", + "ark-std 0.5.0", ] [[package]] @@ -56,13 +79,34 @@ 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", + "itertools 0.10.5", + "num-traits", + "zeroize", +] + +[[package]] +name = "ark-ec" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43d68f2d516162846c1238e755a7c4d131b892b70cc70c471a8e3ca3ed818fce" +dependencies = [ + "ahash", + "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.5", + "itertools 0.13.0", + "num-bigint", + "num-integer", "num-traits", "zeroize", ] @@ -73,13 +117,13 @@ 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", - "itertools", + "itertools 0.10.5", "num-bigint", "num-traits", "paste", @@ -87,6 +131,26 @@ dependencies = [ "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", + "educe", + "itertools 0.13.0", + "num-bigint", + "num-traits", + "paste", + "zeroize", +] + [[package]] name = "ark-ff-asm" version = "0.4.2" @@ -97,6 +161,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.118", +] + [[package]] name = "ark-ff-macros" version = "0.4.2" @@ -110,27 +184,68 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "ark-ff-macros" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09be120733ee33f7693ceaa202ca41accd5653b779563608f1234f78ae07c4b3" +dependencies = [ + "num-bigint", + "num-traits", + "proc-macro2", + "quote", + "syn 2.0.118", +] + [[package]] name = "ark-poly" 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", ] +[[package]] +name = "ark-poly" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "579305839da207f02b89cd1679e50e67b4331e2f9294a57693e5051b7703fe27" +dependencies = [ + "ahash", + "ark-ff 0.5.0", + "ark-serialize 0.5.0", + "ark-std 0.5.0", + "educe", + "fnv", + "hashbrown 0.15.5", +] + [[package]] name = "ark-serialize" 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", + "num-bigint", +] + +[[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", "num-bigint", ] @@ -146,6 +261,17 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "ark-serialize-derive" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "213888f660fddcca0d257e88e54ac05bca01885f258ccdf695bafd77031bb69d" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.118", +] + [[package]] name = "ark-std" version = "0.4.0" @@ -156,6 +282,22 @@ dependencies = [ "rand 0.8.6", ] +[[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.6", +] + +[[package]] +name = "arrayvec" +version = "0.7.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f02882884d3e1bc524fb12c79f107f6ad0e1cfd498c536ffb494301740995dfe" + [[package]] name = "autocfg" version = "1.5.1" @@ -191,7 +333,16 @@ name = "bc-forge-admin" version = "0.1.0" dependencies = [ "bc-forge-ttl", - "soroban-sdk", + "soroban-sdk 26.1.0", +] + +[[package]] +name = "bc-forge-e2e-tests" +version = "0.1.0" +dependencies = [ + "bc-forge-token", + "soroban-sdk 26.1.0", + "tokio", ] [[package]] @@ -199,14 +350,14 @@ name = "bc-forge-lifecycle" version = "0.1.0" dependencies = [ "bc-forge-ttl", - "soroban-sdk", + "soroban-sdk 26.1.0", ] [[package]] name = "bc-forge-rate-limit" version = "0.1.0" dependencies = [ - "soroban-sdk", + "soroban-sdk 26.1.0", ] [[package]] @@ -218,23 +369,14 @@ dependencies = [ "bc-forge-rate-limit", "bc-forge-ttl", "proptest", - "soroban-sdk", + "soroban-sdk 26.1.0", ] [[package]] name = "bc-forge-ttl" version = "0.1.0" dependencies = [ - "soroban-sdk", -] - -[[package]] -name = "bc-forge-vesting" -version = "0.1.0" -dependencies = [ - "bc-forge-admin", - "bc-forge-token", - "soroban-sdk", + "soroban-sdk 26.1.0", ] [[package]] @@ -243,8 +385,7 @@ version = "0.1.0" dependencies = [ "bc-forge-admin", "bc-forge-lifecycle", - "bc-forge-token", - "soroban-sdk", + "soroban-sdk 22.0.11", ] [[package]] @@ -264,9 +405,9 @@ checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" [[package]] name = "bitflags" -version = "2.12.1" +version = "2.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84d7ced0ae9557296835c32bf1b1e02b44c746701f898460fb000d7eaa84f00a" +checksum = "b4388bee8683e3d04af747c73422af53102d2bd24d9eadb6cbc100baef4b43f8" [[package]] name = "block-buffer" @@ -292,6 +433,18 @@ version = "3.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649" +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "bytes" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ae3f5d315924270530207e2a68396c3cc547f6dca3fbdca317cfb1a51edb593" + [[package]] name = "bytes-lit" version = "0.0.5" @@ -301,14 +454,14 @@ dependencies = [ "num-bigint", "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.118", ] [[package]] name = "cc" -version = "1.2.63" +version = "1.2.65" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "556e016178bb5662a08681bbe0f00f8e17631781a4dfc8c45e466e4b185ec27f" +checksum = "e228eec9be7c17ccb640b59b36a5cd805ea2a564a4c5e162c2f659fea30d3b96" dependencies = [ "find-msvc-tools", "shlex", @@ -320,11 +473,22 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" +[[package]] +name = "cfg_eval" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45565fc9416b9896014f5732ac776f810ee53a66730c17e4020c3ec064a8f88f" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.118", +] + [[package]] name = "chrono" -version = "0.4.44" +version = "0.4.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c673075a2e0e5f4a1dde27ce9dee1ea4558c7ffe648f576438a20ca1d2acc4b0" +checksum = "1aa79e62e7697b8e29b513a68abacf485adcd1fe8284a4316c5ae868e6633327" dependencies = [ "iana-time-zone", "num-traits", @@ -393,9 +557,25 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a2785755761f3ddc1492979ce1e48d2c00d09311c39e4466429188f3dd6501" dependencies = [ "quote", - "syn 2.0.117", + "syn 2.0.118", +] + +[[package]] +name = "ctor" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67773048316103656a637612c4a62477603b777d91d9c62ff2290f9cde178fdb" +dependencies = [ + "ctor-proc-macro", + "dtor", ] +[[package]] +name = "ctor-proc-macro" +version = "0.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2931af7e13dc045d8e9d26afccc6fa115d64e115c9c84b1166288b46f6782c2" + [[package]] name = "curve25519-dalek" version = "4.1.3" @@ -420,7 +600,7 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.118", ] [[package]] @@ -454,7 +634,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.117", + "syn 2.0.118", ] [[package]] @@ -467,7 +647,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.117", + "syn 2.0.118", ] [[package]] @@ -478,7 +658,7 @@ checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" dependencies = [ "darling_core 0.20.11", "quote", - "syn 2.0.117", + "syn 2.0.118", ] [[package]] @@ -489,7 +669,7 @@ checksum = "ac3984ec7bd6cfa798e62b4a642426a5be0e68f9401cfc2a01e3fa9ea2fcdb8d" dependencies = [ "darling_core 0.23.0", "quote", - "syn 2.0.117", + "syn 2.0.118", ] [[package]] @@ -514,7 +694,6 @@ version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c" dependencies = [ - "powerfmt", "serde_core", ] @@ -537,7 +716,7 @@ checksum = "67e77553c4162a157adbf834ebae5b415acbecbeafc7a74b0e886657506a7611" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.118", ] [[package]] @@ -558,6 +737,21 @@ version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" +[[package]] +name = "dtor" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "404d02eeb088a82cfd873006cb713fe411306c7d182c344905e101fb1167d301" +dependencies = [ + "dtor-proc-macro", +] + +[[package]] +name = "dtor-proc-macro" +version = "0.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f678cf4a922c215c63e0de95eb1ff08a958a81d47e485cf9da1e27bf6305cfa5" + [[package]] name = "dyn-clone" version = "1.0.20" @@ -602,6 +796,18 @@ dependencies = [ "zeroize", ] +[[package]] +name = "educe" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d7bc049e1bd8cdeb31b68bbd586a9464ecf9f3944af3958a7a9d0f8b9799417" +dependencies = [ + "enum-ordinalize", + "proc-macro2", + "quote", + "syn 2.0.118", +] + [[package]] name = "either" version = "1.16.0" @@ -626,6 +832,26 @@ dependencies = [ "zeroize", ] +[[package]] +name = "enum-ordinalize" +version = "4.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a1091a7bb1f8f2c4b28f1fe2cef4980ca2d410a3d727d67ecc3178c9b0800f0" +dependencies = [ + "enum-ordinalize-derive", +] + +[[package]] +name = "enum-ordinalize-derive" +version = "4.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ca9601fb2d62598ee17836250842873a413586e5d7ed88b356e38ddbb0ec631" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.118", +] + [[package]] name = "equivalent" version = "1.0.2" @@ -688,12 +914,6 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" -[[package]] -name = "foldhash" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" - [[package]] name = "futures-core" version = "0.3.32" @@ -756,15 +976,13 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.4.2" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0de51e6874e94e7bf76d726fc5d13ba782deca734ff60d5bb2fb2607c7406555" +checksum = "300e883d756b2e4ec94e02791f39b04b522276138852cfc41d9fb7e904106099" dependencies = [ "cfg-if", "libc", "r-efi 6.0.0", - "wasip2", - "wasip3", ] [[package]] @@ -778,6 +996,15 @@ dependencies = [ "subtle", ] +[[package]] +name = "hash32" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47d60b12902ba28e2730cd37e95b8c9223af2808df9e902d4df49588d1470606" +dependencies = [ + "byteorder", +] + [[package]] name = "hashbrown" version = "0.12.3" @@ -799,7 +1026,7 @@ version = "0.15.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" dependencies = [ - "foldhash", + "allocator-api2", ] [[package]] @@ -808,6 +1035,16 @@ version = "0.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a" +[[package]] +name = "heapless" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bfb9eb618601c89945a70e254898da93b13be0388091d42117462b265bb3fad" +dependencies = [ + "hash32", + "stable_deref_trait", +] + [[package]] name = "heck" version = "0.5.0" @@ -862,12 +1099,6 @@ dependencies = [ "cc", ] -[[package]] -name = "id-arena" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954" - [[package]] name = "ident_case" version = "1.0.1" @@ -912,6 +1143,15 @@ 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.18" @@ -920,13 +1160,12 @@ checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" [[package]] name = "js-sys" -version = "0.3.99" +version = "0.3.102" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "142bc4740e452c1e57ade0cbc129f139c9093e354346f0872ef985f4f5cf5f11" +checksum = "03d04c30968dffe80775bd4d7fb676131cd04a1fb46d2686dbffbaec2d9dfd31" dependencies = [ "cfg-if", "futures-util", - "once_cell", "wasm-bindgen", ] @@ -951,12 +1190,6 @@ dependencies = [ "cpufeatures", ] -[[package]] -name = "leb128fmt" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" - [[package]] name = "libc" version = "0.2.186" @@ -975,17 +1208,48 @@ version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53" +[[package]] +name = "lock_api" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" +dependencies = [ + "scopeguard", +] + [[package]] name = "log" -version = "0.4.31" +version = "0.4.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ceec5bc11778974d1bcb055b18002eba7f4b3518b6a0081b3af5f21666da9ad" + +[[package]] +name = "macro-string" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "113b30b4cd05f7c06868fdb2854f66a7b9fece9a48425351cd532e810d74024f" +checksum = "1b27834086c65ec3f9387b096d66e99f221cf081c2b738042aa252bcd41204e3" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.118", +] [[package]] name = "memchr" -version = "2.8.1" +version = "2.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88904434abc2901f197fe8cc55f0445e7ded921dba5911dad2e2b39b48e663c4" + +[[package]] +name = "mio" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b947ae49db0d222b1dbc6b113ce7248a3fc3a6ca21b696717bfc000ba4484d8" +checksum = "02bd0af71c67b473010cbbc60715ee815645a4dc942899111f494b4b737d6fda" +dependencies = [ + "libc", + "wasi", + "windows-sys", +] [[package]] name = "num-bigint" @@ -1011,7 +1275,7 @@ checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.118", ] [[package]] @@ -1050,6 +1314,29 @@ dependencies = [ "sha2", ] +[[package]] +name = "parking_lot" +version = "0.12.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "smallvec", + "windows-link", +] + [[package]] name = "paste" version = "1.0.15" @@ -1094,7 +1381,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" dependencies = [ "proc-macro2", - "syn 2.0.117", + "syn 2.0.118", ] [[package]] @@ -1142,9 +1429,9 @@ checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" [[package]] name = "quote" -version = "1.0.45" +version = "1.0.46" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" +checksum = "dfbc457d0c7a0759a614551b11a6409e5951f6c7537be1f1b7682b9ae9230368" dependencies = [ "proc-macro2", ] @@ -1229,6 +1516,15 @@ dependencies = [ "rand_core 0.9.5", ] +[[package]] +name = "redox_syscall" +version = "0.5.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" +dependencies = [ + "bitflags", +] + [[package]] name = "ref-cast" version = "1.0.25" @@ -1246,14 +1542,14 @@ checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.118", ] [[package]] name = "regex-syntax" -version = "0.8.10" +version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a" +checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4" [[package]] name = "rfc6979" @@ -1307,19 +1603,30 @@ dependencies = [ [[package]] name = "schemars" -version = "0.9.0" +version = "0.8.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cd191f9397d57d581cddd31014772520aa448f65ef991055d7f61582c65165f" +checksum = "3fbf2ae1b8bc8e02df939598064d22402220cd5bbcca1c76f7d6a310974d5615" dependencies = [ "dyn-clone", - "ref-cast", "serde", "serde_json", ] [[package]] name = "schemars" -version = "1.2.1" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cd191f9397d57d581cddd31014772520aa448f65ef991055d7f61582c65165f" +dependencies = [ + "dyn-clone", + "ref-cast", + "serde", + "serde_json", +] + +[[package]] +name = "schemars" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a2b42f36aa1cd011945615b92222f6bf73c599a102a300334cd7f8dbeec726cc" dependencies = [ @@ -1329,6 +1636,12 @@ dependencies = [ "serde_json", ] +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + [[package]] name = "sec1" version = "0.7.3" @@ -1375,7 +1688,7 @@ checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.118", ] [[package]] @@ -1393,9 +1706,9 @@ dependencies = [ [[package]] name = "serde_with" -version = "3.20.0" +version = "3.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e72c1c2cb7b223fafb600a619537a871c2818583d619401b785e7c0b746ccde2" +checksum = "76a5c54c7310e7b8b9577c286d7e399ddd876c3e12b3ed917a8aabc4b96e9e8c" dependencies = [ "base64 0.22.1", "bs58", @@ -1403,6 +1716,7 @@ dependencies = [ "hex", "indexmap 1.9.3", "indexmap 2.14.0", + "schemars 0.8.22", "schemars 0.9.0", "schemars 1.2.1", "serde_core", @@ -1413,14 +1727,14 @@ dependencies = [ [[package]] name = "serde_with_macros" -version = "3.20.0" +version = "3.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b90c488738ecb4fb0262f41f43bc40efc5868d9fb744319ddf5f5317f417bfac" +checksum = "84d57bc0c8b9a17920c178daa6bb924850d54a9c97ab45194bb8c17ad66bb660" dependencies = [ "darling 0.23.0", "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.118", ] [[package]] @@ -1450,6 +1764,16 @@ version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba" +[[package]] +name = "signal-hook-registry" +version = "1.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4db69cba1110affc0e9f7bcd48bbf87b3f4fc7c61fc9155afd4c469eb3d6c1b" +dependencies = [ + "errno", + "libc", +] + [[package]] name = "signature" version = "2.2.0" @@ -1468,9 +1792,19 @@ checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" [[package]] name = "smallvec" -version = "1.15.1" +version = "1.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" +checksum = "8ed6a63f02c8539c91a8685a86f4099661ba3da017932f6ebbea6de3f0fa7c90" + +[[package]] +name = "socket2" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52d1cfed4120b4d927bf7c0f86d2087a4a7d6027c906d9f9d525a80573b9be51" +dependencies = [ + "libc", + "windows-sys", +] [[package]] name = "soroban-builtin-sdk-macros" @@ -1478,10 +1812,22 @@ version = "22.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cf2e42bf80fcdefb3aae6ff3c7101a62cf942e95320ed5b518a1705bc11c6b2f" dependencies = [ - "itertools", + "itertools 0.10.5", "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.118", +] + +[[package]] +name = "soroban-builtin-sdk-macros" +version = "26.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35a3a2b57b132b800e132d2c81e1818359bb2cf787ca39c61c151d6bd0798403" +dependencies = [ + "itertools 0.13.0", + "proc-macro2", + "quote", + "syn 2.0.118", ] [[package]] @@ -1496,11 +1842,30 @@ dependencies = [ "num-derive", "num-traits", "serde", - "soroban-env-macros", + "soroban-env-macros 22.1.3", + "soroban-wasmi", + "static_assertions", + "stellar-xdr 22.1.0", + "wasmparser", +] + +[[package]] +name = "soroban-env-common" +version = "26.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c76fad735f9622d8aa0fa0c75838d2023a659a0c57638a783b8b2eb967f7822" +dependencies = [ + "arbitrary", + "crate-git-revision", + "ethnum", + "num-derive", + "num-traits", + "serde", + "soroban-env-macros 26.1.3", "soroban-wasmi", "static_assertions", - "stellar-xdr", - "wasmparser 0.116.1", + "stellar-xdr 26.0.1", + "wasmparser", ] [[package]] @@ -1509,7 +1874,17 @@ version = "22.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9a07dda1ae5220d975979b19ad4fd56bc86ec7ec1b4b25bc1c5d403f934e592e" dependencies = [ - "soroban-env-common", + "soroban-env-common 22.1.3", + "static_assertions", +] + +[[package]] +name = "soroban-env-guest" +version = "26.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15aeed6d7a4dc4d3bba65e2ac92f7eeaa664900bbc82e1055e024bf637d74ed3" +dependencies = [ + "soroban-env-common 26.1.3", "static_assertions", ] @@ -1519,10 +1894,10 @@ version = "22.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "66e8b03a4191d485eab03f066336112b2a50541a7553179553dc838b986b94dd" dependencies = [ - "ark-bls12-381", - "ark-ec", - "ark-ff", - "ark-serialize", + "ark-bls12-381 0.4.0", + "ark-ec 0.4.2", + "ark-ff 0.4.2", + "ark-serialize 0.4.2", "curve25519-dalek", "ecdsa", "ed25519-dalek", @@ -1541,12 +1916,49 @@ dependencies = [ "sec1", "sha2", "sha3", - "soroban-builtin-sdk-macros", - "soroban-env-common", + "soroban-builtin-sdk-macros 22.1.3", + "soroban-env-common 22.1.3", "soroban-wasmi", "static_assertions", - "stellar-strkey", - "wasmparser 0.116.1", + "stellar-strkey 0.0.9", + "wasmparser", +] + +[[package]] +name = "soroban-env-host" +version = "26.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fb523456b4efe9cdf869233cff5a2a1a5ebfae8c0acc405e57479c83781a20c" +dependencies = [ + "ark-bls12-381 0.5.0", + "ark-bn254", + "ark-ec 0.5.0", + "ark-ff 0.5.0", + "ark-serialize 0.5.0", + "curve25519-dalek", + "ecdsa", + "ed25519-dalek", + "elliptic-curve", + "generic-array", + "getrandom 0.2.17", + "hex-literal", + "hmac", + "k256", + "num-derive", + "num-integer", + "num-traits", + "p256", + "rand 0.8.6", + "rand_chacha 0.3.1", + "sec1", + "sha2", + "sha3", + "soroban-builtin-sdk-macros 26.1.3", + "soroban-env-common 26.1.3", + "soroban-wasmi", + "static_assertions", + "stellar-strkey 0.0.13", + "wasmparser", ] [[package]] @@ -1555,13 +1967,28 @@ version = "22.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "00eff744764ade3bc480e4909e3a581a240091f3d262acdce80b41f7069b2bd9" dependencies = [ - "itertools", + "itertools 0.10.5", + "proc-macro2", + "quote", + "serde", + "serde_json", + "stellar-xdr 22.1.0", + "syn 2.0.118", +] + +[[package]] +name = "soroban-env-macros" +version = "26.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ada3449bb23c964a88a1bf633ac66ca3ebac2061693f53148b199ce816791d0" +dependencies = [ + "itertools 0.13.0", "proc-macro2", "quote", "serde", "serde_json", - "stellar-xdr", - "syn 2.0.117", + "stellar-xdr 26.0.1", + "syn 2.0.118", ] [[package]] @@ -1573,8 +2000,22 @@ dependencies = [ "serde", "serde_json", "serde_with", - "soroban-env-common", - "soroban-env-host", + "soroban-env-common 22.1.3", + "soroban-env-host 22.1.3", + "thiserror", +] + +[[package]] +name = "soroban-ledger-snapshot" +version = "26.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb9ee1c6ba495aa33b281a5818ece9b91f94ddbee93f08637d081983c36290ca" +dependencies = [ + "serde", + "serde_json", + "serde_with", + "soroban-env-common 26.1.3", + "soroban-env-host 26.1.3", "thiserror", ] @@ -1586,18 +2027,42 @@ checksum = "ff18e8d7ca6d5340a211605ca2c86383bd4dfacc4f8253d72a1573974ffffe69" dependencies = [ "arbitrary", "bytes-lit", - "ctor", + "ctor 0.2.9", + "derive_arbitrary", + "ed25519-dalek", + "rand 0.8.6", + "rustc_version", + "serde", + "serde_json", + "soroban-env-guest 22.1.3", + "soroban-env-host 22.1.3", + "soroban-ledger-snapshot 22.0.11", + "soroban-sdk-macros 22.0.11", + "stellar-strkey 0.0.9", +] + +[[package]] +name = "soroban-sdk" +version = "26.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8c92772aaafb45bbfa8ea5baa5b453e84be4351ddb6383469acbcf3d64ddc8e" +dependencies = [ + "arbitrary", + "bytes-lit", + "crate-git-revision", + "ctor 0.5.0", "derive_arbitrary", "ed25519-dalek", "rand 0.8.6", "rustc_version", "serde", "serde_json", - "soroban-env-guest", - "soroban-env-host", - "soroban-ledger-snapshot", - "soroban-sdk-macros", - "stellar-strkey", + "soroban-env-guest 26.1.3", + "soroban-env-host 26.1.3", + "soroban-ledger-snapshot 26.1.0", + "soroban-sdk-macros 26.1.0", + "stellar-strkey 0.0.16", + "visibility", ] [[package]] @@ -1608,16 +2073,36 @@ checksum = "42b205cd86b34d530db87667bd287fbb194166d79b368227fd842110a914fde8" dependencies = [ "crate-git-revision", "darling 0.20.11", - "itertools", + "itertools 0.10.5", "proc-macro2", "quote", "rustc_version", "sha2", - "soroban-env-common", - "soroban-spec", - "soroban-spec-rust", - "stellar-xdr", - "syn 2.0.117", + "soroban-env-common 22.1.3", + "soroban-spec 22.0.11", + "soroban-spec-rust 22.0.11", + "stellar-xdr 22.1.0", + "syn 2.0.118", +] + +[[package]] +name = "soroban-sdk-macros" +version = "26.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "abbdc02e0d789df78c25b0d056eb01cc906feab690c74895febc96890a0e6aa0" +dependencies = [ + "darling 0.20.11", + "heck", + "itertools 0.13.0", + "macro-string", + "proc-macro2", + "quote", + "sha2", + "soroban-env-common 26.1.3", + "soroban-spec 26.1.0", + "soroban-spec-rust 26.1.0", + "stellar-xdr 26.0.1", + "syn 2.0.118", ] [[package]] @@ -1627,9 +2112,22 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cb6a16f2de28852c759f4da5f28cda54ec0d8dfa4c0e6e8cb3495234a72b0cea" dependencies = [ "base64 0.13.1", - "stellar-xdr", + "stellar-xdr 22.1.0", + "thiserror", + "wasmparser", +] + +[[package]] +name = "soroban-spec" +version = "26.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3afb753b6ec3329af9744091ebe9f4c047c8fd1078d333b3f83a598a22bef33" +dependencies = [ + "base64 0.22.1", + "sha2", + "stellar-xdr 26.0.1", "thiserror", - "wasmparser 0.116.1", + "wasmparser", ] [[package]] @@ -1642,9 +2140,25 @@ dependencies = [ "proc-macro2", "quote", "sha2", - "soroban-spec", - "stellar-xdr", - "syn 2.0.117", + "soroban-spec 22.0.11", + "stellar-xdr 22.1.0", + "syn 2.0.118", + "thiserror", +] + +[[package]] +name = "soroban-spec-rust" +version = "26.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29bcfaf56410230ab5f91088cc12ce7c890274ee3243206b48263ceb36ee2a27" +dependencies = [ + "prettyplease", + "proc-macro2", + "quote", + "sha2", + "soroban-spec 26.1.0", + "stellar-xdr 26.0.1", + "syn 2.0.118", "thiserror", ] @@ -1677,6 +2191,12 @@ dependencies = [ "der", ] +[[package]] +name = "stable_deref_trait" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" + [[package]] name = "static_assertions" version = "1.1.0" @@ -1694,6 +2214,27 @@ dependencies = [ "thiserror", ] +[[package]] +name = "stellar-strkey" +version = "0.0.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee1832fb50c651ad10f734aaf5d31ca5acdfb197a6ecda64d93fcdb8885af913" +dependencies = [ + "crate-git-revision", + "data-encoding", +] + +[[package]] +name = "stellar-strkey" +version = "0.0.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "084afcb0d458c3d5d5baa2d294b18f881e62cc258ef539d8fdf68be7dbe45520" +dependencies = [ + "crate-git-revision", + "data-encoding", + "heapless", +] + [[package]] name = "stellar-xdr" version = "22.1.0" @@ -1707,7 +2248,26 @@ dependencies = [ "hex", "serde", "serde_with", - "stellar-strkey", + "stellar-strkey 0.0.9", +] + +[[package]] +name = "stellar-xdr" +version = "26.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea6e29c7e1f071c2767916460d006668197843d5d93f0ec8893a26f72a14f595" +dependencies = [ + "arbitrary", + "base64 0.22.1", + "cfg_eval", + "crate-git-revision", + "escape-bytes", + "ethnum", + "hex", + "serde", + "serde_with", + "sha2", + "stellar-strkey 0.0.13", ] [[package]] @@ -1735,9 +2295,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.117" +version = "2.0.118" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" +checksum = "1b9ae57f904213ebb649ce6895b8a66c66f0203b9319718f69a5612a065b1422" dependencies = [ "proc-macro2", "quote", @@ -1751,7 +2311,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd" dependencies = [ "fastrand", - "getrandom 0.4.2", + "getrandom 0.4.3", "once_cell", "rustix", "windows-sys", @@ -1774,17 +2334,16 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.118", ] [[package]] name = "time" -version = "0.3.47" +version = "0.3.51" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "743bd48c283afc0388f9b8827b976905fb217ad9e647fae3a379a9283c4def2c" +checksum = "85c17d80feb7334b40c484e45ed1a5273dfd8bfda537c3be2e74a06a6686f327" dependencies = [ "deranged", - "itoa", "num-conv", "powerfmt", "serde_core", @@ -1794,15 +2353,15 @@ dependencies = [ [[package]] name = "time-core" -version = "0.1.8" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7694e1cfe791f8d31026952abf09c69ca6f6fa4e1a1229e18988f06a04a12dca" +checksum = "9e1c906769ad99c88eaa54e728060edef082f8e358ff32030cb7c7d315e81109" [[package]] name = "time-macros" -version = "0.2.27" +version = "0.2.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e70e4c5a0e0a8a4823ad65dfe1a6930e4f4d756dcd9dd7939022b5e8c501215" +checksum = "dcef1a61bdb119096e153208ec5cbec23944ce8bca13be5c7f60c634f7403935" dependencies = [ "num-conv", "time-core", @@ -1823,6 +2382,34 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" +[[package]] +name = "tokio" +version = "1.52.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fc7f01b389ac15039e4dc9531aa973a135d7a4135281b12d7c1bc79fd57fffe" +dependencies = [ + "bytes", + "libc", + "mio", + "parking_lot", + "pin-project-lite", + "signal-hook-registry", + "socket2", + "tokio-macros", + "windows-sys", +] + +[[package]] +name = "tokio-macros" +version = "2.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "385a6cb71ab9ab790c5fe8d67f1645e6c450a7ce006a33de03daa956cf70a496" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.118", +] + [[package]] name = "typenum" version = "1.20.1" @@ -1841,18 +2428,23 @@ version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" -[[package]] -name = "unicode-xid" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" - [[package]] name = "version_check" version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" +[[package]] +name = "visibility" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d674d135b4a8c1d7e813e2f8d1c9a58308aee4a680323066025e53132218bd91" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.118", +] + [[package]] name = "wait-timeout" version = "0.2.1" @@ -1870,27 +2462,18 @@ checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" [[package]] name = "wasip2" -version = "1.0.3+wasi-0.2.9" +version = "1.0.4+wasi-0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20064672db26d7cdc89c7798c48a0fdfac8213434a1186e5ef29fd560ae223d6" +checksum = "b67efb37e106e55ce722a510d6b5f9c17f083e5fc79afc2badeb12cc313d9487" dependencies = [ - "wit-bindgen 0.57.1", -] - -[[package]] -name = "wasip3" -version = "0.4.0+wasi-0.3.0-rc-2026-01-06" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5428f8bf88ea5ddc08faddef2ac4a67e390b88186c703ce6dbd955e1c145aca5" -dependencies = [ - "wit-bindgen 0.51.0", + "wit-bindgen", ] [[package]] name = "wasm-bindgen" -version = "0.2.122" +version = "0.2.125" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ed04576f974d2b2fba0f38c51dbc5518011e38c36bf1143164be765528fd409" +checksum = "8ddb3f79143bced6de84270411622a2699cee572fc0875aeaf1e7867cf9fca1a" dependencies = [ "cfg-if", "once_cell", @@ -1901,9 +2484,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.122" +version = "0.2.125" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "916151b09da36bd82f6615cbf3a419e2f0ba23a03c6160e8e92eb6bd4aa1dec6" +checksum = "4e21a184b13fb19e157296e2c46056aec9092264fab83e4ba59e68c61b323c3d" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -1911,48 +2494,26 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.122" +version = "0.2.125" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "299047362ccbfce148b67ab7e73349f77748e00c8296f9542adfad2ad82c5c5e" +checksum = "fecefd9c35bd935a20fc3fc344b5f29138961e4f47fb03297d88f2587afb5ebd" dependencies = [ "bumpalo", "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.118", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.122" +version = "0.2.125" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a929b2c61f11ba3e9bc35b50c1f25cb38e0e892c0c231ae2b8cf78d5dad4437" +checksum = "23939e44bb9a5d7576fa2b563dc2e136628f1224e88a8deed09e04858b77871f" dependencies = [ "unicode-ident", ] -[[package]] -name = "wasm-encoder" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "990065f2fe63003fe337b932cfb5e3b80e0b4d0f5ff650e6985b1048f62c8319" -dependencies = [ - "leb128fmt", - "wasmparser 0.244.0", -] - -[[package]] -name = "wasm-metadata" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb0e353e6a2fbdc176932bbaab493762eb1255a7900fe0fea1a2f96c296cc909" -dependencies = [ - "anyhow", - "indexmap 2.14.0", - "wasm-encoder", - "wasmparser 0.244.0", -] - [[package]] name = "wasmi_arena" version = "0.4.1" @@ -1981,18 +2542,6 @@ dependencies = [ "semver", ] -[[package]] -name = "wasmparser" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe" -dependencies = [ - "bitflags", - "hashbrown 0.15.5", - "indexmap 2.14.0", - "semver", -] - [[package]] name = "wasmparser-nostd" version = "0.100.2" @@ -2023,7 +2572,7 @@ checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.118", ] [[package]] @@ -2034,7 +2583,7 @@ checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.118", ] [[package]] @@ -2070,138 +2619,50 @@ dependencies = [ "windows-link", ] -[[package]] -name = "wit-bindgen" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5" -dependencies = [ - "wit-bindgen-rust-macro", -] - [[package]] name = "wit-bindgen" version = "0.57.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e" -[[package]] -name = "wit-bindgen-core" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea61de684c3ea68cb082b7a88508a8b27fcc8b797d738bfc99a82facf1d752dc" -dependencies = [ - "anyhow", - "heck", - "wit-parser", -] - -[[package]] -name = "wit-bindgen-rust" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7c566e0f4b284dd6561c786d9cb0142da491f46a9fbed79ea69cdad5db17f21" -dependencies = [ - "anyhow", - "heck", - "indexmap 2.14.0", - "prettyplease", - "syn 2.0.117", - "wasm-metadata", - "wit-bindgen-core", - "wit-component", -] - -[[package]] -name = "wit-bindgen-rust-macro" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c0f9bfd77e6a48eccf51359e3ae77140a7f50b1e2ebfe62422d8afdaffab17a" -dependencies = [ - "anyhow", - "prettyplease", - "proc-macro2", - "quote", - "syn 2.0.117", - "wit-bindgen-core", - "wit-bindgen-rust", -] - -[[package]] -name = "wit-component" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2" -dependencies = [ - "anyhow", - "bitflags", - "indexmap 2.14.0", - "log", - "serde", - "serde_derive", - "serde_json", - "wasm-encoder", - "wasm-metadata", - "wasmparser 0.244.0", - "wit-parser", -] - -[[package]] -name = "wit-parser" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecc8ac4bc1dc3381b7f59c34f00b67e18f910c2c0f50015669dde7def656a736" -dependencies = [ - "anyhow", - "id-arena", - "indexmap 2.14.0", - "log", - "semver", - "serde", - "serde_derive", - "serde_json", - "unicode-xid", - "wasmparser 0.244.0", -] - [[package]] name = "zerocopy" -version = "0.8.50" +version = "0.8.52" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b065d4f0e55f82fae73202e189638116a87c55ab6b8e6c2721e13dd9d854ad1" +checksum = "ce1022995ff5ff5d841ad7d994facc23098cd40152f2c1d11cd607c6f530653f" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.50" +version = "0.8.52" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b631b19d36a892ab55420c92dbc83ccd79274f25be714855d3074aa71cab639" +checksum = "1ae7f38b72ec2a254e2b87ef277cf2cd4fb97cbebf944faa6f33354da0867930" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.118", ] [[package]] name = "zeroize" -version = "1.8.2" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0" +checksum = "e13c156562582aa81c60cb29407084cdb54c4164760106ab78e6c5b0858cf64e" dependencies = [ "zeroize_derive", ] [[package]] name = "zeroize_derive" -version = "1.4.3" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85a5b4158499876c763cb03bc4e49185d3cccbabb15b33c627f7884f43db852e" +checksum = "3c50655cbb0fe3fc43170059e702f1ce5e19b84cec58dc87b037a09935c2f328" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.118", ] [[package]] diff --git a/contracts/token/src/lib.rs b/contracts/token/src/lib.rs index 10aedfa..2a992e0 100644 --- a/contracts/token/src/lib.rs +++ b/contracts/token/src/lib.rs @@ -256,6 +256,213 @@ impl BcForgeToken { Self::read_supply(&env) } + pub fn set_admin_pool(env: Env, pool: Vec
, threshold: u32) { + Self::extend_instance_ttl_for_call(&env); + let current_admin = Self::read_admin(&env).expect("contract not initialized"); + current_admin.require_auth(); + admin::set_admin_pool(&env, pool, threshold); + } + + pub fn propose_action( + env: Env, + signer: Address, + action: TokenAction, + description: String, + ) -> u64 { + Self::extend_instance_ttl_for_call(&env); + let id = admin::create_proposal(&env, signer, description); + env.storage() + .instance() + .set(&DataKey::ProposalAction(id), &action); + id + } + + pub fn approve_proposal(env: Env, signer: Address, proposal_id: u64) { + Self::extend_instance_ttl_for_call(&env); + admin::approve_proposal(&env, signer, proposal_id); + } + + pub fn execute_proposal(env: Env, proposal_id: u64) { + Self::extend_instance_ttl_for_call(&env); + admin::mark_executed(&env, proposal_id); + let action: TokenAction = env + .storage() + .instance() + .get(&DataKey::ProposalAction(proposal_id)) + .expect("proposal action not found"); + + match action { + TokenAction::Mint(to, amount) => { + Self::panic_on_err(&env, Self::ensure_not_paused(&env)); + let current_admin = Self::read_admin(&env).expect("contract not initialized"); + Self::panic_on_err(&env, Self::internal_mint(&env, ¤t_admin, &to, amount)); + } + TokenAction::Pause => { + let current_admin = Self::read_admin(&env).expect("contract not initialized"); + bc_forge_lifecycle::pause(env.clone(), current_admin.clone()); + events::emit_paused(&env, ¤t_admin); + } + TokenAction::Unpause => { + let current_admin = Self::read_admin(&env).expect("contract not initialized"); + bc_forge_lifecycle::unpause(env.clone(), current_admin.clone()); + events::emit_unpaused(&env, ¤t_admin); + } + } + env.storage() + .instance() + .remove(&DataKey::ProposalAction(proposal_id)); + } + + pub fn set_clawback_admin(env: Env, clawback_admin: Address) { + Self::extend_instance_ttl_for_call(&env); + let current_admin = Self::read_admin(&env).expect("contract not initialized"); + current_admin.require_auth(); + env.storage() + .instance() + .set(&DataKey::ClawbackAdmin, &clawback_admin); + ttl::extend_instance_ttl(&env); + } + + pub fn clawback(env: Env, caller: Address, from: Address, to: Address, amount: i128) -> Result<(), TokenError> { + Self::ensure_initialized(&env)?; + caller.require_auth(); + + let current_admin = Self::read_admin(&env)?; + let clawback_admin: Option
= env.storage().instance().get(&DataKey::ClawbackAdmin); + + let is_authorized = caller == current_admin + || clawback_admin.map_or(false, |ca| ca == caller); + + if !is_authorized { + panic!("unauthorized"); + } + + if amount <= 0 { + return Err(TokenError::InvalidAmount); + } + + let _ = Self::move_balance(&env, &from, &to, amount)?; + events::emit_clawback(&env, &caller, &from, &to, amount); + Ok(()) + } + + pub fn grant_role(env: Env, role: Role, address: Address) { + Self::extend_instance_ttl_for_call(&env); + admin::grant_role(&env, role, &address); + } + + pub fn revoke_role(env: Env, role: Role, address: Address) { + Self::extend_instance_ttl_for_call(&env); + admin::revoke_role(&env, role, &address); + } + + pub fn has_role(env: Env, role: Role, address: Address) -> bool { + Self::extend_instance_ttl_for_call(&env); + admin::has_role(&env, role, &address) + } + + pub fn lock_tokens( + env: Env, + user: Address, + amount: i128, + unlock_time: u64, + ) -> Result<(), TokenError> { + reentrancy_guard!(&env, "lock_tokens_guard", { + let current_admin = Self::read_admin(&env)?; + current_admin.require_auth(); + Self::extend_instance_ttl_for_call(&env); + let current_admin = Self::read_admin(&env)?; + current_admin.require_auth(); + + if amount <= 0 { + return Err(TokenError::InvalidAmount); + } + + let balance = Self::read_balance(&env, &user); + if balance < amount { + return Err(TokenError::InsufficientBalance); + } + + Self::write_balance(&env, &user, balance - amount); + let mut lockup = env + .storage() + .persistent() + .get::<_, LockupInfo>(&DataKey::Lockup(user.clone())) + .unwrap_or(LockupInfo { + amount: 0, + unlock_time: 0, + }); + lockup.amount += amount; + if unlock_time > lockup.unlock_time { + lockup.unlock_time = unlock_time; + } + env.storage() + .persistent() + .set(&DataKey::Lockup(user.clone()), &lockup); + events::emit_locked(&env, &user, amount, lockup.unlock_time); + Ok(()) + }) + } + + pub fn withdraw_locked(env: Env, user: Address) { + reentrancy_guard!(&env, "withdraw_locked_guard", { + user.require_auth(); + let lockup: LockupInfo = env + .storage() + .persistent() + .get(&DataKey::Lockup(user.clone())) + .expect("no lockup found"); + + if env.ledger().timestamp() < lockup.unlock_time { + panic!("tokens are still locked"); + } + Self::write_balance(&env, &user, balance - amount); + let mut lockup = env + .storage() + .persistent() + .get::<_, LockupInfo>(&DataKey::Lockup(user.clone())) + .unwrap_or(LockupInfo { + amount: 0, + unlock_time: 0, + }); + lockup.amount += amount; + if unlock_time > lockup.unlock_time { + lockup.unlock_time = unlock_time; + } + env.storage() + .persistent() + .set(&DataKey::Lockup(user.clone()), &lockup); + Self::extend_lockup_ttl(&env, &user); + events::emit_locked(&env, &user, amount, lockup.unlock_time); + Ok(()) + } + + pub fn withdraw_locked(env: Env, user: Address) { + Self::extend_instance_ttl_for_call(&env); + user.require_auth(); + let key = DataKey::Lockup(user.clone()); + if env.storage().persistent().has(&key) { + Self::extend_lockup_ttl(&env, &user); + } + let lockup: LockupInfo = env + .storage() + .persistent() + .get(&key) + .expect("no lockup found"); + + if env.ledger().timestamp() < lockup.unlock_time { + panic!("tokens are still locked"); + } + + let balance = Self::read_balance(&env, &user); + Self::write_balance(&env, &user, balance + lockup.amount); + env.storage() + .persistent() + .remove(&DataKey::Lockup(user.clone())); + events::emit_withdraw_locked(&env, &user, lockup.amount); + }) + } + pub fn transfer_ownership(env: Env, new_admin: Address) -> Result<(), TokenError> { Self::ensure_initialized(&env)?; let current_admin = admin::get_admin(&env); diff --git a/contracts/token/src/test.rs b/contracts/token/src/test.rs index 24e420e..4b23e3c 100644 --- a/contracts/token/src/test.rs +++ b/contracts/token/src/test.rs @@ -98,3 +98,198 @@ fn test_initialize_emits_correct_event() { let decimal: u32 = data_vec.get(0).unwrap().try_into_val(&env).unwrap(); assert_eq!(decimal, 7); } + +#[test] +fn test_clawback_by_admin() { + let env = Env::default(); + env.mock_all_auths(); + let (client, admin) = setup(&env); + let victim = Address::generate(&env); + let treasury = Address::generate(&env); + + client.mint(&victim, &500); + client.clawback(&admin, &victim, &treasury, &200); + + assert_eq!(client.balance(&victim), 300); + assert_eq!(client.balance(&treasury), 200); +} + +#[test] +fn test_clawback_by_clawback_admin() { + let env = Env::default(); + env.mock_all_auths(); + let (client, admin) = setup(&env); + let clawback_admin = Address::generate(&env); + let victim = Address::generate(&env); + let treasury = Address::generate(&env); + + client.set_clawback_admin(&clawback_admin); + client.mint(&victim, &500); + client.clawback(&clawback_admin, &victim, &treasury, &300); + + assert_eq!(client.balance(&victim), 200); + assert_eq!(client.balance(&treasury), 300); + let _ = admin; +} + +#[test] +#[should_panic(expected = "unauthorized")] +fn test_clawback_unauthorized_panics() { + let env = Env::default(); + env.mock_all_auths(); + let (client, _admin) = setup(&env); + let rando = Address::generate(&env); + let victim = Address::generate(&env); + let treasury = Address::generate(&env); + + client.mint(&victim, &100); + client.clawback(&rando, &victim, &treasury, &50); +} + +#[test] +fn test_clawback_invalid_amount_returns_error() { + let env = Env::default(); + env.mock_all_auths(); + let (client, admin) = setup(&env); + let victim = Address::generate(&env); + let treasury = Address::generate(&env); + + client.mint(&victim, &100); + assert_eq!( + client.try_clawback(&admin, &victim, &treasury, &0), + Err(Ok(soroban_sdk::Error::from_contract_error( + TokenError::InvalidAmount as u32 + ))) + ); +} + +#[test] +fn test_clawback_insufficient_balance_returns_error() { + let env = Env::default(); + env.mock_all_auths(); + let (client, admin) = setup(&env); + let victim = Address::generate(&env); + let treasury = Address::generate(&env); + + client.mint(&victim, &50); + assert_eq!( + client.try_clawback(&admin, &victim, &treasury, &100), + Err(Ok(soroban_sdk::Error::from_contract_error( + TokenError::InsufficientBalance as u32 + ))) + ); +} + +#[test] +fn clawback_negative_amount_returns_error() { + let env = Env::default(); + env.mock_all_auths(); + let (client, admin) = setup(&env); + let victim = Address::generate(&env); + let treasury = Address::generate(&env); + + client.mint(&victim, &100); + assert_eq!( + client.try_clawback(&admin, &victim, &treasury, &-10), + Err(Ok(soroban_sdk::Error::from_contract_error( + TokenError::InvalidAmount as u32 + ))) + ); +} + +#[test] +fn clawback_full_drain_transfers_all() { + let env = Env::default(); + env.mock_all_auths(); + let (client, admin) = setup(&env); + let victim = Address::generate(&env); + let treasury = Address::generate(&env); + + client.mint(&victim, &1000); + client.clawback(&admin, &victim, &treasury, &1000); + + assert_eq!(client.balance(&victim), 0); + assert_eq!(client.balance(&treasury), 1000); +} + +#[test] +fn clawback_self_is_noop() { + let env = Env::default(); + env.mock_all_auths(); + let (client, admin) = setup(&env); + let user = Address::generate(&env); + + client.mint(&user, &500); + // from == to: balance must be unchanged + client.clawback(&admin, &user, &user, &200); + + assert_eq!(client.balance(&user), 500); +} + +#[test] +fn clawback_preserves_total_supply() { + let env = Env::default(); + env.mock_all_auths(); + let (client, admin) = setup(&env); + let victim = Address::generate(&env); + let treasury = Address::generate(&env); + + client.mint(&victim, &700); + let before = client.supply(); + client.clawback(&admin, &victim, &treasury, &200); + let after = client.supply(); + + // clawback moves balance, it does not burn -> supply unchanged + assert_eq!(before, after); +} + +#[test] +fn clawback_sequential_until_drained() { + let env = Env::default(); + env.mock_all_auths(); + let (client, admin) = setup(&env); + let victim = Address::generate(&env); + let treasury = Address::generate(&env); + + client.mint(&victim, &1000); + client.clawback(&admin, &victim, &treasury, &400); + assert_eq!(client.balance(&victim), 600); + client.clawback(&admin, &victim, &treasury, &600); + assert_eq!(client.balance(&victim), 0); + assert_eq!(client.balance(&treasury), 1000); +} + +#[test] +fn clawback_admin_still_authorized_after_setting_clawback_admin() { + let env = Env::default(); + env.mock_all_auths(); + let (client, admin) = setup(&env); + let clawback_admin = Address::generate(&env); + let victim = Address::generate(&env); + let treasury = Address::generate(&env); + + // setting a separate clawback admin must not revoke the original admin + client.set_clawback_admin(&clawback_admin); + client.mint(&victim, &300); + client.clawback(&admin, &victim, &treasury, &100); + + assert_eq!(client.balance(&victim), 200); + assert_eq!(client.balance(&treasury), 100); +} + +#[test] +#[should_panic(expected = "unauthorized")] +fn clawback_third_party_unauthorized_even_with_clawback_admin_set() { + let env = Env::default(); + env.mock_all_auths(); + let (client, _admin) = setup(&env); + let clawback_admin = Address::generate(&env); + let rando = Address::generate(&env); + let victim = Address::generate(&env); + let treasury = Address::generate(&env); + + client.set_clawback_admin(&clawback_admin); + client.mint(&victim, &100); + // rando is neither admin nor clawback_admin -> must panic + client.clawback(&rando, &victim, &treasury, &50); +} diff --git a/sdk/src/client.ts b/sdk/src/client.ts index 1f8f507..66e1602 100644 --- a/sdk/src/client.ts +++ b/sdk/src/client.ts @@ -874,9 +874,10 @@ export class bcForgeClient { } /** - * Execute a clawback operation. + * Execute a clawback operation. Caller must be the main admin or the designated clawback admin. */ async clawback( + caller: string, from: string, to: string, amount: bigint, @@ -884,7 +885,7 @@ export class bcForgeClient { ): Promise { return this.invokeContract( 'clawback', - [addressToScVal(from), addressToScVal(to), i128ToScVal(amount)], + [addressToScVal(caller), addressToScVal(from), addressToScVal(to), i128ToScVal(amount)], source, ); }