diff --git a/Cargo.lock b/Cargo.lock index 84e791b..bd291f1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -54,9 +54,9 @@ dependencies = [ [[package]] name = "alloy-dyn-abi" -version = "0.8.12" +version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef2364c782a245cf8725ea6dbfca5f530162702b5d685992ea03ce64529136cc" +checksum = "555896f0b8578adb522b1453b6e6cc6704c3027bd0af20058befdde992cee8e9" dependencies = [ "alloy-json-abi", "alloy-primitives", @@ -72,9 +72,9 @@ dependencies = [ [[package]] name = "alloy-json-abi" -version = "0.8.12" +version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b84c506bf264110fa7e90d9924f742f40ef53c6572ea56a0b0bd714a567ed389" +checksum = "4012581681b186ba0882007ed873987cc37f86b1b488fe6b91d5efd0b585dc41" dependencies = [ "alloy-primitives", "alloy-sol-type-parser", @@ -84,9 +84,9 @@ dependencies = [ [[package]] name = "alloy-primitives" -version = "0.8.12" +version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fce5dbd6a4f118eecc4719eaa9c7ffc31c315e6c5ccde3642db927802312425" +checksum = "478bedf4d24e71ea48428d1bc278553bd7c6ae07c30ca063beb0b09fe58a9e74" dependencies = [ "alloy-rlp", "bytes", @@ -95,7 +95,6 @@ dependencies = [ "derive_more", "foldhash", "hashbrown", - "hex-literal", "indexmap", "itoa", "k256", @@ -112,9 +111,9 @@ dependencies = [ [[package]] name = "alloy-rlp" -version = "0.3.9" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da0822426598f95e45dd1ea32a738dac057529a709ee645fcc516ffa4cbde08f" +checksum = "3d6c1d995bff8d011f7cd6c81820d51825e6e06d6db73914c1630ecf544d83d6" dependencies = [ "arrayvec", "bytes", @@ -122,23 +121,23 @@ dependencies = [ [[package]] name = "alloy-sol-macro" -version = "0.8.12" +version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9343289b4a7461ed8bab8618504c995c049c082b70c7332efd7b32125633dc05" +checksum = "a2708e27f58d747423ae21d31b7a6625159bd8d867470ddd0256f396a68efa11" dependencies = [ "alloy-sol-macro-expander", "alloy-sol-macro-input", "proc-macro-error2", "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.98", ] [[package]] name = "alloy-sol-macro-expander" -version = "0.8.12" +version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4222d70bec485ceccc5d8fd4f2909edd65b5d5e43d4aca0b5dcee65d519ae98f" +checksum = "c6b7984d7e085dec382d2c5ef022b533fcdb1fe6129200af30ebf5afddb6a361" dependencies = [ "alloy-sol-macro-input", "const-hex", @@ -147,31 +146,31 @@ dependencies = [ "proc-macro-error2", "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.98", "syn-solidity", "tiny-keccak", ] [[package]] name = "alloy-sol-macro-input" -version = "0.8.12" +version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e17f2677369571b976e51ea1430eb41c3690d344fef567b840bfc0b01b6f83a" +checksum = "33d6a9fc4ed1a3c70bdb2357bec3924551c1a59f24e5a04a74472c755b37f87d" dependencies = [ "const-hex", "dunce", "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.98", "syn-solidity", ] [[package]] name = "alloy-sol-type-parser" -version = "0.8.12" +version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa64d80ae58ffaafdff9d5d84f58d03775f66c84433916dc9a64ed16af5755da" +checksum = "1b1b3e9a48a6dd7bb052a111c8d93b5afc7956ed5e2cb4177793dc63bb1d2a36" dependencies = [ "serde", "winnow", @@ -179,9 +178,9 @@ dependencies = [ [[package]] name = "alloy-sol-types" -version = "0.8.12" +version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6520d427d4a8eb7aa803d852d7a52ceb0c519e784c292f64bb339e636918cf27" +checksum = "6044800da35c38118fd4b98e18306bd3b91af5dedeb54c1b768cf1b4fb68f549" dependencies = [ "alloy-json-abi", "alloy-primitives", @@ -226,24 +225,25 @@ version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c" dependencies = [ - "windows-sys 0.59.0", + "windows-sys", ] [[package]] name = "anstyle-wincon" -version = "3.0.6" +version = "3.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2109dbce0e72be3ec00bed26e6a7479ca384ad226efdd66db8fa2e3a38c83125" +checksum = "ca3534e77181a9cc07539ad51f2141fe32f6c3ffd4df76db8ad92346b003ae4e" dependencies = [ "anstyle", - "windows-sys 0.59.0", + "once_cell", + "windows-sys", ] [[package]] name = "anyhow" -version = "1.0.93" +version = "1.0.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c95c10ba0b00a02636238b814946408b1322d5ac4760326e6fb8ec956d85775" +checksum = "34ac096ce696dc2fcabef30516bb13c0a68a11d30131d3df6f04711467681b04" [[package]] name = "ark-ff" @@ -404,7 +404,7 @@ dependencies = [ "proc-macro2", "quote", "serde", - "syn 2.0.87", + "syn 2.0.98", ] [[package]] @@ -433,13 +433,13 @@ dependencies = [ [[package]] name = "auto_impl" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c87f3f15e7794432337fc718554eaa4dc8f04c9677a950ffe366f20a162ae42" +checksum = "e12882f59de5360c748c4cbf569a042d5fb0eb515f7bea9c1f470b47f6ffbd73" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.98", ] [[package]] @@ -509,6 +509,19 @@ version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d965446196e3b7decd44aa7ee49e31d630118f90ef12f97900f262eb915c951d" +[[package]] +name = "bigdecimal" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f31f3af01c5c65a07985c804d3366560e6fa7883d640a122819b14ec327482c" +dependencies = [ + "autocfg", + "libm", + "num-bigint", + "num-integer", + "num-traits", +] + [[package]] name = "bincode" version = "1.3.3" @@ -529,18 +542,18 @@ dependencies = [ [[package]] name = "bit-set" -version = "0.5.3" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1" +checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3" dependencies = [ "bit-vec", ] [[package]] name = "bit-vec" -version = "0.6.3" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" +checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" [[package]] name = "bitcoin" @@ -598,9 +611,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.6.0" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" +checksum = "8f68f53c83ab957f72c32642f3868eec03eb974d1fb82e453128456482613d36" [[package]] name = "bitvec" @@ -659,9 +672,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 = "byte-slice-cast" @@ -671,9 +684,9 @@ checksum = "c3ac9f8b63eca6fd385229b3675f6cc0dc5c8a5c8a54a59d4f52ffd670d87b0c" [[package]] name = "bytemuck" -version = "1.19.0" +version = "1.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8334215b81e418a0a7bdb8ef0849474f40bb10c8b71f1c4ed315cff49f32494d" +checksum = "ef657dfab802224e671f5818e9a4935f9b1957ed18e58292690cc39e7a4092a3" [[package]] name = "byteorder" @@ -683,9 +696,9 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.8.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ac0150caa2ae65ca5bd83f25c7de183dea78d4d366469f148435e2acfbad0da" +checksum = "f61dac84819c6588b558454b194026eb1f09c293b9036ae9b159e74e73ab6cf9" dependencies = [ "serde", ] @@ -701,9 +714,9 @@ dependencies = [ [[package]] name = "cargo-platform" -version = "0.1.8" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24b1f0365a6c6bb4020cd05806fd0d33c44d38046b8bd7f0e40814b9763cabfc" +checksum = "e35af189006b9c0f00a064685c727031e3ed2d8020f7ba284d78cc2671bd36ea" dependencies = [ "serde", ] @@ -716,10 +729,10 @@ checksum = "eee4243f1f26fc7a42710e7439c149e2b10b05472f88090acce52632f231a73a" dependencies = [ "camino", "cargo-platform", - "semver 1.0.23", + "semver 1.0.25", "serde", "serde_json", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -733,9 +746,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.0" +version = "1.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1aeb932158bd710538c73702db6945cb68a8fb08c519e6e12706b94263b36db8" +checksum = "0c3d1b2e905a3a7b00a6141adb0e4c0bb941d11caf55349d863942a1cc44e3c9" dependencies = [ "shlex", ] @@ -757,9 +770,9 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "chrono" -version = "0.4.38" +version = "0.4.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" +checksum = "7e36cc9d416881d2e24f9a963be5fb1cd90966419ac844274161d10488b3e825" dependencies = [ "num-traits", "serde", @@ -777,9 +790,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.21" +version = "4.5.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb3b4b9e5a7c7514dfa52869339ee98b3156b0bfb4e8a77c4ff4babb64b1604f" +checksum = "92b7b18d71fad5313a1e320fa9897994228ce274b60faa4d694fe0ea89cd9e6d" dependencies = [ "clap_builder", "clap_derive", @@ -787,9 +800,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.21" +version = "4.5.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b17a95aa67cc7b5ebd32aa5370189aa0d79069ef1c64ce893bd30fb24bff20ec" +checksum = "a35db2071778a7344791a4fb4f95308b5673d219dee3ae348b86642574ecc90c" dependencies = [ "anstream", "anstyle", @@ -799,21 +812,21 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.18" +version = "4.5.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ac6a0c7b1a9e9a5186361f67dfa1b88213572f427fb9ab038efb2bd8c582dab" +checksum = "bf4ced95c6f4a675af3da73304b9ac4ed991640c36374e4b46795c49e17cf1ed" dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.98", ] [[package]] name = "clap_lex" -version = "0.7.3" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afb84c814227b90d6895e01398aee0d8033c00e7466aca416fb6a8e0eb19d8a7" +checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6" [[package]] name = "cobs" @@ -834,7 +847,7 @@ dependencies = [ "k256", "serde", "sha2 0.10.8", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -850,7 +863,7 @@ dependencies = [ "pbkdf2", "rand", "sha2 0.10.8", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -870,7 +883,7 @@ dependencies = [ "serde_derive", "sha2 0.10.8", "sha3", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -887,9 +900,9 @@ checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" [[package]] name = "const-hex" -version = "1.13.1" +version = "1.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0121754e84117e65f9d90648ee6aa4882a6e63110307ab73967a4c5e7e69e586" +checksum = "4b0485bab839b018a8f1723fc5391819fea5f8f0f32288ef8a735fd096b6160c" dependencies = [ "cfg-if", "cpufeatures", @@ -904,11 +917,31 @@ version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" +[[package]] +name = "const_format" +version = "0.2.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "126f97965c8ad46d6d9163268ff28432e8f6a1196a55578867832e3049df63dd" +dependencies = [ + "const_format_proc_macros", +] + +[[package]] +name = "const_format_proc_macros" +version = "0.2.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d57c2eccfb16dbac1f4e61e206105db5820c9d26c3c472bc17c774259ef7744" +dependencies = [ + "proc-macro2", + "quote", + "unicode-xid", +] + [[package]] name = "cpufeatures" -version = "0.2.15" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ca741a962e1b0bff6d724a1a0958b686406e853bb14061f218562e1896f95e6" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" dependencies = [ "libc", ] @@ -930,9 +963,9 @@ checksum = "790eea4361631c5e7d22598ecd5723ff611904e3344ce8720784c93e3d83d40b" [[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-bigint" @@ -1006,7 +1039,7 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.98", ] [[package]] @@ -1047,7 +1080,7 @@ checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.98", "unicode-xid", ] @@ -1183,14 +1216,14 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.98", ] [[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 = "erased-serde" @@ -1204,19 +1237,19 @@ dependencies = [ [[package]] name = "errno" -version = "0.3.9" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" +checksum = "33d852cb9b869c2a9b3df2f71a3074817f01e1844f839a144f5fcef059a4eb5d" dependencies = [ "libc", - "windows-sys 0.52.0", + "windows-sys", ] [[package]] name = "fastrand" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "486f806e73c5707928240ddc295403b1b93c96a02038563881c4a2fd84b81ac4" +checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" [[package]] name = "fastrlp" @@ -1229,11 +1262,22 @@ dependencies = [ "bytes", ] +[[package]] +name = "fastrlp" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce8dba4714ef14b8274c371879b175aa55b16b30f269663f19d576f380018dc4" +dependencies = [ + "arrayvec", + "auto_impl", + "bytes", +] + [[package]] name = "fdeflate" -version = "0.3.6" +version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07c6f4c64c1d33a3111c4466f7365ebdcc37c5bd1ea0d62aae2e3d722aacbedb" +checksum = "1e6853b52649d4ac5c0bd02320cddc5ba956bdb407c4b75a2c6b75bf51500f8c" dependencies = [ "simd-adler32", ] @@ -1290,9 +1334,9 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "foldhash" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f81ec6369c545a7d40e4589b5597581fa1c441fe1cce96dd1de43159910a36a2" +checksum = "a0d2fde1f7b3d48b8395d5f2de76c18a528bd6a9cdde438df747bfcba3e05d6f" [[package]] name = "fs-err" @@ -1329,10 +1373,22 @@ dependencies = [ "cfg-if", "js-sys", "libc", - "wasi", + "wasi 0.11.0+wasi-snapshot-preview1", "wasm-bindgen", ] +[[package]] +name = "getrandom" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a49c392881ce6d5c3b8cb70f98717b7c07aabbdff06687b9030dbfbe2725f8" +dependencies = [ + "cfg-if", + "libc", + "wasi 0.13.3+wasi-0.2.2", + "windows-targets", +] + [[package]] name = "getrandom_or_panic" version = "0.0.3" @@ -1354,9 +1410,9 @@ dependencies = [ [[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 = "goblin" @@ -1391,9 +1447,9 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.15.1" +version = "0.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a9bfc1af68b1726ea47d3d5109de126281def866b33970e10fbab11b5dafab3" +checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" dependencies = [ "foldhash", "serde", @@ -1443,12 +1499,6 @@ dependencies = [ "arrayvec", ] -[[package]] -name = "hex-literal" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fe2267d4ed49bc07b63801559be28c718ea06c4738b7a03c94df7386d2cde46" - [[package]] name = "hex_lit" version = "0.1.1" @@ -1518,20 +1568,20 @@ dependencies = [ [[package]] name = "impl-trait-for-tuples" -version = "0.2.2" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11d7a9f6330b71fea57921c9b61c47ee6e84f72d394754eff6163ae67e7395eb" +checksum = "a0eb5a3343abf848c0984fe4604b2b105da9539376e24fc0a3b0007411ae4fd9" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.98", ] [[package]] name = "indexmap" -version = "2.6.0" +version = "2.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "707907fe3c25f5424cce2cb7e1cbcafee6bdbe735ca90ef77c29e84591e5b9da" +checksum = "8c9c992b02b5b4c94ea26e32fe5bccb7aa7d9f390ab5c1221ff895bc7ea8b652" dependencies = [ "equivalent", "hashbrown", @@ -1550,9 +1600,12 @@ dependencies = [ [[package]] name = "inventory" -version = "0.3.15" +version = "0.3.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f958d3d68f4167080a18141e10381e7634563984a537f2a49a30fd8e53ac5767" +checksum = "54b12ebb6799019b044deaf431eadfe23245b259bba5a2c0796acec3943a3cdb" +dependencies = [ + "rustversion", +] [[package]] name = "is_terminal_polyfill" @@ -1580,16 +1633,17 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.11" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" +checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" [[package]] name = "js-sys" -version = "0.3.72" +version = "0.3.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a88f1bda2bd75b0452a14784937d796722fdebfe50df998aeb3f0b7603019a9" +checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" dependencies = [ + "once_cell", "wasm-bindgen", ] @@ -1642,7 +1696,7 @@ dependencies = [ "coins-bip32", "coins-bip39", "ed25519-dalek", - "getrandom", + "getrandom 0.2.15", "heck 0.4.1", "hex", "hmac 0.12.1", @@ -1673,13 +1727,13 @@ dependencies = [ name = "kos-mobile" version = "0.2.5" dependencies = [ + "bigdecimal", "hex", "kos", - "lazy_static", "num-bigint", "num-traits", "serde", - "thiserror", + "thiserror 1.0.69", "uniffi", ] @@ -1712,9 +1766,9 @@ checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] name = "libc" -version = "0.2.162" +version = "0.2.169" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18d287de67fe55fd7e1581fe933d965a5a9477b38e949cfa9f8574ef01506398" +checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a" [[package]] name = "libm" @@ -1772,9 +1826,9 @@ dependencies = [ [[package]] name = "linux-raw-sys" -version = "0.4.14" +version = "0.4.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" +checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" [[package]] name = "lock_api" @@ -1788,9 +1842,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.22" +version = "0.4.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" +checksum = "04cbf5b083de1c7e0222a7a51dbfdba1cbe1c6ab0b15e29fff3f6c077fd9cd9f" [[package]] name = "memchr" @@ -1834,9 +1888,9 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" -version = "0.8.0" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2d80299ef12ff69b16a84bb182e3b9df68b5a91574d3d4fa6e41b65deec4df1" +checksum = "b3b1c9bd4fe1f0f8b387f6eb9eb3b4a1aa26185e5750efb9140301703f62cd1b" dependencies = [ "adler2", "simd-adler32", @@ -1889,9 +1943,9 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.20.2" +version = "1.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" +checksum = "945462a4b81e43c4e3ba96bd7b49d834c6f61198356aa858733bc4acf3cbe62e" [[package]] name = "opaque-debug" @@ -1901,28 +1955,30 @@ checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" [[package]] name = "parity-scale-codec" -version = "3.6.12" +version = "3.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "306800abfa29c7f16596b5970a588435e3d5b3149683d00c12b699cc19f895ee" +checksum = "c9fde3d0718baf5bc92f577d652001da0f8d54cd03a7974e118d04fc888dc23d" dependencies = [ "arrayvec", "bitvec", "byte-slice-cast", + "const_format", "impl-trait-for-tuples", "parity-scale-codec-derive", + "rustversion", "serde", ] [[package]] name = "parity-scale-codec-derive" -version = "3.6.12" +version = "3.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d830939c76d294956402033aee57a6da7b438f2294eb94864c37b0569053a42c" +checksum = "581c837bb6b9541ce7faa9377c20616e4fb7650f6b0f68bc93c827ee504fb7b3" dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.98", ] [[package]] @@ -1966,12 +2022,12 @@ dependencies = [ [[package]] name = "pest" -version = "2.7.14" +version = "2.7.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "879952a81a83930934cbf1786752d6dedc3b1f29e8f8fb2ad1d0a36f377cf442" +checksum = "8b7cafe60d6cf8e62e1b9b2ea516a089c008945bb5a275416789e7db0bc199dc" dependencies = [ "memchr", - "thiserror", + "thiserror 2.0.11", "ucd-trie", ] @@ -2003,9 +2059,9 @@ checksum = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6" [[package]] name = "png" -version = "0.17.14" +version = "0.17.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52f9d46a34a05a6a57566bc2bfae066ef07585a6e3fa30fbbdff5936380623f0" +checksum = "82151a2fc869e011c153adc57cf2789ccb8d9906ce52c0b39a6b5697749d7526" dependencies = [ "bitflags 1.3.2", "crc32fast", @@ -2028,9 +2084,9 @@ dependencies = [ [[package]] name = "postcard" -version = "1.0.10" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f7f0a8d620d71c457dd1d47df76bb18960378da56af4527aaa10f515eee732e" +checksum = "170a2601f67cc9dba8edd8c4870b15f71a6a2dc196daec8c83f72b59dff628a8" dependencies = [ "cobs", "embedded-io 0.4.0", @@ -2050,12 +2106,12 @@ dependencies = [ [[package]] name = "prettyplease" -version = "0.2.25" +version = "0.2.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64d1ec885c64d0457d564db4ec299b2dae3f9c02808b8ad9c3a089c591b18033" +checksum = "6924ced06e1f7dfe3fa48d57b9f74f55d8915f5036121bef647ef4b204895fac" dependencies = [ "proc-macro2", - "syn 2.0.87", + "syn 2.0.98", ] [[package]] @@ -2097,27 +2153,27 @@ dependencies = [ "proc-macro-error-attr2", "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.98", ] [[package]] name = "proc-macro2" -version = "1.0.89" +version = "1.0.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f139b0662de085916d1fb67d2b4169d1addddda1919e696f3252b740b629986e" +checksum = "60946a68e5f9d28b0dc1c21bb8a97ee7d018a8b322fa57838ba31cc878e22d99" dependencies = [ "unicode-ident", ] [[package]] name = "proptest" -version = "1.5.0" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4c2511913b88df1637da85cc8d96ec8e43a3f8bb8ccb71ee1ac240d6f3df58d" +checksum = "14cae93065090804185d3b75f0bf93b8eeda30c7a9b4a33d3bdb3988d6229e50" dependencies = [ "bit-set", "bit-vec", - "bitflags 2.6.0", + "bitflags 2.8.0", "lazy_static", "num-traits", "rand", @@ -2156,7 +2212,7 @@ dependencies = [ "prost", "prost-types", "regex", - "syn 2.0.87", + "syn 2.0.98", "tempfile", ] @@ -2170,7 +2226,7 @@ dependencies = [ "itertools 0.12.1", "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.98", ] [[package]] @@ -2253,9 +2309,9 @@ checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" [[package]] name = "quote" -version = "1.0.37" +version = "1.0.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" +checksum = "0e4dccaaaf89514f546c693ddc140f729f958c247918a13380cccc6078391acc" dependencies = [ "proc-macro2", ] @@ -2294,7 +2350,7 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom", + "getrandom 0.2.15", ] [[package]] @@ -2366,16 +2422,18 @@ dependencies = [ [[package]] name = "ruint" -version = "1.12.3" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c3cc4c2511671f327125da14133d0c5c5d137f006a1017a16f557bc85b16286" +checksum = "825df406ec217a8116bd7b06897c6cc8f65ffefc15d030ae2c9540acc9ed50b6" dependencies = [ "alloy-rlp", "ark-ff 0.3.0", "ark-ff 0.4.2", "bytes", - "fastrlp", + "fastrlp 0.3.1", + "fastrlp 0.4.0", "num-bigint", + "num-integer", "num-traits", "parity-scale-codec", "primitive-types", @@ -2396,9 +2454,9 @@ checksum = "48fd7bd8a6377e15ad9d42a8ec25371b94ddc67abe7c8b9127bec79bebaaae18" [[package]] name = "rustc-hash" -version = "2.0.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "583034fd73374156e66797ed8e5b0d5690409c9226b22d87cb7f19821c05d152" +checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" [[package]] name = "rustc-hex" @@ -2421,27 +2479,27 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" dependencies = [ - "semver 1.0.23", + "semver 1.0.25", ] [[package]] name = "rustix" -version = "0.38.40" +version = "0.38.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99e4ea3e1cdc4b559b8e5650f9c8e5998e3e5c1343b4eaf034565f32318d63c0" +checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.8.0", "errno", "libc", "linux-raw-sys", - "windows-sys 0.52.0", + "windows-sys", ] [[package]] name = "rustversion" -version = "1.0.18" +version = "1.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e819f2bc632f285be6d7cd36e25940d45b2391dd6d9b939e79de557f7014248" +checksum = "f7c45b9784283f1b2e7fb61b42047c2fd678ef0960d4f6f1eba131594cc369d4" [[package]] name = "rusty-fork" @@ -2457,9 +2515,9 @@ dependencies = [ [[package]] name = "ryu" -version = "1.0.18" +version = "1.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" +checksum = "6ea1a2d0a644769cc99faa24c3ad26b379b786fe7c36fd3c546254801650e6dd" [[package]] name = "schnorrkel" @@ -2501,7 +2559,7 @@ checksum = "7f81c2fde025af7e69b1d1420531c8a8811ca898919db177141a85313b1cb932" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.98", ] [[package]] @@ -2548,9 +2606,9 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.23" +version = "1.0.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" +checksum = "f79dfe2d285b0488816f30e700a7438c5a73d816b5b7d3ac72fbc48b0d185e03" dependencies = [ "serde", ] @@ -2566,9 +2624,9 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.215" +version = "1.0.217" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6513c1ad0b11a9376da888e3e0baa0077f1aed55c17f50e7b2397136129fb88f" +checksum = "02fc4265df13d6fa1d00ecff087228cc0a2b5f3c0e87e258d8b94a156e984c70" dependencies = [ "serde_derive", ] @@ -2586,20 +2644,20 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.215" +version = "1.0.217" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad1e866f866923f252f05c889987993144fb74e722403468a4ebd70c3cd756c0" +checksum = "5a9bf7cf98d04a2b28aead066b7496853d4779c9cc183c440dbac457641e19a0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.98", ] [[package]] name = "serde_json" -version = "1.0.132" +version = "1.0.138" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d726bfaff4b320266d395898905d0eba0345aae23b54aee3a737e260fd46db03" +checksum = "d434192e7da787e94a6ea7e9670b26a036d0ca41e0b7efb2676dd32bae872949" dependencies = [ "itoa", "memchr", @@ -2741,7 +2799,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.87", + "syn 2.0.98", ] [[package]] @@ -2763,9 +2821,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.87" +version = "2.0.98" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25aa4ce346d03a6dcd68dd8b4010bcb74e54e62c90c573f394c46eae99aba32d" +checksum = "36147f1a48ae0ec2b5b3bc5b537d267457555a10dc06f3dbc8cb11ba3006d3b1" dependencies = [ "proc-macro2", "quote", @@ -2774,14 +2832,14 @@ dependencies = [ [[package]] name = "syn-solidity" -version = "0.8.12" +version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f76fe0a3e1476bdaa0775b9aec5b869ed9520c2b2fedfe9c6df3618f8ea6290b" +checksum = "9c2de690018098e367beeb793991c7d4dc7270f42c9d2ac4ccc876c1368ca430" dependencies = [ "paste", "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.98", ] [[package]] @@ -2792,15 +2850,16 @@ checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" [[package]] name = "tempfile" -version = "3.14.0" +version = "3.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28cce251fcbc87fac86a866eeb0d6c2d536fc16d06f184bb61aeae11aa4cee0c" +checksum = "22e5a0acb1f3f55f65cc4a866c361b2fb2a0ff6366785ae6fbb5f85df07ba230" dependencies = [ "cfg-if", "fastrand", + "getrandom 0.3.1", "once_cell", "rustix", - "windows-sys 0.59.0", + "windows-sys", ] [[package]] @@ -2818,7 +2877,16 @@ version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" dependencies = [ - "thiserror-impl", + "thiserror-impl 1.0.69", +] + +[[package]] +name = "thiserror" +version = "2.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d452f284b73e6d76dd36758a0c8684b1d5be31f92b89d07fd5822175732206fc" +dependencies = [ + "thiserror-impl 2.0.11", ] [[package]] @@ -2829,7 +2897,18 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.98", +] + +[[package]] +name = "thiserror-impl" +version = "2.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26afc1baea8a989337eeb52b6e72a039780ce45c3edfcc9c5b9d112feeb173c2" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", ] [[package]] @@ -2863,9 +2942,9 @@ dependencies = [ [[package]] name = "tinyvec" -version = "1.8.0" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "445e881f4f6d382d5f27c034e25eb92edd7c784ceab92a0937db7f2e9471b938" +checksum = "022db8904dfa342efe721985167e9fcd16c29b226db4397ed752a761cfce81e8" dependencies = [ "tinyvec_macros", ] @@ -2893,9 +2972,9 @@ checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" [[package]] name = "toml_edit" -version = "0.22.22" +version = "0.22.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ae48d6208a266e853d946088ed816055e556cc6028c5e8e2b84d9fa5dd7c7f5" +checksum = "17b4795ff5edd201c7cd6dca065ae59972ce77d1b80fa0a84d94950ece7d1474" dependencies = [ "indexmap", "toml_datetime", @@ -2910,15 +2989,15 @@ checksum = "0e13db2e0ccd5e14a544e8a246ba2312cd25223f616442d7f2cb0e3db614236e" [[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 = "typetag" -version = "0.2.18" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52ba3b6e86ffe0054b2c44f2d86407388b933b16cb0a70eea3929420db1d9bbe" +checksum = "044fc3365ddd307c297fe0fe7b2e70588cdab4d0f62dc52055ca0d11b174cf0e" dependencies = [ "erased-serde", "inventory", @@ -2929,13 +3008,13 @@ dependencies = [ [[package]] name = "typetag-impl" -version = "0.2.18" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70b20a22c42c8f1cd23ce5e34f165d4d37038f5b663ad20fb6adbdf029172483" +checksum = "d9d30226ac9cbd2d1ff775f74e8febdab985dab14fb14aa2582c29a92d5555dc" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.98", ] [[package]] @@ -2964,15 +3043,15 @@ checksum = "eaea85b334db583fe3274d12b4cd1880032beab409c0d774be044d4480ab9a94" [[package]] name = "unicase" -version = "2.8.0" +version = "2.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e51b68083f157f853b6379db119d1c1be0e6e4dec98101079dec41f6f5cf6df" +checksum = "75b844d17643ee918803943289730bec8aac480150456169e647ed0b576ba539" [[package]] name = "unicode-ident" -version = "1.0.13" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e91b56cd4cadaeb79bbf1a5645f6b4f8dc5bde8834ad5894a8db35fda9efa1fe" +checksum = "00e2473a93778eb0bad35909dff6a10d28e63f792f16ed15e404fca9d5eeedbe" [[package]] name = "unicode-xid" @@ -2982,9 +3061,9 @@ checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" [[package]] name = "uniffi" -version = "0.28.2" +version = "0.28.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51ce6280c581045879e11b400bae14686a819df22b97171215d15549efa04ddb" +checksum = "4cb08c58c7ed7033150132febe696bef553f891b1ede57424b40d87a89e3c170" dependencies = [ "anyhow", "camino", @@ -2998,9 +3077,9 @@ dependencies = [ [[package]] name = "uniffi_bindgen" -version = "0.28.2" +version = "0.28.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e9f25730c9db2e878521d606f54e921edb719cdd94d735e7f97705d6796d024" +checksum = "cade167af943e189a55020eda2c314681e223f1e42aca7c4e52614c2b627698f" dependencies = [ "anyhow", "askama", @@ -3021,9 +3100,9 @@ dependencies = [ [[package]] name = "uniffi_build" -version = "0.28.2" +version = "0.28.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88dba57ac699bd8ec53d6a352c8dd0e479b33f698c5659831bb1e4ce468c07bd" +checksum = "4c7cf32576e08104b7dc2a6a5d815f37616e66c6866c2a639fe16e6d2286b75b" dependencies = [ "anyhow", "camino", @@ -3032,19 +3111,19 @@ dependencies = [ [[package]] name = "uniffi_checksum_derive" -version = "0.28.2" +version = "0.28.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2c801f0f05b06df456a2da4c41b9c2c4fdccc6b9916643c6c67275c4c9e4d07" +checksum = "802d2051a700e3ec894c79f80d2705b69d85844dafbbe5d1a92776f8f48b563a" dependencies = [ "quote", - "syn 2.0.87", + "syn 2.0.98", ] [[package]] name = "uniffi_core" -version = "0.28.2" +version = "0.28.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61049e4db6212d0ede80982adf0e1d6fa224e6118387324c5cfbe3083dfb2252" +checksum = "bc7687007d2546c454d8ae609b105daceb88175477dac280707ad6d95bcd6f1f" dependencies = [ "anyhow", "bytes", @@ -3056,9 +3135,9 @@ dependencies = [ [[package]] name = "uniffi_macros" -version = "0.28.2" +version = "0.28.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b40fd2249e0c5dcbd2bfa3c263db1ec981f7273dca7f4132bf06a272359a586c" +checksum = "12c65a5b12ec544ef136693af8759fb9d11aefce740fb76916721e876639033b" dependencies = [ "bincode", "camino", @@ -3067,16 +3146,16 @@ dependencies = [ "proc-macro2", "quote", "serde", - "syn 2.0.87", + "syn 2.0.98", "toml", "uniffi_meta", ] [[package]] name = "uniffi_meta" -version = "0.28.2" +version = "0.28.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9ad57039b4fafdbf77428d74fff40e0908e5a1731e023c19cfe538f6d4a8ed6" +checksum = "4a74ed96c26882dac1ca9b93ca23c827e284bacbd7ec23c6f0b0372f747d59e4" dependencies = [ "anyhow", "bytes", @@ -3086,9 +3165,9 @@ dependencies = [ [[package]] name = "uniffi_testing" -version = "0.28.2" +version = "0.28.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21fa171d4d258dc51bbd01893cc9608c1b62273d2f9ea55fb64f639e77824567" +checksum = "6a6f984f0781f892cc864a62c3a5c60361b1ccbd68e538e6c9fbced5d82268ac" dependencies = [ "anyhow", "camino", @@ -3099,9 +3178,9 @@ dependencies = [ [[package]] name = "uniffi_udl" -version = "0.28.2" +version = "0.28.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f52299e247419e7e2934bef2f94d7cccb0e6566f3248b1d48b160d8f369a2668" +checksum = "037820a4cfc4422db1eaa82f291a3863c92c7d1789dc513489c36223f9b4cdfc" dependencies = [ "anyhow", "textwrap", @@ -3134,9 +3213,9 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[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 = "version_check" @@ -3146,9 +3225,9 @@ checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" [[package]] name = "wait-timeout" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f200f5b12eb75f8c1ed65abd4b2db8a6e1b138a20de009dacee265a2498f3f6" +checksum = "09ac3b126d3914f9849036f826e054cbabdc8519970b8998ddaf3b5bd3c65f11" dependencies = [ "libc", ] @@ -3159,37 +3238,46 @@ version = "0.11.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" +[[package]] +name = "wasi" +version = "0.13.3+wasi-0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26816d2e1a4a36a2940b96c5296ce403917633dff8f3440e9b236ed6f6bacad2" +dependencies = [ + "wit-bindgen-rt", +] + [[package]] name = "wasm-bindgen" -version = "0.2.95" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "128d1e363af62632b8eb57219c8fd7877144af57558fb2ef0368d0087bddeb2e" +checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" dependencies = [ "cfg-if", "once_cell", + "rustversion", "wasm-bindgen-macro", ] [[package]] name = "wasm-bindgen-backend" -version = "0.2.95" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb6dd4d3ca0ddffd1dd1c9c04f94b868c37ff5fac97c30b97cff2d74fce3a358" +checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" dependencies = [ "bumpalo", "log", - "once_cell", "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.98", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-macro" -version = "0.2.95" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e79384be7f8f5a9dd5d7167216f022090cf1f9ec128e6e6a482a2cb5c5422c56" +checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -3197,22 +3285,25 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.95" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26c6ab57572f7a24a4985830b120de1594465e5d500f24afe89e16b4e833ef68" +checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.98", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.95" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65fc09f10666a9f147042251e0dda9c18f166ff7de300607007e96bdebc1068d" +checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" +dependencies = [ + "unicode-ident", +] [[package]] name = "weedle2" @@ -3223,15 +3314,6 @@ dependencies = [ "nom", ] -[[package]] -name = "windows-sys" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" -dependencies = [ - "windows-targets", -] - [[package]] name = "windows-sys" version = "0.59.0" @@ -3307,13 +3389,22 @@ checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "winnow" -version = "0.6.20" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36c1fec1a2bb5866f07c25f68c26e565c4c200aebb96d7e55710c19d3e8ac49b" +checksum = "59690dea168f2198d1a3b0cac23b8063efcd11012f10ae4698f284808c8ef603" dependencies = [ "memchr", ] +[[package]] +name = "wit-bindgen-rt" +version = "0.33.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3268f3d866458b787f390cf61f4bbb563b922d091359f9608842999eaee3943c" +dependencies = [ + "bitflags 2.8.0", +] + [[package]] name = "wyz" version = "0.5.1" @@ -3341,7 +3432,7 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.98", ] [[package]] @@ -3361,5 +3452,5 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.98", ] diff --git a/Cargo.toml b/Cargo.toml index ade663b..84e49ee 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -19,36 +19,26 @@ version = "0.2.5" [workspace.dependencies] bech32 = "0.9.1" -base58 = "0.2.0" sha2 = { version = "0.10" } sha3 = { version = "0.10" } hmac = { version = "0.12" } -secp256k1 = { version = "0.27", features = ["recovery", "rand", "bitcoin_hashes"] } ed25519-dalek = { version = "2" } coins-bip32 = { version = "0.8", default-features = false } coins-bip39 = { version = "0.8", default-features = false, features = ["english"] } -bytes = { version = "1.4.0", default-features = false } hex = { version = "0.4.3", default-features = false } rand = "0.8" -zeroize = { version = "1.5", features = ["derive"] } prost = "0.11" prost-types = "0.11" -pbjson = { version = "0.5", git = "https://github.com/klever-io/pbjson" } -pbjson-types = { version = "0.5", git = "https://github.com/klever-io/pbjson" } -pbjson-build = { version = "0.5", git = "https://github.com/klever-io/pbjson" } uniffi = { version = "0.28.1" } -reqwest = { version = "0.12", default-features = false, feature = ["rustls-tls", "blocking", "json"] } wasm-bindgen = "0.2" enum_delegate = "0.2" serde = { version = "1.0", default-features = false } serde_json = "1.0" -log = "0.4" lazy_static = "1.4.0" thiserror = "1.0" kos = { version = "0.2.5", path = "./packages/kos", default-features = false } -kos-mobile = { version = "0.1.0", path = "./packages/kos-mobile", default-features = false } diff --git a/deny.toml b/deny.toml index 4e88220..6826e6a 100644 --- a/deny.toml +++ b/deny.toml @@ -12,8 +12,9 @@ skip = [ { name = "hmac", version = "0.8.1" }, { name = "sha2", version = "0.9.9" }, { name = "syn", version = "1.0.109" }, - { name = "windows-sys", version = "0.52.0" }, - { name = "bech32", version = "0.9.1" } + { name = "bech32", version = "0.9.1" }, + { name = "wasi", version = "0.11.0+wasi-snapshot-preview1" }, + { name = "getrandom", version = "0.2.15" }, ] [sources] @@ -32,9 +33,8 @@ allow = [ "BSD-2-Clause", "CC0-1.0", "MPL-2.0", -] -exceptions = [ - { name = "unicode-ident", allow = ["Unicode-DFS-2016"] }, + "Zlib", + "Unicode-3.0" ] [[licenses.clarify]] diff --git a/packages/kos-mobile/Cargo.toml b/packages/kos-mobile/Cargo.toml index be95ac9..4fc2fb2 100644 --- a/packages/kos-mobile/Cargo.toml +++ b/packages/kos-mobile/Cargo.toml @@ -22,13 +22,13 @@ path = "src/bin/uniffi-bindgen.rs" kos = { workspace = true } hex = { workspace = true } -lazy_static = { workspace = true } thiserror = { workspace = true } uniffi = { workspace = true, features = ["cli"] } serde = { workspace = true, features = ["derive"], optional = true } num-bigint = "0.4" num-traits = "0.2" +bigdecimal = "0.4.7" [build-dependencies] -uniffi = { workspace = true, features = ["build"] } \ No newline at end of file +uniffi = { workspace = true, features = ["build"] } diff --git a/packages/kos-mobile/src/number.rs b/packages/kos-mobile/src/number.rs index df62e1e..c90fcd8 100644 --- a/packages/kos-mobile/src/number.rs +++ b/packages/kos-mobile/src/number.rs @@ -1,25 +1,71 @@ use crate::KOSError; +use bigdecimal::BigDecimal; use num_bigint::BigInt; -use num_traits::{One, Signed, Zero}; -use serde::{Deserialize, Serialize}; +use num_traits::{One, Signed, ToPrimitive, Zero}; use std::str::FromStr; -#[derive(Debug, Clone, Default, Serialize, Deserialize, uniffi::Record)] +#[derive(Debug, Clone, uniffi::Record)] pub struct BigNumber { - pub value: String, + pub digits: Vec, + pub scale: i64, + pub sign: Sign, +} + +#[derive(Debug, Clone, uniffi::Enum)] +pub enum Sign { + Minus, + NoSign, + Plus, } impl BigNumber { pub fn new(value: &str) -> Result { - BigInt::from_str(value) - .map(|_| BigNumber { - value: value.to_string(), - }) - .map_err(|_| KOSError::KOSNumber("Invalid number".to_string())) + if value.is_empty() { + return Err(KOSError::KOSNumber("Invalid number".to_string())); + } + + // Parse the value to check if it's a valid number + let parsed_value: BigDecimal = match BigDecimal::from_str(value) { + Ok(v) => v, + Err(_) => return Err(KOSError::KOSNumber("Invalid number format".to_string())), + }; + + let big_number: BigNumber = BigNumber::from_bigdecimal(parsed_value); + + Ok(big_number) + } + + pub fn from_bigdecimal(value: BigDecimal) -> Self { + let (decimal_as_bigint, scale) = value.clone().into_bigint_and_scale(); + + BigNumber { + scale, + sign: sign_from_bigint(value.sign()), + digits: decimal_as_bigint.to_u32_digits().1, + } } - pub fn to_bigint(&self) -> Result { - BigInt::from_str(&self.value).map_err(|_| KOSError::KOSNumber("Invalid number".to_string())) + pub fn to_bigdecimal(&self) -> BigDecimal { + BigDecimal::new( + BigInt::new(sign_to_bigint(self.sign.clone()), self.digits.clone()), + self.scale, + ) + } +} + +fn sign_from_bigint(sign: num_bigint::Sign) -> Sign { + match sign { + num_bigint::Sign::Minus => Sign::Minus, + num_bigint::Sign::NoSign => Sign::NoSign, + num_bigint::Sign::Plus => Sign::Plus, + } +} + +fn sign_to_bigint(sign: Sign) -> num_bigint::Sign { + match sign { + Sign::Minus => num_bigint::Sign::Minus, + Sign::NoSign => num_bigint::Sign::NoSign, + Sign::Plus => num_bigint::Sign::Plus, } } @@ -28,72 +74,446 @@ fn big_number_new(value: String) -> Result { BigNumber::new(&value) } +#[uniffi::export] +fn big_number_string(value: BigNumber) -> String { + value + .to_bigdecimal() + .with_scale(32) + .normalized() + .to_plain_string() +} + #[uniffi::export] fn big_number_add(lhs: BigNumber, rhs: BigNumber) -> Result { - let left = lhs.to_bigint()?; - let right = rhs.to_bigint()?; - Ok(BigNumber { - value: (left + right).to_string(), - }) + let left: BigDecimal = lhs.to_bigdecimal(); + let right: BigDecimal = rhs.to_bigdecimal(); + + let result: BigDecimal = left + right; + + Ok(BigNumber::from_bigdecimal(result)) } #[uniffi::export] fn big_number_subtract(lhs: BigNumber, rhs: BigNumber) -> Result { - let left = lhs.to_bigint()?; - let right = rhs.to_bigint()?; - Ok(BigNumber { - value: (left - right).to_string(), - }) + let left: BigDecimal = lhs.to_bigdecimal(); + let right: BigDecimal = rhs.to_bigdecimal(); + + let result: BigDecimal = left - right; + + Ok(BigNumber::from_bigdecimal(result)) } #[uniffi::export] fn big_number_multiply(lhs: BigNumber, rhs: BigNumber) -> Result { - let left = lhs.to_bigint()?; - let right = rhs.to_bigint()?; - Ok(BigNumber { - value: (left * right).to_string(), - }) + let left: BigDecimal = lhs.to_bigdecimal(); + let right: BigDecimal = rhs.to_bigdecimal(); + + let result: BigDecimal = left * right; + + Ok(BigNumber::from_bigdecimal(result)) } #[uniffi::export] fn big_number_divide(lhs: BigNumber, rhs: BigNumber) -> Result { - let left = lhs.to_bigint()?; - let right = rhs.to_bigint()?; - if right.is_zero() { - return Err(KOSError::KOSNumber("Division by zero".to_string())); + let left: BigDecimal = lhs.to_bigdecimal(); + let right: BigDecimal = rhs.to_bigdecimal(); + + let result: BigDecimal = left / right; + + Ok(BigNumber::from_bigdecimal(result)) +} + +#[uniffi::export] +fn big_number_pow(base: BigNumber, exponent: BigNumber) -> Result { + let exp: BigDecimal = exponent.to_bigdecimal(); + if exp.is_negative() { + return Err(KOSError::KOSNumber( + "Exponent must be non-negative".to_string(), + )); + } + + // Convert to u32 for use with the Pow trait + let exp_u32: u32 = match exp.to_u32() { + Some(e) => e, + None => return Err(KOSError::KOSNumber("Exponent too large".to_string())), + }; + + let base_rat: BigDecimal = base.to_bigdecimal(); + + if base_rat.is_zero() || base_rat.is_one() { + Ok(base) + } else { + let mut result: BigInt = BigInt::one(); + let (decimal_as_bigint, scale) = base.clone().to_bigdecimal().into_bigint_and_scale(); + for _ in 0..exp_u32 { + result *= &decimal_as_bigint; + } + + Ok(BigNumber::from_bigdecimal(BigDecimal::new( + result, + scale * exp_u32 as i64, + ))) } - Ok(BigNumber { - value: (left / right).to_string(), - }) } #[uniffi::export] -fn big_number_is_zero(value: BigNumber) -> Result { - Ok(value.to_bigint()?.is_zero()) +fn big_number_is_equal(lhs: BigNumber, rhs: BigNumber) -> bool { + lhs.to_bigdecimal() == rhs.to_bigdecimal() +} + +#[uniffi::export] +fn big_number_is_gt(lhs: BigNumber, rhs: BigNumber) -> bool { + lhs.to_bigdecimal() > rhs.to_bigdecimal() +} + +#[uniffi::export] +fn big_number_is_gte(lhs: BigNumber, rhs: BigNumber) -> bool { + lhs.to_bigdecimal() >= rhs.to_bigdecimal() +} + +#[uniffi::export] +fn big_number_is_lt(lhs: BigNumber, rhs: BigNumber) -> bool { + lhs.to_bigdecimal() < rhs.to_bigdecimal() +} + +#[uniffi::export] +fn big_number_is_lte(lhs: BigNumber, rhs: BigNumber) -> bool { + lhs.to_bigdecimal() <= rhs.to_bigdecimal() +} + +#[uniffi::export] +fn big_number_absolute(value: BigNumber) -> Result { + let val: BigDecimal = value.to_bigdecimal(); + + Ok(BigNumber::from_bigdecimal(val.abs())) +} + +#[uniffi::export] +fn big_number_is_zero(value: BigNumber) -> bool { + value.to_bigdecimal().is_zero() } #[uniffi::export] fn big_number_increment(value: BigNumber) -> Result { - let current = value.to_bigint()?; - Ok(BigNumber { - value: (current + BigInt::one()).to_string(), - }) + let val: BigDecimal = value.to_bigdecimal(); + let result: BigDecimal = val + BigDecimal::one(); + + Ok(BigNumber::from_bigdecimal(result)) } #[uniffi::export] fn big_number_decrement(value: BigNumber) -> Result { - let current = value.to_bigint()?; - Ok(BigNumber { - value: (current - BigInt::one()).to_string(), - }) + let val: BigDecimal = value.to_bigdecimal(); + let result: BigDecimal = val - BigDecimal::one(); + + Ok(BigNumber::from_bigdecimal(result)) } #[uniffi::export] -fn big_number_is_positive(value: BigNumber) -> Result { - Ok(value.to_bigint()?.is_positive()) +fn big_number_is_positive(value: BigNumber) -> bool { + let val: BigDecimal = value.to_bigdecimal(); + val.is_positive() } #[uniffi::export] -fn big_number_is_negative(value: BigNumber) -> Result { - Ok(value.to_bigint()?.is_negative()) +fn big_number_is_negative(value: BigNumber) -> bool { + let val: BigDecimal = value.to_bigdecimal(); + val.is_negative() +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_big_number_new() { + assert!(big_number_new("123".to_string()).is_ok()); + assert!(big_number_new("-456".to_string()).is_ok()); + assert!(big_number_new("0".to_string()).is_ok()); + + assert!(big_number_new("123.456".to_string()).is_ok()); + assert!(big_number_new("-789.012".to_string()).is_ok()); + assert!(big_number_new("0.0".to_string()).is_ok()); + + assert!(big_number_new("abc".to_string()).is_err()); + assert!(big_number_new("123a".to_string()).is_err()); + assert!(big_number_new("".to_string()).is_err()); + } + + #[test] + fn test_big_number_add() { + let a = big_number_new("123".to_string()).unwrap(); + let b = big_number_new("456".to_string()).unwrap(); + let result = big_number_add(a.clone(), b.clone()).unwrap(); + assert_eq!(big_number_string(result), "579"); + + let c = big_number_new("-123".to_string()).unwrap(); + let result = big_number_add(b.clone(), c.clone()).unwrap(); + assert_eq!(big_number_string(result), "333"); + + let d = big_number_new("123.5".to_string()).unwrap(); + let e = big_number_new("456.7".to_string()).unwrap(); + + let result = big_number_add(d.clone(), e.clone()).unwrap(); + assert_eq!(big_number_string(result), "580.2"); + + let result = big_number_add(a.clone(), d.clone()).unwrap(); + assert_eq!(big_number_string(result), "246.5"); + + let f = big_number_new("123.456".to_string()).unwrap(); + let g = big_number_new("1e5".to_string()).unwrap(); + let result = big_number_add(f.clone(), g.clone()).unwrap(); + assert_eq!(big_number_string(result), "100123.456"); + } + + #[test] + fn test_big_number_subtract() { + let a = big_number_new("456".to_string()).unwrap(); + let b = big_number_new("123".to_string()).unwrap(); + let result = big_number_subtract(a.clone(), b.clone()).unwrap(); + assert_eq!(big_number_string(result), "333"); + + let result = big_number_subtract(b.clone(), a.clone()).unwrap(); + assert_eq!(big_number_string(result), "-333"); + + let c = big_number_new("456.7".to_string()).unwrap(); + let d = big_number_new("123.5".to_string()).unwrap(); + let result = big_number_subtract(c.clone(), d.clone()).unwrap(); + assert_eq!(big_number_string(result), "333.2"); + + let result = big_number_subtract(c.clone(), b.clone()).unwrap(); + assert_eq!(big_number_string(result), "333.7"); + + let a = big_number_new("1000000000.0000000000000000001".to_string()).unwrap(); + let b = big_number_new("1000000000.0000000000000000001".to_string()).unwrap(); + let result = big_number_subtract(a.clone(), b.clone()).unwrap(); + assert_eq!(big_number_string(result), "0"); + + let a = big_number_new("1000000000000000.000000000000000000011".to_string()).unwrap(); + let b = big_number_new("1000000000000000.000000000000000000001".to_string()).unwrap(); + let result = big_number_subtract(a.clone(), b.clone()).unwrap(); + assert_eq!(big_number_string(result), "0.00000000000000000001"); + } + + #[test] + fn test_big_number_multiply() { + let a = big_number_new("123".to_string()).unwrap(); + let b = big_number_new("456".to_string()).unwrap(); + let result = big_number_multiply(a.clone(), b.clone()).unwrap(); + assert_eq!(big_number_string(result), "56088"); + + let c = big_number_new("-123".to_string()).unwrap(); + let result = big_number_multiply(c.clone(), b.clone()).unwrap(); + assert_eq!(big_number_string(result), "-56088"); + + let d = big_number_new("12.3".to_string()).unwrap(); + let e = big_number_new("4.56".to_string()).unwrap(); + let result = big_number_multiply(d.clone(), e.clone()).unwrap(); + assert_eq!(big_number_string(result), "56.088"); + + let zero = big_number_new("0".to_string()).unwrap(); + let result = big_number_multiply(a.clone(), zero.clone()).unwrap(); + assert_eq!(big_number_string(result), "0"); + + let v1 = big_number_new("1000000000.0000000000000000001".to_string()).unwrap(); + let v2 = big_number_new("1000000000.0000000000000000001".to_string()).unwrap(); + let result2 = big_number_multiply(v1.clone(), v2.clone()).unwrap(); + assert_eq!(big_number_string(result2), "1000000000000000000.0000000002"); + + let v1 = big_number_new("1000000000000000.000000000000000000001".to_string()).unwrap(); + let v2 = big_number_new("1000000000000000.000000000000000000001".to_string()).unwrap(); + let result2 = big_number_multiply(v1.clone(), v2.clone()).unwrap(); + assert_eq!( + big_number_string(result2), + "1000000000000000000000000000000.000002" + ); + + let v1 = big_number_new("68562856798576893673962586728956729056872".to_string()).unwrap(); + let v2 = + big_number_new("4534534534534534534.4456456454772389472398573467326893".to_string()) + .unwrap(); + let result2 = big_number_multiply(v1.clone(), v2.clone()).unwrap(); + assert_eq!(big_number_string(result2), "310900641939492821158120256443368825392404212910534543770521.84848435835467083499652468120586"); + } + + #[test] + fn test_big_number_divide() { + let a = big_number_new("100".to_string()).unwrap(); + let b = big_number_new("5".to_string()).unwrap(); + let result = big_number_divide(a.clone(), b.clone()).unwrap(); + assert_eq!(big_number_string(result), "20"); + + let c = big_number_new("10".to_string()).unwrap(); + let d = big_number_new("3".to_string()).unwrap(); + let result = big_number_divide(c.clone(), d.clone()).unwrap(); + assert_eq!( + big_number_string(result), + "3.33333333333333333333333333333333" + ); + + let e = big_number_new("12.6".to_string()).unwrap(); + let f = big_number_new("2.1".to_string()).unwrap(); + let result = big_number_divide(e.clone(), f.clone()).unwrap(); + assert_eq!(big_number_string(result), "6"); + + let v1 = big_number_new("68562856798576893673962586728956729056872".to_string()).unwrap(); + let v2 = + big_number_new("4534534534534534534.4456456454772389472398573467326893".to_string()) + .unwrap(); + let result2 = big_number_divide(v1.clone(), v2.clone()).unwrap(); + assert_eq!( + big_number_string(result2), + "15120153188030533505878.87279202398950239411974388454771" + ); + + let a1 = big_number_new( + "115792089237316195423570985008687907853269984665640564039457584007913129639935" + .to_string(), + ) + .unwrap(); + let b2 = big_number_new("2".to_string()).unwrap(); + let result21 = big_number_divide(a1.clone(), b2.clone()).unwrap(); + assert_eq!( + big_number_string(result21), + "57896044618658097711785492504343953926634992332820282019728792003956564819967.5" + ); + } + + #[test] + fn test_big_number_is_zero() { + let zero = big_number_new("0".to_string()).unwrap(); + let zero_decimal = big_number_new("0.0".to_string()).unwrap(); + let non_zero = big_number_new("123".to_string()).unwrap(); + + assert!(big_number_is_zero(zero)); + assert!(big_number_is_zero(zero_decimal)); + assert!(!big_number_is_zero(non_zero)); + } + + #[test] + fn test_big_number_increment_decrement() { + let a = big_number_new("123".to_string()).unwrap(); + let result = big_number_increment(a.clone()).unwrap(); + assert_eq!(big_number_string(result), "124"); + + let b = big_number_new("123.5".to_string()).unwrap(); + let result = big_number_increment(b.clone()).unwrap(); + assert_eq!(big_number_string(result), "124.5"); + + let c = big_number_new("123".to_string()).unwrap(); + let result = big_number_decrement(c.clone()).unwrap(); + assert_eq!(big_number_string(result), "122"); + + let d = big_number_new("123.5".to_string()).unwrap(); + let result = big_number_decrement(d.clone()).unwrap(); + assert_eq!(big_number_string(result), "122.5"); + } + + #[test] + fn test_big_number_is_positive_negative() { + let a = big_number_new("123".to_string()).unwrap(); + assert!(big_number_is_positive(a.clone())); + assert!(!big_number_is_negative(a.clone())); + + let b = big_number_new("-456".to_string()).unwrap(); + assert!(!big_number_is_positive(b.clone())); + assert!(big_number_is_negative(b.clone())); + + let c = big_number_new("0".to_string()).unwrap(); + assert!(!big_number_is_positive(c.clone())); + assert!(!big_number_is_negative(c.clone())); + } + + #[test] + fn test_big_number_is_equal() { + let a = big_number_new("123".to_string()).unwrap(); + let b = big_number_new("123".to_string()).unwrap(); + assert!(big_number_is_equal(a.clone(), b.clone())); + + let c = big_number_new("456".to_string()).unwrap(); + assert!(!big_number_is_equal(a.clone(), c.clone())); + + let d = big_number_new("123.0".to_string()).unwrap(); + assert!(big_number_is_equal(a.clone(), d.clone())); + + let e = big_number_new("123.000".to_string()).unwrap(); + assert!(big_number_is_equal(a.clone(), e.clone())); + } + + #[test] + fn test_big_number_comparison() { + let a = big_number_new("100".to_string()).unwrap(); + let b = big_number_new("200".to_string()).unwrap(); + let c = big_number_new("100.0".to_string()).unwrap(); + let d = big_number_new("100.5".to_string()).unwrap(); + + assert!(big_number_is_gt(b.clone(), a.clone())); + assert!(!big_number_is_gt(a.clone(), b.clone())); + assert!(!big_number_is_gt(a.clone(), c.clone())); + assert!(big_number_is_gt(d.clone(), a.clone())); + + assert!(big_number_is_gte(b.clone(), a.clone())); + assert!(big_number_is_gte(a.clone(), c.clone())); + assert!(!big_number_is_gte(a.clone(), b.clone())); + assert!(big_number_is_gte(d.clone(), c.clone())); + + assert!(big_number_is_lt(a.clone(), b.clone())); + assert!(!big_number_is_lt(b.clone(), a.clone())); + assert!(!big_number_is_lt(c.clone(), a.clone())); + assert!(big_number_is_lt(c.clone(), d.clone())); + + assert!(big_number_is_lte(a.clone(), b.clone())); + assert!(big_number_is_lte(c.clone(), a.clone())); + assert!(!big_number_is_lte(b.clone(), a.clone())); + assert!(big_number_is_lte(a.clone(), c.clone())); + } + + #[test] + fn test_big_number_pow() { + let base = big_number_new("2".to_string()).unwrap(); + let exp = big_number_new("3".to_string()).unwrap(); + let result = big_number_pow(base.clone(), exp.clone()).unwrap(); + assert_eq!(big_number_string(result), "8"); + + let zero = big_number_new("0".to_string()).unwrap(); + let result = big_number_pow(base.clone(), zero.clone()).unwrap(); + assert_eq!(big_number_string(result), "1"); + + let ten = big_number_new("10".to_string()).unwrap(); + let exp10 = big_number_new("10".to_string()).unwrap(); + let result = big_number_pow(ten.clone(), exp10.clone()).unwrap(); + assert_eq!(big_number_string(result), "10000000000"); + + let base_dec = big_number_new("2.5".to_string()).unwrap(); + let exp2 = big_number_new("2".to_string()).unwrap(); + let result = big_number_pow(base_dec.clone(), exp2.clone()).unwrap(); + assert_eq!(big_number_string(result), "6.25"); + + let neg_exp = big_number_new("-1".to_string()).unwrap(); + + assert!(big_number_pow(base.clone(), neg_exp.clone()).is_err()); + } + + #[test] + fn test_big_number_absolute() { + let positive = big_number_new("123".to_string()).unwrap(); + let result = big_number_absolute(positive.clone()).unwrap(); + assert_eq!(big_number_string(result), "123"); + + let negative = big_number_new("-456".to_string()).unwrap(); + let result = big_number_absolute(negative.clone()).unwrap(); + assert_eq!(big_number_string(result), "456"); + + let zero = big_number_new("0".to_string()).unwrap(); + let result = big_number_absolute(zero.clone()).unwrap(); + assert_eq!(big_number_string(result), "0"); + + let pos_dec = big_number_new("123.45".to_string()).unwrap(); + let result = big_number_absolute(pos_dec.clone()).unwrap(); + assert_eq!(big_number_string(result), "123.45"); + + let neg_dec = big_number_new("-123.45".to_string()).unwrap(); + let result = big_number_absolute(neg_dec.clone()).unwrap(); + assert_eq!(big_number_string(result), "123.45"); + } }