diff --git a/Cargo.lock b/Cargo.lock index a0f8a8a0c..750a476aa 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -224,7 +224,7 @@ dependencies = [ "slab", "socket2", "waker-fn", - "winapi", + "winapi 0.3.9", ] [[package]] @@ -282,7 +282,7 @@ dependencies = [ "libc", "once_cell", "signal-hook", - "winapi", + "winapi 0.3.9", ] [[package]] @@ -367,7 +367,7 @@ checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" dependencies = [ "hermit-abi", "libc", - "winapi", + "winapi 0.3.9", ] [[package]] @@ -397,6 +397,15 @@ version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a4521f3e3d031370679b3b140beb36dfe4801b09ac77e30c61941f97df3ef28b" +[[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.13.0" @@ -409,6 +418,12 @@ version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2dabbe35f96fb9507f7330793dc490461b2962659ac5d427181e451a623751d1" +[[package]] +name = "bech32" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf9ff0bbfd639f15c74af777d81383cf53efb7c93613f6cab67c6c11e05bbf8b" + [[package]] name = "bellman" version = "0.8.1" @@ -460,17 +475,38 @@ version = "0.26.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6742ec672d3f12506f4ac5c0d853926ff1f94e675f60ffd3224039972bf663f1" dependencies = [ - "bech32", - "bitcoin_hashes", + "bech32 0.7.3", + "bitcoin_hashes 0.9.7", "secp256k1", ] +[[package]] +name = "bitcoin" +version = "0.27.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a427b27dae305157520d86673f2393b3eb08d880609abfcffc6e3c3c820e764" +dependencies = [ + "bech32 0.8.1", + "bitcoin_hashes 0.10.0", + "secp256k1", + "serde", +] + [[package]] name = "bitcoin_hashes" version = "0.9.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7ce18265ec2324ad075345d5814fbeed4f41f0a660055dc78840b74d19b874b1" +[[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.2.1" @@ -649,7 +685,7 @@ dependencies = [ "num-integer", "num-traits", "time 0.1.43", - "winapi", + "winapi 0.3.9", ] [[package]] @@ -704,15 +740,6 @@ dependencies = [ "syn", ] -[[package]] -name = "clokwerk" -version = "0.4.0-rc1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8cca22ab3f48e39a5e8432ea296da1063b3d000c3d3c37da9fa586961e21bf73" -dependencies = [ - "chrono", -] - [[package]] name = "concurrent-queue" version = "1.2.2" @@ -763,7 +790,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "03a5d7b21829bc7b4bf4754a978a241ae54ea55a40f92bb20216e54096f4b951" dependencies = [ "aes-gcm", - "base64", + "base64 0.13.0", "hkdf", "hmac", "percent-encoding", @@ -953,7 +980,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "232295399409a8b7ae41276757b5a1cc21032848d42bff2352261f958b3ca29a" dependencies = [ "nix", - "winapi", + "winapi 0.3.9", ] [[package]] @@ -968,7 +995,7 @@ dependencies = [ "openssl-sys", "schannel", "socket2", - "winapi", + "winapi 0.3.9", ] [[package]] @@ -984,7 +1011,7 @@ dependencies = [ "openssl-sys", "pkg-config", "vcpkg", - "winapi", + "winapi 0.3.9", ] [[package]] @@ -1001,7 +1028,7 @@ dependencies = [ "async-trait", "bellman", "bimap", - "bitcoin", + "bitcoin 0.26.2", "bitvec", "blake2b_simd", "blake2s_simd", @@ -1009,11 +1036,11 @@ dependencies = [ "bs58", "bytes 1.0.1", "clap", - "clokwerk", "crypto_api_chachapoly", "ctrlc", "dirs 3.0.2", "easy-parallel", + "electrum-client", "failure", "failure_derive", "ff", @@ -1033,7 +1060,6 @@ dependencies = [ "rand_core 0.5.1", "rand_xorshift", "regex", - "reqwest", "rocksdb", "rusqlite", "secp256k1", @@ -1133,7 +1159,7 @@ checksum = "03d86534ed367a67548dc68113a0f5db55432fdfbb6e6f9d77704397d95d5780" dependencies = [ "libc", "redox_users", - "winapi", + "winapi 0.3.9", ] [[package]] @@ -1154,6 +1180,22 @@ 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 0.27.0", + "log", + "rustls", + "serde", + "serde_json", + "socks", + "webpki", + "webpki-roots", +] + [[package]] name = "encoding_rs" version = "0.8.28" @@ -1509,25 +1551,6 @@ dependencies = [ "subtle", ] -[[package]] -name = "h2" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "825343c4eef0b63f541f8903f395dc5beb362a979b5799a84062527ef1e37726" -dependencies = [ - "bytes 1.0.1", - "fnv", - "futures-core", - "futures-sink", - "futures-util", - "http", - "indexmap", - "slab", - "tokio", - "tokio-util", - "tracing", -] - [[package]] name = "hashbrown" version = "0.11.2" @@ -1601,17 +1624,6 @@ dependencies = [ "itoa", ] -[[package]] -name = "http-body" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "399c583b2979440c60be0821a6199eca73bc3c8dcd9d070d75ac726e2c6186e5" -dependencies = [ - "bytes 1.0.1", - "http", - "pin-project-lite", -] - [[package]] name = "http-client" version = "6.4.1" @@ -1636,7 +1648,7 @@ dependencies = [ "anyhow", "async-channel", "async-std", - "base64", + "base64 0.13.0", "cookie", "futures-lite", "infer", @@ -1655,49 +1667,6 @@ version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f3a87b616e37e93c22fb19bcd386f02f3af5ea98a25670ad0fce773de23c5e68" -[[package]] -name = "httpdate" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6456b8a6c8f33fee7d958fcd1b60d55b11940a79e63ae87013e6d22e26034440" - -[[package]] -name = "hyper" -version = "0.14.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b61cf2d1aebcf6e6352c97b81dc2244ca29194be1b276f5d8ad5c6330fffb11" -dependencies = [ - "bytes 1.0.1", - "futures-channel", - "futures-core", - "futures-util", - "h2", - "http", - "http-body", - "httparse", - "httpdate", - "itoa", - "pin-project-lite", - "socket2", - "tokio", - "tower-service", - "tracing", - "want", -] - -[[package]] -name = "hyper-tls" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" -dependencies = [ - "bytes 1.0.1", - "hyper", - "native-tls", - "tokio", - "tokio-native-tls", -] - [[package]] name = "idna" version = "0.2.3" @@ -1734,12 +1703,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 = "isahc" version = "0.9.14" @@ -1857,7 +1820,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6f84d96438c15fcd6c3f244c8fce01d1e2b9c6b5623e9c711dc9286d8fc92d6a" dependencies = [ "cfg-if 1.0.0", - "winapi", + "winapi 0.3.9", ] [[package]] @@ -1977,28 +1940,6 @@ dependencies = [ "autocfg", ] -[[package]] -name = "mio" -version = "0.7.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c2bdb6314ec10835cd3293dd268473a835c02b7b352e788be788b3c6ca6bb16" -dependencies = [ - "libc", - "log", - "miow", - "ntapi", - "winapi", -] - -[[package]] -name = "miow" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9f1c5b025cda876f66ef43a113f91ebc9f4ccef34843000e0adf6ebbab84e21" -dependencies = [ - "winapi", -] - [[package]] name = "multimap" version = "0.8.3" @@ -2048,15 +1989,6 @@ dependencies = [ "version_check", ] -[[package]] -name = "ntapi" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f6bb902e437b6d86e03cce10a7e2af662292c5dfef23b65899ea3ac9354ad44" -dependencies = [ - "winapi", -] - [[package]] name = "num-bigint" version = "0.3.2" @@ -2226,7 +2158,7 @@ dependencies = [ "libc", "redox_syscall", "smallvec", - "winapi", + "winapi 0.3.9", ] [[package]] @@ -2289,7 +2221,7 @@ dependencies = [ "libc", "log", "wepoll-ffi", - "winapi", + "winapi 0.3.9", ] [[package]] @@ -2510,41 +2442,22 @@ version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7" dependencies = [ - "winapi", + "winapi 0.3.9", ] [[package]] -name = "reqwest" -version = "0.11.4" +name = "ring" +version = "0.16.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "246e9f61b9bb77df069a947682be06e31ac43ea37862e244a69f177694ea6d22" +checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc" dependencies = [ - "base64", - "bytes 1.0.1", - "encoding_rs", - "futures-core", - "futures-util", - "http", - "http-body", - "hyper", - "hyper-tls", - "ipnet", - "js-sys", - "lazy_static", - "log", - "mime", - "native-tls", - "percent-encoding", - "pin-project-lite", - "serde", - "serde_urlencoded", - "tokio", - "tokio-native-tls", - "url", - "wasm-bindgen", - "wasm-bindgen-futures", + "cc", + "libc", + "once_cell", + "spin", + "untrusted", "web-sys", - "winreg", + "winapi 0.3.9", ] [[package]] @@ -2593,6 +2506,19 @@ dependencies = [ "semver", ] +[[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", + "webpki", +] + [[package]] name = "ryu" version = "1.0.5" @@ -2606,7 +2532,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f05ba609c234e60bee0d547fe94a4c7e9da733d1c962cf6e59efa4cd9c8bc75" dependencies = [ "lazy_static", - "winapi", + "winapi 0.3.9", ] [[package]] @@ -2615,6 +2541,16 @@ 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 = "secp256k1" version = "0.20.3" @@ -2622,6 +2558,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "97d03ceae636d0fed5bae6a7f4f664354c5f4fcedf6eef053fef17e49f837d0a" dependencies = [ "secp256k1-sys", + "serde", ] [[package]] @@ -2838,9 +2775,27 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9e3dfc207c526015c632472a77be09cf1b6e46866581aecae5cc38fb4235dea2" dependencies = [ "libc", - "winapi", + "winapi 0.3.9", ] +[[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 = "spin" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" + [[package]] name = "spinning_top" version = "0.2.4" @@ -2982,7 +2937,7 @@ dependencies = [ "rand 0.8.4", "redox_syscall", "remove_dir_all", - "winapi", + "winapi 0.3.9", ] [[package]] @@ -2992,7 +2947,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c0863a3345e70f61d613eab32ee046ccd1bcc5f9105fe402c61fcd0c13eeb8b5" dependencies = [ "dirs 2.0.2", - "winapi", + "winapi 0.3.9", ] [[package]] @@ -3040,7 +2995,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ca8a50ef2360fbd1eeb0ecd46795a87a19024eb4b53c5dc916ca1fd95fe62438" dependencies = [ "libc", - "winapi", + "winapi 0.3.9", ] [[package]] @@ -3055,7 +3010,7 @@ dependencies = [ "stdweb", "time-macros", "version_check", - "winapi", + "winapi 0.3.9", ] [[package]] @@ -3105,45 +3060,6 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" -[[package]] -name = "tokio" -version = "1.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b7b349f11a7047e6d1276853e612d152f5e8a352c61917887cc2169e2366b4c" -dependencies = [ - "autocfg", - "bytes 1.0.1", - "libc", - "memchr", - "mio", - "pin-project-lite", - "winapi", -] - -[[package]] -name = "tokio-native-tls" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7d995660bd2b7f8c1568414c1126076c13fbb725c40112dc0120b78eb9b717b" -dependencies = [ - "native-tls", - "tokio", -] - -[[package]] -name = "tokio-util" -version = "0.6.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1caa0b0c8d94a049db56b5acf8cba99dc0623aab1b26d5b5f5e2d945846b3592" -dependencies = [ - "bytes 1.0.1", - "futures-core", - "futures-sink", - "log", - "pin-project-lite", - "tokio", -] - [[package]] name = "toml" version = "0.5.8" @@ -3153,12 +3069,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.26" @@ -3202,12 +3112,6 @@ dependencies = [ "tracing", ] -[[package]] -name = "try-lock" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" - [[package]] name = "typenum" version = "1.13.0" @@ -3269,6 +3173,12 @@ dependencies = [ "subtle", ] +[[package]] +name = "untrusted" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" + [[package]] name = "url" version = "2.2.2" @@ -3325,16 +3235,6 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca" -[[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" @@ -3354,8 +3254,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d54ee1d4ed486f78874278e63e4069fc1ab9f6a18ca492076ffb90c5eb2997fd" dependencies = [ "cfg-if 1.0.0", - "serde", - "serde_json", "wasm-bindgen-macro", ] @@ -3425,6 +3323,25 @@ 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-roots" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8eff4b7516a57307f9349c64bf34caa34b940b66fed4b2fb3136cb7386e5739" +dependencies = [ + "webpki", +] + [[package]] name = "wepoll-ffi" version = "0.1.2" @@ -3434,6 +3351,12 @@ 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" @@ -3444,6 +3367,12 @@ 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" @@ -3456,7 +3385,7 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" dependencies = [ - "winapi", + "winapi 0.3.9", ] [[package]] @@ -3466,12 +3395,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] -name = "winreg" -version = "0.7.0" +name = "ws2_32-sys" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0120db82e8a1e0b9fb3345a539c478767c0048d842860994d96113d5b667bd69" +checksum = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e" dependencies = [ - "winapi", + "winapi 0.2.8", + "winapi-build", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 694627915..c977c47c0 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -80,8 +80,7 @@ dirs = "3.0.2" bitcoin = "0.26.2" secp256k1 = "0.20.3" -clokwerk = "0.4.0-rc1" -reqwest = "0.11.4" +electrum-client = "0.8.0" [dependencies.rusqlite] version = "0.25.1" diff --git a/src/bin/cashierd.rs b/src/bin/cashierd.rs index fd4b2a39c..44ac3e352 100644 --- a/src/bin/cashierd.rs +++ b/src/bin/cashierd.rs @@ -21,6 +21,8 @@ async fn start(executor: Arc>, config: Arc<&CashierdConfig>) -> Res let gateway_addr: SocketAddr = config.gateway_url.parse()?; + let btc_endpoint: String = config.btc_endpoint.clone(); + let database_path = config.database_path.clone(); let database_path = join_config_path(&PathBuf::from(database_path))?; let rocks = Rocks::new(&database_path)?; @@ -31,12 +33,10 @@ async fn start(executor: Arc>, config: Arc<&CashierdConfig>) -> Res debug!(target: "Client", "Creating gateway client"); let mut gateway = GatewayClient::new(gateway_addr, slabstore)?; - debug!(target: "fn::start gateway client", "start() Gateway Client started"); gateway.start().await?; - // Probably not ideal to create an Arc here - let cashier = CashierService::new(accept_addr, wallet, gateway)?; - + debug!(target: "cashierd", "starting cashier service"); + let cashier = CashierService::new(accept_addr, btc_endpoint, wallet, gateway)?; cashier.start(executor.clone()).await?; Ok(()) } diff --git a/src/cli/cli_config.rs b/src/cli/cli_config.rs index 96a28326e..5d8ff842d 100644 --- a/src/cli/cli_config.rs +++ b/src/cli/cli_config.rs @@ -191,6 +191,11 @@ pub struct CashierdConfig { #[serde(rename = "database_path")] pub database_path: String, + #[serde(default)] + #[serde(rename = "btc_endpoint")] + pub btc_endpoint: String, + + #[serde(default)] #[serde(rename = "gateway_url")] pub gateway_url: String, @@ -209,7 +214,7 @@ impl Default for CashierdConfig { let accept_url = String::from("127.0.0.1:7777"); let gateway_url = String::from("127.0.0.1:3333"); let database_path = String::from("cashierd.db"); - + let btc_endpoint = String::from("tcp://electrum.blockstream.info:50001"); let mut lp = PathBuf::new(); lp.push(env::temp_dir()); lp.push("cashierd.log"); @@ -219,6 +224,7 @@ impl Default for CashierdConfig { Self { accept_url, database_path, + btc_endpoint, gateway_url, log_path, password, diff --git a/src/service/btc.rs b/src/service/btc.rs index e46c63efc..54165f104 100644 --- a/src/service/btc.rs +++ b/src/service/btc.rs @@ -1,4 +1,4 @@ -use crate::Result; +use crate::{ Error, Result }; use rand::distributions::Alphanumeric; use rand::{thread_rng, Rng}; @@ -8,11 +8,12 @@ use bitcoin::util::ecdsa::{PrivateKey, PublicKey}; use secp256k1::key::SecretKey; use bitcoin::network::constants::Network; +use electrum_client::{Client, ElectrumApi}; use async_executor::Executor; use async_std::sync::Arc; -use clokwerk::AsyncScheduler; +use log::debug; // Swap out these types for any future non bitcoin-rs types pub type PubAddress = Address; @@ -21,7 +22,6 @@ pub type PrivKey = PrivateKey; #[allow(dead_code)] pub struct BitcoinKeys { - scheduler: AsyncScheduler, secret_key: SecretKey, bitcoin_private_key: PrivateKey, pub bitcoin_public_key: PublicKey, @@ -54,26 +54,13 @@ impl BitcoinKeys { let pub_address = Address::p2pkh(&bitcoin_public_key, Network::Testnet); - // Create a scheduler for checking the address balance - let scheduler = AsyncScheduler::new(); - Ok(Self { - scheduler, secret_key, bitcoin_private_key, bitcoin_public_key, pub_address, }) } - pub fn start_scheduler(&self, _executor: Arc>) -> Result<()> { - //&self.scheduler.every(10.minutes()).run(); - - Ok(()) - } - - async fn _watch_address(&self) -> Result<()> { - Ok(()) - } // This should do a db lookup to return the same obj pub fn address_from_slice(key: &[u8]) -> Result
{ diff --git a/src/service/cashier.rs b/src/service/cashier.rs index 9cf497744..319fbda31 100644 --- a/src/service/cashier.rs +++ b/src/service/cashier.rs @@ -1,6 +1,9 @@ use super::reqrep::{PeerId, RepProtocol, Reply, ReqProtocol, Request}; -use super::btc::{BitcoinKeys, PubAddress}; +use super::btc::{BitcoinKeys, PubAddress, PubKey}; +//use bitcoin::blockdata::script::Script; +use electrum_client::{Client, ElectrumApi}; +use electrum_client::bitcoin::Script; use super::GatewayClient; use crate::blockchain::Slab; @@ -34,6 +37,7 @@ pub struct CashierService { addr: SocketAddr, wallet: CashierDbPtr, gateway: GatewayClient, + btc_endpoint: String, mint_params: groth16::Parameters, mint_pvk: groth16::PreparedVerifyingKey, spend_params: groth16::Parameters, @@ -43,6 +47,7 @@ pub struct CashierService { impl CashierService { pub fn new( addr: SocketAddr, + btc_endpoint: String, wallet: CashierDbPtr, gateway: GatewayClient, ) -> Result> { @@ -54,6 +59,7 @@ impl CashierService { addr, wallet, gateway, + btc_endpoint, mint_params, mint_pvk, spend_params, @@ -67,6 +73,7 @@ impl CashierService { let mut protocol = RepProtocol::new(self.addr.clone(), service_name.clone()); let (send, recv) = protocol.start().await?; + let ex2 = executor.clone(); let handle_request_task = executor.spawn(self.handle_request_loop(send.clone(), recv.clone(), executor.clone())); @@ -78,6 +85,15 @@ impl CashierService { Ok(()) } + pub async fn subscribe_to_address(&self, script: Script) -> Result<()> { + debug!(target: "BTC", "Subscribe"); + let mut client = Client::new(&self.btc_endpoint).unwrap(); + + let response = client.script_subscribe(&script).unwrap(); + + Ok(()) + } + async fn mint_dbtc(&mut self, dkey_pub: jubjub::SubgroupPoint, value: u64) -> Result<()> { let cashier_secret = self.wallet.get_cashier_private().unwrap(); @@ -172,7 +188,7 @@ impl CashierService { info!("Received dkey->btc msg"); // start scheduler for checking balance - let _result = btc_keys.start_scheduler(executor.clone()); + //let _result = btc_keys.start_scheduler(executor.clone()); info!("Waiting for address balance"); } 1 => {