diff --git a/.gitignore b/.gitignore index 56c8294..aa964f4 100644 --- a/.gitignore +++ b/.gitignore @@ -5,10 +5,6 @@ /static/ /.dioxus/ -# Remove Cargo.lock from gitignore if creating an executable, leave it for libraries -# More information here https://doc.rust-lang.org/cargo/guide/cargo-toml-vs-cargo-lock.html -Cargo.lock - # These are backup files generated by rustfmt **/*.rs.bk diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000..77959ab --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,6000 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "Inflector" +version = "0.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe438c63458706e03479442743baae6c88256498e6431708f6dfc520a26515d3" +dependencies = [ + "lazy_static", + "regex", +] + +[[package]] +name = "addr2line" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e4503c46a5c0c7844e948c9a4d6acd9f50cccb4de1c48eb9e291ea17470c678" +dependencies = [ + "gimli", +] + +[[package]] +name = "adler" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + +[[package]] +name = "aead" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0" +dependencies = [ + "crypto-common", + "generic-array", +] + +[[package]] +name = "ahash" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "891477e0c6a8957309ee5c45a6368af3ae14bb510732d2684ffa19af310920f9" +dependencies = [ + "getrandom", + "once_cell", + "version_check", +] + +[[package]] +name = "ahash" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" +dependencies = [ + "cfg-if", + "once_cell", + "version_check", + "zerocopy", +] + +[[package]] +name = "aho-corasick" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +dependencies = [ + "memchr", +] + +[[package]] +name = "allocator-api2" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f" + +[[package]] +name = "android-tzdata" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + +[[package]] +name = "ansi_term" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" +dependencies = [ + "winapi", +] + +[[package]] +name = "anstream" +version = "0.6.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64e15c1ab1f89faffbf04a634d5e1962e9074f2741eef6d97f3c4e322426d526" +dependencies = [ + "anstyle", + "anstyle-parse", + "anstyle-query", + "anstyle-wincon", + "colorchoice", + "is_terminal_polyfill", + "utf8parse", +] + +[[package]] +name = "anstyle" +version = "1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bec1de6f59aedf83baf9ff929c98f2ad654b97c9510f4e70cf6f661d49fd5b1" + +[[package]] +name = "anstyle-parse" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb47de1e80c2b463c735db5b217a0ddc39d612e7ac9e2e96a5aed1f57616c1cb" +dependencies = [ + "utf8parse", +] + +[[package]] +name = "anstyle-query" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d36fc52c7f6c869915e99412912f22093507da8d9e942ceaf66fe4b7c14422a" +dependencies = [ + "windows-sys 0.52.0", +] + +[[package]] +name = "anstyle-wincon" +version = "3.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5bf74e1b6e971609db8ca7a9ce79fd5768ab6ae46441c572e46cf596f59e57f8" +dependencies = [ + "anstyle", + "windows-sys 0.52.0", +] + +[[package]] +name = "anyhow" +version = "1.0.86" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da" + +[[package]] +name = "anymap2" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d301b3b94cb4b2f23d7917810addbbaff90738e0ca2be692bd027e70d7e0330c" + +[[package]] +name = "ark-bls12-377" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb00293ba84f51ce3bd026bd0de55899c4e68f0a39a5728cebae3a73ffdc0a4f" +dependencies = [ + "ark-ec", + "ark-ff", + "ark-std", +] + +[[package]] +name = "ark-bls12-381" +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", +] + +[[package]] +name = "ark-ec" +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", + "derivative", + "hashbrown 0.13.2", + "itertools", + "num-traits", + "zeroize", +] + +[[package]] +name = "ark-ff" +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", + "derivative", + "digest 0.10.7", + "itertools", + "num-bigint", + "num-traits", + "paste", + "rustc_version", + "zeroize", +] + +[[package]] +name = "ark-ff-asm" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ed4aa4fe255d0bc6d79373f7e31d2ea147bcf486cba1be5ba7ea85abdb92348" +dependencies = [ + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-ff-macros" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7abe79b0e4288889c4574159ab790824d0033b9fdcb2a112a3182fac2e514565" +dependencies = [ + "num-bigint", + "num-traits", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[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", + "derivative", + "hashbrown 0.13.2", +] + +[[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", + "digest 0.10.7", + "num-bigint", +] + +[[package]] +name = "ark-serialize-derive" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae3281bc6d0fd7e549af32b52511e1302185bd688fd3359fa36423346ff682ea" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-std" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94893f1e0c6eeab764ade8dc4c0db24caf4fe7cbbaafc0eba0a9030f447b5185" +dependencies = [ + "num-traits", + "rand", +] + +[[package]] +name = "array-bytes" +version = "6.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d5dde061bd34119e902bbb2d9b90c5692635cf59fb91d582c2b68043f1b8293" + +[[package]] +name = "arrayref" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d151e35f61089500b617991b791fc8bfd237ae50cd5950803758a179b41e67a" + +[[package]] +name = "arrayvec" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" + +[[package]] +name = "async-channel" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35" +dependencies = [ + "concurrent-queue", + "event-listener 2.5.3", + "futures-core", +] + +[[package]] +name = "async-channel" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89b47800b0be77592da0afd425cc03468052844aff33b84e33cc696f64e77b6a" +dependencies = [ + "concurrent-queue", + "event-listener-strategy", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-executor" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7ebdfa2ebdab6b1760375fa7d6f382b9f486eac35fc994625a00e89280bdbb7" +dependencies = [ + "async-task", + "concurrent-queue", + "fastrand 2.1.0", + "futures-lite 2.3.0", + "slab", +] + +[[package]] +name = "async-global-executor" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05b1b633a2115cd122d73b955eadd9916c18c8f510ec9cd1686404c60ad1c29c" +dependencies = [ + "async-channel 2.3.1", + "async-executor", + "async-io 2.3.3", + "async-lock 3.4.0", + "blocking", + "futures-lite 2.3.0", + "once_cell", +] + +[[package]] +name = "async-io" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fc5b45d93ef0529756f812ca52e44c221b35341892d3dcc34132ac02f3dd2af" +dependencies = [ + "async-lock 2.8.0", + "autocfg", + "cfg-if", + "concurrent-queue", + "futures-lite 1.13.0", + "log", + "parking", + "polling 2.8.0", + "rustix 0.37.27", + "slab", + "socket2 0.4.10", + "waker-fn", +] + +[[package]] +name = "async-io" +version = "2.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d6baa8f0178795da0e71bc42c9e5d13261aac7ee549853162e66a241ba17964" +dependencies = [ + "async-lock 3.4.0", + "cfg-if", + "concurrent-queue", + "futures-io", + "futures-lite 2.3.0", + "parking", + "polling 3.7.2", + "rustix 0.38.34", + "slab", + "tracing", + "windows-sys 0.52.0", +] + +[[package]] +name = "async-lock" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "287272293e9d8c41773cec55e365490fe034813a2f172f502d6ddcf75b2f582b" +dependencies = [ + "event-listener 2.5.3", +] + +[[package]] +name = "async-lock" +version = "3.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18" +dependencies = [ + "event-listener 5.3.1", + "event-listener-strategy", + "pin-project-lite", +] + +[[package]] +name = "async-mutex" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "479db852db25d9dbf6204e6cb6253698f175c15726470f78af0d918e99d6156e" +dependencies = [ + "event-listener 2.5.3", +] + +[[package]] +name = "async-once-cell" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b49bd4c5b769125ea6323601c39815848972880efd33ffb2d01f9f909adc699" + +[[package]] +name = "async-process" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea6438ba0a08d81529c69b36700fa2f95837bfe3e776ab39cde9c14d9149da88" +dependencies = [ + "async-io 1.13.0", + "async-lock 2.8.0", + "async-signal", + "blocking", + "cfg-if", + "event-listener 3.1.0", + "futures-lite 1.13.0", + "rustix 0.38.34", + "windows-sys 0.48.0", +] + +[[package]] +name = "async-signal" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfb3634b73397aa844481f814fad23bbf07fdb0eabec10f2eb95e58944b1ec32" +dependencies = [ + "async-io 2.3.3", + "async-lock 3.4.0", + "atomic-waker", + "cfg-if", + "futures-core", + "futures-io", + "rustix 0.38.34", + "signal-hook-registry", + "slab", + "windows-sys 0.52.0", +] + +[[package]] +name = "async-std" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62565bb4402e926b29953c785397c6dc0391b7b446e45008b0049eb43cec6f5d" +dependencies = [ + "async-channel 1.9.0", + "async-global-executor", + "async-io 1.13.0", + "async-lock 2.8.0", + "async-process", + "crossbeam-utils", + "futures-channel", + "futures-core", + "futures-io", + "futures-lite 1.13.0", + "gloo-timers 0.2.6", + "kv-log-macro", + "log", + "memchr", + "once_cell", + "pin-project-lite", + "pin-utils", + "slab", + "wasm-bindgen-futures", +] + +[[package]] +name = "async-task" +version = "4.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" + +[[package]] +name = "async-tls" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f23d769dbf1838d5df5156e7b1ad404f4c463d1ac2c6aeb6cd943630f8a8400" +dependencies = [ + "futures-core", + "futures-io", + "rustls 0.19.1", +] + +[[package]] +name = "async-trait" +version = "0.1.81" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e0c28dcc82d7c8ead5cb13beb15405b57b8546e93215673ff8ca0349a028107" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + +[[package]] +name = "autocfg" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" + +[[package]] +name = "backtrace" +version = "0.3.73" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5cc23269a4f8976d0a4d2e7109211a419fe30e8d88d677cd60b6bc79c5732e0a" +dependencies = [ + "addr2line", + "cc", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", +] + +[[package]] +name = "base16ct" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" + +[[package]] +name = "base64" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" + +[[package]] +name = "base64" +version = "0.21.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" + +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + +[[package]] +name = "base64ct" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" + +[[package]] +name = "bincode" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" +dependencies = [ + "serde", +] + +[[package]] +name = "bip0039" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef0f0152ec5cf17f49a5866afaa3439816207fd4f0a224c0211ffaf5e278426" +dependencies = [ + "hmac", + "pbkdf2 0.10.1", + "sha2 0.10.8", + "unicode-normalization", + "zeroize", +] + +[[package]] +name = "bitcoin-internals" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9425c3bf7089c983facbae04de54513cce73b41c7f9ff8c845b54e7bc64ebbfb" + +[[package]] +name = "bitcoin_hashes" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1930a4dabfebb8d7d9992db18ebe3ae2876f0a305fab206fd168df931ede293b" +dependencies = [ + "bitcoin-internals", + "hex-conservative", +] + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitflags" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" +dependencies = [ + "serde", +] + +[[package]] +name = "bitvec" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" +dependencies = [ + "funty", + "radium", + "tap", + "wyz", +] + +[[package]] +name = "blake2" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" +dependencies = [ + "digest 0.10.7", +] + +[[package]] +name = "blake2b_simd" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23285ad32269793932e830392f2fe2f83e26488fd3ec778883a93c8323735780" +dependencies = [ + "arrayref", + "arrayvec", + "constant_time_eq", +] + +[[package]] +name = "block-buffer" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" +dependencies = [ + "generic-array", +] + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + +[[package]] +name = "blocking" +version = "1.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "703f41c54fc768e63e091340b424302bb1c29ef4aa0c7f10fe849dfb114d29ea" +dependencies = [ + "async-channel 2.3.1", + "async-task", + "futures-io", + "futures-lite 2.3.0", + "piper", +] + +[[package]] +name = "bounded-collections" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d32385ecb91a31bddaf908e8dcf4a15aef1bcd3913cc03ebfad02ff6d568abc1" +dependencies = [ + "log", + "parity-scale-codec", + "scale-info", + "serde", +] + +[[package]] +name = "bs58" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf88ba1141d185c399bee5288d850d63b8369520c1eafc32a0430b5b6c287bf4" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "bumpalo" +version = "3.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" + +[[package]] +name = "byte-slice-cast" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3ac9f8b63eca6fd385229b3675f6cc0dc5c8a5c8a54a59d4f52ffd670d87b0c" + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "bytes" +version = "1.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a12916984aab3fa6e39d655a33e09c0071eb36d6ab3aea5c2d78551f1df6d952" + +[[package]] +name = "camino" +version = "1.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0ec6b951b160caa93cc0c7b209e5a3bff7aae9062213451ac99493cd844c239" +dependencies = [ + "serde", +] + +[[package]] +name = "cargo-platform" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24b1f0365a6c6bb4020cd05806fd0d33c44d38046b8bd7f0e40814b9763cabfc" +dependencies = [ + "serde", +] + +[[package]] +name = "cargo_metadata" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d886547e41f740c616ae73108f6eb70afe6d940c7bc697cb30f13daec073037" +dependencies = [ + "camino", + "cargo-platform", + "semver", + "serde", + "serde_json", + "thiserror", +] + +[[package]] +name = "cc" +version = "1.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2aba8f4e9906c7ce3c73463f62a7f0c65183ada1a2d47e397cc8810827f9694f" + +[[package]] +name = "cfb" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d38f2da7a0a2c4ccf0065be06397cc26a81f4e528be095826eee9d4adbb8c60f" +dependencies = [ + "byteorder", + "fnv", + "uuid", +] + +[[package]] +name = "cfg-expr" +version = "0.15.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d067ad48b8650848b989a59a86c6c36a995d02d2bf778d45c3c5d57bc2718f02" +dependencies = [ + "smallvec", +] + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "chrono" +version = "0.4.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" +dependencies = [ + "android-tzdata", + "iana-time-zone", + "js-sys", + "num-traits", + "wasm-bindgen", + "windows-targets 0.52.6", +] + +[[package]] +name = "ciborium" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42e69ffd6f0917f5c029256a24d0161db17cea3997d185db0d35926308770f0e" +dependencies = [ + "ciborium-io", + "ciborium-ll", + "serde", +] + +[[package]] +name = "ciborium-io" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05afea1e0a06c9be33d539b876f1ce3692f4afea2cb41f740e7743225ed1c757" + +[[package]] +name = "ciborium-ll" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57663b653d948a338bfb3eeba9bb2fd5fcfaecb9e199e87e1eda4d9e8b240fd9" +dependencies = [ + "ciborium-io", + "half", +] + +[[package]] +name = "clap" +version = "4.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35723e6a11662c2afb578bcf0b88bf6ea8e21282a953428f240574fcc3a2b5b3" +dependencies = [ + "clap_builder", +] + +[[package]] +name = "clap_builder" +version = "4.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49eb96cbfa7cfa35017b7cd548c75b14c3118c98b423041d70562665e07fb0fa" +dependencies = [ + "anstream", + "anstyle", + "clap_lex", + "strsim", +] + +[[package]] +name = "clap_lex" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1462739cb27611015575c0c11df5df7601141071f07518d56fcc1be504cbec97" + +[[package]] +name = "codemap" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e769b5c8c8283982a987c6e948e540254f1058d5a74b8794914d4ef5fc2a24" + +[[package]] +name = "colorchoice" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3fd119d74b830634cea2a0f58bbd0d54540518a14397557951e79340abc28c0" + +[[package]] +name = "concurrent-queue" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "console_error_panic_hook" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a06aeb73f470f66dcdbf7223caeebb85984942f22f1adb2a088cf9668146bbbc" +dependencies = [ + "cfg-if", + "wasm-bindgen", +] + +[[package]] +name = "const-oid" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" + +[[package]] +name = "const_format" +version = "0.2.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3a214c7af3d04997541b18d432afaff4c455e79e2029079647e72fc2bd27673" +dependencies = [ + "const_format_proc_macros", +] + +[[package]] +name = "const_format_proc_macros" +version = "0.2.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7f6ff08fd20f4f299298a28e2dfa8a8ba1036e6cd2460ac1de7b425d76f2500" +dependencies = [ + "proc-macro2", + "quote", + "unicode-xid", +] + +[[package]] +name = "constant_time_eq" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7144d30dcf0fafbce74250a3963025d8d52177934239851c917d29f1df280c2" + +[[package]] +name = "constcat" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd7e35aee659887cbfb97aaf227ac12cad1a9d7c71e55ff3376839ed4e282d08" + +[[package]] +name = "convert_case" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec182b0ca2f35d8fc196cf3404988fd8b8c739a4d270ff118a398feb0cbec1ca" +dependencies = [ + "unicode-segmentation", +] + +[[package]] +name = "core-foundation" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" + +[[package]] +name = "cpufeatures" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" +dependencies = [ + "libc", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" + +[[package]] +name = "crunchy" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" + +[[package]] +name = "crypto-bigint" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" +dependencies = [ + "generic-array", + "rand_core 0.6.4", + "subtle", + "zeroize", +] + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "rand_core 0.6.4", + "typenum", +] + +[[package]] +name = "curve25519-dalek" +version = "3.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b9fdf9972b2bd6af2d913799d9ebc165ea4d2e65878e329d9c6b372c4491b61" +dependencies = [ + "byteorder", + "digest 0.9.0", + "rand_core 0.5.1", + "subtle", + "zeroize", +] + +[[package]] +name = "curve25519-dalek" +version = "4.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97fb8b7c4503de7d6ae7b42ab72a5a59857b4c937ec27a3d4539dba95b5ab2be" +dependencies = [ + "cfg-if", + "cpufeatures", + "curve25519-dalek-derive", + "digest 0.10.7", + "fiat-crypto", + "rustc_version", + "subtle", + "zeroize", +] + +[[package]] +name = "curve25519-dalek-derive" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "darling" +version = "0.20.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.20.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95133861a8032aaea082871032f5815eb9e98cef03fa916ab4500513994df9e5" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "darling_macro" +version = "0.20.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" +dependencies = [ + "darling_core", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "dashmap" +version = "5.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" +dependencies = [ + "cfg-if", + "hashbrown 0.14.5", + "lock_api", + "once_cell", + "parking_lot_core", +] + +[[package]] +name = "data-encoding" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8566979429cf69b49a5c740c60791108e86440e8be149bbea4fe54d2c32d6e2" + +[[package]] +name = "der" +version = "0.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f55bf8e7b65898637379c1b74eb1551107c8294ed26d855ceb9fd1a09cfc9bc0" +dependencies = [ + "const-oid", + "zeroize", +] + +[[package]] +name = "derivative" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "derive_more" +version = "0.99.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f33878137e4dafd7fa914ad4e259e18a4e8e532b9617a2d0150262bf53abfce" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "digest" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" +dependencies = [ + "generic-array", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer 0.10.4", + "const-oid", + "crypto-common", + "subtle", +] + +[[package]] +name = "dioxus" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8e7fe217b50d43b27528b0f24c89b411f742a3e7564d1cfbf85253f967954db" +dependencies = [ + "dioxus-config-macro", + "dioxus-core", + "dioxus-core-macro", + "dioxus-fullstack", + "dioxus-hooks", + "dioxus-hot-reload", + "dioxus-html", + "dioxus-router", + "dioxus-signals", + "dioxus-web", +] + +[[package]] +name = "dioxus-cli-config" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7dffc452ed91af6ef772b0d9a5899573f6785314e97c533733ec55413c01df3" +dependencies = [ + "once_cell", + "serde", + "serde_json", + "tracing", +] + +[[package]] +name = "dioxus-config-macro" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb1a1aa34cc04c1f7fcbb7a10791ba773cc02d834fe3ec1fe05647699f3b101f" +dependencies = [ + "proc-macro2", + "quote", +] + +[[package]] +name = "dioxus-core" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3730d2459ab66951cedf10b09eb84141a6eda7f403c28057cbe010495be156b7" +dependencies = [ + "futures-channel", + "futures-util", + "generational-box", + "longest-increasing-subsequence", + "rustc-hash", + "serde", + "slab", + "slotmap", + "tracing", + "tracing-subscriber 0.3.18", +] + +[[package]] +name = "dioxus-core-macro" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d9c0dfe0e6a46626fa716c4aa1d2ccb273441337909cfeacad5bb6fcfb947d2" +dependencies = [ + "constcat", + "convert_case", + "dioxus-rsx", + "prettyplease", + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "dioxus-debug-cell" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ea539174bb236e0e7dc9c12b19b88eae3cb574dedbd0252a2d43ea7e6de13e2" + +[[package]] +name = "dioxus-fullstack" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b80f0ac18166302341164e681322e0385131c08a11c3cc1c51ee8df799ab0d3d" +dependencies = [ + "async-trait", + "base64 0.21.7", + "bytes", + "ciborium", + "dioxus-hot-reload", + "dioxus-lib", + "dioxus-web", + "dioxus_server_macro", + "futures-util", + "once_cell", + "serde", + "serde_json", + "server_fn", + "tracing", + "web-sys", +] + +[[package]] +name = "dioxus-hooks" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa8f9c661eea82295219d25555d5c0b597e74186b029038ceb5e3700ccbd4380" +dependencies = [ + "dioxus-core", + "dioxus-debug-cell", + "dioxus-signals", + "futures-channel", + "futures-util", + "generational-box", + "slab", + "thiserror", + "tracing", +] + +[[package]] +name = "dioxus-hot-reload" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77d01246cb1b93437fb0bbd0dd11cfc66342d86b4311819e76654f2017ce1473" +dependencies = [ + "dioxus-core", + "dioxus-html", + "dioxus-rsx", + "interprocess-docfix", + "serde", + "serde_json", +] + +[[package]] +name = "dioxus-html" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f01a0826f179adad6ea8d6586746e8edde0c602cc86f4eb8e5df7a3b204c4018" +dependencies = [ + "async-trait", + "dioxus-core", + "dioxus-html-internal-macro", + "enumset", + "euclid", + "futures-channel", + "generational-box", + "keyboard-types", + "serde", + "serde-value", + "serde_json", + "serde_repr", + "tracing", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "dioxus-html-internal-macro" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b96f35a608d0ab8f4ca6f66ce1828354e4ebd41580b12454f490221a11da93c" +dependencies = [ + "convert_case", + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "dioxus-interpreter-js" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "351fad098c657d14f3ac2900362d2b86e83c22c4c620a404839e1ab628f3395b" +dependencies = [ + "js-sys", + "md5", + "sledgehammer_bindgen", + "sledgehammer_utils", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "dioxus-lib" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8bd39b2c41dd1915dcb91d914ea72d8b646f1f8995aaeff82816b862ec586ecd" +dependencies = [ + "dioxus-core", + "dioxus-core-macro", + "dioxus-hooks", + "dioxus-html", + "dioxus-rsx", + "dioxus-signals", +] + +[[package]] +name = "dioxus-logger" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d7cbab0b5519060fe9e14b3c21e3f2329b8386cd905618f78c7b929cd00cf54" +dependencies = [ + "log", + "web-sys", +] + +[[package]] +name = "dioxus-router" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c235c5dbeb528c0c2b0424763da812e7500df69b82eddac54db6f4975e065c5f" +dependencies = [ + "dioxus-cli-config", + "dioxus-lib", + "dioxus-router-macro", + "gloo 0.8.1", + "gloo-utils 0.1.7", + "js-sys", + "tracing", + "url", + "urlencoding", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "dioxus-router-macro" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e7cd1c5137ba361f2150cdea6b3bc9ddda7b1af84b22c9ee6b5499bf43e1381" +dependencies = [ + "proc-macro2", + "quote", + "slab", + "syn 2.0.72", +] + +[[package]] +name = "dioxus-rsx" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15c400bc8a779107d8f3a67b14375db07dbd2bc31163bf085a8e9097f36f7179" +dependencies = [ + "dioxus-core", + "internment", + "krates", + "proc-macro2", + "quote", + "syn 2.0.72", + "tracing", +] + +[[package]] +name = "dioxus-signals" +version = "0.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e3e224cd3d3713f159f0199fc088c292a0f4adb94996b48120157f6a8f8342d" +dependencies = [ + "dioxus-core", + "futures-channel", + "futures-util", + "generational-box", + "once_cell", + "parking_lot", + "rustc-hash", + "tracing", +] + +[[package]] +name = "dioxus-std" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d04c6c53c21a071da1d3f35553a75593fabba84e2c112814bdd25fcdf6e2afe5" +dependencies = [ + "cfg-if", + "dioxus", + "js-sys", + "serde", + "serde_json", + "tracing", + "unic-langid", + "uuid", +] + +[[package]] +name = "dioxus-web" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0855ac81fcc9252a0863930a7a7cbb2504fc1b6efe893489c8d0e23aaeb2cb9" +dependencies = [ + "async-trait", + "console_error_panic_hook", + "dioxus-core", + "dioxus-html", + "dioxus-interpreter-js", + "futures-channel", + "futures-util", + "generational-box", + "js-sys", + "rustc-hash", + "serde", + "serde-wasm-bindgen 0.5.0", + "serde_json", + "tracing", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "dioxus_server_macro" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5ef2cad17001c1155f019cb69adbacd620644566d78a77d0778807bb106a337" +dependencies = [ + "convert_case", + "proc-macro2", + "quote", + "server_fn_macro", + "syn 2.0.72", +] + +[[package]] +name = "displaydoc" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "document-features" +version = "0.2.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb6969eaabd2421f8a2775cfd2471a2b634372b4a25d41e3bd647b79912850a0" +dependencies = [ + "litrs", +] + +[[package]] +name = "dyn-clonable" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e9232f0e607a262ceb9bd5141a3dfb3e4db6994b31989bbfd845878cba59fd4" +dependencies = [ + "dyn-clonable-impl", + "dyn-clone", +] + +[[package]] +name = "dyn-clonable-impl" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "558e40ea573c374cf53507fd240b7ee2f5477df7cfebdb97323ec61c719399c5" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "dyn-clone" +version = "1.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d6ef0072f8a535281e4876be788938b528e9a1d43900b82c2569af7da799125" + +[[package]] +name = "ecdsa" +version = "0.16.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" +dependencies = [ + "der", + "digest 0.10.7", + "elliptic-curve", + "rfc6979", + "serdect", + "signature", + "spki", +] + +[[package]] +name = "ed25519-zebra" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c24f403d068ad0b359e577a77f92392118be3f3c927538f2bb544a5ecd828c6" +dependencies = [ + "curve25519-dalek 3.2.0", + "hashbrown 0.12.3", + "hex", + "rand_core 0.6.4", + "sha2 0.9.9", + "zeroize", +] + +[[package]] +name = "either" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" + +[[package]] +name = "elliptic-curve" +version = "0.13.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" +dependencies = [ + "base16ct", + "crypto-bigint", + "digest 0.10.7", + "ff", + "generic-array", + "group", + "pkcs8", + "rand_core 0.6.4", + "sec1", + "serdect", + "subtle", + "zeroize", +] + +[[package]] +name = "encoding_rs" +version = "0.8.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b45de904aa0b010bce2ab45264d0631681847fa7b6f2eaa7dab7619943bc4f59" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "enumset" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d07a4b049558765cef5f0c1a273c3fc57084d768b44d2f98127aef4cceb17293" +dependencies = [ + "enumset_derive", +] + +[[package]] +name = "enumset_derive" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59c3b24c345d8c314966bdc1832f6c2635bfcce8e7cf363bd115987bba2ee242" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "env_filter" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f2c92ceda6ceec50f43169f9ee8424fe2db276791afde7b2cd8bc084cb376ab" +dependencies = [ + "log", + "regex", +] + +[[package]] +name = "env_logger" +version = "0.11.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13fa619b91fb2381732789fc5de83b45675e882f66623b7d8cb4f643017018d" +dependencies = [ + "anstream", + "anstyle", + "env_filter", + "humantime", + "log", +] + +[[package]] +name = "environmental" +version = "1.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e48c92028aaa870e83d51c64e5d4e0b6981b360c522198c23959f219a4e1b15b" + +[[package]] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + +[[package]] +name = "errno" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "euclid" +version = "0.22.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0f0eb73b934648cd7a4a61f1b15391cd95dab0b4da6e2e66c2a072c144b4a20" +dependencies = [ + "num-traits", + "serde", +] + +[[package]] +name = "event-listener" +version = "2.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" + +[[package]] +name = "event-listener" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d93877bcde0eb80ca09131a08d23f0a5c18a620b01db137dba666d18cd9b30c2" +dependencies = [ + "concurrent-queue", + "parking", + "pin-project-lite", +] + +[[package]] +name = "event-listener" +version = "5.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6032be9bd27023a771701cc49f9f053c751055f71efb2e0ae5c15809093675ba" +dependencies = [ + "concurrent-queue", + "parking", + "pin-project-lite", +] + +[[package]] +name = "event-listener-strategy" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f214dc438f977e6d4e3500aaa277f5ad94ca83fbbd9b1a15713ce2344ccc5a1" +dependencies = [ + "event-listener 5.3.1", + "pin-project-lite", +] + +[[package]] +name = "ewebsock" +version = "0.5.0" +source = "git+https://github.com/S0c5/ewebsock.git?branch=enhacement/aviod-blocking-operations-with-mpsc-futures#2d0fbadff93bc786aadd611de31e32471bc1fa02" +dependencies = [ + "async-mutex", + "document-features", + "futures", + "futures-channel", + "futures-util", + "js-sys", + "log", + "tungstenite", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "expander" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2c470c71d91ecbd179935b24170459e926382eaaa86b590b78814e180d8a8e2" +dependencies = [ + "blake2", + "file-guard", + "fs-err", + "prettyplease", + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "fastrand" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" +dependencies = [ + "instant", +] + +[[package]] +name = "fastrand" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fc0510504f03c51ada170672ac806f1f105a88aa97a5281117e1ddc3368e51a" + +[[package]] +name = "ff" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449" +dependencies = [ + "rand_core 0.6.4", + "subtle", +] + +[[package]] +name = "fiat-crypto" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" + +[[package]] +name = "file-guard" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21ef72acf95ec3d7dbf61275be556299490a245f017cf084bd23b4f68cf9407c" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "fixed-hash" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "835c052cb0c08c1acf6ffd71c022172e18723949c8282f2b9f27efbc51e64534" +dependencies = [ + "byteorder", + "rand", + "rustc-hex", + "static_assertions", +] + +[[package]] +name = "fixedbitset" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "foreign-types" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" +dependencies = [ + "foreign-types-shared", +] + +[[package]] +name = "foreign-types-shared" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" + +[[package]] +name = "form_urlencoded" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "frame-metadata" +version = "16.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87cf1549fba25a6fcac22785b61698317d958e96cac72a59102ea45b9ae64692" +dependencies = [ + "cfg-if", + "parity-scale-codec", + "scale-info", + "serde", +] + +[[package]] +name = "fs-err" +version = "2.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88a41f105fe1d5b6b34b2055e3dc59bb79b46b48b2040b9e6c7b4b5de097aa41" +dependencies = [ + "autocfg", +] + +[[package]] +name = "funty" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" + +[[package]] +name = "futures" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" +dependencies = [ + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-channel" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-core" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" + +[[package]] +name = "futures-executor" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", + "num_cpus", +] + +[[package]] +name = "futures-io" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" + +[[package]] +name = "futures-lite" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce" +dependencies = [ + "fastrand 1.9.0", + "futures-core", + "futures-io", + "memchr", + "parking", + "pin-project-lite", + "waker-fn", +] + +[[package]] +name = "futures-lite" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52527eb5074e35e9339c6b4e8d12600c7128b68fb25dcb9fa9dec18f7c25f3a5" +dependencies = [ + "fastrand 2.1.0", + "futures-core", + "futures-io", + "parking", + "pin-project-lite", +] + +[[package]] +name = "futures-macro" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "futures-sink" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" + +[[package]] +name = "futures-task" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" + +[[package]] +name = "futures-util" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "generational-box" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "557cf2cbacd0504c6bf8c29f52f8071e0de1d9783346713dc6121d7fa1e5d0e0" +dependencies = [ + "parking_lot", +] + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", + "zeroize", +] + +[[package]] +name = "getopts" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14dbbfd5c71d70241ecf9e6f13737f7b5ce823821063188d7e46c41d371eebd5" +dependencies = [ + "unicode-width", +] + +[[package]] +name = "getrandom" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" +dependencies = [ + "cfg-if", + "js-sys", + "libc", + "wasi", + "wasm-bindgen", +] + +[[package]] +name = "getrandom_or_panic" +version = "0.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ea1015b5a70616b688dc230cfe50c8af89d972cb132d5a622814d29773b10b9" +dependencies = [ + "rand", + "rand_core 0.6.4", +] + +[[package]] +name = "gimli" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd" + +[[package]] +name = "gloo" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28999cda5ef6916ffd33fb4a7b87e1de633c47c0dc6d97905fee1cdaa142b94d" +dependencies = [ + "gloo-console 0.2.3", + "gloo-dialogs 0.1.1", + "gloo-events 0.1.2", + "gloo-file 0.2.3", + "gloo-history 0.1.5", + "gloo-net 0.3.1", + "gloo-render 0.1.1", + "gloo-storage 0.2.2", + "gloo-timers 0.2.6", + "gloo-utils 0.1.7", + "gloo-worker 0.2.1", +] + +[[package]] +name = "gloo" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d15282ece24eaf4bd338d73ef580c6714c8615155c4190c781290ee3fa0fd372" +dependencies = [ + "gloo-console 0.3.0", + "gloo-dialogs 0.2.0", + "gloo-events 0.2.0", + "gloo-file 0.3.0", + "gloo-history 0.2.2", + "gloo-net 0.5.0", + "gloo-render 0.2.0", + "gloo-storage 0.3.0", + "gloo-timers 0.3.0", + "gloo-utils 0.2.0", + "gloo-worker 0.5.0", +] + +[[package]] +name = "gloo-console" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82b7ce3c05debe147233596904981848862b068862e9ec3e34be446077190d3f" +dependencies = [ + "gloo-utils 0.1.7", + "js-sys", + "serde", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "gloo-console" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a17868f56b4a24f677b17c8cb69958385102fa879418052d60b50bc1727e261" +dependencies = [ + "gloo-utils 0.2.0", + "js-sys", + "serde", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "gloo-dialogs" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67062364ac72d27f08445a46cab428188e2e224ec9e37efdba48ae8c289002e6" +dependencies = [ + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "gloo-dialogs" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf4748e10122b01435750ff530095b1217cf6546173459448b83913ebe7815df" +dependencies = [ + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "gloo-events" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68b107f8abed8105e4182de63845afcc7b69c098b7852a813ea7462a320992fc" +dependencies = [ + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "gloo-events" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "27c26fb45f7c385ba980f5fa87ac677e363949e065a083722697ef1b2cc91e41" +dependencies = [ + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "gloo-file" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8d5564e570a38b43d78bdc063374a0c3098c4f0d64005b12f9bbe87e869b6d7" +dependencies = [ + "gloo-events 0.1.2", + "js-sys", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "gloo-file" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97563d71863fb2824b2e974e754a81d19c4a7ec47b09ced8a0e6656b6d54bd1f" +dependencies = [ + "futures-channel", + "gloo-events 0.2.0", + "js-sys", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "gloo-history" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85725d90bf0ed47063b3930ef28e863658a7905989e9929a8708aab74a1d5e7f" +dependencies = [ + "gloo-events 0.1.2", + "gloo-utils 0.1.7", + "serde", + "serde-wasm-bindgen 0.5.0", + "serde_urlencoded", + "thiserror", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "gloo-history" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "903f432be5ba34427eac5e16048ef65604a82061fe93789f2212afc73d8617d6" +dependencies = [ + "getrandom", + "gloo-events 0.2.0", + "gloo-utils 0.2.0", + "serde", + "serde-wasm-bindgen 0.6.5", + "serde_urlencoded", + "thiserror", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "gloo-net" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a66b4e3c7d9ed8d315fd6b97c8b1f74a7c6ecbbc2320e65ae7ed38b7068cc620" +dependencies = [ + "futures-channel", + "futures-core", + "futures-sink", + "gloo-utils 0.1.7", + "http 0.2.12", + "js-sys", + "pin-project", + "serde", + "serde_json", + "thiserror", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "gloo-net" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43aaa242d1239a8822c15c645f02166398da4f8b5c4bae795c1f5b44e9eee173" +dependencies = [ + "futures-channel", + "futures-core", + "futures-sink", + "gloo-utils 0.2.0", + "http 0.2.12", + "js-sys", + "pin-project", + "serde", + "serde_json", + "thiserror", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "gloo-render" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2fd9306aef67cfd4449823aadcd14e3958e0800aa2183955a309112a84ec7764" +dependencies = [ + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "gloo-render" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56008b6744713a8e8d98ac3dcb7d06543d5662358c9c805b4ce2167ad4649833" +dependencies = [ + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "gloo-storage" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d6ab60bf5dbfd6f0ed1f7843da31b41010515c745735c970e821945ca91e480" +dependencies = [ + "gloo-utils 0.1.7", + "js-sys", + "serde", + "serde_json", + "thiserror", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "gloo-storage" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbc8031e8c92758af912f9bc08fbbadd3c6f3cfcbf6b64cdf3d6a81f0139277a" +dependencies = [ + "gloo-utils 0.2.0", + "js-sys", + "serde", + "serde_json", + "thiserror", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "gloo-timers" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b995a66bb87bebce9a0f4a95aed01daca4872c050bfcb21653361c03bc35e5c" +dependencies = [ + "futures-channel", + "futures-core", + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "gloo-timers" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbb143cf96099802033e0d4f4963b19fd2e0b728bcf076cd9cf7f6634f092994" +dependencies = [ + "futures-channel", + "futures-core", + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "gloo-utils" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "037fcb07216cb3a30f7292bd0176b050b7b9a052ba830ef7d5d65f6dc64ba58e" +dependencies = [ + "js-sys", + "serde", + "serde_json", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "gloo-utils" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b5555354113b18c547c1d3a98fbf7fb32a9ff4f6fa112ce823a21641a0ba3aa" +dependencies = [ + "js-sys", + "serde", + "serde_json", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "gloo-worker" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13471584da78061a28306d1359dd0178d8d6fc1c7c80e5e35d27260346e0516a" +dependencies = [ + "anymap2", + "bincode", + "gloo-console 0.2.3", + "gloo-utils 0.1.7", + "js-sys", + "serde", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "gloo-worker" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "085f262d7604911c8150162529cefab3782e91adb20202e8658f7275d2aefe5d" +dependencies = [ + "bincode", + "futures", + "gloo-utils 0.2.0", + "gloo-worker-macros", + "js-sys", + "pinned", + "serde", + "thiserror", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "gloo-worker-macros" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "956caa58d4857bc9941749d55e4bd3000032d8212762586fa5705632967140e7" +dependencies = [ + "proc-macro-crate 1.3.1", + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "grass" +version = "0.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a46def7216d331efa51a6aa796ef777bfdfe9605378382827a553344b7e5eefc" +dependencies = [ + "clap", + "getrandom", + "grass_compiler", +] + +[[package]] +name = "grass_compiler" +version = "0.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f39216c1843182f78541276fec96f88406861f16aa19cc9f8add70f8e67b7577" +dependencies = [ + "codemap", + "indexmap", + "lasso", + "once_cell", + "phf", + "rand", +] + +[[package]] +name = "group" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" +dependencies = [ + "ff", + "rand_core 0.6.4", + "subtle", +] + +[[package]] +name = "h2" +version = "0.3.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8" +dependencies = [ + "bytes", + "fnv", + "futures-core", + "futures-sink", + "futures-util", + "http 0.2.12", + "indexmap", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "h2" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa82e28a107a8cc405f0839610bdc9b15f1e25ec7d696aa5cf173edbcb1486ab" +dependencies = [ + "atomic-waker", + "bytes", + "fnv", + "futures-core", + "futures-sink", + "http 1.1.0", + "indexmap", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "half" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6dd08c532ae367adf81c312a4580bc67f1d0fe8bc9c460520283f4c0ff277888" +dependencies = [ + "cfg-if", + "crunchy", +] + +[[package]] +name = "hash-db" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e7d7786361d7425ae2fe4f9e407eb0efaa0840f5212d109cc018c40c35c6ab4" + +[[package]] +name = "hash256-std-hasher" +version = "0.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92c171d55b98633f4ed3860808f004099b36c1cc29c42cfc53aa8591b21efcf2" +dependencies = [ + "crunchy", +] + +[[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" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +dependencies = [ + "ahash 0.7.8", +] + +[[package]] +name = "hashbrown" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" +dependencies = [ + "ahash 0.8.11", +] + +[[package]] +name = "hashbrown" +version = "0.14.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" +dependencies = [ + "ahash 0.8.11", + "allocator-api2", +] + +[[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 = "hermit-abi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" + +[[package]] +name = "hermit-abi" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbf6a919d6cf397374f7dfeeea91d974c7c0a7221d0d0f4f20d859d329e53fcc" + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "hex-conservative" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "212ab92002354b4819390025006c897e8140934349e8635c9b077f47b4dcbd20" + +[[package]] +name = "hmac" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +dependencies = [ + "digest 0.10.7", +] + +[[package]] +name = "home" +version = "0.5.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" +dependencies = [ + "windows-sys 0.52.0", +] + +[[package]] +name = "http" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "http" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21b9ddb458710bc376481b842f5da65cdf31522de232c1ca8146abce2a358258" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "http-body" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" +dependencies = [ + "bytes", + "http 0.2.12", + "pin-project-lite", +] + +[[package]] +name = "http-body" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" +dependencies = [ + "bytes", + "http 1.1.0", +] + +[[package]] +name = "http-body-util" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f" +dependencies = [ + "bytes", + "futures-util", + "http 1.1.0", + "http-body 1.0.1", + "pin-project-lite", +] + +[[package]] +name = "httparse" +version = "1.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fcc0b4a115bf80b728eb8ea024ad5bd707b615bfed49e0665b6e0f86fd082d9" + +[[package]] +name = "httpdate" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" + +[[package]] +name = "humantime" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" + +[[package]] +name = "hyper" +version = "0.14.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a152ddd61dfaec7273fe8419ab357f33aee0d914c5f4efbf0d96fa749eea5ec9" +dependencies = [ + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "h2 0.3.26", + "http 0.2.12", + "http-body 0.4.6", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "socket2 0.5.7", + "tokio", + "tower-service", + "tracing", + "want", +] + +[[package]] +name = "hyper" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50dfd22e0e76d0f662d429a5f80fcaf3855009297eab6a0a9f8543834744ba05" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "h2 0.4.5", + "http 1.1.0", + "http-body 1.0.1", + "httparse", + "itoa", + "pin-project-lite", + "smallvec", + "tokio", + "want", +] + +[[package]] +name = "hyper-rustls" +version = "0.27.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ee4be2c948921a1a5320b629c4193916ed787a7f7f293fd3f7f5a6c9de74155" +dependencies = [ + "futures-util", + "http 1.1.0", + "hyper 1.4.1", + "hyper-util", + "rustls 0.23.12", + "rustls-pki-types", + "tokio", + "tokio-rustls", + "tower-service", +] + +[[package]] +name = "hyper-tls" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" +dependencies = [ + "bytes", + "hyper 0.14.30", + "native-tls", + "tokio", + "tokio-native-tls", +] + +[[package]] +name = "hyper-tls" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" +dependencies = [ + "bytes", + "http-body-util", + "hyper 1.4.1", + "hyper-util", + "native-tls", + "tokio", + "tokio-native-tls", + "tower-service", +] + +[[package]] +name = "hyper-util" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ab92f4f49ee4fb4f997c784b7a2e0fa70050211e0b6a287f898c3c9785ca956" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "http 1.1.0", + "http-body 1.0.1", + "hyper 1.4.1", + "pin-project-lite", + "socket2 0.5.7", + "tokio", + "tower", + "tower-service", + "tracing", +] + +[[package]] +name = "iana-time-zone" +version = "0.1.60" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "windows-core", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "idna" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" +dependencies = [ + "unicode-bidi", + "unicode-normalization", +] + +[[package]] +name = "impl-codec" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba6a270039626615617f3f36d15fc827041df3b78c439da2cadfa47455a77f2f" +dependencies = [ + "parity-scale-codec", +] + +[[package]] +name = "impl-serde" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebc88fc67028ae3db0c853baa36269d398d5f45b6982f95549ff5def78c935cd" +dependencies = [ + "serde", +] + +[[package]] +name = "impl-trait-for-tuples" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11d7a9f6330b71fea57921c9b61c47ee6e84f72d394754eff6163ae67e7395eb" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "indexmap" +version = "2.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" +dependencies = [ + "equivalent", + "hashbrown 0.14.5", +] + +[[package]] +name = "infer" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a6c16b11a665b26aeeb9b1d7f954cdeb034be38dd00adab4f2ae921a8fee804" +dependencies = [ + "cfb", +] + +[[package]] +name = "infer" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb33622da908807a06f9513c19b3c1ad50fab3e4137d82a78107d502075aa199" +dependencies = [ + "cfb", +] + +[[package]] +name = "instant" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "internment" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04e8e537b529b8674e97e9fb82c10ff168a290ac3867a0295f112061ffbca1ef" +dependencies = [ + "hashbrown 0.14.5", + "parking_lot", +] + +[[package]] +name = "interprocess-docfix" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b84ee245c606aeb0841649a9288e3eae8c61b853a8cd5c0e14450e96d53d28f" +dependencies = [ + "blocking", + "cfg-if", + "futures-core", + "futures-io", + "intmap", + "libc", + "once_cell", + "rustc_version", + "spinning", + "thiserror", + "to_method", + "winapi", +] + +[[package]] +name = "intmap" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae52f28f45ac2bc96edb7714de995cffc174a395fb0abf5bff453587c980d7b9" + +[[package]] +name = "io-lifetimes" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" +dependencies = [ + "hermit-abi 0.3.9", + "libc", + "windows-sys 0.48.0", +] + +[[package]] +name = "ipnet" +version = "2.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" + +[[package]] +name = "is_terminal_polyfill" +version = "1.70.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" + +[[package]] +name = "itertools" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" + +[[package]] +name = "js-sys" +version = "0.3.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "jsonrpc" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f8423b78fc94d12ef1a4a9d13c348c9a78766dda0cc18817adf0faf77e670c8" +dependencies = [ + "serde", + "serde_derive", + "serde_json", +] + +[[package]] +name = "k256" +version = "0.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "956ff9b67e26e1a6a866cb758f12c6f8746208489e3e4a4b5580802f2f0a587b" +dependencies = [ + "cfg-if", + "ecdsa", + "elliptic-curve", + "once_cell", + "serdect", + "sha2 0.10.8", +] + +[[package]] +name = "keccak" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ecc2af9a1119c51f12a14607e783cb977bde58bc069ff0c3da1095e635d70654" +dependencies = [ + "cpufeatures", +] + +[[package]] +name = "keyboard-types" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b750dcadc39a09dbadd74e118f6dd6598df77fa01df0cfcdc52c28dece74528a" +dependencies = [ + "bitflags 2.6.0", + "serde", + "unicode-segmentation", +] + +[[package]] +name = "krates" +version = "0.16.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fcb3baf2360eb25ad31f0ada3add63927ada6db457791979b82ac199f835cb9" +dependencies = [ + "cargo-platform", + "cargo_metadata", + "cfg-expr", + "petgraph", + "semver", +] + +[[package]] +name = "kv-log-macro" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0de8b303297635ad57c9f5059fd9cee7a47f8e8daa09df0fcd07dd39fb22977f" +dependencies = [ + "log", +] + +[[package]] +name = "lasso" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4644821e1c3d7a560fe13d842d13f587c07348a1a05d3a797152d41c90c56df2" +dependencies = [ + "hashbrown 0.13.2", +] + +[[package]] +name = "lazy_static" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" + +[[package]] +name = "libc" +version = "0.2.155" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" + +[[package]] +name = "libsecp256k1" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95b09eff1b35ed3b33b877ced3a691fc7a481919c7e29c53c906226fcf55e2a1" +dependencies = [ + "arrayref", + "base64 0.13.1", + "digest 0.9.0", + "libsecp256k1-core", + "libsecp256k1-gen-ecmult", + "libsecp256k1-gen-genmult", + "rand", + "serde", + "sha2 0.9.9", +] + +[[package]] +name = "libsecp256k1-core" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5be9b9bb642d8522a44d533eab56c16c738301965504753b03ad1de3425d5451" +dependencies = [ + "crunchy", + "digest 0.9.0", + "subtle", +] + +[[package]] +name = "libsecp256k1-gen-ecmult" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3038c808c55c87e8a172643a7d87187fc6c4174468159cb3090659d55bcb4809" +dependencies = [ + "libsecp256k1-core", +] + +[[package]] +name = "libsecp256k1-gen-genmult" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3db8d6ba2cec9eacc40e6e8ccc98931840301f1006e95647ceb2dd5c3aa06f7c" +dependencies = [ + "libsecp256k1-core", +] + +[[package]] +name = "libwallet" +version = "0.3.0" +source = "git+https://github.com/virto-network/virto-sdk.git?branch=main#1bbff6bff5aad953b70b85a0cd4b91be1ac6c815" +dependencies = [ + "arrayvec", + "bip0039", + "rand_core 0.6.4", + "schnorrkel", +] + +[[package]] +name = "linux-raw-sys" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" + +[[package]] +name = "linux-raw-sys" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" + +[[package]] +name = "litrs" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4ce301924b7887e9d637144fdade93f9dfff9b60981d4ac161db09720d39aa5" + +[[package]] +name = "lock_api" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" +dependencies = [ + "autocfg", + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" +dependencies = [ + "value-bag", +] + +[[package]] +name = "longest-increasing-subsequence" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3bd0dd2cd90571056fdb71f6275fada10131182f84899f4b2a916e565d81d86" + +[[package]] +name = "lru" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3262e75e648fce39813cb56ac41f3c3e3f65217ebf3844d818d1f9398cfb0dc" +dependencies = [ + "hashbrown 0.14.5", +] + +[[package]] +name = "manganis" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c211cfb4529c79b32307b606e83a1bb15d491b3b4a1ab97159b161d7af9d1b72" +dependencies = [ + "dioxus-core", + "manganis-macro", +] + +[[package]] +name = "manganis-common" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "542300f1e7d9313de5b7e5b92d273ba42ab547c068d773559d616aa14987de43" +dependencies = [ + "anyhow", + "base64 0.21.7", + "home", + "infer 0.11.0", + "reqwest 0.11.27", + "serde", + "toml", + "tracing", + "url", +] + +[[package]] +name = "manganis-macro" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "704a0123ac90fa630b21a04fde56c29dfd5a7665c5e8f3639567989daa2d29d1" +dependencies = [ + "manganis-common", + "proc-macro2", + "quote", + "syn 2.0.72", + "tracing-subscriber 0.3.18", +] + +[[package]] +name = "matchers" +version = "0.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f099785f7595cc4b4553a174ce30dd7589ef93391ff414dbb67f62392b9e0ce1" +dependencies = [ + "regex-automata 0.1.10", +] + +[[package]] +name = "md5" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "490cc448043f947bae3cbee9c203358d62dbee0db12107a74be5c30ccfd09771" + +[[package]] +name = "memchr" +version = "2.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" + +[[package]] +name = "merlin" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58c38e2799fc0978b65dfff8023ec7843e2330bb462f19198840b34b6582397d" +dependencies = [ + "byteorder", + "keccak", + "rand_core 0.6.4", + "zeroize", +] + +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + +[[package]] +name = "mime_guess" +version = "2.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e" +dependencies = [ + "mime", + "unicase", +] + +[[package]] +name = "miniz_oxide" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8a240ddb74feaf34a79a7add65a741f3167852fba007066dcac1ca548d89c08" +dependencies = [ + "adler", +] + +[[package]] +name = "mio" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4569e456d394deccd22ce1c1913e6ea0e54519f577285001215d33557431afe4" +dependencies = [ + "hermit-abi 0.3.9", + "libc", + "wasi", + "windows-sys 0.52.0", +] + +[[package]] +name = "native-tls" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8614eb2c83d59d1c8cc974dd3f920198647674a0a035e1af1fa58707e317466" +dependencies = [ + "libc", + "log", + "openssl", + "openssl-probe", + "openssl-sys", + "schannel", + "security-framework", + "security-framework-sys", + "tempfile", +] + +[[package]] +name = "no-std-async" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "482316c0ef0c183b171a332f15585551cd31b7ac5b1148c21e061b3f4a00618c" +dependencies = [ + "pin-list", + "pin-project", + "spin 0.9.8", +] + +[[package]] +name = "nu-ansi-term" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" +dependencies = [ + "overload", + "winapi", +] + +[[package]] +name = "num-bigint" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" +dependencies = [ + "num-integer", + "num-traits", +] + +[[package]] +name = "num-format" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a652d9771a63711fd3c3deb670acfbe5c30a4072e664d7a3bf5a9e1056ac72c3" +dependencies = [ + "arrayvec", + "itoa", +] + +[[package]] +name = "num-integer" +version = "0.1.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", +] + +[[package]] +name = "num_cpus" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" +dependencies = [ + "hermit-abi 0.3.9", + "libc", +] + +[[package]] +name = "object" +version = "0.36.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f203fa8daa7bb185f760ae12bd8e097f63d17041dcdcaf675ac54cdf863170e" +dependencies = [ + "memchr", +] + +[[package]] +name = "once_cell" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" + +[[package]] +name = "opaque-debug" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" + +[[package]] +name = "openssl" +version = "0.10.66" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9529f4786b70a3e8c61e11179af17ab6188ad8d0ded78c5529441ed39d4bd9c1" +dependencies = [ + "bitflags 2.6.0", + "cfg-if", + "foreign-types", + "libc", + "once_cell", + "openssl-macros", + "openssl-sys", +] + +[[package]] +name = "openssl-macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "openssl-probe" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" + +[[package]] +name = "openssl-sys" +version = "0.9.103" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f9e8deee91df40a943c71b917e5874b951d32a802526c85721ce3b776c929d6" +dependencies = [ + "cc", + "libc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "ordered-float" +version = "2.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68f19d67e5a2795c94e73e0bb1cc1a7edeb2e28efd39e2e1c9b7a40c1108b11c" +dependencies = [ + "num-traits", +] + +[[package]] +name = "overload" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" + +[[package]] +name = "parity-bip39" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e69bf016dc406eff7d53a7d3f7cf1c2e72c82b9088aac1118591e36dd2cd3e9" +dependencies = [ + "bitcoin_hashes", + "rand", + "rand_core 0.6.4", + "serde", + "unicode-normalization", +] + +[[package]] +name = "parity-scale-codec" +version = "3.6.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "306800abfa29c7f16596b5970a588435e3d5b3149683d00c12b699cc19f895ee" +dependencies = [ + "arrayvec", + "bitvec", + "byte-slice-cast", + "bytes", + "impl-trait-for-tuples", + "parity-scale-codec-derive", + "serde", +] + +[[package]] +name = "parity-scale-codec-derive" +version = "3.6.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d830939c76d294956402033aee57a6da7b438f2294eb94864c37b0569053a42c" +dependencies = [ + "proc-macro-crate 3.1.0", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "parking" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb813b8af86854136c6922af0598d719255ecb2179515e6e7730d468f05c9cae" + +[[package]] +name = "parking_lot" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "smallvec", + "windows-targets 0.52.6", +] + +[[package]] +name = "password-hash" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "346f04948ba92c43e8469c1ee6736c7563d71012b17d40745260fe106aac2166" +dependencies = [ + "base64ct", + "rand_core 0.6.4", + "subtle", +] + +[[package]] +name = "paste" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" + +[[package]] +name = "pbkdf2" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "271779f35b581956db91a3e55737327a03aa051e90b1c47aeb189508533adfd7" +dependencies = [ + "digest 0.10.7", +] + +[[package]] +name = "pbkdf2" +version = "0.12.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2" +dependencies = [ + "digest 0.10.7", + "password-hash", +] + +[[package]] +name = "percent-encoding" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" + +[[package]] +name = "petgraph" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" +dependencies = [ + "fixedbitset", + "indexmap", +] + +[[package]] +name = "phf" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ade2d8b8f33c7333b51bcf0428d37e217e9f32192ae4772156f65063b8ce03dc" +dependencies = [ + "phf_macros", + "phf_shared", +] + +[[package]] +name = "phf_generator" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48e4cc64c2ad9ebe670cb8fd69dd50ae301650392e81c05f9bfcb2d5bdbc24b0" +dependencies = [ + "phf_shared", + "rand", +] + +[[package]] +name = "phf_macros" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3444646e286606587e49f3bcf1679b8cef1dc2c5ecc29ddacaffc305180d464b" +dependencies = [ + "phf_generator", + "phf_shared", + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "phf_shared" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90fcb95eef784c2ac79119d1dd819e162b5da872ce6f3c3abe1e8ca1c082f72b" +dependencies = [ + "siphasher", +] + +[[package]] +name = "pin-list" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe91484d5a948b56f858ff2b92fd5b20b97d21b11d2d41041db8e5ec12d56c5e" +dependencies = [ + "pin-project-lite", + "pinned-aliasable", +] + +[[package]] +name = "pin-project" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6bf43b791c5b9e34c3d182969b4abb522f9343702850a2e57f460d00d09b4b3" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "pinned" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a829027bd95e54cfe13e3e258a1ae7b645960553fb82b75ff852c29688ee595b" +dependencies = [ + "futures", + "rustversion", + "thiserror", +] + +[[package]] +name = "pinned-aliasable" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d0f9ae89bf0ed03b69ac1f3f7ea2e6e09b4fa5448011df2e67d581c2b850b7b" + +[[package]] +name = "piper" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae1d5c74c9876f070d3e8fd503d748c7d974c3e48da8f41350fa5222ef9b4391" +dependencies = [ + "atomic-waker", + "fastrand 2.1.0", + "futures-io", +] + +[[package]] +name = "pjs" +version = "0.1.0" +source = "git+https://github.com/virto-network/virto-sdk.git?branch=feat/pjs-vault#049b4ef099b083aae5bee6f9019c248aaf2d9e5e" +dependencies = [ + "hex", + "log", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "pkcs8" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" +dependencies = [ + "der", + "spki", +] + +[[package]] +name = "pkg-config" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" + +[[package]] +name = "polkavm-common" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d9428a5cfcc85c5d7b9fc4b6a18c4b802d0173d768182a51cc7751640f08b92" + +[[package]] +name = "polkavm-derive" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae8c4bea6f3e11cd89bb18bcdddac10bd9a24015399bd1c485ad68a985a19606" +dependencies = [ + "polkavm-derive-impl-macro", +] + +[[package]] +name = "polkavm-derive-impl" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c4fdfc49717fb9a196e74a5d28e0bc764eb394a2c803eb11133a31ac996c60c" +dependencies = [ + "polkavm-common", + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "polkavm-derive-impl-macro" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ba81f7b5faac81e528eb6158a6f3c9e0bb1008e0ffa19653bc8dea925ecb429" +dependencies = [ + "polkavm-derive-impl", + "syn 2.0.72", +] + +[[package]] +name = "polling" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b2d323e8ca7996b3e23126511a523f7e62924d93ecd5ae73b333815b0eb3dce" +dependencies = [ + "autocfg", + "bitflags 1.3.2", + "cfg-if", + "concurrent-queue", + "libc", + "log", + "pin-project-lite", + "windows-sys 0.48.0", +] + +[[package]] +name = "polling" +version = "3.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3ed00ed3fbf728b5816498ecd316d1716eecaced9c0c8d2c5a6740ca214985b" +dependencies = [ + "cfg-if", + "concurrent-queue", + "hermit-abi 0.4.0", + "pin-project-lite", + "rustix 0.38.34", + "tracing", + "windows-sys 0.52.0", +] + +[[package]] +name = "ppv-lite86" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" + +[[package]] +name = "prettyplease" +version = "0.2.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f12335488a2f3b0a83b14edad48dca9879ce89b2edd10e80237e4e852dd645e" +dependencies = [ + "proc-macro2", + "syn 2.0.72", +] + +[[package]] +name = "primitive-types" +version = "0.12.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b34d9fd68ae0b74a41b21c03c2f62847aa0ffea044eee893b4c140b37e244e2" +dependencies = [ + "fixed-hash", + "impl-codec", + "impl-serde", + "scale-info", + "uint", +] + +[[package]] +name = "proc-macro-crate" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" +dependencies = [ + "once_cell", + "toml_edit 0.19.15", +] + +[[package]] +name = "proc-macro-crate" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d37c51ca738a55da99dc0c4a34860fd675453b8b36209178c2249bb13651284" +dependencies = [ + "toml_edit 0.21.1", +] + +[[package]] +name = "proc-macro2" +version = "1.0.86" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "pulldown-cmark" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8746739f11d39ce5ad5c2520a9b75285310dbfe78c541ccf832d38615765aec0" +dependencies = [ + "bitflags 2.6.0", + "getopts", + "memchr", + "pulldown-cmark-escape", + "unicase", +] + +[[package]] +name = "pulldown-cmark-escape" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "007d8adb5ddab6f8e3f491ac63566a7d5002cc7ed73901f72057943fa71ae1ae" + +[[package]] +name = "quote" +version = "1.0.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "radium" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_core" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom", +] + +[[package]] +name = "redox_syscall" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a908a6e00f1fdd0dfd9c0eb08ce85126f6d8bbda50017e74bc4a4b7d4a926a4" +dependencies = [ + "bitflags 2.6.0", +] + +[[package]] +name = "ref-cast" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccf0a6f84d5f1d581da8b41b47ec8600871962f2a528115b542b362d4b744931" +dependencies = [ + "ref-cast-impl", +] + +[[package]] +name = "ref-cast-impl" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bcc303e793d3734489387d205e9b186fac9c6cfacedd98cbb2e8a5943595f3e6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "regex" +version = "1.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b91213439dad192326a0d7c6ee3955910425f441d7038e0d6933b0aec5c4517f" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata 0.4.7", + "regex-syntax 0.8.4", +] + +[[package]] +name = "regex-automata" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" +dependencies = [ + "regex-syntax 0.6.29", +] + +[[package]] +name = "regex-automata" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38caf58cc5ef2fed281f89292ef23f6365465ed9a41b7a7754eb4e26496c92df" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax 0.8.4", +] + +[[package]] +name = "regex-syntax" +version = "0.6.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" + +[[package]] +name = "regex-syntax" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b" + +[[package]] +name = "reqwest" +version = "0.11.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd67538700a17451e7cba03ac727fb961abb7607553461627b97de0b89cf4a62" +dependencies = [ + "base64 0.21.7", + "bytes", + "encoding_rs", + "futures-core", + "futures-util", + "h2 0.3.26", + "http 0.2.12", + "http-body 0.4.6", + "hyper 0.14.30", + "hyper-tls 0.5.0", + "ipnet", + "js-sys", + "log", + "mime", + "native-tls", + "once_cell", + "percent-encoding", + "pin-project-lite", + "rustls-pemfile 1.0.4", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper 0.1.2", + "system-configuration", + "tokio", + "tokio-native-tls", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "winreg 0.50.0", +] + +[[package]] +name = "reqwest" +version = "0.12.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7d6d2a27d57148378eb5e111173f4276ad26340ecc5c49a4a2152167a2d6a37" +dependencies = [ + "base64 0.22.1", + "bytes", + "encoding_rs", + "futures-core", + "futures-util", + "h2 0.4.5", + "http 1.1.0", + "http-body 1.0.1", + "http-body-util", + "hyper 1.4.1", + "hyper-rustls", + "hyper-tls 0.6.0", + "hyper-util", + "ipnet", + "js-sys", + "log", + "mime", + "mime_guess", + "native-tls", + "once_cell", + "percent-encoding", + "pin-project-lite", + "rustls-pemfile 2.1.2", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper 1.0.1", + "system-configuration", + "tokio", + "tokio-native-tls", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "winreg 0.52.0", +] + +[[package]] +name = "rfc6979" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" +dependencies = [ + "hmac", + "subtle", +] + +[[package]] +name = "ring" +version = "0.16.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc" +dependencies = [ + "cc", + "libc", + "once_cell", + "spin 0.5.2", + "untrusted 0.7.1", + "web-sys", + "winapi", +] + +[[package]] +name = "ring" +version = "0.17.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" +dependencies = [ + "cc", + "cfg-if", + "getrandom", + "libc", + "spin 0.9.8", + "untrusted 0.9.0", + "windows-sys 0.52.0", +] + +[[package]] +name = "rustc-demangle" +version = "0.1.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" + +[[package]] +name = "rustc-hash" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" + +[[package]] +name = "rustc-hex" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e75f6a532d0fd9f7f13144f392b6ad56a32696bfcd9c78f797f16bbb6f072d6" + +[[package]] +name = "rustc_version" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +dependencies = [ + "semver", +] + +[[package]] +name = "rustix" +version = "0.37.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fea8ca367a3a01fe35e6943c400addf443c0f57670e6ec51196f71a4b8762dd2" +dependencies = [ + "bitflags 1.3.2", + "errno", + "io-lifetimes", + "libc", + "linux-raw-sys 0.3.8", + "windows-sys 0.48.0", +] + +[[package]] +name = "rustix" +version = "0.38.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f" +dependencies = [ + "bitflags 2.6.0", + "errno", + "libc", + "linux-raw-sys 0.4.14", + "windows-sys 0.52.0", +] + +[[package]] +name = "rustls" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35edb675feee39aec9c99fa5ff985081995a06d594114ae14cbe797ad7b7a6d7" +dependencies = [ + "base64 0.13.1", + "log", + "ring 0.16.20", + "sct", + "webpki", +] + +[[package]] +name = "rustls" +version = "0.22.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf4ef73721ac7bcd79b2b315da7779d8fc09718c6b3d2d1b2d94850eb8c18432" +dependencies = [ + "log", + "ring 0.17.8", + "rustls-pki-types", + "rustls-webpki", + "subtle", + "zeroize", +] + +[[package]] +name = "rustls" +version = "0.23.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c58f8c84392efc0a126acce10fa59ff7b3d2ac06ab451a33f2741989b806b044" +dependencies = [ + "once_cell", + "rustls-pki-types", + "rustls-webpki", + "subtle", + "zeroize", +] + +[[package]] +name = "rustls-pemfile" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" +dependencies = [ + "base64 0.21.7", +] + +[[package]] +name = "rustls-pemfile" +version = "2.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29993a25686778eb88d4189742cd713c9bce943bc54251a33509dc63cbacf73d" +dependencies = [ + "base64 0.22.1", + "rustls-pki-types", +] + +[[package]] +name = "rustls-pki-types" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "976295e77ce332211c0d24d92c0e83e50f5c5f046d11082cea19f3df13a3562d" + +[[package]] +name = "rustls-webpki" +version = "0.102.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e6b52d4fda176fd835fdc55a835d4a89b8499cad995885a21149d5ad62f852e" +dependencies = [ + "ring 0.17.8", + "rustls-pki-types", + "untrusted 0.9.0", +] + +[[package]] +name = "rustversion" +version = "1.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6" + +[[package]] +name = "ryu" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" + +[[package]] +name = "scale-info" +version = "2.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eca070c12893629e2cc820a9761bedf6ce1dcddc9852984d1dc734b8bd9bd024" +dependencies = [ + "bitvec", + "cfg-if", + "derive_more", + "parity-scale-codec", + "scale-info-derive", + "serde", +] + +[[package]] +name = "scale-info-derive" +version = "2.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d35494501194174bda522a32605929eefc9ecf7e0a326c26db1fdd85881eb62" +dependencies = [ + "proc-macro-crate 3.1.0", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "scale-serialization" +version = "1.0.0-beta2" +source = "git+https://github.com/virto-network/virto-sdk.git?branch=main#a06afe673412b4086f614f3eff06e9a9cfbc7e30" +dependencies = [ + "bytes", + "log", + "parity-scale-codec", + "scale-info", + "serde", + "serde_json", +] + +[[package]] +name = "schannel" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbc91545643bcf3a0bbb6569265615222618bdf33ce4ffbbd13c4bbd4c093534" +dependencies = [ + "windows-sys 0.52.0", +] + +[[package]] +name = "schnorrkel" +version = "0.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8de18f6d8ba0aad7045f5feae07ec29899c1112584a38509a84ad7b04451eaa0" +dependencies = [ + "aead", + "arrayref", + "arrayvec", + "curve25519-dalek 4.1.3", + "getrandom_or_panic", + "merlin", + "rand_core 0.6.4", + "serde_bytes", + "sha2 0.10.8", + "subtle", + "zeroize", +] + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "sct" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b362b83898e0e69f38515b82ee15aa80636befe47c3b6d3d89a911e78fc228ce" +dependencies = [ + "ring 0.16.20", + "untrusted 0.7.1", +] + +[[package]] +name = "sec1" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" +dependencies = [ + "base16ct", + "der", + "generic-array", + "pkcs8", + "serdect", + "subtle", + "zeroize", +] + +[[package]] +name = "secp256k1" +version = "0.28.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d24b59d129cdadea20aea4fb2352fa053712e5d713eee47d700cd4b2bc002f10" +dependencies = [ + "secp256k1-sys", +] + +[[package]] +name = "secp256k1-sys" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5d1746aae42c19d583c3c1a8c646bfad910498e2051c551a7f2e3c0c9fbb7eb" +dependencies = [ + "cc", +] + +[[package]] +name = "secrecy" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9bd1c54ea06cfd2f6b63219704de0b9b4f72dcc2b8fdef820be6cd799780e91e" +dependencies = [ + "zeroize", +] + +[[package]] +name = "security-framework" +version = "2.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" +dependencies = [ + "bitflags 2.6.0", + "core-foundation", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework-sys" +version = "2.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75da29fe9b9b08fe9d6b22b5b4bcbc75d8db3aa31e639aa56bb62e9d46bfceaf" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "semver" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" +dependencies = [ + "serde", +] + +[[package]] +name = "send_wrapper" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73" +dependencies = [ + "futures-core", +] + +[[package]] +name = "serde" +version = "1.0.204" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc76f558e0cbb2a839d37354c575f1dc3fdc6546b5be373ba43d95f231bf7c12" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde-value" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3a1a3341211875ef120e117ea7fd5228530ae7e7036a779fdc9117be6b3282c" +dependencies = [ + "ordered-float", + "serde", +] + +[[package]] +name = "serde-wasm-bindgen" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3b143e2833c57ab9ad3ea280d21fd34e285a42837aeb0ee301f4f41890fa00e" +dependencies = [ + "js-sys", + "serde", + "wasm-bindgen", +] + +[[package]] +name = "serde-wasm-bindgen" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8302e169f0eddcc139c70f139d19d6467353af16f9fce27e8c30158036a1e16b" +dependencies = [ + "js-sys", + "serde", + "wasm-bindgen", +] + +[[package]] +name = "serde_bytes" +version = "0.11.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "387cc504cb06bb40a96c8e04e951fe01854cf6bc921053c954e4a606d9675c6a" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_derive" +version = "1.0.204" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0cd7e117be63d3c3678776753929474f3b04a43a080c744d6b0ae2a8c28e222" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "serde_json" +version = "1.0.120" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e0d21c9a8cae1235ad58a00c11cb40d4b1e5c784f1ef2c537876ed6ffd8b7c5" +dependencies = [ + "indexmap", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "serde_qs" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0431a35568651e363364210c91983c1da5eb29404d9f0928b67d4ebcfa7d330c" +dependencies = [ + "percent-encoding", + "serde", + "thiserror", +] + +[[package]] +name = "serde_repr" +version = "0.1.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "serde_spanned" +version = "0.6.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb5b1b31579f3811bf615c144393417496f152e12ac8b7663bf664f4a815306d" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_urlencoded" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +dependencies = [ + "form_urlencoded", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "serdect" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a84f14a19e9a014bb9f4512488d9829a68e04ecabffb0f9904cd1ace94598177" +dependencies = [ + "base16ct", + "serde", +] + +[[package]] +name = "server_fn" +version = "0.6.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9aaae169927ef701a4734d680adcb08f13269c9f0af822bf175d681fe56d65c" +dependencies = [ + "bytes", + "const_format", + "dashmap", + "futures", + "gloo-net 0.5.0", + "http 1.1.0", + "js-sys", + "once_cell", + "send_wrapper", + "serde", + "serde_json", + "serde_qs", + "server_fn_macro_default", + "thiserror", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-streams", + "web-sys", + "xxhash-rust", +] + +[[package]] +name = "server_fn_macro" +version = "0.6.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "583085903fd5d091884eb52d99550e32777015af21f0f5dbec49bedcc320ce82" +dependencies = [ + "const_format", + "convert_case", + "proc-macro2", + "quote", + "syn 2.0.72", + "xxhash-rust", +] + +[[package]] +name = "server_fn_macro_default" +version = "0.6.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b628649700e28cf8bc33e0df5de5c9d591a1828ba005a25b425477055f1e0e74" +dependencies = [ + "server_fn_macro", + "syn 2.0.72", +] + +[[package]] +name = "sha1" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest 0.10.7", +] + +[[package]] +name = "sha2" +version = "0.9.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" +dependencies = [ + "block-buffer 0.9.0", + "cfg-if", + "cpufeatures", + "digest 0.9.0", + "opaque-debug", +] + +[[package]] +name = "sha2" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest 0.10.7", +] + +[[package]] +name = "sha3" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60" +dependencies = [ + "digest 0.10.7", + "keccak", +] + +[[package]] +name = "sharded-slab" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" +dependencies = [ + "lazy_static", +] + +[[package]] +name = "signal-hook-registry" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" +dependencies = [ + "libc", +] + +[[package]] +name = "signature" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" +dependencies = [ + "digest 0.10.7", + "rand_core 0.6.4", +] + +[[package]] +name = "siphasher" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" + +[[package]] +name = "slab" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +dependencies = [ + "autocfg", +] + +[[package]] +name = "sledgehammer_bindgen" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcfaf791ff02f48f3518ce825d32cf419c13a43c1d8b1232f74ac89f339c46d2" +dependencies = [ + "sledgehammer_bindgen_macro", + "wasm-bindgen", +] + +[[package]] +name = "sledgehammer_bindgen_macro" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edc90d3e8623d29a664cd8dba5078b600dd203444f00b9739f744e4c6e7aeaf2" +dependencies = [ + "quote", + "syn 2.0.72", +] + +[[package]] +name = "sledgehammer_utils" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f20798defa0e9d4eff9ca451c7f84774c7378a9c3b5a40112cfa2b3eadb97ae2" +dependencies = [ + "lru", + "once_cell", + "rustc-hash", +] + +[[package]] +name = "slotmap" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbff4acf519f630b3a3ddcfaea6c06b42174d9a44bc70c620e9ed1649d58b82a" +dependencies = [ + "serde", + "version_check", +] + +[[package]] +name = "smallvec" +version = "1.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" + +[[package]] +name = "socket2" +version = "0.4.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "socket2" +version = "0.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "sp-core" +version = "32.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb2dac7e47c7ddbb61efe196d5cce99f6ea88926c961fa39909bfeae46fc5a7b" +dependencies = [ + "array-bytes", + "bitflags 1.3.2", + "blake2", + "bounded-collections", + "bs58", + "dyn-clonable", + "ed25519-zebra", + "futures", + "hash-db", + "hash256-std-hasher", + "impl-serde", + "itertools", + "k256", + "libsecp256k1", + "log", + "merlin", + "parity-bip39", + "parity-scale-codec", + "parking_lot", + "paste", + "primitive-types", + "rand", + "scale-info", + "schnorrkel", + "secp256k1", + "secrecy", + "serde", + "sp-crypto-hashing", + "sp-debug-derive", + "sp-externalities", + "sp-runtime-interface", + "sp-std", + "sp-storage", + "ss58-registry", + "substrate-bip39", + "thiserror", + "tracing", + "w3f-bls", + "zeroize", +] + +[[package]] +name = "sp-crypto-hashing" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc9927a7f81334ed5b8a98a4a978c81324d12bd9713ec76b5c68fd410174c5eb" +dependencies = [ + "blake2b_simd", + "byteorder", + "digest 0.10.7", + "sha2 0.10.8", + "sha3", + "twox-hash", +] + +[[package]] +name = "sp-debug-derive" +version = "14.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48d09fa0a5f7299fb81ee25ae3853d26200f7a348148aed6de76be905c007dbe" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "sp-externalities" +version = "0.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33abaec4be69b1613796bbf430decbbcaaf978756379e2016e683a4d6379cd02" +dependencies = [ + "environmental", + "parity-scale-codec", + "sp-storage", +] + +[[package]] +name = "sp-runtime-interface" +version = "27.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "647db5e1dc481686628b41554e832df6ab400c4b43a6a54e54d3b0a71ca404aa" +dependencies = [ + "bytes", + "impl-trait-for-tuples", + "parity-scale-codec", + "polkavm-derive", + "primitive-types", + "sp-externalities", + "sp-runtime-interface-proc-macro", + "sp-std", + "sp-storage", + "sp-tracing", + "sp-wasm-interface", + "static_assertions", +] + +[[package]] +name = "sp-runtime-interface-proc-macro" +version = "18.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0195f32c628fee3ce1dfbbf2e7e52a30ea85f3589da9fe62a8b816d70fc06294" +dependencies = [ + "Inflector", + "expander", + "proc-macro-crate 3.1.0", + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "sp-std" +version = "14.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12f8ee986414b0a9ad741776762f4083cd3a5128449b982a3919c4df36874834" + +[[package]] +name = "sp-storage" +version = "21.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99c82989b3a4979a7e1ad848aad9f5d0b4388f1f454cc131766526601ab9e8f8" +dependencies = [ + "impl-serde", + "parity-scale-codec", + "ref-cast", + "serde", + "sp-debug-derive", +] + +[[package]] +name = "sp-tracing" +version = "17.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90b3decf116db9f1dfaf1f1597096b043d0e12c952d3bcdc018c6d6b77deec7e" +dependencies = [ + "parity-scale-codec", + "tracing", + "tracing-core", + "tracing-subscriber 0.2.25", +] + +[[package]] +name = "sp-wasm-interface" +version = "21.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b04b919e150b4736d85089d49327eab65507deb1485eec929af69daa2278eb3" +dependencies = [ + "impl-trait-for-tuples", + "log", + "parity-scale-codec", +] + +[[package]] +name = "spin" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" + +[[package]] +name = "spin" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +dependencies = [ + "lock_api", +] + +[[package]] +name = "spinning" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d4f0e86297cad2658d92a707320d87bf4e6ae1050287f51d19b67ef3f153a7b" +dependencies = [ + "lock_api", +] + +[[package]] +name = "spki" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" +dependencies = [ + "base64ct", + "der", +] + +[[package]] +name = "ss58-registry" +version = "1.47.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4743ce898933fbff7bbf414f497c459a782d496269644b3d650a398ae6a487ba" +dependencies = [ + "Inflector", + "num-format", + "proc-macro2", + "quote", + "serde", + "serde_json", + "unicode-xid", +] + +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + +[[package]] +name = "strsim" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" + +[[package]] +name = "sube" +version = "1.0.0" +source = "git+https://github.com/virto-network/virto-sdk.git?branch=main#a06afe673412b4086f614f3eff06e9a9cfbc7e30" +dependencies = [ + "async-once-cell", + "async-std", + "async-tls", + "blake2", + "env_logger", + "ewebsock", + "frame-metadata", + "futures-channel", + "futures-util", + "heapless", + "hex", + "jsonrpc", + "log", + "no-std-async", + "parity-scale-codec", + "paste", + "rand_core 0.6.4", + "reqwest 0.12.5", + "scale-info", + "scale-serialization", + "serde", + "serde_json", + "twox-hash", + "url", + "wasm-bindgen", +] + +[[package]] +name = "substrate-bip39" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca58ffd742f693dc13d69bdbb2e642ae239e0053f6aab3b104252892f856700a" +dependencies = [ + "hmac", + "pbkdf2 0.12.2", + "schnorrkel", + "sha2 0.10.8", + "zeroize", +] + +[[package]] +name = "subtle" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.72" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc4b9b9bf2add8093d3f2c0204471e951b2285580335de42f9d2534f3ae7a8af" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "sync_wrapper" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" + +[[package]] +name = "sync_wrapper" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7065abeca94b6a8a577f9bd45aa0867a2238b74e8eb67cf10d492bc39351394" + +[[package]] +name = "system-configuration" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "system-configuration-sys", +] + +[[package]] +name = "system-configuration-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "tap" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" + +[[package]] +name = "tempfile" +version = "3.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1" +dependencies = [ + "cfg-if", + "fastrand 2.1.0", + "rustix 0.38.34", + "windows-sys 0.52.0", +] + +[[package]] +name = "thiserror" +version = "1.0.63" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0342370b38b6a11b6cc11d6a805569958d54cfa061a29969c3b5ce2ea405724" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.63" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "thread_local" +version = "1.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" +dependencies = [ + "cfg-if", + "once_cell", +] + +[[package]] +name = "tinystr" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" +dependencies = [ + "displaydoc", +] + +[[package]] +name = "tinyvec" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "445e881f4f6d382d5f27c034e25eb92edd7c784ceab92a0937db7f2e9471b938" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + +[[package]] +name = "to_method" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7c4ceeeca15c8384bbc3e011dbd8fccb7f068a440b752b7d9b32ceb0ca0e2e8" + +[[package]] +name = "tokio" +version = "1.39.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d040ac2b29ab03b09d4129c2f5bbd012a3ac2f79d38ff506a4bf8dd34b0eac8a" +dependencies = [ + "backtrace", + "bytes", + "libc", + "mio", + "pin-project-lite", + "socket2 0.5.7", + "windows-sys 0.52.0", +] + +[[package]] +name = "tokio-native-tls" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" +dependencies = [ + "native-tls", + "tokio", +] + +[[package]] +name = "tokio-rustls" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c7bc40d0e5a97695bb96e27995cd3a08538541b0a846f65bba7a359f36700d4" +dependencies = [ + "rustls 0.23.12", + "rustls-pki-types", + "tokio", +] + +[[package]] +name = "tokio-util" +version = "0.7.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cf6b47b3771c49ac75ad09a6162f53ad4b8088b76ac60e8ec1455b31a189fe1" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "toml" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd79e69d3b627db300ff956027cc6c3798cef26d22526befdfcd12feeb6d2257" +dependencies = [ + "serde", + "serde_spanned", + "toml_datetime", + "toml_edit 0.19.15", +] + +[[package]] +name = "toml_datetime" +version = "0.6.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8fb9f64314842840f1d940ac544da178732128f1c78c21772e876579e0da1db" +dependencies = [ + "serde", +] + +[[package]] +name = "toml_edit" +version = "0.19.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" +dependencies = [ + "indexmap", + "serde", + "serde_spanned", + "toml_datetime", + "winnow", +] + +[[package]] +name = "toml_edit" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1" +dependencies = [ + "indexmap", + "toml_datetime", + "winnow", +] + +[[package]] +name = "tower" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" +dependencies = [ + "futures-core", + "futures-util", + "pin-project", + "pin-project-lite", + "tokio", + "tower-layer", + "tower-service", +] + +[[package]] +name = "tower-layer" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0" + +[[package]] +name = "tower-service" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" + +[[package]] +name = "tracing" +version = "0.1.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +dependencies = [ + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "tracing-core" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" +dependencies = [ + "once_cell", + "valuable", +] + +[[package]] +name = "tracing-log" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f751112709b4e791d8ce53e32c4ed2d353565a795ce84da2285393f41557bdf2" +dependencies = [ + "log", + "once_cell", + "tracing-core", +] + +[[package]] +name = "tracing-log" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" +dependencies = [ + "log", + "once_cell", + "tracing-core", +] + +[[package]] +name = "tracing-serde" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc6b213177105856957181934e4920de57730fc69bf42c37ee5bb664d406d9e1" +dependencies = [ + "serde", + "tracing-core", +] + +[[package]] +name = "tracing-subscriber" +version = "0.2.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e0d2eaa99c3c2e41547cfa109e910a68ea03823cccad4a0525dcbc9b01e8c71" +dependencies = [ + "ansi_term", + "chrono", + "lazy_static", + "matchers", + "regex", + "serde", + "serde_json", + "sharded-slab", + "smallvec", + "thread_local", + "tracing", + "tracing-core", + "tracing-log 0.1.4", + "tracing-serde", +] + +[[package]] +name = "tracing-subscriber" +version = "0.3.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" +dependencies = [ + "nu-ansi-term", + "sharded-slab", + "smallvec", + "thread_local", + "tracing-core", + "tracing-log 0.2.0", +] + +[[package]] +name = "try-lock" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" + +[[package]] +name = "tungstenite" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ef1a641ea34f399a848dea702823bbecfb4c486f911735368f1f137cb8257e1" +dependencies = [ + "byteorder", + "bytes", + "data-encoding", + "http 1.1.0", + "httparse", + "log", + "rand", + "rustls 0.22.4", + "rustls-pki-types", + "sha1", + "thiserror", + "url", + "utf-8", + "webpki-roots", +] + +[[package]] +name = "twox-hash" +version = "1.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97fee6b57c6a41524a810daee9286c02d7752c4253064d0b05472833a438f675" +dependencies = [ + "cfg-if", + "digest 0.10.7", + "rand", + "static_assertions", +] + +[[package]] +name = "typenum" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" + +[[package]] +name = "uint" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76f64bba2c53b04fcab63c01a7d7427eadc821e3bc48c34dc9ba29c501164b52" +dependencies = [ + "byteorder", + "crunchy", + "hex", + "static_assertions", +] + +[[package]] +name = "unic-langid" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23dd9d1e72a73b25e07123a80776aae3e7b0ec461ef94f9151eed6ec88005a44" +dependencies = [ + "unic-langid-impl", +] + +[[package]] +name = "unic-langid-impl" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a5422c1f65949306c99240b81de9f3f15929f5a8bfe05bb44b034cc8bf593e5" +dependencies = [ + "serde", + "tinystr", +] + +[[package]] +name = "unicase" +version = "2.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7d2d4dafb69621809a81864c9c1b864479e1235c0dd4e199924b9742439ed89" +dependencies = [ + "version_check", +] + +[[package]] +name = "unicode-bidi" +version = "0.3.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" + +[[package]] +name = "unicode-ident" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" + +[[package]] +name = "unicode-normalization" +version = "0.1.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "unicode-segmentation" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4c87d22b6e3f4a18d4d40ef354e97c90fcb14dd91d7dc0aa9d8a1172ebf7202" + +[[package]] +name = "unicode-width" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0336d538f7abc86d282a4189614dfaa90810dfc2c6f6427eaf88e16311dd225d" + +[[package]] +name = "unicode-xid" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" + +[[package]] +name = "untrusted" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" + +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" + +[[package]] +name = "url" +version = "2.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22784dbdf76fdde8af1aeda5622b546b422b6fc585325248a2bf9f5e41e94d6c" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", + "serde", +] + +[[package]] +name = "urlencoding" +version = "2.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da" + +[[package]] +name = "utf-8" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" + +[[package]] +name = "utf8parse" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" + +[[package]] +name = "uuid" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81dfa00651efa65069b0b6b651f4aaa31ba9e3c3ce0137aaad053604ee7e0314" +dependencies = [ + "getrandom", + "wasm-bindgen", +] + +[[package]] +name = "valuable" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" + +[[package]] +name = "value-bag" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a84c137d37ab0142f0f2ddfe332651fdbf252e7b7dbb4e67b6c1f1b2e925101" + +[[package]] +name = "vcpkg" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" + +[[package]] +name = "version_check" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" + +[[package]] +name = "virto-communities" +version = "0.1.0" +dependencies = [ + "blake2", + "chrono", + "console_error_panic_hook", + "dioxus", + "dioxus-logger", + "dioxus-std", + "futures-util", + "gloo 0.11.0", + "grass", + "hex", + "infer 0.15.0", + "libwallet", + "log", + "manganis", + "mime", + "parity-scale-codec", + "pjs", + "pulldown-cmark", + "rand_core 0.6.4", + "reqwest 0.12.5", + "serde", + "serde_json", + "sp-core", + "sube", + "unic-langid", + "uuid", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-logger", + "web-sys", +] + +[[package]] +name = "w3f-bls" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c5da5fa2c6afa2c9158eaa7cd9aee249765eb32b5fb0c63ad8b9e79336a47ec" +dependencies = [ + "ark-bls12-377", + "ark-bls12-381", + "ark-ec", + "ark-ff", + "ark-serialize", + "ark-serialize-derive", + "arrayref", + "constcat", + "digest 0.10.7", + "rand", + "rand_chacha", + "rand_core 0.6.4", + "sha2 0.10.8", + "sha3", + "thiserror", + "zeroize", +] + +[[package]] +name = "waker-fn" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "317211a0dc0ceedd78fb2ca9a44aed3d7b9b26f81870d485c07122b4350673b7" + +[[package]] +name = "want" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" +dependencies = [ + "try-lock", +] + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wasm-bindgen" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8" +dependencies = [ + "cfg-if", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn 2.0.72", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.42" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76bc14366121efc8dbb487ab05bcc9d346b3b5ec0eaa76e46594cabbe51762c0" +dependencies = [ + "cfg-if", + "js-sys", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" + +[[package]] +name = "wasm-logger" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "074649a66bb306c8f2068c9016395fa65d8e08d2affcbf95acf3c24c3ab19718" +dependencies = [ + "log", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "wasm-streams" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b65dc4c90b63b118468cf747d8bf3566c1913ef60be765b5730ead9e0a3ba129" +dependencies = [ + "futures-util", + "js-sys", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "web-sys" +version = "0.3.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77afa9a11836342370f4817622a2f0f418b134426d91a82dfb48f532d2ec13ef" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "webpki" +version = "0.21.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8e38c0608262c46d4a56202ebabdeb094cef7e560ca7a226c6bf055188aa4ea" +dependencies = [ + "ring 0.16.20", + "untrusted 0.7.1", +] + +[[package]] +name = "webpki-roots" +version = "0.26.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd7c23921eeb1713a4e851530e9b9756e4fb0e89978582942612524cf09f01cd" +dependencies = [ + "rustls-pki-types", +] + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windows-core" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-targets" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +dependencies = [ + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", +] + +[[package]] +name = "windows-targets" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +dependencies = [ + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", + "windows_i686_gnullvm", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" + +[[package]] +name = "windows_i686_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" + +[[package]] +name = "windows_i686_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" + +[[package]] +name = "winnow" +version = "0.5.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" +dependencies = [ + "memchr", +] + +[[package]] +name = "winreg" +version = "0.50.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" +dependencies = [ + "cfg-if", + "windows-sys 0.48.0", +] + +[[package]] +name = "winreg" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a277a57398d4bfa075df44f501a17cfdf8542d224f0d36095a2adc7aee4ef0a5" +dependencies = [ + "cfg-if", + "windows-sys 0.48.0", +] + +[[package]] +name = "wyz" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" +dependencies = [ + "tap", +] + +[[package]] +name = "xxhash-rust" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63658493314859b4dfdf3fb8c1defd61587839def09582db50b8a4e93afca6bb" + +[[package]] +name = "zerocopy" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "zeroize" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" +dependencies = [ + "zeroize_derive", +] + +[[package]] +name = "zeroize_derive" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[patch.unused]] +name = "cookie" +version = "0.14.4" +source = "git+https://github.com/S0c5/cookie-rs.git#ca6141d99729b84cc327765fd978735b5eec3404" diff --git a/index.html b/index.html index 3b654af..73af40d 100644 --- a/index.html +++ b/index.html @@ -228,14 +228,15 @@ }); globallyInjectPrograms(executor); + globalThis.initExecutor = async () => { + await executor.initialize("Virto"); + } globalThis.setSigner = async (address) => { await executor.setSigner(address); }; init("/{base_path}/assets/dioxus/{app_name}_bg.wasm").then( - async (wasm) => { - await executor.initialize("virto"); - + async (wasm) => { if (wasm.__wbindgen_start == undefined) { wasm.main(); } diff --git a/public/styles/main.scss b/public/styles/main.scss index 70bc86a..a1bb002 100644 --- a/public/styles/main.scss +++ b/public/styles/main.scss @@ -28,6 +28,8 @@ $fs-24: 24px; $fs-30: 30px; $fs-32: 32px; $fs-40: 40px; +$fs-80: 80px; +$fs-128: 128px; $lh-base: 16; @@ -41,6 +43,8 @@ $lh-38: calc(38 / $lh-base) + rem; $lh-40: calc(40 / $lh-base) + rem; $lh-42: calc(42 / $lh-base) + rem; $lh-48: calc(48 / $lh-base) + rem; +$lh-80: calc(80 / $lh-base) + rem; +$lh-120: calc(120 / $lh-base) + rem; $fw-regular: 400; $fw-medium: 500; @@ -91,6 +95,20 @@ $fw-bold: 700; line-height: $lh-48; } +%text-medium-font-medium { + font-family: $font-family; + font-size: $fs-80; + font-weight: $fw-medium; + line-height: $lh-80; +} + +%text-big-font-medium { + font-family: $font-family; + font-size: $fs-128; + font-weight: $fw-medium; + line-height: $lh-120; +} + %text-sm-font-medium { font-family: $font-family; font-size: $fs-14; @@ -630,7 +648,6 @@ $fw-bold: 700; background: var(--background-modal); color: var(--text-primary); border: 1px solid transparent; - width: 100%; padding: var(--size-1); text-align: left; position: absolute; @@ -728,6 +745,22 @@ $fw-bold: 700; height: 44px; } +.tab--comming-soon { + opacity: .7; + filter: grayscale(1); +} + +.tab--comming-soon::after { + @extend %text-xs-font-regular; + content: "Soon"; + position: absolute; + bottom: -12px; + padding: 0 4px; + border-radius: 4px; + color: var(--text-white); + background: var(--state-base-border); +} + .tab--active { color: var(--text-primary); background: var(--fill-50); @@ -1390,6 +1423,7 @@ $fw-bold: 700; .dropdown__label { @extend %text-lg-font-medium; color: var(--text-primary); + margin-bottom: 4px; } .dropdown__content { @@ -1485,6 +1519,18 @@ $fw-bold: 700; height: var(--element-size-small); } +.tab--small { + padding: 0 16px; +} + +.tab--medium { + padding: 0 16px; +} + +.tab--big { + padding: 0 16px; +} + .icon-button--big { width: var(--element-size-big); min-width: var(--element-size-big); @@ -1516,7 +1562,7 @@ textarea::placeholder { .input__label { @extend %text-lg-font-medium; - color: var(--text-primary); + color: var(--text-secondary); text-wrap: balance; } @@ -1789,6 +1835,26 @@ textarea::placeholder { color: var(--state-destructive-hover); } +.checkbox__content--payment { + display: flex; + width: 100%; + justify-content: space-between; + align-items: center; +} + +.checkbox__content__left { + display: flex; + gap: 12px; + align-items: center; +} + +.checkbox-card__fee { + @extend %text-lg-font-medium; + color: var(--text-secondary); + text-align: right; +} + + .checkbox-card { background: var(--state-base-background); border: none; @@ -1808,6 +1874,10 @@ textarea::placeholder { filter: grayscale(1); } +.checkbox-card--active { + background: var(--fill-50); +} + .checkbox__cta { position: absolute; right: 20px; @@ -1828,7 +1898,41 @@ textarea::placeholder { border: 1px solid var(--state-base-border); background: var(--fill-100); box-shadow: 0px 0.5px 0px 0px rgba(26, 26, 26, 0.08), 0px 1px 3px 0px rgba(26, 26, 26, 0.08); +} + +.checkbox-card--payment { + align-items: center; + border-radius: 12px; + box-shadow: 0px 1px 2px 0px rgba(26, 26, 26, 0.08); + flex-direction: column; + align-items: flex-start; + gap: 12px; + height: fit-content; +} +.checkbox-card > .checkbox-card__header { + display: flex; + width: 100%; + gap: 8px; +} + +.checkbox-card--payment>.checkbox-card__header { + width: 100%; + justify-content: space-between; + align-items: center; +} + +.checkbox-card--payment .checkbox-custom { + position: relative; + top: 0; + left: 0; + width: 20px; + min-width: 20px; + height: 20px; + border-radius: 11px; + border: 1px solid var(--state-base-border); + background: var(--fill-100); + box-shadow: 0px 0.5px 0px 0px rgba(26, 26, 26, 0.08), 0px 1px 3px 0px rgba(26, 26, 26, 0.08); } .checkbox-card input[type='radio']:checked+.checkbox-custom:after { @@ -1848,6 +1952,24 @@ textarea::placeholder { background: var(--state-primary-active); } +.checkbox-card input[type='radio']:checked+.checkbox-card__header>.checkbox-custom:after { + border-radius: 11px; + width: 12px; + height: 12px; + position: absolute; + top: 3px; + left: 3px; + content: " "; + display: block; + background: var(--white); +} + +.checkbox-card input[type='radio']:checked+.checkbox-card__header>.checkbox-custom { + border: 1px solid #4BAA54; + background: var(--state-primary-active); +} + + .checkbox-card__title { @extend %text-base-font-semibold; color: var(--text-primary); @@ -2515,6 +2637,403 @@ textarea::placeholder { right: 16px; } +.wallet, .transfers { + max-height: 100vh; + width: 100%; + display: flex; + flex-direction: column; + justify-content: center; + gap: 16px; +} + +.account { + max-height: 100vh; + width: 100%; + padding: 24px 56px; + display: flex; + flex-direction: column; + justify-content: center; + gap: 16px; +} + +.account__options { + display: flex; + gap: 4px; +} + +.account__container { + display: flex; + flex-direction: column; + gap: 20px; + padding: 20px 28px; + border-radius: 28px; + background: var(--white); + box-shadow: 0px 1px 0px 0px rgba(26, 26, 26, 0.08), 0px 2px 4px -1px rgba(26, 26, 26, 0.08); +} + +.account__container .balance__title, +.account__container .balance__subtitle { + text-align: left; +} + +.account__container>.balances>.balance__title>* { + @extend %text-2xl-font-medium; +} + +.account__balance { + display: flex; + justify-content: space-between; +} + +.account__balance__title { + @extend %text-2xl-font-medium; + color: var(--text-secondary); + text-align: left; +} + +.account__balance__cta { + width: fit-content; + display: flex; + gap: 8px; +} + +.account__balance__cta>.button { + width: fit-content; +} + +.account__actives { + display: flex; + flex-direction: column; + gap: 16px; +} + +.account__actives__cta { + width: fit-content; + display: flex; + gap: 8px; +} + +.account__actives__cta>.button { + width: fit-content; +} + +.actives__list { + width: 100%; +} + +th { + @extend %text-base-font-medium; + color: var(--text-primary); + padding: 0 8px; + text-align: right; +} + +td { + @extend %text-base-font-regular; + color: var(--text-secondary); + text-align: right; + padding: 4px 8px; +} + + +.list__asset--comming-soon { + opacity: .7; + filter: grayscale(1); +} + +.list__asset--comming-soon::after { + @extend %text-xs-font-regular; + content: "Soon"; + position: absolute; + top: 50%; + transform: translate(0, -50%); + left: 60px; + padding: 0 4px; + border-radius: 4px; + color: var(--text-white); + background: var(--state-base-border); +} + +.list__name { + text-align: left; +} + +.login { + display: flex; + flex-wrap: wrap; + gap: 10px; + width: 100%; +} + +.login>* { + flex: 1; +} + +.login__container { + max-height: 100vh; + width: 100%; + padding: 64px; + display: flex; + flex-direction: column; + justify-content: center; + background: var(--fill-100); +} + +.login__info__wrapper { + display: flex; + flex-direction: column; + gap: 24px; +} + +.login__head { + display: flex; + flex-direction: column; + width: 100%; +} + +.login__welcome { + @extend %text-4xl-font-medium; + color: var(--text-primary); +} + +.login__name { + @extend %text-big-font-medium; + color: var(--text-primary); +} + +.login__info { + display: flex; + flex-direction: column; + padding: 44px 0; + gap: 24px; +} + +.login__info__description { + @extend %text-2xl-font-medium; + color: var(--text-primary); + text-align: left; +} + +.login__info__opportunities { + display: flex; + flex-direction: column; + gap: 20px; + padding: 0; +} + +.login__form { + padding: 64px; + display: flex; + flex-direction: column; + justify-content: center; +} + +.login__form__wrapper { + display: flex; + padding: 24px 32px 32px; + flex-direction: column; + justify-content: center; + gap: 32px; + border-radius: 12px; + background: var(--fill-00); + box-shadow: 0px 1px 0px 0px rgba(26, 26, 26, 0.08), 0px 2px 4px -1px rgba(26, 26, 26, 0.08); +} + +.login__form__wrapper .input-wrapper { + background: var(--fill-50); +} + +.login__form__head { + display: flex; + flex-direction: column; + gap: 12px; +} + +.login__form__cta { + display: flex; + flex-direction: column; + gap: 16px; +} + +.login__form__title { + @extend %text-2xl-font-semibold; + color: var(--text-primary); +} + +.login__form__description { + @extend %text-lg-font-regular; + color: var(--text-secondary); +} + +.icon-text { + display: flex; + gap: 16px; + align-items: center; +} + +.icon-text__title { + @extend %text-lg-font-medium; + color: var(--text-primary); +} + +.summary { + display: flex; + padding: 32px; + flex-direction: column; + gap: 32px; + border-radius: 16px; + background: var(--state-base-background); +} + +.summary__wrapper { + display: flex; + flex-direction: column; + gap: 32px; +} + +.payment__methods { + display: flex; + flex-direction: column; + gap: 8px; +} + +.summary__subtitle { + @extend %text-lg-font-semibold; + color: var(--text-primary); + text-align: left; +} + +.summary__details { + display: flex; + flex-direction: column; + gap: 8px; +} + +.summary__item { + display: flex; + justify-content: space-between; + align-items: center; + gap: 16px; +} + +.summary__item--description { + flex-direction: column; + align-items: flex-start; +} + +.summary__item__label { + @extend %text-base-font-semibold; + color: var(--text-primary); + text-align: left; + flex-grow: 8; +} + +.summary__item__label--subtitle { + @extend %text-lg-font-semibold; + color: var(--text-secondary); +} + +.summary__item__description { + @extend %text-sm-font-regular; + color: var(--text-tertiary); +} + +.summary__item__values { + display: flex; + flex-direction: column; + align-items: flex-end; +} + +.divider { + width: 100%; + border: none; + border-bottom: 1px solid #b2edaf; +} + +span.summary__item__value { + @extend %text-base-font-semibold; + color: var(--text-primary); +} + +.summary__item__value--editable { + display: flex; + align-items: center; + gap: 8px; +} + +small.summary__item__value { + @extend %text-xs-font-semibold; + color: var(--text-tertiary); +} + +.summary__disclaimer { + @extend %text-xs-font-regular; + color: var(--text-tertiary); +} + +.summary__rate { + @extend %text-xs-font-regular; + color: var(--text-tertiary); + text-align: center; +} + +.page--payment { + background: var(--white); + display: inline-block; + width: 100vw; + height: 100vh; +} + +.payment__form { + padding: 24px 64px; +} + +.withdraw__row { + gap: 24px; +} + +.withdraw__form__inputs { + display: flex; + flex-direction: column; + justify-content: center; + align-items: flex-start; + gap: 16px; +} + +.widthdraw__data { + display: flex; + flex-direction: column; + gap: 24px; + width: 100%; +} + +.widthdraw__data > * { + width: 100%; +} + +.widthdraw__data .dropdown__container { + min-width: 220px; + padding: 0 20px; + border-radius: 12px; + background: var(--fill-00); + box-shadow: 0px .5px 0px 0px rgba(26, 26, 26, .08), 0px 1px 3px 0px rgba(26, 26, 26, .08); +} + +.widthdraw__data .dropdown__value { + @extend %text-base-font-medium; + color: var(--text-secondary); +} + +.summary--form { + flex-grow: 3; +} + +.form__wrapper { + display: flex; + flex-direction: column; + gap: 24px; +} + .mobile { display: none; } @@ -2537,6 +3056,38 @@ textarea::placeholder { --element-size-small: 24px; } + .login { + display: inline-block; + padding: 32px; + } + + .login>* { + margin-top: 24px; + } + + .login:first-child { + margin-top: 0; + } + + .login__container { + background: transparent; + padding: 0; + } + + .login__form { + padding: 0; + } + + .login__info { + padding: 0; + } + + .login__info__wrapper { + flex-direction: row; + justify-content: center; + align-items: center; + } + .onboarding__form { max-width: 70%; padding: 32px; @@ -2674,6 +3225,10 @@ textarea::placeholder { } @media only screen and (max-width: 768px) { + .login__name { + @extend %text-medium-font-medium; + } + .onboarding__form { max-width: 100%; } @@ -2681,9 +3236,27 @@ textarea::placeholder { .onboarding__image { display: none; } + + .login { + padding: 16px; + } + + .login__info { + padding: 24px 0; + } + + .login__info__wrapper { + flex-direction: column; + justify-content: center; + align-items: center; + } } @media only screen and (max-width: 600px) { + .login__info { + display: none; + } + .onboarding__form { padding: 16px; } diff --git a/src/components/atoms/checkbox_card.rs b/src/components/atoms/checkbox_card.rs index a787f78..5443f78 100644 --- a/src/components/atoms/checkbox_card.rs +++ b/src/components/atoms/checkbox_card.rs @@ -1,26 +1,23 @@ use dioxus::prelude::*; #[derive(PartialEq, Props, Clone)] pub struct CheckboxCardProps { + #[props(default = "".to_string())] + class: String, id: String, - title: String, - description: String, - icon: Element, name: String, checked: bool, #[props(default = false)] soon: bool, + body: Element, + editable: Option, on_change: EventHandler, } pub fn CheckboxCard(props: CheckboxCardProps) -> Element { rsx!( label { - class: "checkbox-card", + class: "checkbox-card {props.class}", class: if props.soon { "checkbox-card--comming-soon" }, - div { class: "checkbox-card__media", {props.icon} } - div { - span { class: "checkbox-card__title", "{props.title}" } - p { class: "checkbox-card__description", "{props.description}" } - } + class: if props.checked { "checkbox-card--active" }, input { class: "checkbox__cta", r#type: "radio", @@ -29,7 +26,15 @@ pub fn CheckboxCard(props: CheckboxCardProps) -> Element { checked: props.checked, onchange: move |_| { props.on_change.call(()) } } - div { class: "checkbox-custom" } + div { class: "checkbox-card__header", + div { class: "checkbox-custom" } + {props.body} + } + if props.checked { + if let Some(editable) = props.editable { + {editable} + } + } } ) } diff --git a/src/components/atoms/dynamic_text.rs b/src/components/atoms/dynamic_text.rs index 86cc933..34a0adb 100644 --- a/src/components/atoms/dynamic_text.rs +++ b/src/components/atoms/dynamic_text.rs @@ -8,13 +8,13 @@ pub struct DynamicTextProps { pub fn DynamicText(props: DynamicTextProps) -> Element { rsx! { div { class: "animated-text", - { - props.words.iter().enumerate().map(|(index, word)| { - rsx! { - span { key: "{index}", "{word}" } - } - }) - } - }, + { + props.words.iter().enumerate().map(|(index, word)| { + rsx! { + span { key: "{index}", "{word}" } + } + }) + } + } } } \ No newline at end of file diff --git a/src/components/atoms/icons/bank_card_line.rs b/src/components/atoms/icons/bank_card_line.rs new file mode 100644 index 0000000..b287c30 --- /dev/null +++ b/src/components/atoms/icons/bank_card_line.rs @@ -0,0 +1,16 @@ +use dioxus::prelude::*; + +use super::icon::IconShape; + +#[derive(PartialEq, Clone)] +pub struct BankCardLine; +impl IconShape for BankCardLine { + fn view_box(&self) -> String { + String::from("0 0 24 24") + } + fn child_elements(&self) -> Element { + rsx!( + path { d: "M3 3H21C21.2652 3 21.5196 3.10536 21.7071 3.29289C21.8946 3.48043 22 3.73478 22 4V20C22 20.2652 21.8946 20.5196 21.7071 20.7071C21.5196 20.8946 21.2652 21 21 21H3C2.73478 21 2.48043 20.8946 2.29289 20.7071C2.10536 20.5196 2 20.2652 2 20V4C2 3.73478 2.10536 3.48043 2.29289 3.29289C2.48043 3.10536 2.73478 3 3 3ZM20 11H4V19H20V11ZM20 9V5H4V9H20ZM14 15H18V17H14V15Z" } + ) + } +} diff --git a/src/components/atoms/icons/circle_check.rs b/src/components/atoms/icons/circle_check.rs index b6b5630..cb127ee 100644 --- a/src/components/atoms/icons/circle_check.rs +++ b/src/components/atoms/icons/circle_check.rs @@ -4,15 +4,14 @@ use super::icon::IconShape; pub struct CircleCheck; impl IconShape for CircleCheck { fn view_box(&self) -> String { - String::from("0 0 24 24") + String::from("0 0 36 36") } fn child_elements(&self) -> Element { rsx!( path { - d: "M15 10L11 14L9 12M12 21C7.02944 21 3 16.9706 3 12C3 7.02944 7.02944 3 12 3C16.9706 3 21 7.02944 21 12C21 16.9706 16.9706 21 12 21Z", - stroke_width: "2", - stroke_linecap: "round", - stroke_linejoin: "round" + fill_rule: "evenodd", + clip_rule: "evenodd", + d: "M18 33C26.2843 33 33 26.2843 33 18C33 9.71573 26.2843 3 18 3C9.71573 3 3 9.71573 3 18C3 26.2843 9.71573 33 18 33ZM25.5001 15.6213C26.0859 15.0355 26.0859 14.0858 25.5001 13.5C24.9144 12.9142 23.9646 12.9142 23.3788 13.5L15.5242 21.3546L12.0784 17.3345C11.5392 16.7055 10.5923 16.6326 9.96329 17.1718C9.3343 17.7109 9.26146 18.6578 9.8006 19.2868L14.3006 24.5368C14.5725 24.8541 14.9644 25.0435 15.3819 25.0595C15.7994 25.0756 16.2047 24.9167 16.5001 24.6213L25.5001 15.6213Z" } ) } diff --git a/src/components/atoms/icons/kusama_logo.rs b/src/components/atoms/icons/kusama_logo.rs new file mode 100644 index 0000000..115c327 --- /dev/null +++ b/src/components/atoms/icons/kusama_logo.rs @@ -0,0 +1,18 @@ +use dioxus::prelude::*; + +use super::icon::IconShape; + +#[derive(PartialEq, Clone)] +pub struct KusamaLogo; +impl IconShape for KusamaLogo { + fn view_box(&self) -> String { + String::from("0 0 24 24") + } + fn child_elements(&self) -> Element { + rsx!( + path { + d: "M22.5972 5.7833C22.2361 5.49858 21.8056 5.10969 21.0208 5.01247C20.2847 4.91525 19.5347 5.4083 19.0278 5.73469C18.5208 6.06108 17.5625 7.01941 17.1667 7.31108C16.7708 7.60275 15.7569 7.87358 14.125 8.85275C12.4931 9.83191 6.09028 13.943 6.09028 13.943L7.75694 13.9639L0.326389 17.7902H1.06944L0 18.6027C0 18.6027 0.944444 18.8527 1.73611 18.3527V18.5819C1.73611 18.5819 10.5833 15.0958 12.2917 15.9986L11.25 16.3041C11.3403 16.3041 13.0208 16.4152 13.0208 16.4152C13.0616 16.7633 13.1786 17.098 13.3634 17.3957C13.5483 17.6933 13.7964 17.9466 14.0903 18.1375C15.1042 18.8041 15.125 19.1722 15.125 19.1722C15.125 19.1722 14.5972 19.3875 14.5972 19.6583C14.5972 19.6583 15.375 19.4222 16.0972 19.443C16.5556 19.4604 17.0102 19.5327 17.4514 19.6583C17.4514 19.6583 17.3958 19.3666 16.6944 19.1722C15.9931 18.9777 15.2986 18.2139 14.9583 17.7972C14.7499 17.532 14.6141 17.2171 14.5641 16.8835C14.5142 16.5499 14.5519 16.209 14.6736 15.8944C14.9167 15.2625 15.7639 14.9152 17.5139 14.0125C19.5764 12.943 20.0486 12.1514 20.3403 11.5333C20.6319 10.9152 21.0625 9.68608 21.3056 9.10969C21.6111 8.36664 21.9861 7.9708 22.2986 7.73469C22.6111 7.49858 24 6.97775 24 6.97775C24 6.97775 22.9375 6.05414 22.5972 5.7833Z" + } + ) + } +} diff --git a/src/components/atoms/icons/mod.rs b/src/components/atoms/icons/mod.rs index c762b2f..4d76167 100644 --- a/src/components/atoms/icons/mod.rs +++ b/src/components/atoms/icons/mod.rs @@ -4,6 +4,7 @@ pub mod arrow_left; pub mod arrow_right; pub mod arrow_up; pub mod arrow_up_down; +pub mod bank_card_line; pub mod chat; pub mod chevron_left; pub mod chevron_right; @@ -17,11 +18,16 @@ pub mod hamburguer; pub mod home; pub mod icon; pub mod key_fill; +pub mod kusama_logo; pub mod medall_fill; pub mod messages; pub mod minus_circle; pub mod monetization; +pub mod onoff; +pub mod paypal_logo; pub mod plus; +pub mod polkadot; +pub mod polygon_logo; pub mod profile; pub mod search; pub mod settings; @@ -44,6 +50,7 @@ pub use arrow_left::ArrowLeft; pub use arrow_right::ArrowRight; pub use arrow_up::ArrowUp; pub use arrow_up_down::ArrowUpDown; +pub use bank_card_line::BankCardLine; pub use chat::Chat; pub use chevron_left::ChevronLeft; pub use chevron_right::ChevronRight; @@ -57,11 +64,16 @@ pub use hamburguer::Hamburguer; pub use home::Home; pub use icon::Icon; pub use key_fill::KeyFill; +pub use kusama_logo::KusamaLogo; pub use medall_fill::MedalFill; pub use messages::Messages; pub use minus_circle::MinusCircle; pub use monetization::Monetization; +pub use onoff::OnOff; +pub use paypal_logo::PaypalLogo; pub use plus::Plus; +pub use polkadot::Polkadot; +pub use polygon_logo::PolygonLogo; pub use profile::Profile; pub use search::Search; pub use settings::Settings; diff --git a/src/components/atoms/icons/onoff.rs b/src/components/atoms/icons/onoff.rs new file mode 100644 index 0000000..e0c18a1 --- /dev/null +++ b/src/components/atoms/icons/onoff.rs @@ -0,0 +1,14 @@ +use dioxus::prelude::*; +use super::icon::IconShape; +#[derive(PartialEq, Clone)] +pub struct OnOff; +impl IconShape for OnOff { + fn view_box(&self) -> String { + String::from("0 0 24 24") + } + fn child_elements(&self) -> Element { + rsx!( + path { d: "M8.5 4c-2 1-3.39 2.59-3.99 4.192a8.001 8.001 0 0 0 12.107 9.341 8 8 0 0 0 2.985-9.025C19.07 6.882 17.5 5 16 4m-3.83 8V3.843" } + ) + } +} diff --git a/src/components/atoms/icons/paypal_logo.rs b/src/components/atoms/icons/paypal_logo.rs new file mode 100644 index 0000000..53c8bb9 --- /dev/null +++ b/src/components/atoms/icons/paypal_logo.rs @@ -0,0 +1,18 @@ +use dioxus::prelude::*; + +use super::icon::IconShape; + +#[derive(PartialEq, Clone)] +pub struct PaypalLogo; +impl IconShape for PaypalLogo { + fn view_box(&self) -> String { + String::from("0 0 24 24") + } + fn child_elements(&self) -> Element { + rsx!( + path { + d: "M20.9746 9.01583C21.1183 9.68468 21.1005 10.4961 20.927 11.4524C20.2356 14.9903 17.9844 16.758 14.1756 16.758H13.6505C13.4565 16.7569 13.2688 16.827 13.1231 16.9552C12.9721 17.086 12.8717 17.2655 12.8391 17.4625L12.7904 17.687L12.1335 21.8201L12.1085 21.9995C12.0746 22.1979 11.9705 22.3776 11.8151 22.5056C11.6685 22.6346 11.4793 22.7048 11.284 22.7028H8.28672C8.2117 22.7067 8.13683 22.6926 8.0684 22.6616C7.99997 22.6306 7.93999 22.5836 7.89349 22.5246C7.84627 22.4643 7.81233 22.3947 7.7939 22.3204C7.77547 22.2461 7.77298 22.1687 7.78657 22.0933C7.85904 21.6502 7.9624 20.979 8.10377 20.0868C8.24277 19.1958 8.3485 18.5258 8.42097 18.0803C8.49343 17.6348 8.59917 16.9659 8.7441 16.0785C8.88785 15.1899 8.99596 14.5222 9.06605 14.0767C9.10525 13.7821 9.2787 13.636 9.58045 13.636H11.1439C12.2047 13.6514 13.1421 13.5683 13.9654 13.3853C15.3577 13.074 16.5006 12.5014 17.3939 11.6639C18.2077 10.9071 18.8231 9.92703 19.2472 8.72596C19.4397 8.1676 19.5763 7.63657 19.6654 7.13642C19.6725 7.08771 19.682 7.05801 19.6951 7.04851C19.7046 7.03544 19.7212 7.03188 19.7367 7.03544C19.7625 7.04695 19.7871 7.06087 19.8103 7.07702C20.4328 7.54984 20.8249 8.19493 20.9746 9.01583ZM18.9217 5.64667C18.9217 6.49846 18.7387 7.43817 18.3693 8.46698C17.7313 10.3226 16.5314 11.5772 14.7613 12.2306C13.8608 12.5501 12.8581 12.7153 11.7497 12.7355C11.7497 12.7426 11.3922 12.7438 10.6758 12.7438L9.60303 12.7355C8.80469 12.7355 8.33543 13.1156 8.19287 13.8807C8.17743 13.9437 7.83885 16.0547 7.17713 20.2115C7.16763 20.29 7.12011 20.3327 7.03338 20.3327H3.51096C3.42795 20.3345 3.34558 20.3178 3.26978 20.2839C3.19398 20.25 3.12664 20.1997 3.07259 20.1367C3.01651 20.0747 2.97511 20.0008 2.95146 19.9206C2.92781 19.8404 2.92252 19.7559 2.93597 19.6734L5.70639 2.09692C5.74187 1.87201 5.85851 1.66788 6.03427 1.52312C6.20564 1.37562 6.42476 1.29541 6.65085 1.2974H13.7955C14.0663 1.2974 14.4548 1.34967 14.9585 1.45303C15.467 1.55282 15.9101 1.6835 16.2927 1.83438C17.1456 2.15989 17.7967 2.65172 18.2469 3.30393C18.6972 3.95971 18.9217 4.73785 18.9217 5.64667Z" + } + ) + } +} diff --git a/src/components/atoms/icons/polkadot.rs b/src/components/atoms/icons/polkadot.rs new file mode 100644 index 0000000..17376a4 --- /dev/null +++ b/src/components/atoms/icons/polkadot.rs @@ -0,0 +1,16 @@ +use dioxus::prelude::*; + +use super::icon::IconShape; + +#[derive(PartialEq, Clone)] +pub struct Polkadot; +impl IconShape for Polkadot { + fn view_box(&self) -> String { + String::from("0 0 64 64") + } + fn child_elements(&self) -> Element { + rsx!( + path { d: "M25.9 6.3c-9.5 3.6-14.2 10.5-13.7 20.4.3 5.4.5 5.8 2.8 5.8 2.4 0 2.5-.3 2.6-5.8.1-6.5 1.9-9.7 7.4-13.5 6.1-4.1 14.1-2.1 19.3 5 4.4 5.9 1.3 16.9-5.6 20.1-3.2 1.4-11.7 3.1-11.7 2.3 0-.3.7-3.7 1.5-7.7 1.7-8.2 1.5-9.9-1.4-9.9-2.3 0-2.6.9-6.6 19.8-1.5 6.8-2.4 12.9-2.1 13.7S19.8 58 21 58c1.5 0 2.2-1 3.1-4.5 1.4-5.6 2.3-6.3 9.8-7.6 11.3-2 18.1-9.6 18.1-20.2 0-3.7-.7-6.8-2.3-9.8-4.3-8.1-15.6-12.6-23.8-9.6m5.4 46.4c-1.9.7-1.6 5 .4 5.7 2.4 1 5.1-2 3.7-4.1-1.2-1.9-2.3-2.4-4.1-1.6" } + ) + } +} diff --git a/src/components/atoms/icons/polygon_logo.rs b/src/components/atoms/icons/polygon_logo.rs new file mode 100644 index 0000000..56716bb --- /dev/null +++ b/src/components/atoms/icons/polygon_logo.rs @@ -0,0 +1,25 @@ +use dioxus::prelude::*; + +use super::icon::IconShape; + +#[derive(PartialEq, Clone)] +pub struct PolygonLogo; +impl IconShape for PolygonLogo { + fn view_box(&self) -> String { + String::from("0 0 24 21") + } + fn child_elements(&self) -> Element { + rsx!( + g { clip_path: "url(#clip0_475_6565)", + path { + d: "M18.125 6.375C17.6875 6.125 17.125 6.125 16.625 6.375L13.125 8.4375L10.75 9.75L7.3125 11.8125C6.875 12.0625 6.3125 12.0625 5.8125 11.8125L3.125 10.1875C2.6875 9.9375 2.375 9.4375 2.375 8.875V5.75C2.375 5.25 2.625 4.75 3.125 4.4375L5.8125 2.875C6.25 2.625 6.8125 2.625 7.3125 2.875L10 4.5C10.4375 4.75 10.75 5.25 10.75 5.8125V7.875L13.125 6.5V4.375C13.125 3.875 12.875 3.375 12.375 3.0625L7.375 0.125C6.9375 -0.125 6.375 -0.125 5.875 0.125L0.75 3.125C0.25 3.375 0 3.875 0 4.375V10.25C0 10.75 0.25 11.25 0.75 11.5625L5.8125 14.5C6.25 14.75 6.8125 14.75 7.3125 14.5L10.75 12.5L13.125 11.125L16.5625 9.125C17 8.875 17.5625 8.875 18.0625 9.125L20.75 10.6875C21.1875 10.9375 21.5 11.4375 21.5 12V15.125C21.5 15.625 21.25 16.125 20.75 16.4375L18.125 18C17.6875 18.25 17.125 18.25 16.625 18L13.9375 16.4375C13.5 16.1875 13.1875 15.6875 13.1875 15.125V13.125L10.8125 14.5V16.5625C10.8125 17.0625 11.0625 17.5625 11.5625 17.875L16.625 20.8125C17.0625 21.0625 17.625 21.0625 18.125 20.8125L23.1875 17.875C23.625 17.625 23.9375 17.125 23.9375 16.5625V10.625C23.9375 10.125 23.6875 9.625 23.1875 9.3125L18.125 6.375Z" + } + } + defs { + clipPath { id: "clip0_475_6565", + rect { width: "24", height: "20.9375", fill: "white" } + } + } + ) + } +} diff --git a/src/components/atoms/management_method.rs b/src/components/atoms/management_method.rs new file mode 100644 index 0000000..a292a35 --- /dev/null +++ b/src/components/atoms/management_method.rs @@ -0,0 +1,18 @@ +use dioxus::prelude::*; + +#[derive(PartialEq, Props, Clone)] +pub struct PaymentMethodProps { + title: String, + description: String, + icon: Element, +} + +pub fn ManagementMethod(props: PaymentMethodProps) -> Element { + rsx!( + div { class: "checkbox-card__media", {props.icon} } + div { + span { class: "checkbox-card__title", "{props.title}" } + p { class: "checkbox-card__description", "{props.description}" } + } + ) +} diff --git a/src/components/atoms/mod.rs b/src/components/atoms/mod.rs index fa1f364..adc5147 100644 --- a/src/components/atoms/mod.rs +++ b/src/components/atoms/mod.rs @@ -1,4 +1,5 @@ pub mod account; +pub mod action_request; pub mod attach; pub mod avatar; pub mod badge; @@ -14,10 +15,11 @@ pub mod icons; pub mod input; pub mod input_tags; pub mod key_value; +pub mod management_method; pub mod markdown; pub mod notification; +pub mod payment_method; pub mod radio_button; -pub mod action_request; pub mod search_input; pub mod step; pub mod step_card; @@ -27,6 +29,7 @@ pub mod textarea; pub mod title; pub mod tooltip; pub use account::AccountButton; +pub use action_request::ActionRequest; pub use attach::Attach; pub use avatar::Avatar; pub use badge::Badge; @@ -42,10 +45,11 @@ pub use icons::*; pub use input::Input; pub use input_tags::InputTags; pub use key_value::KeyValue; +pub use management_method::ManagementMethod; pub use markdown::Markdown; pub use notification::Notification; +pub use payment_method::PaymentMethod; pub use radio_button::RadioButton; -pub use action_request::ActionRequest; pub use search_input::SearchInput; pub use step::Step; pub use step_card::StepCard; diff --git a/src/components/atoms/payment_method.rs b/src/components/atoms/payment_method.rs new file mode 100644 index 0000000..0bd2df4 --- /dev/null +++ b/src/components/atoms/payment_method.rs @@ -0,0 +1,20 @@ +use dioxus::prelude::*; + +#[derive(PartialEq, Props, Clone)] +pub struct PaymentMethodProps { + title: String, + fee: String, + icon: Element, +} + +pub fn PaymentMethod(props: PaymentMethodProps) -> Element { + rsx!( + section { class: "checkbox__content--payment", + span { class: "checkbox-card__title", "{props.title}" } + div { class: "checkbox__content__left", + span { class: "checkbox-card__fee", "{props.fee}" } + div { class: "checkbox-card__media", {props.icon} } + } + } + ) +} diff --git a/src/components/atoms/tab.rs b/src/components/atoms/tab.rs index 8cef0be..edb0556 100644 --- a/src/components/atoms/tab.rs +++ b/src/components/atoms/tab.rs @@ -2,6 +2,8 @@ use dioxus::prelude::*; use super::dropdown::ElementSize; #[derive(PartialEq, Props, Clone)] pub struct TabProps { + #[props(default = "".to_string())] + class: String, text: String, #[props(default = false)] is_active: bool, @@ -18,7 +20,7 @@ pub fn Tab(props: TabProps) -> Element { }; rsx!( button { - class: "tab {size}", + class: "tab {size} {props.class}", class: if props.is_active { "tab--active" }, onclick: move |event| props.on_click.call(event), {props.icon}, diff --git a/src/components/molecules/header.rs b/src/components/molecules/header.rs index 79bff54..f070adf 100644 --- a/src/components/molecules/header.rs +++ b/src/components/molecules/header.rs @@ -1,41 +1,45 @@ -use std::str::FromStr; use dioxus::prelude::*; use dioxus_std::{i18n::use_i18, translate}; -use futures_util::TryFutureExt; +use futures_util::{StreamExt, TryFutureExt}; +use std::str::FromStr; + use crate::{ components::atoms::{ dropdown::{DropdownItem, ElementSize}, - icon_button::Variant, AccountButton, ArrowUp, ArrowUpDown, Button, Close, - Dropdown, Hamburguer, Icon, IconButton, Messages, Profile, Settings, Votes, + icon_button::Variant, + AccountButton, ArrowUpDown, Button, Close, Dropdown, Hamburguer, Icon, IconButton, + Messages, Polkadot, Profile, Settings, Votes, }, hooks::{ use_accounts::{use_accounts, IsDaoOwner}, - use_connect_wallet::use_connect_wallet, use_notification::use_notification, + use_connect_wallet::{use_connect_wallet, PjsError}, + use_market_client::use_market_client, + use_notification::use_notification, use_session::{use_session, UserSession}, }, - services::kreivo::{balances::account, communities::is_admin}, + services::{ + kreivo::{balances::account, communities::is_admin}, + market::types::Tokens, + }, }; use wasm_bindgen::prelude::*; -use pjs::PjsExtension; #[wasm_bindgen] extern "C" { #[wasm_bindgen(js_namespace = globalThis, js_name = setSigner)] - fn set_signer(address: String); + pub fn set_signer(address: String); } -const APP_NAME: &str = "Virto"; #[component] pub fn Header() -> Element { let i18 = use_i18(); + let market_client = use_market_client().get(); let mut accounts = use_accounts(); let mut notification = use_notification(); let mut session = use_session(); - let mut ksm_balance = use_signal::< - (String, String), - >(|| ('0'.to_string(), "00".to_string())); - let mut usdt_balance = use_signal::< - (String, String), - >(|| ('0'.to_string(), "00".to_string())); - let mut header_handled = consume_context::>(); + let mut ksm_balance = use_signal::<(String, String)>(|| ('0'.to_string(), "00".to_string())); + let mut usdt_balance = use_signal::<(String, String)>(|| ('0'.to_string(), "00".to_string())); + let mut is_active = use_signal(|| false); + let mut connect_handled = use_signal(|| false); + let get_account = move || { let Some(user_session) = session.get() else { return None; @@ -44,12 +48,13 @@ pub fn Header() -> Element { }; let get_balance = move || { spawn({ + let market_client = market_client.to_owned(); async move { - let pjs_account = get_account() - .ok_or(translate!(i18, "errors.wallet.accounts_not_found"))?; + let pjs_account = + get_account().ok_or(translate!(i18, "errors.wallet.accounts_not_found"))?; let account_address = pjs_account.address(); - let address = sp_core::sr25519::Public::from_str(&account_address) - .map_err(|e| { + let address = + sp_core::sr25519::Public::from_str(&account_address).map_err(|e| { log::warn!("Not found public address: {}", e); translate!(i18, "errors.wallet.account_address") })?; @@ -57,53 +62,47 @@ pub fn Header() -> Element { let Ok(account) = account(&format!("0x{}", hex_address)).await else { ksm_balance.set(('0'.to_string(), "00".to_string())); usdt_balance.set(('0'.to_string(), "00".to_string())); - if !header_handled() { - header_handled.set(true); - } return Ok(()); }; - let is_dao_owner = is_admin(&address.0) - .await - .map_err(|_| { - log::warn!("Failed to get is admin"); - translate!(i18, "errors.wallet.account_address") - })?; - accounts.set_is_active_account_an_admin(IsDaoOwner(is_dao_owner)); + let is_dao_owner = is_admin(&address.0).await.map_err(|_| { + log::warn!("Failed to get is admin"); + translate!(i18, "errors.wallet.account_address") + })?; + accounts.set_is_active_account_an_admin(Some(IsDaoOwner(is_dao_owner))); let unscaled_value = account.data.free as f64 / 10_f64.powf(12f64); - const KSM_PRICE: f64 = 32.11; + + let KSM_PRICE = market_client + .get_price_by_token(Tokens::KSM) + .await + .map_err(|_| String::from("No se ha podido consultar el precio"))?; + let usdt_value = unscaled_value * KSM_PRICE; let usdt_value = usdt_value.to_string(); let unscaled_value = unscaled_value.to_string(); let usdt_value = usdt_value.split(".").collect::>(); let unscaled_value = unscaled_value.split(".").collect::>(); - ksm_balance - .set(( - unscaled_value[0].to_string(), - format!("{:.2}", unscaled_value.get(1).unwrap_or(&"00")), - )); - usdt_balance - .set(( - usdt_value[0].to_string(), - format!("{:.2}", usdt_value.get(1).unwrap_or(&"00")), - )); - if !header_handled() { - header_handled.set(true); - } + + ksm_balance.set(( + unscaled_value[0].to_string(), + format!("{:.2}", unscaled_value.get(1).unwrap_or(&"00")), + )); + usdt_balance.set(( + usdt_value[0].to_string(), + format!("{:.2}", usdt_value.get(1).unwrap_or(&"00")), + )); + Ok::<(), String>(()) } - .unwrap_or_else(move |e: String| notification.handle_warning(&e)) + .unwrap_or_else(move |e: String| notification.handle_warning(&e)) }); }; - let mut dropdown_value = use_signal::< - Option, - >(|| { - let account = get_account() - .and_then(|account| { - Some(DropdownItem { - key: account.address().clone(), - value: account.name(), - }) - }); + let mut dropdown_value = use_signal::>(|| { + let account = get_account().and_then(|account| { + Some(DropdownItem { + key: account.address().clone(), + value: account.name(), + }) + }); account }); let mut items = vec![]; @@ -114,67 +113,52 @@ pub fn Header() -> Element { AccountButton { title: account.name(), description: address.clone(), on_click: move |_| {} } )) } - let mut on_handle_account = move |event: u8| { - header_handled.set(false); - let account = &accounts.get()[event as usize]; - let Ok(serialized_session) = serde_json::to_string( - &UserSession { + + let on_handle_account = use_coroutine(move |mut rx: UnboundedReceiver| async move { + while let Some(event) = rx.next().await { + let account = &accounts.get()[event as usize]; + + let Ok(serialized_session) = serde_json::to_string(&UserSession { name: account.name(), address: account.address(), account_id: event, - }, - ) else { - return notification.handle_error(&translate!(i18, "errors.session.persist")); - }; - if let Err(e) = session.persist_session_file(&serialized_session) { - log::warn!("Failed to persist session {:?}", e) - } - if let Err(e) = session.update_account(event) { - log::warn!("Failed to update account {:?}", e) - } - log::info!("{:?}", account); - accounts.set_account(Some(account.clone())); - set_signer(account.address().clone()); - let account = get_account() - .and_then(|account| { + }) else { + return notification.handle_error(&translate!(i18, "errors.session.persist")); + }; + + if let Err(e) = session.persist_session_file(&serialized_session) { + log::warn!("Failed to persist session {:?}", e) + }; + if let Err(e) = session.update_account(event) { + log::warn!("Failed to update account {:?}", e) + }; + + log::info!("{:?}", account); + accounts.set_account(Some(account.clone())); + set_signer(account.address().clone()); + + let account = get_account().and_then(|account| { Some(DropdownItem { key: account.address().clone(), value: account.name(), }) }); - dropdown_value.set(account); - get_balance(); - }; + + dropdown_value.set(account); + get_balance(); + } + }); + use_coroutine(move |_: UnboundedReceiver<()>| async move { if session.is_logged() { - match PjsExtension::connect(APP_NAME).await { - Ok(mut vault) => { - let Ok(_) = vault.fetch_accounts().await else { - notification - .handle_error( - &translate!(i18, "errors.wallet.accounts_not_found"), - ); - return; - }; - let vault_accounts = vault.accounts(); - accounts.set(vault_accounts); - if let Some(user_session) = session.get() { - on_handle_account(user_session.account_id); - } - } - Err(pjs::Error::NoPermission) => { - if let Err(e) = session.persist_session_file("") { - log::warn!("Failed to persist session {:?}", e) - }; - } - Err(_) => todo!(), + let Ok(_) = use_connect_wallet().await else { + return; + }; + if let Some(user_session) = session.get() { + on_handle_account.send(user_session.account_id); } - } else { - header_handled.set(true); } }); - let mut is_active = use_signal(|| false); - let mut connect_handled = use_signal(|| false); let active_class = if is_active() { "header--active" } else { "" }; rsx!( div { class: "dashboard__header", @@ -191,7 +175,7 @@ pub fn Header() -> Element { size: ElementSize::Big, default: None, on_change: move |event: usize| { - on_handle_account(event as u8); + on_handle_account.send(event as u8); }, body: items } @@ -201,12 +185,32 @@ pub fn Header() -> Element { text: translate!(i18, "header.cta.connect"), status: None, right_icon: rsx!( - Icon { icon : ArrowUp, height : 14, width : 14, stroke_width : 1, stroke : - "var(--text-primary, #12352b)" } + Icon { icon : Polkadot, height : 20, width : 20, fill : "var(--text-primary)" } ), on_click: move |_| { - use_connect_wallet(); - connect_handled.toggle(); + spawn( + async move { + use_connect_wallet().await?; + connect_handled.toggle(); + Ok::<(), PjsError>(()) + } + .unwrap_or_else(move |e: PjsError| { + match e { + PjsError::ConnectionFailed => { + notification + .handle_error( + &translate!(i18, "errors.wallet.connection_failed"), + ) + } + PjsError::AccountsNotFound => { + notification + .handle_error( + &translate!(i18, "errors.wallet.accounts_not_found"), + ); + } + }; + }), + ); } } } else { @@ -217,7 +221,7 @@ pub fn Header() -> Element { placeholder: translate!(i18, "header.cta.account"), default: None, on_change: move |event: usize| { - on_handle_account(event as u8); + on_handle_account.send(event as u8); }, body: items } @@ -233,20 +237,12 @@ pub fn Header() -> Element { variant: Variant::Round, size: ElementSize::Big, class: "button--avatar button--comming-soon bg--fill-600", - body: rsx!( - Icon { - icon: ArrowUpDown, - height: 32, - width: 32, - fill: "var(--fill-00)" - } - ), - on_click: move |_| { } + body: rsx!(Icon { icon : ArrowUpDown, height : 32, width : 32, fill : "var(--fill-00)" }), + on_click: move |_| {} } } div { class: "balances", span { class: "balance__title", - span { class: "balance__sign", "$" } span { class: "balance__value", "{ksm_balance().0}" } span { class: "balance__decimals", ".{ksm_balance().1}" } span { class: "balance__asset", "KSM" } diff --git a/src/components/molecules/onboarding/management.rs b/src/components/molecules/onboarding/management.rs index 1e214e3..a6ad98c 100644 --- a/src/components/molecules/onboarding/management.rs +++ b/src/components/molecules/onboarding/management.rs @@ -2,7 +2,8 @@ use dioxus::prelude::*; use dioxus_std::{i18n::use_i18, translate}; use crate::{ components::atoms::{ - CheckboxCard, Icon, KeyFill, MedalFill, ShieldKeyholeFill, TeamFill, Title, + management_method::ManagementMethod, CheckboxCard, Icon, KeyFill, MedalFill, + ShieldKeyholeFill, TeamFill, Title, }, hooks::use_onboard::{use_onboard, ManagementOptions}, }; @@ -18,11 +19,14 @@ pub fn OnboardingManagement() -> Element { div { class: "form__inputs", CheckboxCard { id: "a".to_string(), - title: translate!(i18, "onboard.management.form.membership.title"), - description: translate!(i18, "onboard.management.form.membership.description"), name: String::from("management"), checked: matches!(onboard.get_management().value, ManagementOptions::Membership), - icon: rsx!(Icon { icon : TeamFill, height : 20, width : 20, fill : "var(--fill-600)" }), + body: rsx!( + ManagementMethod { title : translate!(i18, + "onboard.management.form.membership.title"), description : translate!(i18, + "onboard.management.form.membership.description"), icon : rsx!(Icon { icon : + TeamFill, height : 20, width : 20, fill : "var(--fill-600)" }), } + ), on_change: move |_| { onboard .management_mut() @@ -31,34 +35,40 @@ pub fn OnboardingManagement() -> Element { } CheckboxCard { id: "a".to_string(), - title: translate!(i18, "onboard.management.form.rank.title"), - description: translate!(i18, "onboard.management.form.rank.description"), name: String::from("management"), checked: false, soon: true, - icon: rsx!(Icon { icon : MedalFill, height : 20, width : 20, fill : "var(--fill-600)" }), + body: rsx!( + ManagementMethod { title : translate!(i18, "onboard.management.form.rank.title"), + description : translate!(i18, "onboard.management.form.rank.description"), icon : + rsx!(Icon { icon : MedalFill, height : 20, width : 20, fill : "var(--fill-600)" + }), } + ), on_change: move |_| {} } CheckboxCard { id: "a".to_string(), - title: translate!(i18, "onboard.management.form.native_token.title"), - description: translate!(i18, "onboard.management.form.native_token.description"), name: String::from("management"), checked: false, soon: true, - icon: rsx!(Icon { icon : KeyFill, height : 20, width : 20, fill : "var(--fill-600)" }), + body: rsx!( + ManagementMethod { title : translate!(i18, + "onboard.management.form.native_token.title"), description : translate!(i18, + "onboard.management.form.native_token.description"), icon : rsx!(Icon { icon : + KeyFill, height : 20, width : 20, fill : "var(--fill-600)" }), } + ), on_change: move |_| {} } CheckboxCard { id: "a".to_string(), - title: translate!(i18, "onboard.management.form.own_token.title"), - description: translate!(i18, "onboard.management.form.own_token.description"), name: String::from("management"), checked: false, soon: true, - icon: rsx!( - Icon { icon : ShieldKeyholeFill, height : 20, width : 20, fill : - "var(--fill-600)" } + body: rsx!( + ManagementMethod { title : translate!(i18, + "onboard.management.form.own_token.title"), description : translate!(i18, + "onboard.management.form.own_token.description"), icon : rsx!(Icon { icon : + ShieldKeyholeFill, height : 20, width : 20, fill : "var(--fill-600)" }), } ), on_change: move |_| {} } diff --git a/src/components/molecules/sidebar.rs b/src/components/molecules/sidebar.rs index a1ed9ae..56feb0c 100644 --- a/src/components/molecules/sidebar.rs +++ b/src/components/molecules/sidebar.rs @@ -3,14 +3,13 @@ use dioxus_std::{i18n::use_i18, translate}; use crate::{ components::atoms::{ - avatar::Variant, dropdown::ElementSize, icon_button, AddPlus, Avatar, Compass, Hamburguer, - Home, Icon, IconButton, Star, + avatar::Variant, dropdown::ElementSize, icon_button, Avatar, Compass, Hamburguer, Home, + Icon, IconButton, OnOff, Star, }, hooks::{ - use_communities::use_communities, use_our_navigator::use_our_navigator, - use_tooltip::use_tooltip, + use_accounts::use_accounts, use_communities::use_communities, + use_our_navigator::use_our_navigator, use_tooltip::use_tooltip, }, - middlewares::is_dao_owner::is_dao_owner, }; #[component] pub fn Sidebar() -> Element { @@ -18,6 +17,7 @@ pub fn Sidebar() -> Element { let mut communities = use_communities(); let nav = use_our_navigator(); let mut tooltip = use_tooltip(); + let accounts = use_accounts(); let mut is_active = use_signal(|| false); @@ -41,6 +41,55 @@ pub fn Sidebar() -> Element { } } ul { class: "sidebar__list", + match accounts.get_account() { + Some(account) => rsx!( + li { class: "sidebar__item", + onclick: move |_|{}, + IconButton { + class: "button--avatar", + body: rsx!( + Avatar { + name: "{account.name()}", + size: 60, + uri: None, + variant: Variant::Round + } + ), + on_click: move |_| { + nav.push(vec![], "/account") + } + } + span { + "{account.name()}" + }, + } + ), + None => rsx!( + li { class: "sidebar__item", + onclick: move |_|{}, + IconButton { + class: "button--icon bg--state-primary-active", + size: ElementSize::Big, + variant: icon_button::Variant::Round, + body: rsx!( + Icon { + icon: OnOff, + height: 32, + width: 32, + stroke_width: 2, + stroke: "var(--fill-00)" + } + ), + on_click: move |_| { + nav.push(vec![], "/login"); + } + } + span { + {translate!(i18, "sidebar.cta")} + } + } + ), + }, li { class: "sidebar__item", onclick: move |_| {}, IconButton { class: "button--icon bg--state-primary-active", @@ -67,23 +116,7 @@ pub fn Sidebar() -> Element { ), on_click: move |_| { tooltip.hide(); - nav.push(vec![Box::new(is_dao_owner())], "/explore"); - } - } - span { {translate!(i18, "sidebar.cta")} } - } - li { class: "sidebar__item", onclick: move |_| {}, - IconButton { - class: "button--icon bg--state-primary-active", - size: ElementSize::Big, - variant: icon_button::Variant::Round, - body: rsx!( - Icon { icon : AddPlus, height : 32, width : 32, stroke_width : 1.5, fill : - "var(--fill-00)" } - ), - on_click: move |_| { - tooltip.hide(); - nav.push(vec![Box::new(is_dao_owner())], "/onboarding"); + nav.push(vec![], "/explore"); } } span { {translate!(i18, "sidebar.cta")} } diff --git a/src/hooks/use_accounts.rs b/src/hooks/use_accounts.rs index ba6292e..f7400b4 100644 --- a/src/hooks/use_accounts.rs +++ b/src/hooks/use_accounts.rs @@ -2,11 +2,12 @@ use dioxus::prelude::*; use pjs::Account as PjsAccount; pub type Account = PjsAccount; pub type Accounts = Vec; +#[derive(Debug)] pub struct IsDaoOwner(pub bool); pub fn use_accounts() -> UseAccountsState { let accounts = consume_context::>>(); let account = consume_context::>>(); - let is_dao_owner = consume_context::>(); + let is_dao_owner = consume_context::>>(); use_hook(|| UseAccountsState { inner: accounts, account, @@ -17,7 +18,7 @@ pub fn use_accounts() -> UseAccountsState { pub struct UseAccountsState { inner: Signal, account: Signal>, - is_dao_owner: Signal, + is_dao_owner: Signal>, } impl UseAccountsState { pub fn get(&self) -> Accounts { @@ -40,9 +41,13 @@ impl UseAccountsState { *c = account; } pub fn is_active_account_an_admin(&self) -> bool { - self.is_dao_owner.read().0.clone() + log::info!("is_dao_owner: {:?}", self.is_dao_owner.read()); + match &*self.is_dao_owner.read() { + Some(is_dao_owner) => is_dao_owner.0, + None => true, + } } - pub fn set_is_active_account_an_admin(&mut self, is_dao_owner: IsDaoOwner) { + pub fn set_is_active_account_an_admin(&mut self, is_dao_owner: Option) { let mut c = self.is_dao_owner.write(); *c = is_dao_owner; } diff --git a/src/hooks/use_communities.rs b/src/hooks/use_communities.rs index 4f05cdc..dede35d 100644 --- a/src/hooks/use_communities.rs +++ b/src/hooks/use_communities.rs @@ -36,22 +36,23 @@ pub fn use_communities() -> UseCommunitiesState { communities.set(cached_communitites); - let Some(session) = session.get() else { - log::info!("error here by account"); - notification.handle_error(&translate!(i18, "errors.communities.query_failed")); - tooltip.hide(); - return; - }; - - let Ok(public_address) = sp_core::sr25519::Public::from_str(&session.address) else { - log::info!("error here by address"); - notification.handle_error(&translate!(i18, "errors.wallet.account_address")); - tooltip.hide(); - return; - }; + let public_address = session + .get() + .map( + |session| match sp_core::sr25519::Public::from_str(&session.address) { + Ok(public_address) => Some(public_address.0), + Err(_) => { + log::warn!("error here by address"); + notification + .handle_error(&translate!(i18, "errors.wallet.account_address")); + None + } + }, + ) + .flatten(); let Ok(mut community_tracks) = get_communities().await else { - log::info!("error here by memeber"); + log::warn!("error here by member"); notification.handle_error(&translate!(i18, "errors.communities.query_failed")); tooltip.hide(); return; @@ -60,10 +61,13 @@ pub fn use_communities() -> UseCommunitiesState { let mut temporal_favorite_communities = get_favorite_communities(); for community in &mut community_tracks { - let Ok(is_member) = - is_community_member_by_address(&public_address.0, community.id).await - else { - continue; + let is_member = match public_address { + Some(public_address) => { + is_community_member_by_address(&public_address, community.id) + .await + .unwrap_or(false) + } + None => false, }; community.has_membership = is_member; @@ -227,7 +231,6 @@ impl UseCommunitiesState { log::warn!("Failed to persist communities"); }; - Ok(()) } diff --git a/src/hooks/use_connect_wallet.rs b/src/hooks/use_connect_wallet.rs index 476ed4a..9b4f81a 100644 --- a/src/hooks/use_connect_wallet.rs +++ b/src/hooks/use_connect_wallet.rs @@ -1,42 +1,45 @@ use dioxus::prelude::*; -use dioxus_std::{i18n::use_i18, translate}; -use futures_util::TryFutureExt; -use super::{use_accounts::use_accounts, use_notification::use_notification}; +use wasm_bindgen::prelude::*; + +use super::{use_accounts::use_accounts, use_session::use_session}; + pub enum PjsError { ConnectionFailed, AccountsNotFound, } -pub fn use_connect_wallet() { - let i18 = use_i18(); + +#[wasm_bindgen] +extern "C" { + #[wasm_bindgen(js_namespace = globalThis, js_name = initExecutor)] + pub fn init_executor(); +} + +const APP_NAME: &str = "Virto"; + +pub async fn use_connect_wallet() -> Result<(), PjsError> { + let session = use_session(); let mut accounts = use_accounts(); - let mut notification = use_notification(); let mut pjs = use_context::>>(); - use_coroutine(|_: UnboundedReceiver<()>| { - async move { - let mut vault = pjs::PjsExtension::connect("virto") - .await - .map_err(|_| PjsError::ConnectionFailed)?; - vault.fetch_accounts().await.map_err(|_| PjsError::AccountsNotFound)?; - let vault_accounts = vault.accounts(); - accounts.set(vault_accounts); - pjs.set(Some(vault)); - Ok::<(), PjsError>(()) - } - .unwrap_or_else(move |e: PjsError| { - match e { - PjsError::ConnectionFailed => { - notification - .handle_error( - &translate!(i18, "errors.wallet.connection_failed"), - ) - } - PjsError::AccountsNotFound => { - notification - .handle_error( - &translate!(i18, "errors.wallet.accounts_not_found"), - ); - } - }; - }) - }); + + let mut vault = pjs::PjsExtension::connect(APP_NAME).await.map_err(|_| { + if let Err(_) = session.persist_session_file("") { + log::warn!("Failed to persist session") + }; + + PjsError::ConnectionFailed + })?; + + init_executor(); + + vault + .fetch_accounts() + .await + .map_err(|_| PjsError::AccountsNotFound)?; + + let vault_accounts = vault.accounts(); + + accounts.set(vault_accounts); + pjs.set(Some(vault)); + + Ok(()) } diff --git a/src/hooks/use_market_client.rs b/src/hooks/use_market_client.rs new file mode 100644 index 0000000..fbd25a5 --- /dev/null +++ b/src/hooks/use_market_client.rs @@ -0,0 +1,20 @@ +use dioxus::prelude::*; + +use crate::services::market::client::MarketClient; + +pub fn use_market_client() -> UseMarketClient { + let client = consume_context::>(); + + use_hook(move || UseMarketClient { client }) +} + +#[derive(Clone, Copy)] +pub struct UseMarketClient { + pub client: Signal, +} + +impl UseMarketClient { + pub fn get(&self) -> MarketClient { + self.client.read().clone() + } +} diff --git a/src/hooks/use_our_navigator.rs b/src/hooks/use_our_navigator.rs index 445c81b..f9c414a 100644 --- a/src/hooks/use_our_navigator.rs +++ b/src/hooks/use_our_navigator.rs @@ -17,7 +17,7 @@ impl UseOurNavigatorState { ) { for middleware in middlewares { if let Err(e) = middleware() { - println!("Middleware failed: {}", e); + log::info!("Middleware failed: {}", e); return; } } diff --git a/src/hooks/use_startup.rs b/src/hooks/use_startup.rs index dafe22b..ae9f036 100644 --- a/src/hooks/use_startup.rs +++ b/src/hooks/use_startup.rs @@ -1,7 +1,9 @@ use dioxus::{hooks::use_context_provider, signals::Signal}; use pjs::PjsExtension; -use crate::{pages::{dashboard::Community, initiatives::InitiativeWrapper}, services::bot::client::SpacesClient}; +use crate::{ + pages::{dashboard::Community, initiatives::InitiativeWrapper}, services::{bot::client::SpacesClient, market::client::MarketClient}, +}; use super::{ use_accounts::{Account, IsDaoOwner}, @@ -12,9 +14,11 @@ use super::{ use_onboard::{BasicsForm, InvitationForm, ManagementForm}, use_paginator::Paginator, use_session::UserSession, use_theme::Theme, use_timestamp::{IsTimestampHandled, TimestampValue}, - use_tooltip::TooltipItem, + use_tooltip::TooltipItem, use_withdraw::WithdrawForm, }; const SPACES_CLIENT_URL: &str = "https://bot-api.virto.app"; +const MARKET_CLIENT_URL: &str = "https://sapi.coincarp.com/api/v1"; + pub fn use_startup() { use_context_provider::>(|| Signal::new(Theme::default())); use_context_provider::>(|| Signal::new(BasicsForm::default())); @@ -35,7 +39,7 @@ pub fn use_startup() { use_context_provider::>>(|| Signal::new(None)); use_context_provider::>>(|| Signal::new(vec![])); use_context_provider::>>(|| Signal::new(None)); - use_context_provider::>(|| Signal::new(IsDaoOwner(false))); + use_context_provider::>>(|| Signal::new(None)); use_context_provider::>>(|| Signal::new(None)); use_context_provider::>(|| Signal::new(false)); use_context_provider::>(|| Signal::new(String::new())); @@ -50,10 +54,17 @@ pub fn use_startup() { Signal, >(|| Signal::new(ConfirmationForm::default())); use_context_provider::>(|| Signal::new(TimestampValue(0))); - use_context_provider::< - Signal, - >(|| Signal::new(IsTimestampHandled(false))); - use_context_provider::< - Signal, - >(|| { Signal::new(SpacesClient::new(SPACES_CLIENT_URL)) }); + use_context_provider::>(|| Signal::new(IsTimestampHandled(false))); + + use_context_provider::>(|| Signal::new(WithdrawForm::default())); + + // Clients + + use_context_provider::>(|| { + Signal::new(SpacesClient::new(SPACES_CLIENT_URL)) + }); + + use_context_provider::>(|| { + Signal::new(MarketClient::new(MARKET_CLIENT_URL)) + }); } diff --git a/src/hooks/use_withdraw.rs b/src/hooks/use_withdraw.rs new file mode 100644 index 0000000..eab276b --- /dev/null +++ b/src/hooks/use_withdraw.rs @@ -0,0 +1,54 @@ +use dioxus::prelude::*; + +#[derive(Clone, Default, Debug)] +pub struct WithdrawForm { + pub address: String, + pub amount: String, +} + +pub fn use_withdraw() -> UseWithdrawState { + let withdraw = consume_context::>(); + + use_hook(|| UseWithdrawState { + inner: UseWithdrawInner { withdraw }, + }) +} + +#[derive(Clone, Copy)] +pub struct UseWithdrawState { + inner: UseWithdrawInner, +} + +#[derive(Clone, Copy, Default)] +pub struct UseWithdrawInner { + withdraw: Signal, +} + +impl UseWithdrawState { + pub fn get(&self) -> UseWithdrawInner { + self.inner.clone() + } + + pub fn get_withdraw(&self) -> WithdrawForm { + self.inner.withdraw.read().clone() + } + + pub fn set_withdraw(&mut self, withdraw: WithdrawForm) { + let mut inner = self.inner.withdraw.write(); + *inner = withdraw; + } + + pub fn withdraw_mut(&mut self) -> Signal { + self.inner.withdraw.clone() + } + + pub fn is_form_complete(&self) -> bool { + let withdraw = self.inner.withdraw.read(); + + withdraw.address.len() > 0 && withdraw.amount.len() > 0 + } + + pub fn default(&mut self) { + self.inner = UseWithdrawInner::default() + } +} diff --git a/src/lib.rs b/src/lib.rs index 34260ef..ef4bf02 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,13 +1,16 @@ #![allow(non_snake_case)] pub mod pages { + pub mod account; pub mod dashboard; pub mod explore; pub mod initiative; pub mod initiatives; + pub mod login; pub mod not_found; pub mod onboarding; pub mod route; pub mod vote; + pub mod withdraw; } pub mod middlewares { pub mod is_chain_available; @@ -24,6 +27,7 @@ pub mod hooks { pub mod use_connect_wallet; pub mod use_initiative; pub mod use_language; + pub mod use_market_client; pub mod use_notification; pub mod use_onboard; pub mod use_our_navigator; @@ -35,6 +39,7 @@ pub mod hooks { pub mod use_timestamp; pub mod use_tooltip; pub mod use_vote; + pub mod use_withdraw; } pub mod components { pub mod atoms; @@ -45,6 +50,10 @@ pub mod services { pub mod client; pub mod types; } + pub mod market { + pub mod client; + pub mod types; + } pub mod kreivo { pub mod balances; pub mod communities; @@ -57,6 +66,7 @@ pub mod services { pub mod timestamp; } pub mod kusama { + pub mod balances; pub mod system; } } diff --git a/src/locales/en-US.json b/src/locales/en-US.json index 2cbcff4..4c04432 100644 --- a/src/locales/en-US.json +++ b/src/locales/en-US.json @@ -56,6 +56,36 @@ "rights": "Virto PROD V.0.0.1. 2024 All rights reserved" } }, + "withdraw": { + "payment": { + "label": "Checkout", + "title": "Payment", + "subtitle": "Payment Method", + "methods": { + "card": { + "title": "Credit Card", + "fee": "+{fee}%", + "cta": "Add New Card" + }, + "paypal": { + "title": "Paypal", + "fee": "+{fee}%" + }, + "pse": { + "title": "PSE", + "fee": "+{fee}%" + }, + "kusama": { + "title": "Kusama", + "fee": "Free" + }, + "eth": { + "title": "ETH/Polygon", + "fee": "Free" + } + } + } + }, "dao": { "tabs": { "all": "All initiatives", diff --git a/src/locales/es-ES.json b/src/locales/es-ES.json index 576d54e..a72828d 100644 --- a/src/locales/es-ES.json +++ b/src/locales/es-ES.json @@ -56,6 +56,36 @@ "rights": "Virto PROD V.0.0.1. 2024 Todos los derechos reservados" } }, + "withdraw": { + "payment": { + "label": "Pago", + "title": "Completa la información de pago", + "subtitle": "Método de Pago", + "methods": { + "card": { + "title": "Tarjeta de Crédito", + "fee": "+{fee}%", + "cta": "Añadir Nueva Tarjeta" + }, + "paypal": { + "title": "Paypal", + "fee": "+{fee}%" + }, + "pse": { + "title": "PSE", + "fee": "+{fee}%" + }, + "kusama": { + "title": "Kusama", + "fee": "Gratis" + }, + "eth": { + "title": "ETH/Polygon", + "fee": "Gratis" + } + } + } + }, "dao": { "tabs": { "all": "Iniciativas", diff --git a/src/middlewares/is_chain_available.rs b/src/middlewares/is_chain_available.rs index 825685c..b5dbabc 100644 --- a/src/middlewares/is_chain_available.rs +++ b/src/middlewares/is_chain_available.rs @@ -1,19 +1,21 @@ -use dioxus_std::{i18n::use_i18, translate}; +use dioxus_std::{i18n::UseI18, translate}; use web_sys::js_sys::Date; -use crate::hooks::{use_notification::use_notification, use_timestamp::use_timestamp}; +use crate::hooks::{use_notification::UseNotificationState, use_timestamp::UseTimestampState}; const THRESHOLD: u64 = 1000 * 60; -pub fn is_chain_available() -> impl FnOnce() -> Result<(), &'static str> { +pub fn is_chain_available( + i18: UseI18, + timestamp: UseTimestampState, + mut notification: UseNotificationState, +) -> impl FnOnce() -> Result<(), &'static str> { move || { - let i18 = use_i18(); - let timestamp = use_timestamp(); - let mut notification = use_notification(); + log::info!("timestamp: {:?}", timestamp.get().0); + log::info!("now: {:?}", Date::now()); + log::info!("rest: {:?}", Date::now() as u64 - timestamp.get().0); if Date::now() as u64 - timestamp.get().0 > THRESHOLD { - notification - .handle_warning( - &translate!(i18, "warnings.middleware.chain_unavailable"), - ); + log::warn!("Chain unavailable"); + notification.handle_warning(&translate!(i18, "warnings.middleware.chain_unavailable")); Err("Chain unavailable") } else { Ok(()) diff --git a/src/middlewares/is_dao_owner.rs b/src/middlewares/is_dao_owner.rs index 738ce88..315661f 100644 --- a/src/middlewares/is_dao_owner.rs +++ b/src/middlewares/is_dao_owner.rs @@ -1,11 +1,13 @@ -use dioxus_std::{i18n::use_i18, translate}; -use crate::hooks::{use_accounts::use_accounts, use_notification::use_notification}; -pub fn is_dao_owner() -> impl FnOnce() -> Result<(), &'static str> { +use crate::hooks::{use_accounts::UseAccountsState, use_notification::UseNotificationState}; +use dioxus_std::{i18n::UseI18, translate}; +pub fn is_dao_owner( + i18: UseI18, + accounts: UseAccountsState, + mut notification: UseNotificationState, +) -> impl FnOnce() -> Result<(), &'static str> { move || { - let i18 = use_i18(); - let accounts = use_accounts(); - let mut notification = use_notification(); if accounts.is_active_account_an_admin() { + log::warn!("User is DAO owner"); notification.handle_warning(&translate!(i18, "warnings.middleware.has_dao")); Err("User is DAO owner") } else { diff --git a/src/pages/account.rs b/src/pages/account.rs new file mode 100644 index 0000000..3ab5c6b --- /dev/null +++ b/src/pages/account.rs @@ -0,0 +1,308 @@ +use std::str::FromStr; + +use dioxus::prelude::*; +use dioxus_std::{i18n::use_i18, translate}; +use futures_util::TryFutureExt; + +use crate::{ + components::atoms::{button::Variant as ButtonVariant, dropdown::ElementSize, Button, Tab}, + hooks::{ + use_market_client::use_market_client, use_notification::use_notification, + use_our_navigator::use_our_navigator, use_session::use_session, + use_timestamp::use_timestamp, + }, + middlewares::is_chain_available::is_chain_available, + services::{kreivo, market::types::Tokens}, +}; +use wasm_bindgen::prelude::*; + +#[derive(PartialEq)] +enum AccountTabs { + Kreivo, +} + +#[derive(PartialEq)] +enum ProfileTabs { + Wallet, + _Transfers, +} + +#[wasm_bindgen] +extern "C" { + #[wasm_bindgen(js_namespace = globalThis, js_name = setSigner)] + fn set_signer(address: String); +} + +#[component] +pub fn Account() -> Element { + let i18 = use_i18(); + let mut notification = use_notification(); + let nav = use_our_navigator(); + let session = use_session(); + let timestamp = use_timestamp(); + let market_client = use_market_client().get(); + let mut ksm_balance = use_signal::<(String, String)>(|| ('0'.to_string(), "00".to_string())); + let mut usdt_balance = use_signal::<(String, String)>(|| ('0'.to_string(), "00".to_string())); + + let mut kreivo_balance = use_signal(|| 0.0); + let mut ksm_usd = use_signal(|| 0.0); + + let get_balance = move || { + spawn({ + async move { + let user_session = session + .get() + .ok_or(translate!(i18, "errors.wallet.accounts_not_found"))?; + + let address = + sp_core::sr25519::Public::from_str(&user_session.address).map_err(|e| { + log::warn!("Not found public address: {}", e); + translate!(i18, "errors.wallet.account_address") + })?; + + let hex_address = hex::encode(address.0); + + let Ok(account) = kreivo::balances::account(&format!("0x{}", hex_address)).await + else { + ksm_balance.set(('0'.to_string(), "00".to_string())); + usdt_balance.set(('0'.to_string(), "00".to_string())); + + return Ok(()); + }; + + kreivo_balance.set(account.data.free as f64 / 10_f64.powf(12f64)); + + let unscaled_value = kreivo_balance(); + let KSM_PRICE = market_client + .get_price_by_token(Tokens::KSM) + .await + .map_err(|_| String::from("No se ha podido consultar el precio"))?; + + ksm_usd.set(KSM_PRICE); + + let usdt_value = unscaled_value * KSM_PRICE; + + let usdt_value = usdt_value.to_string(); + let unscaled_value = unscaled_value.to_string(); + + let usdt_value = usdt_value.split(".").collect::>(); + let unscaled_value = unscaled_value.split(".").collect::>(); + + ksm_balance.set(( + unscaled_value[0].to_string(), + format!("{:.2}", unscaled_value.get(1).unwrap_or(&"00")), + )); + usdt_balance.set(( + usdt_value[0].to_string(), + format!("{:.2}", usdt_value.get(1).unwrap_or(&"00")), + )); + + Ok::<(), String>(()) + } + .unwrap_or_else(move |e: String| notification.handle_warning(&e)) + }); + }; + + use_coroutine(move |_: UnboundedReceiver<()>| async move { + if session.is_logged() { + get_balance(); + } + }); + + let tab_value = use_signal(|| AccountTabs::Kreivo); + let mut profile_value = use_signal(|| ProfileTabs::Wallet); + + rsx! { + div { class: "page--vote", + div { class: "account", + div { class: "account__options", + Tab { + text: "Wallet", + is_active: if *profile_value.read() == ProfileTabs::Wallet { true } else { false }, + on_click: move |_| { + profile_value.set(ProfileTabs::Wallet); + } + } + Tab { + class: "tab--comming-soon", + text: "Transfers", + is_active: true, + on_click: move |_| {} + } + } + match *profile_value.read() { + ProfileTabs::Wallet => { + rsx!( + section { class: "wallet", + div { class: "account__container", + div { class: "account__balance", + h3 { class: "account__balance__title", + "Balance" + } + div { class: "account__balance__cta", + Button { + class: "button--comming-soon", + text: "Deposit", + size: ElementSize::Small, + variant: ButtonVariant::Secondary, + on_click: move |_| { + spawn( + async move { + + Ok::<(), String>(()) + }.unwrap_or_else(move |_: String| { + + }) + ); + }, + status: None, + } + Button { + class: "", + text: "Withdraw", + size: ElementSize::Small, + variant: ButtonVariant::Secondary, + on_click: move |_| { + spawn( + async move { + nav.push(vec![Box::new(is_chain_available(i18, timestamp, notification))], "/withdraw"); + Ok::<(), String>(()) + }.unwrap_or_else(move |_: String| { + + }) + ); + }, + status: None, + } + } + } + div { class: "balances", + span { class: "balance__title", + span { class: "balance__value", + "{ksm_balance().0}" + } + span { class: "balance__decimals", + ".{ksm_balance().1}" + } + span { class: "balance__asset", + "KSM" + } + } + span { class: "balance__subtitle", + span { class: "balance__sign", + "$" + } + span { class: "balance__value", + "{usdt_balance().0}" + } + span { class: "balance__decimals", + ".{usdt_balance().1}" + } + span { class: "balance__asset", + "USD" + } + } + } + + } + div { class: "account__container", + h3 { class: "account__balance__title", + "Activos" + } + div { class: "account__actives", + div { class: "actives", + table { class: "actives__list", + tr { + th { class: "list__name", "Asset" } + th { "Quantity" } + th { "Cost" } + th { "Total" } + } + + match *tab_value.read() { + AccountTabs::Kreivo => rsx!( + tr { + td { class: "list__name", "KSM" } + td { { format!("{:.2}", kreivo_balance()) } } + td { + { format!("${} USD", if ksm_usd() == 0.0 { "-".to_string() } else { format!("{:.2}", ksm_usd()) } )} + } + td { + { format!("${} USD", if ksm_usd() == 0.0 || kreivo_balance() <= 0.001 { "-".to_string() } else { format!("{:.2}", ksm_usd() * kreivo_balance()) } )} + } + } + + tr { class: "list__asset--comming-soon", + td { class: "list__name", "USDT" } + td { "-" } + td { "-" } + td { "-" } + } + + tr { class: "list__asset--comming-soon", + td { class: "list__name", "dUSD" } + td { "-" } + td { "-" } + td { "-" } + } + ), + } + } + } + } + } + } + ) + }, + ProfileTabs::_Transfers => { + rsx!( + section { class: "transfers", + div { class: "account__container", + h3 { class: "account__balance__title", + "Transferencias" + } + table { class: "actives__list", + tr { + th { class: "list__name", "Asset" } + th { "Time" } + th { "Quantity" } + th { "Account" } + } + + tr { + td { class: "list__name", "KSM" } + td { "2024-08-20 20:16:34" } + td { "10" } + td { "5E4S9C..." } + } + + tr { + td { class: "list__name", "KSM" } + td { "2024-08-20 20:16:34" } + td { "10" } + td { "5E4S9C..." } + } + + tr { + td { class: "list__name", "KSM" } + td { "2024-08-20 20:16:34" } + td { "10" } + td { "5E4S9C..." } + } + + tr { + td { class: "list__name", "KSM" } + td { "2024-08-20 20:16:34" } + td { "10" } + td { "5E4S9C..." } + } + } + } + } + ) + }, + } + } + } + } +} diff --git a/src/pages/dashboard.rs b/src/pages/dashboard.rs index 819c743..a7e0db9 100644 --- a/src/pages/dashboard.rs +++ b/src/pages/dashboard.rs @@ -7,14 +7,15 @@ use crate::{ components::{ atoms::{ avatar::Variant as AvatarVariant, dropdown::ElementSize, AddPlus, ArrowLeft, - ArrowRight, Avatar, Badge, Compass, Icon, IconButton, SearchInput, Star, Tab, UserAdd, - UserGroup, DynamicText + ArrowRight, Avatar, Badge, Compass, DynamicText, Icon, IconButton, SearchInput, Star, + Tab, UserAdd, UserGroup, }, molecules::tabs::TabItem, }, hooks::{ - use_communities::use_communities, use_our_navigator::use_our_navigator, - use_tooltip::use_tooltip, + use_accounts::use_accounts, use_communities::use_communities, + use_notification::use_notification, use_our_navigator::use_our_navigator, + use_timestamp::use_timestamp, use_tooltip::use_tooltip, }, middlewares::{is_chain_available::is_chain_available, is_dao_owner::is_dao_owner}, }; @@ -45,15 +46,16 @@ pub fn Dashboard() -> Element { let mut tooltip = use_tooltip(); let nav = use_our_navigator(); let communities = use_communities(); + let notification = use_notification(); + let accounts = use_accounts(); + let timestamp = use_timestamp(); let mut current_page = use_signal::(|| 1); let mut search_word = use_signal::(|| String::new()); - let tab_items = vec![ - TabItem { - k: String::from("all"), - value: translate!(i18, "dashboard.tabs.all"), - }, - ]; + let tab_items = vec![TabItem { + k: String::from("all"), + value: translate!(i18, "dashboard.tabs.all"), + }]; let tab_value = use_signal::(|| String::from("all")); let mut filter_name = use_signal::>(|| None); @@ -76,7 +78,7 @@ pub fn Dashboard() -> Element { let dynamic_two = translate!(i18, "dynamic_text.dynamic_two"); let dynamic_three = translate!(i18, "dynamic_text.dynamic_three"); - let words = vec!(dynamic_one, dynamic_two, dynamic_three); + let words = vec![dynamic_one, dynamic_two, dynamic_three]; rsx! { div { class: "dashboard grid-main", @@ -117,7 +119,10 @@ pub fn Dashboard() -> Element { on_click: move |_| { tooltip.hide(); nav.push( - vec![Box::new(is_chain_available()), Box::new(is_dao_owner())], + vec![ + Box::new(is_chain_available(i18, timestamp, notification)), + Box::new(is_dao_owner(i18, accounts, notification)), + ], "/onboarding", ); } @@ -221,12 +226,12 @@ pub fn Dashboard() -> Element { div { class: "card__container", div { class: "card__head", h3 { class: "card__title", - {translate!(i18, "dashboard.cta_cards.create.title_part_one")}, - span { - DynamicText { words }, - }, - {translate!(i18, "dashboard.cta_cards.create.title_part_two")} - }, + {translate!(i18, "dashboard.cta_cards.create.title_part_one")}, + span { + DynamicText { words } + } + {translate!(i18, "dashboard.cta_cards.create.title_part_two")} + } } p { class: "card__description", { translate!(i18, @@ -256,7 +261,10 @@ pub fn Dashboard() -> Element { on_click: move |_| { tooltip.hide(); nav.push( - vec![Box::new(is_chain_available()), Box::new(is_dao_owner())], + vec![ + Box::new(is_chain_available(i18, timestamp, notification)), + Box::new(is_dao_owner(i18, accounts, notification)), + ], "/onboarding", ); } diff --git a/src/pages/explore.rs b/src/pages/explore.rs index 7d7f65c..83fe4e8 100644 --- a/src/pages/explore.rs +++ b/src/pages/explore.rs @@ -1,23 +1,25 @@ -use dioxus::prelude::*; -use dioxus_std::{i18n::use_i18, translate}; -use futures_util::StreamExt; use crate::{ components::{ atoms::{ avatar::Variant as AvatarVariant, dropdown::ElementSize, AddPlus, ArrowLeft, - ArrowRight, Avatar, Badge, Icon, IconButton, SearchInput, Star, Tab, UserAdd, - UserGroup, DynamicText + ArrowRight, Avatar, Badge, DynamicText, Icon, IconButton, SearchInput, Star, Tab, + UserAdd, UserGroup, }, molecules::tabs::TabItem, }, hooks::{ + use_accounts::use_accounts, use_communities::{use_communities, CommunitiesError}, use_notification::use_notification, use_our_navigator::use_our_navigator, + use_timestamp::use_timestamp, use_tooltip::use_tooltip, }, - middlewares::is_dao_owner::is_dao_owner, + middlewares::{is_chain_available::is_chain_available, is_dao_owner::is_dao_owner}, }; +use dioxus::prelude::*; +use dioxus_std::{i18n::use_i18, translate}; +use futures_util::StreamExt; static SKIP: usize = 7; @@ -28,15 +30,15 @@ pub fn Explore() -> Element { let nav = use_our_navigator(); let mut communities = use_communities(); let mut notification = use_notification(); + let accounts = use_accounts(); + let timestamp = use_timestamp(); let mut current_page = use_signal::(|| 1); let mut search_word = use_signal::(|| String::new()); - let tab_items = vec![ - TabItem { - k: String::from("all"), - value: translate!(i18, "dashboard.tabs.all"), - }, - ]; + let tab_items = vec![TabItem { + k: String::from("all"), + value: translate!(i18, "dashboard.tabs.all"), + }]; let tab_value = use_signal::(|| String::from("all")); let mut filter_name = use_signal::>(|| None); @@ -58,7 +60,7 @@ pub fn Explore() -> Element { let dynamic_two = translate!(i18, "dynamic_text.dynamic_two"); let dynamic_three = translate!(i18, "dynamic_text.dynamic_three"); - let words = vec!(dynamic_one, dynamic_two, dynamic_three); + let words = vec![dynamic_one, dynamic_two, dynamic_three]; rsx! { div { class: "dashboard grid-main", @@ -98,7 +100,13 @@ pub fn Explore() -> Element { ), on_click: move |_| { tooltip.hide(); - nav.push(vec![Box::new(is_dao_owner())], "/onboarding"); + nav.push( + vec![ + Box::new(is_chain_available(i18, timestamp, notification)), + Box::new(is_dao_owner(i18, accounts, notification)), + ], + "/onboarding", + ); } } } @@ -190,10 +198,10 @@ pub fn Explore() -> Element { h3 { class: "card__title", {translate!(i18, "dashboard.cta_cards.create.title_part_one")}, span { - DynamicText { words }, - }, + DynamicText { words } + } {translate!(i18, "dashboard.cta_cards.create.title_part_two")} - }, + } } p { class: "card__description", { translate!(i18, @@ -222,7 +230,13 @@ pub fn Explore() -> Element { ), on_click: move |_| { tooltip.hide(); - nav.push(vec![Box::new(is_dao_owner())], "/onboarding"); + nav.push( + vec![ + Box::new(is_chain_available(i18, timestamp, notification)), + Box::new(is_dao_owner(i18, accounts, notification)), + ], + "/onboarding", + ); } } } diff --git a/src/pages/initiatives.rs b/src/pages/initiatives.rs index 50f98ac..8341455 100644 --- a/src/pages/initiatives.rs +++ b/src/pages/initiatives.rs @@ -209,13 +209,7 @@ pub fn Initiatives(id: u16) -> Element { p { class: "card__description", "" } div { class: "card__metrics", span { class: "card__metric", - Icon { - icon: CircleCheck, - height: 16, - width: 16, - stroke_width: 2, - stroke: "var(--text-primary)" - } + Icon { icon: CircleCheck, height: 16, width: 16, fill: "var(--text-primary)" } small { "{initiative.ongoing.tally.ayes} Aye" } } span { class: "card__metric", diff --git a/src/pages/login.rs b/src/pages/login.rs new file mode 100644 index 0000000..5e33b3c --- /dev/null +++ b/src/pages/login.rs @@ -0,0 +1,192 @@ +use dioxus::prelude::*; +use dioxus_std::{i18n::use_i18, translate}; + +use crate::{ + components::{ + atoms::{ + button::Variant, dropdown::ElementSize, AccountButton, Button, + CircleCheck, Dropdown, Icon, Polkadot, VirtoLogo, + }, + molecules::header::set_signer, + }, + hooks::{ + use_accounts::use_accounts, + use_connect_wallet::{use_connect_wallet, PjsError}, + use_notification::use_notification, + use_our_navigator::use_our_navigator, + use_session::{use_session, UserSession}, + }, +}; +use futures_util::{StreamExt, TryFutureExt}; + +#[component] +pub fn Login() -> Element { + let i18 = use_i18(); + let mut notification = use_notification(); + let mut accounts = use_accounts(); + let mut session = use_session(); + let mut connect_handled = use_signal(|| false); + let nav = use_our_navigator(); + + let mut items = vec![]; + for account in accounts.get().into_iter() { + let address = account.address(); + + items.push(rsx!( + AccountButton { title: account.name(), description: address.clone(), on_click: move |_| {} } + )) + } + + let on_handle_account = use_coroutine(move |mut rx: UnboundedReceiver| async move { + while let Some(event) = rx.next().await { + let account = &accounts.get()[event as usize]; + + let Ok(serialized_session) = serde_json::to_string(&UserSession { + name: account.name(), + address: account.address(), + account_id: event, + }) else { + return notification.handle_error(&translate!(i18, "errors.session.persist")); + }; + + if let Err(e) = session.persist_session_file(&serialized_session) { + log::warn!("Failed to persist session {:?}", e) + }; + if let Err(e) = session.update_account(event) { + log::warn!("Failed to update account {:?}", e) + }; + + log::info!("{:?}", account); + accounts.set_account(Some(account.clone())); + set_signer(account.address().clone()); + + nav.push(vec![], "/"); + } + }); + + use_coroutine(move |_: UnboundedReceiver<()>| async move { + if session.get().is_some() { + nav.push(vec![], "/") + } + }); + + use_before_render(move || { + + }); + + rsx! { + div { class: "page page--onboarding", + div { class: "login", + div { class: "login__container", + div { class: "login__info__wrapper", + div { class: "login__head", + Icon { + icon: VirtoLogo, + height: 64, + width: 64, + stroke_width: 1, + fill: "var(--color-lavanda-400)" + } + div { class: "login__welcome", "Welcome to" } + div { class: "login__name", "VIRTO" } + } + div { class: "login__info", + p { class: "login__info__description", + "Explore local projects and Initiatives that are making an impact" + } + ul { class: "login__info__opportunities", + li { class: "icon-text", + Icon { + icon: CircleCheck, + height: 36, + width: 36, + fill: "var(--state-primary-active)" + } + span { class: "icon-text__title", "Connect with others around you" } + } + li { class: "icon-text", + Icon { + icon: CircleCheck, + height: 36, + width: 36, + fill: "var(--state-primary-active)" + } + span { class: "icon-text__title", + "Show your work, learn from others" + } + } + li { class: "icon-text", + Icon { + icon: CircleCheck, + height: 36, + width: 36, + fill: "var(--state-primary-active)" + } + span { class: "icon-text__title", + "Find new opportunities to make an impact." + } + } + } + } + } + } + div { class: "login__form", + div { class: "login__form__wrapper", + div { class: "login__form__head", + h3 { class: "login__form__title", "Login" } + } + div { class: "login__form__cta", + if !connect_handled() { + Button { + text: translate!(i18, "header.cta.connect"), + status: None, + variant: Variant::Secondary, + right_icon: rsx!( + Icon { icon : Polkadot, height : 20, width : 20, fill : "var(--text-primary)" } + ), + on_click: move |_| { + spawn( + async move { + use_connect_wallet().await?; + connect_handled.toggle(); + Ok::<(), PjsError>(()) + } + .unwrap_or_else(move |e: PjsError| { + match e { + PjsError::ConnectionFailed => { + notification + .handle_error( + &translate!(i18, "errors.wallet.connection_failed"), + ) + } + PjsError::AccountsNotFound => { + notification + .handle_error( + &translate!(i18, "errors.wallet.accounts_not_found"), + ); + } + }; + }), + ); + } + } + } else { + Dropdown { + class: "header__wallet dropdown--left".to_string(), + value: None, + size: ElementSize::Big, + placeholder: translate!(i18, "header.cta.account"), + default: None, + on_change: move |event: usize| { + on_handle_account.send(event as u8); + }, + body: items + } + } + } + } + } + } + } + } +} diff --git a/src/pages/onboarding.rs b/src/pages/onboarding.rs index 9d4ff51..df8d34a 100644 --- a/src/pages/onboarding.rs +++ b/src/pages/onboarding.rs @@ -1,17 +1,12 @@ -use dioxus::prelude::*; -use dioxus_std::{i18n::use_i18, translate}; -use futures_util::TryFutureExt; -use gloo::utils::format::JsValueSerdeExt; -use serde::Serialize; use crate::{ components::{ atoms::{ - button::Variant, dropdown::ElementSize, ArrowLeft, ArrowRight, Button, Icon, - VirtoLogo, + button::Variant, dropdown::ElementSize, ArrowLeft, ArrowRight, Button, Icon, VirtoLogo, }, molecules::{OnboardingBasics, OnboardingInvite, OnboardingManagement}, }, hooks::{ + use_accounts::use_accounts, use_attach::use_attach, use_notification::{ use_notification, NotificationHandle, NotificationHandler, NotificationItem, @@ -20,10 +15,17 @@ use crate::{ use_onboard::use_onboard, use_our_navigator::use_our_navigator, use_spaces_client::use_spaces_client, + use_timestamp::use_timestamp, use_tooltip::{use_tooltip, TooltipItem}, }, + middlewares::is_chain_available::is_chain_available, services::{bot::types::CommunitySpace, kreivo::community_track::tracksIds}, }; +use dioxus::prelude::*; +use dioxus_std::{i18n::use_i18, translate}; +use futures_util::TryFutureExt; +use gloo::utils::format::JsValueSerdeExt; +use serde::Serialize; use serde_json::{to_value, Error}; use wasm_bindgen::prelude::*; #[derive(Clone, Debug)] @@ -65,12 +67,14 @@ extern "C" { #[component] pub fn Onboarding() -> Element { let i18 = use_i18(); + let accounts = use_accounts(); let mut onboard = use_onboard(); let mut attach = use_attach(); let mut tooltip = use_tooltip(); let mut notification = use_notification(); let spaces_client = use_spaces_client(); let nav = use_our_navigator(); + let timestamp = use_timestamp(); let to_pay = consume_context::>(); @@ -82,6 +86,15 @@ pub fn Onboarding() -> Element { onboard.default(); }); use_drop(move || attach.reset()); + use_coroutine(move |_: UnboundedReceiver<()>| async move { + if accounts.is_active_account_an_admin() { + nav.push(vec![], "/"); + }; + + if let Err(_) = is_chain_available(i18, timestamp, notification)() { + nav.push(vec![], "/"); + }; + }); rsx! { div { class: "page page--onboarding", div { class: "row", diff --git a/src/pages/route.rs b/src/pages/route.rs index b27e3bd..5e46bce 100644 --- a/src/pages/route.rs +++ b/src/pages/route.rs @@ -2,9 +2,9 @@ use dioxus::prelude::*; use crate::{ layouts::{authenticated::Authenticated, onboard::Onboard}, pages::{ - dashboard::Dashboard, explore::Explore, initiative::Initiative, - initiatives::Initiatives, not_found::PageNotFound, onboarding::Onboarding, - vote::Vote, + account::Account, dashboard::Dashboard, explore::Explore, initiative::Initiative, + initiatives::Initiatives, login::Login, not_found::PageNotFound, onboarding::Onboarding, + vote::Vote, withdraw::Withdraw }, }; #[derive(Clone, Routable, Debug, PartialEq)] @@ -12,23 +12,29 @@ use crate::{ pub enum Route { #[route("/onboarding")] Onboarding {}, + #[route("/login")] + Login {}, #[layout(Authenticated)] - #[route("/")] - Dashboard {}, - #[layout(Onboard)] - #[route("/explore")] - Explore {}, - #[nest("/dao")] - #[nest("/:id")] - #[route("/initiatives")] - Initiatives { id: u16 }, - #[route("/initiative")] - Initiative { id: u16 }, - #[route("/vote/:initiativeid")] - Vote { id: u16, initiativeid: u16 }, - #[end_nest] - #[end_nest] - #[end_layout] + #[route("/")] + Dashboard {}, + #[route("/account")] + Account {}, + #[route("/withdraw")] + Withdraw {}, + #[layout(Onboard)] + #[route("/explore")] + Explore {}, + #[nest("/dao")] + #[nest("/:id")] + #[route("/initiatives")] + Initiatives {id: u16}, + #[route("/initiative")] + Initiative {id: u16}, + #[route("/vote/:initiativeid")] + Vote {id: u16, initiativeid: u16}, + #[end_nest] + #[end_nest] + #[end_layout] #[end_layout] #[route("/:..route")] PageNotFound { route: Vec }, diff --git a/src/pages/vote.rs b/src/pages/vote.rs index 3fe5017..a99076a 100644 --- a/src/pages/vote.rs +++ b/src/pages/vote.rs @@ -317,18 +317,6 @@ pub fn Vote(id: u16, initiativeid: u16) -> Element { } ) } - { let status = if - initiative_wrapper.ongoing.in_queue | initiative_wrapper.ongoing.deciding - .is_none() { ProposalStatus::QUEUE } else { ProposalStatus::VOTING }; let - (badge_title, badge_color) = match status { ProposalStatus::APPROVED => - (translate!(i18, "governance.description.details.status.options.approved"), - "badge--green-dark"), ProposalStatus::REJECTED => (translate!(i18, - "governance.description.details.status.options.rejected"), "badge--red-dark"), - ProposalStatus::VOTING => (translate!(i18, - "governance.description.details.status.options.voting"), "badge--lavanda-dark"), - ProposalStatus::QUEUE => (translate!(i18, - "governance.description.details.status.options.queue"), "badge--blue-light"), }; - rsx!(Badge { text : badge_title, class : badge_color.to_string() }) } } div { { @@ -392,33 +380,28 @@ pub fn Vote(id: u16, initiativeid: u16) -> Element { "Explain that this is a dynamic voting, and thresholds might change." } } - if show_vote() { - if can_vote() { - div { class: "row", - Button { - class: "vote-cta", - text: translate!(i18, "governance.description.voting.cta.for"), - size: ElementSize::Medium, - variant: Variant::Secondary, - on_click: move |_| { handle_vote(true) }, - status: None, - left_icon: rsx!( - Icon { icon : CircleCheck, height : 16, width : 16, stroke_width : 2, stroke : - "#56C95F" } - ) - } - Button { - class: "vote-cta", - text: translate!(i18, "governance.description.voting.cta.against"), - size: ElementSize::Medium, - variant: Variant::Secondary, - on_click: move |_| { handle_vote(false) }, - status: None, - left_icon: rsx!( - Icon { icon : StopSign, height : 16, width : 16, stroke_width : 2, stroke : - "#f44336bd" } - ) - } + if show_vote() && can_vote() { + div { class: "row", + Button { + class: "vote-cta", + text: translate!(i18, "governance.description.voting.cta.for"), + size: ElementSize::Medium, + variant: Variant::Secondary, + on_click: move |_| { handle_vote(true) }, + status: None, + left_icon: rsx!(Icon { icon : CircleCheck, height : 16, width : 16, fill : "#56C95F" }) + } + Button { + class: "vote-cta", + text: translate!(i18, "governance.description.voting.cta.against"), + size: ElementSize::Medium, + variant: Variant::Secondary, + on_click: move |_| { handle_vote(false) }, + status: None, + left_icon: rsx!( + Icon { icon : StopSign, height : 16, width : 16, stroke_width : 2, stroke : + "#f44336bd" } + ) } } } @@ -451,7 +434,7 @@ pub fn Vote(id: u16, initiativeid: u16) -> Element { if show_vote() { div { div { class: "votes-counter votes-counter--for", - Icon { icon: CircleCheck, height: 16, width: 16, stroke_width: 2, stroke: "#56C95F" } + Icon { icon: CircleCheck, height: 16, width: 16, stroke_width: 2, fill: "#56C95F" } p { class: "votes-counter__total", "{votes_statistics().aye} " {translate!(i18, "governance.description.voting.votes")} diff --git a/src/pages/withdraw.rs b/src/pages/withdraw.rs new file mode 100644 index 0000000..7399990 --- /dev/null +++ b/src/pages/withdraw.rs @@ -0,0 +1,333 @@ +use std::str::FromStr; + +use dioxus::prelude::*; +use dioxus_std::{i18n::use_i18, translate}; +use futures_util::{StreamExt, TryFutureExt}; + +use crate::{ + components::atoms::{ + dropdown::{DropdownItem, ElementSize}, + AccountButton, BankCardLine, Button, CheckboxCard, Dropdown, Icon, Input, KusamaLogo, + PaymentMethod, PaypalLogo, PolygonLogo, Tab, Title, + }, + hooks::{ + use_accounts::use_accounts, + use_notification::use_notification, + use_our_navigator::use_our_navigator, + use_tooltip::{use_tooltip, TooltipItem}, + use_withdraw::use_withdraw, + }, + pages::onboarding::convert_to_jsvalue, +}; +use wasm_bindgen::prelude::*; + +pub enum PaymentMethods { + Card, + Paypal, + PSE, + KUSAMA, + ETH, + None, +} + +#[derive(PartialEq)] +pub enum WithdrawKreivoTabs { + Accounts, + Wallet, +} + +#[wasm_bindgen] +extern "C" { + #[wasm_bindgen(catch, js_namespace = window, js_name = topupThenWithdraw)] + async fn topup_then_withdraw(dest: JsValue, amount: u64) -> Result; +} + +#[component] +pub fn Withdraw() -> Element { + let i18 = use_i18(); + let mut withdraw = use_withdraw(); + + let mut payment_selected = use_signal(|| PaymentMethods::None); + + let accounts = use_accounts(); + let mut notification = use_notification(); + let mut tooltip = use_tooltip(); + let nav = use_our_navigator(); + + let mut tab_value = use_signal(|| WithdrawKreivoTabs::Accounts); + + let mut dropdown_value = use_signal::>(|| None); + + let mut items = vec![]; + for account in accounts.get().into_iter() { + let address = account.address(); + + items.push(rsx!( + AccountButton { title: account.name(), description: address.clone(), on_click: move |_| {} } + )) + } + + let on_handle_account = use_coroutine(move |mut rx: UnboundedReceiver| async move { + while let Some(event) = rx.next().await { + let account = &accounts.get()[event as usize]; + + let value = Some(DropdownItem { + key: account.address().clone(), + value: account.name(), + }); + + dropdown_value.set(value); + + withdraw + .withdraw_mut() + .with_mut(|w| w.address = account.address()) + } + }); + + use_before_render(move || { + withdraw.default(); + }); + + rsx!( + div { class: "page--initiative", + div { class: "payment__form", + div { class: "form__wrapper", + div { class: "form__title", + span { class: "label", "Define the withdraw method" } + Title { text: "Pick a Method" } + } + div { class: "row withdraw__row", + div { class: "summary summary--form", + div { class: "row withdraw__row", + div { class: "summary__wrapper", + h4 { class: "summary__subtitle", "Methods" } + div { class: "payment__methods", + CheckboxCard { + id: "a".to_string(), + name: String::from("management"), + checked: matches!(*payment_selected.read(), PaymentMethods::KUSAMA), + class: "checkbox-card--payment", + body: rsx!( + PaymentMethod { title : translate!(i18, "withdraw.payment.methods.kusama.title"), + fee : translate!(i18, "withdraw.payment.methods.kusama.fee"), icon : rsx!(Icon { + icon : KusamaLogo, height : 20, width : 20, fill : "var(--fill-600)" }), } + ), + on_change: move |_| { + payment_selected.set(PaymentMethods::KUSAMA); + } + } + CheckboxCard { + id: "a".to_string(), + name: String::from("management"), + checked: matches!(*payment_selected.read(), PaymentMethods::Card), + soon: true, + class: "checkbox-card--payment", + body: rsx!( + PaymentMethod { title : translate!(i18, "withdraw.payment.methods.card.title"), + fee : translate!(i18, "withdraw.payment.methods.card.fee", fee : 5), icon : + rsx!(Icon { icon : BankCardLine, height : 20, width : 20, fill : + "var(--fill-600)" }), } + ), + on_change: move |_| { + payment_selected.set(PaymentMethods::Card); + } + } + CheckboxCard { + id: "a".to_string(), + name: String::from("management"), + checked: matches!(*payment_selected.read(), PaymentMethods::Paypal), + soon: true, + class: "checkbox-card--payment", + body: rsx!( + PaymentMethod { title : translate!(i18, "withdraw.payment.methods.paypal.title"), + fee : translate!(i18, "withdraw.payment.methods.paypal.fee", fee : 5), icon : + rsx!(Icon { icon : PaypalLogo, height : 20, width : 20, fill : "var(--fill-600)" + }), } + ), + on_change: move |_| { + payment_selected.set(PaymentMethods::Paypal); + } + } + CheckboxCard { + id: "a".to_string(), + name: String::from("management"), + checked: matches!(*payment_selected.read(), PaymentMethods::PSE), + soon: true, + class: "checkbox-card--payment", + body: rsx!( + PaymentMethod { title : translate!(i18, "withdraw.payment.methods.pse.title"), + fee : translate!(i18, "withdraw.payment.methods.pse.fee", fee : 3), icon : + rsx!(Icon { icon : PaypalLogo, height : 20, width : 20, fill : "var(--fill-600)" + }), } + ), + on_change: move |_| { + payment_selected.set(PaymentMethods::PSE); + } + } + CheckboxCard { + id: "a".to_string(), + name: String::from("management"), + checked: matches!(*payment_selected.read(), PaymentMethods::ETH), + soon: true, + class: "checkbox-card--payment", + body: rsx!( + PaymentMethod { title : translate!(i18, "withdraw.payment.methods.eth.title"), + fee : translate!(i18, "withdraw.payment.methods.eth.fee"), icon : rsx!(Icon { + icon : PolygonLogo, height : 20, width : 20, fill : "var(--fill-600)" }), } + ), + on_change: move |_| { + payment_selected.set(PaymentMethods::ETH); + } + } + } + } + if !matches!(*payment_selected.read(), PaymentMethods::None) { + div { class: "summary__wrapper", + h4 { class: "summary__subtitle", "Withdraw Address" } + div { class: "withdraw__form__inputs", + div { class: "account__options", + Tab { + text: "My accounts", + is_active: if *tab_value.read() == WithdrawKreivoTabs::Accounts { true } else { false }, + on_click: move |_| { + tab_value.set(WithdrawKreivoTabs::Accounts); + } + } + Tab { + text: "Others", + is_active: if *tab_value.read() == WithdrawKreivoTabs::Wallet { true } else { false }, + on_click: move |_| { + tab_value.set(WithdrawKreivoTabs::Wallet); + } + } + } + div { class: "widthdraw__data", + match *tab_value.read() { + WithdrawKreivoTabs::Accounts => rsx!{ + Dropdown { + class: "payment__wallet dropdown--left".to_string(), + value: dropdown_value(), + label: "Account", + size: ElementSize::Medium, + placeholder: translate!(i18, "header.cta.account"), + default: None, + on_change: move |event: usize| { + on_handle_account.send(event as u8); + }, + body: items + } + }, + WithdrawKreivoTabs::Wallet => rsx!{ + Input { + message: withdraw.get_withdraw().address, + placeholder: "5HBVkGX...", + label: "Address", + error: None, + on_input: move |event: Event| { + dropdown_value.set(None); + withdraw + .withdraw_mut() + .with_mut(|w| w.address = event.value()); + }, + on_keypress: move |_| {}, + on_click: move |_| {}, + } + }, + }, + Input { + message: withdraw.get_withdraw().amount, + placeholder: "Amount", + label: "Amount", + error: None, + right_text: { rsx!(span { class : "input--right__text", "KSM" }) }, + on_input: move |event: Event| { + withdraw + .withdraw_mut() + .with_mut(|w| { + w.amount = event.value(); + }) + }, + on_keypress: move |_| {}, + on_click: move |_| {} + } + } + } + } + } + } + } + div { class: "summary", + h4 { class: "summary__subtitle", "Description" } + hr { class: "divider" } + section { class: "summary__item summary__item--description", + span { class: "summary__item__label--subtitle", + "From Kreivo - To Kusama" + } + p { class: "summary__item__description", + "You are going to withdraw your KSM from Kreivo to Kusama" + } + } + + Button { + text: "Confirm withdraw", + disabled: !withdraw.is_form_complete(), + size: ElementSize::Medium, + on_click: move |_| { + spawn( + async move { + tooltip + .handle_tooltip(TooltipItem { + title: "Withdraw in course".to_string(), + body: "This could take a moment".to_string(), + show: true, + }); + let address = sp_core::sr25519::Public::from_str( + &withdraw.get_withdraw().address, + ) + .map_err(|e| { + log::warn!("Not found public address: {}", e); + translate!(i18, "errors.wallet.account_address") + })?; + let hex_address = hex::encode(address.0); + let destination_address = convert_to_jsvalue( + &format!("0x{}", hex_address), + ) + .map_err(|_| { + log::warn!("Malformed dest account"); + String::from("Invalid address destination") + })?; + let amount = withdraw + .get_withdraw() + .amount + .parse::() + .map_err(|_| { + log::warn!("Malformed amount"); + String::from("Invalid amount to withdraw") + })?; + let amount = (amount * 1_000_000_000_000.0) as u64; + topup_then_withdraw(destination_address, amount) + .await + .map_err(|e| { + log::warn!("Withdraw failed {:?}", e); + String::from("Withdraw Failed") + })?; + tooltip.hide(); + notification.handle_success("Your withdraw was completed"); + nav.push(vec![], "/account"); + Ok::<(), String>(()) + } + .unwrap_or_else(move |e: String| { + tooltip.hide(); + notification.handle_error(&e); + }), + ); + }, + status: None + } + } + } + } + } + } + ) +} diff --git a/src/services/kusama/balances.rs b/src/services/kusama/balances.rs new file mode 100644 index 0000000..e5b3b1f --- /dev/null +++ b/src/services/kusama/balances.rs @@ -0,0 +1,22 @@ +use sube::{sube, Response}; + +use crate::services::kreivo::{balances::AccountInfo, community_track::ChainStateError}; + +pub async fn account(account: &str) -> Result { + let query = format!("wss://kusama-rpc.dwellir.com/system/account/{}", account); + + log::info!("query: {:#?}", query); + let response = sube!(&query).await.map_err(|_| { + ChainStateError::FailedQuery + })?; + + let Response::Value(value) = response else { + return Err(ChainStateError::InternalError); + }; + + let value = serde_json::to_value(&value).map_err(|_| ChainStateError::FailedDecode)?; + let account_info = + serde_json::from_value::(value).map_err(|_| ChainStateError::FailedDecode)?; + + Ok(account_info) +} diff --git a/src/services/market/client.rs b/src/services/market/client.rs new file mode 100644 index 0000000..252ef97 --- /dev/null +++ b/src/services/market/client.rs @@ -0,0 +1,32 @@ +use super::types::{Response, Tokens}; + +#[derive(Clone)] +pub struct MarketClient { + base_path: String, + client: reqwest::Client, +} + +impl MarketClient { + pub fn new(base_path: &str) -> Self { + Self { + base_path: base_path.to_string(), + client: reqwest::Client::new(), + } + } + + pub async fn get_price_by_token(&self, token: Tokens) -> Result { + let path = format!( + "{}/his/coin/trend?code={}&type=s", + self.base_path, + token.name(), + ); + + let response = self.client.get(path.clone()).send().await?.text().await?; + let response = + serde_json::from_str::(&response).expect("should be a json response"); + + let price = response.get_price(); + + Ok(price) + } +} diff --git a/src/services/market/types.rs b/src/services/market/types.rs new file mode 100644 index 0000000..a42ad65 --- /dev/null +++ b/src/services/market/types.rs @@ -0,0 +1,32 @@ +use serde::{Deserialize, Serialize}; + +#[derive(Debug, Serialize, Deserialize)] +pub struct Response { + data: Vec>, + code: u16, + msg: String, +} + +pub enum Error { + PriceNotFound, +} + +impl Response { + pub fn get_price(&self) -> f64 { + let data = self.data.get(self.data.len() - 1).expect("Should get data"); + let price = *data.get(1).expect("Should get price"); + price + } +} + +pub enum Tokens { + KSM, +} + +impl Tokens { + pub fn name(&self) -> &str { + match self { + Tokens::KSM => "kusama", + } + } +}