diff --git a/Cargo.lock b/Cargo.lock index d5ee56ef..6d750517 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -158,7 +158,7 @@ dependencies = [ "rand 0.7.3", "serde", "serde_json", - "tokio", + "tokio 0.2.24", ] [[package]] @@ -264,19 +264,9 @@ dependencies = [ "structopt", "swap", "testcontainers", - "tokio", + "tokio 1.0.1", "tokio-tungstenite", - "warp", -] - -[[package]] -name = "buf_redux" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b953a6887648bb07a535631f2bc00fbdb2a2216f135552cb3f534ed136b9c07f" -dependencies = [ - "memchr", - "safemem", + "warp 0.3.0", ] [[package]] @@ -303,6 +293,12 @@ version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0e4cec68f03f32e44924783795810fa50a7035d8c8ebe78580ad7e6c703fba38" +[[package]] +name = "bytes" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad1f8e949d755f9d79112b5bb46938e0ef9d3804a0b16dfab13aafcaa5f0fa72" + [[package]] name = "cc" version = "1.0.66" @@ -522,7 +518,7 @@ dependencies = [ "sha2", "testcontainers", "thiserror", - "tokio", + "tokio 1.0.1", "tracing", "url", ] @@ -734,13 +730,24 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "getrandom" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4060f4657be78b8e766215b02b18a2e862d83745545de804638e2b545e81aee6" +dependencies = [ + "cfg-if 1.0.0", + "libc", + "wasi 0.10.0+wasi-snapshot-preview1", +] + [[package]] name = "h2" version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5e4728fd124914ad25e99e3d15a9361a879f6620f63cb56bbb08f95abb97a535" dependencies = [ - "bytes", + "bytes 0.5.6", "fnv", "futures-core", "futures-sink", @@ -748,8 +755,28 @@ dependencies = [ "http", "indexmap", "slab", - "tokio", - "tokio-util", + "tokio 0.2.24", + "tokio-util 0.3.1", + "tracing", + "tracing-futures", +] + +[[package]] +name = "h2" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b67e66362108efccd8ac053abafc8b7a8d86a37e6e48fc4f6f7485eb5e9e6a5" +dependencies = [ + "bytes 1.0.0", + "fnv", + "futures-core", + "futures-sink", + "futures-util", + "http", + "indexmap", + "slab", + "tokio 1.0.1", + "tokio-util 0.6.0", "tracing", "tracing-futures", ] @@ -768,7 +795,7 @@ checksum = "ed18eb2459bf1a09ad2d6b1547840c3e5e62882fa09b9a6a20b1de8e3228848f" dependencies = [ "base64 0.12.3", "bitflags", - "bytes", + "bytes 0.5.6", "headers-core", "http", "mime", @@ -856,7 +883,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "84129d298a6d57d246960ff8eb831ca4af3f96d29e2e28848dae275408658e26" dependencies = [ - "bytes", + "bytes 0.5.6", "fnv", "itoa", ] @@ -870,7 +897,7 @@ dependencies = [ "http", "serde", "serde_json", - "warp", + "warp 0.2.5", ] [[package]] @@ -879,7 +906,17 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13d5ff830006f7646652e057693569bfe0d51760c0085a071769d142a205111b" dependencies = [ - "bytes", + "bytes 0.5.6", + "http", +] + +[[package]] +name = "http-body" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2861bd27ee074e5ee891e8b539837a9430012e249d7f0ca2d795650f579c1994" +dependencies = [ + "bytes 1.0.0", "http", ] @@ -907,19 +944,43 @@ version = "0.13.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f6ad767baac13b44d4529fcf58ba2cd0995e36e7b435bc5b039de6f47e880dbf" dependencies = [ - "bytes", + "bytes 0.5.6", + "futures-channel", + "futures-core", + "futures-util", + "h2 0.2.7", + "http", + "http-body 0.3.1", + "httparse", + "httpdate", + "itoa", + "pin-project 1.0.2", + "socket2", + "tokio 0.2.24", + "tower-service", + "tracing", + "want", +] + +[[package]] +name = "hyper" +version = "0.14.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12219dc884514cb4a6a03737f4413c0e01c23a1b059b0156004b23f1e19dccbe" +dependencies = [ + "bytes 1.0.0", "futures-channel", "futures-core", "futures-util", - "h2", + "h2 0.3.0", "http", - "http-body", + "http-body 0.4.0", "httparse", "httpdate", "itoa", "pin-project 1.0.2", "socket2", - "tokio", + "tokio 1.0.1", "tower-service", "tracing", "want", @@ -927,15 +988,15 @@ dependencies = [ [[package]] name = "hyper-tls" -version = "0.4.3" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d979acc56dcb5b8dddba3917601745e877576475aa046df3226eabdecef78eed" +checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" dependencies = [ - "bytes", - "hyper", + "bytes 1.0.0", + "hyper 0.14.2", "native-tls", - "tokio", - "tokio-tls", + "tokio 1.0.1", + "tokio-native-tls", ] [[package]] @@ -961,11 +1022,11 @@ dependencies = [ [[package]] name = "input_buffer" -version = "0.3.1" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19a8a95243d5a0398cae618ec29477c6e3cb631152be5c19481f80bc71559754" +checksum = "f97967975f448f1a7ddb12b0bc41069d09ed6a1c161a92687e057325db35d413" dependencies = [ - "bytes", + "bytes 1.0.0", ] [[package]] @@ -1009,8 +1070,9 @@ dependencies = [ [[package]] name = "jsonrpc_client" -version = "0.3.0" -source = "git+https://github.com/thomaseizinger/rust-jsonrpc-client#18c5a1b0e7e70d1022f4b009acb676372463829d" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18fb8fc4b9e0b44f34346238c1e39e59067747ae7913b2e3d903b56e6c2c8062" dependencies = [ "async-trait", "jsonrpc_client_macro", @@ -1022,8 +1084,9 @@ dependencies = [ [[package]] name = "jsonrpc_client_macro" -version = "0.1.0" -source = "git+https://github.com/thomaseizinger/rust-jsonrpc-client#18c5a1b0e7e70d1022f4b009acb676372463829d" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5f3d1e50fefe4252d2e44c805663e73a8c0b2002b73f834ea055c8ed7fc46a8" dependencies = [ "quote", "syn", @@ -1125,21 +1188,23 @@ dependencies = [ "kernel32-sys", "libc", "log", - "miow", + "miow 0.2.2", "net2", "slab", "winapi 0.2.8", ] [[package]] -name = "mio-uds" -version = "0.6.8" +name = "mio" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afcb699eb26d4332647cc848492bbc15eafb26f08d0304550d5aa1f612e066f0" +checksum = "e50ae3f04d169fcc9bde0b547d1c205219b7157e07ded9c5aff03e0637cb3ed7" dependencies = [ - "iovec", "libc", - "mio", + "log", + "miow 0.3.6", + "ntapi", + "winapi 0.3.9", ] [[package]] @@ -1155,21 +1220,13 @@ dependencies = [ ] [[package]] -name = "multipart" -version = "0.17.0" +name = "miow" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8209c33c951f07387a8497841122fc6f712165e3f9bda3e6be4645b58188f676" +checksum = "5a33c1b55807fbed163481b5ba66db4b2fa6cde694a5027be10fb724206c5897" dependencies = [ - "buf_redux", - "httparse", - "log", - "mime", - "mime_guess", - "quick-error", - "rand 0.6.5", - "safemem", - "tempfile", - "twoway", + "socket2", + "winapi 0.3.9", ] [[package]] @@ -1201,6 +1258,15 @@ dependencies = [ "winapi 0.3.9", ] +[[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-traits" version = "0.2.14" @@ -1210,6 +1276,16 @@ dependencies = [ "autocfg 1.0.1", ] +[[package]] +name = "num_cpus" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05499f3756671c15885fee9034446956fff3f243d6077b91e5767df161f766b3" +dependencies = [ + "hermit-abi", + "libc", +] + [[package]] name = "once_cell" version = "1.5.2" @@ -1401,12 +1477,6 @@ dependencies = [ "unicode-xid", ] -[[package]] -name = "quick-error" -version = "1.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" - [[package]] name = "quote" version = "1.0.7" @@ -1441,13 +1511,25 @@ version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" dependencies = [ - "getrandom", + "getrandom 0.1.15", "libc", "rand_chacha 0.2.2", "rand_core 0.5.1", "rand_hc 0.2.0", ] +[[package]] +name = "rand" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c24fcd450d3fa2b592732565aa4f17a27a61c65ece4726353e000939b0edee34" +dependencies = [ + "libc", + "rand_chacha 0.3.0", + "rand_core 0.6.1", + "rand_hc 0.3.0", +] + [[package]] name = "rand_chacha" version = "0.1.1" @@ -1468,6 +1550,16 @@ dependencies = [ "rand_core 0.5.1", ] +[[package]] +name = "rand_chacha" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e12735cf05c9e10bf21534da50a147b924d555dc7a547c42e6bb2d5b6017ae0d" +dependencies = [ + "ppv-lite86", + "rand_core 0.6.1", +] + [[package]] name = "rand_core" version = "0.3.1" @@ -1489,7 +1581,16 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" dependencies = [ - "getrandom", + "getrandom 0.1.15", +] + +[[package]] +name = "rand_core" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c026d7df8b298d90ccbbc5190bd04d85e159eaf5576caeacf8741da93ccbd2e5" +dependencies = [ + "getrandom 0.2.1", ] [[package]] @@ -1510,6 +1611,15 @@ dependencies = [ "rand_core 0.5.1", ] +[[package]] +name = "rand_hc" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3190ef7066a446f2e7f42e239d161e905420ccab01eb967c9eb27d21b2322a73" +dependencies = [ + "rand_core 0.6.1", +] + [[package]] name = "rand_isaac" version = "0.1.1" @@ -1608,25 +1718,24 @@ dependencies = [ [[package]] name = "reqwest" -version = "0.10.10" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0718f81a8e14c4dbb3b34cf23dc6aaf9ab8a0dfec160c534b3dbca1aaa21f47c" +checksum = "fd281b1030aa675fb90aa994d07187645bb3c8fc756ca766e7c3070b439de9de" dependencies = [ "base64 0.13.0", - "bytes", + "bytes 1.0.0", "encoding_rs", "futures-core", "futures-util", "http", - "http-body", - "hyper", + "http-body 0.4.0", + "hyper 0.14.2", "hyper-tls", "ipnet", "js-sys", "lazy_static", "log", "mime", - "mime_guess", "native-tls", "percent-encoding", "pin-project-lite 0.2.0", @@ -1634,8 +1743,8 @@ dependencies = [ "serde", "serde_json", "serde_urlencoded 0.7.0", - "tokio", - "tokio-tls", + "tokio 1.0.1", + "tokio-native-tls", "url", "wasm-bindgen", "wasm-bindgen-futures", @@ -1711,11 +1820,11 @@ dependencies = [ [[package]] name = "rustls" -version = "0.18.1" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d1126dcf58e93cee7d098dbda643b5f92ed724f1f6a63007c1116eed6700c81" +checksum = "064fd21ff87c6e87ed4506e68beb42459caa4a0e2eb144932e6776768556980b" dependencies = [ - "base64 0.12.3", + "base64 0.13.0", "log", "ring", "sct", @@ -1734,12 +1843,6 @@ version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e" -[[package]] -name = "safemem" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef703b7cb59335eae2eb93ceb664c0eb7ea6bf567079d843e09420219668e072" - [[package]] name = "salsa20" version = "0.7.2" @@ -2054,7 +2157,7 @@ dependencies = [ "sha2", "testcontainers", "thiserror", - "tokio", + "tokio 1.0.1", ] [[package]] @@ -2177,25 +2280,38 @@ version = "0.2.24" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "099837d3464c16a808060bb3f02263b412f6fafcb5d01c533d309985fbeebe48" dependencies = [ - "bytes", + "bytes 0.5.6", "fnv", "futures-core", "iovec", "lazy_static", - "libc", "memchr", - "mio", - "mio-uds", + "mio 0.6.23", "pin-project-lite 0.1.11", "slab", +] + +[[package]] +name = "tokio" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d258221f566b6c803c7b4714abadc080172b272090cdc5e244a6d4dd13c3a6bd" +dependencies = [ + "autocfg 1.0.1", + "bytes 1.0.0", + "libc", + "memchr", + "mio 0.7.7", + "num_cpus", + "pin-project-lite 0.2.0", "tokio-macros", ] [[package]] name = "tokio-macros" -version = "0.2.6" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e44da00bfc73a25f814cd8d7e57a68a5c31b74b3152a0a1d1f590c97ed06265a" +checksum = "42517d2975ca3114b22a16192634e8241dc5cc1f130be194645970cc1c371494" dependencies = [ "proc-macro2", "quote", @@ -2204,35 +2320,36 @@ dependencies = [ [[package]] name = "tokio-native-tls" -version = "0.1.0" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd608593a919a8e05a7d1fc6df885e40f6a88d3a70a3a7eff23ff27964eda069" +checksum = "f7d995660bd2b7f8c1568414c1126076c13fbb725c40112dc0120b78eb9b717b" dependencies = [ "native-tls", - "tokio", + "tokio 1.0.1", ] [[package]] -name = "tokio-tls" -version = "0.3.1" +name = "tokio-stream" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a70f4fcd7b3b24fb194f837560168208f669ca8cb70d0c4b862944452396343" +checksum = "e4cdeb73537e63f98adcd73138af75e3f368ccaecffaa29d7eb61b9f5a440457" dependencies = [ - "native-tls", - "tokio", + "futures-core", + "pin-project-lite 0.2.0", + "tokio 1.0.1", ] [[package]] name = "tokio-tungstenite" -version = "0.11.0" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d9e878ad426ca286e4dcae09cbd4e1973a7f8987d97570e2469703dd7f5720c" +checksum = "e1a5f475f1b9d077ea1017ecbc60890fda8e54942d680ca0b1d2b47cfa2d861b" dependencies = [ "futures-util", "log", "native-tls", - "pin-project 0.4.27", - "tokio", + "pin-project 1.0.2", + "tokio 1.0.1", "tokio-native-tls", "tungstenite", ] @@ -2243,12 +2360,27 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "be8242891f2b6cbef26a2d7e8605133c2c554cd35b3e4948ea892d6d68436499" dependencies = [ - "bytes", + "bytes 0.5.6", "futures-core", "futures-sink", "log", "pin-project-lite 0.1.11", - "tokio", + "tokio 0.2.24", +] + +[[package]] +name = "tokio-util" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36135b7e7da911f5f8b9331209f7fab4cc13498f3fff52f72a710c78187e3148" +dependencies = [ + "bytes 1.0.0", + "futures-core", + "futures-sink", + "log", + "pin-project-lite 0.2.0", + "tokio 1.0.1", + "tokio-stream", ] [[package]] @@ -2308,33 +2440,24 @@ checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" [[package]] name = "tungstenite" -version = "0.11.1" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0308d80d86700c5878b9ef6321f020f29b1bb9d5ff3cab25e75e23f3a492a23" +checksum = "8ada8297e8d70872fa9a551d93250a9f407beb9f37ef86494eb20012a2ff7c24" dependencies = [ - "base64 0.12.3", + "base64 0.13.0", "byteorder", - "bytes", + "bytes 1.0.0", "http", "httparse", "input_buffer", "log", "native-tls", - "rand 0.7.3", + "rand 0.8.1", "sha-1 0.9.2", "url", "utf-8", ] -[[package]] -name = "twoway" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59b11b2b5241ba34be09c3cc85a36e56e48f9888862e19cedf23336d35316ed1" -dependencies = [ - "memchr", -] - [[package]] name = "typenum" version = "1.12.0" @@ -2466,7 +2589,7 @@ dependencies = [ "console_error_panic_hook", "elements-fun", "futures", - "getrandom", + "getrandom 0.1.15", "hex", "hkdf", "itertools", @@ -2505,28 +2628,54 @@ version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f41be6df54c97904af01aa23e613d4521eed7ab23537cede692d4058f6449407" dependencies = [ - "bytes", + "bytes 0.5.6", "futures", "headers", "http", - "hyper", + "hyper 0.13.9", "log", "mime", "mime_guess", - "multipart", "pin-project 0.4.27", "scoped-tls", "serde", "serde_json", "serde_urlencoded 0.6.1", - "tokio", - "tokio-tungstenite", + "tokio 0.2.24", "tower-service", "tracing", "tracing-futures", "urlencoding", ] +[[package]] +name = "warp" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3dafd0aac2818a94a34df0df1100a7356c493d8ede4393875fd0b5c51bb6bc80" +dependencies = [ + "bytes 1.0.0", + "futures", + "headers", + "http", + "hyper 0.14.2", + "log", + "mime", + "mime_guess", + "percent-encoding", + "pin-project 1.0.2", + "scoped-tls", + "serde", + "serde_json", + "serde_urlencoded 0.7.0", + "tokio 1.0.1", + "tokio-stream", + "tokio-util 0.6.0", + "tower-service", + "tracing", + "tracing-futures", +] + [[package]] name = "wasi" version = "0.9.0+wasi-snapshot-preview1" diff --git a/bobtimus/Cargo.toml b/bobtimus/Cargo.toml index da3705ea..dd517a8f 100644 --- a/bobtimus/Cargo.toml +++ b/bobtimus/Cargo.toml @@ -13,10 +13,10 @@ env_logger = "0.8" futures = { version = "0.3", default-features = false } hex = "0.4" hmac = "0.10" -http-api-problem = { version = "0.15", features = [ "with_warp" ] } +http-api-problem = { version = "0.19", features = [ "with_warp" ] } log = "0.4" mime_guess = "2.0.3" -reqwest = "0.10" +reqwest = "0.11" rust-embed = "5.7.0" rust_decimal = "1.8" serde = { version = "1", features = [ "derive" ] } @@ -24,9 +24,9 @@ serde_json = "1" sha2 = "0.9" structopt = "0.3" swap = { path = "../swap" } -tokio = { version = "0.2", features = [ "macros" ] } -tokio-tungstenite = { version = "0.11", features = [ "tls" ] } -warp = "0.2.5" +tokio = { version = "1", features = [ "macros", "rt-multi-thread" ] } +tokio-tungstenite = { version = "0.13", features = [ "tls" ] } +warp = { version = "0.3", default-features = false } [dev-dependencies] testcontainers = "0.11" diff --git a/bobtimus/src/fixed_rate.rs b/bobtimus/src/fixed_rate.rs index cbf6ced0..031fa571 100644 --- a/bobtimus/src/fixed_rate.rs +++ b/bobtimus/src/fixed_rate.rs @@ -1,11 +1,8 @@ use crate::{LatestRate, LiquidUsdt, Rate}; -use anyhow::Result; -use async_trait::async_trait; -use futures::Stream; use std::{convert::TryFrom, time::Duration}; use tokio::{ sync::watch::{self, Receiver}, - time::delay_for, + time::sleep, }; #[derive(Clone)] @@ -18,16 +15,16 @@ impl Service { tokio::spawn(async move { loop { - let _ = tx.broadcast(data); + let _ = tx.send(data); - delay_for(Duration::from_secs(5)).await; + sleep(Duration::from_secs(5)).await; } }); Self(rx) } - pub fn subscribe(&self) -> impl Stream + Clone { + pub fn subscribe(&self) -> Receiver { self.0.clone() } } @@ -38,10 +35,9 @@ impl Default for Service { } } -#[async_trait] impl LatestRate for Service { - async fn latest_rate(&mut self) -> Result { - Ok(fixed_rate()) + fn latest_rate(&mut self) -> Rate { + fixed_rate() } } diff --git a/bobtimus/src/kraken.rs b/bobtimus/src/kraken.rs index 46e58353..17a43035 100644 --- a/bobtimus/src/kraken.rs +++ b/bobtimus/src/kraken.rs @@ -1,7 +1,6 @@ use crate::{LatestRate, LiquidUsdt, Rate}; use anyhow::{anyhow, bail, Result}; -use async_trait::async_trait; -use futures::{Future, SinkExt, Stream, StreamExt}; +use futures::{SinkExt, StreamExt}; use reqwest::Url; use serde::{Deserialize, Serialize}; use serde_json::Value; @@ -22,38 +21,17 @@ const SUBSCRIBE_XBT_USD_TICKER_PAYLOAD: &str = r#" #[derive(Clone)] pub struct RateService { receiver: Receiver, - latest_rate: Rate, } -impl Future for RateService { - type Output = Rate; - - fn poll( - mut self: std::pin::Pin<&mut Self>, - cx: &mut std::task::Context<'_>, - ) -> std::task::Poll { - match self.receiver.poll_next_unpin(cx) { - std::task::Poll::Ready(Some(rate)) => { - self.latest_rate = rate; - self.poll(cx) - } - std::task::Poll::Ready(None) | std::task::Poll::Pending => { - std::task::Poll::from(self.latest_rate) - } - } - } -} - -#[async_trait] impl LatestRate for RateService { - async fn latest_rate(&mut self) -> anyhow::Result { - Ok(self.await) + fn latest_rate(&mut self) -> Rate { + *self.receiver.borrow() } } impl RateService { pub async fn new() -> Result { - let (tx, mut rx) = watch::channel(Rate::ZERO); + let (tx, rx) = watch::channel(Rate::ZERO); let (ws, _response) = tokio_tungstenite::connect_async(Url::parse(KRAKEN_WS_URL).expect("valid url")).await?; @@ -84,24 +62,16 @@ impl RateService { } }; - let _ = tx.broadcast(rate); + let _ = tx.send(rate); } }); write.send(SUBSCRIBE_XBT_USD_TICKER_PAYLOAD.into()).await?; - let latest_rate = rx - .next() - .await - .ok_or_else(|| anyhow!("latest rate stream has ended"))?; - - Ok(Self { - receiver: rx, - latest_rate, - }) + Ok(Self { receiver: rx }) } - pub fn subscribe(&self) -> impl Stream + Clone { + pub fn subscribe(&self) -> Receiver { self.receiver.clone() } } @@ -172,26 +142,4 @@ mod tests { let _ = serde_json::from_str::(sample_response).unwrap(); } - - #[tokio::test] - async fn latest_rate_does_not_wait_for_next_value() { - let (write, read) = watch::channel(Rate::ZERO); - - let latest_rate = Rate { - ask: LiquidUsdt::from_str_in_dollar("20000.0").unwrap(), - bid: LiquidUsdt::from_str_in_dollar("19000.0").unwrap(), - }; - let _ = write.broadcast(latest_rate).unwrap(); - - let mut service = RateService { - receiver: read, - latest_rate: Rate::ZERO, - }; - - let rate = service.latest_rate().await.unwrap(); - assert_eq!(rate, latest_rate); - - let rate = service.latest_rate().await.unwrap(); - assert_eq!(rate, latest_rate); - } } diff --git a/bobtimus/src/lib.rs b/bobtimus/src/lib.rs index 393fa995..fdf04048 100644 --- a/bobtimus/src/lib.rs +++ b/bobtimus/src/lib.rs @@ -1,5 +1,4 @@ use anyhow::{Context, Result}; -use async_trait::async_trait; use elements_fun::{ bitcoin::{ secp256k1::{All, Secp256k1}, @@ -55,11 +54,7 @@ impl Bobtimus { R: RngCore + CryptoRng, RS: LatestRate, { - let latest_rate = self - .rate_service - .latest_rate() - .await - .context("failed to get latest rate")?; + let latest_rate = self.rate_service.latest_rate(); let usdt_amount = latest_rate.buy_quote(payload.btc_amount)?; let bob_inputs = self @@ -197,9 +192,8 @@ impl Bobtimus { } } -#[async_trait] pub trait LatestRate { - async fn latest_rate(&mut self) -> Result; + fn latest_rate(&mut self) -> Rate; } #[cfg(test)] diff --git a/elements-harness/Cargo.toml b/elements-harness/Cargo.toml index 18b1b607..0c9f58d6 100644 --- a/elements-harness/Cargo.toml +++ b/elements-harness/Cargo.toml @@ -11,16 +11,16 @@ elements-fun = { path = "../elements-fun", features = [ "serde" ] } futures = "0.3.5" hex = "0.4.2" hmac = "0.10" -jsonrpc_client = { git = "https://github.com/thomaseizinger/rust-jsonrpc-client", branch = "master", features = [ "reqwest" ] } +jsonrpc_client = { version = "0.5", features = [ "reqwest" ] } log = "0.4" rand = "0.7" -reqwest = { version = "0.10" } +reqwest = "0.11" serde = "1.0" serde_json = "1.0" sha2 = "0.9" testcontainers = "0.11" thiserror = "1.0" -tokio = { version = "0.2", default-features = false, features = [ "blocking", "macros", "rt-core", "time" ] } +tokio = { version = "1", default-features = false, features = [ "macros", "rt", "time" ] } tracing = "0.1" url = "2" diff --git a/swap/Cargo.toml b/swap/Cargo.toml index 86329c21..188f6448 100644 --- a/swap/Cargo.toml +++ b/swap/Cargo.toml @@ -15,4 +15,4 @@ thiserror = "1.0.23" [dev-dependencies] elements-harness = { path = "../elements-harness" } testcontainers = "0.11" -tokio = { version = "0.2", default-features = false, features = [ "blocking", "macros", "rt-core", "time" ] } +tokio = { version = "1", default-features = false, features = [ "macros", "rt", "time" ] } diff --git a/waves/wallet/Cargo.toml b/waves/wallet/Cargo.toml index e8f95a26..fb8bc115 100644 --- a/waves/wallet/Cargo.toml +++ b/waves/wallet/Cargo.toml @@ -26,7 +26,7 @@ js-sys = "0.3" log = "0.4" rand = { version = "0.6", features = [ "wasm-bindgen" ] } rand_core = { version = "0.5", features = [ "std" ] } -reqwest = { version = "0.10", default-features = false, features = [ "rustls", "json" ] } +reqwest = { version = "0.11", default-features = false, features = [ "rustls", "json" ] } rust_decimal = "1" scrypt = { version = "0.5" } serde = { version = "1", features = [ "derive" ] }