gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[taler-depolymerization] branch master updated (1166a20 -> 2e68570)


From: gnunet
Subject: [taler-depolymerization] branch master updated (1166a20 -> 2e68570)
Date: Thu, 05 Oct 2023 00:46:10 +0200

This is an automated email from the git hooks/post-receive script.

antoine pushed a change to branch master
in repository depolymerization.

    from 1166a20  -note on URL change
     new b64461c  Update dependencies and bump msrv to 1.70.0 to follow debian 
unstable package
     new b898b96  Improve test runner and improve initdb commands
     new 2e68570  Test support for bitcoind 24.1 and small improvements

The 3 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 Cargo.lock                      | 1436 +++++++++++++++++++++------------------
 Cargo.toml                      |    4 +
 README.md                       |    4 +-
 btc-wire/Cargo.toml             |   22 +-
 btc-wire/src/bin/segwit-demo.rs |    9 +-
 btc-wire/src/btc_config.rs      |    1 +
 btc-wire/src/lib.rs             |   15 +-
 btc-wire/src/loops/worker.rs    |  113 +--
 btc-wire/src/main.rs            |   15 +-
 btc-wire/src/rpc.rs             |   33 +-
 btc-wire/src/rpc_utils.rs       |    5 +-
 btc-wire/src/taler_utils.rs     |    3 +-
 common/Cargo.toml               |   22 +-
 common/src/reconnect.rs         |   11 +-
 eth-wire/Cargo.toml             |   15 +-
 eth-wire/src/main.rs            |    8 +-
 eth-wire/src/rpc.rs             |    4 +-
 instrumentation/Cargo.toml      |   21 +-
 instrumentation/src/btc.rs      |   22 +-
 instrumentation/src/eth.rs      |    2 +-
 instrumentation/src/main.rs     |  133 +++-
 instrumentation/src/utils.rs    |   46 +-
 makefile                        |    4 +-
 script/prepare.sh               |    8 +-
 uri-pack/Cargo.toml             |   12 +-
 wire-gateway/Cargo.toml         |   20 +-
 wire-gateway/src/main.rs        |    6 +-
 27 files changed, 1111 insertions(+), 883 deletions(-)

diff --git a/Cargo.lock b/Cargo.lock
index 816e6e2..d81fc47 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -4,9 +4,9 @@ version = 3
 
 [[package]]
 name = "addr2line"
-version = "0.19.0"
+version = "0.21.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "a76fd60b23679b7d19bd066031410fb7e458ccc5e958eb5c325888ce4baedc97"
+checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb"
 dependencies = [
  "gimli",
 ]
@@ -18,24 +18,19 @@ source = 
"registry+https://github.com/rust-lang/crates.io-index";
 checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
 
 [[package]]
-name = "ahash"
-version = "0.7.6"
+name = "aho-corasick"
+version = "1.1.1"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47"
+checksum = "ea5d730647d4fadd988536d06fecce94b7b4f2a7efdae548f1cf4b63205518ab"
 dependencies = [
- "getrandom",
- "once_cell",
- "version_check",
+ "memchr",
 ]
 
 [[package]]
-name = "aho-corasick"
-version = "0.7.20"
+name = "android-tzdata"
+version = "0.1.1"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac"
-dependencies = [
- "memchr",
-]
+checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0"
 
 [[package]]
 name = "android_system_properties"
@@ -53,25 +48,62 @@ source = 
"registry+https://github.com/rust-lang/crates.io-index";
 checksum = "4b46cbb362ab8752921c97e041f5e366ee6297bd428a31275b9fcf1e380f7299"
 
 [[package]]
-name = "async-trait"
-version = "0.1.64"
+name = "anstream"
+version = "0.6.4"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "1cd7fce9ba8c3c042128ce72d8b2ddbf3a05747efb67ea0313c635e10bda47a2"
+checksum = "2ab91ebe16eb252986481c5b62f6098f3b698a45e34b5b98200cf20dd2484a44"
 dependencies = [
- "proc-macro2",
- "quote",
- "syn",
+ "anstyle",
+ "anstyle-parse",
+ "anstyle-query",
+ "anstyle-wincon",
+ "colorchoice",
+ "utf8parse",
 ]
 
 [[package]]
