From a591bb526d83bdd2bfd1323748290d88c8358b60 Mon Sep 17 00:00:00 2001 From: ghassmo Date: Sat, 8 Jan 2022 04:08:45 +0400 Subject: [PATCH] WIP clean and refactoring according to issue #35 --- Cargo.lock | 2688 +---------------- Cargo.toml | 36 +- bin/cashier/.gitignore | 3 + bin/cashier/Cargo.toml | 61 + {src/bin => bin/cashier/example}/eth.rs | 26 +- bin/cashier/src/lib.rs | 1 + .../cashierd.rs => bin/cashier/src/main.rs | 289 +- {src => bin/cashier/src}/service/bridge.rs | 2 +- {src => bin/cashier/src}/service/btc.rs | 84 +- {src => bin/cashier/src}/service/eth.rs | 107 +- bin/cashier/src/service/mod.rs | 16 + {src => bin/cashier/src}/service/sol.rs | 67 +- bin/drk/.gitignore | 3 + bin/drk/Cargo.toml | 25 + bin/drk/src/main.rs | 3 + bin/gateway/.gitignore | 3 + bin/gateway/Cargo.toml | 29 + .../gatewayd.rs => bin/gateway/src/main.rs | 7 +- src/bin/darkfid.rs | 8 +- src/bin/darkpulse.rs | 151 - src/bin/drk.rs | 379 --- src/bin/tree.rs | 2 +- src/bin/tui_ex.rs | 2 +- src/bin/tx.rs | 2 +- src/bin/vm.rs | 2 +- src/bin/vm_burn.rs | 2 +- src/cli/cli_config.rs | 11 - src/cli/mod.rs | 1 + src/darkpulse/aes.rs | 53 - src/darkpulse/channel.rs | 89 - src/darkpulse/cli_option.rs | 176 -- src/darkpulse/control_message.rs | 64 - src/darkpulse/dbsql.rs | 156 - src/darkpulse/mod.rs | 21 - src/darkpulse/net/messages.rs | 104 - src/darkpulse/net/mod.rs | 2 - src/darkpulse/net/protocol_slab.rs | 175 -- src/darkpulse/net/protocols/mod.rs | 1 - src/darkpulse/slabs_manager.rs | 119 - src/darkpulse/utility.rs | 164 - src/lib.rs | 3 - src/service/mod.rs | 16 - src/util/mod.rs | 2 +- src/util/path.rs | 19 +- src/wallet/cashierdb.rs | 6 +- src/wallet/walletdb.rs | 6 +- 46 files changed, 579 insertions(+), 4607 deletions(-) create mode 100644 bin/cashier/.gitignore create mode 100644 bin/cashier/Cargo.toml rename {src/bin => bin/cashier/example}/eth.rs (83%) create mode 100644 bin/cashier/src/lib.rs rename src/bin/cashierd.rs => bin/cashier/src/main.rs (71%) rename {src => bin/cashier/src}/service/bridge.rs (99%) rename {src => bin/cashier/src}/service/btc.rs (91%) rename {src => bin/cashier/src}/service/eth.rs (85%) create mode 100644 bin/cashier/src/service/mod.rs rename {src => bin/cashier/src}/service/sol.rs (91%) create mode 100644 bin/drk/.gitignore create mode 100644 bin/drk/Cargo.toml create mode 100644 bin/drk/src/main.rs create mode 100644 bin/gateway/.gitignore create mode 100644 bin/gateway/Cargo.toml rename src/bin/gatewayd.rs => bin/gateway/src/main.rs (95%) delete mode 100644 src/bin/darkpulse.rs delete mode 100644 src/bin/drk.rs delete mode 100644 src/darkpulse/aes.rs delete mode 100644 src/darkpulse/channel.rs delete mode 100644 src/darkpulse/cli_option.rs delete mode 100644 src/darkpulse/control_message.rs delete mode 100644 src/darkpulse/dbsql.rs delete mode 100644 src/darkpulse/mod.rs delete mode 100644 src/darkpulse/net/messages.rs delete mode 100644 src/darkpulse/net/mod.rs delete mode 100644 src/darkpulse/net/protocol_slab.rs delete mode 100644 src/darkpulse/net/protocols/mod.rs delete mode 100644 src/darkpulse/slabs_manager.rs delete mode 100644 src/darkpulse/utility.rs diff --git a/Cargo.lock b/Cargo.lock index 109ee47fa..5b3125ac4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,16 +2,6 @@ # 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.17.0" @@ -33,41 +23,6 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aae1277d39aeec15cb388266ecc24b11c80469deae6067e17a1a7aa9e5c1f234" -[[package]] -name = "aead" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b613b8e1e3cf911a086f53f03bf286f52fd7a7258e4fa606f0ef220d39d8877" -dependencies = [ - "generic-array", -] - -[[package]] -name = "aes" -version = "0.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e8b47f52ea9bae42228d07ec09eb676433d7c4ed1ebdf0f1d1c29ed446f1ab8" -dependencies = [ - "cfg-if 1.0.0", - "cipher", - "cpufeatures", - "opaque-debug", -] - -[[package]] -name = "aes-gcm" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df5f85a83a7d8b0442b6aa7b504b8212c1733da07b98aae43d4bc21b2cb3cdf6" -dependencies = [ - "aead", - "aes", - "cipher", - "ctr", - "ghash", - "subtle", -] - [[package]] name = "ahash" version = "0.3.8" @@ -77,12 +32,6 @@ dependencies = [ "const-random", ] -[[package]] -name = "ahash" -version = "0.4.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "739f4a8db6605981345c5654f3a85b056ce52f37a39d34da03f25bf2151ea16e" - [[package]] name = "ahash" version = "0.7.6" @@ -103,21 +52,6 @@ dependencies = [ "memchr", ] -[[package]] -name = "aliasable" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "250f629c0161ad8107cf89319e990051fae62832fd343083bea452d93e2205fd" - -[[package]] -name = "ansi_term" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" -dependencies = [ - "winapi 0.3.9", -] - [[package]] name = "anyhow" version = "1.0.52" @@ -142,20 +76,14 @@ version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6" -[[package]] -name = "assert_matches" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b34d609dfbaf33d6889b2b7106d3ca345eacad44200913df5ba02bfd31d2ba9" - [[package]] name = "async-attributes" version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a3203e79f4dd9bdda415ed03cf14dae5a2bf775c683a00f94e9cd1faf0f596e5" dependencies = [ - "quote 1.0.14", - "syn 1.0.84", + "quote", + "syn", ] [[package]] @@ -226,7 +154,7 @@ dependencies = [ "slab", "socket2", "waker-fn", - "winapi 0.3.9", + "winapi", ] [[package]] @@ -296,7 +224,7 @@ dependencies = [ "libc", "once_cell", "signal-hook", - "winapi 0.3.9", + "winapi", ] [[package]] @@ -340,9 +268,9 @@ version = "0.1.52" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "061a7acccaa286c011ddc30970520b98fa40e00c9d644633fb26b5fc63a265e3" dependencies = [ - "proc-macro2 1.0.36", - "quote 1.0.14", - "syn 1.0.84", + "proc-macro2", + "quote", + "syn", ] [[package]] @@ -394,15 +322,9 @@ checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" dependencies = [ "hermit-abi", "libc", - "winapi 0.3.9", + "winapi", ] -[[package]] -name = "autocfg" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d49d90015b3c36167a20fe2810c5cd875ad504b39cff3d4eae7977e6b7c1cb2" - [[package]] name = "autocfg" version = "1.0.1" @@ -424,79 +346,12 @@ dependencies = [ "rustc-demangle", ] -[[package]] -name = "base32" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23ce669cd6c8588f79e15cf450314f9638f967fc5770ff1c7c1deb0925ea7cfa" - -[[package]] -name = "base64" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b25d992356d2eb0ed82172f5248873db5560c4721f564b13cb5193bda5e668e" -dependencies = [ - "byteorder", -] - -[[package]] -name = "base64" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3441f0f7b02788e948e47f457ca01f1d7e6d92c693bc132c22b087d3141c03ff" - [[package]] name = "base64" version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" -[[package]] -name = "base64-compat" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a8d4d2746f89841e49230dd26917df1876050f95abafafbe34f47cb534b88d7" -dependencies = [ - "byteorder", -] - -[[package]] -name = "bdk" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6ec4da3dbaa41bb6d6cffe40b113ea8651566da7f96beebe9c0e87fc92b9094" -dependencies = [ - "async-trait", - "bdk-macros", - "bitcoin", - "electrum-client", - "js-sys", - "log", - "miniscript", - "rand 0.7.3", - "serde", - "serde_json", - "sled", - "tokio", -] - -[[package]] -name = "bdk-macros" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81c1980e50ae23bb6efa9283ae8679d6ea2c6fa6a99fe62533f65f4a25a1a56c" -dependencies = [ - "proc-macro2 1.0.36", - "quote 1.0.14", - "syn 1.0.84", -] - -[[package]] -name = "bech32" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf9ff0bbfd639f15c74af777d81383cf53efb7c93613f6cab67c6c11e05bbf8b" - [[package]] name = "bigint" version = "4.4.3" @@ -527,8 +382,8 @@ dependencies = [ "lazy_static", "lazycell", "peeking_take_while", - "proc-macro2 1.0.36", - "quote 1.0.14", + "proc-macro2", + "quote", "regex", "rustc-hash", "shlex", @@ -549,28 +404,6 @@ version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" -[[package]] -name = "bitcoin" -version = "0.27.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a41df6ad9642c5c15ae312dd3d074de38fd3eb7cc87ad4ce10f90292a83fe4d" -dependencies = [ - "base64-compat", - "bech32", - "bitcoin_hashes", - "secp256k1", - "serde", -] - -[[package]] -name = "bitcoin_hashes" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "006cc91e1a1d99819bc5b8214be3555c1f0611b169f527a1fdc54ed1f2b745b0" -dependencies = [ - "serde", -] - [[package]] name = "bitflags" version = "1.3.2" @@ -611,37 +444,15 @@ dependencies = [ "constant_time_eq", ] -[[package]] -name = "blake3" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "526c210b4520e416420759af363083471656e819a75e831b8d2c9d5a584f2413" -dependencies = [ - "arrayref", - "arrayvec 0.7.2", - "cc", - "cfg-if 1.0.0", - "constant_time_eq", - "crypto-mac 0.11.1", - "digest", -] - [[package]] name = "block-buffer" version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" dependencies = [ - "block-padding", "generic-array", ] -[[package]] -name = "block-padding" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d696c370c750c948ada61c69a0ee2cbbb9c50b1019ddb86d9317157a99c2cae" - [[package]] name = "blocking" version = "1.1.0" @@ -667,51 +478,6 @@ dependencies = [ "subtle", ] -[[package]] -name = "borsh" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18dda7dc709193c0d86a1a51050a926dc3df1cf262ec46a23a25dba421ea1924" -dependencies = [ - "borsh-derive", - "hashbrown 0.9.1", -] - -[[package]] -name = "borsh-derive" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "684155372435f578c0fa1acd13ebbb182cc19d6b38b64ae7901da4393217d264" -dependencies = [ - "borsh-derive-internal", - "borsh-schema-derive-internal", - "proc-macro-crate 0.1.5", - "proc-macro2 1.0.36", - "syn 1.0.84", -] - -[[package]] -name = "borsh-derive-internal" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2102f62f8b6d3edeab871830782285b64cc1830168094db05c8e458f209bc5c3" -dependencies = [ - "proc-macro2 1.0.36", - "quote 1.0.14", - "syn 1.0.84", -] - -[[package]] -name = "borsh-schema-derive-internal" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "196c978c4c9b0b142d446ef3240690bf5a8a33497074a113ff9a337ccb750483" -dependencies = [ - "proc-macro2 1.0.36", - "quote 1.0.14", - "syn 1.0.84", -] - [[package]] name = "bs58" version = "0.4.0" @@ -736,35 +502,11 @@ version = "3.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f1e260c3a9040a7c19a12468758f4c16f31a81a1fe087482be9570ec864bb6c" -[[package]] -name = "bv" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8834bb1d8ee5dc048ee3124f2c7c1afcc6bc9aed03f11e9dfd8c69470a5db340" -dependencies = [ - "feature-probe", - "serde", -] - [[package]] name = "bytemuck" version = "1.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "439989e6b8c38d1b6570a384ef1e49c8848128f5a97f3914baef02920842712f" -dependencies = [ - "bytemuck_derive", -] - -[[package]] -name = "bytemuck_derive" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e215f8c2f9f79cb53c8335e687ffd07d5bfcb6fe5fc80723762d0be46e7cc54" -dependencies = [ - "proc-macro2 1.0.36", - "quote 1.0.14", - "syn 1.0.84", -] [[package]] name = "byteorder" @@ -778,44 +520,12 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c4872d67bab6358e59559027aa3b9157c53d9358c51423c17554809a8858e0f8" -[[package]] -name = "bzip2" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6afcd980b5f3a45017c57e57a2fcccbb351cc43a356ce117ef760ef8052b89b0" -dependencies = [ - "bzip2-sys", - "libc", -] - -[[package]] -name = "bzip2-sys" -version = "0.1.11+1.0.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "736a955f3fa7875102d57c82b8cac37ec45224a07fd32d58f9f7a186b6cd4cdc" -dependencies = [ - "cc", - "libc", - "pkg-config", -] - [[package]] name = "cache-padded" version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c1db59621ec70f09c5e9b597b220c7a2b43611f4710dc03ceb8748637775692c" -[[package]] -name = "caps" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61bf7211aad104ce2769ec05efcdfabf85ee84ac92461d142f22cf8badd0e54c" -dependencies = [ - "errno", - "libc", - "thiserror", -] - [[package]] name = "cc" version = "1.0.72" @@ -855,18 +565,8 @@ dependencies = [ "libc", "num-integer", "num-traits", - "serde", "time", - "winapi 0.3.9", -] - -[[package]] -name = "cipher" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ee52072ec15386f770805afd189a01c8841be8696bed250fa2f13c4c0d6dfb7" -dependencies = [ - "generic-array", + "winapi", ] [[package]] @@ -880,21 +580,6 @@ dependencies = [ "libloading", ] -[[package]] -name = "clap" -version = "2.34.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c" -dependencies = [ - "ansi_term", - "atty", - "bitflags", - "strsim 0.8.0", - "textwrap 0.11.0", - "unicode-width", - "vec_map", -] - [[package]] name = "clap" version = "3.0.1" @@ -909,7 +594,7 @@ dependencies = [ "os_str_bytes", "strsim 0.10.0", "termcolor", - "textwrap 0.14.2", + "textwrap", ] [[package]] @@ -920,18 +605,9 @@ checksum = "7cbcf660a32ad0eda4b11996d8761432f499034f6e685bc6072337db662c85f8" dependencies = [ "heck 0.4.0", "proc-macro-error", - "proc-macro2 1.0.36", - "quote 1.0.14", - "syn 1.0.84", -] - -[[package]] -name = "cloudabi" -version = "0.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f" -dependencies = [ - "bitflags", + "proc-macro2", + "quote", + "syn", ] [[package]] @@ -958,41 +634,6 @@ dependencies = [ "cache-padded", ] -[[package]] -name = "console" -version = "0.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a28b32d32ca44b70c3e4acd7db1babf555fa026e385fb95f18028f88848b3c31" -dependencies = [ - "encode_unicode", - "libc", - "once_cell", - "regex", - "terminal_size", - "unicode-width", - "winapi 0.3.9", -] - -[[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 1.0.0", - "wasm-bindgen", -] - -[[package]] -name = "console_log" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "501a375961cef1a0d44767200e66e4a559283097e91d0730b1d75dfb2f8a1494" -dependencies = [ - "log", - "web-sys", -] - [[package]] name = "const-random" version = "0.1.13" @@ -1169,7 +810,7 @@ version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "058ed274caafc1f60c4997b5fc07bf7dc7cca454af7c6e81edffe5f33f70dace" dependencies = [ - "autocfg 1.0.1", + "autocfg", "cfg-if 0.1.10", "crossbeam-utils 0.7.2", "lazy_static", @@ -1218,7 +859,7 @@ version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3c7c73a2d1e9fc0886a08b93e98eb643461230d5f1925e4036204d5f2e261a8" dependencies = [ - "autocfg 1.0.1", + "autocfg", "cfg-if 0.1.10", "lazy_static", ] @@ -1245,36 +886,6 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" -[[package]] -name = "crypto-mac" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b584a330336237c1eecd3e94266efb216c56ed91225d634cb2991c5f3fd1aeab" -dependencies = [ - "generic-array", - "subtle", -] - -[[package]] -name = "crypto-mac" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58bcd97a54c7ca5ce2f6eb16f6bede5b0ab5f0055fedc17d2f0b4466e21671ca" -dependencies = [ - "generic-array", - "subtle", -] - -[[package]] -name = "crypto-mac" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1d1a86f49236c215f271d40892d5fc950490551400b02ef360692c29815c714" -dependencies = [ - "generic-array", - "subtle", -] - [[package]] name = "crypto_api" version = "0.2.2" @@ -1318,37 +929,14 @@ version = "0.1.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ccc0a48a9b826acdf4028595adc9db92caea352f7af011a3034acd172a52a0aa" dependencies = [ - "quote 1.0.14", - "syn 1.0.84", -] - -[[package]] -name = "ctr" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "049bb91fb4aaf0e3c7efa6cd5ef877dbbbd15b39dad06d9948de4ec8a75761ea" -dependencies = [ - "cipher", -] - -[[package]] -name = "curve25519-dalek" -version = "3.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b9fdf9972b2bd6af2d913799d9ebc165ea4d2e65878e329d9c6b372c4491b61" -dependencies = [ - "byteorder", - "digest", - "rand_core 0.5.1", - "subtle", - "zeroize", + "quote", + "syn", ] [[package]] name = "darkfi" version = "0.2.0" dependencies = [ - "aes-gcm", "anyhow", "arrayvec 0.7.2", "async-channel", @@ -1357,14 +945,11 @@ dependencies = [ "async-std", "async-trait", "async-tungstenite", - "bdk", "bincode", - "bitcoin", "blake2b_simd 1.0.0", "bs58", "bytes", - "chrono", - "clap 3.0.1", + "clap", "crossbeam-channel 0.5.1", "crypto_api_chachapoly", "dirs 4.0.0", @@ -1374,10 +959,8 @@ dependencies = [ "group", "halo2", "halo2_gadgets", - "hash-db", "hex", "incrementalmerkletree", - "keccak-hasher", "lazy_static", "libc", "libsqlite3-sys", @@ -1390,8 +973,6 @@ dependencies = [ "rand 0.8.4", "ripemd160", "rocksdb", - "rusqlite", - "secp256k1", "serde", "serde_json", "sha2", @@ -1399,10 +980,6 @@ dependencies = [ "signal-hook-async-std", "simplelog", "smol", - "solana-client", - "solana-sdk", - "spl-associated-token-account", - "spl-token", "sqlx", "subtle", "termion", @@ -1431,10 +1008,10 @@ checksum = "f0c960ae2da4de88a91b2d920c2a7233b400bc33cb28453a2987822d8392519b" dependencies = [ "fnv", "ident_case", - "proc-macro2 1.0.36", - "quote 1.0.14", + "proc-macro2", + "quote", "strsim 0.9.3", - "syn 1.0.84", + "syn", ] [[package]] @@ -1444,8 +1021,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d9b5a2f4ac4969822c62224815d069952656cadc7084fdca9751e6d959189b72" dependencies = [ "darling_core", - "quote 1.0.14", - "syn 1.0.84", + "quote", + "syn", ] [[package]] @@ -1459,17 +1036,6 @@ dependencies = [ "num_cpus", ] -[[package]] -name = "dashmap" -version = "4.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e77a43b28d0668df09411cb0bc9a8c2adc40f9a048afe863e05fd43251e8e39c" -dependencies = [ - "cfg-if 1.0.0", - "num_cpus", - "rayon", -] - [[package]] name = "deflate" version = "0.8.6" @@ -1480,15 +1046,6 @@ dependencies = [ "byteorder", ] -[[package]] -name = "derivation-path" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "193388a8c8c75a490b604ff61775e236541b8975e98e5ca1f6ea97d122b7e2db" -dependencies = [ - "failure", -] - [[package]] name = "derive_builder" version = "0.9.0" @@ -1497,9 +1054,9 @@ checksum = "a2658621297f2cf68762a6f7dc0bb7e1ff2cfd6583daef8ee0fed6f7ec468ec0" dependencies = [ "darling", "derive_builder_core", - "proc-macro2 1.0.36", - "quote 1.0.14", - "syn 1.0.84", + "proc-macro2", + "quote", + "syn", ] [[package]] @@ -1509,21 +1066,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2791ea3e372c8495c0bc2033991d76b512cd799d07491fbd6890124db9458bef" dependencies = [ "darling", - "proc-macro2 1.0.36", - "quote 1.0.14", - "syn 1.0.84", -] - -[[package]] -name = "dialoguer" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61579ada4ec0c6031cfac3f86fdba0d195a7ebeb5e36693bd53cb5999a25beeb" -dependencies = [ - "console", - "lazy_static", - "tempfile", - "zeroize", + "proc-macro2", + "quote", + "syn", ] [[package]] @@ -1535,15 +1080,6 @@ dependencies = [ "generic-array", ] -[[package]] -name = "dir-diff" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2860407d7d7e2e004bb2128510ad9e8d669e76fa005ccf567977b5d71b8b4a0b" -dependencies = [ - "walkdir", -] - [[package]] name = "dirs" version = "1.0.5" @@ -1552,7 +1088,7 @@ checksum = "3fd78930633bd1c6e35c4b42b1df7b0cbc6bc191146e512bb3bedf243fcc3901" dependencies = [ "libc", "redox_users 0.3.5", - "winapi 0.3.9", + "winapi", ] [[package]] @@ -1582,7 +1118,7 @@ checksum = "03d86534ed367a67548dc68113a0f5db55432fdfbb6e6f9d77704397d95d5780" dependencies = [ "libc", "redox_users 0.4.0", - "winapi 0.3.9", + "winapi", ] [[package]] @@ -1593,30 +1129,7 @@ checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" dependencies = [ "libc", "redox_users 0.4.0", - "winapi 0.3.9", -] - -[[package]] -name = "dlopen" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71e80ad39f814a9abe68583cd50a2d45c8a67561c3361ab8da240587dda80937" -dependencies = [ - "dlopen_derive", - "lazy_static", - "libc", - "winapi 0.3.9", -] - -[[package]] -name = "dlopen_derive" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f236d9e1b1fbd81cea0f9cbdc8dcc7e8ebcd80e6659cd7cb2ad5f6c05946c581" -dependencies = [ - "libc", - "quote 0.6.13", - "syn 0.15.44", + "winapi", ] [[package]] @@ -1633,7 +1146,7 @@ checksum = "439a1c2ba5611ad3ed731280541d36d2e9c4ac5e7fb818a27b604bdc5a6aa65b" dependencies = [ "lazy_static", "libc", - "winapi 0.3.9", + "winapi", "wio", ] @@ -1643,79 +1156,18 @@ version = "3.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6907e25393cdcc1f4f3f513d9aac1e840eb1cc341a0fccb01171f7d14d10b946" -[[package]] -name = "ed25519" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74e1069e39f1454367eb2de793ed062fac4c35c2934b76a81d90dd9abcd28816" -dependencies = [ - "signature", -] - -[[package]] -name = "ed25519-dalek" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c762bae6dcaf24c4c84667b8579785430908723d5c889f469d76a41d59cc7a9d" -dependencies = [ - "curve25519-dalek", - "ed25519", - "rand 0.7.3", - "serde", - "sha2", - "zeroize", -] - -[[package]] -name = "ed25519-dalek-bip32" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "057f328f31294b5ab432e6c39642f54afd1531677d6d4ba2905932844cc242f3" -dependencies = [ - "derivation-path", - "ed25519-dalek", - "failure", - "hmac 0.9.0", - "sha2", -] - [[package]] name = "either" version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457" -[[package]] -name = "electrum-client" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edd12f125852d77980725243b2a8b3bea73cd4c7a22c33bc52b08b664c561dc7" -dependencies = [ - "bitcoin", - "log", - "rustls 0.16.0", - "serde", - "serde_json", - "socks", - "webpki 0.21.4", - "webpki-roots 0.19.0", -] - [[package]] name = "encode_unicode" version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f" -[[package]] -name = "encoding_rs" -version = "0.8.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7896dc8abb250ffdda33912550faa54c88ec8b998dec0b2c55ab224921ce11df" -dependencies = [ - "cfg-if 1.0.0", -] - [[package]] name = "enum-primitive-derive" version = "0.2.2" @@ -1723,42 +1175,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c375b9c5eadb68d0a6efee2999fef292f45854c3444c86f09d8ab086ba942b0e" dependencies = [ "num-traits", - "quote 1.0.14", - "syn 1.0.84", -] - -[[package]] -name = "env_logger" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b2cf0344971ee6c64c31be0d530793fba457d322dfec2810c453d0ef228f9c3" -dependencies = [ - "atty", - "humantime", - "log", - "regex", - "termcolor", -] - -[[package]] -name = "errno" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f639046355ee4f37944e44f60642c6f3a7efa3cf6b78c78a0d989a8ce6c396a1" -dependencies = [ - "errno-dragonfly", - "libc", - "winapi 0.3.9", -] - -[[package]] -name = "errno-dragonfly" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf" -dependencies = [ - "cc", - "libc", + "quote", + "syn", ] [[package]] @@ -1793,24 +1211,12 @@ version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aa4da3c766cd7a0db8242e326e9e4e081edd567072893ed320008189715366a4" dependencies = [ - "proc-macro2 1.0.36", - "quote 1.0.14", - "syn 1.0.84", + "proc-macro2", + "quote", + "syn", "synstructure", ] -[[package]] -name = "fallible-iterator" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7" - -[[package]] -name = "fallible-streaming-iterator" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7360491ce676a36bf9bb3c56c1aa791658183a54d2744120f27285738d90465a" - [[package]] name = "fastrand" version = "1.6.0" @@ -1820,12 +1226,6 @@ dependencies = [ "instant", ] -[[package]] -name = "feature-probe" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "835a3dc7d1ec9e75e2b5fb4ba75396837112d2060b03f7d43bc1897c7f7211da" - [[package]] name = "ff" version = "0.11.0" @@ -1837,30 +1237,6 @@ dependencies = [ "subtle", ] -[[package]] -name = "filetime" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "975ccf83d8d9d0d84682850a38c8169027be83368805971cc4f238c2b245bc98" -dependencies = [ - "cfg-if 1.0.0", - "libc", - "redox_syscall 0.2.10", - "winapi 0.3.9", -] - -[[package]] -name = "flate2" -version = "1.0.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e6988e897c1c9c485f43b47a529cef42fde0547f9d8d41a7062518f1d8fc53f" -dependencies = [ - "cfg-if 1.0.0", - "crc32fast", - "libc", - "miniz_oxide 0.4.4", -] - [[package]] name = "float-ord" version = "0.2.0" @@ -1876,7 +1252,7 @@ dependencies = [ "futures-core", "futures-sink", "pin-project", - "spin 0.9.2", + "spin", ] [[package]] @@ -1907,7 +1283,7 @@ dependencies = [ "pathfinder_simd", "servo-fontconfig", "walkdir", - "winapi 0.3.9", + "winapi", ] [[package]] @@ -1956,28 +1332,6 @@ dependencies = [ "pkg-config", ] -[[package]] -name = "fs2" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9564fc758e15025b46aa6643b1b77d047d1a56a1aea6e01002ac0c7026876213" -dependencies = [ - "libc", - "winapi 0.3.9", -] - -[[package]] -name = "fs_extra" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2022715d62ab30faffd124d40b76f4134a550a87792276512b18d63272333394" - -[[package]] -name = "fuchsia-cprng" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba" - [[package]] name = "funty" version = "1.2.0" @@ -2064,9 +1418,9 @@ version = "0.3.19" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6dbd947adfffb0efc70599b3ddcf7b5597bb5fa9e245eb99f62b3a5f7bb8bd3c" dependencies = [ - "proc-macro2 1.0.36", - "quote 1.0.14", - "syn 1.0.84", + "proc-macro2", + "quote", + "syn", ] [[package]] @@ -2099,36 +1453,16 @@ dependencies = [ "slab", ] -[[package]] -name = "fxhash" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" -dependencies = [ - "byteorder", -] - [[package]] name = "generic-array" version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "501466ecc8a30d1d3b7fc9229b122b2ce8ed6e9d9223f1138d4babb253e51817" dependencies = [ - "serde", "typenum", "version_check", ] -[[package]] -name = "gethostname" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e692e296bfac1d2533ef168d0b60ff5897b8b70a4009276834014dd8924cc028" -dependencies = [ - "libc", - "winapi 0.3.9", -] - [[package]] name = "getrandom" version = "0.1.16" @@ -2136,10 +1470,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" dependencies = [ "cfg-if 1.0.0", - "js-sys", "libc", "wasi 0.9.0+wasi-snapshot-preview1", - "wasm-bindgen", ] [[package]] @@ -2153,16 +1485,6 @@ dependencies = [ "wasi 0.10.0+wasi-snapshot-preview1", ] -[[package]] -name = "ghash" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1583cc1656d7839fd3732b80cf4f38850336cdb9b8ded1cd399ca62958de3c99" -dependencies = [ - "opaque-debug", - "polyval", -] - [[package]] name = "gif" version = "0.11.3" @@ -2210,25 +1532,6 @@ dependencies = [ "subtle", ] -[[package]] -name = "h2" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f072413d126e57991455e0a922b31e4c8ba7c2ffbebf6b78b4f8521397d65cd" -dependencies = [ - "bytes", - "fnv", - "futures-core", - "futures-sink", - "futures-util", - "http", - "indexmap", - "slab", - "tokio", - "tokio-util", - "tracing", -] - [[package]] name = "halo2" version = "0.1.0-beta.1" @@ -2268,30 +1571,6 @@ dependencies = [ "subtle", ] -[[package]] -name = "hash-db" -version = "0.15.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d23bd4e7b5eda0d0f3a307e8b381fdc8ba9000f26fbe912250c0a4cc3956364a" - -[[package]] -name = "hash256-std-hasher" -version = "0.15.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92c171d55b98633f4ed3860808f004099b36c1cc29c42cfc53aa8591b21efcf2" -dependencies = [ - "crunchy 0.2.2", -] - -[[package]] -name = "hashbrown" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7afe4a420e3fe79967a00898cc1f4db7c8a49a9333a29f8a4bd76a253d5cd04" -dependencies = [ - "ahash 0.4.7", -] - [[package]] name = "hashbrown" version = "0.11.2" @@ -2307,7 +1586,7 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7249a3129cbc1ffccd74857f81464a323a152173cdb134e0fd81bc803b29facf" dependencies = [ - "hashbrown 0.11.2", + "hashbrown", ] [[package]] @@ -2340,58 +1619,6 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" -[[package]] -name = "hidapi" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6c4cc7279df8353788ac551186920e44959d5948aec404be02b28544a598bce" -dependencies = [ - "cc", - "libc", - "pkg-config", -] - -[[package]] -name = "hmac" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "126888268dcc288495a26bf004b38c5fdbb31682f992c84ceb046a1f0fe38840" -dependencies = [ - "crypto-mac 0.8.0", - "digest", -] - -[[package]] -name = "hmac" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "deae6d9dbb35ec2c502d62b8f7b1c000a0822c3b0794ba36b3149c0a1c840dff" -dependencies = [ - "crypto-mac 0.9.1", - "digest", -] - -[[package]] -name = "hmac" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a2a2320eb7ec0ebe8da8f744d7812d9fc4cb4d09344ac01898dbcb6a20ae69b" -dependencies = [ - "crypto-mac 0.11.1", - "digest", -] - -[[package]] -name = "hmac-drbg" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17ea0a1394df5b6574da6e0c1ade9e78868c9fb0a4e5ef4428e32da4676b85b1" -dependencies = [ - "digest", - "generic-array", - "hmac 0.8.1", -] - [[package]] name = "http" version = "0.2.6" @@ -2403,72 +1630,12 @@ dependencies = [ "itoa 1.0.1", ] -[[package]] -name = "http-body" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ff4f84919677303da5f147645dbea6b1881f368d03ac84e1dc09031ebd7b2c6" -dependencies = [ - "bytes", - "http", - "pin-project-lite", -] - [[package]] name = "httparse" version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "acd94fdbe1d4ff688b67b04eee2e17bd50995534a61539e45adfefb45e5e5503" -[[package]] -name = "httpdate" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" - -[[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.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7ec3e62bdc98a2f0393a5048e4c30ef659440ea6e0e572965103e72bd836f55" -dependencies = [ - "bytes", - "futures-channel", - "futures-core", - "futures-util", - "h2", - "http", - "http-body", - "httparse", - "httpdate", - "itoa 0.4.8", - "pin-project-lite", - "socket2", - "tokio", - "tower-service", - "tracing", - "want", -] - -[[package]] -name = "hyper-rustls" -version = "0.23.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d87c48c02e0dc5e3b849a2041db3029fd066650f8f717c07bf8ed78ccb895cac" -dependencies = [ - "http", - "hyper", - "rustls 0.20.2", - "tokio", - "tokio-rustls", -] - [[package]] name = "ident_case" version = "1.0.1" @@ -2517,20 +1684,8 @@ version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bc633605454125dec4b66843673f01c7df2b89479b32e0ed634e43a91cff62a5" dependencies = [ - "autocfg 1.0.1", - "hashbrown 0.11.2", -] - -[[package]] -name = "indicatif" -version = "0.16.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d207dc617c7a380ab07ff572a6e52fa202a2a8f355860ac9c38e23f8196be1b" -dependencies = [ - "console", - "lazy_static", - "number_prefix", - "regex", + "autocfg", + "hashbrown", ] [[package]] @@ -2542,12 +1697,6 @@ dependencies = [ "cfg-if 1.0.0", ] -[[package]] -name = "ipnet" -version = "2.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68f2d64f2edebec4ce84ad108148e67e1064789bee435edc5b60ad398714a3a9" - [[package]] name = "itertools" version = "0.10.3" @@ -2593,21 +1742,6 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "jsonrpc-core" -version = "18.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14f7f76aef2d054868398427f6c54943cf3d1caa9a7ec7d0c38d69df97a965eb" -dependencies = [ - "futures", - "futures-executor", - "futures-util", - "log", - "serde", - "serde_derive", - "serde_json", -] - [[package]] name = "jubjub" version = "0.8.0" @@ -2622,23 +1756,6 @@ dependencies = [ "subtle", ] -[[package]] -name = "keccak" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67c21572b4949434e4fc1e1978b99c5f77064153c59d998bf13ecd96fb5ecba7" - -[[package]] -name = "keccak-hasher" -version = "0.15.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "711adba9940a039f4374fc5724c0a5eaca84a2d558cce62256bfe26f0dbef05e" -dependencies = [ - "hash-db", - "hash256-std-hasher", - "tiny-keccak", -] - [[package]] name = "kv-log-macro" version = "1.0.7" @@ -2673,7 +1790,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "afe203d669ec979b7128619bae5a63b7b42e9203c1b29146079ee05e2f604b52" dependencies = [ "cfg-if 1.0.0", - "winapi 0.3.9", + "winapi", ] [[package]] @@ -2687,54 +1804,6 @@ dependencies = [ "libc", ] -[[package]] -name = "libsecp256k1" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9d220bc1feda2ac231cb78c3d26f27676b8cf82c96971f7aeef3d0cf2797c73" -dependencies = [ - "arrayref", - "base64 0.12.3", - "digest", - "hmac-drbg", - "libsecp256k1-core", - "libsecp256k1-gen-ecmult", - "libsecp256k1-gen-genmult", - "rand 0.7.3", - "serde", - "sha2", - "typenum", -] - -[[package]] -name = "libsecp256k1-core" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0f6ab710cec28cef759c5f18671a27dae2a5f952cdaaee1d8e2908cb2478a80" -dependencies = [ - "crunchy 0.2.2", - "digest", - "subtle", -] - -[[package]] -name = "libsecp256k1-gen-ecmult" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccab96b584d38fac86a83f07e659f0deafd0253dc096dab5a36d53efe653c5c3" -dependencies = [ - "libsecp256k1-core", -] - -[[package]] -name = "libsecp256k1-gen-genmult" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67abfe149395e3aa1c48a2beb32b068e2334402df8181f818d3aee2b304c4f5d" -dependencies = [ - "libsecp256k1-core", -] - [[package]] name = "libsqlite3-sys" version = "0.23.2" @@ -2746,12 +1815,6 @@ dependencies = [ "vcpkg", ] -[[package]] -name = "linked-hash-map" -version = "0.5.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fb9b38af92608140b86b693604b9ffcc5824240a484d1ecd4795bacb2fe88f3" - [[package]] name = "lock_api" version = "0.4.5" @@ -2789,22 +1852,13 @@ version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a" -[[package]] -name = "memmap2" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4647a11b578fead29cdbb34d4adef8dd3dc35b876c9c6d5240d83f205abfe96e" -dependencies = [ - "libc", -] - [[package]] name = "memoffset" version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "043175f069eda7b85febe4a74abbaeff828d9f8b448515d3151a14a3542811aa" dependencies = [ - "autocfg 1.0.1", + "autocfg", ] [[package]] @@ -2813,7 +1867,7 @@ version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce" dependencies = [ - "autocfg 1.0.1", + "autocfg", ] [[package]] @@ -2825,28 +1879,12 @@ dependencies = [ "nonempty", ] -[[package]] -name = "mime" -version = "0.3.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d" - [[package]] name = "minimal-lexical" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" -[[package]] -name = "miniscript" -version = "6.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d69450033bf162edf854d4aacaff82ca5ef34fa81f6cf69e1c81a103f0834997" -dependencies = [ - "bitcoin", - "serde", -] - [[package]] name = "miniz_oxide" version = "0.3.7" @@ -2863,29 +1901,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a92518e98c078586bc6c934028adcca4c92a53d6a958196de835170a01d84e4b" dependencies = [ "adler", - "autocfg 1.0.1", -] - -[[package]] -name = "mio" -version = "0.7.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8067b404fe97c70829f082dec8bcf4f71225d7eaea1d8645349cb76fa06205cc" -dependencies = [ - "libc", - "log", - "miow", - "ntapi", - "winapi 0.3.9", -] - -[[package]] -name = "miow" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9f1c5b025cda876f66ef43a113f91ebc9f4ccef34843000e0adf6ebbab84e21" -dependencies = [ - "winapi 0.3.9", + "autocfg", ] [[package]] @@ -2906,19 +1922,6 @@ dependencies = [ "tempfile", ] -[[package]] -name = "nix" -version = "0.23.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f866317acbd3a240710c63f065ffb1e4fd466259045ccb504130b7f668f35c6" -dependencies = [ - "bitflags", - "cc", - "cfg-if 1.0.0", - "libc", - "memoffset 0.6.5", -] - [[package]] name = "nom" version = "7.1.0" @@ -2936,46 +1939,26 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e9e591e719385e6ebaeb5ce5d3887f7d5676fceca6411d1925ccc95745f3d6f7" -[[package]] -name = "ntapi" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f6bb902e437b6d86e03cce10a7e2af662292c5dfef23b65899ea3ac9354ad44" -dependencies = [ - "winapi 0.3.9", -] - [[package]] name = "num-bigint" version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f93ab6289c7b344a8a9f60f88d80aa20032336fe78da341afc91c8a2341fc75f" dependencies = [ - "autocfg 1.0.1", + "autocfg", "num-integer", "num-traits", "rand 0.8.4", "serde", ] -[[package]] -name = "num-derive" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "876a53fff98e03a936a674b29568b0e605f06b29372c2489ff4de23f1949743d" -dependencies = [ - "proc-macro2 1.0.36", - "quote 1.0.14", - "syn 1.0.84", -] - [[package]] name = "num-integer" version = "0.1.44" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db" dependencies = [ - "autocfg 1.0.1", + "autocfg", "num-traits", ] @@ -2985,7 +1968,7 @@ version = "0.1.42" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b2021c8337a54d21aca0d59a92577a029af9431cb59b909b03252b9c164fad59" dependencies = [ - "autocfg 1.0.1", + "autocfg", "num-integer", "num-traits", ] @@ -2996,7 +1979,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "12ac428b1cb17fce6f731001d307d351ec70a6d202fc2e60f7d4c5e42d8f4f07" dependencies = [ - "autocfg 1.0.1", + "autocfg", "num-integer", "num-traits", ] @@ -3007,7 +1990,7 @@ version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290" dependencies = [ - "autocfg 1.0.1", + "autocfg", ] [[package]] @@ -3020,33 +2003,6 @@ dependencies = [ "libc", ] -[[package]] -name = "num_enum" -version = "0.5.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "720d3ea1055e4e4574c0c0b0f8c3fd4f24c4cdaf465948206dea090b57b526ad" -dependencies = [ - "num_enum_derive", -] - -[[package]] -name = "num_enum_derive" -version = "0.5.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d992b768490d7fe0d8586d9b5745f6c49f557da6d81dc982b1d167ad4edbb21" -dependencies = [ - "proc-macro-crate 1.1.0", - "proc-macro2 1.0.36", - "quote 1.0.14", - "syn 1.0.84", -] - -[[package]] -name = "number_prefix" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3" - [[package]] name = "numtoa" version = "0.1.0" @@ -3100,7 +2056,7 @@ version = "0.9.72" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7e46109c383602735fa0a2e48dd2b7c892b048e1bf69e5c3b1d804b7d9c203cb" dependencies = [ - "autocfg 1.0.1", + "autocfg", "cc", "libc", "pkg-config", @@ -3116,30 +2072,6 @@ dependencies = [ "memchr", ] -[[package]] -name = "ouroboros" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f357ef82d1b4db66fbed0b8d542cbd3c22d0bf5b393b3c257b9ba4568e70c9c3" -dependencies = [ - "aliasable", - "ouroboros_macro", - "stable_deref_trait", -] - -[[package]] -name = "ouroboros_macro" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44a0b52c2cbaef7dffa5fec1a43274afe8bd2a644fa9fc50a9ef4ff0269b1257" -dependencies = [ - "Inflector", - "proc-macro-error", - "proc-macro2 1.0.36", - "quote 1.0.14", - "syn 1.0.84", -] - [[package]] name = "parking" version = "2.0.0" @@ -3168,7 +2100,7 @@ dependencies = [ "libc", "redox_syscall 0.2.10", "smallvec", - "winapi 0.3.9", + "winapi", ] [[package]] @@ -3202,25 +2134,7 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "39fe46acc5503595e5949c17b818714d26fdf9b4920eacf3b2947f0199f4a6ff" dependencies = [ - "rustc_version 0.3.3", -] - -[[package]] -name = "pbkdf2" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "216eaa586a190f0a738f2f918511eecfa90f13295abec0e457cdebcceda80cbd" -dependencies = [ - "crypto-mac 0.8.0", -] - -[[package]] -name = "pbkdf2" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f05894bce6a1ba4be299d0c5f29563e08af2bc18bb7d48313113bed71e904739" -dependencies = [ - "crypto-mac 0.11.1", + "rustc_version", ] [[package]] @@ -3259,9 +2173,9 @@ version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "744b6f092ba29c3650faf274db506afd39944f48420f6c86b17cfe0ee1cb36bb" dependencies = [ - "proc-macro2 1.0.36", - "quote 1.0.14", - "syn 1.0.84", + "proc-macro2", + "quote", + "syn", ] [[package]] @@ -3350,19 +2264,7 @@ dependencies = [ "libc", "log", "wepoll-ffi", - "winapi 0.3.9", -] - -[[package]] -name = "polyval" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8419d2b623c7c0896ff2d5d96e2cb4ede590fed28fcc34934f4c33c036e620a1" -dependencies = [ - "cfg-if 1.0.0", - "cpufeatures", - "opaque-debug", - "universal-hash", + "winapi", ] [[package]] @@ -3385,25 +2287,6 @@ dependencies = [ "unicode-width", ] -[[package]] -name = "proc-macro-crate" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d6ea3c4595b96363c13943497db34af4460fb474a95c43f4446ad341b8c9785" -dependencies = [ - "toml", -] - -[[package]] -name = "proc-macro-crate" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ebace6889caf889b4d3f76becee12e90353f2b8c7d875534a71e5742f8f6f83" -dependencies = [ - "thiserror", - "toml", -] - [[package]] name = "proc-macro-error" version = "1.0.4" @@ -3411,9 +2294,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" dependencies = [ "proc-macro-error-attr", - "proc-macro2 1.0.36", - "quote 1.0.14", - "syn 1.0.84", + "proc-macro2", + "quote", + "syn", "version_check", ] @@ -3423,8 +2306,8 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" dependencies = [ - "proc-macro2 1.0.36", - "quote 1.0.14", + "proc-macro2", + "quote", "version_check", ] @@ -3434,22 +2317,13 @@ version = "0.5.19" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dbf0c48bc1d91375ae5c3cd81e3722dff1abcf81a30960240640d223f59fe0e5" -[[package]] -name = "proc-macro2" -version = "0.4.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf3d2011ab5c909338f7887f4fc896d35932e29146c12c8d01da6b22a80ba759" -dependencies = [ - "unicode-xid 0.1.0", -] - [[package]] name = "proc-macro2" version = "1.0.36" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c7342d5883fbccae1cc37a2353b09c87c9b0f3afd73f5fb9bba687a1f733b029" dependencies = [ - "unicode-xid 0.2.2", + "unicode-xid", ] [[package]] @@ -3466,21 +2340,12 @@ dependencies = [ "quick-error 2.0.1", "rand 0.8.4", "rand_chacha 0.3.1", - "rand_xorshift 0.3.0", + "rand_xorshift", "regex-syntax", "rusty-fork", "tempfile", ] -[[package]] -name = "qstring" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d464fae65fff2680baf48019211ce37aaec0c78e9264c84a3e484717f965104e" -dependencies = [ - "percent-encoding", -] - [[package]] name = "quick-error" version = "1.2.3" @@ -3493,22 +2358,13 @@ version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3" -[[package]] -name = "quote" -version = "0.6.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ce23b6b870e8f94f81fb0a363d65d86675884b34a09043c81e5562f11c1f8e1" -dependencies = [ - "proc-macro2 0.4.30", -] - [[package]] name = "quote" version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "47aa80447ce4daf1717500037052af176af5d38cc3e571d9ec1c7353fc10c87d" dependencies = [ - "proc-macro2 1.0.36", + "proc-macro2", ] [[package]] @@ -3517,25 +2373,6 @@ version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "643f8f41a8ebc4c5dc4515c82bb8abd397b527fc20fd681b7c011c2aee5d44fb" -[[package]] -name = "rand" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d71dacdc3c88c1fde3885a3be3fbab9f35724e6ce99467f7d9c5026132184ca" -dependencies = [ - "autocfg 0.1.7", - "libc", - "rand_chacha 0.1.1", - "rand_core 0.4.2", - "rand_hc 0.1.0", - "rand_isaac", - "rand_jitter", - "rand_os", - "rand_pcg", - "rand_xorshift 0.1.1", - "winapi 0.3.9", -] - [[package]] name = "rand" version = "0.7.3" @@ -3561,16 +2398,6 @@ dependencies = [ "rand_hc 0.3.1", ] -[[package]] -name = "rand_chacha" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "556d3a1ca6600bfcbab7c7c91ccb085ac7fbbcd70e008a98742e7847f4f7bcef" -dependencies = [ - "autocfg 0.1.7", - "rand_core 0.3.1", -] - [[package]] name = "rand_chacha" version = "0.2.2" @@ -3591,21 +2418,6 @@ dependencies = [ "rand_core 0.6.3", ] -[[package]] -name = "rand_core" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b" -dependencies = [ - "rand_core 0.4.2", -] - -[[package]] -name = "rand_core" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc" - [[package]] name = "rand_core" version = "0.5.1" @@ -3624,15 +2436,6 @@ dependencies = [ "getrandom 0.2.3", ] -[[package]] -name = "rand_hc" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b40677c7be09ae76218dc623efbf7b18e34bced3f38883af07bb75630a21bc4" -dependencies = [ - "rand_core 0.3.1", -] - [[package]] name = "rand_hc" version = "0.2.0" @@ -3651,59 +2454,6 @@ dependencies = [ "rand_core 0.6.3", ] -[[package]] -name = "rand_isaac" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ded997c9d5f13925be2a6fd7e66bf1872597f759fd9dd93513dd7e92e5a5ee08" -dependencies = [ - "rand_core 0.3.1", -] - -[[package]] -name = "rand_jitter" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1166d5c91dc97b88d1decc3285bb0a99ed84b05cfd0bc2341bdf2d43fc41e39b" -dependencies = [ - "libc", - "rand_core 0.4.2", - "winapi 0.3.9", -] - -[[package]] -name = "rand_os" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b75f676a1e053fc562eafbb47838d67c84801e38fc1ba459e8f180deabd5071" -dependencies = [ - "cloudabi", - "fuchsia-cprng", - "libc", - "rand_core 0.4.2", - "rdrand", - "winapi 0.3.9", -] - -[[package]] -name = "rand_pcg" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abf9b09b01790cfe0364f52bf32995ea3c39f4d2dd011eac241d2914146d0b44" -dependencies = [ - "autocfg 0.1.7", - "rand_core 0.4.2", -] - -[[package]] -name = "rand_xorshift" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbf7e9e623549b0e21f6e97cf8ecf247c1a8fd2e8a992ae265314300b2455d5c" -dependencies = [ - "rand_core 0.3.1", -] - [[package]] name = "rand_xorshift" version = "0.3.0" @@ -3719,7 +2469,7 @@ version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c06aca804d41dbc8ba42dfd964f0d01334eceb64314b9ecf7c5fad5188a06d90" dependencies = [ - "autocfg 1.0.1", + "autocfg", "crossbeam-deque 0.8.1", "either", "rayon-core", @@ -3738,15 +2488,6 @@ dependencies = [ "num_cpus", ] -[[package]] -name = "rdrand" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2" -dependencies = [ - "rand_core 0.3.1", -] - [[package]] name = "reddsa" version = "0.0.0" @@ -3838,59 +2579,7 @@ version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7" dependencies = [ - "winapi 0.3.9", -] - -[[package]] -name = "reqwest" -version = "0.11.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c4e0a76dc12a116108933f6301b95e83634e0c47b0afbed6abbaa0601e99258" -dependencies = [ - "base64 0.13.0", - "bytes", - "encoding_rs", - "futures-core", - "futures-util", - "http", - "http-body", - "hyper", - "hyper-rustls", - "ipnet", - "js-sys", - "lazy_static", - "log", - "mime", - "percent-encoding", - "pin-project-lite", - "rustls 0.20.2", - "rustls-pemfile", - "serde", - "serde_json", - "serde_urlencoded", - "tokio", - "tokio-rustls", - "url", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", - "webpki-roots 0.22.2", - "winreg", -] - -[[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", - "web-sys", - "winapi 0.3.9", + "winapi", ] [[package]] @@ -3913,38 +2602,13 @@ dependencies = [ "librocksdb-sys", ] -[[package]] -name = "rpassword" -version = "5.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffc936cf8a7ea60c58f030fd36a612a48f440610214dc54bc36431f9ea0c3efb" -dependencies = [ - "libc", - "winapi 0.3.9", -] - -[[package]] -name = "rusqlite" -version = "0.26.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ba4d3462c8b2e4d7f4fcfcf2b296dc6b65404fbbc7b63daa37fd485c149daf7" -dependencies = [ - "bitflags", - "fallible-iterator", - "fallible-streaming-iterator", - "hashlink", - "libsqlite3-sys", - "memchr", - "smallvec", -] - [[package]] name = "rust-argon2" version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4b18820d944b33caa75a71378964ac46f58517c92b6ae5f762636247c09e78fb" dependencies = [ - "base64 0.13.0", + "base64", "blake2b_simd 0.5.11", "constant_time_eq", "crossbeam-utils 0.8.5", @@ -3968,58 +2632,9 @@ version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0dfe2087c51c460008730de8b57e6a320782fbfb312e1f4d520e6c6fae155ee" dependencies = [ - "semver 0.11.0", + "semver", ] -[[package]] -name = "rustc_version" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" -dependencies = [ - "semver 1.0.4", -] - -[[package]] -name = "rustls" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b25a18b1bf7387f0145e7f8324e700805aade3842dd3db2e74e4cdeb4677c09e" -dependencies = [ - "base64 0.10.1", - "log", - "ring", - "sct 0.6.1", - "webpki 0.21.4", -] - -[[package]] -name = "rustls" -version = "0.20.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d37e5e2290f3e040b594b1a9e04377c2c671f1a1cfd9bfdef82106ac1c113f84" -dependencies = [ - "log", - "ring", - "sct 0.7.0", - "webpki 0.22.0", -] - -[[package]] -name = "rustls-pemfile" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5eebeaeb360c87bfb72e84abdb3447159c0eaececf1bef2aecd65a8be949d1c9" -dependencies = [ - "base64 0.13.0", -] - -[[package]] -name = "rustversion" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2cc38e8fa666e2de3c4aba7edeb5ffc5246c1c2ed0e3d17e560aeeba736b23f" - [[package]] name = "rusty-fork" version = "0.3.0" @@ -4054,7 +2669,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f05ba609c234e60bee0d547fe94a4c7e9da733d1c962cf6e59efa4cd9c8bc75" dependencies = [ "lazy_static", - "winapi 0.3.9", + "winapi", ] [[package]] @@ -4063,46 +2678,6 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" -[[package]] -name = "sct" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b362b83898e0e69f38515b82ee15aa80636befe47c3b6d3d89a911e78fc228ce" -dependencies = [ - "ring", - "untrusted", -] - -[[package]] -name = "sct" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4" -dependencies = [ - "ring", - "untrusted", -] - -[[package]] -name = "secp256k1" -version = "0.20.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97d03ceae636d0fed5bae6a7f4f664354c5f4fcedf6eef053fef17e49f837d0a" -dependencies = [ - "rand 0.6.5", - "secp256k1-sys", - "serde", -] - -[[package]] -name = "secp256k1-sys" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "827cb7cce42533829c792fc51b82fbf18b125b45a702ef2c8be77fce65463a7b" -dependencies = [ - "cc", -] - [[package]] name = "security-framework" version = "2.4.2" @@ -4135,12 +2710,6 @@ dependencies = [ "semver-parser", ] -[[package]] -name = "semver" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "568a8e6258aa33c13358f81fd834adb854c6f7c9468520910a9b1e8fac068012" - [[package]] name = "semver-parser" version = "0.10.2" @@ -4159,24 +2728,15 @@ dependencies = [ "serde_derive", ] -[[package]] -name = "serde_bytes" -version = "0.11.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16ae07dd2f88a366f15bd0632ba725227018c69a1c8550a927324f8eb8368bb9" -dependencies = [ - "serde", -] - [[package]] name = "serde_derive" version = "1.0.133" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed201699328568d8d08208fdd080e3ff594e6c422e438b6705905da01005d537" dependencies = [ - "proc-macro2 1.0.36", - "quote 1.0.14", - "syn 1.0.84", + "proc-macro2", + "quote", + "syn", ] [[package]] @@ -4190,30 +2750,6 @@ dependencies = [ "serde", ] -[[package]] -name = "serde_urlencoded" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edfa57a7f8d9c1d260a549e7224100f6c43d43f9103e06dd8b4095a9b2b43ce9" -dependencies = [ - "form_urlencoded", - "itoa 0.4.8", - "ryu", - "serde", -] - -[[package]] -name = "serde_yaml" -version = "0.8.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a521f2940385c165a24ee286aa8599633d162077a54bdcae2a6fd5a7bfa7a0" -dependencies = [ - "indexmap", - "ryu", - "serde", - "yaml-rust", -] - [[package]] name = "servo-fontconfig" version = "0.5.1" @@ -4261,18 +2797,6 @@ dependencies = [ "opaque-debug", ] -[[package]] -name = "sha3" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f81199417d4e5de3f04b1e871023acea7389672c4135918f05aa9cbf2f2fa809" -dependencies = [ - "block-buffer", - "digest", - "keccak", - "opaque-debug", -] - [[package]] name = "shlex" version = "1.1.0" @@ -4310,12 +2834,6 @@ dependencies = [ "libc", ] -[[package]] -name = "signature" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02658e48d89f2bec991f9a78e69cfa4c316f8d6a6c4ec12fae1aeb263d486788" - [[package]] name = "simplelog" version = "0.11.1" @@ -4333,22 +2851,6 @@ version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9def91fd1e018fe007022791f865d0ccc9b3a0d5001e01aabb8b40e46000afb5" -[[package]] -name = "sled" -version = "0.34.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f96b4737c2ce5987354855aed3797279def4ebf734436c6aa4552cf8e169935" -dependencies = [ - "crc32fast", - "crossbeam-epoch 0.9.5", - "crossbeam-utils 0.8.5", - "fs2", - "fxhash", - "libc", - "log", - "parking_lot", -] - [[package]] name = "smallvec" version = "1.7.0" @@ -4380,610 +2882,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5dc90fe6c7be1a323296982db1836d1ea9e47b6839496dde9a541bc496df3516" dependencies = [ "libc", - "winapi 0.3.9", + "winapi", ] -[[package]] -name = "socks" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30f86c7635fadf2814201a4f67efefb0007588ae7422ce299f354ab5c97f61ae" -dependencies = [ - "byteorder", - "libc", - "winapi 0.2.8", - "ws2_32-sys", -] - -[[package]] -name = "solana-account-decoder" -version = "1.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "284c5ecd6b120a31464fc4f86add24359f10b8beee74d25ef5acda59286c4652" -dependencies = [ - "Inflector", - "base64 0.12.3", - "bincode", - "bs58", - "bv", - "lazy_static", - "serde", - "serde_derive", - "serde_json", - "solana-config-program", - "solana-sdk", - "solana-vote-program", - "spl-token", - "thiserror", - "zstd", -] - -[[package]] -name = "solana-address-lookup-table-program" -version = "1.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f1fef857bf98f6d0c8306c21c8c0375bb92957e38548ba84f8636e03f39e8c5" -dependencies = [ - "bincode", - "bytemuck", - "log", - "num-derive", - "num-traits", - "rustc_version 0.4.0", - "serde", - "solana-frozen-abi", - "solana-frozen-abi-macro", - "solana-program-runtime", - "solana-sdk", - "thiserror", -] - -[[package]] -name = "solana-bucket-map" -version = "1.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98a309788a0f400f778389711fad45c03e969616f0e3e51b957e66196540b34e" -dependencies = [ - "fs_extra", - "log", - "memmap2", - "rand 0.7.3", - "rayon", - "solana-logger", - "solana-measure", - "solana-sdk", - "tempfile", -] - -[[package]] -name = "solana-clap-utils" -version = "1.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b08f88740c713a8b44fc1391b202f7866539cffeec29cadd1a288e1e464990db" -dependencies = [ - "chrono", - "clap 2.34.0", - "rpassword", - "solana-perf", - "solana-remote-wallet", - "solana-sdk", - "thiserror", - "tiny-bip39", - "uriparse", - "url", -] - -[[package]] -name = "solana-cli-config" -version = "1.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6b4231d03ab32cb88c32bcbe7f69292010ade82a17793df306b5e207c25b12d" -dependencies = [ - "dirs-next", - "lazy_static", - "serde", - "serde_derive", - "serde_yaml", - "url", -] - -[[package]] -name = "solana-client" -version = "1.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03264f21f74207c3fea90f0530593dd7efdade358fa8c9964b08e9833f10134a" -dependencies = [ - "base64 0.13.0", - "bincode", - "bs58", - "clap 2.34.0", - "indicatif", - "jsonrpc-core", - "log", - "rayon", - "reqwest", - "semver 1.0.4", - "serde", - "serde_derive", - "serde_json", - "solana-account-decoder", - "solana-clap-utils", - "solana-faucet", - "solana-measure", - "solana-net-utils", - "solana-sdk", - "solana-transaction-status", - "solana-version", - "solana-vote-program", - "thiserror", - "tokio", - "tungstenite", - "url", -] - -[[package]] -name = "solana-compute-budget-program" -version = "1.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ece0b094f6433fe556001b8534ad340f60ff5ed5a5964b47246eb973715fc0b8" -dependencies = [ - "solana-program-runtime", - "solana-sdk", -] - -[[package]] -name = "solana-config-program" -version = "1.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e50af4dcf9b27ff6cac1f41115df276de969ce724d47b2aa1e85272785fa1110" -dependencies = [ - "bincode", - "chrono", - "serde", - "serde_derive", - "solana-program-runtime", - "solana-sdk", -] - -[[package]] -name = "solana-faucet" -version = "1.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ecd178827887c60394ad7f0342a1e1e6e6114b9f066497326b5f855ea3718d4" -dependencies = [ - "bincode", - "byteorder", - "clap 2.34.0", - "log", - "serde", - "serde_derive", - "solana-clap-utils", - "solana-cli-config", - "solana-logger", - "solana-metrics", - "solana-sdk", - "solana-version", - "spl-memo", - "thiserror", - "tokio", -] - -[[package]] -name = "solana-frozen-abi" -version = "1.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fd67f1408118e24d056251c5ae2cc11512ebcf1337500c0df886b6e95176404" -dependencies = [ - "bs58", - "bv", - "generic-array", - "log", - "memmap2", - "rustc_version 0.4.0", - "serde", - "serde_derive", - "sha2", - "solana-frozen-abi-macro", - "solana-logger", - "thiserror", -] - -[[package]] -name = "solana-frozen-abi-macro" -version = "1.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5e91b2f34d96a4cb05e780bfc59ed0f411c2de035ce4f00bef04b1bd314a423" -dependencies = [ - "proc-macro2 1.0.36", - "quote 1.0.14", - "rustc_version 0.4.0", - "syn 1.0.84", -] - -[[package]] -name = "solana-logger" -version = "1.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6f2dbc47d8a5104f5e0d0b78398603c979da1c8f668f72184257a3afc912516" -dependencies = [ - "env_logger", - "lazy_static", - "log", -] - -[[package]] -name = "solana-measure" -version = "1.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0e8499d4c96dd5157906260deda5df14629464ed392d3ad7898fe28037754ae" -dependencies = [ - "log", - "solana-sdk", -] - -[[package]] -name = "solana-metrics" -version = "1.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a1ae4f9df33e709f61e51fad1b8c7f41d1e52f21562bf682a38df6e6b0fffe4" -dependencies = [ - "env_logger", - "gethostname", - "lazy_static", - "log", - "reqwest", - "solana-sdk", -] - -[[package]] -name = "solana-net-utils" -version = "1.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92ae3b94d966346c0a5425f18350aaf17bc3e37252985f0f3f117e81cfd9d05f" -dependencies = [ - "bincode", - "clap 2.34.0", - "log", - "nix", - "rand 0.7.3", - "serde", - "serde_derive", - "socket2", - "solana-logger", - "solana-sdk", - "solana-version", - "tokio", - "url", -] - -[[package]] -name = "solana-perf" -version = "1.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39bf633bff3bb216d717dac625b9db9b90c10665c49e669ff1b5981450e73962" -dependencies = [ - "bincode", - "caps", - "curve25519-dalek", - "dlopen", - "dlopen_derive", - "lazy_static", - "libc", - "log", - "nix", - "rand 0.7.3", - "rayon", - "serde", - "solana-logger", - "solana-metrics", - "solana-rayon-threadlimit", - "solana-sdk", - "solana-vote-program", -] - -[[package]] -name = "solana-program" -version = "1.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "892c969af68555ebf498beb550da817b08e836d5ba58ce09df18f146317bd142" -dependencies = [ - "base64 0.13.0", - "bincode", - "bitflags", - "blake3", - "borsh", - "borsh-derive", - "bs58", - "bv", - "bytemuck", - "console_error_panic_hook", - "console_log", - "curve25519-dalek", - "getrandom 0.1.16", - "itertools", - "js-sys", - "lazy_static", - "libsecp256k1", - "log", - "num-derive", - "num-traits", - "parking_lot", - "rand 0.7.3", - "rustc_version 0.4.0", - "rustversion", - "serde", - "serde_bytes", - "serde_derive", - "sha2", - "sha3", - "solana-frozen-abi", - "solana-frozen-abi-macro", - "solana-logger", - "solana-sdk-macro", - "thiserror", - "wasm-bindgen", -] - -[[package]] -name = "solana-program-runtime" -version = "1.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "997ea581430b002b82e894b833fd8480c4f66eb0bc270f2a631319a2327ae4f8" -dependencies = [ - "base64 0.13.0", - "bincode", - "itertools", - "libc", - "libloading", - "log", - "num-derive", - "num-traits", - "rustc_version 0.4.0", - "serde", - "solana-logger", - "solana-sdk", - "thiserror", -] - -[[package]] -name = "solana-rayon-threadlimit" -version = "1.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "406d9013539b3b882a7e6b908e00ddd2f5957c0d2237db964f4c84e1d4029640" -dependencies = [ - "lazy_static", - "num_cpus", -] - -[[package]] -name = "solana-remote-wallet" -version = "1.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16ca1edec248d0e5493089c2ac96851f42baa1307fb23413e0388e449d49dfae" -dependencies = [ - "base32", - "console", - "dialoguer", - "hidapi", - "log", - "num-derive", - "num-traits", - "parking_lot", - "qstring", - "semver 1.0.4", - "solana-sdk", - "thiserror", - "uriparse", -] - -[[package]] -name = "solana-runtime" -version = "1.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50875e40f0d34caaa30188379a09e203dd47ea8793f77df06939be87df436abf" -dependencies = [ - "arrayref", - "bincode", - "blake3", - "bv", - "byteorder", - "bzip2", - "crossbeam-channel 0.5.1", - "dashmap 4.0.2", - "dir-diff", - "flate2", - "fnv", - "itertools", - "lazy_static", - "log", - "memmap2", - "num-derive", - "num-traits", - "num_cpus", - "ouroboros", - "rand 0.7.3", - "rayon", - "regex", - "rustc_version 0.4.0", - "serde", - "serde_derive", - "solana-address-lookup-table-program", - "solana-bucket-map", - "solana-compute-budget-program", - "solana-config-program", - "solana-frozen-abi", - "solana-frozen-abi-macro", - "solana-logger", - "solana-measure", - "solana-metrics", - "solana-program-runtime", - "solana-rayon-threadlimit", - "solana-sdk", - "solana-stake-program", - "solana-vote-program", - "symlink", - "tar", - "tempfile", - "thiserror", - "zstd", -] - -[[package]] -name = "solana-sdk" -version = "1.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "145b2379d07a8a0dbf91fb71c4b605c5f206bff46010ad3b9a96bc9ca702ca5e" -dependencies = [ - "assert_matches", - "base64 0.13.0", - "bincode", - "borsh", - "bs58", - "bytemuck", - "byteorder", - "chrono", - "derivation-path", - "digest", - "ed25519-dalek", - "ed25519-dalek-bip32", - "generic-array", - "hmac 0.11.0", - "itertools", - "js-sys", - "lazy_static", - "libsecp256k1", - "log", - "memmap2", - "num-derive", - "num-traits", - "pbkdf2 0.9.0", - "qstring", - "rand 0.7.3", - "rand_chacha 0.2.2", - "rustc_version 0.4.0", - "rustversion", - "serde", - "serde_bytes", - "serde_derive", - "serde_json", - "sha2", - "sha3", - "solana-frozen-abi", - "solana-frozen-abi-macro", - "solana-logger", - "solana-program", - "solana-sdk-macro", - "thiserror", - "uriparse", - "wasm-bindgen", -] - -[[package]] -name = "solana-sdk-macro" -version = "1.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf60865744bbde0602df80f21c10c4c177a4b735e7c1d366914b9b7a585ed844" -dependencies = [ - "bs58", - "proc-macro2 1.0.36", - "quote 1.0.14", - "rustversion", - "syn 1.0.84", -] - -[[package]] -name = "solana-stake-program" -version = "1.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3027e4ccb2702804e63ccf1b3b696fd4bab129725866de6d9457e19149e2b5d8" -dependencies = [ - "bincode", - "log", - "num-derive", - "num-traits", - "rustc_version 0.4.0", - "serde", - "serde_derive", - "solana-config-program", - "solana-frozen-abi", - "solana-frozen-abi-macro", - "solana-metrics", - "solana-program-runtime", - "solana-sdk", - "solana-vote-program", - "thiserror", -] - -[[package]] -name = "solana-transaction-status" -version = "1.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e75f0d4f1aff60a879c1974352b40f2b76163c79611d722a4009c744d974db89" -dependencies = [ - "Inflector", - "base64 0.12.3", - "bincode", - "bs58", - "lazy_static", - "log", - "serde", - "serde_derive", - "serde_json", - "solana-account-decoder", - "solana-measure", - "solana-metrics", - "solana-runtime", - "solana-sdk", - "solana-vote-program", - "spl-associated-token-account", - "spl-memo", - "spl-token", - "thiserror", -] - -[[package]] -name = "solana-version" -version = "1.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4a0259c6c4aab09e378a4baefa2021f081020ac37eaeb20b8409a5abacba3d9" -dependencies = [ - "log", - "rustc_version 0.4.0", - "serde", - "serde_derive", - "solana-frozen-abi", - "solana-frozen-abi-macro", - "solana-sdk", -] - -[[package]] -name = "solana-vote-program" -version = "1.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a2927f1fb6d63d205e307a4aa553a477502bdf51e338eac0151aa76de89050f" -dependencies = [ - "bincode", - "log", - "num-derive", - "num-traits", - "rustc_version 0.4.0", - "serde", - "serde_derive", - "solana-frozen-abi", - "solana-frozen-abi-macro", - "solana-logger", - "solana-metrics", - "solana-program-runtime", - "solana-sdk", - "thiserror", -] - -[[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.2" @@ -4993,39 +2894,6 @@ dependencies = [ "lock_api", ] -[[package]] -name = "spl-associated-token-account" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "393e2240d521c3dd770806bff25c2c00d761ac962be106e14e22dd912007f428" -dependencies = [ - "solana-program", - "spl-token", -] - -[[package]] -name = "spl-memo" -version = "3.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd0dc6f70db6bacea7ff25870b016a65ba1d1b6013536f08e4fd79a8f9005325" -dependencies = [ - "solana-program", -] - -[[package]] -name = "spl-token" -version = "3.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93bfdd5bd7c869cb565c7d7635c4fafe189b988a0bdef81063cd9585c6b8dc01" -dependencies = [ - "arrayref", - "num-derive", - "num-traits", - "num_enum", - "solana-program", - "thiserror", -] - [[package]] name = "sqlformat" version = "0.1.8" @@ -5099,12 +2967,12 @@ dependencies = [ "either", "heck 0.3.3", "once_cell", - "proc-macro2 1.0.36", - "quote 1.0.14", + "proc-macro2", + "quote", "sha2", "sqlx-core", "sqlx-rt", - "syn 1.0.84", + "syn", "url", ] @@ -5119,12 +2987,6 @@ dependencies = [ "native-tls", ] -[[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" @@ -5141,12 +3003,6 @@ dependencies = [ "unicode-normalization", ] -[[package]] -name = "strsim" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" - [[package]] name = "strsim" version = "0.9.3" @@ -5165,32 +3021,15 @@ version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" -[[package]] -name = "symlink" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7973cce6668464ea31f176d85b13c7ab3bba2cb3b77a2ed26abd7801688010a" - -[[package]] -name = "syn" -version = "0.15.44" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ca4b3b69a77cbe1ffc9e198781b7acb0c7365a883670e8f1c1bc66fba79a5c5" -dependencies = [ - "proc-macro2 0.4.30", - "quote 0.6.13", - "unicode-xid 0.1.0", -] - [[package]] name = "syn" version = "1.0.84" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ecb2e6da8ee5eb9a61068762a32fa9619cc591ceb055b3687f4cd4051ec2e06b" dependencies = [ - "proc-macro2 1.0.36", - "quote 1.0.14", - "unicode-xid 0.2.2", + "proc-macro2", + "quote", + "unicode-xid", ] [[package]] @@ -5199,10 +3038,10 @@ version = "0.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f" dependencies = [ - "proc-macro2 1.0.36", - "quote 1.0.14", - "syn 1.0.84", - "unicode-xid 0.2.2", + "proc-macro2", + "quote", + "syn", + "unicode-xid", ] [[package]] @@ -5222,17 +3061,6 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" -[[package]] -name = "tar" -version = "0.4.38" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b55807c0344e1e6c04d7c965f5289c39a8d94ae23ed5c0b57aabac549f871c6" -dependencies = [ - "filetime", - "libc", - "xattr", -] - [[package]] name = "tempfile" version = "3.2.0" @@ -5244,7 +3072,7 @@ dependencies = [ "rand 0.8.4", "redox_syscall 0.2.10", "remove_dir_all", - "winapi 0.3.9", + "winapi", ] [[package]] @@ -5255,7 +3083,7 @@ checksum = "edd106a334b7657c10b7c540a0106114feadeb4dc314513e97df481d5d966f42" dependencies = [ "byteorder", "dirs 1.0.5", - "winapi 0.3.9", + "winapi", ] [[package]] @@ -5267,16 +3095,6 @@ dependencies = [ "winapi-util", ] -[[package]] -name = "terminal_size" -version = "0.1.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "633c1a546cee861a1a6d0dc69ebeca693bf4296661ba7852b9d21d159e0506df" -dependencies = [ - "libc", - "winapi 0.3.9", -] - [[package]] name = "termion" version = "1.5.6" @@ -5289,15 +3107,6 @@ dependencies = [ "redox_termios", ] -[[package]] -name = "textwrap" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060" -dependencies = [ - "unicode-width", -] - [[package]] name = "textwrap" version = "0.14.2" @@ -5319,9 +3128,9 @@ version = "1.0.30" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aa32fd3f627f367fe16f893e2597ae3c05020f8bba2666a4e6ea73d377e5714b" dependencies = [ - "proc-macro2 1.0.36", - "quote 1.0.14", - "syn 1.0.84", + "proc-macro2", + "quote", + "syn", ] [[package]] @@ -5332,26 +3141,7 @@ checksum = "6db9e6914ab8b1ae1c260a4ae7a49b6c5611b40328a735b21862567685e73255" dependencies = [ "libc", "wasi 0.10.0+wasi-snapshot-preview1", - "winapi 0.3.9", -] - -[[package]] -name = "tiny-bip39" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffc59cb9dfc85bb312c3a78fd6aa8a8582e310b0fa885d5bb877f6dcc601839d" -dependencies = [ - "anyhow", - "hmac 0.8.1", - "once_cell", - "pbkdf2 0.4.0", - "rand 0.7.3", - "rustc-hash", - "sha2", - "thiserror", - "unicode-normalization", - "wasm-bindgen", - "zeroize", + "winapi", ] [[package]] @@ -5378,61 +3168,6 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" -[[package]] -name = "tokio" -version = "1.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbbf1c778ec206785635ce8ad57fe52b3009ae9e0c9f574a728f3049d3e55838" -dependencies = [ - "bytes", - "libc", - "memchr", - "mio", - "num_cpus", - "once_cell", - "parking_lot", - "pin-project-lite", - "signal-hook-registry", - "tokio-macros", - "winapi 0.3.9", -] - -[[package]] -name = "tokio-macros" -version = "1.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b557f72f448c511a979e2564e55d74e6c4432fc96ff4f6241bc6bded342643b7" -dependencies = [ - "proc-macro2 1.0.36", - "quote 1.0.14", - "syn 1.0.84", -] - -[[package]] -name = "tokio-rustls" -version = "0.23.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a27d5f2b839802bd8267fa19b0530f5a08b9c08cd417976be2a65d130fe1c11b" -dependencies = [ - "rustls 0.20.2", - "tokio", - "webpki 0.22.0", -] - -[[package]] -name = "tokio-util" -version = "0.6.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e99e1983e5d376cd8eb4b66604d2e99e79f5bd988c3055891dcd8c9e2604cc0" -dependencies = [ - "bytes", - "futures-core", - "futures-sink", - "log", - "pin-project-lite", - "tokio", -] - [[package]] name = "toml" version = "0.5.8" @@ -5442,38 +3177,6 @@ dependencies = [ "serde", ] -[[package]] -name = "tower-service" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "360dfd1d6d30e05fda32ace2c8c70e9c0a9da713275777f5a4dbb8a1893930c6" - -[[package]] -name = "tracing" -version = "0.1.29" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "375a639232caf30edfc78e8d89b2d4c375515393e7af7e16f01cd96917fb2105" -dependencies = [ - "cfg-if 1.0.0", - "pin-project-lite", - "tracing-core", -] - -[[package]] -name = "tracing-core" -version = "0.1.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f4ed65637b8390770814083d20756f87bfa2c21bf2f110babdc5438351746e4" -dependencies = [ - "lazy_static", -] - -[[package]] -name = "try-lock" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" - [[package]] name = "ttf-parser" version = "0.12.3" @@ -5486,20 +3189,17 @@ version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6ad3713a14ae247f22a728a0456a545df14acf3867f905adff84be99e23b3ad1" dependencies = [ - "base64 0.13.0", + "base64", "byteorder", "bytes", "http", "httparse", "log", "rand 0.8.4", - "rustls 0.20.2", "sha-1", "thiserror", "url", "utf-8", - "webpki 0.22.0", - "webpki-roots 0.22.2", ] [[package]] @@ -5541,12 +3241,6 @@ version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3ed742d4ea2bd1176e236172c8429aaf54486e7ac098db29ffe6529e0ce50973" -[[package]] -name = "unicode-xid" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc" - [[package]] name = "unicode-xid" version = "0.2.2" @@ -5559,32 +3253,6 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "39ec24b3121d976906ece63c9daad25b85969647682eee313cb5779fdd69e14e" -[[package]] -name = "universal-hash" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f214e8f697e925001e66ec2c6e37a4ef93f0f78c2eed7814394e10c62025b05" -dependencies = [ - "generic-array", - "subtle", -] - -[[package]] -name = "untrusted" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" - -[[package]] -name = "uriparse" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e515b1ada404168e145ac55afba3c42f04cf972201a8552d42e2abb17c1b7221" -dependencies = [ - "fnv", - "lazy_static", -] - [[package]] name = "url" version = "2.2.2" @@ -5628,12 +3296,6 @@ version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" -[[package]] -name = "vec_map" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" - [[package]] name = "version_check" version = "0.9.4" @@ -5662,20 +3324,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56" dependencies = [ "same-file", - "winapi 0.3.9", + "winapi", "winapi-util", ] -[[package]] -name = "want" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0" -dependencies = [ - "log", - "try-lock", -] - [[package]] name = "wasi" version = "0.9.0+wasi-snapshot-preview1" @@ -5707,9 +3359,9 @@ dependencies = [ "bumpalo", "lazy_static", "log", - "proc-macro2 1.0.36", - "quote 1.0.14", - "syn 1.0.84", + "proc-macro2", + "quote", + "syn", "wasm-bindgen-shared", ] @@ -5731,7 +3383,7 @@ version = "0.2.78" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d56146e7c495528bf6587663bea13a8eb588d39b36b679d83972e1a2dbbdacf9" dependencies = [ - "quote 1.0.14", + "quote", "wasm-bindgen-macro-support", ] @@ -5741,9 +3393,9 @@ version = "0.2.78" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7803e0eea25835f8abdc585cd3021b3deb11543c6fe226dcd30b228857c5c5ab" dependencies = [ - "proc-macro2 1.0.36", - "quote 1.0.14", - "syn 1.0.84", + "proc-macro2", + "quote", + "syn", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -5764,44 +3416,6 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "webpki" -version = "0.21.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8e38c0608262c46d4a56202ebabdeb094cef7e560ca7a226c6bf055188aa4ea" -dependencies = [ - "ring", - "untrusted", -] - -[[package]] -name = "webpki" -version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f095d78192e208183081cc07bc5515ef55216397af48b873e5edcd72637fa1bd" -dependencies = [ - "ring", - "untrusted", -] - -[[package]] -name = "webpki-roots" -version = "0.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8eff4b7516a57307f9349c64bf34caa34b940b66fed4b2fb3136cb7386e5739" -dependencies = [ - "webpki 0.21.4", -] - -[[package]] -name = "webpki-roots" -version = "0.22.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "552ceb903e957524388c4d3475725ff2c8b7960922063af6ce53c9a43da07449" -dependencies = [ - "webpki 0.22.0", -] - [[package]] name = "weezl" version = "0.1.5" @@ -5817,12 +3431,6 @@ dependencies = [ "cc", ] -[[package]] -name = "winapi" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" - [[package]] name = "winapi" version = "0.3.9" @@ -5833,12 +3441,6 @@ dependencies = [ "winapi-x86_64-pc-windows-gnu", ] -[[package]] -name = "winapi-build" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" - [[package]] name = "winapi-i686-pc-windows-gnu" version = "0.4.0" @@ -5851,7 +3453,7 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" dependencies = [ - "winapi 0.3.9", + "winapi", ] [[package]] @@ -5860,32 +3462,13 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" -[[package]] -name = "winreg" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0120db82e8a1e0b9fb3345a539c478767c0048d842860994d96113d5b667bd69" -dependencies = [ - "winapi 0.3.9", -] - [[package]] name = "wio" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5d129932f4644ac2396cb456385cbf9e63b5b30c6e8dc4820bdca4eb082037a5" dependencies = [ - "winapi 0.3.9", -] - -[[package]] -name = "ws2_32-sys" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e" -dependencies = [ - "winapi 0.2.8", - "winapi-build", + "winapi", ] [[package]] @@ -5897,24 +3480,6 @@ dependencies = [ "tap", ] -[[package]] -name = "xattr" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "244c3741f4240ef46274860397c7c74e50eb23624996930e484c16679633a54c" -dependencies = [ - "libc", -] - -[[package]] -name = "yaml-rust" -version = "0.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56c1936c4cc7a1c9ab21a1ebb602eb942ba868cbd44a99cb7cdc5892335e1c85" -dependencies = [ - "linked-hash-map", -] - [[package]] name = "zeroize" version = "1.4.3" @@ -5930,9 +3495,9 @@ version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "65f1a51723ec88c66d5d1fe80c841f17f63587d6691901d66be9bec6c3b51f73" dependencies = [ - "proc-macro2 1.0.36", - "quote 1.0.14", - "syn 1.0.84", + "proc-macro2", + "quote", + "syn", "synstructure", ] @@ -5947,7 +3512,7 @@ dependencies = [ "asynchronous-codec", "bytes", "crossbeam", - "dashmap 3.11.10", + "dashmap", "enum-primitive-derive", "futures", "futures-util", @@ -5960,32 +3525,3 @@ dependencies = [ "thiserror", "uuid", ] - -[[package]] -name = "zstd" -version = "0.9.1+zstd.1.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "538b8347df9257b7fbce37677ef7535c00a3c7bf1f81023cc328ed7fe4b41de8" -dependencies = [ - "zstd-safe", -] - -[[package]] -name = "zstd-safe" -version = "4.1.2+zstd.1.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fb4cfe2f6e6d35c5d27ecd9d256c4b6f7933c4895654917460ec56c29336cc1" -dependencies = [ - "libc", - "zstd-sys", -] - -[[package]] -name = "zstd-sys" -version = "1.6.2+zstd.1.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2daf2f248d9ea44454bfcb2516534e8b8ad2fc91bf818a1885495fc42bc8ac9f" -dependencies = [ - "cc", - "libc", -] diff --git a/Cargo.toml b/Cargo.toml index 5b94f2c2d..3ec73bb57 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,7 +9,7 @@ license = "AGPL-3.0-only" edition = "2021" [lib] -name = "drk" +name = "darkfi" [dependencies.halo2_gadgets] git = "https://github.com/parazyd/halo2_gadgets.git" @@ -84,43 +84,13 @@ libsqlite3-sys = {version = "0.23.1", features = ["bundled-sqlcipher"]} # Used for gatewayd network transport. zeromq = {version = "0.3.1", default-features = false, features = ["async-std-runtime", "all-transport"]} -# Cashier Bitcoin dependencies -bdk = {version = "0.14.0", optional = true} -bitcoin = {version = "0.27.1", optional = true} -secp256k1 = {version = "0.20.3", default-features = false, features = ["rand-std"], optional = true} - -# Cashier Ethereum dependencies -hash-db = {version = "0.15.2", optional = true} -keccak-hasher = {version = "0.15.3", optional = true} - -# Cashier Solana dependencies -solana-client = {version = "1.8.11", optional = true} -solana-sdk = {version = "1.8.11", optional = true} -spl-associated-token-account = {version = "1.0.3", features = ["no-entrypoint"], optional = true} -spl-token = {version = "3.2.0", features = ["no-entrypoint"], optional = true} - -# Darkpulse and tui dependencies -aes-gcm = {version = "0.9.4", optional = true} -chrono = {version = "0.4.19", optional = true} -rusqlite = {version = "0.26.3", optional = true} +#tui dependencies crossbeam-channel = { version = "0.5.1", optional = true} libc = { version = "0.2.112", optional = true} termion = { version = "1.5.6", optional = true} [features] -btc = ["bdk", "bitcoin", "secp256k1"] -eth = ["keccak-hasher", "hash-db"] -sol = ["solana-sdk", "solana-client", "spl-token", "spl-associated-token-account"] -darkpulse = ["aes-gcm", "chrono","rusqlite"] -tui = ["termion", "chrono","libc", "crossbeam-channel"] - -[[bin]] -name = "darkpulse" -required-features = ["darkpulse"] - -[[bin]] -name = "eth" -required-features = ["eth"] +tui = ["termion", "libc", "crossbeam-channel"] [[bin]] name = "tui_ex" diff --git a/bin/cashier/.gitignore b/bin/cashier/.gitignore new file mode 100644 index 000000000..47eeb99a3 --- /dev/null +++ b/bin/cashier/.gitignore @@ -0,0 +1,3 @@ + +/target +Cargo.lock diff --git a/bin/cashier/Cargo.toml b/bin/cashier/Cargo.toml new file mode 100644 index 000000000..dc5925d47 --- /dev/null +++ b/bin/cashier/Cargo.toml @@ -0,0 +1,61 @@ +[package] +name = "cashier" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +darkfi = {path= "../../"} + +# Encoding and parsing +serde_json = "1.0.72" +serde = {version = "1.0.130", features = ["derive"]} +hex = "0.4.3" +url = "2.2.2" + +# Utilities +clap = { version = "3.0.0", features = ["derive"] } +log = "0.4.14" +simplelog = "0.11.1" +thiserror = "1.0.30" +rand = "0.8.4" +num_cpus = "1.13.0" +lazy_static = "1.4.0" +anyhow = "1.0.49" +num-bigint = {version = "0.4.3", features = ["rand", "serde"]} + +# Used for Websockets client implementation. +async-tungstenite = "0.16.0" +tungstenite = "0.16.0" + +# Async +async-std = "1.10.0" +async-trait = "0.1.51" +async-channel = "1.6.1" +easy-parallel = "3.1.0" +async-executor = "1.4.1" +futures = "0.3.17" +smol = "1.2.5" +native-tls = "0.2.8" +async-native-tls = "0.4.0" + +# Cashier Bitcoin dependencies +bdk = {version = "0.14.0", optional = true} +bitcoin = {version = "0.27.1", optional = true} +secp256k1 = {version = "0.20.3", default-features = false, features = ["rand-std"], optional = true} + +# Cashier Ethereum dependencies +hash-db = {version = "0.15.2", optional = true} +keccak-hasher = {version = "0.15.3", optional = true} + +# Cashier Solana dependencies +solana-client = {version = "1.8.11", optional = true} +solana-sdk = {version = "1.8.11", optional = true} +spl-associated-token-account = {version = "1.0.3", features = ["no-entrypoint"], optional = true} +spl-token = {version = "3.2.0", features = ["no-entrypoint"], optional = true} + +[features] +btc = ["bdk", "bitcoin", "secp256k1"] +eth = ["keccak-hasher", "hash-db"] +sol = ["solana-sdk", "solana-client", "spl-token", "spl-associated-token-account"] diff --git a/src/bin/eth.rs b/bin/cashier/example/eth.rs similarity index 83% rename from src/bin/eth.rs rename to bin/cashier/example/eth.rs index f4a2105d6..aaa45c12a 100644 --- a/src/bin/eth.rs +++ b/bin/cashier/example/eth.rs @@ -1,8 +1,8 @@ use num_bigint::BigUint; use simplelog::{ColorChoice, LevelFilter, TermLogger, TerminalMode}; -use drk::{ - service::eth::{erc20_transfer_data, EthClient, EthTx, Keypair}, +use darkfi::{ + service::eth::{erc20_transfer_data, EthClient, EthTx}, util::{decode_base10, encode_base10}, Result, }; @@ -19,12 +19,10 @@ async fn main() -> Result<()> { let acc = "0x113b6648f34f4d0340d04ff171cbcf0b49d47827".to_string(); let key = "67cbb73cb293eea5fa2a7025d5479dbd50319010c03fd8821917ad0d9d53276c".to_string(); - let mut eth = EthClient::new( - "/home/parazyd/.ethereum/ropsten/geth.ipc".to_string(), - String::from("foobar"), - ); + let mut eth = EthClient::new("", "/home/parazyd/.ethereum/ropsten/geth.ipc", "foobar"); - eth.set_main_keypair(&Keypair { private_key: key, public_key: acc.clone() }); + eth.main_keypair.private_key = key; + eth.main_keypair.public_key = acc.clone(); //let key = generate_privkey(); //let passphrase = "foobar".to_string(); @@ -49,13 +47,13 @@ async fn main() -> Result<()> { /* // Transfer native ETH let tx = EthTx::new( - &acc, - &dest, - None, - None, - Some(decode_base10("0.051", 18, true)?), - None, - None, + &acc, + &dest, + None, + None, + Some(decode_base10("0.051", 18, true)?), + None, + None, ); let rep = eth.send_transaction(&tx, &passphrase).await?; diff --git a/bin/cashier/src/lib.rs b/bin/cashier/src/lib.rs new file mode 100644 index 000000000..1f278a4d5 --- /dev/null +++ b/bin/cashier/src/lib.rs @@ -0,0 +1 @@ +pub mod service; diff --git a/src/bin/cashierd.rs b/bin/cashier/src/main.rs similarity index 71% rename from src/bin/cashierd.rs rename to bin/cashier/src/main.rs index 02f332d85..67cb135d1 100644 --- a/src/bin/cashierd.rs +++ b/bin/cashier/src/main.rs @@ -10,7 +10,7 @@ use rand::rngs::OsRng; use serde_json::{json, Value}; use simplelog::{ColorChoice, LevelFilter, TermLogger, TerminalMode}; -use drk::{ +use darkfi::{ blockchain::{rocks::columns, Rocks, RocksColumn}, circuit::{MintContract, SpendContract}, cli::{CashierdConfig, CliCashierd, Config}, @@ -23,18 +23,19 @@ use drk::{ jsonrpc::{error as jsonerr, response as jsonresp, ErrorCode::*, JsonRequest, JsonResult}, rpcserver::{listen_and_serve, RequestHandler, RpcServerConfig}, }, - serial::{deserialize, serialize}, - service::{bridge, bridge::Bridge}, + serial::serialize, state::State, types::DrkTokenId, util::{expand_path, generate_id2, join_config_path, parse::truncate, Address, NetworkName}, wallet::{ - cashierdb::{CashierDb, TokenKey}, + cashierdb::CashierDb, walletdb::WalletDb, }, Error, Result, }; +use cashier::service::{bridge, bridge::Bridge}; + fn handle_bridge_error(error_code: u32) -> Result<()> { match error_code { 1 => Err(Error::BridgeError("Not Supported Client".into())), @@ -55,7 +56,7 @@ struct Cashierd { bridge: Arc, cashier_wallet: Arc, networks: Vec, - public_key: String, + public_key: Address, config: CashierdConfig, } @@ -81,18 +82,17 @@ impl RequestHandler for Cashierd { } impl Cashierd { - async fn new(config: CashierdConfig) -> Result { + async fn new(config: CashierdConfig, public_key: Address) -> Result { debug!(target: "CASHIER DAEMON", "Initialize"); let wallet_path = format!("sqlite://{}", expand_path(&config.cashier_wallet_path)?.to_str().unwrap()); - let cashier_wallet = - CashierDb::new(&wallet_path, config.cashier_wallet_password.clone()).await?; + + let cashier_wallet = CashierDb::new(&wallet_path, &config.cashier_wallet_password).await?; let mut networks = Vec::new(); - let cfg = config.clone(); - for network in cfg.networks { + for network in config.clone().networks { networks.push(Network { name: NetworkName::from_str(&network.name)?, blockchain: network.blockchain, @@ -102,7 +102,7 @@ impl Cashierd { let bridge = bridge::Bridge::new(); - Ok(Self { bridge, cashier_wallet, networks, public_key: String::from(""), config }) + Ok(Self { bridge, cashier_wallet, networks, public_key, config }) } async fn start( @@ -111,150 +111,55 @@ impl Cashierd { state: Arc>, executor: Arc>, ) -> Result<(smol::Task>, smol::Task>)> { + self.cashier_wallet.init_db().await?; + for network in self.networks.iter() { match network.name { #[cfg(feature = "sol")] NetworkName::Solana => { debug!(target: "CASHIER DAEMON", "Adding solana network"); - use drk::service::{sol::SolFailed, SolClient}; - use solana_sdk::{signature::Signer, signer::keypair::Keypair}; + use drk::service::SolClient; - let bridge2 = self.bridge.clone(); + let _bridge = self.bridge.clone(); - let main_keypair: Keypair; + let sol_client = SolClient::new(self.cashier_wallet.clone(), &network.blockchain, &network.keypair).await?; - let main_keypairs = - self.cashier_wallet.get_main_keys(&NetworkName::Solana).await?; - - if network.keypair.is_empty() { - if main_keypairs.is_empty() { - main_keypair = Keypair::new(); - self.cashier_wallet - .put_main_keys( - &TokenKey { - secret_key: serialize(&main_keypair), - public_key: serialize(&main_keypair.pubkey()), - }, - &NetworkName::Solana, - ) - .await?; - } else { - main_keypair = - deserialize(&main_keypairs[main_keypairs.len() - 1].secret_key)?; - } - } else { - let keypair_str = drk::cli::cli_config::load_keypair_to_str(expand_path( - &network.keypair.clone(), - )?)?; - let keypair_bytes: Vec = serde_json::from_str(&keypair_str)?; - main_keypair = Keypair::from_bytes(&keypair_bytes) - .map_err(|e| SolFailed::Signature(e.to_string()))?; - } - - let sol_client = SolClient::new(main_keypair, &network.blockchain).await?; - - bridge2.add_clients(NetworkName::Solana, sol_client).await?; + _bridge.add_clients(NetworkName::Solana, sol_client).await?; } #[cfg(feature = "eth")] NetworkName::Ethereum => { debug!(target: "CASHIER DAEMON", "Adding ethereum network"); - use drk::service::{ - eth::{generate_privkey, Keypair}, - EthClient, - }; - let bridge2 = self.bridge.clone(); + use drk::service::EthClient; - let main_keypair: Keypair; - - let main_keypairs = - self.cashier_wallet.get_main_keys(&NetworkName::Ethereum).await?; + let _bridge = self.bridge.clone(); let passphrase = self.config.geth_passphrase.clone(); let mut eth_client = EthClient::new( - expand_path(&self.config.geth_socket)?.to_str().unwrap().into(), - passphrase.clone(), + &network.blockchain, + expand_path(&self.config.geth_socket)?.to_str().unwrap(), + &passphrase, ); - if main_keypairs.is_empty() { - let main_private_key = generate_privkey(); - let main_public_key = eth_client - .import_privkey(&main_private_key, &passphrase) - .await? - .as_str() - .unwrap() - .to_string(); + eth_client.setup_keypair(self.cashier_wallet.clone(), &network.keypair).await?; - self.cashier_wallet - .put_main_keys( - &TokenKey { - secret_key: serialize(&main_private_key), - public_key: serialize(&main_public_key), - }, - &NetworkName::Ethereum, - ) - .await?; - - main_keypair = - Keypair { private_key: main_private_key, public_key: main_public_key }; - } else { - let last_keypair = &main_keypairs[main_keypairs.len() - 1]; - - main_keypair = Keypair { - private_key: deserialize(&last_keypair.secret_key)?, - public_key: deserialize(&last_keypair.public_key)?, - } - } - - eth_client.set_main_keypair(&main_keypair); - - bridge2.add_clients(NetworkName::Ethereum, Arc::new(eth_client)).await?; + _bridge.add_clients(NetworkName::Ethereum, Arc::new(eth_client)).await?; } #[cfg(feature = "btc")] NetworkName::Bitcoin => { debug!(target: "CASHIER DAEMON", "Adding bitcoin network"); - use drk::service::btc::{BtcClient, BtcFailed, Keypair}; + use drk::service::btc::BtcClient; - let bridge2 = self.bridge.clone(); + let _bridge = self.bridge.clone(); - let main_keypair: Keypair; + let btc_client = BtcClient::new(self.cashier_wallet.clone(), &network.blockchain, &network.keypair).await?; - let main_keypairs = - self.cashier_wallet.get_main_keys(&NetworkName::Bitcoin).await?; - - if network.keypair.is_empty() { - if main_keypairs.is_empty() { - main_keypair = Keypair::new(); - self.cashier_wallet - .put_main_keys( - &TokenKey { - secret_key: serialize(&main_keypair), - public_key: serialize(&main_keypair.pubkey()), - }, - &NetworkName::Bitcoin, - ) - .await?; - } else { - main_keypair = - deserialize(&main_keypairs[main_keypairs.len() - 1].secret_key)?; - } - } else { - let keypair_str = drk::cli::cli_config::load_keypair_to_str(expand_path( - &network.keypair.clone(), - )?)?; - let keypair_bytes: Vec = serde_json::from_str(&keypair_str)?; - main_keypair = Keypair::from_bytes(&keypair_bytes) - .map_err(|e| BtcFailed::DecodeAndEncodeError(e.to_string()))?; - } - - let btc_client = BtcClient::new(main_keypair, &network.blockchain).await?; - - bridge2.add_clients(NetworkName::Bitcoin, btc_client).await?; + _bridge.add_clients(NetworkName::Bitcoin, btc_client).await?; } _ => {} } @@ -285,8 +190,8 @@ impl Cashierd { recv_coin.clone(), ex2.clone(), ) - .await?; - } + .await?; + } }); let bridge2 = self.bridge.clone(); @@ -312,7 +217,7 @@ impl Cashierd { state.clone(), ) .await?; - } + } Ok(()) }); @@ -352,7 +257,7 @@ impl Cashierd { amount, ), }) - .await?; + .await?; // receive a response let res = bridge_subscribtion.receiver.recv().await?; @@ -372,7 +277,7 @@ impl Cashierd { &withdraw_token.network, ) .await?; - } + } _ => { return Err(Error::BridgeError("Receive unknown value from Subscription".into())) } @@ -436,9 +341,9 @@ impl Cashierd { // Check if the features list contains this network if !self.networks.iter().any(|net| net.name == network) { return JsonResult::Err(jsonerr( - InvalidParams, - Some(format!("Cashier doesn't support this network: {}", network)), - id, + InvalidParams, + Some(format!("Cashier doesn't support this network: {}", network)), + id, )) } @@ -483,15 +388,15 @@ impl Cashierd { network: network.clone(), payload: bridge::BridgeRequestsPayload::Watch(None), }) - .await?; - } else { - let keypair = check[0].clone(); - bridge_subscribtion - .sender - .send(bridge::BridgeRequests { - network: network.clone(), - payload: bridge::BridgeRequestsPayload::Watch(Some(keypair)), - }) + .await?; + } else { + let keypair = check[0].clone(); + bridge_subscribtion + .sender + .send(bridge::BridgeRequests { + network: network.clone(), + payload: bridge::BridgeRequestsPayload::Watch(Some(keypair)), + }) .await?; } @@ -561,9 +466,9 @@ impl Cashierd { // Check if the features list contains this network if !self.networks.iter().any(|net| net.name == network) { return JsonResult::Err(jsonerr( - InvalidParams, - Some(format!("Cashier doesn't support this network: {}", network)), - id, + InvalidParams, + Some(format!("Cashier doesn't support this network: {}", network)), + id, )) } @@ -583,8 +488,8 @@ impl Cashierd { if let Some(addr) = self .cashier_wallet - .get_withdraw_keys_by_token_public_key(&address, &network) - .await? + .get_withdraw_keys_by_token_public_key(&address, &network) + .await? { cashier_public = addr.public; } else { @@ -640,7 +545,7 @@ impl Cashierd { { "server_version": env!("CARGO_PKG_VERSION"), "protocol_version": "1.0", - "public_key": self.public_key, + "public_key": self.public_key.to_string(), "networks": [], "hosts": { "tcp_port": tcp_port, @@ -669,12 +574,10 @@ async fn start( config: &CashierdConfig, get_address_flag: bool, ) -> Result<()> { - let mut cashierd = Cashierd::new(config.clone()).await?; - let client_wallet_path = format!("sqlite://{}", expand_path(&config.client_wallet_path)?.to_str().unwrap()); - let client_wallet = - WalletDb::new(&client_wallet_path, config.client_wallet_password.clone()).await?; + + let client_wallet = WalletDb::new(&client_wallet_path, &config.client_wallet_password).await?; let rocks = Rocks::new(expand_path(&config.database_path.clone())?.as_path())?; @@ -683,37 +586,42 @@ async fn start( info!("Building verifying key for the spend contract..."); let spend_vk = VerifyingKey::build(11, SpendContract::default()); - let client = Client::new( - rocks.clone(), - (config.gateway_protocol_url.parse()?, config.gateway_publisher_url.parse()?), - client_wallet.clone(), - ) - .await?; + // new Client + let gateway_urls = + (config.gateway_protocol_url.parse()?, config.gateway_publisher_url.parse()?); + let client = Client::new(rocks.clone(), gateway_urls, client_wallet.clone()).await?; let tree = client.get_tree().await?; let merkle_roots = RocksColumn::::new(rocks.clone()); let nullifiers = RocksColumn::::new(rocks); + // get cashier public key let cashier_public = client.main_keypair.public; - let cashier_public_str = Address::from(cashier_public).to_string(); - cashierd.public_key = cashier_public_str.clone(); - let cashier_public_keys = vec![cashier_public]; + // new Cashier daemon + let mut cashierd = Cashierd::new(config.clone(), Address::from(cashier_public)).await?; + // this will print the cashier public key and exit + if get_address_flag { + info!("Public Key: {}", cashierd.public_key); + return Ok(()) + }; + + // new State + let public_keys = vec![cashier_public]; let state = Arc::new(Mutex::new(State { tree, merkle_roots, nullifiers, - public_keys: cashier_public_keys, + public_keys, mint_vk, spend_vk, })); - if get_address_flag { - info!("Public Key: {}", cashier_public_str); - return Ok(()) - }; + // start cashier + let (t1, t2) = cashierd.start(client, state, executor.clone()).await?; + // config for rpc let cfg = RpcServerConfig { socket_addr: config.rpc_listen_address, use_tls: config.serve_tls, @@ -721,7 +629,7 @@ async fn start( identity_pass: config.tls_identity_password.clone(), }; - let (t1, t2) = cashierd.start(client, state, executor.clone()).await?; + // listen and serve RPC listen_and_serve(cfg, Arc::new(cashierd), executor).await?; t1.cancel().await; @@ -760,26 +668,27 @@ async fn main() -> Result<()> { if args.refresh { info!(target: "CASHIER DAEMON", "Refresh the wallet and the database"); + + // refresh cashier's client wallet let client_wallet_path = format!("sqlite://{}", expand_path(&config.client_wallet_path)?.to_str().unwrap()); let client_wallet = - WalletDb::new(&client_wallet_path, config.client_wallet_password.clone()).await?; - + WalletDb::new(&client_wallet_path, &config.client_wallet_password).await?; client_wallet.remove_own_coins().await?; + // refresh cashier wallet let wallet_path = format!("sqlite://{}", expand_path(&config.cashier_wallet_path)?.to_str().unwrap()); - let wallet = CashierDb::new(&wallet_path, config.cashier_wallet_password.clone()).await?; - + let wallet = CashierDb::new(&wallet_path, &config.cashier_wallet_password).await?; wallet.remove_withdraw_and_deposit_keys().await?; + // refresh rocks database if let Some(path) = expand_path(&config.database_path)?.to_str() { info!(target: "CASHIER DAEMON", "Remove database: {}", path); std::fs::remove_dir_all(path)?; } info!("Wallet updated successfully."); - return Ok(()) } @@ -800,47 +709,9 @@ async fn main() -> Result<()> { smol::future::block_on(async move { start(ex2, &config, get_address_flag).await?; drop(signal); - Ok::<(), drk::Error>(()) + Ok::<(), darkfi::Error>(()) }) }); result } - -// async fn resume_watch_deposit_keys( -// bridge: Arc, -// cashier_wallet: Arc, -// networks: Vec, -// executor: Arc>, -// ) -> Result<()> { -// debug!(target: "CASHIER DAEMON", "Resume watch deposit keys"); - -// for network in networks.iter() { -// let keypairs_to_watch = -// cashier_wallet.get_deposit_token_keys_by_network(&network.name)?; - -// for deposit_token in keypairs_to_watch { -// let bridge = bridge.clone(); - -// let bridge_subscribtion = bridge -// .subscribe( -// deposit_token.drk_public_key, -// Some(deposit_token.mint_address), -// executor.clone(), -// ) -// .await; - -// bridge_subscribtion -// .sender -// .send(bridge::BridgeRequests { -// network: network.name.clone(), -// payload: bridge::BridgeRequestsPayload::Watch(Some( -// deposit_token.token_key, -// )), -// }) -// .await?; -// } -// } - -// Ok(()) -// } diff --git a/src/service/bridge.rs b/bin/cashier/src/service/bridge.rs similarity index 99% rename from src/service/bridge.rs rename to bin/cashier/src/service/bridge.rs index 29db946f6..e0c3ee577 100644 --- a/src/service/bridge.rs +++ b/bin/cashier/src/service/bridge.rs @@ -6,7 +6,7 @@ use async_trait::async_trait; use futures::stream::{FuturesUnordered, StreamExt}; use log::{debug, error}; -use crate::{ +use darkfi::{ crypto::keypair::PublicKey, types::*, util::NetworkName, wallet::cashierdb::TokenKey, Error, Result, }; diff --git a/src/service/btc.rs b/bin/cashier/src/service/btc.rs similarity index 91% rename from src/service/btc.rs rename to bin/cashier/src/service/btc.rs index a751684c6..bae14910b 100644 --- a/src/service/btc.rs +++ b/bin/cashier/src/service/btc.rs @@ -41,10 +41,11 @@ use secp256k1::{ }; use super::bridge::{NetworkClient, TokenNotification, TokenSubscribtion}; -use crate::{ +use darkfi::{ crypto::keypair::PublicKey as DrkPublicKey, serial::{deserialize, serialize, Decodable, Encodable}, - util::{generate_id2, NetworkName}, + util::{generate_id2, NetworkName, load_keypair_to_str, expand_path}, + wallet::cashierdb::{CashierDb, TokenKey}, Error, Result, }; @@ -228,7 +229,7 @@ impl Client { let _client = ElectrumClient::from_config(electrum_url, config)?; let electrum = ElectrumClient::new(electrum_url) - .map_err(|err| crate::Error::from(super::BtcFailed::from(err)))?; + .map_err(|err| darkfi::Error::from(super::BtcFailed::from(err)))?; let latest_block = electrum.block_headers_subscribe()?; @@ -239,10 +240,10 @@ impl Client { electrum, subscriptions: Vec::new(), latest_block_height: BlockHeight::try_from(latest_block) - .map_err(|_| crate::Error::TryFromError)?, - last_sync: Instant::now(), - sync_interval: interval, - script_history: Default::default(), + .map_err(|_| darkfi::Error::TryFromError)?, + last_sync: Instant::now(), + sync_interval: interval, + script_history: Default::default(), }) } fn update_state(&mut self) -> Result<()> { @@ -306,8 +307,8 @@ impl Client { Ok(ScriptStatus::InMempool) } else { Ok(ScriptStatus::Confirmed(Confirmed::from_inclusion_and_latest_block( - u32::try_from(last.height).map_err(|_| crate::Error::TryFromError)?, - u32::from(self.latest_block_height), + u32::try_from(last.height).map_err(|_| darkfi::Error::TryFromError)?, + u32::from(self.latest_block_height), ))) } } @@ -319,10 +320,42 @@ pub struct BtcClient { client: Arc>, notify_channel: (async_channel::Sender, async_channel::Receiver), - network: Network, + network: Network, } impl BtcClient { - pub async fn new(main_keypair: Keypair, network: &str) -> Result> { + pub async fn new(cashier_wallet: Arc, network: &str, keypair_path: &str) -> Result> { + + let main_keypair: Keypair; + + let main_keypairs = + cashier_wallet.get_main_keys(&NetworkName::Bitcoin).await?; + + if keypair_path.is_empty() { + if main_keypairs.is_empty() { + main_keypair = Keypair::new(); + cashier_wallet + .put_main_keys( + &TokenKey { + secret_key: serialize(&main_keypair), + public_key: serialize(&main_keypair.pubkey()), + }, + &NetworkName::Bitcoin, + ) + .await?; + } else { + main_keypair = + deserialize(&main_keypairs[main_keypairs.len() - 1].secret_key)?; + } + } else { + let keypair_str = load_keypair_to_str(expand_path( + &keypair_path, + )?)?; + let keypair_bytes: Vec = serde_json::from_str(&keypair_str)?; + main_keypair = Keypair::from_bytes(&keypair_bytes) + .map_err(|e| BtcFailed::DecodeAndEncodeError(e.to_string()))?; + } + + let notify_channel = async_channel::unbounded(); let (network, url) = match network { @@ -417,7 +450,7 @@ impl BtcClient { received_balance: amnt as u64, decimals: 8, }) - .await + .await .map_err(Error::from)?; info!(target: "BTC BRIDGE", "Received {} btc", ui_amnt); @@ -523,7 +556,7 @@ impl NetworkClient for BtcClient { error!(target: "BTC BRIDGE SUBSCRIPTION","{}", e.to_string()); } }) - .detach(); + .detach(); Ok(TokenSubscribtion { private_key, public_key }) } @@ -547,7 +580,7 @@ impl NetworkClient for BtcClient { error!(target: "BTC BRIDGE SUBSCRIPTION","{}", e.to_string()); } }) - .detach(); + .detach(); Ok(public_key) } @@ -739,7 +772,7 @@ impl Decodable for bitcoin::Address { fn decode(mut d: D) -> Result { let addr: String = Decodable::decode(&mut d)?; let addr = bitcoin::Address::from_str(&addr) - .map_err(|err| crate::Error::from(BtcFailed::from(err)))?; + .map_err(|err| darkfi::Error::from(BtcFailed::from(err)))?; Ok(addr) } } @@ -756,7 +789,7 @@ impl Decodable for bitcoin::PublicKey { fn decode(mut d: D) -> Result { let key: Vec = Decodable::decode(&mut d)?; let key = bitcoin::PublicKey::from_slice(&key) - .map_err(|err| crate::Error::from(BtcFailed::from(err)))?; + .map_err(|err| darkfi::Error::from(BtcFailed::from(err)))?; Ok(key) } } @@ -773,7 +806,7 @@ impl Decodable for bitcoin::PrivateKey { fn decode(mut d: D) -> Result { let key: String = Decodable::decode(&mut d)?; let key = bitcoin::PrivateKey::from_str(&key) - .map_err(|err| crate::Error::from(BtcFailed::from(err)))?; + .map_err(|err| darkfi::Error::from(BtcFailed::from(err)))?; Ok(key) } } @@ -788,7 +821,7 @@ impl Decodable for secp256k1::key::PublicKey { fn decode(mut d: D) -> Result { let key: Vec = Decodable::decode(&mut d)?; let key = secp256k1::key::PublicKey::from_slice(&key) - .map_err(|err| crate::Error::from(BtcFailed::from(err)))?; + .map_err(|err| darkfi::Error::from(BtcFailed::from(err)))?; Ok(key) } } @@ -805,7 +838,7 @@ impl Decodable for Keypair { fn decode(mut d: D) -> Result { let key: Vec = Decodable::decode(&mut d)?; let key = Keypair::from_bytes(key.as_slice()).map_err(|_| { - crate::Error::from(BtcFailed::DecodeAndEncodeError("load keypair from slice".into())) + darkfi::Error::from(BtcFailed::DecodeAndEncodeError("load keypair from slice".into())) })?; Ok(key) } @@ -829,8 +862,8 @@ pub enum BtcFailed { Notification(String), } -impl From for BtcFailed { - fn from(err: crate::error::Error) -> BtcFailed { +impl From for BtcFailed { + fn from(err: darkfi::error::Error) -> BtcFailed { BtcFailed::BtcError(err.to_string()) } } @@ -866,11 +899,14 @@ pub type BtcResult = std::result::Result; #[cfg(test)] mod tests { - use super::Keypair; - use crate::serial::{deserialize, serialize}; - use secp256k1::constants::{PUBLIC_KEY_SIZE, SECRET_KEY_SIZE}; use std::str::FromStr; + use secp256k1::constants::{PUBLIC_KEY_SIZE, SECRET_KEY_SIZE}; + + use darkfi::serial::{deserialize, serialize}; + + use super::Keypair; + const KEYPAIR_LENGTH: usize = SECRET_KEY_SIZE + PUBLIC_KEY_SIZE; #[test] diff --git a/src/service/eth.rs b/bin/cashier/src/service/eth.rs similarity index 85% rename from src/service/eth.rs rename to bin/cashier/src/service/eth.rs index c000919e0..e2c85a5c9 100644 --- a/src/service/eth.rs +++ b/bin/cashier/src/service/eth.rs @@ -13,11 +13,12 @@ use serde_json::{json, Value}; use super::bridge::{NetworkClient, TokenNotification, TokenSubscribtion}; -use crate::{ +use darkfi::{ crypto::keypair::PublicKey, rpc::{jsonrpc, jsonrpc::JsonResult}, serial::{deserialize, serialize, Decodable, Encodable}, util::{generate_id2, parse::truncate, sleep, NetworkName}, + wallet::cashierdb::{CashierDb, TokenKey}, Error, Result, }; @@ -189,7 +190,7 @@ impl EthTx { // INFO [10-25|19:47:32.845] IPC endpoint opened: url=/home/x/.ethereum/ropsten/geth.ipc // pub struct EthClient { - main_keypair: Keypair, + pub main_keypair: Keypair, passphrase: String, socket_path: String, subscriptions: Arc>>, @@ -198,21 +199,69 @@ pub struct EthClient { } impl EthClient { - pub fn new(socket_path: String, passphrase: String) -> Self { + pub fn new(_network: &str, socket_path: &str, passphrase: &str) -> Self { + let notify_channel = async_channel::unbounded(); + let subscriptions = Arc::new(Mutex::new(Vec::new())); + + + let main_keypair = Keypair{ public_key: "".into(), private_key: "".into()}; + Self { - // This must be set by the cashier - main_keypair: Keypair { private_key: String::new(), public_key: String::new() }, - passphrase, - socket_path, + main_keypair, + passphrase: passphrase.into(), + socket_path: socket_path.into(), subscriptions, notify_channel, } } - pub fn set_main_keypair(&mut self, keypair: &Keypair) { - self.main_keypair = keypair.clone(); + pub async fn setup_keypair( + &mut self, + cashier_wallet: Arc, + _keypair_path: &str + ) -> Result<()> { + + let main_keypair: Keypair; + + let main_keypairs = + cashier_wallet.get_main_keys(&NetworkName::Ethereum).await?; + + if main_keypairs.is_empty() { + let main_private_key = generate_privkey(); + let main_public_key = self + .import_privkey(&main_private_key) + .await? + .as_str() + .unwrap() + .to_string(); + + cashier_wallet + .put_main_keys( + &TokenKey { + secret_key: serialize(&main_private_key), + public_key: serialize(&main_public_key), + }, + &NetworkName::Ethereum, + ) + .await?; + + main_keypair = + Keypair { private_key: main_private_key, public_key: main_public_key }; + + } else { + let last_keypair = &main_keypairs[main_keypairs.len() - 1]; + + main_keypair = Keypair { + private_key: deserialize(&last_keypair.secret_key)?, + public_key: deserialize(&last_keypair.public_key)?, + } + } + + self.main_keypair = main_keypair; + + Ok(()) } async fn send_eth_to_main_wallet(&self, acc: &str, amount: BigUint) -> Result<()> { @@ -248,7 +297,7 @@ impl EthClient { if sub_iter > 60 * 10 { // 10 minutes self.unsubscribe(&addr).await; - return Err(crate::Error::ClientFailed("Deposit for expired".into())) + return Err(darkfi::Error::ClientFailed("Deposit for expired".into())) } sub_iter += iter_interval; @@ -266,8 +315,8 @@ impl EthClient { self.unsubscribe(&addr).await; if current_balance < prev_balance { - return Err(crate::Error::ClientFailed( - "New balance is less than previous balance".into(), + return Err(darkfi::Error::ClientFailed( + "New balance is less than previous balance".into(), )) } @@ -284,7 +333,7 @@ impl EthClient { received_balance: received_balance.to_u64_digits()[0], decimals: decimals as u16, }) - .await + .await .map_err(Error::from)?; self.send_eth_to_main_wallet(&addr, received_balance).await?; @@ -308,10 +357,10 @@ impl EthClient { let reply: JsonResult = match jsonrpc::send_unix_request(&self.socket_path, json!(r)) .await .map_err(EthFailed::from) - { - Ok(v) => v, - Err(e) => return Err(e), - }; + { + Ok(v) => v, + Err(e) => return Err(e), + }; match reply { JsonResult::Resp(r) => { @@ -331,17 +380,17 @@ impl EthClient { } } - pub async fn import_privkey(&self, key: &str, passphrase: &str) -> EthResult { - let req = jsonrpc::request(json!("personal_importRawKey"), json!([key, passphrase])); + pub async fn import_privkey(&self, key: &str,) -> EthResult { + let req = jsonrpc::request(json!("personal_importRawKey"), json!([key, self.passphrase])); Ok(self.request(req).await?) } /* - pub async fn estimate_gas(&self, tx: &EthTx) -> Result { - let req = jsonrpc::request(json!("eth_estimateGas"), json!([tx])); - Ok(self.request(req).await?) - } - */ + pub async fn estimate_gas(&self, tx: &EthTx) -> Result { + let req = jsonrpc::request(json!("eth_estimateGas"), json!([tx])); + Ok(self.request(req).await?) + } + */ pub async fn block_number(&self) -> EthResult { let req = jsonrpc::request(json!("eth_blockNumber"), json!([])); @@ -388,7 +437,7 @@ impl NetworkClient for EthClient { ) -> Result { let private_key = generate_privkey(); - let addr = self.import_privkey(&private_key, &self.passphrase).await?; + let addr = self.import_privkey(&private_key).await?; let address: String = if addr.as_str().is_some() { addr.as_str().unwrap().to_string() @@ -404,7 +453,7 @@ impl NetworkClient for EthClient { error!(target: "ETH BRIDGE SUBSCRIPTION","{}", e.to_string()); } }) - .detach(); + .detach(); let private_key: Vec = serialize(&private_key); @@ -429,7 +478,7 @@ impl NetworkClient for EthClient { error!(target: "ETH BRIDGE SUBSCRIPTION","{}", e.to_string()); } }) - .detach(); + .detach(); Ok(public_key) } @@ -492,8 +541,8 @@ pub enum EthFailed { ImportPrivateError, } -impl From for EthFailed { - fn from(err: crate::error::Error) -> EthFailed { +impl From for EthFailed { + fn from(err: darkfi::Error) -> EthFailed { EthFailed::EthClientError(err.to_string()) } } diff --git a/bin/cashier/src/service/mod.rs b/bin/cashier/src/service/mod.rs new file mode 100644 index 000000000..9c3a7234c --- /dev/null +++ b/bin/cashier/src/service/mod.rs @@ -0,0 +1,16 @@ +pub mod bridge; + +#[cfg(feature = "btc")] +pub mod btc; +#[cfg(feature = "btc")] +pub use btc::{Account, BtcFailed, BtcResult, Keypair, PubAddress}; + +#[cfg(feature = "sol")] +pub mod sol; +#[cfg(feature = "sol")] +pub use sol::{SolClient, SolFailed, SolResult}; + +#[cfg(feature = "eth")] +pub mod eth; +#[cfg(feature = "eth")] +pub use eth::{EthClient, EthFailed, EthResult}; diff --git a/src/service/sol.rs b/bin/cashier/src/service/sol.rs similarity index 91% rename from src/service/sol.rs rename to bin/cashier/src/service/sol.rs index d39cccacb..59a19edd7 100644 --- a/src/service/sol.rs +++ b/bin/cashier/src/service/sol.rs @@ -12,9 +12,9 @@ use solana_client::{blockhash_query::BlockhashQuery, rpc_client::RpcClient}; use solana_sdk::{ native_token::{lamports_to_sol, sol_to_lamports}, program_pack::Pack, - pubkey::Pubkey, + pubkey::Pubkey as SolPubkey, signature::{Signature, Signer}, - signer::keypair::Keypair, + signer::keypair::Keypair as SolKeypair, system_instruction, transaction::Transaction, }; @@ -23,16 +23,21 @@ use tungstenite::Message; use super::bridge::{NetworkClient, TokenNotification, TokenSubscribtion}; -use crate::{ +use darkfi::{ crypto::keypair::PublicKey, rpc::{jsonrpc, jsonrpc::JsonResult, websockets, websockets::WsStream}, serial::{deserialize, serialize, Decodable, Encodable}, - util::{generate_id2, parse::truncate, sleep, NetworkName}, + util::{generate_id2, parse::truncate, sleep, NetworkName, expand_path, load_keypair_to_str}, Error, Result, + wallet::cashierdb::{TokenKey, CashierDb}, }; pub const SOL_NATIVE_TOKEN_ID: &str = "So11111111111111111111111111111111111111112"; + +struct Keypair(SolKeypair); +struct Pubkey(SolPubkey); + #[derive(Serialize)] struct SubscribeParams { encoding: Value, @@ -45,14 +50,43 @@ pub struct SolClient { subscriptions: Arc>>, notify_channel: (async_channel::Sender, async_channel::Receiver), - rpc_server: &'static str, - wss_server: &'static str, + rpc_server: &'static str, + wss_server: &'static str, } impl SolClient { - pub async fn new(main_keypair: Keypair, network: &str) -> Result> { + pub async fn new(cashier_wallet: Arc, network: &str, keypair_path: &str) -> Result> { let notify_channel = async_channel::unbounded(); + let main_keypair: Keypair; + + let main_keypairs = cashier_wallet.get_main_keys(&NetworkName::Solana).await?; + + if keypair_path.is_empty() { + if main_keypairs.is_empty() { + main_keypair = Keypair::new(); + cashier_wallet + .put_main_keys( + &TokenKey { + secret_key: serialize(&main_keypair), + public_key: serialize(&main_keypair.pubkey()), + }, + &NetworkName::Solana, + ) + .await?; + } else { + main_keypair = + deserialize(&main_keypairs[main_keypairs.len() - 1].secret_key)?; + } + } else { + let keypair_str = + load_keypair_to_str(expand_path(keypair_path)?)?; + + let keypair_bytes: Vec = serde_json::from_str(&keypair_str)?; + main_keypair = Keypair::from_bytes(&keypair_bytes) + .map_err(|e| SolFailed::Signature(e.to_string()))?; + } + info!(target: "SOL BRIDGE", "Main SOL wallet pubkey: {:?}", &main_keypair.pubkey()); let (rpc_server, wss_server) = match network { @@ -206,8 +240,8 @@ impl SolClient { .unwrap() .parse() .map_err(Error::from)?; - } else { - cur_balance = params["lamports"].as_u64().unwrap(); + } else { + cur_balance = params["lamports"].as_u64().unwrap(); } break } @@ -236,7 +270,7 @@ impl SolClient { received_balance: amnt, decimals: decimals as u16, }) - .await + .await .map_err(Error::from)?; info!(target: "SOL BRIDGE", "Received {} {:?} tokens", ui_amnt, mint.unwrap()); @@ -252,7 +286,7 @@ impl SolClient { received_balance: amnt, decimals: decimals as u16, }) - .await + .await .map_err(Error::from)?; info!(target: "SOL BRIDGE", "Received {} SOL", ui_amnt); @@ -421,7 +455,7 @@ impl NetworkClient for SolClient { error!(target: "SOL BRIDGE SUBSCRIPTION","{}", e.to_string()); } }) - .detach(); + .detach(); Ok(TokenSubscribtion { private_key, public_key }) } @@ -454,7 +488,7 @@ impl NetworkClient for SolClient { error!(target: "SOL BRIDGE SUBSCRIPTION","{}", e.to_string()); } }) - .detach(); + .detach(); Ok(public_key) } @@ -555,12 +589,13 @@ impl Decodable for Keypair { fn decode(mut d: D) -> Result { let key: Vec = Decodable::decode(&mut d)?; let key = Keypair::from_bytes(key.as_slice()).map_err(|_| { - crate::Error::from(SolFailed::DecodeAndEncodeError("load keypair from slice".into())) + darkfi::Error::from(SolFailed::DecodeAndEncodeError("load keypair from slice".into())) })?; Ok(key) } } + impl Encodable for Pubkey { fn encode(&self, s: S) -> Result { let key = self.to_string(); @@ -573,7 +608,7 @@ impl Decodable for Pubkey { fn decode(mut d: D) -> Result { let key: String = Decodable::decode(&mut d)?; let key = Pubkey::try_from(key.as_str()).map_err(|_| { - crate::Error::from(SolFailed::DecodeAndEncodeError("load public key from slice".into())) + darkfi::Error::from(SolFailed::DecodeAndEncodeError("load public key from slice".into())) })?; Ok(key) } @@ -608,7 +643,7 @@ pub enum SolFailed { #[error("Signature Error: `{0}`")] Signature(String), #[error(transparent)] - Darkfi(#[from] crate::error::Error), + Darkfi(#[from] darkfi::error::Error), } pub type SolResult = std::result::Result; diff --git a/bin/drk/.gitignore b/bin/drk/.gitignore new file mode 100644 index 000000000..47eeb99a3 --- /dev/null +++ b/bin/drk/.gitignore @@ -0,0 +1,3 @@ + +/target +Cargo.lock diff --git a/bin/drk/Cargo.toml b/bin/drk/Cargo.toml new file mode 100644 index 000000000..331ec8642 --- /dev/null +++ b/bin/drk/Cargo.toml @@ -0,0 +1,25 @@ +[package] +name = "drk" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +darkfi = {path= "../../"} + +# Async +async-std = "1.10.0" +async-channel = "1.6.1" +easy-parallel = "3.1.0" +async-executor = "1.4.1" +futures = "0.3.17" +smol = "1.2.5" + +# Utilities +clap = { version = "3.0.0", features = ["derive"] } +log = "0.4.14" +num_cpus = "1.13.0" +simplelog = "0.11.1" +thiserror = "1.0.30" +prettytable-rs = "0.8.0" diff --git a/bin/drk/src/main.rs b/bin/drk/src/main.rs new file mode 100644 index 000000000..e7a11a969 --- /dev/null +++ b/bin/drk/src/main.rs @@ -0,0 +1,3 @@ +fn main() { + println!("Hello, world!"); +} diff --git a/bin/gateway/.gitignore b/bin/gateway/.gitignore new file mode 100644 index 000000000..47eeb99a3 --- /dev/null +++ b/bin/gateway/.gitignore @@ -0,0 +1,3 @@ + +/target +Cargo.lock diff --git a/bin/gateway/Cargo.toml b/bin/gateway/Cargo.toml new file mode 100644 index 000000000..9217a1821 --- /dev/null +++ b/bin/gateway/Cargo.toml @@ -0,0 +1,29 @@ +[package] +name = "gateway" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +darkfi = {path= "../../"} + +# Async +async-std = "1.10.0" +async-channel = "1.6.1" +easy-parallel = "3.1.0" +async-executor = "1.4.1" +futures = "0.3.17" +smol = "1.2.5" + +# Utilities +clap = { version = "3.0.0", features = ["derive"] } +log = "0.4.14" +num_cpus = "1.13.0" +simplelog = "0.11.1" +thiserror = "1.0.30" +rand = "0.8.4" + +# Encoding and parsing +bytes = "1.1.0" +url = "2.2.2" diff --git a/src/bin/gatewayd.rs b/bin/gateway/src/main.rs similarity index 95% rename from src/bin/gatewayd.rs rename to bin/gateway/src/main.rs index e233863fe..cbc20604f 100644 --- a/src/bin/gatewayd.rs +++ b/bin/gateway/src/main.rs @@ -6,14 +6,15 @@ use easy_parallel::Parallel; use log::debug; use simplelog::{ColorChoice, LevelFilter, TermLogger, TerminalMode}; -use drk::{ +use darkfi::{ blockchain::{rocks::columns, Rocks, RocksColumn}, cli::{CliGatewayd, Config, GatewaydConfig}, - service::GatewayService, util::{expand_path, join_config_path}, Result, + service::gateway::GatewayService, }; + async fn start(executor: Arc>, config: &GatewaydConfig) -> Result<()> { let rocks = Rocks::new(&expand_path(&config.database_path)?)?; let rocks_slabstore_column = RocksColumn::::new(rocks); @@ -70,7 +71,7 @@ async fn main() -> Result<()> { smol::future::block_on(async move { start(ex2, &config).await?; drop(signal); - Ok::<(), drk::Error>(()) + Ok::<(), darkfi::Error>(()) }) }); diff --git a/src/bin/darkfid.rs b/src/bin/darkfid.rs index 5e926d4f2..8b330d4be 100644 --- a/src/bin/darkfid.rs +++ b/src/bin/darkfid.rs @@ -11,7 +11,7 @@ use serde_json::{json, Value}; use simplelog::{ColorChoice, LevelFilter, TermLogger, TerminalMode}; use url::Url; -use drk::{ +use darkfi::{ blockchain::{rocks::columns, Rocks, RocksColumn}, circuit::{MintContract, SpendContract}, cli::{CliDarkfid, Config, DarkfidConfig}, @@ -713,7 +713,7 @@ async fn start( config: &DarkfidConfig, ) -> Result<()> { let wallet_path = format!("sqlite://{}", expand_path(&config.wallet_path)?.to_str().unwrap()); - let wallet = WalletDb::new(&wallet_path, config.wallet_password.clone()).await?; + let wallet = WalletDb::new(&wallet_path, &config.wallet_password).await?; let rocks = Rocks::new(expand_path(&config.database_path.clone())?.as_path())?; @@ -821,7 +821,7 @@ async fn main() -> Result<()> { info!(target: "DARKFI DAEMON", "Refresh the wallet and the database"); let wallet_path = format!("sqlite://{}", expand_path(&config.wallet_path)?.to_str().unwrap()); - let wallet = WalletDb::new(&wallet_path, config.wallet_password.clone()).await?; + let wallet = WalletDb::new(&wallet_path, &config.wallet_password).await?; wallet.remove_own_coins().await?; @@ -850,7 +850,7 @@ async fn main() -> Result<()> { smol::future::block_on(async move { start(ex2, args.cashier, &config).await?; drop(signal); - Ok::<(), drk::Error>(()) + Ok::<(), darkfi::Error>(()) }) }); diff --git a/src/bin/darkpulse.rs b/src/bin/darkpulse.rs deleted file mode 100644 index 63c7d99f3..000000000 --- a/src/bin/darkpulse.rs +++ /dev/null @@ -1,151 +0,0 @@ -use async_executor::Executor; -use async_std::sync::{Arc, Mutex}; -use easy_parallel::Parallel; -use log::*; -use smol::Unblock; - -use drk::{ - darkpulse::{ - dbsql, messages, utility, CiphertextHash, CliOption, ControlCommand, MemPool, SlabsManager, - }, - net::P2p, - Result, -}; - -async fn on_receive_slab( - p2p: Arc, - slab_rx: async_channel::Receiver, -) -> Result<()> { - loop { - let slab = slab_rx.recv().await?; - p2p.broadcast(messages::InvMessage { slabs_hash: vec![slab] }).await?; - } -} - -async fn start(executor: Arc>, options: CliOption, db: dbsql::Dbsql) -> Result<()> { - let p2p = P2p::new(options.network_settings); - - p2p.clone().start(executor.clone()).await?; - - let p2p_run_task = executor.spawn(p2p.clone().run(executor.clone())); - - let _mem_pool: MemPool = Arc::new(Mutex::new(vec![])); - - // choose a channel - if let Some(new_channel) = options.new_channel { - info!("channel added with the name {}", new_channel.get_channel_name()); - db.add_channel(&new_channel).unwrap(); - } - let main_channel = utility::choose_channel(&db, options.channel_name)?; - let channels = db.get_channels()?; - let username = utility::setup_username(options.username, &db)?; - - let (slab_sx, slab_rx) = async_channel::unbounded::(); - - let slabman = SlabsManager::new(db, slab_sx, main_channel.clone()).await; - - let subscribtion = p2p.subscribe_channel().await; - - let executor2 = executor.clone(); - let setup_channels_task = executor2.clone().spawn(async move { - loop { - let network_channel = subscribtion.receive().await.unwrap(); - utility::setup_network_channel(executor2.clone(), network_channel, slabman.clone()) - .await; - } - }); - - let receive_slab = executor.spawn(on_receive_slab(p2p.clone(), slab_rx.clone())); - - p2p.broadcast(messages::SyncMessage {}).await?; - - let stdin = Unblock::new(std::io::stdin()); - let mut stdin = futures::io::BufReader::new(stdin); - - loop { - println!("[1] Send Message"); - println!("[2] Send Sync"); - println!("[3] list available channels"); - println!("[4] show the channel address"); - println!("[5] Quit"); - - let buf = utility::read_line(&mut stdin).await?; - - match &buf[..] { - "1" => { - let slab = utility::pack_slab( - &main_channel.get_channel_secret(), - username.clone(), - String::from("Hello"), - ControlCommand::Message, - ) - .await?; - - p2p.broadcast(slab).await?; - } - "2" => { - p2p.broadcast(messages::SyncMessage {}).await?; - } - "3" => { - println!("------------------"); - println!("Available channels:"); - for channel in channels.iter() { - println!("- {}", channel.get_channel_name()); - } - println!("NOTE: switch with one of the available channels by using --channel flag"); - println!("------------------"); - } - "4" => { - println!("------------------"); - println!("Address: {}", main_channel.get_channel_address()); - println!("------------------"); - } - "5" => break, - _ => {} - } - } - - setup_channels_task.cancel().await; - p2p_run_task.cancel().await; - receive_slab.cancel().await; - Ok(()) -} - -pub fn main() -> Result<()> { - use simplelog::*; - - let cli_option = CliOption::get()?; - - let debug_level = if cli_option.verbose { LevelFilter::Debug } else { LevelFilter::Off }; - - CombinedLogger::init(vec![ - TermLogger::new(debug_level, Config::default(), TerminalMode::Mixed, ColorChoice::Always), - WriteLogger::new( - LevelFilter::Debug, - Config::default(), - std::fs::File::create("/tmp/darkpulsenode.log").unwrap(), - ), - ]) - .unwrap(); - - let mut db = dbsql::Dbsql::new()?; - db.start()?; - - let ex = Arc::new(Executor::new()); - let (signal, shutdown) = async_channel::unbounded::<()>(); - let ex2 = ex.clone(); - - let (_, result) = Parallel::new() - // Run four executor threads. - .each(0..3, |_| smol::future::block_on(ex.run(shutdown.recv()))) - // Run the main future on the current thread. - .finish(|| { - smol::future::block_on(async move { - start(ex2, cli_option, db).await?; - drop(signal); - Ok::<(), drk::Error>(()) - }) - }); - - result -} diff --git a/src/bin/drk.rs b/src/bin/drk.rs deleted file mode 100644 index fadc1e284..000000000 --- a/src/bin/drk.rs +++ /dev/null @@ -1,379 +0,0 @@ -use std::{path::PathBuf, str::FromStr}; - -#[macro_use] -extern crate prettytable; -use clap::{IntoApp, Parser}; -use log::debug; -use prettytable::{format, Table}; -use serde_json::{json, Value}; -use simplelog::{ColorChoice, LevelFilter, TermLogger, TerminalMode}; - -use drk::{ - cli::{CliDrk, CliDrkSubCommands, Config, DrkConfig}, - rpc::{jsonrpc, jsonrpc::JsonResult}, - util::{join_config_path, path::expand_path, NetworkName}, - Error, Result, -}; - -struct Drk { - url: String, -} - -impl Drk { - pub fn new(url: String) -> Self { - Self { url } - } - - // Retrieve cashier features and error if they - // don't support the network - async fn check_network(&self, network: &NetworkName) -> Result<()> { - let features = self.features().await?; - - if features.as_object().is_none() && - features.as_object().unwrap()["networks"].as_array().is_none() && - features.as_object().unwrap()["networks"].as_array().unwrap().is_empty() - { - return Err(Error::NotSupportedNetwork) - } - - for nets in features.as_object().unwrap()["networks"].as_array().unwrap() { - for (net, _) in nets.as_object().unwrap() { - if network == &NetworkName::from_str(net.as_str())? { - return Ok(()) - } - } - } - - Err(Error::NotSupportedNetwork) - } - - async fn request(&self, r: jsonrpc::JsonRequest) -> Result { - let reply: JsonResult = match jsonrpc::send_raw_request(&self.url, json!(r)).await { - Ok(v) => v, - Err(e) => return Err(e), - }; - - match reply { - JsonResult::Resp(r) => { - debug!(target: "RPC", "<-- {}", serde_json::to_string(&r)?); - Ok(r.result) - } - - JsonResult::Err(e) => { - debug!(target: "RPC", "<-- {}", serde_json::to_string(&e)?); - Err(Error::JsonRpcError(e.error.message.to_string())) - } - - JsonResult::Notif(n) => { - debug!(target: "RPC", "<-- {}", serde_json::to_string(&n)?); - Err(Error::JsonRpcError("Unexpected reply".to_string())) - } - } - } - - // --> {"jsonrpc": "2.0", "method": "say_hello", "params": [], "id": 42} - // <-- {"jsonrpc": "2.0", "result": "hello world", "id": 42} - async fn say_hello(&self) -> Result { - let req = jsonrpc::request(json!("say_hello"), json!([])); - Ok(self.request(req).await?) - } - - // --> {"jsonrpc": "2.0", "method": "create_wallet", "params": [], "id": 42} - // <-- {"jsonrpc": "2.0", "result": true, "id": 42} - async fn create_wallet(&self) -> Result { - let req = jsonrpc::request(json!("create_wallet"), json!([])); - Ok(self.request(req).await?) - } - - // --> {"jsonrpc": "2.0", "method": "key_gen", "params": [], "id": 42} - // <-- {"jsonrpc": "2.0", "result": true, "id": 42} - async fn key_gen(&self) -> Result { - let req = jsonrpc::request(json!("key_gen"), json!([])); - Ok(self.request(req).await?) - } - - // --> {"jsonrpc": "2.0", "method": "get_key", "params": [], "id": 42} - // <-- {"jsonrpc": "2.0", "result": "vdNS7oBj7KvsMWWmo9r96SV4SqATLrGsH2a3PGpCfJC", "id": 42} - async fn get_key(&self) -> Result { - let req = jsonrpc::request(json!("get_key"), json!([])); - Ok(self.request(req).await?) - } - - // --> {"jsonrpc": "2.0", "method": "get_keys", "params": [], "id": 42} - // <-- {"jsonrpc": "2.0", "result": "[vdNS7oBj7KvsMWWmo9r96SV4SqATLrGsH2a3PGpCfJC, ...]", "id": - // 42} - async fn get_keys(&self) -> Result { - let req = jsonrpc::request(json!("get_keys"), json!([])); - Ok(self.request(req).await?) - } - - // --> {"jsonrpc": "2.0", "method": "set_default_address", "params": - // "[vdNS7oBj7KvsMWWmo9r96SV4SqATLrGsH2a3PGpCfJC]", "id": 42} - // <-- {"jsonrpc": "2.0", "result": - // true, "id": 42} - async fn set_default_address(&self, address: &str) -> Result { - let req = jsonrpc::request(json!("set_default_address"), json!([address])); - Ok(self.request(req).await?) - } - - // --> {"jsonrpc": "2.0", "method": "export_keypair", "params": "[path/]", "id": 42} - // <-- {"jsonrpc": "2.0", "result": true, "id": 42} - async fn export_keypair(&self, path: &str) -> Result { - let req = jsonrpc::request(json!("export_keypair"), json!([path])); - Ok(self.request(req).await?) - } - - // --> {"jsonrpc": "2.0", "method": "import_keypair", "params": "[path/]", "id": 42} - // <-- {"jsonrpc": "2.0", "result": true, "id": 42} - async fn import_keypair(&self, path: &str) -> Result { - let req = jsonrpc::request(json!("import_keypair"), json!([path])); - Ok(self.request(req).await?) - } - - // --> {"jsonrpc": "2.0", "method": "get_key", "params": ["solana", "usdc"], "id": 42} - // <-- {"jsonrpc": "2.0", "result": "vdNS7oBj7KvsMWWmo9r96SV4SqATLrGsH2a3PGpCfJC", "id": 42} - async fn get_token_id(&self, network: &str, token: &str) -> Result { - let req = jsonrpc::request(json!("get_token_id"), json!([network, token])); - Ok(self.request(req).await?) - } - - // --> {"method": "get_balances", "params": []} - // <-- {"result": "get_balances": "[ {"btc": (value, network)}, .. ]"} - async fn get_balances(&self) -> Result { - let req = jsonrpc::request(json!("get_balances"), json!([])); - Ok(self.request(req).await?) - } - - // --> {"jsonrpc": "2.0", "method": "features", "params": [], "id": 42} - // <-- {"jsonrpc": "2.0", "result": ["network": "btc", "sol"], "id": 42} - async fn features(&self) -> Result { - let req = jsonrpc::request(json!("features"), json!([])); - Ok(self.request(req).await?) - } - - // --> {"jsonrpc": "2.0", "method": "deposit", "params": ["solana", "usdc"], "id": 42} - // <-- {"jsonrpc": "2.0", "result": "Ht5G1RhkcKnpLVLMhqJc5aqZ4wYUEbxbtZwGCVbgU7DL", "id": 42} - async fn deposit(&self, network: &str, token: &str) -> Result { - let req = jsonrpc::request(json!("deposit"), json!([network, token])); - Ok(self.request(req).await?) - } - - // --> {"jsonrpc": "2.0", "method": "withdraw", - // "params": ["solana", "usdc", "Ht5G1RhkcKnpLVLMhqJc5aqZ4wYUEbxbtZwGCVbgU7DL", 13.37"], - // "id": 42} <-- {"jsonrpc": "2.0", "result": "txID", "id": 42} - async fn withdraw( - &self, - network: &str, - token: &str, - address: &str, - amount: &str, - ) -> Result { - let req = jsonrpc::request(json!("withdraw"), json!([network, token, address, amount])); - Ok(self.request(req).await?) - } - - // --> {"jsonrpc": "2.0", "method": "transfer", - // "params": ["dusdc", "vdNS7oBj7KvsMWWmo9r96SV4SqATLrGsH2a3PGpCfJC", 13.37], "id": 42} - // <-- {"jsonrpc": "2.0", "result": "txID", "id": 42} - async fn transfer( - &self, - network: &str, - token: &str, - address: &str, - amount: &str, - ) -> Result { - let req = jsonrpc::request(json!("transfer"), json!([network, token, address, amount])); - Ok(self.request(req).await?) - } -} - -async fn start(config: &DrkConfig, options: CliDrk) -> Result<()> { - let client = Drk::new(config.darkfid_rpc_url.clone()); - - match options.command { - Some(CliDrkSubCommands::Hello {}) => { - let reply = client.say_hello().await?; - println!("Server replied: {}", &reply.to_string()); - return Ok(()) - } - Some(CliDrkSubCommands::Features {}) => { - let reply = client.features().await?; - println!("Features: {}", &reply.to_string()); - return Ok(()) - } - Some(CliDrkSubCommands::Wallet { - create, - keygen, - address, - balances, - addresses, - export_keypair, - import_keypair, - set_default_address, - }) => { - if create { - let reply = client.create_wallet().await?; - if reply.as_bool().unwrap() { - println!("Wallet created successfully.") - } else { - println!("Server replied: {}", &reply.to_string()); - } - return Ok(()) - } - - if keygen { - let reply = client.key_gen().await?; - if reply.as_bool().unwrap() { - println!("Key generation successful.") - } else { - println!("Server replied: {}", &reply.to_string()); - } - return Ok(()) - } - - if address { - let reply = client.get_key().await?; - println!("Wallet address: {}", &reply.to_string()); - return Ok(()) - } - - if addresses { - let reply = client.get_keys().await?; - println!("Wallet addresses: "); - if reply.as_array().is_some() { - for (i, address) in reply.as_array().unwrap().iter().enumerate() { - if i == 0 { - println!("- [X] {}", address); - } else { - println!("- [ ] {}", address); - } - } - } else { - println!("Empty!!",); - } - return Ok(()) - } - - if balances { - let reply = client.get_balances().await?; - - if reply.as_object().is_some() && !reply.as_object().unwrap().is_empty() { - let mut table = Table::new(); - table.set_format(*format::consts::FORMAT_NO_LINESEP_WITH_TITLE); - table.set_titles(row!["token", "amount", "network"]); - - for (tkn, data) in reply.as_object().unwrap() { - table.add_row(row![ - tkn, - data[0].as_str().unwrap(), - data[1].as_str().unwrap() - ]); - } - - table.printstd(); - } else { - println!("Balances: {}", 0); - } - - return Ok(()) - } - - if set_default_address.is_some() { - let default_address = set_default_address.unwrap(); - client.set_default_address(&default_address).await?; - return Ok(()) - } - - if export_keypair.is_some() { - let path = export_keypair.unwrap(); - client.export_keypair(&path).await?; - return Ok(()) - } - - if import_keypair.is_some() { - let path = import_keypair.unwrap(); - client.import_keypair(&path).await?; - return Ok(()) - } - } - Some(CliDrkSubCommands::Id { network, token }) => { - let network = network.to_lowercase(); - client.check_network(&NetworkName::from_str(&network)?).await?; - - let reply = client.get_token_id(&network, &token).await?; - - println!("Token ID: {}", &reply.to_string()); - return Ok(()) - } - Some(CliDrkSubCommands::Deposit { network, token_sym }) => { - let network = network.to_lowercase(); - - client.check_network(&NetworkName::from_str(&network)?).await?; - - let reply = client.deposit(&network, &token_sym).await?; - - println!("Deposit your coins to the following address: {}", &reply.to_string()); - - return Ok(()) - } - Some(CliDrkSubCommands::Transfer { network, token_sym, address, amount }) => { - let network = network.to_lowercase(); - - client.check_network(&NetworkName::from_str(&network)?).await?; - - client.transfer(&network, &token_sym, &address, &amount.to_string()).await?; - - println!("{} {} Transfered successfully", amount, token_sym.to_uppercase(),); - - return Ok(()) - } - - Some(CliDrkSubCommands::Withdraw { network, token_sym, address, amount }) => { - let network = network.to_lowercase(); - - client.check_network(&NetworkName::from_str(&network)?).await?; - - let reply = - client.withdraw(&network, &token_sym, &address, &amount.to_string()).await?; - - println!("{}", &reply.to_string()); - - return Ok(()) - } - None => {} - } - - println!("Please run 'drk help' to see usage."); - Err(Error::MissingParams) -} - -#[async_std::main] -async fn main() -> Result<()> { - let args = CliDrk::parse(); - let matches = CliDrk::into_app().get_matches(); - - let config_path = if args.config.is_some() { - expand_path(&args.config.clone().unwrap())? - } else { - join_config_path(&PathBuf::from("drk.toml"))? - }; - - let mut verbosity_level = 0; - verbosity_level += matches.occurrences_of("verbose"); - let loglevel = match verbosity_level { - 0 => LevelFilter::Info, - 1 => LevelFilter::Debug, - _ => LevelFilter::Trace, - }; - - TermLogger::init( - loglevel, - simplelog::Config::default(), - TerminalMode::Mixed, - ColorChoice::Auto, - )?; - - let config = Config::::load(config_path)?; - - start(&config, args).await -} diff --git a/src/bin/tree.rs b/src/bin/tree.rs index 1637b3a5c..c294c9cbc 100644 --- a/src/bin/tree.rs +++ b/src/bin/tree.rs @@ -2,7 +2,7 @@ use incrementalmerkletree::{bridgetree::BridgeTree, Frontier, Tree}; use pasta_curves::{arithmetic::Field, pallas}; use rand::rngs::OsRng; -use drk::{crypto::merkle_node::MerkleNode, Result}; +use darkfi::{crypto::merkle_node::MerkleNode, Result}; fn main() -> Result<()> { let mut tree = BridgeTree::::new(100); diff --git a/src/bin/tui_ex.rs b/src/bin/tui_ex.rs index c77129e2c..4dbdc78cd 100644 --- a/src/bin/tui_ex.rs +++ b/src/bin/tui_ex.rs @@ -1,4 +1,4 @@ -use drk::{ +use darkfi::{ tui::{App, HBox, VBox, Widget}, Result, }; diff --git a/src/bin/tx.rs b/src/bin/tx.rs index d15ab4b78..e1327555f 100644 --- a/src/bin/tx.rs +++ b/src/bin/tx.rs @@ -1,7 +1,7 @@ use incrementalmerkletree::{bridgetree::BridgeTree, Frontier, Tree}; use rand::rngs::OsRng; -use drk::{ +use darkfi::{ circuit::{mint_contract::MintContract, spend_contract::SpendContract}, crypto::{ coin::Coin, diff --git a/src/bin/vm.rs b/src/bin/vm.rs index 3f4bbfa67..52f8e7713 100644 --- a/src/bin/vm.rs +++ b/src/bin/vm.rs @@ -11,7 +11,7 @@ use pasta_curves::{ use rand::rngs::OsRng; use std::{collections::HashMap, fs::File, time::Instant}; -use drk::{ +use darkfi::{ crypto::{ constants::OrchardFixedBases, proof::{Proof, ProvingKey, VerifyingKey}, diff --git a/src/bin/vm_burn.rs b/src/bin/vm_burn.rs index 837a7d14d..627a564f0 100644 --- a/src/bin/vm_burn.rs +++ b/src/bin/vm_burn.rs @@ -17,7 +17,7 @@ use pasta_curves::{ use rand::rngs::OsRng; use std::{collections::HashMap, fs::File, time::Instant}; -use drk::{ +use darkfi::{ crypto::{ constants::{ sinsemilla::{i2lebsp, MERKLE_CRH_PERSONALIZATION}, diff --git a/src/cli/cli_config.rs b/src/cli/cli_config.rs index 3fcbb73be..0afc3e16c 100644 --- a/src/cli/cli_config.rs +++ b/src/cli/cli_config.rs @@ -10,17 +10,6 @@ use serde::{de::DeserializeOwned, Deserialize, Serialize}; use crate::{Error, Result}; -pub fn load_keypair_to_str(path: PathBuf) -> Result { - if Path::new(&path).exists() { - let key = fs::read(&path)?; - let str_buff = str::from_utf8(&key)?; - Ok(str_buff.to_string()) - } else { - println!("Could not parse keypair path"); - Err(Error::KeypairPathNotFound) - } -} - #[derive(Clone, Default)] pub struct Config { config: PhantomData, diff --git a/src/cli/mod.rs b/src/cli/mod.rs index 611ff6683..a3dfa4f01 100644 --- a/src/cli/mod.rs +++ b/src/cli/mod.rs @@ -2,4 +2,5 @@ pub mod cli_config; pub mod cli_parser; pub use cli_config::{CashierdConfig, Config, DarkfidConfig, DrkConfig, GatewaydConfig}; + pub use cli_parser::{CliCashierd, CliDarkfid, CliDrk, CliDrkSubCommands, CliGatewayd}; diff --git a/src/darkpulse/aes.rs b/src/darkpulse/aes.rs deleted file mode 100644 index 1336bd6f3..000000000 --- a/src/darkpulse/aes.rs +++ /dev/null @@ -1,53 +0,0 @@ -use aes_gcm::{ - aead::{generic_array::GenericArray, Aead, NewAead}, - Aes256Gcm, -}; - -pub type AesKey = [u8; 32]; -pub type Plaintext = Vec; -pub type Ciphertext = Vec; - -pub fn aes_encrypt( - shared_secret: &AesKey, - nonce: &[u8; 12], - plaintext: &[u8], -) -> Option { - // Rust is gay, I need to convert to 'GenericArray' whatever the fuck that is... - let key = GenericArray::from_slice(&shared_secret[..]); - let cipher = Aes256Gcm::new(key); - - let nonce = GenericArray::from_slice(nonce); - let ciphertext = cipher.encrypt(nonce, plaintext); - ciphertext.ok() -} - -pub fn aes_decrypt( - shared_secret: &AesKey, - nonce: &[u8; 12], - ciphertext: Ciphertext, -) -> Option { - // Rust is gay, I need to convert to 'GenericArray' whatever the fuck that is... - let key = GenericArray::from_slice(&shared_secret[..]); - let cipher = Aes256Gcm::new(key); - - let nonce = GenericArray::from_slice(nonce); - - let plaintext = cipher.decrypt(nonce, ciphertext.as_ref()); - plaintext.ok() -} - -#[test] -fn test_aes() { - let sh_secret = "e02e56a41320d8ebefa946753e9f69587c16d43876cf5bbac86c0ea0e9253d14".as_bytes(); - - let mut channel_secret = [0u8; 32]; - channel_secret.copy_from_slice(&sh_secret[0..32]); - - let nonce = [3; 12]; - - let ciphertext = aes_encrypt(&channel_secret, &nonce, b"plaintext message").unwrap(); - - let plaintext = aes_decrypt(&channel_secret, &nonce, ciphertext).unwrap(); - // OK it works! - assert_eq!(&plaintext, b"plaintext message"); -} diff --git a/src/darkpulse/channel.rs b/src/darkpulse/channel.rs deleted file mode 100644 index 7cdfe05cb..000000000 --- a/src/darkpulse/channel.rs +++ /dev/null @@ -1,89 +0,0 @@ -use bs58; -use rand::Rng; -use sha2::{Digest, Sha256}; - -use crate::Result; - -#[derive(Clone, Debug)] -pub struct Channel { - channel_secret: [u8; 32], - channel_name: String, - address: String, - id: Option<u32>, -} - -impl Channel { - pub fn new( - channel_name: String, - channel_secret: [u8; 32], - address: String, - id: u32, - ) -> Channel { - Channel { channel_secret, channel_name, address, id: Some(id) } - } - - pub fn gen_new(channel_name: String) -> Channel { - let channel_secret = rand::thread_rng().gen::<[u8; 32]>(); - let address = Self::gen_address(channel_secret); - Channel { channel_secret, channel_name, address, id: None } - } - - pub fn gen_new_with_addr(channel_name: String, channel_address: String) -> Result<Channel> { - let decoded = bs58::decode(channel_address.clone()).into_vec()?; - let mut channel_secret: [u8; 32] = [0; 32]; - channel_secret.copy_from_slice(&decoded[4..36]); - Ok(Channel { channel_secret, channel_name, address: channel_address, id: None }) - } - - pub fn gen_address(channel_secret: [u8; 32]) -> String { - let mut hasher = Sha256::new(); - - let version: u32 = 1; - let mut payload = version.to_be_bytes().to_vec(); - let mut channel_secret = channel_secret.to_vec(); - payload.append(&mut channel_secret); - hasher.update(payload.clone()); - let result = hasher.finalize(); - - let mut checksum: [u8; 4] = [0; 4]; - checksum.copy_from_slice(&result[..4]); - - payload.append(&mut checksum.to_vec()); - - let encoded = bs58::encode(payload).into_string(); - - encoded - } - - pub fn get_channel_secret(&self) -> [u8; 32] { - self.channel_secret - } - - pub fn get_channel_name(&self) -> &String { - &self.channel_name - } - - pub fn get_channel_id(&self) -> &Option<u32> { - &self.id - } - - pub fn get_channel_address(&self) -> &String { - &self.address - } -} - -#[cfg(test)] -mod tests { - use super::Channel; - use crate::Result; - - #[test] - fn create_channel_form_address() -> Result<()> { - let channel = Channel::gen_new(String::from("test")); - let channel_address = channel.get_channel_address(); - let channel2 = Channel::gen_new_with_addr(String::from("test"), channel_address.clone())?; - assert_eq!(channel.get_channel_secret(), channel2.get_channel_secret()); - assert_eq!(channel.get_channel_address(), channel2.get_channel_address()); - Ok(()) - } -} diff --git a/src/darkpulse/cli_option.rs b/src/darkpulse/cli_option.rs deleted file mode 100644 index 2f0b1889f..000000000 --- a/src/darkpulse/cli_option.rs +++ /dev/null @@ -1,176 +0,0 @@ -use std::net::SocketAddr; - -use clap::{App, Arg}; - -use super::Channel; -use crate::{net::Settings, Result}; - -pub struct CliOption { - pub network_settings: Settings, - pub username: Option<String>, - pub channel_name: Option<String>, - pub new_channel: Option<Channel>, - pub verbose: bool, - pub log_path: Box<std::path::PathBuf>, -} - -impl CliOption { - pub fn get() -> Result<CliOption> { - let mat = App::new("DarkPulse") - .version("0.0.1") - .author("Dark Renaissance Technologies") - .about("An anonymous p2p chat application") - .arg( - Arg::new("accept") - .short('a') - .value_name("ADDRESSES") - .help("accept address") - .long("accept") - .required(true), - ) - .arg(Arg::new("slots").value_name("SLOTS").long("slots").help("Connection slots")) - .arg(Arg::new("verbose").takes_value(false).long("verbose").help("increase verbosity")) - .arg( - Arg::new("connects") - .value_name("MANUAL_CONNECTS") - .multiple_occurrences(true) - .takes_value(true) - .short('c') - .long("connects") - .help("Manual connections"), - ) - .arg( - Arg::new("seed") - .value_name("ADDRESSES") - .multiple_occurrences(true) - .takes_value(true) - .short('s') - .long("seed") - .help("Connect to the seed node"), - ) - .arg( - Arg::new("log") - .value_name("LOG_PATH") - .takes_value(true) - .long("log") - .help("Log file path"), - ) - .arg( - Arg::new("username") - .value_name("USERNAME") - .short('u') - .long("username") - .help("node's username"), - ) - .arg( - Arg::new("channel") - .value_name("CHANNEL") - .short('h') - .long("channel") - .help("switch to one of available channels"), - ) - .subcommand( - App::new("newchannel") - .about("add new channel") - .arg( - Arg::new("name") - .long("channelname") - .required(true) - .value_name("CHANNELNAME") - .help("name for the new channel"), - ) - .arg( - Arg::new("address") - .long("channeladdress") - .required(true) - .value_name("CHANNELADDRESS") - .help("address for the new channel"), - ), - ) - .get_matches(); - - let mut accept_addr: Option<SocketAddr> = None; - if let Some(addr) = mat.value_of("accept") { - accept_addr = Some(addr.parse()?); - } - - let mut connection_slots = 0; - if let Some(slots) = mat.value_of("slots") { - connection_slots = slots.parse()?; - }; - - let mut seed_addresses: Vec<SocketAddr> = vec![]; - if let Some(seed_addrs) = mat.values_of("seed") { - seed_addresses = Self::collect_addrs(seed_addrs.collect::<Vec<&str>>()); - }; - - let mut manual_connects: Vec<SocketAddr> = vec![]; - if let Some(man_connects) = mat.values_of("connects") { - manual_connects = Self::collect_addrs(man_connects.collect::<Vec<&str>>()); - }; - - let mut username = None; - - if let Some(uname) = mat.value_of("username") { - username = Some(String::from(uname)); - } - - let mut channel_name = None; - - if let Some(chan) = mat.value_of("channel") { - channel_name = Some(String::from(chan)); - } - - let mut new_channel: Option<Channel> = None; - - if let Some(newch) = mat.subcommand_matches("newchannel") { - let mut new_channel_name = String::new(); - let mut new_channel_address = String::new(); - if let Some(channelname) = newch.value_of("name") { - new_channel_name = String::from(channelname); - } - if let Some(channeladdress) = newch.value_of("address") { - new_channel_address = String::from(channeladdress); - } - new_channel = Some(Channel::gen_new_with_addr(new_channel_name, new_channel_address)?); - } - - let verbose = mat.is_present("verbose"); - - let log_path = Box::new( - if let Some(log_path) = mat.value_of("log") { - std::path::Path::new(log_path) - } else { - std::path::Path::new("/tmp/darkpulsenode.log") - } - .to_path_buf(), - ); - - let network_settings = Settings { - inbound: accept_addr, - outbound_connections: connection_slots, - seed_query_timeout_seconds: 8, - connect_timeout_seconds: 10, - channel_handshake_seconds: 4, - channel_heartbeat_seconds: 10, - external_addr: accept_addr, - peers: manual_connects, - seeds: seed_addresses, - manual_attempt_limit: 10, - }; - - Ok(CliOption { network_settings, username, channel_name, new_channel, verbose, log_path }) - } - - fn collect_addrs(addrs: Vec<&str>) -> Vec<SocketAddr> { - let addrs: Vec<SocketAddr> = addrs - .iter() - .map(|addr| { - let addr: SocketAddr = addr.parse().expect("unable to parse on of the addresses"); - addr - }) - .collect(); - - addrs - } -} diff --git a/src/darkpulse/control_message.rs b/src/darkpulse/control_message.rs deleted file mode 100644 index 3f28243d7..000000000 --- a/src/darkpulse/control_message.rs +++ /dev/null @@ -1,64 +0,0 @@ -use std::io; - -use crate::{ - serial::{Decodable, Encodable}, - Result, -}; - -#[derive(Copy, Clone)] -pub enum ControlCommand { - Join = 0, - Leave = 1, - Message = 2, -} - -pub struct MessagePayload { - pub nickname: String, - pub text: String, - pub timestamp: i64, -} - -pub struct ControlMessage { - pub control: ControlCommand, - pub payload: MessagePayload, -} - -impl Encodable for MessagePayload { - fn encode<S: io::Write>(&self, mut s: S) -> Result<usize> { - let mut len = 0; - len += self.nickname.encode(&mut s)?; - len += self.text.encode(&mut s)?; - len += self.timestamp.encode(&mut s)?; - Ok(len) - } -} - -impl Decodable for MessagePayload { - fn decode<D: io::Read>(mut d: D) -> Result<Self> { - Ok(Self { - nickname: Decodable::decode(&mut d)?, - text: Decodable::decode(&mut d)?, - timestamp: Decodable::decode(&mut d)?, - }) - } -} -impl Encodable for ControlMessage { - fn encode<S: io::Write>(&self, mut s: S) -> Result<usize> { - let mut len = 0; - len += (self.control as u8).encode(&mut s)?; - len += self.payload.encode(&mut s)?; - Ok(len) - } -} - -impl Decodable for ControlMessage { - fn decode<D: io::Read>(mut d: D) -> Result<Self> { - let control_code: u8 = Decodable::decode(&mut d)?; - let control = match control_code { - 0 => ControlCommand::Join, - 1 => ControlCommand::Leave, - _ => ControlCommand::Message, - }; - Ok(Self { control, payload: Decodable::decode(&mut d)? }) - } -} diff --git a/src/darkpulse/dbsql.rs b/src/darkpulse/dbsql.rs deleted file mode 100644 index 52fda6ee4..000000000 --- a/src/darkpulse/dbsql.rs +++ /dev/null @@ -1,156 +0,0 @@ -use std::{collections::HashMap, convert::TryInto, fs::File, io::prelude::*}; - -use rusqlite::{params, Connection}; - -use super::{utility::default_config_dir, Channel, CiphertextHash, SlabMessage}; -use crate::Result; - -#[allow(dead_code)] -#[derive(Debug)] -pub struct Dbsql { - connection: Connection, - username: String, -} - -impl Dbsql { - pub fn new() -> Result<Dbsql> { - let path = default_config_dir()?.join("data.db"); - let connection = Connection::open(path)?; - let username = String::new(); - Ok(Dbsql { connection, username }) - } - - pub fn start(&mut self) -> Result<()> { - let schemas = Self::read_schemas_from_file("../../sql/darkpulse_schema.sql")?; - self.connection.execute_batch(schemas.as_str())?; - - Ok(()) - } - - pub fn add_slab(&self, slab: &SlabMessage, channel_id: &u32) -> Result<()> { - self.connection.execute( - "INSERT OR IGNORE INTO slab (nonce, cipher_text, cipher_text_hash, channel_id) VALUES (?1, ?2, ?3, ?4)", - params![&slab.nonce[..], &slab.ciphertext[..], &slab.cipher_hash()[..], channel_id], - )?; - Ok(()) - } - - pub fn add_username(&self, username: &str) -> Result<()> { - self.connection - .execute("INSERT OR IGNORE INTO node (username) VALUES (?1)", params![username])?; - Ok(()) - } - - pub fn get_channel_slabs(&self, id: u32) -> Result<HashMap<CiphertextHash, SlabMessage>> { - let stmt = format!("SELECT * FROM slab WHERE channel_id={}", id); - let mut stmt = self.connection.prepare(&stmt)?; - - let mut slabs: HashMap<CiphertextHash, SlabMessage> = HashMap::new(); - let slab_iter = stmt.query_map(params![], |row| { - let nonce: Vec<u8> = row.get(1)?; - let nonce = nonce - .as_slice() - .try_into() - .expect("error when converting vector to slice with size [u8; 12]"); - - let ciphertext = row.get(2)?; - - Ok(SlabMessage { nonce, ciphertext }) - })?; - - for slab in slab_iter { - let slab = slab?; - slabs.insert(slab.cipher_hash(), slab); - } - Ok(slabs) - } - - pub fn add_channel(&self, channel: &Channel) -> Result<()> { - self.connection.execute( - "INSERT OR IGNORE INTO channel (channel_name, channel_secret, address) VALUES (?1, ?2, ?3)", - params![ - &channel.get_channel_name(), - &channel.get_channel_secret()[..], - &channel.get_channel_address() - ], - )?; - Ok(()) - } - - pub fn delete_channel(&self, channel_name: &str) -> Result<()> { - self.connection - .execute("DELETE FROM channel WHERE channel_name = (?1)", params![channel_name,])?; - Ok(()) - } - - fn read_schemas_from_file(path: &str) -> Result<String> { - let mut file = File::open(path)?; - let mut schemas = String::new(); - file.read_to_string(&mut schemas)?; - Ok(schemas) - } - - pub fn get_slabs(&mut self) -> Result<HashMap<CiphertextHash, SlabMessage>> { - let mut slabs = HashMap::new(); - let mut stmt = self.connection.prepare("SELECT * FROM slab")?; - let slab_iter = stmt.query_map(params![], |row| { - let nonce: Vec<u8> = row.get(1)?; - - let nonce: [u8; 12] = nonce - .as_slice() - .try_into() - .expect("error when converting vector to slice with size [u8; 12]"); - - let ciphertext = row.get(2)?; - - Ok(SlabMessage { nonce, ciphertext }) - })?; - - for slab in slab_iter { - let slab = slab?; - slabs.insert(slab.cipher_hash(), slab); - } - - Ok(slabs) - } - - pub fn get_channels(&self) -> Result<Vec<Channel>> { - let mut channels = Vec::new(); - let mut stmt = self.connection.prepare("SELECT * FROM channel")?; - let channel_iter = stmt.query_map(params![], |row| { - let channel_id = row.get(0)?; - let channel_name = row.get(1)?; - let channel_secret: Vec<u8> = row.get(2)?; - - let channel_secret: [u8; 32] = channel_secret - .as_slice() - .try_into() - .expect("error when converting vector to slice with size [u8; 32]"); - - let address = row.get(3)?; - Ok(Channel::new(channel_name, channel_secret, address, channel_id)) - })?; - - for channel in channel_iter { - let channel = channel?; - channels.push(channel); - } - - Ok(channels.clone()) - } - - pub fn get_username(&self) -> Result<String> { - let mut username = String::new(); - let mut stmt3 = self.connection.prepare("SELECT * FROM node")?; - let uname_iter = stmt3.query_map(params![], |row| { - let username: String = row.get(1)?; - Ok(username) - })?; - - for name in uname_iter { - username = name?; - } - - Ok(username) - } -} diff --git a/src/darkpulse/mod.rs b/src/darkpulse/mod.rs deleted file mode 100644 index f85fc7a05..000000000 --- a/src/darkpulse/mod.rs +++ /dev/null @@ -1,21 +0,0 @@ -pub mod aes; -pub mod channel; -pub mod cli_option; -pub mod control_message; -pub mod dbsql; -pub mod net; -pub mod slabs_manager; -pub mod utility; - -use async_std::sync::{Arc, Mutex}; - -pub type CiphertextHash = [u8; 32]; -pub type MemPool = Arc<Mutex<Vec<(CiphertextHash, net::messages::SlabMessage)>>>; - -pub use aes::{aes_decrypt, aes_encrypt, Ciphertext, Plaintext}; -pub use channel::Channel; -pub use cli_option::CliOption; -pub use control_message::{ControlCommand, ControlMessage, MessagePayload}; -pub use dbsql::Dbsql; -pub use net::{messages, messages::SlabMessage, protocol_slab::ProtocolSlab}; -pub use slabs_manager::{SlabsManager, SlabsManagerSafe}; diff --git a/src/darkpulse/net/messages.rs b/src/darkpulse/net/messages.rs deleted file mode 100644 index 5ef105f2d..000000000 --- a/src/darkpulse/net/messages.rs +++ /dev/null @@ -1,104 +0,0 @@ -use std::io; - -use crate::{ - darkpulse::Ciphertext, - net::messages::Message, - serial::{Decodable, Encodable}, - Result, -}; - -#[derive(Clone)] -pub struct GetSlabsMessage { - pub slabs_hash: Vec<[u8; 32]>, -} - -#[derive(Clone)] -pub struct InvMessage { - pub slabs_hash: Vec<[u8; 32]>, -} - -#[derive(Clone)] -pub struct SlabMessage { - pub nonce: [u8; 12], - pub ciphertext: Ciphertext, -} - -#[derive(Clone)] -pub struct SyncMessage {} - -impl Message for SlabMessage { - fn name() -> &'static str { - "slab" - } -} - -impl Message for GetSlabsMessage { - fn name() -> &'static str { - "getslabs" - } -} -impl Message for InvMessage { - fn name() -> &'static str { - "inv" - } -} -impl Message for SyncMessage { - fn name() -> &'static str { - "sync" - } -} - -impl Encodable for GetSlabsMessage { - fn encode<S: io::Write>(&self, mut s: S) -> Result<usize> { - let mut len = 0; - len += self.slabs_hash.encode(&mut s)?; - Ok(len) - } -} - -impl Decodable for GetSlabsMessage { - fn decode<D: io::Read>(mut d: D) -> Result<Self> { - Ok(Self { slabs_hash: Decodable::decode(&mut d)? }) - } -} - -impl Encodable for SlabMessage { - fn encode<S: io::Write>(&self, mut s: S) -> Result<usize> { - let mut len = 0; - len += self.nonce.encode(&mut s)?; - len += self.ciphertext.encode(&mut s)?; - Ok(len) - } -} - -impl Decodable for SlabMessage { - fn decode<D: io::Read>(mut d: D) -> Result<Self> { - Ok(Self { nonce: Decodable::decode(&mut d)?, ciphertext: Decodable::decode(&mut d)? }) - } -} - -impl Encodable for InvMessage { - fn encode<S: io::Write>(&self, mut s: S) -> Result<usize> { - let mut len = 0; - len += self.slabs_hash.encode(&mut s)?; - Ok(len) - } -} - -impl Decodable for InvMessage { - fn decode<D: io::Read>(mut d: D) -> Result<Self> { - Ok(Self { slabs_hash: Decodable::decode(&mut d)? }) - } -} - -impl Encodable for SyncMessage { - fn encode<S: io::Write>(&self, _s: S) -> Result<usize> { - Ok(0) - } -} - -impl Decodable for SyncMessage { - fn decode<D: io::Read>(_d: D) -> Result<Self> { - Ok(Self {}) - } -} diff --git a/src/darkpulse/net/mod.rs b/src/darkpulse/net/mod.rs deleted file mode 100644 index e7c93bf9a..000000000 --- a/src/darkpulse/net/mod.rs +++ /dev/null @@ -1,2 +0,0 @@ -pub mod messages; -pub mod protocol_slab; diff --git a/src/darkpulse/net/protocol_slab.rs b/src/darkpulse/net/protocol_slab.rs deleted file mode 100644 index 5ca43a157..000000000 --- a/src/darkpulse/net/protocol_slab.rs +++ /dev/null @@ -1,175 +0,0 @@ -use std::sync::Arc; - -use log::*; -use smol::Executor; - -use crate::{ - darkpulse::{ - aes_decrypt, messages, CiphertextHash, ControlCommand, ControlMessage, SlabsManagerSafe, - }, - error::Result as NetResult, - net::{ - message_subscriber::MessageSubscription, - protocols::{ProtocolJobsManager, ProtocolJobsManagerPtr}, - ChannelPtr, - }, - serial::deserialize, -}; - -pub struct ProtocolSlab { - channel: ChannelPtr, - slabman: SlabsManagerSafe, - - sync_sub: MessageSubscription<messages::SyncMessage>, - inv_sub: MessageSubscription<messages::InvMessage>, - get_slabs_sub: MessageSubscription<messages::GetSlabsMessage>, - slab_sub: MessageSubscription<messages::SlabMessage>, - - jobsman: ProtocolJobsManagerPtr, -} - -impl ProtocolSlab { - pub async fn new(slabman: SlabsManagerSafe, channel: ChannelPtr) -> Arc<Self> { - let sync_sub = channel - .clone() - .subscribe_msg::<messages::SyncMessage>() - .await - .expect("Missing sync dispatcher!"); - - let inv_sub = channel - .clone() - .subscribe_msg::<messages::InvMessage>() - .await - .expect("Missing inv dispatcher!"); - - let get_slabs_sub = channel - .clone() - .subscribe_msg::<messages::GetSlabsMessage>() - .await - .expect("Missing getslabs dispatcher!"); - - let slab_sub = channel - .clone() - .subscribe_msg::<messages::SlabMessage>() - .await - .expect("Missing slab dispatcher!"); - - Arc::new(Self { - channel: channel.clone(), - slabman, - sync_sub, - inv_sub, - get_slabs_sub, - slab_sub, - jobsman: ProtocolJobsManager::new("ProtocolSlab", channel), - }) - } - - pub async fn start(self: Arc<Self>, executor: Arc<Executor<'_>>) { - debug!(target: "net", "ProtocolSlab::start() [START]"); - self.jobsman.clone().start(executor.clone()); - - self.jobsman.clone().spawn(self.clone().handle_receive_sync(), executor.clone()).await; - self.jobsman.clone().spawn(self.clone().handle_receive_inv(), executor.clone()).await; - - self.jobsman.clone().spawn(self.clone().handle_receive_get_slabs(), executor.clone()).await; - self.jobsman.clone().spawn(self.clone().handle_receive_slab(), executor).await; - - let _ = self.channel.send(messages::SyncMessage {}).await; - - debug!(target: "net", "ProtocolSlab::start() [END]"); - } - - async fn handle_receive_sync(self: Arc<Self>) -> NetResult<()> { - debug!(target: "net", "ProtocolSlab::handle_receive_sync() [START]"); - loop { - let _sync_msg = self.sync_sub.receive().await?; - let slab_hashs = self.slabman.lock().await.get_slabs_hash(); - let inv_msg = messages::InvMessage { slabs_hash: slab_hashs.clone() }; - self.channel.send(inv_msg).await?; - info!("receive sync message!"); - } - } - - async fn handle_receive_inv(self: Arc<Self>) -> NetResult<()> { - debug!(target: "net", "ProtocolSlab::handle_receive_inv() [START]"); - loop { - let inv_msg = self.inv_sub.receive().await?; - let mut list_of_hash: Vec<CiphertextHash> = vec![]; - let slabs_hash = self.slabman.lock().await.get_slabs_hash(); - for slab in inv_msg.slabs_hash.iter() { - if !slabs_hash.contains(slab) { - list_of_hash.push(*slab); - } - } - let getslabs_msg = messages::GetSlabsMessage { slabs_hash: list_of_hash }; - self.channel.send(getslabs_msg).await?; - info!("receive inv message!"); - } - } - - async fn handle_receive_get_slabs(self: Arc<Self>) -> NetResult<()> { - debug!(target: "net", "ProtocolSlab::handle_receive_get_slabs() [START]"); - loop { - let get_slabs_msg = self.get_slabs_sub.receive().await?; - for slab_hash in get_slabs_msg.slabs_hash.iter() { - let slabman = self.slabman.lock().await; - let slab = slabman.get_slab(slab_hash); - if let Some(slab) = slab { - self.channel.send(slab.clone()).await?; - } - } - info!("receive getslabs message!"); - } - } - - async fn handle_receive_slab(self: Arc<Self>) -> NetResult<()> { - debug!(target: "net", "ProtocolSlab::handle_receive_slab() [START]"); - loop { - let slab_msg = self.slab_sub.receive().await?; - info!("receive slab message!"); - - let channels = self.slabman.lock().await.get_channels().unwrap_or_default(); - - let slab = messages::SlabMessage { - nonce: slab_msg.nonce, - ciphertext: slab_msg.ciphertext.clone(), - }; - - for channel in channels.iter() { - if let Some(plaintext) = aes_decrypt( - &channel.get_channel_secret(), - &slab_msg.nonce, - slab_msg.ciphertext.clone(), - ) { - self.slabman - .lock() - .await - .add_new_slab(slab.clone()) - .await - .expect("error during adding new slab to database"); - - let des_plaintext: ControlMessage = deserialize(&plaintext[..]) - .expect("error during deserializing the message"); - - match des_plaintext.control { - ControlCommand::Join => { - info!("{} joined the group", des_plaintext.payload.nickname); - } - ControlCommand::Leave => { - info!("{} left the group", des_plaintext.payload.nickname); - } - ControlCommand::Message => { - info!( - "{} -> {}: {}", - des_plaintext.payload.timestamp, - des_plaintext.payload.nickname, - des_plaintext.payload.text - ); - } - } - } - } - } - } -} diff --git a/src/darkpulse/net/protocols/mod.rs b/src/darkpulse/net/protocols/mod.rs deleted file mode 100644 index e4cdf7eb8..000000000 --- a/src/darkpulse/net/protocols/mod.rs +++ /dev/null @@ -1 +0,0 @@ -pub mod protocol_slab; diff --git a/src/darkpulse/slabs_manager.rs b/src/darkpulse/slabs_manager.rs deleted file mode 100644 index adc1c73a9..000000000 --- a/src/darkpulse/slabs_manager.rs +++ /dev/null @@ -1,119 +0,0 @@ -use std::{collections::HashMap, sync::Arc}; - -use log::*; -use sha2::{Digest, Sha256}; - -use super::{aes::Ciphertext, channel::Channel, dbsql, net::messages::SlabMessage, CiphertextHash}; -use crate::Result; - -pub fn cipher_hash(ciphertext: Ciphertext) -> CiphertextHash { - let mut cipher_hash = [0u8; 32]; - let mut hasher = Sha256::new(); - for chunk in ciphertext.chunks(32) { - hasher.update(chunk); - } - cipher_hash.copy_from_slice(&hasher.finalize()); - cipher_hash -} - -impl SlabMessage { - pub fn cipher_hash(&self) -> CiphertextHash { - cipher_hash(self.ciphertext.clone()) - } -} - -pub type SlabsManagerSafe = Arc<async_std::sync::Mutex<SlabsManager>>; - -pub struct SlabsManager { - slabs: HashMap<CiphertextHash, SlabMessage>, - notify_update: async_channel::Sender<CiphertextHash>, - main_channel: Channel, - db: dbsql::Dbsql, -} - -impl SlabsManager { - pub async fn new( - db: dbsql::Dbsql, - notify_update: async_channel::Sender<CiphertextHash>, - main_channel: Channel, - ) -> SlabsManagerSafe { - let mut slabs: HashMap<CiphertextHash, SlabMessage> = HashMap::new(); - - if let Some(channel_id) = main_channel.get_channel_id() { - slabs = db.get_channel_slabs(*channel_id).unwrap_or(slabs); - } - - Arc::new(async_std::sync::Mutex::new(SlabsManager { - slabs, - notify_update, - main_channel, - db, - })) - } - - pub fn get_slabs_hash(&self) -> Vec<CiphertextHash> { - self.slabs.keys().cloned().collect() - } - pub fn height(&self) -> u32 { - self.slabs.len() as u32 - } - pub fn has_cipher_hash(&self, cipher_hash: &CiphertextHash) -> bool { - self.slabs.contains_key(cipher_hash) - } - - pub async fn add_new_slab(&mut self, slab: SlabMessage) -> Result<()> { - info!("received Slab message."); - self.slabs.insert(slab.cipher_hash(), slab.clone()); - - if let Some(channel_id) = self.main_channel.get_channel_id() { - self.db.add_slab(&slab, channel_id)?; - } - - self.notify_update.send(slab.cipher_hash()).await?; - Ok(()) - } - - pub fn set_main_channel(&mut self, main_channel: Channel) { - self.main_channel = main_channel; - self.switch_main_channel(); - } - - pub fn switch_main_channel(&mut self) { - let default_slabs: HashMap<CiphertextHash, SlabMessage> = HashMap::new(); - - if let Some(channel_id) = self.main_channel.get_channel_id() { - self.slabs = self.db.get_channel_slabs(*channel_id).unwrap_or(default_slabs); - } - } - - pub fn get_channels(&mut self) -> Result<Vec<Channel>> { - self.db.get_channels() - } - - pub fn add_new_channel(&mut self, new_channel: &Channel) -> Result<()> { - self.db.add_channel(new_channel)?; - Ok(()) - } - - pub fn delete_channel(&mut self, channel_id: &str) -> Result<()> { - self.db.delete_channel(channel_id)?; - Ok(()) - } - - pub fn add_username(&mut self, username: &str) -> Result<()> { - self.db.add_username(username)?; - Ok(()) - } - - pub fn get_main_channel(&self) -> Channel { - self.main_channel.clone() - } - - pub fn get_slab(&self, cipher_hash: &CiphertextHash) -> Option<&SlabMessage> { - self.slabs.get(cipher_hash) - } - - pub fn get_slabs(&self) -> &HashMap<CiphertextHash, SlabMessage> { - &self.slabs - } -} diff --git a/src/darkpulse/utility.rs b/src/darkpulse/utility.rs deleted file mode 100644 index ac9c30824..000000000 --- a/src/darkpulse/utility.rs +++ /dev/null @@ -1,164 +0,0 @@ -use std::{ - fs::OpenOptions, - io::prelude::*, - net::SocketAddr, - path::PathBuf, - sync::{atomic::AtomicU64, Arc}, - time::{SystemTime, UNIX_EPOCH}, -}; - -use async_executor::Executor; -use futures::prelude::*; -use log::*; - -use super::{ - aes_encrypt, messages, Channel, ControlCommand, ControlMessage, Dbsql, MessagePayload, - ProtocolSlab, SlabsManagerSafe, -}; - -use crate::{ - net::ChannelPtr, - serial::{deserialize, serialize}, - Result, -}; - -pub type AddrsStorage = Arc<async_std::sync::Mutex<Vec<SocketAddr>>>; - -pub type Clock = Arc<AtomicU64>; - -pub fn get_current_time() -> u64 { - let start = SystemTime::now(); - let since_the_epoch = - start.duration_since(UNIX_EPOCH).expect("Incorrect system clock: time went backwards"); - - since_the_epoch.as_secs() * 1000 + since_the_epoch.subsec_nanos() as u64 / 1_000_000 -} - -pub fn save_to_addrs_store(stored_addrs: &[SocketAddr]) -> Result<()> { - let path = default_config_dir()?.join("addrs.add"); - let mut writer = OpenOptions::new().write(true).create(true).open(path)?; - let buffer = serialize(&stored_addrs.to_vec()); - writer.write_all(&buffer)?; - Ok(()) -} - -pub fn default_config_dir() -> Result<PathBuf> { - let mut path = PathBuf::new(); - - if let Some(home_dir) = dirs::home_dir() { - path = home_dir; - }; - - let path = path.join(".darkpulse/"); - if !path.exists() { - match std::fs::create_dir(&path) { - Err(err) => { - eprintln!("error: Creating config dir: {}", err); - std::process::exit(-1); - } - Ok(()) => (), - } - } - - Ok(path) -} - -pub fn load_stored_addrs() -> Result<Vec<SocketAddr>> { - let path = default_config_dir()?.join("addrs.add"); - println!("{:?}", path); - let mut reader = OpenOptions::new().read(true).write(true).create(true).open(path)?; - let mut buffer = Vec::new(); - reader.read_to_end(&mut buffer)?; - if !buffer.is_empty() { - let addrs: Vec<SocketAddr> = deserialize(&buffer)?; - Ok(addrs) - } else { - Ok(vec![]) - } -} - -pub async fn pack_slab( - channel_secret: &[u8; 32], - username: String, - message: String, - control_command: ControlCommand, -) -> Result<messages::SlabMessage> { - let nonce: [u8; 12] = rand::random(); - let timestamp = chrono::offset::Utc::now(); - let timestamp: i64 = timestamp.timestamp_millis() / 1000; - - let msg_payload = MessagePayload { nickname: username, text: message, timestamp }; - - let control_message = ControlMessage { control: control_command, payload: msg_payload }; - - let ser_message = serialize(&control_message); - - let ciphertext = aes_encrypt(channel_secret, &nonce, &ser_message[..]) - .expect("error during encrypting the message"); - - let slab = messages::SlabMessage { nonce, ciphertext }; - - Ok(slab) -} - -pub fn setup_username(newname: Option<String>, db: &Dbsql) -> Result<String> { - let mut _username: String = String::new(); - match newname { - Some(nm) => { - _username = nm.clone(); - db.add_username(&nm).unwrap(); - } - None => { - _username = db.get_username()?; - if _username.is_empty() { - _username = String::from("username"); - } - } - } - Ok(_username) -} - -pub async fn read_line<R: AsyncBufRead + Unpin>(reader: &mut R) -> Result<String> { - let mut buf = String::new(); - let _ = reader.read_line(&mut buf).await?; - Ok(buf.trim().to_string()) -} - -pub fn choose_channel(db: &Dbsql, channel_name: Option<String>) -> Result<Channel> { - let channels = db.get_channels()?; - let mut main_channel = Channel::gen_new(String::from("test_channel")); - if !channels.is_empty() { - match channel_name { - Some(name) => { - main_channel = channels - .iter() - .find(|ch| ch.get_channel_name() == &name) - .unwrap_or_else(|| panic!("there is no channel with the name {}: ", name)) - .clone(); - } - None => { - main_channel = channels.first().unwrap().clone(); - } - } - } else { - error!("there are no channels available"); - db.add_channel(&main_channel)?; - } - Ok(main_channel) -} - -pub async fn setup_network_channel( - executor: Arc<Executor<'_>>, - channel: ChannelPtr, - slabman: SlabsManagerSafe, -) { - let message_subsytem = channel.get_message_subsystem(); - - message_subsytem.add_dispatch::<messages::SyncMessage>().await; - message_subsytem.add_dispatch::<messages::InvMessage>().await; - message_subsytem.add_dispatch::<messages::GetSlabsMessage>().await; - message_subsytem.add_dispatch::<messages::SlabMessage>().await; - - let protocol_slab = ProtocolSlab::new(slabman, channel.clone()).await; - protocol_slab.clone().start(executor.clone()).await; -} diff --git a/src/lib.rs b/src/lib.rs index 39c725eda..f396084a7 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -22,7 +22,4 @@ pub mod wallet; #[cfg(feature = "tui")] pub mod tui; -#[cfg(feature = "darkpulse")] -pub mod darkpulse; - pub use crate::error::{Error, Result}; diff --git a/src/service/mod.rs b/src/service/mod.rs index 03591c169..211a8b687 100644 --- a/src/service/mod.rs +++ b/src/service/mod.rs @@ -1,20 +1,4 @@ -pub mod bridge; pub mod gateway; pub mod reqrep; -#[cfg(feature = "btc")] -pub mod btc; -#[cfg(feature = "btc")] -pub use btc::{Account, BtcFailed, BtcResult, Keypair, PubAddress}; - -#[cfg(feature = "sol")] -pub mod sol; -#[cfg(feature = "sol")] -pub use sol::{SolClient, SolFailed, SolResult}; - -#[cfg(feature = "eth")] -pub mod eth; -#[cfg(feature = "eth")] -pub use eth::{EthClient, EthFailed, EthResult}; - pub use gateway::{GatewayClient, GatewayService, GatewaySlabsSubscriber}; diff --git a/src/util/mod.rs b/src/util/mod.rs index 2eee7f622..d84318325 100644 --- a/src/util/mod.rs +++ b/src/util/mod.rs @@ -10,7 +10,7 @@ pub use async_util::sleep; pub use loader::ContractLoader; pub use net_name::NetworkName; pub use parse::{assign_id, decode_base10, encode_base10, generate_id, generate_id2}; -pub use path::{expand_path, join_config_path}; +pub use path::{expand_path, join_config_path, load_keypair_to_str}; pub use token_list::{DrkTokenList, TokenList}; pub use address::Address; diff --git a/src/util/path.rs b/src/util/path.rs index 8efd5d8dc..17141c958 100644 --- a/src/util/path.rs +++ b/src/util/path.rs @@ -1,5 +1,9 @@ -use crate::Result; -use std::path::{Path, PathBuf}; +use std::{ + fs, + path::{Path, PathBuf}, +}; + +use crate::{Error, Result}; pub fn expand_path(path: &str) -> Result<PathBuf> { let ret: PathBuf; @@ -30,3 +34,14 @@ pub fn join_config_path(file: &Path) -> Result<PathBuf> { Ok(path) } + +pub fn load_keypair_to_str(path: PathBuf) -> Result<String> { + if Path::new(&path).exists() { + let key = fs::read(&path)?; + let str_buff = std::str::from_utf8(&key)?; + Ok(str_buff.to_string()) + } else { + println!("Could not parse keypair path"); + Err(Error::KeypairPathNotFound) + } +} diff --git a/src/wallet/cashierdb.rs b/src/wallet/cashierdb.rs index 8e53275d6..9052240c7 100644 --- a/src/wallet/cashierdb.rs +++ b/src/wallet/cashierdb.rs @@ -49,7 +49,7 @@ pub struct CashierDb { impl WalletApi for CashierDb {} impl CashierDb { - pub async fn new(path: &str, password: String) -> Result<CashierDbPtr> { + pub async fn new(path: &str, password: &str) -> Result<CashierDbPtr> { debug!("new() Constructor called"); if password.trim().is_empty() { error!("Password is empty. You must set a password to use the wallet."); @@ -65,7 +65,7 @@ impl CashierDb { } let mut connect_opts = SqliteConnectOptions::from_str(path)? - .pragma("key", password) + .pragma("key", password.to_string()) .create_if_missing(true) .journal_mode(SqliteJournalMode::Off); @@ -486,7 +486,7 @@ mod tests { #[async_std::test] async fn test_cashierdb() -> Result<()> { - let wallet = CashierDb::new("sqlite::memory:", WPASS.to_string()).await?; + let wallet = CashierDb::new("sqlite::memory:", WPASS).await?; // init_db() wallet.init_db().await?; diff --git a/src/wallet/walletdb.rs b/src/wallet/walletdb.rs index ad272563f..82f8a5d49 100644 --- a/src/wallet/walletdb.rs +++ b/src/wallet/walletdb.rs @@ -46,7 +46,7 @@ pub struct WalletDb { impl WalletApi for WalletDb {} impl WalletDb { - pub async fn new(path: &str, password: String) -> Result<WalletPtr> { + pub async fn new(path: &str, password: &str) -> Result<WalletPtr> { if password.trim().is_empty() { error!("Password is empty. You must set a password to use the wallet."); return Err(Error::from(ClientFailed::EmptyPassword)) @@ -61,7 +61,7 @@ impl WalletDb { } let mut connect_opts = SqliteConnectOptions::from_str(path)? - .pragma("key", password) + .pragma("key", password.to_string()) .create_if_missing(true) .journal_mode(SqliteJournalMode::Off); @@ -404,7 +404,7 @@ mod tests { #[async_std::test] async fn test_walletdb() -> Result<()> { - let wallet = WalletDb::new("sqlite::memory:", WPASS.to_string()).await?; + let wallet = WalletDb::new("sqlite::memory:", WPASS).await?; let keypair = Keypair::random(&mut OsRng); // init_db()