-name = "atty"
-version = "0.2.14"
+name = "anstyle"
+version = "1.0.4"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
+checksum = "7079075b41f533b8c61d2a4d073c4676e1f8b249ff94a393b0595db304e0dd87"
+
+[[package]]
+name = "anstyle-parse"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "317b9a89c1868f5ea6ff1d9539a69f45dffc21ce321ac1fd1160dfa48c8e2140"
 dependencies = [
- "hermit-abi 0.1.19",
- "libc",
- "winapi",
+ "utf8parse",
+]
+
+[[package]]
+name = "anstyle-query"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "5ca11d4be1bab0c8bc8734a9aa7bf4ee8316d462a08c6ac5052f888fef5b494b"
+dependencies = [
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "anstyle-wincon"
+version = "3.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "f0699d10d2f4d628a98ee7b57b289abbc98ff3bad977cb3152709d4bf2330628"
+dependencies = [
+ "anstyle",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "async-trait"
+version = "0.1.73"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "bc00ceb34980c03614e35a3a4e218276a0a824e911d07651cd0d858a51e8c0f0"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.37",
 ]
 
 [[package]]
@@ -82,9 +114,9 @@ checksum = 
"d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
 
 [[package]]
 name = "backtrace"
-version = "0.3.67"
+version = "0.3.69"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "233d376d6d185f2a3093e58f283f60f880315b6c60075b01f36b3b85154564ca"
+checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837"
 dependencies = [
  "addr2line",
  "cc",
@@ -103,15 +135,9 @@ checksum = 
"23ce669cd6c8588f79e15cf450314f9638f967fc5770ff1c7c1deb0925ea7cfa"
 
 [[package]]
 name = "base64"
-version = "0.13.1"
+version = "0.21.4"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8"
-
-[[package]]
-name = "base64"
-version = "0.21.0"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "a4a4ddaa51a5bc52a6948f74c06d20aaaddb71924eab79b8c97a8c556e942d6a"
+checksum = "9ba43ea6f343b788c8764558649e08df62f86c6ef251fdaeb1ffd010a9ae50a2"
 
 [[package]]
 name = "bech32"
@@ -121,22 +147,31 @@ checksum = 
"d86b93f97252c47b41663388e6d155714a9d0c398b99f1005cbc5f978b29f445"
 
 [[package]]
 name = "bitcoin"
-version = "0.29.2"
+version = "0.30.1"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "0694ea59225b0c5f3cb405ff3f670e4828358ed26aec49dc352f730f0cb1a8a3"
+checksum = "4e99ff7289b20a7385f66a0feda78af2fc119d28fb56aea8886a9cd0a4abdd75"
 dependencies = [
  "bech32",
+ "bitcoin-private",
  "bitcoin_hashes",
+ "hex_lit",
  "secp256k1",
  "serde",
 ]
 
+[[package]]
+name = "bitcoin-private"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "73290177011694f38ec25e165d0387ab7ea749a4b81cd4c80dae5988229f7a57"
+
 [[package]]
 name = "bitcoin_hashes"
-version = "0.11.0"
+version = "0.12.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "90064b8dee6815a6470d60bad07bbbaee885c0e12d04177138fa3291a01b7bc4"
+checksum = "5d7066118b13d4b20b23645932dfb3a81ce7e29f95726c2036fa33cd7b092501"
 dependencies = [
+ "bitcoin-private",
  "serde",
 ]
 
@@ -147,38 +182,32 @@ source = 
"registry+https://github.com/rust-lang/crates.io-index";
 checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
 
 [[package]]
-name = "block-buffer"
-version = "0.10.3"
+name = "bitflags"
+version = "2.4.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "69cce20737498f97b993470a6e536b8523f0af7892a4f928cceb1ac5e52ebe7e"
-dependencies = [
- "generic-array",
-]
+checksum = "b4682ae6287fcf752ecaabbfcc7b6f9b72aa33933dc23a554d853aea8eea8635"
 
 [[package]]
-name = "bstr"
-version = "0.2.17"
+name = "block-buffer"
+version = "0.10.4"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "ba3569f383e8f1598449f1a423e72e99569137b47740b1da11ef19af3d5c3223"
+checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
 dependencies = [
- "lazy_static",
- "memchr",
- "regex-automata",
- "serde",
+ "generic-array",
 ]
 
 [[package]]
 name = "btc-wire"
 version = "0.1.0"
 dependencies = [
- "base64 0.21.0",
  "bech32",
  "bitcoin",
- "clap 4.0.32",
- "clap_lex 0.3.0",
+ "clap",
+ "clap_lex",
  "common",
+ "const-hex",
  "criterion",
- "hex",
+ "data-encoding",
  "rust-ini",
  "serde",
  "serde_json",
@@ -188,9 +217,9 @@ dependencies = [
 
 [[package]]
 name = "bumpalo"
-version = "3.12.0"
+version = "3.14.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "0d261e256854913907f67ed06efbc3338dfe6179796deefc1ff763fc1aee5535"
+checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec"
 
 [[package]]
 name = "byteorder"
@@ -200,9 +229,9 @@ checksum = 
"14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
 
 [[package]]
 name = "bytes"
-version = "1.3.0"
+version = "1.5.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "dfb24e866b15a1af2a1b663f10c6b6b8f397a84aadb828f12e5b289ec23a3a3c"
+checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223"
 
 [[package]]
 name = "cast"
@@ -212,9 +241,12 @@ checksum = 
"37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5"
 
 [[package]]
 name = "cc"
-version = "1.0.79"
+version = "1.0.83"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f"
+checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0"
+dependencies = [
+ "libc",
+]
 
 [[package]]
 name = "cfg-if"
@@ -224,22 +256,22 @@ checksum = 
"baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
 
 [[package]]
 name = "chrono"
-version = "0.4.23"
+version = "0.4.31"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "16b0a3d9ed01224b22057780a37bb8c5dbfe1be8ba48678e7bf57ec4b385411f"
+checksum = "7f2c685bad3eb3d45a01354cedb7d5faa66194d1d58ba6e267a8de788f79db38"
 dependencies = [
+ "android-tzdata",
  "iana-time-zone",
- "num-integer",
  "num-traits",
  "serde",
- "winapi",
+ "windows-targets 0.48.5",
 ]
 
 [[package]]
 name = "ciborium"
-version = "0.2.0"
+version = "0.2.1"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "b0c137568cc60b904a7724001b35ce2630fd00d5d84805fbb608ab89509d788f"
+checksum = "effd91f6c78e5a4ace8a5d3c0b6bfaec9e2baaef55f3efc00e45fb2e477ee926"
 dependencies = [
  "ciborium-io",
  "ciborium-ll",
@@ -248,15 +280,15 @@ dependencies = [
 
 [[package]]
 name = "ciborium-io"
-version = "0.2.0"
+version = "0.2.1"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "346de753af073cc87b52b2083a506b38ac176a44cfb05497b622e27be899b369"
+checksum = "cdf919175532b369853f5d5e20b26b43112613fd6fe7aee757e35f7a44642656"
 
 [[package]]
 name = "ciborium-ll"
-version = "0.2.0"
+version = "0.2.1"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "213030a2b5a4e0c0892b6652260cf6ccac84827b83a85a534e178e3906c4cf1b"
+checksum = "defaa24ecc093c77630e6c15e17c51f5e187bf35ee514f4e2d67baaa96dae22b"
 dependencies = [
  "ciborium-io",
  "half",
@@ -264,98 +296,76 @@ dependencies = [
 
 [[package]]
 name = "clap"
-version = "3.2.23"
+version = "4.4.6"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "71655c45cb9845d3270c9d6df84ebe72b4dad3c2ba3f7023ad47c144e4e473a5"
+checksum = "d04704f56c2cde07f43e8e2c154b43f216dc5c92fc98ada720177362f953b956"
 dependencies = [
- "bitflags",
- "clap_lex 0.2.4",
- "indexmap",
- "textwrap",
+ "clap_builder",
+ "clap_derive",
 ]
 
 [[package]]
-name = "clap"
-version = "4.0.32"
+name = "clap_builder"
+version = "4.4.6"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "a7db700bc935f9e43e88d00b0850dae18a63773cfbec6d8e070fccf7fef89a39"
+checksum = "0e231faeaca65ebd1ea3c737966bf858971cd38c3849107aa3ea7de90a804e45"
 dependencies = [
- "bitflags",
- "clap_derive",
- "clap_lex 0.3.0",
- "is-terminal",
- "once_cell",
+ "anstream",
+ "anstyle",
+ "clap_lex",
  "strsim",
- "termcolor",
 ]
 
 [[package]]
 name = "clap_derive"
-version = "4.0.21"
+version = "4.4.2"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "0177313f9f02afc995627906bbd8967e2be069f5261954222dac78290c2b9014"
+checksum = "0862016ff20d69b84ef8247369fabf5c008a7417002411897d40ee1f4532b873"
 dependencies = [
  "heck",
- "proc-macro-error",
  "proc-macro2",
  "quote",
- "syn",
+ "syn 2.0.37",
 ]
 
 [[package]]
 name = "clap_lex"
-version = "0.2.4"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "2850f2f5a82cbf437dd5af4d49848fbdfc27c157c3d010345776f952765261c5"
-dependencies = [
- "os_str_bytes",
-]
-
-[[package]]
-name = "clap_lex"
-version = "0.3.0"
+version = "0.5.1"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "0d4198f73e42b4936b35b5bb248d81d2b595ecb170da0bac7655c54eedfa8da8"
-dependencies = [
- "os_str_bytes",
-]
+checksum = "cd7cc57abe963c6d3b9d8be5b06ba7c8957a930305ca90304f24ef040aa6f961"
 
 [[package]]
 name = "clap_mangen"
-version = "0.2.7"
+version = "0.2.14"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "eb258c6232b4d728d13d6072656627924c16707aae6267cd5a1ea05abff9a25c"
+checksum = "b44f35c514163027542f7147797ff930523eea288e03642727348ef1a9666f6b"
 dependencies = [
- "clap 4.0.32",
+ "clap",
  "roff",
 ]
 
 [[package]]
-name = "codespan-reporting"
-version = "0.11.1"
+name = "color-backtrace"
+version = "0.6.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e"
+checksum = "b6fcd4d200ae702628e8d54bafff5f7e7397b031a5849656a6f5bfe2c5fb780d"
 dependencies = [
+ "backtrace",
  "termcolor",
- "unicode-width",
 ]
 
 [[package]]
-name = "color-backtrace"
-version = "0.5.1"
+name = "colorchoice"
+version = "1.0.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "cd6c04463c99389fff045d2b90ce84f5131332712c7ffbede020f5e9ad1ed685"
-dependencies = [
- "atty",
- "backtrace",
- "termcolor",
-]
+checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7"
 
 [[package]]
 name = "common"
 version = "0.1.0"
 dependencies = [
  "base32",
+ "exponential-backoff",
  "flexi_logger",
  "log",
  "postgres",
@@ -370,17 +380,64 @@ dependencies = [
  "zeroize",
 ]
 
+[[package]]
+name = "console"
+version = "0.15.7"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "c926e00cc70edefdc64d3a5ff31cc65bb97a3460097762bd23afb4d8145fccf8"
+dependencies = [
+ "encode_unicode",
+ "lazy_static",
+ "libc",
+ "unicode-width",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "const-hex"
+version = "1.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "c37be52ef5e3b394db27a2341010685ad5103c72ac15ce2e9420a7e8f93f342c"
+dependencies = [
+ "cfg-if",
+ "cpufeatures",
+ "hex",
+ "serde",
+]
+
+[[package]]
+name = "const-random"
+version = "0.1.15"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "368a7a772ead6ce7e1de82bfb04c485f3db8ec744f72925af5735e29a22cc18e"
+dependencies = [
+ "const-random-macro",
+ "proc-macro-hack",
+]
+
+[[package]]
+name = "const-random-macro"
+version = "0.1.15"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "9d7d6ab3c3a2282db210df5f02c4dab6e0a7057af0fb7ebd4070f30fe05c0ddb"
+dependencies = [
+ "getrandom",
+ "once_cell",
+ "proc-macro-hack",
+ "tiny-keccak",
+]
+
 [[package]]
 name = "core-foundation-sys"
-version = "0.8.3"
+version = "0.8.4"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc"
+checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa"
 
 [[package]]
 name = "cpufeatures"
-version = "0.2.5"
+version = "0.2.9"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "28d997bd5e24a5928dd43e46dc529867e207907fe0b239c3477d924f7f2ca320"
+checksum = "a17b76ff3a4162b0b27f354a0c87015ddad39d35f9c0c36607a3bdd175dde1f1"
 dependencies = [
  "libc",
 ]
@@ -396,19 +453,19 @@ dependencies = [
 
 [[package]]
 name = "criterion"
-version = "0.4.0"
+version = "0.5.1"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "e7c76e09c1aae2bc52b3d2f29e13c6572553b30c4aa1b8a49fd70de6412654cb"
+checksum = "f2b12d017a929603d80db1831cd3a24082f8137ce19c69e6447f54f5fc8d692f"
 dependencies = [
  "anes",
- "atty",
  "cast",
  "ciborium",
- "clap 3.2.23",
+ "clap",
  "criterion-plot",
+ "is-terminal",
  "itertools",
- "lazy_static",
  "num-traits",
+ "once_cell",
  "oorandom",
  "plotters",
  "rayon",
@@ -430,21 +487,11 @@ dependencies = [
  "itertools",
 ]
 
-[[package]]
-name = "crossbeam-channel"
-version = "0.5.6"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "c2dd04ddaf88237dc3b8d8f9a3c1004b506b54b3313403944054d23c0870c521"
-dependencies = [
- "cfg-if",
- "crossbeam-utils",
-]
-
 [[package]]
 name = "crossbeam-deque"
-version = "0.8.2"
+version = "0.8.3"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "715e8152b692bba2d374b53d4875445368fdf21a94751410af607a5ac677d1fc"
+checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef"
 dependencies = [
  "cfg-if",
  "crossbeam-epoch",
@@ -453,9 +500,9 @@ dependencies = [
 
 [[package]]
 name = "crossbeam-epoch"
-version = "0.9.13"
+version = "0.9.15"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "01a9af1f4c2ef74bb8aa1f7e19706bc72d03598c8a570bb5de72243c7a9d9d5a"
+checksum = "ae211234986c545741a7dc064309f67ee1e5ad243d0e48335adc0484d960bcc7"
 dependencies = [
  "autocfg",
  "cfg-if",
@@ -466,9 +513,9 @@ dependencies = [
 
 [[package]]
 name = "crossbeam-utils"
-version = "0.8.14"
+version = "0.8.16"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "4fb766fa798726286dbbb842f174001dab8abc7b627a1dd86e0b7222a95d929f"
+checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294"
 dependencies = [
  "cfg-if",
 ]
@@ -491,75 +538,30 @@ dependencies = [
 
 [[package]]
 name = "csv"
-version = "1.1.6"
+version = "1.3.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "22813a6dc45b335f9bade10bf7271dc477e81113e89eb251a0bc2a8a81c536e1"
+checksum = "ac574ff4d437a7b5ad237ef331c17ccca63c46479e5b5453eb8e10bb99a759fe"
 dependencies = [
- "bstr",
  "csv-core",
- "itoa 0.4.8",
+ "itoa",
  "ryu",
  "serde",
 ]
 
 [[package]]
 name = "csv-core"
-version = "0.1.10"
+version = "0.1.11"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "2b2466559f260f48ad25fe6317b3c8dac77b5bdb5763ac7d9d6103530663bc90"
+checksum = "5efa2b3d7902f4b634a20cae3c9c4e6209dc4779feb6863329607560143efa70"
 dependencies = [
  "memchr",
 ]
 
-[[package]]
-name = "cxx"
-version = "1.0.88"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "322296e2f2e5af4270b54df9e85a02ff037e271af20ba3e7fe1575515dc840b8"
-dependencies = [
- "cc",
- "cxxbridge-flags",
- "cxxbridge-macro",
- "link-cplusplus",
-]
-
-[[package]]
-name = "cxx-build"
-version = "1.0.88"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "017a1385b05d631e7875b1f151c9f012d37b53491e2a87f65bff5c262b2111d8"
-dependencies = [
- "cc",
- "codespan-reporting",
- "once_cell",
- "proc-macro2",
- "quote",
- "scratch",
- "syn",
-]
-
-[[package]]
-name = "cxxbridge-flags"
-version = "1.0.88"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "c26bbb078acf09bc1ecda02d4223f03bdd28bd4874edcb0379138efc499ce971"
-
-[[package]]
-name = "cxxbridge-macro"
-version = "1.0.88"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "357f40d1f06a24b60ae1fe122542c1fb05d28d32acb2aed064e84bc2ad1e252e"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn",
-]
-
 [[package]]
 name = "darling"
-version = "0.14.2"
+version = "0.20.3"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "b0dd3cd20dc6b5a876612a6e5accfe7f3dd883db6d07acfbf14c128f61550dfa"
+checksum = "0209d94da627ab5605dcccf08bb18afa5009cfbef48d8a8b7d7bdbc79be25c5e"
 dependencies = [
  "darling_core",
  "darling_macro",
@@ -567,68 +569,82 @@ dependencies = [
 
 [[package]]
 name = "darling_core"
-version = "0.14.2"
+version = "0.20.3"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "a784d2ccaf7c98501746bf0be29b2022ba41fd62a2e622af997a03e9f972859f"
+checksum = "177e3443818124b357d8e76f53be906d60937f0d3a90773a664fa63fa253e621"
 dependencies = [
  "fnv",
  "ident_case",
  "proc-macro2",
  "quote",
  "strsim",
- "syn",
+ "syn 2.0.37",
 ]
 
 [[package]]
 name = "darling_macro"
-version = "0.14.2"
+version = "0.20.3"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "7618812407e9402654622dd402b0a89dff9ba93badd6540781526117b92aab7e"
+checksum = "836a9bbc7ad63342d6d6e7b815ccab164bc77a2d95d84bc3117a8c0d5c98e2d5"
 dependencies = [
  "darling_core",
  "quote",
- "syn",
+ "syn 2.0.37",
 ]
 
+[[package]]
+name = "data-encoding"
+version = "2.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "c2e66c9d817f1720209181c316d28635c050fa304f9c79e47a520882661b7308"
+
 [[package]]
 name = "deadpool"
-version = "0.9.5"
+version = "0.10.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "421fe0f90f2ab22016f32a9881be5134fdd71c65298917084b0c7477cbc3856e"
+checksum = "fb84100978c1c7b37f09ed3ce3e5f843af02c2a2c431bae5b19230dad2c1b490"
 dependencies = [
  "async-trait",
  "deadpool-runtime",
  "num_cpus",
- "retain_mut",
  "tokio",
 ]
 
 [[package]]
 name = "deadpool-postgres"
-version = "0.10.5"
+version = "0.11.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "836a24a9d49deefe610b8b60c767a7412e9a931d79a89415cd2d2d71630ca8d7"
+checksum = "40b75ba49590d27f677d3bebaf76cd15889ca8b308bc7ba99bfa25f1d7269c13"
 dependencies = [
  "deadpool",
- "log",
  "tokio",
  "tokio-postgres",
+ "tracing",
 ]
 
 [[package]]
 name = "deadpool-runtime"
-version = "0.1.2"
+version = "0.1.3"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "eaa37046cc0f6c3cc6090fbdbf73ef0b8ef4cfcc37f6befc0020f63e8cf121e1"
+checksum = "63dfa964fe2a66f3fde91fc70b267fe193d822c7e603e2a675a49a7f46ad3f49"
 dependencies = [
  "tokio",
 ]
 
+[[package]]
+name = "deranged"
+version = "0.3.8"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "f2696e8a945f658fd14dc3b87242e6b80cd0f36ff04ea560fa39082368847946"
+dependencies = [
+ "serde",
+]
+
 [[package]]
 name = "digest"
-version = "0.10.6"
+version = "0.10.7"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f"
+checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
 dependencies = [
  "block-buffer",
  "crypto-common",
@@ -637,15 +653,24 @@ dependencies = [
 
 [[package]]
 name = "dlv-list"
-version = "0.3.0"
+version = "0.5.1"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "0688c2a7f92e427f44895cd63841bff7b29f8d7a1648b9e7e07a4a365b2e1257"
+checksum = "8aead04dc46b5f263c25721cf25c9e595951d15055f8063f92392fa0d7f64cf4"
+dependencies = [
+ "const-random",
+]
 
 [[package]]
 name = "either"
-version = "1.8.1"
+version = "1.9.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91"
+checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07"
+
+[[package]]
+name = "encode_unicode"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f"
 
 [[package]]
 name = "env_logger"
@@ -657,15 +682,21 @@ dependencies = [
  "regex",
 ]
 
+[[package]]
+name = "equivalent"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
+
 [[package]]
 name = "errno"
-version = "0.2.8"
+version = "0.3.4"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "f639046355ee4f37944e44f60642c6f3a7efa3cf6b78c78a0d989a8ce6c396a1"
+checksum = "add4f07d43996f76ef320709726a556a9d4f965d9410d8d0271132d2f8293480"
 dependencies = [
  "errno-dragonfly",
  "libc",
- "winapi",
+ "windows-sys 0.48.0",
 ]
 
 [[package]]
@@ -682,11 +713,11 @@ dependencies = [
 name = "eth-wire"
 version = "0.1.0"
 dependencies = [
- "clap 4.0.32",
- "clap_lex 0.3.0",
+ "clap",
+ "clap_lex",
  "common",
+ "const-hex",
  "ethereum-types",
- "hex",
  "serde",
  "serde_json",
  "serde_repr",
@@ -718,6 +749,15 @@ dependencies = [
  "uint",
 ]
 
+[[package]]
+name = "exponential-backoff"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "47f78d87d930eee4b5686a2ab032de499c72bd1e954b84262bb03492a0f932cd"
+dependencies = [
+ "rand",
+]
+
 [[package]]
 name = "fallible-iterator"
 version = "0.2.0"
@@ -726,12 +766,15 @@ checksum = 
"4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7"
 
 [[package]]
 name = "fastrand"
-version = "1.8.0"
+version = "2.0.1"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "a7a407cfaa3385c4ae6b23e84623d48c2798d06e3e6a1878f7f59f17b3f86499"
-dependencies = [
- "instant",
-]
+checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5"
+
+[[package]]
+name = "finl_unicode"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "8fcfdc7a0362c9f4444381a9e697c79d435fe65b52a37466fc2c1184cee9edc6"
 
 [[package]]
 name = "fixed-hash"
@@ -746,9 +789,9 @@ dependencies = [
 
 [[package]]
 name = "flate2"
-version = "1.0.25"
+version = "1.0.27"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "a8a2db397cb1c8772f31494cb8917e48cd1e64f0fa7efac59fbd741a0a8ce841"
+checksum = "c6c98ee8095e9d1dcbf2fcc6d95acccb90d1c81db1e44725c6a984b1dbdfb010"
 dependencies = [
  "crc32fast",
  "miniz_oxide",
@@ -756,9 +799,9 @@ dependencies = [
 
 [[package]]
 name = "flexi_logger"
-version = "0.24.2"
+version = "0.27.2"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "ade8e86c48285f138a4d6ca15a2912e39bd6c74d62db42da4f1985f651a0b057"
+checksum = "64d1984eeb4ccb9a6f3fa5f2a1850d34afed6fd4ffcd1513b691eef9dda0f057"
 dependencies = [
  "chrono",
  "glob",
@@ -775,18 +818,18 @@ checksum = 
"3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
 
 [[package]]
 name = "form_urlencoded"
-version = "1.1.0"
+version = "1.2.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8"
+checksum = "a62bc1cf6f830c2ec14a513a9fb124d0a213a629668a4186f329db21fe045652"
 dependencies = [
  "percent-encoding",
 ]
 
 [[package]]
 name = "futures-channel"
-version = "0.3.26"
+version = "0.3.28"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "2e5317663a9089767a1ec00a487df42e0ca174b61b4483213ac24448e4664df5"
+checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2"
 dependencies = [
  "futures-core",
  "futures-sink",
@@ -794,38 +837,38 @@ dependencies = [
 
 [[package]]
 name = "futures-core"
-version = "0.3.26"
+version = "0.3.28"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "ec90ff4d0fe1f57d600049061dc6bb68ed03c7d2fbd697274c41805dcb3f8608"
+checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c"
 
 [[package]]
 name = "futures-macro"
-version = "0.3.26"
+version = "0.3.28"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "95a73af87da33b5acf53acfebdc339fe592ecf5357ac7c0a7734ab9d8c876a70"
+checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn",
+ "syn 2.0.37",
 ]
 
 [[package]]
 name = "futures-sink"
-version = "0.3.26"
+version = "0.3.28"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "f310820bb3e8cfd46c80db4d7fb8353e15dfff853a127158425f31e0be6c8364"
+checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e"
 
 [[package]]
 name = "futures-task"
-version = "0.3.26"
+version = "0.3.28"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "dcf79a1bf610b10f42aea489289c5a2c478a786509693b80cd39c44ccd936366"
+checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65"
 
 [[package]]
 name = "futures-util"
-version = "0.3.26"
+version = "0.3.28"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "9c1d6de3acfef38d2be4b1f543f553131788603495be83da675e180c8d6b7bd1"
+checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533"
 dependencies = [
  "futures-core",
  "futures-macro",
@@ -838,9 +881,9 @@ dependencies = [
 
 [[package]]
 name = "generic-array"
-version = "0.14.6"
+version = "0.14.7"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9"
+checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
 dependencies = [
  "typenum",
  "version_check",
@@ -848,9 +891,9 @@ dependencies = [
 
 [[package]]
 name = "getrandom"
-version = "0.2.8"
+version = "0.2.10"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31"
+checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427"
 dependencies = [
  "cfg-if",
  "libc",
@@ -859,9 +902,9 @@ dependencies = [
 
 [[package]]
 name = "gimli"
-version = "0.27.1"
+version = "0.28.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "221996f774192f0f718773def8201c4ae31f02616a54ccfc2d358bb0e5cefdec"
+checksum = "6fb8d784f27acf97159b40fc4db5ecd8aa23b9ad5ef69cdd136d3bc80665f0c0"
 
 [[package]]
 name = "glob"
@@ -880,33 +923,30 @@ name = "hashbrown"
 version = "0.12.3"
 source = "registry+https://github.com/rust-lang/crates.io-index";
 checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
-dependencies = [
- "ahash",
-]
 
 [[package]]
-name = "heck"
-version = "0.4.0"
+name = "hashbrown"
+version = "0.13.2"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9"
+checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e"
 
 [[package]]
-name = "hermit-abi"
-version = "0.1.19"
+name = "hashbrown"
+version = "0.14.1"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
-dependencies = [
- "libc",
-]
+checksum = "7dfda62a12f55daeae5015f81b0baea145391cb4520f86c248fc615d72640d12"
+
+[[package]]
+name = "heck"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
 
 [[package]]
 name = "hermit-abi"
-version = "0.2.6"
+version = "0.3.3"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7"
-dependencies = [
- "libc",
-]
+checksum = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7"
 
 [[package]]
 name = "hex"
@@ -914,6 +954,12 @@ version = "0.4.3"
 source = "registry+https://github.com/rust-lang/crates.io-index";
 checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
 
+[[package]]
+name = "hex_lit"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "3011d1213f159867b13cfd6ac92d2cd5f1345762c63be3554e84092d85a50bbd"
+
 [[package]]
 name = "hmac"
 version = "0.12.1"
@@ -925,13 +971,13 @@ dependencies = [
 
 [[package]]
 name = "http"
-version = "0.2.8"
+version = "0.2.9"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "75f43d41e26995c17e71ee126451dd3941010b0514a81a9d11f3b341debc2399"
+checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482"
 dependencies = [
  "bytes",
  "fnv",
- "itoa 1.0.5",
+ "itoa",
 ]
 
 [[package]]
@@ -953,15 +999,15 @@ checksum = 
"d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904"
 
 [[package]]
 name = "httpdate"
-version = "1.0.2"
+version = "1.0.3"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421"
+checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9"
 
 [[package]]
 name = "hyper"
-version = "0.14.23"
+version = "0.14.27"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "034711faac9d2166cb1baf1a2fb0b60b1f277f8492fd72176c17f3515e1abd3c"
+checksum = "ffb1cfd654a8219eaef89881fdb3bb3b1cdc5fa75ded05d6933b2b382e395468"
 dependencies = [
  "bytes",
  "futures-channel",
@@ -971,9 +1017,9 @@ dependencies = [
  "http-body",
  "httparse",
  "httpdate",
- "itoa 1.0.5",
+ "itoa",
  "pin-project-lite",
- "socket2",
+ "socket2 0.4.9",
  "tokio",
  "tower-service",
  "tracing",
@@ -995,26 +1041,25 @@ dependencies = [
 
 [[package]]
 name = "iana-time-zone"
-version = "0.1.53"
+version = "0.1.57"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "64c122667b287044802d6ce17ee2ddf13207ed924c712de9a66a5814d5b64765"
+checksum = "2fad5b825842d2b38bd206f3e81d6957625fd7f0a361e345c30e01a0ae2dd613"
 dependencies = [
  "android_system_properties",
  "core-foundation-sys",
  "iana-time-zone-haiku",
  "js-sys",
  "wasm-bindgen",
- "winapi",
+ "windows",
 ]
 
 [[package]]
 name = "iana-time-zone-haiku"
-version = "0.1.1"
+version = "0.1.2"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "0703ae284fc167426161c2e3f1da3ea71d94b21bedbcc9494e92b28e334e3dca"
+checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f"
 dependencies = [
- "cxx",
- "cxx-build",
+ "cc",
 ]
 
 [[package]]
@@ -1025,32 +1070,56 @@ checksum = 
"b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39"
 
 [[package]]
 name = "idna"
-version = "0.3.0"
+version = "0.4.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6"
+checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c"
 dependencies = [
  "unicode-bidi",
  "unicode-normalization",
 ]
 
 [[package]]
-name = "impl-serde"
-version = "0.4.0"
+name = "impl-serde"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "ebc88fc67028ae3db0c853baa36269d398d5f45b6982f95549ff5def78c935cd"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "indexmap"
+version = "1.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99"
+dependencies = [
+ "autocfg",
+ "hashbrown 0.12.3",
+ "serde",
+]
+
+[[package]]
+name = "indexmap"
+version = "2.0.2"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "ebc88fc67028ae3db0c853baa36269d398d5f45b6982f95549ff5def78c935cd"
+checksum = "8adf3ddd720272c6ea8bf59463c04e0f93d0bbf7c5439b691bca2987e0270897"
 dependencies = [
+ "equivalent",
+ "hashbrown 0.14.1",
  "serde",
 ]
 
 [[package]]
-name = "indexmap"
-version = "1.9.2"
+name = "indicatif"
+version = "0.17.7"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "1885e79c1fc4b10f0e172c475f458b7f7b93061064d98c3293e98c5ba0c8b399"
+checksum = "fb28741c9db9a713d93deb3bb9515c20788cef5815265bee4980e87bde7e0f25"
 dependencies = [
- "autocfg",
- "hashbrown",
- "serde",
+ "console",
+ "instant",
+ "number_prefix",
+ "portable-atomic",
+ "unicode-width",
 ]
 
 [[package]]
@@ -1068,8 +1137,8 @@ version = "0.1.0"
 dependencies = [
  "bitcoin",
  "btc-wire",
- "clap 4.0.32",
- "clap_lex 0.3.0",
+ "clap",
+ "clap_lex",
  "clap_mangen",
  "color-backtrace",
  "common",
@@ -1077,6 +1146,7 @@ dependencies = [
  "ethereum-types",
  "fastrand",
  "hex",
+ "indicatif",
  "libdeflater",
  "owo-colors",
  "rust-ini",
@@ -1086,26 +1156,15 @@ dependencies = [
  "ureq",
 ]
 
-[[package]]
-name = "io-lifetimes"
-version = "1.0.4"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "e7d6c6f8c91b4b9ed43484ad1a938e393caf35960fce7f82a040497207bd8e9e"
-dependencies = [
- "libc",
- "windows-sys",
-]
-
 [[package]]
 name = "is-terminal"
-version = "0.4.2"
+version = "0.4.9"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "28dfb6c8100ccc63462345b67d1bbc3679177c75ee4bf59bf29c8b1d110b8189"
+checksum = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b"
 dependencies = [
- "hermit-abi 0.2.6",
- "io-lifetimes",
+ "hermit-abi",
  "rustix",
- "windows-sys",
+ "windows-sys 0.48.0",
 ]
 
 [[package]]
@@ -1119,21 +1178,15 @@ dependencies = [
 
 [[package]]
 name = "itoa"
-version = "0.4.8"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4"
-
-[[package]]
-name = "itoa"
-version = "1.0.5"
+version = "1.0.9"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "fad582f4b9e86b6caa621cabeb0963332d92eea04729ab12892c2533951e6440"
+checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38"
 
 [[package]]
 name = "js-sys"
-version = "0.3.60"
+version = "0.3.64"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "49409df3e3bf0856b916e2ceaca09ee28e6871cf7d9ce97a692cacfdb2a25a47"
+checksum = "c5f195fe497f702db0f318b07fdd68edb16955aed830df8363d837542f8f935a"
 dependencies = [
  "wasm-bindgen",
 ]
@@ -1146,48 +1199,39 @@ checksum = 
"e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
 
 [[package]]
 name = "libc"
-version = "0.2.139"
+version = "0.2.148"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "201de327520df007757c1f0adce6e827fe8562fbc28bfd9c15571c66ca1f5f79"
+checksum = "9cdc71e17332e86d2e1d38c1f99edcb6288ee11b815fb1a4b049eaa2114d369b"
 
 [[package]]
 name = "libdeflate-sys"
-version = "0.12.0"
+version = "1.19.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "e1f7b0817f85e2ba608892f30fbf4c9d03f3ebf9db0c952d1b7c8f7387b54785"
+checksum = "67921a7f85100c1559efc3d1c7c472091b7da05f304b4bbd5356f075e97f1cc2"
 dependencies = [
  "cc",
 ]
 
 [[package]]
 name = "libdeflater"
-version = "0.12.0"
+version = "1.19.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "671e63282f642c7bcc7d292b212d5a4739fef02a77fe98429a75d308f96e7931"
+checksum = "3a31b22f662350ec294b13859f935aea772ba7b2bc8776269f4a5627308eab7d"
 dependencies = [
  "libdeflate-sys",
 ]
 
-[[package]]
-name = "link-cplusplus"
-version = "1.0.8"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "ecd207c9c713c34f95a097a5b029ac2ce6010530c7b49d7fea24d977dede04f5"
-dependencies = [
- "cc",
-]
-
 [[package]]
 name = "linux-raw-sys"
-version = "0.1.4"
+version = "0.4.8"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "f051f77a7c8e6957c0696eac88f26b0117e54f52d3fc682ab19397a8812846a4"
+checksum = "3852614a3bd9ca9804678ba6be5e3b8ce76dfc902cae004e3e0c44051b6e88db"
 
 [[package]]
 name = "listenfd"
-version = "1.0.0"
+version = "1.0.1"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "14e4fcc00ff6731d94b70e16e71f43bda62883461f31230742e3bc6dddf12988"
+checksum = "e0500463acd96259d219abb05dc57e5a076ef04b2db9a2112846929b5f174c96"
 dependencies = [
  "libc",
  "uuid",
@@ -1196,9 +1240,9 @@ dependencies = [
 
 [[package]]
 name = "lock_api"
-version = "0.4.9"
+version = "0.4.10"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df"
+checksum = "c1cc9717a20b1bb222f333e6a92fd32f7d8a18ddc5a3191a11af45dcbf4dcd16"
 dependencies = [
  "autocfg",
  "scopeguard",
@@ -1206,101 +1250,94 @@ dependencies = [
 
 [[package]]
 name = "log"
-version = "0.4.17"
+version = "0.4.20"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e"
-dependencies = [
- "cfg-if",
-]
+checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f"
 
 [[package]]
 name = "md-5"
-version = "0.10.5"
+version = "0.10.6"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "6365506850d44bff6e2fbcb5176cf63650e48bd45ef2fe2665ae1570e0f4b9ca"
+checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf"
 dependencies = [
+ "cfg-if",
  "digest",
 ]
 
 [[package]]
 name = "memchr"
-version = "2.5.0"
+version = "2.6.4"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
+checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167"
 
 [[package]]
 name = "memoffset"
-version = "0.7.1"
+version = "0.9.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "5de893c32cde5f383baa4c04c5d6dbdd735cfd4a794b0debdb2bb1b421da5ff4"
+checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c"
 dependencies = [
  "autocfg",
 ]
 
 [[package]]
 name = "miniz_oxide"
-version = "0.6.2"
+version = "0.7.1"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa"
+checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7"
 dependencies = [
  "adler",
 ]
 
 [[package]]
 name = "mio"
-version = "0.8.5"
+version = "0.8.8"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "e5d732bc30207a6423068df043e3d02e0735b155ad7ce1a6f76fe2baa5b158de"
+checksum = "927a765cd3fc26206e66b296465fa9d3e5ab003e651c1b3c060e7956d96b19d2"
 dependencies = [
  "libc",
- "log",
  "wasi",
- "windows-sys",
-]
-
-[[package]]
-name = "num-integer"
-version = "0.1.45"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9"
-dependencies = [
- "autocfg",
- "num-traits",
+ "windows-sys 0.48.0",
 ]
 
 [[package]]
 name = "num-traits"
-version = "0.2.15"
+version = "0.2.16"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd"
+checksum = "f30b0abd723be7e2ffca1272140fac1a2f084c77ec3e123c192b66af1ee9e6c2"
 dependencies = [
  "autocfg",
 ]
 
 [[package]]
 name = "num_cpus"
-version = "1.15.0"
+version = "1.16.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b"
+checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43"
 dependencies = [
- "hermit-abi 0.2.6",
+ "hermit-abi",
  "libc",
 ]
 
+[[package]]
+name = "number_prefix"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3"
+
 [[package]]
 name = "object"
-version = "0.30.3"
+version = "0.32.1"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "ea86265d3d3dcb6a27fc51bd29a4bf387fae9d2986b823079d4986af253eb439"
+checksum = "9cf5f9dd3933bd50a9e1f149ec995f39ae2c496d31fd772c1fd45ebc27e902b0"
 dependencies = [
  "memchr",
 ]
 
 [[package]]
 name = "once_cell"
-version = "1.17.0"
+version = "1.18.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "6f61fba1741ea2b3d6a1e3178721804bb716a68a6aeba1149b5d52e3d464ea66"
+checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d"
 
 [[package]]
 name = "oorandom"
@@ -1310,20 +1347,14 @@ checksum = 
"0ab1bc2a289d34bd04a330323ac98a1b4bc82c9d9fcb1e66b63caa84da26b575"
 
 [[package]]
 name = "ordered-multimap"
-version = "0.4.3"
+version = "0.6.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "ccd746e37177e1711c20dd619a1620f34f5c8b569c53590a72dedd5344d8924a"
+checksum = "4ed8acf08e98e744e5384c8bc63ceb0364e68a6854187221c18df61c4797690e"
 dependencies = [
  "dlv-list",
- "hashbrown",
+ "hashbrown 0.13.2",
 ]
 
-[[package]]
-name = "os_str_bytes"
-version = "6.4.1"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "9b7820b9daea5457c9f21c69448905d723fbd21136ccf521748f23fd49e723ee"
-
 [[package]]
 name = "owo-colors"
 version = "3.5.0"
@@ -1342,66 +1373,66 @@ dependencies = [
 
 [[package]]
 name = "parking_lot_core"
-version = "0.9.6"
+version = "0.9.8"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "ba1ef8814b5c993410bb3adfad7a5ed269563e4a2f90c41f5d85be7fb47133bf"
+checksum = "93f00c865fe7cabf650081affecd3871070f26767e7b2070a3ffae14c654b447"
 dependencies = [
  "cfg-if",
  "libc",
  "redox_syscall",
  "smallvec",
- "windows-sys",
+ "windows-targets 0.48.5",
 ]
 
 [[package]]
 name = "percent-encoding"
-version = "2.2.0"
+version = "2.3.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e"
+checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94"
 
 [[package]]
 name = "phf"
-version = "0.11.1"
+version = "0.11.2"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "928c6535de93548188ef63bb7c4036bd415cd8f36ad25af44b9789b2ee72a48c"
+checksum = "ade2d8b8f33c7333b51bcf0428d37e217e9f32192ae4772156f65063b8ce03dc"
 dependencies = [
  "phf_shared",
 ]
 
 [[package]]
 name = "phf_shared"
-version = "0.11.1"
+version = "0.11.2"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "e1fb5f6f826b772a8d4c0394209441e7d37cbbb967ae9c7e0e8134365c9ee676"
+checksum = "90fcb95eef784c2ac79119d1dd819e162b5da872ce6f3c3abe1e8ca1c082f72b"
 dependencies = [
  "siphasher",
 ]
 
 [[package]]
 name = "pin-project"
-version = "1.0.12"
+version = "1.1.3"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "ad29a609b6bcd67fee905812e544992d216af9d755757c05ed2d0e15a74c6ecc"
+checksum = "fda4ed1c6c173e3fc7a83629421152e01d7b1f9b7f65fb301e490e8cfc656422"
 dependencies = [
  "pin-project-internal",
 ]
 
 [[package]]
 name = "pin-project-internal"
-version = "1.0.12"
+version = "1.1.3"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "069bdb1e05adc7a8990dce9cc75370895fbe4e3d58b9b73bf1aee56359344a55"
+checksum = "4359fd9c9171ec6e8c62926d6faaf553a8dc3f64e1507e76da7911b4f6a04405"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn",
+ "syn 2.0.37",
 ]
 
 [[package]]
 name = "pin-project-lite"
-version = "0.2.9"
+version = "0.2.13"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116"
+checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58"
 
 [[package]]
 name = "pin-utils"
@@ -1411,9 +1442,9 @@ checksum = 
"8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
 
 [[package]]
 name = "plotters"
-version = "0.3.4"
+version = "0.3.5"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "2538b639e642295546c50fcd545198c9d64ee2a38620a628724a3b266d5fbf97"
+checksum = "d2c224ba00d7cadd4d5c660deaf2098e5e80e07846537c51f9cfa4be50c1fd45"
 dependencies = [
  "num-traits",
  "plotters-backend",
@@ -1424,24 +1455,30 @@ dependencies = [
 
 [[package]]
 name = "plotters-backend"
-version = "0.3.4"
+version = "0.3.5"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "193228616381fecdc1224c62e96946dfbc73ff4384fba576e052ff8c1bea8142"
+checksum = "9e76628b4d3a7581389a35d5b6e2139607ad7c75b17aed325f210aa91f4a9609"
 
 [[package]]
 name = "plotters-svg"
-version = "0.3.3"
+version = "0.3.5"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "f9a81d2759aae1dae668f783c308bc5c8ebd191ff4184aaa1b37f65a6ae5a56f"
+checksum = "38f6d39893cca0701371e3c27294f09797214b86f1fb951b89ade8ec04e2abab"
 dependencies = [
  "plotters-backend",
 ]
 
+[[package]]
+name = "portable-atomic"
+version = "1.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "31114a898e107c51bb1609ffaf55a0e011cf6a4d7f1170d0015a165082c0338b"
+
 [[package]]
 name = "postgres"
-version = "0.19.4"
+version = "0.19.7"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "960c214283ef8f0027974c03e9014517ced5db12f021a9abb66185a5751fab0a"
+checksum = "7915b33ed60abc46040cbcaa25ffa1c7ec240668e0477c4f3070786f5916d451"
 dependencies = [
  "bytes",
  "fallible-iterator",
@@ -1453,11 +1490,11 @@ dependencies = [
 
 [[package]]
 name = "postgres-protocol"
-version = "0.6.4"
+version = "0.6.6"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "878c6cbf956e03af9aa8204b407b9cbf47c072164800aa918c516cd4b056c50c"
+checksum = "49b6c5ef183cd3ab4ba005f1ca64c21e8bd97ce4699cfea9e8d9a2c4958ca520"
 dependencies = [
- "base64 0.13.1",
+ "base64",
  "byteorder",
  "bytes",
  "fallible-iterator",
@@ -1471,9 +1508,9 @@ dependencies = [
 
 [[package]]
 name = "postgres-types"
-version = "0.2.4"
+version = "0.2.6"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "73d946ec7d256b04dfadc4e6a3292324e6f417124750fc5c0950f981b703a0f1"
+checksum = "8d2234cdee9408b523530a9b6d2d6b373d1db34f6a8e51dc03ded1828d7fb67c"
 dependencies = [
  "bytes",
  "fallible-iterator",
@@ -1498,34 +1535,16 @@ dependencies = [
 ]
 
 [[package]]
-name = "proc-macro-error"
-version = "1.0.4"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
-dependencies = [
- "proc-macro-error-attr",
- "proc-macro2",
- "quote",
- "syn",
- "version_check",
-]
-
-[[package]]
-name = "proc-macro-error-attr"
-version = "1.0.4"
+name = "proc-macro-hack"
+version = "0.5.20+deprecated"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
-dependencies = [
- "proc-macro2",
- "quote",
- "version_check",
-]
+checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068"
 
 [[package]]
 name = "proc-macro2"
-version = "1.0.50"
+version = "1.0.67"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "6ef7d57beacfaf2d8aee5937dab7b7f28de3cb8b1828479bb5de2a7106f2bae2"
+checksum = "3d433d9f1a3e8c1263d9456598b16fec66f4acc9a74dacffd35c7bb09b3a1328"
 dependencies = [
  "unicode-ident",
 ]
@@ -1549,14 +1568,14 @@ checksum = 
"b22a693222d716a9587786f37ac3f6b4faedb5b80c23914e7303ff5a1d8016e9"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn",
+ "syn 1.0.109",
 ]
 
 [[package]]
 name = "quote"
-version = "1.0.23"
+version = "1.0.33"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "8856d8364d252a14d474036ea1358d63c9e6965c8e5c1885c18f73d70bff9c7b"
+checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae"
 dependencies = [
  "proc-macro2",
 ]
@@ -1593,9 +1612,9 @@ dependencies = [
 
 [[package]]
 name = "rayon"
-version = "1.6.1"
+version = "1.8.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "6db3a213adf02b3bcfd2d3846bb41cb22857d131789e01df434fb7e7bc0759b7"
+checksum = "9c27db03db7734835b3f53954b534c91069375ce6ccaa2e065441e07d9b6cdb1"
 dependencies = [
  "either",
  "rayon-core",
@@ -1603,62 +1622,51 @@ dependencies = [
 
 [[package]]
 name = "rayon-core"
-version = "1.10.2"
+version = "1.12.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "356a0625f1954f730c0201cdab48611198dc6ce21f4acff55089b5a78e6e835b"
+checksum = "5ce3fb6ad83f861aac485e76e1985cd109d9a3713802152be56c3b1f0e0658ed"
 dependencies = [
- "crossbeam-channel",
  "crossbeam-deque",
  "crossbeam-utils",
- "num_cpus",
 ]
 
 [[package]]
 name = "redox_syscall"
-version = "0.2.16"
+version = "0.3.5"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a"
+checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29"
 dependencies = [
- "bitflags",
+ "bitflags 1.3.2",
 ]
 
 [[package]]
 name = "regex"
-version = "1.7.1"
+version = "1.9.6"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "48aaa5748ba571fb95cd2c85c09f629215d3a6ece942baa100950af03a34f733"
+checksum = "ebee201405406dbf528b8b672104ae6d6d63e6d118cb10e4d51abbc7b58044ff"
 dependencies = [
  "aho-corasick",
  "memchr",
+ "regex-automata",
  "regex-syntax",
 ]
 
 [[package]]
 name = "regex-automata"
-version = "0.1.10"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132"
-
-[[package]]
-name = "regex-syntax"
-version = "0.6.28"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "456c603be3e8d448b072f410900c09faf164fbce2d480456f50eea6e25f9c848"
-
-[[package]]
-name = "remove_dir_all"
-version = "0.5.3"
+version = "0.3.9"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7"
+checksum = "59b23e92ee4318893fa3fe3e6fb365258efbfe6ac6ab30f090cdcbb7aa37efa9"
 dependencies = [
- "winapi",
+ "aho-corasick",
+ "memchr",
+ "regex-syntax",
 ]
 
 [[package]]
-name = "retain_mut"
-version = "0.1.9"
+name = "regex-syntax"
+version = "0.7.5"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "4389f1d5789befaf6029ebd9f7dac4af7f7e3d61b69d4f30e2ac02b57e7712b0"
+checksum = "dbb5fb1acd8a1a18b3dd5be62d25485eb770e05afb408a9627d14d451bae12da"
 
 [[package]]
 name = "ring"
@@ -1683,9 +1691,9 @@ checksum = 
"b833d8d034ea094b1ea68aa6d5c740e0d04bad9d16568d08ba6f76823a114316"
 
 [[package]]
 name = "rust-ini"
-version = "0.18.0"
+version = "0.19.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "f6d5f2436026b4f6e79dc829837d467cc7e9a55ee40e750d716713540715a2df"
+checksum = "7e2a3bcec1f113553ef1c88aae6c020a369d03d55b58de9869a0908930385091"
 dependencies = [
  "cfg-if",
  "ordered-multimap",
@@ -1693,9 +1701,9 @@ dependencies = [
 
 [[package]]
 name = "rustc-demangle"
-version = "0.1.21"
+version = "0.1.23"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "7ef03e0a2b150c7a90d01faf6254c9c48a41e95fb2a8c2ac1c6f0d2b9aefc342"
+checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76"
 
 [[package]]
 name = "rustc-hex"
@@ -1705,35 +1713,44 @@ checksum = 
"3e75f6a532d0fd9f7f13144f392b6ad56a32696bfcd9c78f797f16bbb6f072d6"
 
 [[package]]
 name = "rustix"
-version = "0.36.7"
+version = "0.38.15"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "d4fdebc4b395b7fbb9ab11e462e20ed9051e7b16e42d24042c776eca0ac81b03"
+checksum = "d2f9da0cbd88f9f09e7814e388301c8414c51c62aa6ce1e4b5c551d49d96e531"
 dependencies = [
- "bitflags",
+ "bitflags 2.4.0",
  "errno",
- "io-lifetimes",
  "libc",
  "linux-raw-sys",
- "windows-sys",
+ "windows-sys 0.48.0",
 ]
 
 [[package]]
 name = "rustls"
-version = "0.20.8"
+version = "0.21.7"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "fff78fc74d175294f4e83b28343315ffcfb114b156f0185e9741cb5570f50e2f"
+checksum = "cd8d6c9f025a446bc4d18ad9632e69aec8f287aa84499ee335599fabd20c3fd8"
 dependencies = [
  "log",
  "ring",
+ "rustls-webpki",
  "sct",
- "webpki",
+]
+
+[[package]]
+name = "rustls-webpki"
+version = "0.101.6"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "3c7d5dece342910d9ba34d259310cae3e0154b873b35408b787b59bce53d34fe"
+dependencies = [
+ "ring",
+ "untrusted",
 ]
 
 [[package]]
 name = "ryu"
-version = "1.0.12"
+version = "1.0.15"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "7b4b9743ed687d4b4bcedf9ff5eaa7398495ae14e61cba0a295704edbc7decde"
+checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741"
 
 [[package]]
 name = "same-file"
@@ -1746,15 +1763,9 @@ dependencies = [
 
 [[package]]
 name = "scopeguard"
-version = "1.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
-
-[[package]]
-name = "scratch"
-version = "1.0.3"
+version = "1.2.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "ddccb15bcce173023b3fedd9436f882a0739b8dfb45e4f6b6002bee5929f61b2"
+checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
 
 [[package]]
 name = "sct"
@@ -1768,9 +1779,9 @@ dependencies = [
 
 [[package]]
 name = "secp256k1"
-version = "0.24.3"
+version = "0.27.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "6b1629c9c557ef9b293568b338dddfc8208c98a18c59d722a9d53f859d9c9b62"
+checksum = "25996b82292a7a57ed3508f052cfff8640d38d32018784acd714758b43da9c8f"
 dependencies = [
  "bitcoin_hashes",
  "secp256k1-sys",
@@ -1779,53 +1790,53 @@ dependencies = [
 
 [[package]]
 name = "secp256k1-sys"
-version = "0.6.1"
+version = "0.8.1"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "83080e2c2fc1006e625be82e5d1eb6a43b7fd9578b617fcc55814daf286bba4b"
+checksum = "70a129b9e9efbfb223753b9163c4ab3b13cff7fd9c7f010fbac25ab4099fa07e"
 dependencies = [
  "cc",
 ]
 
 [[package]]
 name = "serde"
-version = "1.0.152"
+version = "1.0.188"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "bb7d1f0d3021d347a83e556fc4683dea2ea09d87bccdf88ff5c12545d89d5efb"
+checksum = "cf9e0fcba69a370eed61bcf2b728575f726b50b55cba78064753d708ddc7549e"
 dependencies = [
  "serde_derive",
 ]
 
 [[package]]
 name = "serde_derive"
-version = "1.0.152"
+version = "1.0.188"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "af487d118eecd09402d70a5d72551860e788df87b464af30e5ea6a38c75c541e"
+checksum = "4eca7ac642d82aa35b60049a6eccb4be6be75e599bd2e9adb5f875a737654af2"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn",
+ "syn 2.0.37",
 ]
 
 [[package]]
 name = "serde_json"
-version = "1.0.91"
+version = "1.0.107"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "877c235533714907a8c2464236f5c4b2a17262ef1bd71f38f35ea592c8da6883"
+checksum = "6b420ce6e3d8bd882e9b243c6eed35dbc9a6110c9769e74b584e0d68d1f20c65"
 dependencies = [
- "itoa 1.0.5",
+ "itoa",
  "ryu",
  "serde",
 ]
 
 [[package]]
 name = "serde_repr"
-version = "0.1.10"
+version = "0.1.16"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "9a5ec9fa74a20ebbe5d9ac23dac1fc96ba0ecfe9f50f2843b52e537b10fbcb4e"
+checksum = "8725e1dfadb3a50f7e5ce0b1a540466f6ed3fe7a0fca2ac2b8b831d31316bd00"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn",
+ "syn 2.0.37",
 ]
 
 [[package]]
@@ -1835,21 +1846,22 @@ source = 
"registry+https://github.com/rust-lang/crates.io-index";
 checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd"
 dependencies = [
  "form_urlencoded",
- "itoa 1.0.5",
+ "itoa",
  "ryu",
  "serde",
 ]
 
 [[package]]
 name = "serde_with"
-version = "2.2.0"
+version = "3.3.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "30d904179146de381af4c93d3af6ca4984b3152db687dacb9c3c35e86f39809c"
+checksum = "1ca3b16a3d82c4088f343b7480a93550b3eabe1a358569c2dfe38bbcead07237"
 dependencies = [
- "base64 0.13.1",
+ "base64",
  "chrono",
  "hex",
- "indexmap",
+ "indexmap 1.9.3",
+ "indexmap 2.0.2",
  "serde",
  "serde_json",
  "serde_with_macros",
@@ -1858,21 +1870,21 @@ dependencies = [
 
 [[package]]
 name = "serde_with_macros"
-version = "2.2.0"
+version = "3.3.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "a1966009f3c05f095697c537312f5415d1e3ed31ce0a56942bac4c771c5c335e"
+checksum = "2e6be15c453eb305019bfa438b1593c731f36a289a7853f7707ee29e870b3b3c"
 dependencies = [
  "darling",
  "proc-macro2",
  "quote",
- "syn",
+ "syn 2.0.37",
 ]
 
 [[package]]
 name = "sha2"
-version = "0.10.6"
+version = "0.10.8"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0"
+checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8"
 dependencies = [
  "cfg-if",
  "cpufeatures",
@@ -1887,35 +1899,45 @@ checksum = 
"b2a4eed4c5ae38438470ab8e0108bb751012f786f44ff585cfd837c9a5fe426f"
 
 [[package]]
 name = "siphasher"
-version = "0.3.10"
+version = "0.3.11"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de"
+checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d"
 
 [[package]]
 name = "slab"
-version = "0.4.7"
+version = "0.4.9"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "4614a76b2a8be0058caa9dbbaf66d988527d86d003c11a94fbd335d7661edcef"
+checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67"
 dependencies = [
  "autocfg",
 ]
 
 [[package]]
 name = "smallvec"
-version = "1.10.0"
+version = "1.11.1"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0"
+checksum = "942b4a808e05215192e39f4ab80813e599068285906cc91aa64f923db842bd5a"
 
 [[package]]
 name = "socket2"
-version = "0.4.7"
+version = "0.4.9"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "02e2d2db9033d13a1567121ddd7a095ee144db4e1ca1b1bda3419bc0da294ebd"
+checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662"
 dependencies = [
  "libc",
  "winapi",
 ]
 
+[[package]]
+name = "socket2"
+version = "0.5.4"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "4031e820eb552adee9295814c0ced9e5cf38ddf1e8b7d566d6de8e2538ea989e"
+dependencies = [
+ "libc",
+ "windows-sys 0.48.0",
+]
+
 [[package]]
 name = "spin"
 version = "0.5.2"
@@ -1930,10 +1952,11 @@ checksum = 
"a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
 
 [[package]]
 name = "stringprep"
-version = "0.1.2"
+version = "0.1.4"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "8ee348cb74b87454fff4b551cbf727025810a004f88aeacae7f85b87f4e9a1c1"
+checksum = "bb41d74e231a107a1b4ee36bd1214b11285b77768d2e3824aedafa988fd36ee6"
 dependencies = [
+ "finl_unicode",
  "unicode-bidi",
  "unicode-normalization",
 ]
@@ -1946,15 +1969,26 @@ checksum = 
"73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
 
 [[package]]
 name = "subtle"
-version = "2.4.1"
+version = "2.5.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601"
+checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc"
 
 [[package]]
 name = "syn"
-version = "1.0.107"
+version = "1.0.109"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "syn"
+version = "2.0.37"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "1f4064b5b16e03ae50984a5a8ed5d4f8803e6bc1fd170a3cda91a1be4b18e3f5"
+checksum = "7303ef2c05cd654186cb250d29049a24840ca25d2747c25c0381c8d9e2f582e8"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -1963,51 +1997,44 @@ dependencies = [
 
 [[package]]
 name = "tempfile"
-version = "3.3.0"
+version = "3.8.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "5cdb1ef4eaeeaddc8fbd371e5017057064af0911902ef36b39801f67cc6d79e4"
+checksum = "cb94d2f3cc536af71caac6b6fcebf65860b347e7ce0cc9ebe8f70d3e521054ef"
 dependencies = [
  "cfg-if",
  "fastrand",
- "libc",
  "redox_syscall",
- "remove_dir_all",
- "winapi",
+ "rustix",
+ "windows-sys 0.48.0",
 ]
 
 [[package]]
 name = "termcolor"
-version = "1.2.0"
+version = "1.3.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6"
+checksum = "6093bad37da69aab9d123a8091e4be0aa4a03e4d601ec641c327398315f62b64"
 dependencies = [
  "winapi-util",
 ]
 
-[[package]]
-name = "textwrap"
-version = "0.16.0"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d"
-
 [[package]]
 name = "thiserror"
-version = "1.0.38"
+version = "1.0.49"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "6a9cd18aa97d5c45c6603caea1da6628790b37f7a34b6ca89522331c5180fed0"
+checksum = "1177e8c6d7ede7afde3585fd2513e611227efd6481bd78d2e82ba1ce16557ed4"
 dependencies = [
  "thiserror-impl",
 ]
 
 [[package]]
 name = "thiserror-impl"
-version = "1.0.38"
+version = "1.0.49"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "1fb327af4685e4d03fa8cbcf1716380da910eeb2bb8be417e7f9fd3fb164f36f"
+checksum = "10712f02019e9288794769fba95cd6847df9874d49d871d062172f9dd41bc4cc"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn",
+ "syn 2.0.37",
 ]
 
 [[package]]
@@ -2018,11 +2045,12 @@ checksum = 
"e70399498abd3ec85f99a2f2d765c8638588e20361678af93a9f47de96719743"
 
 [[package]]
 name = "time"
-version = "0.3.17"
+version = "0.3.29"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "a561bf4617eebd33bca6434b988f39ed798e527f51a1e797d0ee4f61c0a38376"
+checksum = "426f806f4089c493dcac0d24c29c01e2c38baf8e30f1b716ee37e83d200b18fe"
 dependencies = [
- "itoa 1.0.5",
+ "deranged",
+ "itoa",
  "serde",
  "time-core",
  "time-macros",
@@ -2030,15 +2058,15 @@ dependencies = [
 
 [[package]]
 name = "time-core"
-version = "0.1.0"
+version = "0.1.2"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "2e153e1f1acaef8acc537e68b44906d2db6436e2b35ac2c6b42640fff91f00fd"
+checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3"
 
 [[package]]
 name = "time-macros"
-version = "0.2.6"
+version = "0.2.15"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "d967f99f534ca7e495c575c62638eebc2898a8c84c119b89e250477bc4ba16b2"
+checksum = "4ad70d68dba9e1f8aceda7aa6711965dfec1cac869f311a51bd08b3a2ccbce20"
 dependencies = [
  "time-core",
 ]
@@ -2073,44 +2101,43 @@ dependencies = [
 
 [[package]]
 name = "tinyvec_macros"
-version = "0.1.0"
+version = "0.1.1"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c"
+checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
 
 [[package]]
 name = "tokio"
-version = "1.25.0"
+version = "1.32.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "c8e00990ebabbe4c14c08aca901caed183ecd5c09562a12c824bb53d3c3fd3af"
+checksum = "17ed6077ed6cd6c74735e21f37eb16dc3935f96878b1fe961074089cc80893f9"
 dependencies = [
- "autocfg",
+ "backtrace",
  "bytes",
  "libc",
- "memchr",
  "mio",
  "num_cpus",
  "pin-project-lite",
- "socket2",
+ "socket2 0.5.4",
  "tokio-macros",
- "windows-sys",
+ "windows-sys 0.48.0",
 ]
 
 [[package]]
 name = "tokio-macros"
-version = "1.8.2"
+version = "2.1.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "d266c00fde287f55d3f1c3e96c500c362a2b8c695076ec180f27918820bc6df8"
+checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn",
+ "syn 2.0.37",
 ]
 
 [[package]]
 name = "tokio-postgres"
-version = "0.7.7"
+version = "0.7.10"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "29a12c1b3e0704ae7dfc25562629798b29c72e6b1d0a681b6f29ab4ae5e7f7bf"
+checksum = "d340244b32d920260ae7448cb72b6e238bddc3d4f7603394e7dd46ed8e48f5b8"
 dependencies = [
  "async-trait",
  "byteorder",
@@ -2125,16 +2152,18 @@ dependencies = [
  "pin-project-lite",
  "postgres-protocol",
  "postgres-types",
- "socket2",
+ "rand",
+ "socket2 0.5.4",
  "tokio",
  "tokio-util",
+ "whoami",
 ]
 
 [[package]]
 name = "tokio-util"
-version = "0.7.4"
+version = "0.7.9"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "0bb2e075f03b3d66d8d8785356224ba688d2906a371015e225beeb65ca92c740"
+checksum = "1d68074620f57a0b21594d9735eb2e98ab38b17f80d3fcb189fca266771ca60d"
 dependencies = [
  "bytes",
  "futures-core",
@@ -2158,14 +2187,26 @@ checksum = 
"8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8"
 dependencies = [
  "cfg-if",
  "pin-project-lite",
+ "tracing-attributes",
  "tracing-core",
 ]
 
+[[package]]
+name = "tracing-attributes"
+version = "0.1.26"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "5f4f31f56159e98206da9efd823404b79b6ef3143b4a7ab76e67b1751b25a4ab"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.37",
+]
+
 [[package]]
 name = "tracing-core"
-version = "0.1.30"
+version = "0.1.31"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a"
+checksum = "0955b8137a1df6f1a2e9a37d8a6656291ff0297c1a97c24e0d8425fe2312f79a"
 dependencies = [
  "once_cell",
 ]
@@ -2178,9 +2219,9 @@ checksum = 
"3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed"
 
 [[package]]
 name = "typenum"
-version = "1.16.0"
+version = "1.17.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba"
+checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825"
 
 [[package]]
 name = "uint"
@@ -2196,15 +2237,15 @@ dependencies = [
 
 [[package]]
 name = "unicode-bidi"
-version = "0.3.10"
+version = "0.3.13"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "d54675592c1dbefd78cbd98db9bacd89886e1ca50692a0692baefffdeb92dd58"
+checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460"
 
 [[package]]
 name = "unicode-ident"
-version = "1.0.6"
+version = "1.0.12"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "84a22b9f218b40614adcb3f4ff08b703773ad44fa9423e4e0d346d5db86e4ebc"
+checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b"
 
 [[package]]
 name = "unicode-normalization"
@@ -2217,9 +2258,9 @@ dependencies = [
 
 [[package]]
 name = "unicode-width"
-version = "0.1.10"
+version = "0.1.11"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b"
+checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85"
 
 [[package]]
 name = "untrusted"
@@ -2229,19 +2270,19 @@ checksum = 
"a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a"
 
 [[package]]
 name = "ureq"
-version = "2.6.2"
+version = "2.8.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "338b31dd1314f68f3aabf3ed57ab922df95ffcd902476ca7ba3c4ce7b908c46d"
+checksum = "f5ccd538d4a604753ebc2f17cd9946e89b77bf87f6a8e2309667c6f2e87855e3"
 dependencies = [
- "base64 0.13.1",
+ "base64",
  "flate2",
  "log",
  "once_cell",
  "rustls",
+ "rustls-webpki",
  "serde",
  "serde_json",
  "url",
- "webpki",
  "webpki-roots",
 ]
 
@@ -2261,9 +2302,9 @@ dependencies = [
 
 [[package]]
 name = "url"
-version = "2.3.1"
+version = "2.4.1"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643"
+checksum = "143b538f18257fac9cad154828a57c6bf5157e1aa604d4816b5995bf6de87ae5"
 dependencies = [
  "form_urlencoded",
  "idna",
@@ -2271,11 +2312,17 @@ dependencies = [
  "serde",
 ]
 
+[[package]]
+name = "utf8parse"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a"
+
 [[package]]
 name = "uuid"
-version = "1.2.2"
+version = "1.4.1"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "422ee0de9031b5b948b97a8fc04e3aa35230001a722ddd27943e0be31564ce4c"
+checksum = "79daa5ed5740825c40b389c5e50312b9c86df53fccd33f281df655642b43869d"
 
 [[package]]
 name = "version_check"
@@ -2285,22 +2332,20 @@ checksum = 
"49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
 
 [[package]]
 name = "walkdir"
-version = "2.3.2"
+version = "2.4.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56"
+checksum = "d71d857dc86794ca4c280d616f7da00d2dbfd8cd788846559a6813e6aa4b54ee"
 dependencies = [
  "same-file",
- "winapi",
  "winapi-util",
 ]
 
 [[package]]
 name = "want"
-version = "0.3.0"
+version = "0.3.1"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0"
+checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e"
 dependencies = [
- "log",
  "try-lock",
 ]
 
@@ -2312,9 +2357,9 @@ checksum = 
"9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
 
 [[package]]
 name = "wasm-bindgen"
-version = "0.2.83"
+version = "0.2.87"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "eaf9f5aceeec8be17c128b2e93e031fb8a4d469bb9c4ae2d7dc1888b26887268"
+checksum = "7706a72ab36d8cb1f80ffbf0e071533974a60d0a308d01a5d0375bf60499a342"
 dependencies = [
  "cfg-if",
  "wasm-bindgen-macro",
@@ -2322,24 +2367,24 @@ dependencies = [
 
 [[package]]
 name = "wasm-bindgen-backend"
-version = "0.2.83"
+version = "0.2.87"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "4c8ffb332579b0557b52d268b91feab8df3615f265d5270fec2a8c95b17c1142"
+checksum = "5ef2b6d3c510e9625e5fe6f509ab07d66a760f0885d858736483c32ed7809abd"
 dependencies = [
  "bumpalo",
  "log",
  "once_cell",
  "proc-macro2",
  "quote",
- "syn",
+ "syn 2.0.37",
  "wasm-bindgen-shared",
 ]
 
 [[package]]
 name = "wasm-bindgen-macro"
-version = "0.2.83"
+version = "0.2.87"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "052be0f94026e6cbc75cdefc9bae13fd6052cdcaf532fa6c45e7ae33a1e6c810"
+checksum = "dee495e55982a3bd48105a7b947fd2a9b4a8ae3010041b9e0faab3f9cd028f1d"
 dependencies = [
  "quote",
  "wasm-bindgen-macro-support",
@@ -2347,50 +2392,47 @@ dependencies = [
 
 [[package]]
 name = "wasm-bindgen-macro-support"
-version = "0.2.83"
+version = "0.2.87"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "07bc0c051dc5f23e307b13285f9d75df86bfdf816c5721e573dec1f9b8aa193c"
+checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn",
+ "syn 2.0.37",
  "wasm-bindgen-backend",
  "wasm-bindgen-shared",
 ]
 
 [[package]]
 name = "wasm-bindgen-shared"
-version = "0.2.83"
+version = "0.2.87"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "1c38c045535d93ec4f0b4defec448e4291638ee608530863b1e2ba115d4fff7f"
+checksum = "ca6ad05a4870b2bf5fe995117d3728437bd27d7cd5f06f13c17443ef369775a1"
 
 [[package]]
 name = "web-sys"
-version = "0.3.60"
+version = "0.3.64"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "bcda906d8be16e728fd5adc5b729afad4e444e106ab28cd1c7256e54fa61510f"
+checksum = "9b85cbef8c220a6abc02aefd892dfc0fc23afb1c6a426316ec33253a3877249b"
 dependencies = [
  "js-sys",
  "wasm-bindgen",
 ]
 
 [[package]]
-name = "webpki"
-version = "0.22.0"
+name = "webpki-roots"
+version = "0.25.2"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "f095d78192e208183081cc07bc5515ef55216397af48b873e5edcd72637fa1bd"
-dependencies = [
- "ring",
- "untrusted",
-]
+checksum = "14247bb57be4f377dfb94c72830b8ce8fc6beac03cf4bf7b9732eadd414123fc"
 
 [[package]]
-name = "webpki-roots"
-version = "0.22.6"
+name = "whoami"
+version = "1.4.1"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "b6c71e40d7d2c34a5106301fb632274ca37242cd0c9d3e64dbece371a40a2d87"
+checksum = "22fc3756b8a9133049b26c7f61ab35416c130e8c09b660f5b3958b446f52cc50"
 dependencies = [
- "webpki",
+ "wasm-bindgen",
+ "web-sys",
 ]
 
 [[package]]
@@ -2411,9 +2453,9 @@ checksum = 
"ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
 
 [[package]]
 name = "winapi-util"
-version = "0.1.5"
+version = "0.1.6"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
+checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596"
 dependencies = [
  "winapi",
 ]
@@ -2424,70 +2466,154 @@ version = "0.4.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
 checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
 
+[[package]]
+name = "windows"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f"
+dependencies = [
+ "windows-targets 0.48.5",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.45.0"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0"
+dependencies = [
+ "windows-targets 0.42.2",
+]
+
 [[package]]
 name = "windows-sys"
-version = "0.42.0"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
+dependencies = [
+ "windows-targets 0.48.5",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071"
+dependencies = [
+ "windows_aarch64_gnullvm 0.42.2",
+ "windows_aarch64_msvc 0.42.2",
+ "windows_i686_gnu 0.42.2",
+ "windows_i686_msvc 0.42.2",
+ "windows_x86_64_gnu 0.42.2",
+ "windows_x86_64_gnullvm 0.42.2",
+ "windows_x86_64_msvc 0.42.2",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.48.5"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7"
+checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
 dependencies = [
- "windows_aarch64_gnullvm",
- "windows_aarch64_msvc",
- "windows_i686_gnu",
- "windows_i686_msvc",
- "windows_x86_64_gnu",
- "windows_x86_64_gnullvm",
- "windows_x86_64_msvc",
+ "windows_aarch64_gnullvm 0.48.5",
+ "windows_aarch64_msvc 0.48.5",
+ "windows_i686_gnu 0.48.5",
+ "windows_i686_msvc 0.48.5",
+ "windows_x86_64_gnu 0.48.5",
+ "windows_x86_64_gnullvm 0.48.5",
+ "windows_x86_64_msvc 0.48.5",
 ]
 
 [[package]]
 name = "windows_aarch64_gnullvm"
-version = "0.42.1"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8"
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.42.2"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "8c9864e83243fdec7fc9c5444389dcbbfd258f745e7853198f365e3c4968a608"
+checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43"
 
 [[package]]
 name = "windows_aarch64_msvc"
-version = "0.42.1"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.42.2"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "4c8b1b673ffc16c47a9ff48570a9d85e25d265735c503681332589af6253c6c7"
+checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f"
 
 [[package]]
 name = "windows_i686_gnu"
-version = "0.42.1"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.42.2"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "de3887528ad530ba7bdbb1faa8275ec7a1155a45ffa57c37993960277145d640"
+checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060"
 
 [[package]]
 name = "windows_i686_msvc"
-version = "0.42.1"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.42.2"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "bf4d1122317eddd6ff351aa852118a2418ad4214e6613a50e0191f7004372605"
+checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36"
 
 [[package]]
 name = "windows_x86_64_gnu"
-version = "0.42.1"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.42.2"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "c1040f221285e17ebccbc2591ffdc2d44ee1f9186324dd3e84e99ac68d699c45"
+checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3"
 
 [[package]]
 name = "windows_x86_64_gnullvm"
-version = "0.42.1"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.42.2"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "628bfdf232daa22b0d64fdb62b09fcc36bb01f05a3939e20ab73aaf9470d0463"
+checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0"
 
 [[package]]
 name = "windows_x86_64_msvc"
-version = "0.42.1"
+version = "0.48.5"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "447660ad36a13288b1db4d4248e857b510e8c3a225c822ba4fb748c0aafecffd"
+checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
 
 [[package]]
 name = "wire-gateway"
 version = "0.1.0"
 dependencies = [
  "bitcoin",
- "clap 4.0.32",
- "clap_lex 0.3.0",
+ "clap",
+ "clap_lex",
  "common",
  "deadpool-postgres",
  "ethereum-types",
@@ -2506,6 +2632,6 @@ dependencies = [
 
 [[package]]
 name = "zeroize"
-version = "1.5.7"
+version = "1.6.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "c394b5bd0c6f669e7275d9c20aa90ae064cb22e75a1cad54e1b34088034b149f"
+checksum = "2a0956f1ba7c7909bfb66c2e9e4124ab6f6482560f6628b5aaeba39207c9aad9"
diff --git a/Cargo.toml b/Cargo.toml
index 7bdb03b..bbe5454 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -1,4 +1,5 @@
 [workspace]
+resolver = "2"
 members = [
     "wire-gateway",
     "btc-wire",
@@ -7,3 +8,6 @@ members = [
     "common",
     "instrumentation"
 ]
+
+[profile.dev]
+debug = true
\ No newline at end of file
diff --git a/README.md b/README.md
index 0885a8e..1de3ec5 100644
--- a/README.md
+++ b/README.md
@@ -17,7 +17,7 @@
 
 ## Install from source
 
-Cargo version 1.66.1 or above is required. You can get cargo from your
+Cargo version 1.70.0 or above is required. You can get cargo from your
 distribution package manager or from [rustup.rs](https://rustup.rs/).
 
 ```
@@ -37,7 +37,7 @@ Depolymerizer require:
 
 #### Bitcoin
 
-[Bitcoind](https://bitcoincore.org/) version 24.0 is expected
+[Bitcoind](https://bitcoincore.org/) version 24.1 is expected
 
 #### Ethereum
 
diff --git a/btc-wire/Cargo.toml b/btc-wire/Cargo.toml
index 91d3722..d6a120c 100644
--- a/btc-wire/Cargo.toml
+++ b/btc-wire/Cargo.toml
@@ -11,32 +11,32 @@ fail = []
 
 [dependencies]
 # Typed bitcoin rpc types
-bitcoin = { version = "0.29.2", features = [
+bitcoin = { version = "0.30.1", features = [
     "std",
     "serde",
 ], default-features = false }
 # Cli args parser
-clap = { version = "=4.0.32", features = ["derive"] }
-clap_lex = "=0.3.0"
+clap = { version = "4.4.6", features = ["derive"] }
+clap_lex = "0.5.1"
 # Bech32 encoding and decoding
 bech32 = "0.9.1"
 # Serialization library
-serde = { version = "1.0.152", features = ["derive"] }
-serde_json = "1.0.91"
-serde_repr = "0.1.10"
+serde = { version = "1.0.188", features = ["derive"] }
+serde_json = "1.0.107"
+serde_repr = "0.1.16"
 # Error macros
-thiserror = "1.0.38"
-base64 = "0.21.0"
+thiserror = "1.0.49"
+data-encoding = "2.4.0"
 # Common lib
 common = { path = "../common" }
 # Ini parser
-rust-ini = "0.18.0"
+rust-ini = "0.19.0"
 # Hexadecimal encoding
-hex = "0.4.3"
+hex = { package = "const-hex", version = "1.9.1" }
 
 [dev-dependencies]
 # statistics-driven micro-benchmarks
-criterion = "0.4.0"
+criterion = "0.5.1"
 
 [[bench]]
 name = "metadata"
diff --git a/btc-wire/src/bin/segwit-demo.rs b/btc-wire/src/bin/segwit-demo.rs
index ff07ff3..26f95f0 100644
--- a/btc-wire/src/bin/segwit-demo.rs
+++ b/btc-wire/src/bin/segwit-demo.rs
@@ -9,7 +9,9 @@ use common::{
 };
 
 pub fn main() {
-    let address = 
Address::from_str("tb1qhxrhccqexg0dv4nltgkuw4fg2ce7muplmjsn0v").unwrap();
+    let address = 
Address::from_str("tb1qhxrhccqexg0dv4nltgkuw4fg2ce7muplmjsn0v")
+        .unwrap()
+        .assume_checked();
     let amount = Amount::from_sat(5000000);
     let reserve_pub = "54ZN9AMVN1R0YZ68ZPVHHQA4KZE1V037M05FNMYH4JQ596YAKJEG";
     let btc = amount.to_btc();
@@ -56,6 +58,7 @@ pub fn main() {
         Network::Bitcoin => "bc",
         Network::Testnet | Network::Signet => "tb",
         Network::Regtest => "bcrt",
+        _ => unimplemented!(),
     };
     let first = encode_segwit_addr(hrp, first_half[..].try_into().unwrap());
     let second = encode_segwit_addr(hrp, second_half[..].try_into().unwrap());
@@ -68,8 +71,8 @@ pub fn main() {
     let minimum = rpc_utils::segwit_min_amount().to_btc();
     println!("Send a single bitcoin transaction with the three addresses as 
recipient as follow:");
     println!("\nIn bitcoincore wallet use 'Add Recipient' button to add two 
additional recipient and copy adresses and amounts");
-    let first = Address::from_str(&first).unwrap();
-    let second = Address::from_str(&second).unwrap();
+    let first = Address::from_str(&first).unwrap().assume_checked();
+    let second = Address::from_str(&second).unwrap().assume_checked();
     for (address, amount) in [(&address, btc), (&first, minimum), (&second, 
minimum)] {
         println!("{} {:.8} BTC", address, amount);
     }
diff --git a/btc-wire/src/btc_config.rs b/btc-wire/src/btc_config.rs
index fa61c6f..58d85fe 100644
--- a/btc-wire/src/btc_config.rs
+++ b/btc-wire/src/btc_config.rs
@@ -83,6 +83,7 @@ impl BitcoinConfig {
             Network::Testnet => conf.section(Some("test")),
             Network::Signet => conf.section(Some("signet")),
             Network::Regtest => conf.section(Some("regtest")),
+            _ => unimplemented!()
         };
 
         let port = if let Some(addr) = section.and_then(|s| s.get("rpcport")) {
diff --git a/btc-wire/src/lib.rs b/btc-wire/src/lib.rs
index 014362e..750e4d4 100644
--- a/btc-wire/src/lib.rs
+++ b/btc-wire/src/lib.rs
@@ -64,11 +64,18 @@ impl Rpc {
             Network::Bitcoin => "bc",
             Network::Testnet | Network::Signet => "tb",
             Network::Regtest => "bcrt",
+            _ => unimplemented!(),
         };
         let addresses = encode_segwit_key(hrp, metadata);
         let addresses = [
-            Address::from_str(&addresses[0]).unwrap(),
-            Address::from_str(&addresses[1]).unwrap(),
+            Address::from_str(&addresses[0])
+                .unwrap()
+                .require_network(to.network)
+                .unwrap(),
+            Address::from_str(&addresses[1])
+                .unwrap()
+                .require_network(to.network)
+                .unwrap(),
         ];
         let mut recipients = vec![(to, amount)];
         let min = segwit_min_amount();
@@ -91,7 +98,7 @@ impl Rpc {
                 it.script_pub_key
                     .address
                     .as_ref()
-                    .map(|addr| addr.to_string())
+                    .map(|addr| addr.clone().assume_checked().to_string())
             })
             .collect();
 
@@ -213,7 +220,7 @@ fn check_network_currency(network: Network, currency: 
CurrencyBtc) {
         Network::Bitcoin => CurrencyBtc::Main,
         Network::Testnet => CurrencyBtc::Test,
         Network::Regtest => CurrencyBtc::Dev,
-        Network::Signet => unimplemented!(),
+        _ => unimplemented!(),
     };
     if currency != expected {
         fail(format_args!(
diff --git a/btc-wire/src/loops/worker.rs b/btc-wire/src/loops/worker.rs
index bda2c21..3cd2aec 100644
--- a/btc-wire/src/loops/worker.rs
+++ b/btc-wire/src/loops/worker.rs
@@ -115,7 +115,10 @@ pub fn worker(mut rpc: AutoRpcWallet, mut db: 
AutoReconnectDb, mut state: WireSt
                     fail_point("(injected) fail bump", 0.3)?;
                     let row = db.query_one(
                         "UPDATE tx_out SET txid=$1 WHERE txid=$2 RETURNING 
wtid",
-                        &[&bump.txid.as_ref(), &id.as_ref()],
+                        &[
+                            &bump.txid.as_byte_array().as_slice(),
+                            &id.as_byte_array().as_slice(),
+                        ],
                     )?;
                     info!(
                         ">> (bump) {} replace {} with {}",
@@ -196,7 +199,7 @@ fn sync_chain(
         let mut tx = db.transaction()?;
         tx.execute(
             "UPDATE state SET value=$1 WHERE name='status'",
-            &[&[new_status as u8].as_ref()],
+            &[&[new_status as u8].as_slice()],
         )?;
         tx.execute("NOTIFY status", &[])?;
         tx.commit()?;
@@ -230,7 +233,10 @@ fn sync_chain(
     // Move last_hash forward
     db.execute(
         "UPDATE state SET value=$1 WHERE name='last_hash' AND value=$2",
-        &[&lastblock.as_ref(), &last_hash.as_inner().as_slice()],
+        &[
+            &lastblock.as_byte_array().as_slice(),
+            &last_hash.as_byte_array().as_slice(),
+        ],
     )?;
 
     Ok(Some(stuck))
@@ -266,7 +272,10 @@ fn sync_chain_removed(
             Ok((full, key)) => {
                 // Credits are only problematic if not reconfirmed and stored 
in the database
                 if db
-                    .query_opt("SELECT 1 FROM tx_in WHERE reserve_pub=$1", 
&[&key.as_ref()])?
+                    .query_opt(
+                        "SELECT 1 FROM tx_in WHERE reserve_pub=$1",
+                        &[&key.as_slice()],
+                    )?
                     .is_some()
                 {
                     let debit_addr = sender_address(rpc, &full)?;
@@ -278,12 +287,15 @@ fn sync_chain_removed(
                     // Invalid tx are only problematic if already bounced
                     if let Some(row) = db.query_opt(
                         "SELECT txid FROM bounce WHERE bounced=$1 AND txid IS 
NOT NULL",
-                        &[&id.as_ref()],
+                        &[&id.as_byte_array().as_slice()],
                     )? {
                         blocking_bounce.push((sql_txid(&row, 0), id));
                     } else {
                         // Remove transaction from bounce table
-                        db.execute("DELETE FROM bounce WHERE bounced=$1", 
&[&id.as_ref()])?;
+                        db.execute(
+                            "DELETE FROM bounce WHERE bounced=$1",
+                            &[&id.as_byte_array().as_slice()],
+                        )?;
                     }
                 }
                 GetSegwitErr::RPC(it) => return Err(it.into()),
@@ -324,11 +336,11 @@ fn sync_chain_incoming_confirmed(
         Ok((full, reserve_pub)) => {
             // Store transactions in database
             let debit_addr = sender_address(rpc, &full)?;
-            let credit_addr = full.details[0].address.as_ref().unwrap();
+            let credit_addr = 
full.details[0].address.clone().unwrap().assume_checked();
             let date = SystemTime::UNIX_EPOCH + Duration::from_secs(full.time);
             let amount = btc_to_taler(&full.amount, state.currency);
             let nb = db.execute("INSERT INTO tx_in (_date, amount, 
reserve_pub, debit_acc, credit_acc) VALUES ($1, $2, $3, $4, $5) ON CONFLICT 
(reserve_pub) DO NOTHING ", &[
-                &date, &amount.to_string(), &reserve_pub.as_ref(), 
&btc_payto_url(&debit_addr).as_ref(), &btc_payto_url(credit_addr).as_ref()
+                &date, &amount.to_string(), &reserve_pub.as_slice(), 
&btc_payto_url(&debit_addr).as_ref(), &btc_payto_url(&credit_addr).as_ref()
             ])?;
             if nb > 0 {
                 info!(
@@ -345,7 +357,7 @@ fn sync_chain_incoming_confirmed(
                 // If encoding is wrong request a bounce
                 db.execute(
                     "INSERT INTO bounce (bounced) VALUES ($1) ON CONFLICT 
(bounced) DO NOTHING",
-                    &[&id.as_ref()],
+                    &[&id.as_byte_array().as_slice()],
                 )?;
             }
             GetSegwitErr::RPC(e) => return Err(e.into()),
@@ -364,7 +376,7 @@ fn sync_chain_debit(
     confirmations: i32,
     state: &WireState,
 ) -> LoopResult<bool> {
-    let credit_addr = full.details[0].address.as_ref().unwrap();
+    let credit_addr = 
full.details[0].address.clone().unwrap().assume_checked();
     let amount = btc_to_taler(&full.amount, state.currency);
 
     if confirmations < 0 {
@@ -372,22 +384,20 @@ fn sync_chain_debit(
             // Handle conflicting tx
             let nb_row = db.execute(
                 "UPDATE tx_out SET status=$1, txid=NULL where txid=$2",
-                &[&(DebitStatus::Requested as i16), &id.as_ref()],
+                &[
+                    &(DebitStatus::Requested as i16),
+                    &id.as_byte_array().as_slice(),
+                ],
             )?;
             if nb_row > 0 {
-                warn!(
-                    ">> (conflict) {} in {} to {}",
-                    base32(wtid),
-                    id,
-                    credit_addr
-                );
+                warn!(">> (conflict) {} in {id} to {credit_addr}", 
base32(wtid));
             }
         }
     } else {
         // Get previous out tx
         let row = db.query_opt(
             "SELECT id,status,txid FROM tx_out WHERE wtid=$1 FOR UPDATE",
-            &[&wtid.as_ref()],
+            &[&wtid.as_slice()],
         )?;
         if let Some(row) = row {
             // If already in database, sync status
@@ -397,15 +407,17 @@ fn sync_chain_debit(
                 DebitStatus::Requested => {
                     let nb_row = db.execute(
                         "UPDATE tx_out SET status=$1, txid=$2 WHERE id=$3 AND 
status=$4",
-                        &[&(DebitStatus::Sent as i16), &id.as_ref(), &row_id, 
&status],
+                        &[
+                            &(DebitStatus::Sent as i16),
+                            &id.as_byte_array().as_slice(),
+                            &row_id,
+                            &status,
+                        ],
                     )?;
                     if nb_row > 0 {
                         warn!(
-                            ">> (recovered) {} {} in {} to {}",
-                            amount,
-                            base32(wtid),
-                            id,
-                            credit_addr
+                            ">> (recovered) {amount} {} in {id} to 
{credit_addr}",
+                            base32(wtid)
                         );
                     }
                 }
@@ -415,15 +427,13 @@ fn sync_chain_debit(
                         if txid == stored_id {
                             let nb_row = db.execute(
                                 "UPDATE tx_out SET txid=$1 WHERE txid=$2",
-                                &[&id.as_ref(), &txid.as_ref()],
+                                &[
+                                    &id.as_byte_array().as_slice(),
+                                    &txid.as_byte_array().as_slice(),
+                                ],
                             )?;
                             if nb_row > 0 {
-                                info!(
-                                    ">> (recovered) {} replace {} with {}",
-                                    base32(wtid),
-                                    txid,
-                                    id
-                                );
+                                info!(">> (recovered) {} replace {txid} with 
{id}", base32(wtid),);
                             }
                         }
                     }
@@ -435,15 +445,12 @@ fn sync_chain_debit(
             let date = SystemTime::UNIX_EPOCH + Duration::from_secs(full.time);
             let nb = db.execute(
                     "INSERT INTO tx_out (_date, amount, wtid, debit_acc, 
credit_acc, exchange_url, status, txid, request_uid) VALUES ($1, $2, $3, $4, 
$5, $6, $7, $8, $9) ON CONFLICT (wtid) DO NOTHING",
-                    &[&date, &amount.to_string(), &wtid.as_ref(), 
&btc_payto_url(&debit_addr).as_ref(), &btc_payto_url(credit_addr).as_ref(), 
&state.base_url.as_ref(), &(DebitStatus::Sent as i16), &id.as_ref(), 
&None::<&[u8]>],
+                    &[&date, &amount.to_string(), &wtid.as_slice(), 
&btc_payto_url(&debit_addr).as_ref(), &btc_payto_url(&credit_addr).as_ref(), 
&state.base_url.as_ref(), &(DebitStatus::Sent as i16), 
&id.as_byte_array().as_slice(), &None::<&[u8]>],
                         )?;
             if nb > 0 {
                 warn!(
-                    ">> (onchain) {} {} in {} to {}",
-                    amount,
-                    base32(wtid),
-                    id,
-                    credit_addr
+                    ">> (onchain) {amount} {} in {id} to {credit_addr}",
+                    base32(wtid)
                 );
             }
         }
@@ -475,7 +482,10 @@ fn sync_chain_bounce(
         // Handle conflicting tx
         let nb_row = db.execute(
             "UPDATE bounce SET status=$1, txid=NULL where txid=$2",
-            &[&(BounceStatus::Requested as i16), &id.as_ref()],
+            &[
+                &(BounceStatus::Requested as i16),
+                &id.as_byte_array().as_slice(),
+            ],
         )?;
         if nb_row > 0 {
             warn!("|| (conflict) {} in {}", &bounced, &id);
@@ -484,7 +494,7 @@ fn sync_chain_bounce(
         // Get previous bounce
         let row = db.query_opt(
             "SELECT id, status FROM bounce WHERE bounced=$1",
-            &[&bounced.as_ref()],
+            &[&bounced.as_byte_array().as_slice()],
         )?;
         if let Some(row) = row {
             // If already in database, sync status
@@ -494,7 +504,12 @@ fn sync_chain_bounce(
                 BounceStatus::Requested => {
                     let nb_row = db.execute(
                         "UPDATE bounce SET status=$1, txid=$2 WHERE id=$3 AND 
status=$4",
-                        &[&(BounceStatus::Sent as i16), &id.as_ref(), &row_id, 
&status],
+                        &[
+                            &(BounceStatus::Sent as i16),
+                            &id.as_byte_array().as_slice(),
+                            &row_id,
+                            &status,
+                        ],
                     )?;
                     if nb_row > 0 {
                         warn!("|| (recovered) {} in {}", &bounced, &id);
@@ -510,7 +525,7 @@ fn sync_chain_bounce(
             // Else add to database
             let nb = db.execute(
         "INSERT INTO bounce (bounced, txid, status) VALUES ($1, $2, $3) ON 
CONFLICT (txid) DO NOTHING",
-        &[&bounced.as_ref(), &id.as_ref(), &(BounceStatus::Sent as i16)],
+        &[&bounced.as_byte_array().as_slice(), &id.as_byte_array().as_slice(), 
&(BounceStatus::Sent as i16)],
             )?;
             if nb > 0 {
                 warn!("|| (onchain) {} in {}", &bounced, &id);
@@ -538,7 +553,7 @@ fn sync_chain_outgoing(
                 return sync_chain_debit(id, &full, &wtid, rpc, db, 
confirmations, state);
             }
             OutMetadata::Bounce { bounced } => {
-                sync_chain_bounce(id, &Txid::from_inner(bounced), db, 
confirmations)?
+                sync_chain_bounce(id, &Txid::from_byte_array(bounced), db, 
confirmations)?
             }
         },
         Ok((_, Err(e))) => warn!("send: decode-info {} - {}", id, e),
@@ -574,7 +589,11 @@ fn debit(db: &mut Client, rpc: &mut Rpc, state: 
&WireState) -> LoopResult<bool>
         fail_point("(injected) fail debit", 0.3)?;
         db.execute(
             "UPDATE tx_out SET status=$1, txid=$2 WHERE id=$3",
-            &[&(DebitStatus::Sent as i16), &tx_id.as_ref(), &id],
+            &[
+                &(DebitStatus::Sent as i16),
+                &tx_id.as_byte_array().as_slice(),
+                &id,
+            ],
         )?;
         let amount = btc_to_taler(&amount.to_signed().unwrap(), 
state.currency);
         info!(">> {} {} in {} to {}", amount, base32(&wtid), tx_id, addr);
@@ -593,7 +612,7 @@ fn bounce(db: &mut Client, rpc: &mut Rpc, fee: &BtcAmount) 
-> LoopResult<bool> {
         let id: i32 = row.get(0);
         let bounced: Txid = sql_txid(row, 1);
         let metadata = OutMetadata::Bounce {
-            bounced: *bounced.as_inner(),
+            bounced: *bounced.as_byte_array(),
         };
 
         match rpc.bounce(
@@ -605,7 +624,11 @@ fn bounce(db: &mut Client, rpc: &mut Rpc, fee: &BtcAmount) 
-> LoopResult<bool> {
                 fail_point("(injected) fail bounce", 0.3)?;
                 db.execute(
                     "UPDATE bounce SET txid=$1, status=$2 WHERE id=$3",
-                    &[&it.as_ref(), &(BounceStatus::Sent as i16), &id],
+                    &[
+                        &it.as_byte_array().as_slice(),
+                        &(BounceStatus::Sent as i16),
+                        &id,
+                    ],
                 )?;
                 info!("|| {} in {}", &bounced, &it);
             }
diff --git a/btc-wire/src/main.rs b/btc-wire/src/main.rs
index 7e7000e..edb82e5 100644
--- a/btc-wire/src/main.rs
+++ b/btc-wire/src/main.rs
@@ -13,7 +13,7 @@
   You should have received a copy of the GNU Affero General Public License 
along with
   TALER; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
 */
-use bitcoin::Network;
+use bitcoin::{hashes::Hash, Network};
 use btc_wire::{
     btc_config::{BitcoinConfig, WIRE_WALLET_NAME},
     load_taler_config,
@@ -78,21 +78,23 @@ fn init(config: Option<PathBuf>, init: Init) -> 
LoopResult<()> {
     let mut rpc = Rpc::common(&btc_conf).or_fail(|e| format!("rpc connect: 
{}", e));
     match init {
         Init::Initdb => {
+            let mut tx = db.transaction()?;
             // Load schema
-            db.batch_execute(include_str!("../../db/btc.sql"))?;
+            tx.batch_execute(include_str!("../../db/btc.sql"))?;
             // Init status to true
-            db
+            tx
                 .execute(
                     "INSERT INTO state (name, value) VALUES ('status', $1) ON 
CONFLICT (name) DO NOTHING",
-                    &[&[1u8].as_ref()],
+                    &[&[1u8].as_slice()],
                 )?;
             // Init last_hash if not already set
             let genesis_hash = rpc.get_genesis()?;
-            db
+            tx
                         .execute(
                             "INSERT INTO state (name, value) VALUES 
('last_hash', $1) ON CONFLICT (name) DO NOTHING",
-                            &[&genesis_hash.as_ref()],
+                            &[&genesis_hash.as_byte_array().as_slice()],
                         )?;
+            tx.commit()?;
             println!("Database initialised");
         }
         Init::Initwallet => {
@@ -153,6 +155,7 @@ fn run(config: Option<PathBuf>) {
         Network::Testnet => "test",
         Network::Signet => "signet",
         Network::Regtest => "regtest",
+        _ => unreachable!(),
     };
     info!("Running on {} chain", chain_name);
     // TODO Check wire wallet own config PAYTO address
diff --git a/btc-wire/src/rpc.rs b/btc-wire/src/rpc.rs
index 9cbe320..711cb39 100644
--- a/btc-wire/src/rpc.rs
+++ b/btc-wire/src/rpc.rs
@@ -25,9 +25,9 @@
 //!
 //! bitcoincore RPC documentation: <https://bitcoincore.org/en/doc/23.0.0/>
 
-use base64::{prelude::BASE64_STANDARD, Engine};
-use bitcoin::{hashes::hex::ToHex, Address, Amount, BlockHash, SignedAmount, 
Txid};
+use bitcoin::{address::NetworkUnchecked, Address, Amount, BlockHash, 
SignedAmount, Txid};
 use common::{log::log::error, password, reconnect::AutoReconnect};
+use data_encoding::BASE64;
 use serde_json::{json, Value};
 use std::{
     fmt::Debug,
@@ -161,7 +161,7 @@ impl Rpc {
             last_call: Instant::now(),
             path,
             id: 0,
-            cookie: format!("Basic {}", BASE64_STANDARD.encode(token)),
+            cookie: format!("Basic {}", BASE64.encode(&token)),
             conn,
             buf: Vec::new(),
         })
@@ -255,7 +255,9 @@ impl Rpc {
 
     /// Generate a new address fot the current wallet
     pub fn gen_addr(&mut self) -> Result<Address> {
-        self.call("getnewaddress", &EMPTY)
+        Ok(self
+            .call::<Address<NetworkUnchecked>>("getnewaddress", &EMPTY)?
+            .assume_checked())
     }
 
     /// Get current balance amount
@@ -341,7 +343,7 @@ impl Rpc {
         if let Some(data) = data {
             assert!(data.len() > 0, "No medatata");
             assert!(data.len() <= 80, "Max 80 bytes");
-            outputs.push(json!({ "data".to_string(): data.to_hex() }));
+            outputs.push(json!({ "data".to_string(): hex::encode(data) }));
         }
         self.call(
             "send",
@@ -401,6 +403,13 @@ impl Rpc {
     pub fn disconnect_node(&mut self, addr: &str) -> Result<()> {
         expect_null(self.call("disconnectnode", &(addr, ())))
     }
+
+    /* ----- Control ------ */
+
+    /// Request a graceful shutdown
+    pub fn stop(&mut self) -> Result<String> {
+        self.call("stop", &())
+    }
 }
 
 #[derive(Debug, serde::Deserialize)]
@@ -446,11 +455,11 @@ pub enum Category {
 
 #[derive(Debug, serde::Deserialize)]
 pub struct TransactionDetail {
-    pub address: Option<Address>,
+    pub address: Option<Address<NetworkUnchecked>>,
     pub category: Category,
-    #[serde(with = "bitcoin::util::amount::serde::as_btc")]
+    #[serde(with = "bitcoin::amount::serde::as_btc")]
     pub amount: SignedAmount,
-    #[serde(default, with = "bitcoin::util::amount::serde::as_btc::opt")]
+    #[serde(default, with = "bitcoin::amount::serde::as_btc::opt")]
     pub fee: Option<SignedAmount>,
     /// Ony for send transaction
     pub abandoned: Option<bool>,
@@ -475,13 +484,13 @@ pub struct ListSinceBlock {
 pub struct VoutScriptPubKey {
     pub asm: String,
     // nulldata do not have an address
-    pub address: Option<Address>,
+    pub address: Option<Address<NetworkUnchecked>>,
 }
 
 #[derive(Debug, serde::Deserialize)]
 #[serde(rename_all = "camelCase")]
 pub struct Vout {
-    #[serde(with = "bitcoin::util::amount::serde::as_btc")]
+    #[serde(with = "bitcoin::amount::serde::as_btc")]
     pub value: Amount,
     pub n: u32,
     pub script_pub_key: VoutScriptPubKey,
@@ -505,9 +514,9 @@ pub struct InputOutput {
 pub struct Transaction {
     pub confirmations: i32,
     pub time: u64,
-    #[serde(with = "bitcoin::util::amount::serde::as_btc")]
+    #[serde(with = "bitcoin::amount::serde::as_btc")]
     pub amount: SignedAmount,
-    #[serde(default, with = "bitcoin::util::amount::serde::as_btc::opt")]
+    #[serde(default, with = "bitcoin::amount::serde::as_btc::opt")]
     pub fee: Option<SignedAmount>,
     pub replaces_txid: Option<Txid>,
     pub replaced_by_txid: Option<Txid>,
diff --git a/btc-wire/src/rpc_utils.rs b/btc-wire/src/rpc_utils.rs
index 3548a5b..7844b9c 100644
--- a/btc-wire/src/rpc_utils.rs
+++ b/btc-wire/src/rpc_utils.rs
@@ -26,6 +26,7 @@ pub fn chain_dir(network: Network) -> &'static str {
         Network::Testnet => "testnet3",
         Network::Regtest => "regtest",
         Network::Signet => "signet",
+        _ => unimplemented!(),
     }
 }
 
@@ -36,6 +37,7 @@ pub fn rpc_port(network: Network) -> u16 {
         Network::Testnet => 18332,
         Network::Regtest => 18443,
         Network::Signet => 38333,
+        _ => unimplemented!(),
     }
 }
 
@@ -75,5 +77,6 @@ pub fn sender_address(rpc: &mut Rpc, full: &Transaction) -> 
rpc::Result<Address>
         .unwrap()
         .script_pub_key
         .address
-        .unwrap())
+        .unwrap()
+        .assume_checked())
 }
diff --git a/btc-wire/src/taler_utils.rs b/btc-wire/src/taler_utils.rs
index 36bd233..9774ff3 100644
--- a/btc-wire/src/taler_utils.rs
+++ b/btc-wire/src/taler_utils.rs
@@ -35,7 +35,8 @@ pub fn btc_payto_addr(url: &Url) -> Result<Address, String> {
         ));
     }
     let str = url.path().trim_start_matches('/');
-    Address::from_str(str).map_err(|e| e.to_string())
+    let addr = Address::from_str(str).map_err(|e| e.to_string())?;
+    Ok(addr.assume_checked())
 }
 
 /// Transform a btc amount into a taler amount
diff --git a/common/Cargo.toml b/common/Cargo.toml
index 2582775..0c165de 100644
--- a/common/Cargo.toml
+++ b/common/Cargo.toml
@@ -9,27 +9,29 @@ rust-version = "1.63.0"
 
 [dependencies]
 # Serialization framework
-serde = { version = "1.0.152", features = ["derive"] }
+serde = { version = "1.0.188", features = ["derive"] }
 # Serialization helper
-serde_with = "2.2.0"
+serde_with = "3.3.0"
 # JSON serialization
-serde_json = "1.0.91"
+serde_json = "1.0.107"
 # Url format
-url = { version = "2.3.1", features = ["serde"] }
+url = { version = "2.4.1", features = ["serde"] }
 # Crockford’s base32
 base32 = "0.4.0"
 # Error macros
-thiserror = "1.0.38"
+thiserror = "1.0.49"
 # Ini files
-rust-ini = "0.18.0"
+rust-ini = "0.19.0"
 # Logging
-flexi_logger = { version = "0.24.2", default-features = false }
-log = "0.4.17"
+flexi_logger = { version = "0.27.2", default-features = false }
+log = "0.4.20"
 # Postgres client
-postgres = "0.19.4"
+postgres = "0.19.7"
 # Secure random
 rand = { version = "0.8.5", features = ["getrandom"] }
 # Securely zero memory
-zeroize = "1.5.7"
+zeroize = "1.6.0"
 # Optimized uri binary format
 uri-pack = { path = "../uri-pack" }
+# Exponential backoff generator
+exponential-backoff = "1.2.0"
diff --git a/common/src/reconnect.rs b/common/src/reconnect.rs
index f569fc9..f2892f5 100644
--- a/common/src/reconnect.rs
+++ b/common/src/reconnect.rs
@@ -15,10 +15,13 @@
 */
 use std::time::Duration;
 
+use exponential_backoff::Backoff;
 use log::error;
 use postgres::{Client, NoTls};
 
-const RECONNECT_DELAY: Duration = Duration::from_secs(5);
+const MIN_RECONNECT_DELAY: Duration = Duration::from_millis(300);
+const MAX_RECONNECT_DELAY: Duration = Duration::from_secs(10);
+const VALID_DELAY: Duration = Duration::from_secs(3);
 
 pub struct AutoReconnect<S, C> {
     config: S,
@@ -39,10 +42,12 @@ impl<S, C> AutoReconnect<S, C> {
 
     /// Create a new client, loop on error
     fn connect(config: &S, connect: fn(&S) -> Option<C>) -> C {
+        let backoff = Backoff::new(8, MIN_RECONNECT_DELAY, 
MAX_RECONNECT_DELAY);
+        let mut iter = backoff.iter();
         loop {
             match connect(config) {
                 Some(new) => return new,
-                None => std::thread::sleep(RECONNECT_DELAY),
+                None => 
std::thread::sleep(iter.next().unwrap_or(MAX_RECONNECT_DELAY)),
             }
         }
     }
@@ -67,6 +72,6 @@ pub fn auto_reconnect_db(config: postgres::Config) -> 
AutoReconnectDb {
                 .map_err(|err| error!("connect DB: {}", err))
                 .ok()
         },
-        |client| client.is_valid(RECONNECT_DELAY).is_err(),
+        |client| client.is_valid(VALID_DELAY).is_err(),
     )
 }
diff --git a/eth-wire/Cargo.toml b/eth-wire/Cargo.toml
index c5981b5..72d9afe 100644
--- a/eth-wire/Cargo.toml
+++ b/eth-wire/Cargo.toml
@@ -11,18 +11,19 @@ fail = []
 
 [dependencies]
 # Cli args
-clap = { version = "=4.0.32", features = ["derive"] }
-clap_lex = "=0.3.0"
+clap = { version = "4.4.6", features = ["derive"] }
+clap_lex = "0.5.1"
 # Serialization library
-serde = { version = "1.0.152", features = ["derive"] }
-serde_json = "1.0.91"
-serde_repr = "0.1.10"
-hex = "0.4.3"
+serde = { version = "1.0.188", features = ["derive"] }
+serde_json = "1.0.107"
+serde_repr = "0.1.16"
+# Hexadecimal encoding
+hex = { package = "const-hex", version = "1.9.1" }
 # Ethereum serializable types
 ethereum-types = { version = "0.14.1", default-features = false, features = [
     "serialize",
 ] }
 # Error macros
-thiserror = "1.0.38"
+thiserror = "1.0.49"
 # Common lib
 common = { path = "../common" }
diff --git a/eth-wire/src/main.rs b/eth-wire/src/main.rs
index c3b0162..9d64de2 100644
--- a/eth-wire/src/main.rs
+++ b/eth-wire/src/main.rs
@@ -73,10 +73,11 @@ fn init(config: Option<PathBuf>, init: Init) -> 
LoopResult<()> {
 
     match init {
         Init::Initdb => {
+            let mut tx = db.transaction()?;
             // Load schema
-            db.batch_execute(include_str!("../../db/eth.sql"))?;
+            tx.batch_execute(include_str!("../../db/eth.sql"))?;
             // Init status to true
-            db
+            tx
               .execute(
                   "INSERT INTO state (name, value) VALUES ('status', $1) ON 
CONFLICT (name) DO NOTHING",
                   &[&[1u8].as_ref()],
@@ -88,10 +89,11 @@ fn init(config: Option<PathBuf>, init: Init) -> 
LoopResult<()> {
                 tip_height: block.number.unwrap(),
                 conf_height: block.number.unwrap(),
             };
-            db.execute(
+            tx.execute(
                 "INSERT INTO state (name, value) VALUES ('sync', $1) ON 
CONFLICT (name) DO NOTHING",
                 &[&state.to_bytes().as_ref()],
             )?;
+            tx.commit()?;
             println!("Database initialised");
         }
         Init::Initwallet => {
diff --git a/eth-wire/src/rpc.rs b/eth-wire/src/rpc.rs
index 6b670cb..f5f3cc6 100644
--- a/eth-wire/src/rpc.rs
+++ b/eth-wire/src/rpc.rs
@@ -542,9 +542,7 @@ pub mod hex {
         where
             S: Serializer,
         {
-            let mut serialized = "0x".to_owned();
-            serialized.push_str(&hex::encode(&self.0));
-            serializer.serialize_str(serialized.as_ref())
+            serializer.serialize_str(&hex::encode_prefixed(&self.0))
         }
     }
 
diff --git a/instrumentation/Cargo.toml b/instrumentation/Cargo.toml
index 6e6e70c..984650a 100644
--- a/instrumentation/Cargo.toml
+++ b/instrumentation/Cargo.toml
@@ -3,16 +3,16 @@ name = "instrumentation"
 version = "0.1.0"
 edition = "2021"
 license = "AGPL-3.0-or-later"
-rust-version = "1.63.0"
+rust-version = "1.70.0"
 
 [dependencies]
 # Cli args parser
-clap = { version = "=4.0.32", features = ["derive"] }
-clap_lex = "=0.3.0"
+clap = { version = "4.4.6", features = ["derive"] }
+clap_lex = "0.5.1"
 common = { path = "../common" }
 # Bitcoin
 btc-wire = { path = "../btc-wire" }
-bitcoin = { version = "0.29.2", default-features = false }
+bitcoin = { version = "0.30.1", default-features = false, features = ["std"] }
 # Ethereum
 eth-wire = { path = "../eth-wire" }
 ethereum-types = { version = "0.14.1", default-features = false }
@@ -20,21 +20,22 @@ hex = "0.4.3"
 # Wire Gateway
 ureq = { version = "2.5.0", features = ["json"] }
 # In memory deflate library
-libdeflater = "0.12.0"
+libdeflater = "1.19.0"
 # Generate temporary files
 tempfile = "3.3.0"
 # RNG
-fastrand = "1.8.0"
+fastrand = "2.0.1"
 # terminal color
 owo-colors = "3.5.0"
 # Better backtrace
-color-backtrace = "0.5.1"
+color-backtrace = "0.6.0"
 # Send signal to child processes
 signal-child = "1.0.5"
 # Edit toml files
-rust-ini = "0.18.0"
+rust-ini = "0.19.0"
+# Progress reporting
+indicatif = "0.17.7"
 thread-local-panic-hook = "0.1.0"
 
-
 [build-dependencies]
-clap_mangen = "0.2.5"
+clap_mangen = "0.2.14"
diff --git a/instrumentation/src/btc.rs b/instrumentation/src/btc.rs
index b9b9fc6..964f302 100644
--- a/instrumentation/src/btc.rs
+++ b/instrumentation/src/btc.rs
@@ -160,7 +160,7 @@ pub fn online_test(config: Option<&Path>, base_url: &str) {
                 match metadata {
                     OutMetadata::Debit { .. } => {}
                     OutMetadata::Bounce { bounced } => {
-                        let bounced = Txid::from_inner(bounced);
+                        let bounced = Txid::from_byte_array(bounced);
                         if bounced == bounce_id {
                             break 'l;
                         } else if bounced == send_min_id {
@@ -380,7 +380,7 @@ impl BtcCtx {
             .unwrap();
         tx.execute(
             "UPDATE state SET value=$1 WHERE name='last_hash'",
-            &[&hash.as_ref()],
+            &[&hash.as_byte_array().as_slice()],
         )
         .unwrap();
         tx.commit().unwrap();
@@ -388,16 +388,8 @@ impl BtcCtx {
 
     pub fn stop_node(&mut self) {
         // We need to kill bitcoin gracefully to avoid corruption
-        #[cfg(unix)]
-        {
-            cmd_redirect_ok(
-                "kill",
-                &[&self.btc_node.0.id().to_string()],
-                "/dev/null",
-                "fill btc node",
-            );
-            self.btc_node.0.wait().unwrap();
-        }
+        self.common_rpc.stop().unwrap();
+        self.btc_node.0.wait().unwrap();
     }
 
     pub fn cluster_deco(&mut self) {
@@ -1105,11 +1097,11 @@ pub fn maxfee(ctx: TestCtx) {
             total_amount += amount;
             ctx.debit(amount, rand_slice());
         }
-        sleep(Duration::from_secs(3));
+        ctx.mine(2);
 
         // Check no transaction happen
-        ctx.expect_wire_balance(wire, true);
-        ctx.expect_client_balance(client, true);
+        ctx.expect_wire_balance(wire, false);
+        ctx.expect_client_balance(client, false);
     }
 
     ctx.step("Good feed");
diff --git a/instrumentation/src/eth.rs b/instrumentation/src/eth.rs
index ab44106..f6aa719 100644
--- a/instrumentation/src/eth.rs
+++ b/instrumentation/src/eth.rs
@@ -388,7 +388,7 @@ impl EthCtx {
                 conf_height: block.number.unwrap(),
             }
             .to_bytes()
-            .as_ref()],
+            .as_slice()],
         )
         .unwrap();
         tx.commit().unwrap();
diff --git a/instrumentation/src/main.rs b/instrumentation/src/main.rs
index c33b981..5990c12 100644
--- a/instrumentation/src/main.rs
+++ b/instrumentation/src/main.rs
@@ -14,15 +14,20 @@
   TALER; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
 */
 
-use std::{panic::catch_unwind, path::PathBuf, time::Instant};
+use std::{
+    panic::catch_unwind,
+    path::PathBuf,
+    time::{Duration, Instant},
+};
 
 use clap::Parser;
 use color_backtrace::termcolor::NoColor;
 use common::{config::TalerConfig, currency::Currency};
+use indicatif::{MultiProgress, ProgressBar, ProgressStyle};
 use owo_colors::OwoColorize;
 use thread_local_panic_hook::set_hook;
 
-use crate::utils::TestCtx;
+use crate::utils::{try_cmd_redirect, TestCtx};
 
 mod btc;
 mod eth;
@@ -70,42 +75,81 @@ pub fn main() {
         }
         Cmd::Offline { filters } => {
             std::fs::remove_dir_all("log").ok();
-            std::fs::create_dir_all("log").unwrap();
+            std::fs::create_dir_all("log/bin").unwrap();
+
+            // Build binaries
+            let p = ProgressBar::new_spinner();
+            p.set_style(ProgressStyle::with_template("building {msg} 
{elapsed:.dim}").unwrap());
+            p.enable_steady_tick(Duration::from_millis(1000));
+            build_bin(&p, "wire-gateway", Some("test"), "wire-gateway");
+            for name in ["btc-wire", "eth-wire"] {
+                build_bin(&p, name, None, name);
+                build_bin(&p, name, Some("fail"), &format!("{name}-fail"));
+            }
+            p.finish_and_clear();
+            
+            // Run tests
+            let m = MultiProgress::new();
+            let start_style =
+                &ProgressStyle::with_template("{prefix:.magenta} 
{elapsed:.dim}").unwrap();
+            let ok_style =
+                &ProgressStyle::with_template("{prefix:.magenta} {msg:.green} 
{elapsed:.dim}")
+                    .unwrap();
+            let err_style =
+                &ProgressStyle::with_template("{prefix:.magenta} {msg:.red} 
{elapsed:.dim}")
+                    .unwrap();
 
             let start = Instant::now();
-            let tests: Vec<_> = TESTS
-                .iter()
-                .filter(|(_, name)| {
-                    filters.is_empty() || filters.iter().any(|f| 
name.starts_with(f))
-                })
-                .map(|(action, name)| {
-                    let n = name.to_string();
-                    let join = std::thread::spawn(move || {
-                        let start = Instant::now();
-                        let ctx = TestCtx::new(&n);
-                        let tmp = ctx.clone();
-                        set_hook(Box::new(move |info| {
-                            let mut buf = Vec::new();
-                            color_backtrace::BacktracePrinter::new()
-                                .print_panic_info(info, &mut NoColor::new(&mut 
buf))
-                                .ok();
-                            let str = 
String::from_utf8(buf).unwrap_or_default();
-                            tmp.out.lock().unwrap().push_str(&str);
-                        }));
-                        let tmp = ctx.clone();
-                        let result = catch_unwind(|| {
-                            action(tmp);
+            let results: Vec<_> = std::thread::scope(|s| {
+                let tests: Vec<_> = TESTS
+                    .iter()
+                    .filter(|(_, name)| {
+                        filters.is_empty() || filters.iter().any(|f| 
name.starts_with(f))
+                    })
+                    .map(|(action, name)| {
+                        let pb = m.add(ProgressBar::new_spinner());
+                        pb.set_style(start_style.clone());
+                        pb.set_prefix(*name);
+                        pb.enable_steady_tick(Duration::from_millis(1000));
+                        let join = s.spawn(move || {
+                            let start = Instant::now();
+                            let ctx = TestCtx::new(name);
+                            let tmp = ctx.clone();
+                            set_hook(Box::new(move |info| {
+                                let mut buf = Vec::new();
+                                color_backtrace::BacktracePrinter::new()
+                                    .print_panic_info(info, &mut 
NoColor::new(&mut buf))
+                                    .ok();
+                                let str = 
String::from_utf8(buf).unwrap_or_default();
+                                tmp.out.lock().unwrap().push_str(&str);
+                            }));
+                            let tmp = ctx.clone();
+                            let result = catch_unwind(|| {
+                                action(tmp);
+                            });
+                            let lock = ctx.out.lock().unwrap();
+                            if result.is_ok() {
+                                pb.set_style(ok_style.clone());
+                                pb.finish_with_message("OK");
+                            } else {
+                                pb.set_style(err_style.clone());
+                                pb.finish_with_message("ERR");
+                            }
+
+                            (result, start.elapsed(), lock.clone())
                         });
-                        let lock = ctx.out.lock().unwrap();
-                        (result, start.elapsed(), lock.clone())
-                    });
-                    (join, name)
-                })
-                .collect();
-
-            let len = tests.len();
-            for (handle, name) in tests {
-                let (result, time, out) = handle.join().unwrap();
+                        (join, name)
+                    })
+                    .collect();
+                tests
+                    .into_iter()
+                    .map(|(j, n)| (j.join().unwrap(), n))
+                    .collect()
+            });
+
+            let len = results.len();
+            m.clear().unwrap();
+            for ((result, time, out), name) in results {
                 match result {
                     Ok(_) => {
                         println!(
@@ -131,6 +175,25 @@ pub fn main() {
     }
 }
 
+pub fn build_bin(p: &ProgressBar, name: &str, features: Option<&str>, 
bin_name: &str) {
+    p.set_message(bin_name.to_string());
+    let mut args = vec!["build", "--bin", name, "--release"];
+    if let Some(features) = features {
+        args.extend_from_slice(&["--features", features]);
+    }
+    let result = try_cmd_redirect("cargo", &args, "log/bin/build")
+        .unwrap()
+        .0
+        .wait()
+        .unwrap();
+    assert!(result.success());
+    std::fs::rename(
+        format!("target/release/{name}"),
+        format!("log/bin/{bin_name}"),
+    )
+    .unwrap();
+}
+
 pub const TESTS: &[(fn(TestCtx), &str)] = &[
     (gateway::api, "gateway_api"),
     (gateway::auth, "gateway_auth"),
diff --git a/instrumentation/src/utils.rs b/instrumentation/src/utils.rs
index 8377f5a..158876b 100644
--- a/instrumentation/src/utils.rs
+++ b/instrumentation/src/utils.rs
@@ -238,7 +238,7 @@ pub struct TalerCtx {
     pub taler_conf: TalerConfig,
     ctx: TestCtx,
     db: ChildGuard,
-    wire_name: String,
+    wire_bin_path: String,
     stressed: bool,
     gateway: Option<ChildGuard>,
     pub gateway_url: String,
@@ -345,7 +345,7 @@ impl TalerCtx {
 
             db
         };
-
+        let wire_name = wire_name.into();
         Self {
             ctx: ctx.clone(),
             gateway_url: format!("http://localhost:{}/";, taler_conf.port()),
@@ -356,7 +356,11 @@ impl TalerCtx {
             conf,
             taler_conf,
             db,
-            wire_name: wire_name.into(),
+            wire_bin_path: if stressed {
+                format!("log/bin/{wire_name}-fail")
+            } else {
+                format!("log/bin/{wire_name}")
+            },
             stressed,
             gateway: None,
             wire: None,
@@ -365,22 +369,12 @@ impl TalerCtx {
         }
     }
 
-    fn wire_args<'a>(&'a self, args: &[&'a str]) -> Vec<&'a str> {
-        let mut tmp = vec!["run", "--bin", &self.wire_name, "--release"];
-        if self.stressed {
-            tmp.extend_from_slice(&["--features", "fail"]);
-        }
-        tmp.push("--");
-        tmp.extend_from_slice(args);
-        return tmp;
-    }
-
     pub fn init_db(&self) {
         // Init db
         retry(|| {
             cmd_redirect(
-                "cargo",
-                &self.wire_args(&["-c", self.conf.to_string_lossy().as_ref(), 
"initdb"]),
+                &self.wire_bin_path,
+                &["-c", self.conf.to_string_lossy().as_ref(), "initdb"],
                 &self.log("cmd"),
             )
             .0
@@ -393,32 +387,22 @@ impl TalerCtx {
     pub fn run(&mut self) {
         // Start wires
         self.wire = Some(cmd_redirect(
-            "cargo",
-            &self.wire_args(&["-c", self.conf.to_string_lossy().as_ref()]),
+            &self.wire_bin_path,
+            &["-c", self.conf.to_string_lossy().as_ref()],
             &self.log("wire"),
         ));
         self.wire2 = self.stressed.then(|| {
             cmd_redirect(
-                "cargo",
-                &self.wire_args(&["-c", self.conf.to_string_lossy().as_ref()]),
+                &self.wire_bin_path,
+                &["-c", self.conf.to_string_lossy().as_ref()],
                 &self.log("wire1"),
             )
         });
 
         // Run gateway
         self.gateway = Some(cmd_redirect(
-            "cargo",
-            &[
-                "run",
-                "--bin",
-                "wire-gateway",
-                "--release",
-                "--features",
-                "test",
-                "--",
-                "-c",
-                self.conf.to_string_lossy().as_ref(),
-            ],
+            "log/bin/wire-gateway",
+            &["-c", self.conf.to_string_lossy().as_ref()],
             &self.log("gateway"),
         ));
         retry(|| {
diff --git a/makefile b/makefile
index 0367d14..96970e0 100644
--- a/makefile
+++ b/makefile
@@ -7,7 +7,7 @@ segwit_demo:
        cargo run --release --bin segwit-demo
 
 test:
-       RUST_BACKTRACE=full cargo run -r --bin instrumentation -- offline
+       RUST_BACKTRACE=full cargo run --profile dev --bin instrumentation -- 
offline
 
 msrv:
-       cargo msrv --min 1.63.0 --max 1.63.0 --linear
\ No newline at end of file
+       cargo msrv --min 1.70.0 --max 1.70.0 --linear
\ No newline at end of file
diff --git a/script/prepare.sh b/script/prepare.sh
index d95d9d7..72adb5d 100755
--- a/script/prepare.sh
+++ b/script/prepare.sh
@@ -20,15 +20,15 @@ echo "Ⅰ - Find installed postgres version"
 PG_VER=`pg_config --version | egrep -o '[0-9]{1,}' | head -1`
 echo "Found version $PG_VER"
 
-echo "Ⅱ - Install bitcoind version 0.23"
+echo "Ⅱ - Install bitcoind version 24.1"
 cd $DIR
-curl -L 
https://bitcoincore.org/bin/bitcoin-core-24.0.1/bitcoin-24.0.1-x86_64-linux-gnu.tar.gz
 -o btc.tar.gz
+curl -L 
https://bitcoincore.org/bin/bitcoin-core-24.1/bitcoin-24.1-x86_64-linux-gnu.tar.gz
 -o btc.tar.gz
 tar xvzf btc.tar.gz
 rm -rfv ~/bitcoin
 mkdir -pv ~/bitcoin
-mv -v bitcoin-24.0.1/* ~/bitcoin
+mv -v bitcoin-24.1/* ~/bitcoin
 
-echo "Ⅲ - Install Go Ethereum (Geth) v1.10.24"
+echo "Ⅲ - Install Go Ethereum (Geth) v1.10.26"
 cd $DIR
 curl -L 
https://gethstore.blob.core.windows.net/builds/geth-alltools-linux-amd64-1.10.26-e5eb32ac.tar.gz
 -o geth.tar.gz
 tar xvzf geth.tar.gz
diff --git a/uri-pack/Cargo.toml b/uri-pack/Cargo.toml
index 3c5a690..2960c48 100644
--- a/uri-pack/Cargo.toml
+++ b/uri-pack/Cargo.toml
@@ -8,18 +8,18 @@ license = "AGPL-3.0-or-later"
 
 [dependencies]
 # Error macros
-thiserror = "1.0.38"
-csv = "1.1.6"
+thiserror = "1.0.49"
+csv = "1.3.0"
 
 [dev-dependencies]
 # Json parser
-serde_json = "1.0.91"
+serde_json = "1.0.107"
 # Url parser
-url = "2.3.1"
+url = "2.4.1"
 # statistics-driven micro-benchmarks
-criterion = "0.4.0"
+criterion = "0.5.1"
 # Fast insecure random
-fastrand = "1.8.0"
+fastrand = "2.0.1"
 # Fuzzing test
 quickcheck = "1.0.3"
 quickcheck_macros = "1.0.0"
diff --git a/wire-gateway/Cargo.toml b/wire-gateway/Cargo.toml
index 7d6a46e..652e52e 100644
--- a/wire-gateway/Cargo.toml
+++ b/wire-gateway/Cargo.toml
@@ -3,19 +3,19 @@ name = "wire-gateway"
 version = "0.1.0"
 edition = "2021"
 license = "AGPL-3.0-or-later"
-rust-version = "1.63.0"
+rust-version = "1.70.0"
 
 [dependencies]
 # Http library
-hyper = { version = "0.14.23", features = ["http1", "server", "runtime"] }
+hyper = { version = "0.14.27", features = ["http1", "server", "runtime"] }
 # Hyper compat lib for unix domain socket
 hyperlocal = "0.8.0"
 # Async runtime
-tokio = { version = "1.24.2", features = ["net", "macros", "rt-multi-thread"] }
+tokio = { version = "1.32.0", features = ["net", "macros", "rt-multi-thread"] }
 # Serialization framework
-serde = { version = "1.0.152", features = ["derive"] }
+serde = { version = "1.0.188", features = ["derive"] }
 # Serialization helper
-serde_with = "2.2.0"
+serde_with = "3.3.0"
 # JSON serialization
 serde_json = "1.0.91"
 # Url query serialization
@@ -23,21 +23,21 @@ serde_urlencoded = "0.7.1"
 # Error macros
 thiserror = "1.0.38"
 # Deflate compression
-miniz_oxide = "0.6.2"
+miniz_oxide = "0.7.1"
 # Async postgres client
 tokio-postgres = { version = "0.7.7" }
-deadpool-postgres = "0.10.4"
+deadpool-postgres = "0.11.0"
 # Socket activation
 listenfd = "1.0.0"
 # Common lib
 common = { path = "../common" }
 # Bitcoin types
-bitcoin = { version = "0.29.2" }
+bitcoin = { version = "0.30.1" }
 # Ethereum types
 ethereum-types = { version = "0.14.1", default-features = false }
 # Cli args parser
-clap = { version = "=4.0.32", features = ["derive"] }
-clap_lex = "=0.3.0"
+clap = { version = "4.4.6", features = ["derive"] }
+clap_lex = "0.5.1"
 
 [features]
 # Enable test admin endpoint
diff --git a/wire-gateway/src/main.rs b/wire-gateway/src/main.rs
index 3cc5829..7024d9b 100644
--- a/wire-gateway/src/main.rs
+++ b/wire-gateway/src/main.rs
@@ -346,7 +346,7 @@ async fn router(
                 ErrorCode::GENERIC_DB_FETCH_FAILED,
             )?;
             // Handle idempotence, check previous transaction with the same 
request_uid
-            let row = db.query_opt("SELECT amount, exchange_url, wtid, 
credit_acc, id, _date FROM tx_out WHERE request_uid = $1", 
&[&request.request_uid.as_ref()])
+            let row = db.query_opt("SELECT amount, exchange_url, wtid, 
credit_acc, id, _date FROM tx_out WHERE request_uid = $1", 
&[&request.request_uid.as_slice()])
                 .await?;
             if let Some(row) = row {
                 let prev = TransferRequest {
@@ -376,7 +376,7 @@ async fn router(
             let timestamp = Timestamp::now();
             let tx = db.transaction().await?;
             let row = tx.query_one("INSERT INTO tx_out (amount, wtid, 
debit_acc, credit_acc, exchange_url, request_uid) VALUES ($1, $2, $3, $4, $5, 
$6) RETURNING id", &[
-                &request.amount.to_string(), &request.wtid.as_ref(), 
&state.payto.as_ref(),  &request.credit_account.as_ref(), 
&request.exchange_base_url.as_ref(), &request.request_uid.as_ref()
+                &request.amount.to_string(), &request.wtid.as_slice(), 
&state.payto.as_ref(),  &request.credit_account.as_ref(), 
&request.exchange_base_url.as_ref(), &request.request_uid.as_slice()
             ]).await?;
             tx.execute("NOTIFY new_tx", &[]).await?;
             tx.commit().await?;
@@ -479,7 +479,7 @@ async fn router(
                 ErrorCode::GENERIC_DB_FETCH_FAILED,
             )?;
             let row = db.query_one("INSERT INTO tx_in (_date, amount, 
reserve_pub, debit_acc, credit_acc) VALUES (now(), $1, $2, $3, $4) RETURNING 
id", &[
-                &request.amount.to_string(), &request.reserve_pub.as_ref(), 
&request.debit_account.as_ref(), 
&"payto://bitcoin/bcrt1qgkgxkjj27g3f7s87mcvjjsghay7gh34cx39prj"
+                &request.amount.to_string(), &request.reserve_pub.as_slice(), 
&request.debit_account.as_ref(), 
&"payto://bitcoin/bcrt1qgkgxkjj27g3f7s87mcvjjsghay7gh34cx39prj"
             ]).await.catch_code(
                 StatusCode::BAD_GATEWAY,
                 ErrorCode::GENERIC_DB_FETCH_FAILED,

-- 
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]