Page MenuHomePhabricator

No OneTemporary

diff --git a/Cargo.lock b/Cargo.lock
index d040fc52e..8a9228fd8 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -1,4336 +1,4339 @@
# This file is automatically @generated by Cargo.
# It is not intended for manual editing.
version = 3
[[package]]
name = "abc-rust-error"
version = "0.1.0"
dependencies = [
"abc-rust-lint",
"eyre",
"http 1.2.0",
"stable-eyre",
"thiserror 2.0.4",
]
[[package]]
name = "abc-rust-lint"
version = "0.1.0"
[[package]]
name = "addr2line"
version = "0.21.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb"
dependencies = [
"gimli",
]
[[package]]
name = "adler"
version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
[[package]]
name = "adler2"
version = "2.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627"
[[package]]
name = "aho-corasick"
version = "1.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916"
dependencies = [
"memchr",
]
[[package]]
name = "android-tzdata"
version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0"
[[package]]
name = "android_system_properties"
version = "0.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311"
dependencies = [
"libc",
]
[[package]]
name = "anstyle"
version = "1.0.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9"
[[package]]
name = "anyhow"
-version = "1.0.94"
+version = "1.0.95"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c1fd03a028ef38ba2276dce7e33fcd6369c158a1bca17946c4b1b701891c1ff7"
+checksum = "34ac096ce696dc2fcabef30516bb13c0a68a11d30131d3df6f04711467681b04"
[[package]]
name = "arrayvec"
version = "0.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b"
[[package]]
name = "arrayvec"
version = "0.7.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50"
[[package]]
name = "askama"
version = "0.10.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d298738b6e47e1034e560e5afe63aa488fea34e25ec11b855a76f0d7b8e73134"
dependencies = [
"askama_derive",
"askama_escape",
"askama_shared",
]
[[package]]
name = "askama_derive"
version = "0.10.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ca2925c4c290382f9d2fa3d1c1b6a63fa1427099721ecca4749b154cc9c25522"
dependencies = [
"askama_shared",
"proc-macro2",
"syn 1.0.109",
]
[[package]]
name = "askama_escape"
version = "0.10.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "619743e34b5ba4e9703bba34deac3427c72507c7159f5fd030aea8cac0cfe341"
[[package]]
name = "askama_shared"
version = "0.11.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7d6083ccb191711e9c2b80b22ee24a8381a18524444914c746d4239e21d1afaf"
dependencies = [
"askama_escape",
"humansize",
"nom 6.1.2",
"num-traits",
"percent-encoding",
"proc-macro2",
"quote",
"serde",
"syn 1.0.109",
"toml 0.5.11",
]
[[package]]
name = "async-channel"
version = "2.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "89b47800b0be77592da0afd425cc03468052844aff33b84e33cc696f64e77b6a"
dependencies = [
"concurrent-queue",
"event-listener-strategy",
"futures-core",
"pin-project-lite",
]
[[package]]
name = "async-trait"
-version = "0.1.83"
+version = "0.1.86"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "721cae7de5c34fbb2acd27e21e6d2cf7b886dce0c27388d46c4e6c47ea4318dd"
+checksum = "644dd749086bf3771a2fbc5f256fdb982d53f011c7d5d560304eafeecebce79d"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.90",
]
[[package]]
name = "async-tungstenite"
version = "0.28.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "90e661b6cb0a6eb34d02c520b052daa3aa9ac0cc02495c9d066bbce13ead132b"
dependencies = [
"futures-io",
"futures-util",
"log",
"pin-project-lite",
"tokio",
"tungstenite",
]
[[package]]
name = "atomic-polyfill"
version = "1.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8cf2bce30dfe09ef0bfaef228b9d414faaf7e563035494d7fe092dba54b300f4"
dependencies = [
"critical-section",
]
[[package]]
name = "autocfg"
version = "1.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26"
[[package]]
name = "aws-lc-rs"
version = "1.11.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f47bb8cc16b669d267eeccf585aea077d0882f4777b1c1f740217885d6e6e5a3"
dependencies = [
"aws-lc-sys",
"paste",
"zeroize",
]
[[package]]
name = "aws-lc-sys"
version = "0.23.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a2101df3813227bbaaaa0b04cd61c534c7954b22bd68d399b440be937dc63ff7"
dependencies = [
"bindgen 0.69.5",
"cc",
"cmake",
"dunce",
"fs_extra",
"libc",
"paste",
]
[[package]]
name = "axum"
version = "0.5.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "acee9fd5073ab6b045a275b3e709c163dd36c90685219cb21804a147b58dba43"
dependencies = [
"async-trait",
"axum-core 0.2.9",
"bitflags 1.3.2",
"bytes",
"futures-util",
"http 0.2.12",
"http-body 0.4.6",
"hyper 0.14.31",
"itoa",
"matchit 0.5.0",
"memchr",
"mime",
"percent-encoding",
"pin-project-lite",
"serde",
"serde_json",
"serde_urlencoded",
"sync_wrapper 0.1.2",
"tokio",
"tower 0.4.13",
"tower-http 0.3.5",
"tower-layer",
"tower-service",
]
[[package]]
name = "axum"
version = "0.7.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "edca88bc138befd0323b20752846e6587272d3b03b0343c8ea28a6f819e6e71f"
dependencies = [
"async-trait",
"axum-core 0.4.5",
"base64 0.22.1",
"bytes",
"futures-util",
"http 1.2.0",
"http-body 1.0.1",
"http-body-util",
"hyper 1.5.1",
"hyper-util",
"itoa",
"matchit 0.7.3",
"memchr",
"mime",
"percent-encoding",
"pin-project-lite",
"rustversion",
"serde",
"serde_json",
"serde_path_to_error",
"serde_urlencoded",
"sha1",
"sync_wrapper 1.0.2",
"tokio",
"tokio-tungstenite",
"tower 0.5.1",
"tower-layer",
"tower-service",
"tracing",
]
[[package]]
name = "axum-core"
version = "0.2.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "37e5939e02c56fecd5c017c37df4238c0a839fa76b7f97acdd7efb804fd181cc"
dependencies = [
"async-trait",
"bytes",
"futures-util",
"http 0.2.12",
"http-body 0.4.6",
"mime",
"tower-layer",
"tower-service",
]
[[package]]
name = "axum-core"
version = "0.4.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "09f2bd6146b97ae3359fa0cc6d6b376d9539582c7b4220f041a33ec24c226199"
dependencies = [
"async-trait",
"bytes",
"futures-util",
"http 1.2.0",
"http-body 1.0.1",
"http-body-util",
"mime",
"pin-project-lite",
"rustversion",
"sync_wrapper 1.0.2",
"tower-layer",
"tower-service",
"tracing",
]
[[package]]
name = "backtrace"
version = "0.3.71"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "26b05800d2e817c8b3b4b54abd461726265fa9789ae34330622f2db9ee696f9d"
dependencies = [
"addr2line",
"cc",
"cfg-if",
"libc",
"miniz_oxide 0.7.4",
"object",
"rustc-demangle",
]
[[package]]
name = "base64"
version = "0.13.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8"
[[package]]
name = "base64"
version = "0.21.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567"
[[package]]
name = "base64"
version = "0.22.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6"
[[package]]
name = "bech32"
version = "0.7.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2dabbe35f96fb9507f7330793dc490461b2962659ac5d427181e451a623751d1"
[[package]]
name = "bimap"
version = "0.6.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "230c5f1ca6a325a32553f8640d31ac9b49f2411e901e427570154868b46da4f7"
[[package]]
name = "bincode"
version = "1.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad"
dependencies = [
"serde",
]
[[package]]
name = "bincode"
version = "2.0.0-rc.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f11ea1a0346b94ef188834a65c068a03aec181c94896d481d7a0a40d85b0ce95"
dependencies = [
"bincode_derive",
"serde",
]
[[package]]
name = "bincode_derive"
version = "2.0.0-rc.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7e30759b3b99a1b802a7a3aa21c85c3ded5c28e1c83170d82d70f08bbf7f3e4c"
dependencies = [
"virtue",
]
[[package]]
name = "bindgen"
version = "0.65.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cfdf7b466f9a4903edc73f95d6d2bcd5baf8ae620638762244d3f60143643cc5"
dependencies = [
"bitflags 1.3.2",
"cexpr",
"clang-sys",
"lazy_static",
"lazycell",
"peeking_take_while",
"prettyplease 0.2.25",
"proc-macro2",
"quote",
"regex",
"rustc-hash",
"shlex",
"syn 2.0.90",
]
[[package]]
name = "bindgen"
version = "0.69.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "271383c67ccabffb7381723dea0672a673f292304fcb45c01cc648c7a8d58088"
dependencies = [
"bitflags 2.6.0",
"cexpr",
"clang-sys",
"itertools 0.10.5",
"lazy_static",
"lazycell",
"log",
"prettyplease 0.2.25",
"proc-macro2",
"quote",
"regex",
"rustc-hash",
"shlex",
"syn 2.0.90",
"which",
]
[[package]]
name = "bitcoin"
version = "0.25.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "aefc9be9f17185f4ebccae6575d342063f775924d57df0000edb1880c0fb7095"
dependencies = [
"bech32",
"bitcoin_hashes 0.9.7",
"secp256k1",
]
[[package]]
name = "bitcoin-io"
version = "0.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0b47c4ab7a93edb0c7198c5535ed9b52b63095f4e9b45279c6736cec4b856baf"
[[package]]
name = "bitcoin_hashes"
version = "0.9.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7ce18265ec2324ad075345d5814fbeed4f41f0a660055dc78840b74d19b874b1"
[[package]]
name = "bitcoin_hashes"
version = "0.14.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bb18c03d0db0247e147a21a6faafd5a7eb851c743db062de72018b6b7e8e4d16"
dependencies = [
"bitcoin-io",
"hex-conservative",
]
[[package]]
name = "bitcoinsuite-chronik-client"
version = "0.1.0"
dependencies = [
"abc-rust-error",
+ "async-trait",
"bitcoinsuite-core 0.1.0",
"bytes",
"chronik-proto",
"hex",
"pretty_assertions",
"prost",
"prost-build",
"regex",
"reqwest",
+ "serde",
+ "serde_json",
"thiserror 1.0.69",
"tokio",
]
[[package]]
name = "bitcoinsuite-chronik-client"
version = "0.1.0"
source = "git+https://github.com/LogosFoundation/bitcoinsuite?rev=6d2d946#6d2d946f793b1fc6265a7b3f8f73420811e1dae3"
dependencies = [
"bitcoinsuite-core 0.1.0 (git+https://github.com/LogosFoundation/bitcoinsuite?rev=6d2d946)",
"bitcoinsuite-error",
"hex",
"prost",
"prost-build",
"reqwest",
"thiserror 1.0.69",
"tokio",
]
[[package]]
name = "bitcoinsuite-core"
version = "0.1.0"
dependencies = [
"abc-rust-lint",
"bytes",
"hex",
"hex-literal",
"ripemd",
"serde",
"serde_json",
"sha2",
"thiserror 2.0.4",
]
[[package]]
name = "bitcoinsuite-core"
version = "0.1.0"
source = "git+https://github.com/LogosFoundation/bitcoinsuite?rev=6d2d946#6d2d946f793b1fc6265a7b3f8f73420811e1dae3"
dependencies = [
"bs58",
"bytes",
"digest",
"hex",
"hex-literal",
"once_cell",
"regex",
"ripemd",
"secrecy",
"serde",
"sha-1",
"sha2",
"thiserror 1.0.69",
]
[[package]]
name = "bitcoinsuite-error"
version = "0.1.0"
source = "git+https://github.com/LogosFoundation/bitcoinsuite?rev=6d2d946#6d2d946f793b1fc6265a7b3f8f73420811e1dae3"
dependencies = [
"bitcoinsuite-error-derive",
"eyre",
"lazy_static",
"stable-eyre",
]
[[package]]
name = "bitcoinsuite-error-derive"
version = "0.1.0"
source = "git+https://github.com/LogosFoundation/bitcoinsuite?rev=6d2d946#6d2d946f793b1fc6265a7b3f8f73420811e1dae3"
dependencies = [
"convert_case",
"proc-macro2",
"quote",
"syn 1.0.109",
]
[[package]]
name = "bitcoinsuite-slp"
version = "0.1.0"
dependencies = [
"abc-rust-lint",
"bitcoinsuite-core 0.1.0",
"bytes",
"hex",
"itertools 0.10.5",
"pretty_assertions",
"serde",
"thiserror 2.0.4",
]
[[package]]
name = "bitflags"
version = "1.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
[[package]]
name = "bitflags"
version = "2.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de"
[[package]]
name = "bitvec"
version = "0.19.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "55f93d0ef3363c364d5976646a38f04cf67cfe1d4c8d160cdea02cab2c116b33"
dependencies = [
"funty",
"radium",
"tap",
"wyz",
]
[[package]]
name = "block-buffer"
version = "0.10.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
dependencies = [
"generic-array",
]
[[package]]
name = "bs58"
version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "771fe0050b883fcc3ea2359b1a96bcfbc090b7116eae7c3c512c7a083fdf23d3"
[[package]]
name = "bumpalo"
version = "3.16.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c"
[[package]]
name = "bytemuck"
version = "1.20.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8b37c88a63ffd85d15b406896cc343916d7cf57838a847b3a6f2ca5d39a5695a"
[[package]]
name = "byteorder"
version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
[[package]]
name = "bytes"
version = "1.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "325918d6fe32f23b19878fe4b34794ae41fc19ddbe53b10571a4874d44ffd39b"
dependencies = [
"serde",
]
[[package]]
name = "bzip2-sys"
version = "0.1.11+1.0.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "736a955f3fa7875102d57c82b8cac37ec45224a07fd32d58f9f7a186b6cd4cdc"
dependencies = [
"cc",
"libc",
"pkg-config",
]
[[package]]
name = "cc"
version = "1.2.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "27f657647bcff5394bf56c7317665bbf790a137a50eaaa5c6bfbb9e27a518f2d"
dependencies = [
"jobserver",
"libc",
"shlex",
]
[[package]]
name = "cexpr"
version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766"
dependencies = [
"nom 7.1.3",
]
[[package]]
name = "cfg-if"
version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
[[package]]
name = "chronik-bridge"
version = "0.1.0"
dependencies = [
"abc-rust-lint",
"bitcoinsuite-core 0.1.0",
"cxx",
"cxx-build",
]
[[package]]
name = "chronik-db"
version = "0.1.0"
dependencies = [
"abc-rust-error",
"abc-rust-lint",
"bimap",
"bitcoinsuite-core 0.1.0",
"bitcoinsuite-slp",
"bytes",
"chronik-plugin",
"chronik-util",
"fastrand",
"hex",
"itertools 0.10.5",
"postcard",
"pretty_assertions",
"rocksdb",
"seahash",
"serde",
"tempdir",
"thiserror 2.0.4",
"topo_sort",
]
[[package]]
name = "chronik-http"
version = "0.1.0"
dependencies = [
"abc-rust-error",
"abc-rust-lint",
"async-trait",
"axum 0.7.9",
"bitcoinsuite-core 0.1.0",
"bitcoinsuite-slp",
"bytes",
"chronik-bridge",
"chronik-db",
"chronik-indexer",
"chronik-plugin",
"chronik-proto",
"chronik-util",
"futures",
"hex",
"http 1.2.0",
"http-body-util",
"hyper 1.5.1",
"itertools 0.13.0",
"karyon_jsonrpc",
"prost",
"rustls",
"serde_json",
"thiserror 2.0.4",
"tokio",
"tower-http 0.5.2",
"tower-service",
"versions",
]
[[package]]
name = "chronik-indexer"
version = "0.1.0"
dependencies = [
"abc-rust-error",
"abc-rust-lint",
"bitcoinsuite-core 0.1.0",
"bitcoinsuite-slp",
"bytes",
"chronik-bridge",
"chronik-db",
"chronik-plugin",
"chronik-proto",
"chronik-util",
"cxx",
"hex",
"hex-literal",
"pretty_assertions",
"prost",
"prost-build",
"tempdir",
"thiserror 2.0.4",
"tokio",
]
[[package]]
name = "chronik-plugin"
version = "0.1.0"
dependencies = [
"abc-rust-error",
"abc-rust-lint",
"bitcoinsuite-core 0.1.0",
"bitcoinsuite-slp",
"chronik-plugin-common",
"chronik-plugin-impl",
]
[[package]]
name = "chronik-plugin-common"
version = "0.1.0"
dependencies = [
"abc-rust-lint",
"bimap",
"bitcoinsuite-core 0.1.0",
"bitcoinsuite-slp",
"serde",
"versions",
]
[[package]]
name = "chronik-plugin-impl"
version = "0.1.0"
dependencies = [
"abc-rust-error",
"abc-rust-lint",
"bitcoinsuite-core 0.1.0",
"bitcoinsuite-slp",
"bytes",
"chronik-plugin-common",
"chronik-util",
"convert_case",
"pretty_assertions",
"pyo3",
"serde",
"tempdir",
"thiserror 2.0.4",
"toml 0.8.19",
"versions",
]
[[package]]
name = "chronik-proto"
version = "0.1.0"
dependencies = [
"abc-rust-lint",
"prost",
"prost-build",
]
[[package]]
name = "chronik-util"
version = "0.1.0"
dependencies = [
"abc-rust-lint",
]
[[package]]
name = "chronik_lib"
version = "0.1.0"
dependencies = [
"abc-rust-error",
"abc-rust-lint",
"bitcoinsuite-core 0.1.0",
"chronik-bridge",
"chronik-db",
"chronik-http",
"chronik-indexer",
"chronik-plugin",
"chronik-util",
"cxx",
"cxx-build",
"thiserror 2.0.4",
"tokio",
]
[[package]]
name = "chrono"
version = "0.4.38"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401"
dependencies = [
"android-tzdata",
"iana-time-zone",
"js-sys",
"num-traits",
"wasm-bindgen",
"windows-targets 0.52.6",
]
[[package]]
name = "chrono-humanize"
version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8164ae3089baf04ff71f32aeb70213283dcd236dce8bc976d00b17a458f5f71c"
dependencies = [
"chrono",
]
[[package]]
name = "clang-sys"
version = "1.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4"
dependencies = [
"glob",
"libc",
"libloading",
]
[[package]]
name = "clap"
version = "4.5.23"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3135e7ec2ef7b10c6ed8950f0f792ed96ee093fa088608f1c76e569722700c84"
dependencies = [
"clap_builder",
]
[[package]]
name = "clap_builder"
version = "4.5.23"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "30582fc632330df2bd26877bde0c1f4470d57c582bbc070376afcd04d8cb4838"
dependencies = [
"anstyle",
"clap_lex",
"strsim",
]
[[package]]
name = "clap_lex"
version = "0.7.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6"
[[package]]
name = "cmake"
version = "0.1.52"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c682c223677e0e5b6b7f63a64b9351844c3f1b1678a68b7ee617e30fb082620e"
dependencies = [
"cc",
]
[[package]]
name = "cobs"
version = "0.2.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "67ba02a97a2bd10f4b59b25c7973101c79642302776489e030cd13cdab09ed15"
[[package]]
name = "codespan-reporting"
version = "0.11.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e"
dependencies = [
"termcolor",
"unicode-width",
]
[[package]]
name = "color_quant"
version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b"
[[package]]
name = "concurrent-queue"
version = "2.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973"
dependencies = [
"crossbeam-utils",
]
[[package]]
name = "console_error_panic_hook"
version = "0.1.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a06aeb73f470f66dcdbf7223caeebb85984942f22f1adb2a088cf9668146bbbc"
dependencies = [
"cfg-if",
"wasm-bindgen",
]
[[package]]
name = "convert_case"
version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ec182b0ca2f35d8fc196cf3404988fd8b8c739a4d270ff118a398feb0cbec1ca"
dependencies = [
"unicode-segmentation",
]
[[package]]
name = "core-foundation"
version = "0.9.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f"
dependencies = [
"core-foundation-sys",
"libc",
]
[[package]]
name = "core-foundation-sys"
version = "0.8.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b"
[[package]]
name = "cpufeatures"
version = "0.2.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "16b80225097f2e5ae4e7179dd2266824648f3e2f49d9134d584b76389d31c4c3"
dependencies = [
"libc",
]
[[package]]
name = "crc32fast"
version = "1.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3"
dependencies = [
"cfg-if",
]
[[package]]
name = "critical-section"
version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "790eea4361631c5e7d22598ecd5723ff611904e3344ce8720784c93e3d83d40b"
[[package]]
name = "crossbeam-utils"
version = "0.8.20"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80"
[[package]]
name = "crypto-common"
version = "0.1.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
dependencies = [
"generic-array",
"typenum",
]
[[package]]
name = "cxx"
version = "1.0.133"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "05e1ec88093d2abd9cf1b09ffd979136b8e922bf31cad966a8fe0d73233112ef"
dependencies = [
"cc",
"cxxbridge-cmd",
"cxxbridge-flags",
"cxxbridge-macro",
"foldhash",
"link-cplusplus",
]
[[package]]
name = "cxx-build"
version = "1.0.133"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9afa390d956ee7ccb41aeed7ed7856ab3ffb4fc587e7216be7e0f83e949b4e6c"
dependencies = [
"cc",
"codespan-reporting",
"proc-macro2",
"quote",
"scratch",
"syn 2.0.90",
]
[[package]]
name = "cxxbridge-cmd"
version = "1.0.133"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3c23bfff654d6227cbc83de8e059d2f8678ede5fc3a6c5a35d5c379983cc61e6"
dependencies = [
"clap",
"codespan-reporting",
"proc-macro2",
"quote",
"syn 2.0.90",
]
[[package]]
name = "cxxbridge-flags"
version = "1.0.133"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f7c01b36e22051bc6928a78583f1621abaaf7621561c2ada1b00f7878fbe2caa"
[[package]]
name = "cxxbridge-macro"
version = "1.0.133"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f6e14013136fac689345d17b9a6df55977251f11d333c0a571e8d963b55e1f95"
dependencies = [
"proc-macro2",
"quote",
"rustversion",
"syn 2.0.90",
]
[[package]]
name = "data-encoding"
version = "2.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e8566979429cf69b49a5c740c60791108e86440e8be149bbea4fe54d2c32d6e2"
[[package]]
name = "diff"
version = "0.1.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8"
[[package]]
name = "digest"
version = "0.10.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
dependencies = [
"block-buffer",
"crypto-common",
]
[[package]]
name = "dirs"
version = "5.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225"
dependencies = [
"dirs-sys",
]
[[package]]
name = "dirs-sys"
version = "0.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c"
dependencies = [
"libc",
"option-ext",
"redox_users",
"windows-sys 0.48.0",
]
[[package]]
name = "displaydoc"
version = "0.2.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.90",
]
[[package]]
name = "dunce"
version = "1.0.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813"
[[package]]
name = "ecash-lib-wasm"
version = "0.1.0"
dependencies = [
"abc-rust-lint",
"ecash-secp256k1",
"ripemd",
"sha2",
"thiserror 2.0.4",
"wasm-bindgen",
]
[[package]]
name = "ecash-secp256k1"
version = "0.30.0"
dependencies = [
"bincode 1.3.3",
"bitcoin_hashes 0.14.0",
"ecash-secp256k1-sys",
"getrandom",
"hex_lit",
"rand 0.8.5",
"rand_core 0.6.4",
"serde",
"serde_cbor",
"serde_test",
"wasm-bindgen-test",
]
[[package]]
name = "ecash-secp256k1-sys"
version = "0.10.0"
dependencies = [
"cc",
"libc",
]
[[package]]
name = "either"
version = "1.13.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0"
[[package]]
name = "embedded-io"
version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ef1a6892d9eef45c8fa6b9e0086428a2cca8491aca8f787c534a3d6d0bcb3ced"
[[package]]
name = "embedded-io"
version = "0.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "edd0f118536f44f5ccd48bcb8b111bdc3de888b58c74639dfb034a357d0f206d"
[[package]]
name = "encoding_rs"
version = "0.8.35"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3"
dependencies = [
"cfg-if",
]
[[package]]
name = "equivalent"
version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
[[package]]
name = "errno"
version = "0.3.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "33d852cb9b869c2a9b3df2f71a3074817f01e1844f839a144f5fcef059a4eb5d"
dependencies = [
"libc",
"windows-sys 0.59.0",
]
[[package]]
name = "event-listener"
version = "5.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6032be9bd27023a771701cc49f9f053c751055f71efb2e0ae5c15809093675ba"
dependencies = [
"concurrent-queue",
"parking",
"pin-project-lite",
]
[[package]]
name = "event-listener-strategy"
version = "0.5.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3c3e4e0dd3673c1139bf041f3008816d9cf2946bbfac2945c09e523b8d7b05b2"
dependencies = [
"event-listener",
"pin-project-lite",
]
[[package]]
name = "explorer-exe"
version = "0.1.0"
dependencies = [
"axum 0.5.17",
"bitcoinsuite-chronik-client 0.1.0 (git+https://github.com/LogosFoundation/bitcoinsuite?rev=6d2d946)",
"bitcoinsuite-error",
"explorer-server",
"futures",
"tokio",
]
[[package]]
name = "explorer-server"
version = "0.1.0"
dependencies = [
"askama",
"axum 0.5.17",
"base64 0.13.1",
"bitcoin",
"bitcoinsuite-chronik-client 0.1.0 (git+https://github.com/LogosFoundation/bitcoinsuite?rev=6d2d946)",
"bitcoinsuite-core 0.1.0 (git+https://github.com/LogosFoundation/bitcoinsuite?rev=6d2d946)",
"bitcoinsuite-error",
"chrono",
"chrono-humanize",
"eyre",
"futures",
"hex",
"humansize",
"maud",
"num-format",
"qrcode-generator",
"regex",
"serde",
"serde_json",
"thiserror 2.0.4",
"tokio",
"toml 0.5.11",
"tower-http 0.3.5",
]
[[package]]
name = "eyre"
version = "0.6.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7cd915d99f24784cdc19fd37ef22b97e3ff0ae756c7e492e9fbfe897d61e2aec"
dependencies = [
"indenter",
"once_cell",
]
[[package]]
name = "fastrand"
version = "2.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "486f806e73c5707928240ddc295403b1b93c96a02038563881c4a2fd84b81ac4"
[[package]]
name = "fdeflate"
version = "0.3.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1e6853b52649d4ac5c0bd02320cddc5ba956bdb407c4b75a2c6b75bf51500f8c"
dependencies = [
"simd-adler32",
]
[[package]]
name = "fixedbitset"
version = "0.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80"
[[package]]
name = "flate2"
version = "1.0.35"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c936bfdafb507ebbf50b8074c54fa31c5be9a1e7e5f467dd659697041407d07c"
dependencies = [
"crc32fast",
"miniz_oxide 0.8.0",
]
[[package]]
name = "fnv"
version = "1.0.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
[[package]]
name = "foldhash"
version = "0.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f81ec6369c545a7d40e4589b5597581fa1c441fe1cce96dd1de43159910a36a2"
[[package]]
name = "foreign-types"
version = "0.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
dependencies = [
"foreign-types-shared",
]
[[package]]
name = "foreign-types-shared"
version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
[[package]]
name = "form_urlencoded"
version = "1.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456"
dependencies = [
"percent-encoding",
]
[[package]]
name = "fs_extra"
version = "1.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c"
[[package]]
name = "fuchsia-cprng"
version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba"
[[package]]
name = "funty"
version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fed34cd105917e91daa4da6b3728c47b068749d6a62c59811f06ed2ac71d9da7"
[[package]]
name = "futures"
version = "0.3.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876"
dependencies = [
"futures-channel",
"futures-core",
"futures-executor",
"futures-io",
"futures-sink",
"futures-task",
"futures-util",
]
[[package]]
name = "futures-channel"
version = "0.3.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10"
dependencies = [
"futures-core",
"futures-sink",
]
[[package]]
name = "futures-core"
version = "0.3.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e"
[[package]]
name = "futures-executor"
version = "0.3.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f"
dependencies = [
"futures-core",
"futures-task",
"futures-util",
]
[[package]]
name = "futures-io"
version = "0.3.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6"
[[package]]
name = "futures-macro"
version = "0.3.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.90",
]
[[package]]
name = "futures-sink"
version = "0.3.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7"
[[package]]
name = "futures-task"
version = "0.3.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988"
[[package]]
name = "futures-util"
version = "0.3.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81"
dependencies = [
"futures-channel",
"futures-core",
"futures-io",
"futures-macro",
"futures-sink",
"futures-task",
"memchr",
"pin-project-lite",
"pin-utils",
"slab",
]
[[package]]
name = "generic-array"
version = "0.14.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
dependencies = [
"typenum",
"version_check",
]
[[package]]
name = "getrandom"
version = "0.2.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7"
dependencies = [
"cfg-if",
"js-sys",
"libc",
"wasi",
"wasm-bindgen",
]
[[package]]
name = "gimli"
version = "0.28.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253"
[[package]]
name = "glob"
version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
[[package]]
name = "h2"
version = "0.3.26"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8"
dependencies = [
"bytes",
"fnv",
"futures-core",
"futures-sink",
"futures-util",
"http 0.2.12",
"indexmap",
"slab",
"tokio",
"tokio-util",
"tracing",
]
[[package]]
name = "half"
version = "1.8.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1b43ede17f21864e81be2fa654110bf1e793774238d86ef8555c37e6519c0403"
[[package]]
name = "hash32"
version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b0c35f58762feb77d74ebe43bdbc3210f09be9fe6742234d573bacc26ed92b67"
dependencies = [
"byteorder",
]
[[package]]
name = "hashbrown"
version = "0.15.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289"
[[package]]
name = "heapless"
version = "0.7.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cdc6457c0eb62c71aac4bc17216026d8410337c4126773b9c5daba343f17964f"
dependencies = [
"atomic-polyfill",
"hash32",
"rustc_version",
"serde",
"spin",
"stable_deref_trait",
]
[[package]]
name = "heck"
version = "0.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
[[package]]
name = "heck"
version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
[[package]]
name = "hex"
version = "0.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
[[package]]
name = "hex-conservative"
version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5313b072ce3c597065a808dbf612c4c8e8590bdbf8b579508bf7a762c5eae6cd"
dependencies = [
"arrayvec 0.7.6",
]
[[package]]
name = "hex-literal"
version = "0.3.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7ebdb29d2ea9ed0083cd8cece49bbd968021bd99b0849edb4a9a7ee0fdf6a4e0"
[[package]]
name = "hex_lit"
version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3011d1213f159867b13cfd6ac92d2cd5f1345762c63be3554e84092d85a50bbd"
[[package]]
name = "home"
version = "0.5.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5"
dependencies = [
"windows-sys 0.52.0",
]
[[package]]
name = "html-escape"
version = "0.2.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6d1ad449764d627e22bfd7cd5e8868264fc9236e07c752972b4080cd351cb476"
dependencies = [
"utf8-width",
]
[[package]]
name = "http"
version = "0.2.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1"
dependencies = [
"bytes",
"fnv",
"itoa",
]
[[package]]
name = "http"
version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f16ca2af56261c99fba8bac40a10251ce8188205a4c448fbb745a2e4daa76fea"
dependencies = [
"bytes",
"fnv",
"itoa",
]
[[package]]
name = "http-body"
version = "0.4.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2"
dependencies = [
"bytes",
"http 0.2.12",
"pin-project-lite",
]
[[package]]
name = "http-body"
version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184"
dependencies = [
"bytes",
"http 1.2.0",
]
[[package]]
name = "http-body-util"
version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f"
dependencies = [
"bytes",
"futures-util",
"http 1.2.0",
"http-body 1.0.1",
"pin-project-lite",
]
[[package]]
name = "http-range-header"
version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "add0ab9360ddbd88cfeb3bd9574a1d85cfdfa14db10b3e21d3700dbc4328758f"
[[package]]
name = "httparse"
version = "1.9.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7d71d3574edd2771538b901e6549113b4006ece66150fb69c0fb6d9a2adae946"
[[package]]
name = "httpdate"
version = "1.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9"
[[package]]
name = "humansize"
version = "1.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "02296996cb8796d7c6e3bc2d9211b7802812d36999a51bb754123ead7d37d026"
[[package]]
name = "hyper"
version = "0.14.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8c08302e8fa335b151b788c775ff56e7a03ae64ff85c548ee820fecb70356e85"
dependencies = [
"bytes",
"futures-channel",
"futures-core",
"futures-util",
"h2",
"http 0.2.12",
"http-body 0.4.6",
"httparse",
"httpdate",
"itoa",
"pin-project-lite",
"socket2",
"tokio",
"tower-service",
"tracing",
"want",
]
[[package]]
name = "hyper"
version = "1.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "97818827ef4f364230e16705d4706e2897df2bb60617d6ca15d598025a3c481f"
dependencies = [
"bytes",
"futures-channel",
"futures-util",
"http 1.2.0",
"http-body 1.0.1",
"httparse",
"httpdate",
"itoa",
"pin-project-lite",
"smallvec",
"tokio",
]
[[package]]
name = "hyper-tls"
version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905"
dependencies = [
"bytes",
"hyper 0.14.31",
"native-tls",
"tokio",
"tokio-native-tls",
]
[[package]]
name = "hyper-util"
version = "0.1.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "df2dcfbe0677734ab2f3ffa7fa7bfd4706bfdc1ef393f2ee30184aed67e631b4"
dependencies = [
"bytes",
"futures-util",
"http 1.2.0",
"http-body 1.0.1",
"hyper 1.5.1",
"pin-project-lite",
"tokio",
"tower-service",
]
[[package]]
name = "iana-time-zone"
version = "0.1.61"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220"
dependencies = [
"android_system_properties",
"core-foundation-sys",
"iana-time-zone-haiku",
"js-sys",
"wasm-bindgen",
"windows-core",
]
[[package]]
name = "iana-time-zone-haiku"
version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f"
dependencies = [
"cc",
]
[[package]]
name = "icu_collections"
version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526"
dependencies = [
"displaydoc",
"yoke",
"zerofrom",
"zerovec",
]
[[package]]
name = "icu_locid"
version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637"
dependencies = [
"displaydoc",
"litemap",
"tinystr",
"writeable",
"zerovec",
]
[[package]]
name = "icu_locid_transform"
version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e"
dependencies = [
"displaydoc",
"icu_locid",
"icu_locid_transform_data",
"icu_provider",
"tinystr",
"zerovec",
]
[[package]]
name = "icu_locid_transform_data"
version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fdc8ff3388f852bede6b579ad4e978ab004f139284d7b28715f773507b946f6e"
[[package]]
name = "icu_normalizer"
version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f"
dependencies = [
"displaydoc",
"icu_collections",
"icu_normalizer_data",
"icu_properties",
"icu_provider",
"smallvec",
"utf16_iter",
"utf8_iter",
"write16",
"zerovec",
]
[[package]]
name = "icu_normalizer_data"
version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516"
[[package]]
name = "icu_properties"
version = "1.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5"
dependencies = [
"displaydoc",
"icu_collections",
"icu_locid_transform",
"icu_properties_data",
"icu_provider",
"tinystr",
"zerovec",
]
[[package]]
name = "icu_properties_data"
version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569"
[[package]]
name = "icu_provider"
version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9"
dependencies = [
"displaydoc",
"icu_locid",
"icu_provider_macros",
"stable_deref_trait",
"tinystr",
"writeable",
"yoke",
"zerofrom",
"zerovec",
]
[[package]]
name = "icu_provider_macros"
version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.90",
]
[[package]]
name = "idna"
version = "1.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e"
dependencies = [
"idna_adapter",
"smallvec",
"utf8_iter",
]
[[package]]
name = "idna_adapter"
version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71"
dependencies = [
"icu_normalizer",
"icu_properties",
]
[[package]]
name = "image"
version = "0.24.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5690139d2f55868e080017335e4b94cb7414274c74f1669c84fb5feba2c9f69d"
dependencies = [
"bytemuck",
"byteorder",
"color_quant",
"num-traits",
"png",
]
[[package]]
name = "indenter"
version = "0.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683"
[[package]]
name = "indexmap"
version = "2.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "62f822373a4fe84d4bb149bf54e584a7f4abec90e072ed49cda0edea5b95471f"
dependencies = [
"equivalent",
"hashbrown",
]
[[package]]
name = "indoc"
version = "2.0.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b248f5224d1d606005e02c97f5aa4e88eeb230488bcc03bc9ca4d7991399f2b5"
[[package]]
name = "ipnet"
version = "2.10.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ddc24109865250148c2e0f3d25d4f0f479571723792d3802153c60922a4fb708"
[[package]]
name = "itertools"
version = "0.10.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473"
dependencies = [
"either",
]
[[package]]
name = "itertools"
version = "0.13.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186"
dependencies = [
"either",
]
[[package]]
name = "itoa"
version = "1.0.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674"
[[package]]
name = "jobserver"
version = "0.1.32"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0"
dependencies = [
"libc",
]
[[package]]
name = "js-sys"
version = "0.3.69"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d"
dependencies = [
"wasm-bindgen",
]
[[package]]
name = "karyon_async_rustls"
version = "0.2.1"
source = "git+https://github.com/karyontech/karyon.git?rev=c019ca3273a89afb34e2aa429386851f45cfa5d1#c019ca3273a89afb34e2aa429386851f45cfa5d1"
dependencies = [
"tokio-rustls",
]
[[package]]
name = "karyon_core"
version = "0.2.1"
source = "git+https://github.com/karyontech/karyon.git?rev=c019ca3273a89afb34e2aa429386851f45cfa5d1#c019ca3273a89afb34e2aa429386851f45cfa5d1"
dependencies = [
"async-channel",
"bincode 2.0.0-rc.3",
"chrono",
"dirs",
"futures-util",
"log",
"once_cell",
"parking_lot",
"pin-project-lite",
"rand 0.8.5",
"thiserror 1.0.69",
"tokio",
]
[[package]]
name = "karyon_jsonrpc"
version = "0.2.1"
source = "git+https://github.com/karyontech/karyon.git?rev=c019ca3273a89afb34e2aa429386851f45cfa5d1#c019ca3273a89afb34e2aa429386851f45cfa5d1"
dependencies = [
"async-channel",
"async-trait",
"async-tungstenite",
"karyon_core",
"karyon_jsonrpc_macro",
"karyon_net",
"log",
"rand 0.8.5",
"serde",
"serde_json",
"thiserror 1.0.69",
]
[[package]]
name = "karyon_jsonrpc_macro"
version = "0.2.1"
source = "git+https://github.com/karyontech/karyon.git?rev=c019ca3273a89afb34e2aa429386851f45cfa5d1#c019ca3273a89afb34e2aa429386851f45cfa5d1"
dependencies = [
"proc-macro2",
"quote",
"serde_json",
"syn 2.0.90",
]
[[package]]
name = "karyon_net"
version = "0.2.1"
source = "git+https://github.com/karyontech/karyon.git?rev=c019ca3273a89afb34e2aa429386851f45cfa5d1#c019ca3273a89afb34e2aa429386851f45cfa5d1"
dependencies = [
"async-trait",
"async-tungstenite",
"bincode 2.0.0-rc.3",
"futures-util",
"karyon_async_rustls",
"karyon_core",
"log",
"pin-project-lite",
"rustls-pki-types",
"thiserror 1.0.69",
"tokio",
"url",
]
[[package]]
name = "lazy_static"
version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe"
[[package]]
name = "lazycell"
version = "1.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55"
[[package]]
name = "lexical-core"
version = "0.7.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6607c62aa161d23d17a9072cc5da0be67cdfc89d3afb1e8d9c842bebc2525ffe"
dependencies = [
"arrayvec 0.5.2",
"bitflags 1.3.2",
"cfg-if",
"ryu",
"static_assertions",
]
[[package]]
name = "libc"
version = "0.2.167"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "09d6582e104315a817dff97f75133544b2e094ee22447d2acf4a74e189ba06fc"
[[package]]
name = "libloading"
version = "0.8.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fc2f4eb4bc735547cfed7c0a4922cbd04a4655978c09b54f1f7b228750664c34"
dependencies = [
"cfg-if",
"windows-targets 0.52.6",
]
[[package]]
name = "libredox"
version = "0.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d"
dependencies = [
"bitflags 2.6.0",
"libc",
]
[[package]]
name = "librocksdb-sys"
version = "0.11.0+8.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d3386f101bcb4bd252d8e9d2fb41ec3b0862a15a62b478c355b2982efa469e3e"
dependencies = [
"bindgen 0.65.1",
"bzip2-sys",
"cc",
"glob",
"libc",
"libz-sys",
]
[[package]]
name = "libz-sys"
version = "1.1.20"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d2d16453e800a8cf6dd2fc3eb4bc99b786a9b90c663b8559a5b1a041bf89e472"
dependencies = [
"cc",
"pkg-config",
"vcpkg",
]
[[package]]
name = "link-cplusplus"
version = "1.0.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9d240c6f7e1ba3a28b0249f774e6a9dd0175054b52dfbb61b16eb8505c3785c9"
dependencies = [
"cc",
]
[[package]]
name = "linux-raw-sys"
version = "0.4.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89"
[[package]]
name = "litemap"
version = "0.7.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4ee93343901ab17bd981295f2cf0026d4ad018c7c31ba84549a4ddbb47a45104"
[[package]]
name = "lock_api"
version = "0.4.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17"
dependencies = [
"autocfg",
"scopeguard",
]
[[package]]
name = "log"
version = "0.4.22"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24"
[[package]]
name = "matchit"
version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "73cbba799671b762df5a175adf59ce145165747bb891505c43d09aefbbf38beb"
[[package]]
name = "matchit"
version = "0.7.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94"
[[package]]
name = "maud"
version = "0.22.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "59d449907de7d1ae5b290cbaf9ea34a8a7df3fa5db027664bb55bb2b0fc1407c"
dependencies = [
"maud_htmlescape",
"maud_macros",
]
[[package]]
name = "maud_htmlescape"
version = "0.17.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0555daa37f94b5ebb206faf8cdc7b260c2aa371b509e929de9a1e37416d97fa6"
[[package]]
name = "maud_macros"
version = "0.22.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e6896f8e8cdcea80b99ac0f1f7a233708e640737a8517448f50500e401bb8d76"
dependencies = [
"maud_htmlescape",
"proc-macro-error",
"proc-macro2",
"quote",
"syn 1.0.109",
]
[[package]]
name = "memchr"
version = "2.7.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3"
[[package]]
name = "memoffset"
version = "0.9.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a"
dependencies = [
"autocfg",
]
[[package]]
name = "mime"
version = "0.3.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
[[package]]
name = "mime_guess"
version = "2.0.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e"
dependencies = [
"mime",
"unicase",
]
[[package]]
name = "minimal-lexical"
version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
[[package]]
name = "miniz_oxide"
version = "0.7.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b8a240ddb74feaf34a79a7add65a741f3167852fba007066dcac1ca548d89c08"
dependencies = [
"adler",
]
[[package]]
name = "miniz_oxide"
version = "0.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e2d80299ef12ff69b16a84bb182e3b9df68b5a91574d3d4fa6e41b65deec4df1"
dependencies = [
"adler2",
"simd-adler32",
]
[[package]]
name = "mio"
version = "1.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd"
dependencies = [
"libc",
"wasi",
"windows-sys 0.52.0",
]
[[package]]
name = "multimap"
version = "0.8.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a"
[[package]]
name = "native-tls"
version = "0.2.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a8614eb2c83d59d1c8cc974dd3f920198647674a0a035e1af1fa58707e317466"
dependencies = [
"libc",
"log",
"openssl",
"openssl-probe",
"openssl-sys",
"schannel",
"security-framework",
"security-framework-sys",
"tempfile",
]
[[package]]
name = "nom"
version = "6.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e7413f999671bd4745a7b624bd370a569fb6bc574b23c83a3c5ed2e453f3d5e2"
dependencies = [
"bitvec",
"funty",
"lexical-core",
"memchr",
"version_check",
]
[[package]]
name = "nom"
version = "7.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a"
dependencies = [
"memchr",
"minimal-lexical",
]
[[package]]
name = "num-format"
version = "0.4.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a652d9771a63711fd3c3deb670acfbe5c30a4072e664d7a3bf5a9e1056ac72c3"
dependencies = [
"arrayvec 0.7.6",
"itoa",
]
[[package]]
name = "num-traits"
version = "0.2.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841"
dependencies = [
"autocfg",
]
[[package]]
name = "object"
version = "0.32.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441"
dependencies = [
"memchr",
]
[[package]]
name = "once_cell"
version = "1.20.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775"
[[package]]
name = "openssl"
version = "0.10.68"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6174bc48f102d208783c2c84bf931bb75927a617866870de8a4ea85597f871f5"
dependencies = [
"bitflags 2.6.0",
"cfg-if",
"foreign-types",
"libc",
"once_cell",
"openssl-macros",
"openssl-sys",
]
[[package]]
name = "openssl-macros"
version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.90",
]
[[package]]
name = "openssl-probe"
version = "0.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf"
[[package]]
name = "openssl-sys"
version = "0.9.104"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "45abf306cbf99debc8195b66b7346498d7b10c210de50418b5ccd7ceba08c741"
dependencies = [
"cc",
"libc",
"pkg-config",
"vcpkg",
]
[[package]]
name = "option-ext"
version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d"
[[package]]
name = "parking"
version = "2.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba"
[[package]]
name = "parking_lot"
version = "0.12.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27"
dependencies = [
"lock_api",
"parking_lot_core",
]
[[package]]
name = "parking_lot_core"
version = "0.9.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8"
dependencies = [
"cfg-if",
"libc",
"redox_syscall",
"smallvec",
"windows-targets 0.52.6",
]
[[package]]
name = "paste"
version = "1.0.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a"
[[package]]
name = "peeking_take_while"
version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099"
[[package]]
name = "percent-encoding"
version = "2.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e"
[[package]]
name = "petgraph"
version = "0.6.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db"
dependencies = [
"fixedbitset",
"indexmap",
]
[[package]]
name = "pin-project"
version = "1.1.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "be57f64e946e500c8ee36ef6331845d40a93055567ec57e8fae13efd33759b95"
dependencies = [
"pin-project-internal",
]
[[package]]
name = "pin-project-internal"
version = "1.1.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3c0f5fad0874fc7abcd4d750e76917eaebbecaa2c20bde22e1dbeeba8beb758c"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.90",
]
[[package]]
name = "pin-project-lite"
version = "0.2.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "915a1e146535de9163f3987b8944ed8cf49a18bb0056bcebcdcece385cece4ff"
[[package]]
name = "pin-utils"
version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
[[package]]
name = "pkg-config"
version = "0.3.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2"
[[package]]
name = "png"
version = "0.17.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b67582bd5b65bdff614270e2ea89a1cf15bef71245cc1e5f7ea126977144211d"
dependencies = [
"bitflags 1.3.2",
"crc32fast",
"fdeflate",
"flate2",
"miniz_oxide 0.8.0",
]
[[package]]
name = "portable-atomic"
version = "1.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "280dc24453071f1b63954171985a0b0d30058d287960968b9b2aca264c8d4ee6"
[[package]]
name = "postcard"
version = "1.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "170a2601f67cc9dba8edd8c4870b15f71a6a2dc196daec8c83f72b59dff628a8"
dependencies = [
"cobs",
"embedded-io 0.4.0",
"embedded-io 0.6.1",
"heapless",
"serde",
]
[[package]]
name = "ppv-lite86"
version = "0.2.20"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04"
dependencies = [
"zerocopy",
]
[[package]]
name = "pretty_assertions"
version = "1.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3ae130e2f271fbc2ac3a40fb1d07180839cdbbe443c7a27e1e3c13c5cac0116d"
dependencies = [
"diff",
"yansi",
]
[[package]]
name = "prettyplease"
version = "0.1.25"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6c8646e95016a7a6c4adea95bafa8a16baab64b583356217f2c85db4a39d9a86"
dependencies = [
"proc-macro2",
"syn 1.0.109",
]
[[package]]
name = "prettyplease"
version = "0.2.25"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "64d1ec885c64d0457d564db4ec299b2dae3f9c02808b8ad9c3a089c591b18033"
dependencies = [
"proc-macro2",
"syn 2.0.90",
]
[[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 1.0.109",
"version_check",
]
[[package]]
name = "proc-macro-error-attr"
version = "1.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
dependencies = [
"proc-macro2",
"quote",
"version_check",
]
[[package]]
name = "proc-macro2"
version = "1.0.92"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "37d3544b3f2748c54e147655edb5025752e2303145b5aefb3c3ea2c78b973bb0"
dependencies = [
"unicode-ident",
]
[[package]]
name = "prost"
version = "0.11.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0b82eaa1d779e9a4bc1c3217db8ffbeabaae1dca241bf70183242128d48681cd"
dependencies = [
"bytes",
"prost-derive",
]
[[package]]
name = "prost-build"
version = "0.11.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "119533552c9a7ffacc21e099c24a0ac8bb19c2a2a3f363de84cd9b844feab270"
dependencies = [
"bytes",
"heck 0.4.1",
"itertools 0.10.5",
"lazy_static",
"log",
"multimap",
"petgraph",
"prettyplease 0.1.25",
"prost",
"prost-types",
"regex",
"syn 1.0.109",
"tempfile",
"which",
]
[[package]]
name = "prost-derive"
version = "0.11.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e5d2d8d10f3c6ded6da8b05b5fb3b8a5082514344d56c9f871412d29b4e075b4"
dependencies = [
"anyhow",
"itertools 0.10.5",
"proc-macro2",
"quote",
"syn 1.0.109",
]
[[package]]
name = "prost-types"
version = "0.11.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "213622a1460818959ac1181aaeb2dc9c7f63df720db7d788b3e24eacd1983e13"
dependencies = [
"prost",
]
[[package]]
name = "pyo3"
version = "0.23.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e484fd2c8b4cb67ab05a318f1fd6fa8f199fcc30819f08f07d200809dba26c15"
dependencies = [
"cfg-if",
"indoc",
"libc",
"memoffset",
"once_cell",
"portable-atomic",
"pyo3-build-config",
"pyo3-ffi",
"pyo3-macros",
"unindent",
]
[[package]]
name = "pyo3-build-config"
version = "0.23.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dc0e0469a84f208e20044b98965e1561028180219e35352a2afaf2b942beff3b"
dependencies = [
"once_cell",
"target-lexicon",
]
[[package]]
name = "pyo3-ffi"
version = "0.23.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "eb1547a7f9966f6f1a0f0227564a9945fe36b90da5a93b3933fc3dc03fae372d"
dependencies = [
"libc",
"pyo3-build-config",
]
[[package]]
name = "pyo3-macros"
version = "0.23.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fdb6da8ec6fa5cedd1626c886fc8749bdcbb09424a86461eb8cdf096b7c33257"
dependencies = [
"proc-macro2",
"pyo3-macros-backend",
"quote",
"syn 2.0.90",
]
[[package]]
name = "pyo3-macros-backend"
version = "0.23.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "38a385202ff5a92791168b1136afae5059d3ac118457bb7bc304c197c2d33e7d"
dependencies = [
"heck 0.5.0",
"proc-macro2",
"pyo3-build-config",
"quote",
"syn 2.0.90",
]
[[package]]
name = "qrcode-generator"
version = "4.1.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1d06cb9646c7a14096231a2474d7f21e5e8c13de090c68d13bde6157cfe7f159"
dependencies = [
"html-escape",
"image",
"qrcodegen",
]
[[package]]
name = "qrcodegen"
version = "1.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4339fc7a1021c9c1621d87f5e3505f2805c8c105420ba2f2a4df86814590c142"
[[package]]
name = "quote"
version = "1.0.37"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af"
dependencies = [
"proc-macro2",
]
[[package]]
name = "radium"
version = "0.5.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "941ba9d78d8e2f7ce474c015eea4d9c6d25b6a3327f9832ee29a4de27f91bbb8"
[[package]]
name = "rand"
version = "0.4.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "552840b97013b1a26992c11eac34bdd778e464601a4c2054b5f0bff7c6761293"
dependencies = [
"fuchsia-cprng",
"libc",
"rand_core 0.3.1",
"rdrand",
"winapi",
]
[[package]]
name = "rand"
version = "0.8.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
dependencies = [
"libc",
"rand_chacha",
"rand_core 0.6.4",
]
[[package]]
name = "rand_chacha"
version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
dependencies = [
"ppv-lite86",
"rand_core 0.6.4",
]
[[package]]
name = "rand_core"
version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b"
dependencies = [
"rand_core 0.4.2",
]
[[package]]
name = "rand_core"
version = "0.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc"
[[package]]
name = "rand_core"
version = "0.6.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
dependencies = [
"getrandom",
]
[[package]]
name = "rdrand"
version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2"
dependencies = [
"rand_core 0.3.1",
]
[[package]]
name = "redox_syscall"
version = "0.5.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9b6dfecf2c74bce2466cabf93f6664d6998a69eb21e39f4207930065b27b771f"
dependencies = [
"bitflags 2.6.0",
]
[[package]]
name = "redox_users"
version = "0.4.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43"
dependencies = [
"getrandom",
"libredox",
"thiserror 1.0.69",
]
[[package]]
name = "regex"
version = "1.11.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191"
dependencies = [
"aho-corasick",
"memchr",
"regex-automata",
"regex-syntax",
]
[[package]]
name = "regex-automata"
version = "0.4.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908"
dependencies = [
"aho-corasick",
"memchr",
"regex-syntax",
]
[[package]]
name = "regex-syntax"
version = "0.8.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c"
[[package]]
name = "remove_dir_all"
version = "0.5.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7"
dependencies = [
"winapi",
]
[[package]]
name = "reqwest"
version = "0.11.27"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dd67538700a17451e7cba03ac727fb961abb7607553461627b97de0b89cf4a62"
dependencies = [
"base64 0.21.7",
"bytes",
"encoding_rs",
"futures-core",
"futures-util",
"h2",
"http 0.2.12",
"http-body 0.4.6",
"hyper 0.14.31",
"hyper-tls",
"ipnet",
"js-sys",
"log",
"mime",
"native-tls",
"once_cell",
"percent-encoding",
"pin-project-lite",
"rustls-pemfile",
"serde",
"serde_json",
"serde_urlencoded",
"sync_wrapper 0.1.2",
"system-configuration",
"tokio",
"tokio-native-tls",
"tower-service",
"url",
"wasm-bindgen",
"wasm-bindgen-futures",
"web-sys",
"winreg",
]
[[package]]
name = "ring"
version = "0.17.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d"
dependencies = [
"cc",
"cfg-if",
"getrandom",
"libc",
"spin",
"untrusted",
"windows-sys 0.52.0",
]
[[package]]
name = "ripemd"
version = "0.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bd124222d17ad93a644ed9d011a40f4fb64aa54275c08cc216524a9ea82fb09f"
dependencies = [
"digest",
]
[[package]]
name = "rocksdb"
version = "0.21.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bb6f170a4041d50a0ce04b0d2e14916d6ca863ea2e422689a5b694395d299ffe"
dependencies = [
"libc",
"librocksdb-sys",
]
[[package]]
name = "rustc-demangle"
version = "0.1.24"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f"
[[package]]
name = "rustc-hash"
version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
[[package]]
name = "rustc_version"
version = "0.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92"
dependencies = [
"semver",
]
[[package]]
name = "rustix"
version = "0.38.41"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d7f649912bc1495e167a6edee79151c84b1bad49748cb4f1f1167f459f6224f6"
dependencies = [
"bitflags 2.6.0",
"errno",
"libc",
"linux-raw-sys",
"windows-sys 0.52.0",
]
[[package]]
name = "rustls"
version = "0.23.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "934b404430bb06b3fae2cba809eb45a1ab1aecd64491213d7c3301b88393f8d1"
dependencies = [
"aws-lc-rs",
"log",
"once_cell",
"rustls-pki-types",
"rustls-webpki",
"subtle",
"zeroize",
]
[[package]]
name = "rustls-pemfile"
version = "1.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c"
dependencies = [
"base64 0.21.7",
]
[[package]]
name = "rustls-pki-types"
version = "1.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "16f1201b3c9a7ee8039bcadc17b7e605e2945b27eee7631788c1bd2b0643674b"
[[package]]
name = "rustls-webpki"
version = "0.102.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9"
dependencies = [
"aws-lc-rs",
"ring",
"rustls-pki-types",
"untrusted",
]
[[package]]
name = "rustversion"
version = "1.0.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0e819f2bc632f285be6d7cd36e25940d45b2391dd6d9b939e79de557f7014248"
[[package]]
name = "ryu"
version = "1.0.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f"
[[package]]
name = "schannel"
version = "0.1.27"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d"
dependencies = [
"windows-sys 0.59.0",
]
[[package]]
name = "scoped-tls"
version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294"
[[package]]
name = "scopeguard"
version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
[[package]]
name = "scratch"
version = "1.0.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a3cf7c11c38cb994f3d40e8a8cde3bbd1f72a435e4c49e85d6553d8312306152"
[[package]]
name = "seahash"
version = "4.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1c107b6f4780854c8b126e228ea8869f4d7b71260f962fefb57b996b8959ba6b"
[[package]]
name = "secp256k1"
version = "0.19.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c6179428c22c73ac0fbb7b5579a56353ce78ba29759b3b8575183336ea74cdfb"
dependencies = [
"secp256k1-sys",
]
[[package]]
name = "secp256k1-sys"
version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "11553d210db090930f4432bea123b31f70bbf693ace14504ea2a35e796c28dd2"
dependencies = [
"cc",
]
[[package]]
name = "secrecy"
version = "0.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9bd1c54ea06cfd2f6b63219704de0b9b4f72dcc2b8fdef820be6cd799780e91e"
dependencies = [
"zeroize",
]
[[package]]
name = "security-framework"
version = "2.11.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02"
dependencies = [
"bitflags 2.6.0",
"core-foundation",
"core-foundation-sys",
"libc",
"security-framework-sys",
]
[[package]]
name = "security-framework-sys"
version = "2.12.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fa39c7303dc58b5543c94d22c1766b0d31f2ee58306363ea622b10bbc075eaa2"
dependencies = [
"core-foundation-sys",
"libc",
]
[[package]]
name = "semver"
version = "1.0.23"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b"
[[package]]
name = "serde"
-version = "1.0.215"
+version = "1.0.217"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6513c1ad0b11a9376da888e3e0baa0077f1aed55c17f50e7b2397136129fb88f"
+checksum = "02fc4265df13d6fa1d00ecff087228cc0a2b5f3c0e87e258d8b94a156e984c70"
dependencies = [
"serde_derive",
]
[[package]]
name = "serde_cbor"
version = "0.10.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f7081ed758ec726a6ed8ee7e92f5d3f6e6f8c3901b1f972e3a4a2f2599fad14f"
dependencies = [
"byteorder",
"half",
"serde",
]
[[package]]
name = "serde_derive"
-version = "1.0.215"
+version = "1.0.217"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ad1e866f866923f252f05c889987993144fb74e722403468a4ebd70c3cd756c0"
+checksum = "5a9bf7cf98d04a2b28aead066b7496853d4779c9cc183c440dbac457641e19a0"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.90",
]
[[package]]
name = "serde_json"
version = "1.0.133"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c7fceb2473b9166b2294ef05efcb65a3db80803f0b03ef86a5fc88a2b85ee377"
dependencies = [
"itoa",
"memchr",
"ryu",
"serde",
]
[[package]]
name = "serde_path_to_error"
version = "0.1.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "af99884400da37c88f5e9146b7f1fd0fbcae8f6eec4e9da38b67d05486f814a6"
dependencies = [
"itoa",
"serde",
]
[[package]]
name = "serde_spanned"
version = "0.6.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "87607cb1398ed59d48732e575a4c28a7a8ebf2454b964fe3f224f2afc07909e1"
dependencies = [
"serde",
]
[[package]]
name = "serde_test"
version = "1.0.177"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7f901ee573cab6b3060453d2d5f0bae4e6d628c23c0a962ff9b5f1d7c8d4f1ed"
dependencies = [
"serde",
]
[[package]]
name = "serde_urlencoded"
version = "0.7.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd"
dependencies = [
"form_urlencoded",
"itoa",
"ryu",
"serde",
]
[[package]]
name = "sha-1"
version = "0.10.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f5058ada175748e33390e40e872bd0fe59a19f265d0158daa551c5a88a76009c"
dependencies = [
"cfg-if",
"cpufeatures",
"digest",
]
[[package]]
name = "sha1"
version = "0.10.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba"
dependencies = [
"cfg-if",
"cpufeatures",
"digest",
]
[[package]]
name = "sha2"
version = "0.10.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8"
dependencies = [
"cfg-if",
"cpufeatures",
"digest",
]
[[package]]
name = "shlex"
version = "1.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64"
[[package]]
name = "signal-hook-registry"
version = "1.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1"
dependencies = [
"libc",
]
[[package]]
name = "simd-adler32"
version = "0.3.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe"
[[package]]
name = "slab"
version = "0.4.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67"
dependencies = [
"autocfg",
]
[[package]]
name = "smallvec"
version = "1.13.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67"
[[package]]
name = "socket2"
version = "0.5.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c970269d99b64e60ec3bd6ad27270092a5394c4e309314b18ae3fe575695fbe8"
dependencies = [
"libc",
"windows-sys 0.52.0",
]
[[package]]
name = "spin"
version = "0.9.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67"
dependencies = [
"lock_api",
]
[[package]]
name = "stable-eyre"
version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "556fec8c2da34c70b75f16d88df8a8cd7e652e567ff097b7e9df0022c8695cc4"
dependencies = [
"backtrace",
"eyre",
"indenter",
]
[[package]]
name = "stable_deref_trait"
version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3"
[[package]]
name = "static_assertions"
version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
[[package]]
name = "strsim"
version = "0.11.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f"
[[package]]
name = "subtle"
version = "2.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292"
[[package]]
name = "syn"
version = "1.0.109"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
dependencies = [
"proc-macro2",
"quote",
"unicode-ident",
]
[[package]]
name = "syn"
version = "2.0.90"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "919d3b74a5dd0ccd15aeb8f93e7006bd9e14c295087c9896a110f490752bcf31"
dependencies = [
"proc-macro2",
"quote",
"unicode-ident",
]
[[package]]
name = "sync_wrapper"
version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160"
[[package]]
name = "sync_wrapper"
version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263"
[[package]]
name = "synstructure"
version = "0.13.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.90",
]
[[package]]
name = "system-configuration"
version = "0.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7"
dependencies = [
"bitflags 1.3.2",
"core-foundation",
"system-configuration-sys",
]
[[package]]
name = "system-configuration-sys"
version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9"
dependencies = [
"core-foundation-sys",
"libc",
]
[[package]]
name = "tap"
version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369"
[[package]]
name = "target-lexicon"
version = "0.12.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1"
[[package]]
name = "tempdir"
version = "0.3.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "15f2b5fb00ccdf689e0149d1b1b3c03fead81c2b37735d812fa8bddbbf41b6d8"
dependencies = [
"rand 0.4.6",
"remove_dir_all",
]
[[package]]
name = "tempfile"
version = "3.14.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "28cce251fcbc87fac86a866eeb0d6c2d536fc16d06f184bb61aeae11aa4cee0c"
dependencies = [
"cfg-if",
"fastrand",
"once_cell",
"rustix",
"windows-sys 0.59.0",
]
[[package]]
name = "termcolor"
version = "1.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755"
dependencies = [
"winapi-util",
]
[[package]]
name = "thiserror"
version = "1.0.69"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52"
dependencies = [
"thiserror-impl 1.0.69",
]
[[package]]
name = "thiserror"
version = "2.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2f49a1853cf82743e3b7950f77e0f4d622ca36cf4317cba00c767838bac8d490"
dependencies = [
"thiserror-impl 2.0.4",
]
[[package]]
name = "thiserror-impl"
version = "1.0.69"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.90",
]
[[package]]
name = "thiserror-impl"
version = "2.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8381894bb3efe0c4acac3ded651301ceee58a15d47c2e34885ed1908ad667061"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.90",
]
[[package]]
name = "tinystr"
version = "0.7.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f"
dependencies = [
"displaydoc",
"zerovec",
]
[[package]]
name = "tokio"
version = "1.42.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5cec9b21b0450273377fc97bd4c33a8acffc8c996c987a7c5b319a0083707551"
dependencies = [
"backtrace",
"bytes",
"libc",
"mio",
"parking_lot",
"pin-project-lite",
"signal-hook-registry",
"socket2",
"tokio-macros",
"windows-sys 0.52.0",
]
[[package]]
name = "tokio-macros"
version = "2.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.90",
]
[[package]]
name = "tokio-native-tls"
version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2"
dependencies = [
"native-tls",
"tokio",
]
[[package]]
name = "tokio-rustls"
version = "0.26.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5f6d0975eaace0cf0fcadee4e4aaa5da15b5c079146f2cffb67c113be122bf37"
dependencies = [
"rustls",
"tokio",
]
[[package]]
name = "tokio-tungstenite"
version = "0.24.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "edc5f74e248dc973e0dbb7b74c7e0d6fcc301c694ff50049504004ef4d0cdcd9"
dependencies = [
"futures-util",
"log",
"tokio",
"tungstenite",
]
[[package]]
name = "tokio-util"
version = "0.7.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d7fcaa8d55a2bdd6b83ace262b016eca0d79ee02818c5c1bcdf0305114081078"
dependencies = [
"bytes",
"futures-core",
"futures-sink",
"pin-project-lite",
"tokio",
]
[[package]]
name = "toml"
version = "0.5.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234"
dependencies = [
"serde",
]
[[package]]
name = "toml"
version = "0.8.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a1ed1f98e3fdc28d6d910e6737ae6ab1a93bf1985935a1193e68f93eeb68d24e"
dependencies = [
"serde",
"serde_spanned",
"toml_datetime",
"toml_edit",
]
[[package]]
name = "toml_datetime"
version = "0.6.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41"
dependencies = [
"serde",
]
[[package]]
name = "toml_edit"
version = "0.22.22"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4ae48d6208a266e853d946088ed816055e556cc6028c5e8e2b84d9fa5dd7c7f5"
dependencies = [
"indexmap",
"serde",
"serde_spanned",
"toml_datetime",
"winnow",
]
[[package]]
name = "topo_sort"
version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "156552d3c80df430aaac98c605a4e0eb7da8d06029cce2d40b4a6b095a34b37e"
[[package]]
name = "tower"
version = "0.4.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c"
dependencies = [
"futures-core",
"futures-util",
"pin-project",
"pin-project-lite",
"tokio",
"tower-layer",
"tower-service",
"tracing",
]
[[package]]
name = "tower"
version = "0.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2873938d487c3cfb9aed7546dc9f2711d867c9f90c46b889989a2cb84eba6b4f"
dependencies = [
"futures-core",
"futures-util",
"pin-project-lite",
"sync_wrapper 0.1.2",
"tokio",
"tower-layer",
"tower-service",
"tracing",
]
[[package]]
name = "tower-http"
version = "0.3.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f873044bf02dd1e8239e9c1293ea39dad76dc594ec16185d0a1bf31d8dc8d858"
dependencies = [
"bitflags 1.3.2",
"bytes",
"futures-core",
"futures-util",
"http 0.2.12",
"http-body 0.4.6",
"http-range-header",
"httpdate",
"mime",
"mime_guess",
"percent-encoding",
"pin-project-lite",
"tokio",
"tokio-util",
"tower 0.4.13",
"tower-layer",
"tower-service",
]
[[package]]
name = "tower-http"
version = "0.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1e9cd434a998747dd2c4276bc96ee2e0c7a2eadf3cae88e52be55a05fa9053f5"
dependencies = [
"bitflags 2.6.0",
"bytes",
"http 1.2.0",
"http-body 1.0.1",
"http-body-util",
"pin-project-lite",
"tower-layer",
"tower-service",
]
[[package]]
name = "tower-layer"
version = "0.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e"
[[package]]
name = "tower-service"
version = "0.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3"
[[package]]
name = "tracing"
version = "0.1.41"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0"
dependencies = [
"log",
"pin-project-lite",
"tracing-core",
]
[[package]]
name = "tracing-core"
version = "0.1.33"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c"
dependencies = [
"once_cell",
]
[[package]]
name = "try-lock"
version = "0.2.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b"
[[package]]
name = "tungstenite"
version = "0.24.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "18e5b8366ee7a95b16d32197d0b2604b43a0be89dc5fac9f8e96ccafbaedda8a"
dependencies = [
"byteorder",
"bytes",
"data-encoding",
"http 1.2.0",
"httparse",
"log",
"rand 0.8.5",
"sha1",
"thiserror 1.0.69",
"utf-8",
]
[[package]]
name = "typenum"
version = "1.17.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825"
[[package]]
name = "unicase"
version = "2.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7e51b68083f157f853b6379db119d1c1be0e6e4dec98101079dec41f6f5cf6df"
[[package]]
name = "unicode-ident"
version = "1.0.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "adb9e6ca4f869e1180728b7950e35922a7fc6397f7b641499e8f3ef06e50dc83"
[[package]]
name = "unicode-segmentation"
version = "1.12.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493"
[[package]]
name = "unicode-width"
version = "0.1.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af"
[[package]]
name = "unindent"
version = "0.2.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c7de7d73e1754487cb58364ee906a499937a0dfabd86bcb980fa99ec8c8fa2ce"
[[package]]
name = "untrusted"
version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1"
[[package]]
name = "url"
version = "2.5.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60"
dependencies = [
"form_urlencoded",
"idna",
"percent-encoding",
]
[[package]]
name = "utf-8"
version = "0.7.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9"
[[package]]
name = "utf16_iter"
version = "1.0.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246"
[[package]]
name = "utf8-width"
version = "0.1.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "86bd8d4e895da8537e5315b8254664e6b769c4ff3db18321b297a1e7004392e3"
[[package]]
name = "utf8_iter"
version = "1.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be"
[[package]]
name = "vcpkg"
version = "0.2.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
[[package]]
name = "version_check"
version = "0.9.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a"
[[package]]
name = "versions"
version = "6.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f25d498b63d1fdb376b4250f39ab3a5ee8d103957346abacd911e2d8b612c139"
dependencies = [
"itertools 0.13.0",
"nom 7.1.3",
]
[[package]]
name = "virtue"
version = "0.0.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9dcc60c0624df774c82a0ef104151231d37da4962957d691c011c852b2473314"
[[package]]
name = "want"
version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e"
dependencies = [
"try-lock",
]
[[package]]
name = "wasi"
version = "0.11.0+wasi-snapshot-preview1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
[[package]]
name = "wasm-bindgen"
version = "0.2.92"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8"
dependencies = [
"cfg-if",
"wasm-bindgen-macro",
]
[[package]]
name = "wasm-bindgen-backend"
version = "0.2.92"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da"
dependencies = [
"bumpalo",
"log",
"once_cell",
"proc-macro2",
"quote",
"syn 2.0.90",
"wasm-bindgen-shared",
]
[[package]]
name = "wasm-bindgen-futures"
version = "0.4.42"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "76bc14366121efc8dbb487ab05bcc9d346b3b5ec0eaa76e46594cabbe51762c0"
dependencies = [
"cfg-if",
"js-sys",
"wasm-bindgen",
"web-sys",
]
[[package]]
name = "wasm-bindgen-macro"
version = "0.2.92"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726"
dependencies = [
"quote",
"wasm-bindgen-macro-support",
]
[[package]]
name = "wasm-bindgen-macro-support"
version = "0.2.92"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.90",
"wasm-bindgen-backend",
"wasm-bindgen-shared",
]
[[package]]
name = "wasm-bindgen-shared"
version = "0.2.92"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96"
[[package]]
name = "wasm-bindgen-test"
version = "0.3.42"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d9bf62a58e0780af3e852044583deee40983e5886da43a271dd772379987667b"
dependencies = [
"console_error_panic_hook",
"js-sys",
"scoped-tls",
"wasm-bindgen",
"wasm-bindgen-futures",
"wasm-bindgen-test-macro",
]
[[package]]
name = "wasm-bindgen-test-macro"
version = "0.3.42"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b7f89739351a2e03cb94beb799d47fb2cac01759b40ec441f7de39b00cbf7ef0"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.90",
]
[[package]]
name = "web-sys"
version = "0.3.69"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "77afa9a11836342370f4817622a2f0f418b134426d91a82dfb48f532d2ec13ef"
dependencies = [
"js-sys",
"wasm-bindgen",
]
[[package]]
name = "which"
version = "4.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7"
dependencies = [
"either",
"home",
"once_cell",
"rustix",
]
[[package]]
name = "winapi"
version = "0.3.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
dependencies = [
"winapi-i686-pc-windows-gnu",
"winapi-x86_64-pc-windows-gnu",
]
[[package]]
name = "winapi-i686-pc-windows-gnu"
version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
[[package]]
name = "winapi-util"
version = "0.1.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb"
dependencies = [
"windows-sys 0.59.0",
]
[[package]]
name = "winapi-x86_64-pc-windows-gnu"
version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
[[package]]
name = "windows-core"
version = "0.52.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9"
dependencies = [
"windows-targets 0.52.6",
]
[[package]]
name = "windows-sys"
version = "0.48.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
dependencies = [
"windows-targets 0.48.5",
]
[[package]]
name = "windows-sys"
version = "0.52.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
dependencies = [
"windows-targets 0.52.6",
]
[[package]]
name = "windows-sys"
version = "0.59.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b"
dependencies = [
"windows-targets 0.52.6",
]
[[package]]
name = "windows-targets"
version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
dependencies = [
"windows_aarch64_gnullvm 0.48.5",
"windows_aarch64_msvc 0.48.5",
"windows_i686_gnu 0.48.5",
"windows_i686_msvc 0.48.5",
"windows_x86_64_gnu 0.48.5",
"windows_x86_64_gnullvm 0.48.5",
"windows_x86_64_msvc 0.48.5",
]
[[package]]
name = "windows-targets"
version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973"
dependencies = [
"windows_aarch64_gnullvm 0.52.6",
"windows_aarch64_msvc 0.52.6",
"windows_i686_gnu 0.52.6",
"windows_i686_gnullvm",
"windows_i686_msvc 0.52.6",
"windows_x86_64_gnu 0.52.6",
"windows_x86_64_gnullvm 0.52.6",
"windows_x86_64_msvc 0.52.6",
]
[[package]]
name = "windows_aarch64_gnullvm"
version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
[[package]]
name = "windows_aarch64_gnullvm"
version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3"
[[package]]
name = "windows_aarch64_msvc"
version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
[[package]]
name = "windows_aarch64_msvc"
version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469"
[[package]]
name = "windows_i686_gnu"
version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
[[package]]
name = "windows_i686_gnu"
version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b"
[[package]]
name = "windows_i686_gnullvm"
version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66"
[[package]]
name = "windows_i686_msvc"
version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
[[package]]
name = "windows_i686_msvc"
version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66"
[[package]]
name = "windows_x86_64_gnu"
version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
[[package]]
name = "windows_x86_64_gnu"
version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78"
[[package]]
name = "windows_x86_64_gnullvm"
version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
[[package]]
name = "windows_x86_64_gnullvm"
version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d"
[[package]]
name = "windows_x86_64_msvc"
version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
[[package]]
name = "windows_x86_64_msvc"
version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
[[package]]
name = "winnow"
version = "0.6.20"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "36c1fec1a2bb5866f07c25f68c26e565c4c200aebb96d7e55710c19d3e8ac49b"
dependencies = [
"memchr",
]
[[package]]
name = "winreg"
version = "0.50.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1"
dependencies = [
"cfg-if",
"windows-sys 0.48.0",
]
[[package]]
name = "write16"
version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936"
[[package]]
name = "writeable"
version = "0.5.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51"
[[package]]
name = "wyz"
version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "85e60b0d1b5f99db2556934e21937020776a5d31520bf169e851ac44e6420214"
[[package]]
name = "yansi"
version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cfe53a6657fd280eaa890a3bc59152892ffa3e30101319d168b781ed6529b049"
[[package]]
name = "yoke"
version = "0.7.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40"
dependencies = [
"serde",
"stable_deref_trait",
"yoke-derive",
"zerofrom",
]
[[package]]
name = "yoke-derive"
version = "0.7.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.90",
"synstructure",
]
[[package]]
name = "zerocopy"
version = "0.7.35"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0"
dependencies = [
"byteorder",
"zerocopy-derive",
]
[[package]]
name = "zerocopy-derive"
version = "0.7.35"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.90",
]
[[package]]
name = "zerofrom"
version = "0.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cff3ee08c995dee1859d998dea82f7374f2826091dd9cd47def953cae446cd2e"
dependencies = [
"zerofrom-derive",
]
[[package]]
name = "zerofrom-derive"
version = "0.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "595eed982f7d355beb85837f651fa22e90b3c044842dc7f2c2842c086f295808"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.90",
"synstructure",
]
[[package]]
name = "zeroize"
version = "1.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde"
[[package]]
name = "zerovec"
version = "0.10.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079"
dependencies = [
"yoke",
"zerofrom",
"zerovec-derive",
]
[[package]]
name = "zerovec-derive"
version = "0.10.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.90",
]
diff --git a/contrib/teamcity/build-configurations.yml b/contrib/teamcity/build-configurations.yml
index e27cce294..c37e98308 100644
--- a/contrib/teamcity/build-configurations.yml
+++ b/contrib/teamcity/build-configurations.yml
@@ -1,1006 +1,1011 @@
---
# Templates can be referenced in builds to avoid duplication
templates:
guix_builds:
script: |
"${TOPLEVEL}/contrib/teamcity/guix.sh"
timeout: 14400
artifacts:
guix-results: ''
check+secp256k1:
targets:
- - all
- install
- install-secp256k1
- - check
- check-secp256k1
- check-functional
diff-node:
runOnDiffRegex:
- cmake/
- src/
- test/
- CMakeLists.txt
secp256k1:
runOnDiffRegex:
- src/secp256k1/
Werror: true
targets:
- - secp256k1
- install-secp256k1
- - check-secp256k1
ibd:
targets:
- - bitcoind
post_build: |
"${TOPLEVEL}/contrib/teamcity/ibd.sh" -disablewallet -debug=net
timeout: 28800
artifacts:
ibd/debug.log: log/debug.log
ibd-no-assumevalid-checkpoint:
targets:
- - bitcoind
post_build: |
"${TOPLEVEL}/contrib/teamcity/ibd.sh" -disablewallet -assumevalid=0 -checkpoints=0 -debug=net
timeout: 28800
artifacts:
ibd/debug.log: log/debug.log
# This template expects the following environment variables to be set:
# - JS_PROJECT_ROOT: the root directory for the js project being tested,
# relative to the repository top level (no trailing /).
# - DEPENDS_MOCK_CHRONIK_CLIENT: "true" if these tests require
# the mock-chronik-client library, otherwise unset
# - DEPENDS_B58_TS: "true" if these tests require b58-ts to be built, otherwise unset
# - DEPENDS_ECASH_LIB_WASM: "true" if these tests require ecash-lib-wasm
# to be built, otherwise unset
# - DEPENDS_ECASH_LIB: "true" if these tests require ecash-lib to be
# built, otherwise unset
# - DEPENDS_ECASH_AGORA: "true" if these tests require ecash-agora to be built,
# otherwise unset
# - DEPENDS_CHRONIK_CLIENT: "true" if these tests require chronik-client
# to be build, otherwise unset
js-mocha:
artifacts:
coverage.tar.gz: coverage.tar.gz
script: |
# Convert hyphen separated words to space separated capitalized words
project_to_suite() {
HYPHEN_SEPARATED=$1
WORD_SEPARATED=($(echo "${HYPHEN_SEPARATED//-/ }"))
echo "${WORD_SEPARATED[@]^}"
}
PROJECT_NAME="$(basename ${JS_PROJECT_ROOT})"
TEST_SUITE_NAME="$(project_to_suite ${PROJECT_NAME})"
pushd "${TOPLEVEL}/${JS_PROJECT_ROOT}"
MOCHA_JUNIT_DIR="test_results"
MOCHA_JUNIT_PATH="${MOCHA_JUNIT_DIR}/${PROJECT_NAME}-junit.xml"
rm -rf "${MOCHA_JUNIT_DIR}" && mkdir -p "${MOCHA_JUNIT_DIR}"
npm ci
# Test build if this is a typescript app that builds
if [ -z "${RUN_NPM_BUILD+x}" ] ; then
echo "CI not configured to test build."
else
echo "CI configured to test build. Building..."
npm run build
fi
# Make sure the report is available even if the tests fail
move_junit_report() {
mv "${MOCHA_JUNIT_PATH}" "${BUILD_DIR}/"
}
trap "move_junit_report" EXIT
nyc \
--reporter=text \
--reporter=lcov \
--reporter=teamcity \
npm test -- \
--reporter mocha-junit-reporter \
--reporter-options mochaFile="${MOCHA_JUNIT_PATH}" \
--reporter-options testsuitesTitle="${TEST_SUITE_NAME} Unit Tests" \
--reporter-options rootSuiteTitle="${TEST_SUITE_NAME}"
# Generate a summary report
lcov \
--rc lcov_branch_coverage=1 \
--summary coverage/lcov.info \
> coverage/lcov-report/coverage-summary.txt 2>&1
pushd coverage/lcov-report
tar -czf ../coverage.tar.gz -- *
popd
mv coverage/coverage.tar.gz "${BUILD_DIR}/"
rm -rf coverage
# This template expect the following environment variables to be set:
# - JS_PROJECT_ROOT: the root directory for the js project being tested,
# relative to the repository top level (no trailing /).
js-mocha-integration-tests:
artifacts:
coverage.tar.gz: coverage.tar.gz
post_build: |
# Convert hyphen separated words to space separated capitalized words
project_to_suite() {
HYPHEN_SEPARATED=$1
WORD_SEPARATED=($(echo "${HYPHEN_SEPARATED//-/ }"))
echo "${WORD_SEPARATED[@]^}"
}
PROJECT_NAME="$(basename ${JS_PROJECT_ROOT})"
TEST_SUITE_NAME="$(project_to_suite ${PROJECT_NAME})"
pushd "${TOPLEVEL}/${JS_PROJECT_ROOT}"
MOCHA_JUNIT_DIR="test_results"
MOCHA_JUNIT_PATH="${MOCHA_JUNIT_DIR}/${PROJECT_NAME}-integration-tests-junit.xml"
rm -rf "${MOCHA_JUNIT_DIR}" && mkdir -p "${MOCHA_JUNIT_DIR}"
# Install deps and build
# Note that all js-mocha-integration-tests template builds are ts and must be built
npm ci
npm run build
# Make sure the report is available even if the tests fail
move_junit_report() {
mv "${MOCHA_JUNIT_PATH}" "${BUILD_DIR}/"
}
trap "move_junit_report" EXIT
nyc \
--reporter=text \
--reporter=lcov \
--reporter=teamcity \
npm run integration-tests -- \
--reporter mocha-junit-reporter \
--reporter-options mochaFile="${MOCHA_JUNIT_PATH}" \
--reporter-options testsuitesTitle="${TEST_SUITE_NAME} Integration Tests" \
--reporter-options rootSuiteTitle="${TEST_SUITE_NAME}"
# Generate a summary report
lcov \
--rc lcov_branch_coverage=1 \
--summary coverage/lcov.info \
> coverage/lcov-report/coverage-summary.txt 2>&1
pushd coverage/lcov-report
tar -czf ../coverage.tar.gz -- *
popd
mv coverage/coverage.tar.gz "${BUILD_DIR}/"
rm -rf coverage
# The build descriptions.
# If a script is defined, then this will be the only step to run.
# Otherwise a list of targets can be specified, grouped by parallel runs.
# Example:
# targets:
# - - build11
# - build12
# - - build21
# - build22
# Will run:
# ninja build11 build12
# ninja build21 build22
builds:
build-asan:
Werror: true
clang: true
fail_fast: true
cmake_flags:
- '-DCMAKE_CXX_FLAGS=-DARENA_DEBUG'
- '-DCRYPTO_USE_ASM=OFF'
- '-DENABLE_SANITIZERS=address'
templates:
- check+secp256k1
timeout: 2400
env:
ASAN_OPTIONS: log_path=stdout
LSAN_OPTIONS: log_path=stdout
build-bench:
runOnDiffRegex:
- src/bench/
Werror: true
targets:
- - all
- install-bitcoin-bench
- - bench-bitcoin
timeout: 1200
artifacts:
src/bench/BitcoinABC_Bench.csv: bench/BitcoinABC_Bench.csv
src/bench/BitcoinABC_Bench.json: bench/BitcoinABC_Bench.json
post_build: |
"${TOPLEVEL}/contrib/teamcity/nanobench_json_to_teamcity_messages.py" \
"Bitcoin ABC Benchmark" \
"${BUILD_DIR}/src/bench/BitcoinABC_Bench.json"
build-bitcoinsuite-chronik-client:
runOnDiffRegex:
- modules/bitcoinsuite-chronik-client/
- script: |
+ cmake_flags:
+ - '-DBUILD_BITCOIN_CHRONIK=ON'
+ - '-DBUILD_BITCOIN_CHRONIK_PLUGINS=ON'
+ targets:
+ - - all
+ post_build: |
# Navigate to the bitcoinsuite-chronik-client directory
pushd "${TOPLEVEL}/modules/bitcoinsuite-chronik-client"
cargo build
cargo test -p bitcoinsuite-chronik-client
popd
timeout: 1200
build-chronik:
runOnDiffRegex:
- chronik/
- Cargo.toml
- Cargo.lock
cmake_flags:
- '-DBUILD_BITCOIN_CHRONIK=ON'
targets:
- - check-crates
- - all
- install
- - check
- check-functional
build-chronik-plugins:
runOnDiffRegex:
- chronik/
- Cargo.toml
- Cargo.lock
cmake_flags:
- '-DBUILD_BITCOIN_CHRONIK=ON'
- '-DBUILD_BITCOIN_CHRONIK_PLUGINS=ON'
targets:
- - check-crates
- - all
- install
- - check
- check-functional
build-clang:
Werror: true
clang: true
targets:
- - all
- install
- install-secp256k1
- - check
- check-secp256k1
templates:
- diff-node
timeout: 1200
build-clang-tidy:
clang: true
cmake_flags:
- '-DENABLE_CLANG_TIDY=ON'
targets:
- - all
- - check
templates:
- diff-node
timeout: 1800
build-coverage:
gcc: true
cmake_flags:
- '-DENABLE_COVERAGE=ON'
- '-DENABLE_BRANCH_COVERAGE=ON'
targets:
- - coverage-check-extended
post_build: |
"${TOPLEVEL}/contrib/teamcity/upload-coverage.sh" check-extended
timeout: 4800
artifacts:
coverage.tar.gz: coverage.tar.gz
build-debug:
Werror: true
cmake_flags:
- '-DCMAKE_BUILD_TYPE=Debug'
templates:
- check+secp256k1
- diff-node
timeout: 1200
build-diff:
Werror: true
targets:
- - all
- install
- install-secp256k1
- - check-all
- check-upgrade-activated
templates:
- diff-node
timeout: 1200
build-docs:
targets:
- - doc-rpc
- doc-doxygen
post_build: |
xvfb-run -a -e /dev/stderr ninja install-manpages-html
timeout: 600
artifacts:
doc/*: doc
build-explorer:
runOnDiffRegex:
- web/explorer/
- Cargo.lock
- Cargo.toml
script: |
# Build the main explorer project, will run on all sub dir
pushd "${TOPLEVEL}/web/explorer"
cargo build --locked
cargo test -p explorer-server -p explorer-exe
timeout: 1200
build-fuzzer:
runOnDiffRegex:
- src/test/fuzz/
- test/fuzz/
clang: true
Werror: true
cmake_flags:
- '-DENABLE_SANITIZERS=fuzzer'
targets:
- - bitcoin-fuzzers
build-ibd:
templates:
- ibd
build-ibd-no-assumevalid-checkpoint:
templates:
- ibd-no-assumevalid-checkpoint
build-linux64:
cross_build:
static_depends: linux64
toolchain: Linux64
cmake_flags:
- '-DBUILD_BITCOIN_CHRONIK=ON'
- '-DBUILD_BITCOIN_CHAINSTATE=ON'
templates:
- check+secp256k1
timeout: 3600
build-linux-aarch64:
cross_build:
static_depends: linux-aarch64
toolchain: LinuxAArch64
emulator: qemu-aarch64-static
cmake_flags:
- '-DBUILD_BITCOIN_CHRONIK=ON'
- '-DBUILD_BITCOIN_CHAINSTATE=ON'
# The ZMQ functional test will fail with qemu (due to a qemu limitation),
# so disable it to avoid the failure.
# Extracted from stderr:
# Unknown host QEMU_IFLA type: 50
# Unknown host QEMU_IFLA type: 51
# Unknown QEMU_IFLA_BRPORT type 33
- "-DBUILD_BITCOIN_ZMQ=OFF"
# This is an horrible hack to workaround a qemu bug:
# https://bugs.launchpad.net/qemu/+bug/1748612
# Qemu emits a message for unsupported features called by the guest.
# Because the output filtering is not working at all, it causes the
# qemu stderr to end up in the node stderr and fail the functional
# tests.
# Disabling the unsupported feature (here bypassing the config
# detection) fixes the issue.
# FIXME: get rid of the hack, either by using a better qemu version
# or by filtering stderr at the framework level.
- "-DHAVE_DECL_GETIFADDRS=OFF"
templates:
- check+secp256k1
timeout: 3600
env:
QEMU_LD_PREFIX: /usr/aarch64-linux-gnu
build-make-generator:
generator:
name: 'Unix Makefiles'
command: make
flags:
- '-k'
templates:
- check+secp256k1
timeout: 1200
build-master:
cmake_flags:
- '-DBUILD_BITCOIN_CHAINSTATE=ON'
Werror: true
targets:
- - all
- install
- install-secp256k1
- - check-extended
- check-upgrade-activated-extended
- - check-electrum
timeout: 4800
build-native-osx:
templates:
- check+secp256k1
timeout: 3600
build-osx:
cross_build:
static_depends: osx
toolchain: OSX
cmake_flags:
- '-DBUILD_BITCOIN_CHAINSTATE=ON'
# Uncomment to build Chronik once the cxx crate is working for OSX
# - '-DBUILD_BITCOIN_CHRONIK=ON'
targets:
- - all
- install
- install-secp256k1
- install-tests
post_build: |
export PYTHONPATH="${TOPLEVEL}/depends/x86_64-apple-darwin/native/lib/python3/dist-packages:${PYTHONPATH:-}"
ninja osx-zip
timeout: 3600
artifacts:
Bitcoin-ABC.zip: Bitcoin-ABC.zip
build-secp256k1:
runOnDiffRegex:
- src/secp256k1/
cmake_flags:
- '-DSECP256K1_ENABLE_MODULE_ECDH=ON'
- '-DSECP256K1_ENABLE_MODULE_MULTISET=ON'
templates:
- secp256k1
timeout: 600
build-secp256k1-java:
runOnDiffRegex:
- src/secp256k1/
cmake_flags:
- '-DSECP256K1_ENABLE_MODULE_ECDH=ON'
- '-DSECP256K1_ENABLE_JNI=ON'
- '-DUSE_JEMALLOC=OFF'
templates:
- secp256k1
timeout: 600
build-secp256k1-bench:
runOnDiffRegex:
- src/secp256k1/
cmake_flags:
- '-DSECP256K1_ENABLE_MODULE_ECDH=ON'
- '-DSECP256K1_ENABLE_MODULE_MULTISET=ON'
targets:
- - install-secp256k1-bench
- - bench-secp256k1
timeout: 1200
build-ecash-secp256k1:
runOnDiffRegex:
- src/secp256k1/
- modules/ecash-secp256k1/
script: |
"${TOPLEVEL}/modules/ecash-secp256k1/contrib/test.sh"
timeout: 1200
build-tsan:
Werror: true
clang: true
fail_fast: true
cmake_flags:
- '-DENABLE_SANITIZERS=thread'
targets:
- - all
- install
- - check
- check-functional
timeout: 2400
env:
TSAN_OPTIONS: log_path=stdout
build-ubsan:
Werror: true
clang: true
fail_fast: true
cmake_flags:
- '-DENABLE_SANITIZERS=undefined'
templates:
- check+secp256k1
timeout: 2400
env:
UBSAN_OPTIONS: log_path=stdout
build-win64:
cross_build:
static_depends: win64
toolchain: Win64
cmake_flags:
- '-DBUILD_BITCOIN_CHRONIK=ON'
- '-DBUILD_BITCOIN_CHAINSTATE=ON'
- "-DBUILD_BITCOIN_SEEDER=OFF"
- "-DCPACK_STRIP_FILES=ON"
- "-DUSE_JEMALLOC=OFF"
targets:
- - all
- install
- install-secp256k1
# install-tests is broken on debian bullseye because the leveldb tests
# do not export any symbol and trigger a mingw linker bug:
# https://sourceware.org/bugzilla/show_bug.cgi?id=26588
# We still install most test suites so we can use the artifacts and run
# them on the native platform.
#- install-tests
- install-test-suite-bitcoin
- install-test-suite-bitcoin-qt
- install-test-suite-avalanche
- install-test-suite-pow
- - package
post_build: |
wine "${ARTIFACT_DIR}/bin/test_bitcoin.exe" --run_test=\!radix_tests,rcu_tests,denialofservice_tests/outbound_slow_chain_eviction
timeout: 3600
artifacts:
bitcoin-abc-*-x86_64-w64-mingw32.exe: bitcoin-abc-x86_64-w64-mingw32.exe
build-without-bip70:
Werror: true
cmake_flags:
- '-DENABLE_BIP70=OFF'
targets:
- - all
- install
- - check
- check-functional
timeout: 1800
build-without-cli:
Werror: true
cmake_flags:
- '-DBUILD_BITCOIN_CLI=OFF'
targets:
- - all
- install
- - check-functional
timeout: 1200
build-without-qt:
Werror: true
cmake_flags:
- '-DBUILD_BITCOIN_QT=OFF'
targets:
- - all
- install
- - check
timeout: 1200
build-without-wallet:
Werror: true
cmake_flags:
- '-DBUILD_BITCOIN_WALLET=OFF'
- '-DBUILD_BITCOIN_CHAINSTATE=ON'
targets:
- - all
- install
- - check
- check-functional
templates:
- diff-node
timeout: 1200
build-without-zmq:
Werror: true
cmake_flags:
- '-DBUILD_BITCOIN_ZMQ=OFF'
targets:
- - all
- install
- - check
- check-functional
timeout: 1800
check-buildbot:
runOnDiffRegex:
- contrib/buildbot/
targets:
- - check-buildbot
timeout: 600
check-seeds:
targets:
- - bitcoind
- bitcoin-cli
post_build: |
# Run on different ports to avoid a race where the rpc port used in the first run
# may not be closed in time for the second to start.
SEEDS_DIR="${TOPLEVEL}"/contrib/seeds
RPC_PORT=18832 "${SEEDS_DIR}"/check-seeds.sh main 80
RPC_PORT=18833 "${SEEDS_DIR}"/check-seeds.sh test 70
timeout: 600
check-source-control-tools:
cmake_flags:
- '-DENABLE_SOURCE_CONTROL_TOOLS_TESTS=ON'
targets:
- - check-source-control-tools
timeout: 600
guix-linux:
templates:
- guix_builds
env:
HOSTS: "x86_64-linux-gnu aarch64-linux-gnu"
guix-osx:
templates:
- guix_builds
env:
HOSTS: "x86_64-apple-darwin"
guix-win:
templates:
- guix_builds
env:
HOSTS: "x86_64-w64-mingw32"
lint-circular-dependencies:
runOnDiffRegex:
- src/
- test/lint/
script: |
"${TOPLEVEL}/test/lint/lint-circular-dependencies.sh"
b58-ts:
script: |
pushd "${TOPLEVEL}/modules/b58-ts"
npm ci
npm run build
ecashaddrjs:
script: |
pushd "${TOPLEVEL}/modules/ecashaddrjs"
npm ci
npm run build
ecash-lib-wasm:
script: |
pushd "${TOPLEVEL}/modules/ecash-lib-wasm"
./build-wasm.sh
chronik-client:
depends:
- ecashaddrjs
script: |
pushd "${TOPLEVEL}/modules/chronik-client"
npm ci
npm run build
mock-chronik-client:
depends:
- ecashaddrjs
- chronik-client
script: |
pushd "${TOPLEVEL}/modules/mock-chronik-client"
npm ci
npm run build
ecash-lib:
depends:
- ecash-lib-wasm
- b58-ts
- ecashaddrjs
- chronik-client
script: |
pushd "${TOPLEVEL}/modules/ecash-lib"
npm ci
npm run build
ecash-agora:
depends:
- chronik-client
- ecash-lib
script: |
pushd "${TOPLEVEL}/modules/ecash-agora"
npm ci
npm run build
ecash-script:
script: |
pushd "${TOPLEVEL}/modules/ecash-script"
npm ci
ecash-coinselect:
script: |
pushd "${TOPLEVEL}/modules/ecash-coinselect"
npm ci
cashtab-tests:
runOnDiffRegex:
- cashtab/
- modules/mock-chronik-client/
- modules/ecashaddrjs/
- modules/ecash-agora/
- modules/ecash-lib/
- modules/ecash-lib-wasm/
- src/secp256k1/
artifacts:
coverage.tar.gz: coverage.tar.gz
env:
# Any string will work, CI just needs to be defined
CI: 'teamcity'
JEST_SUITE_NAME: "Cashtab Test suites"
JEST_JUNIT_SUITE_NAME: "CashTab Unit Tests"
JEST_JUNIT_OUTPUT_DIR: "test/junit"
JEST_JUNIT_OUTPUT_NAME: "cashtab.xml"
depends:
- ecashaddrjs
- chronik-client
- mock-chronik-client
- ecash-script
- ecash-lib
- ecash-agora
script: |
pushd "${TOPLEVEL}/cashtab"
npm ci
npm run build
# Make sure the report is available even if the tests fail
move_junit_report() {
mv test "${BUILD_DIR}/"
}
trap "move_junit_report" EXIT
npm run test --coverage -- \
--reporters=default \
--reporters=jest-junit \
--coverageReporters=text \
--coverageReporters=lcov \
--coverageReporters=teamcity
# Generate a summary report
lcov \
--rc lcov_branch_coverage=1 \
--summary coverage/lcov.info \
> coverage/lcov-report/coverage-summary.txt 2>&1
pushd coverage/lcov-report
tar -czf ../coverage.tar.gz -- *
popd
mv coverage/coverage.tar.gz "${BUILD_DIR}/"
ecash-herald-tests:
runOnDiffRegex:
- apps/ecash-herald/
- modules/mock-chronik-client/
- modules/ecashaddrjs/
- modules/chronik-client/
env:
JS_PROJECT_ROOT: apps/ecash-herald
# Ordering matters
depends:
- ecashaddrjs
- chronik-client
- ecash-lib
- ecash-agora
- ecash-script
- mock-chronik-client
templates:
- js-mocha
token-server-tests:
runOnDiffRegex:
- apps/token-server/
- modules/mock-chronik-client/
- modules/ecashaddrjs/
- modules/chronik-client/
env:
JS_PROJECT_ROOT: apps/token-server
RUN_NPM_BUILD: "true"
depends:
- ecashaddrjs
- chronik-client
- mock-chronik-client
- ecash-lib
templates:
- js-mocha
mock-chronik-client-tests:
runOnDiffRegex:
- modules/mock-chronik-client/
- modules/ecashaddrjs/
env:
JS_PROJECT_ROOT: modules/mock-chronik-client
depends:
- ecashaddrjs
templates:
- js-mocha
b58-ts-tests:
runOnDiffRegex:
- modules/b58-ts/
env:
JS_PROJECT_ROOT: modules/b58-ts
RUN_NPM_BUILD: "true"
templates:
- js-mocha
chronik-client-tests:
runOnDiffRegex:
- modules/chronik-client/
- modules/ecashaddrjs/
env:
JS_PROJECT_ROOT: modules/chronik-client
depends:
- ecashaddrjs
templates:
- js-mocha
ecash-lib-tests:
runOnDiffRegex:
- modules/ecash-lib/
- modules/ecash-lib-wasm/
- modules/ecashaddrjs/
- src/secp256k1/
env:
JS_PROJECT_ROOT: modules/ecash-lib
RUN_NPM_BUILD: "true"
depends:
- b58-ts
- ecash-lib-wasm
- ecashaddrjs
- chronik-client
templates:
- js-mocha
ecash-agora-tests:
runOnDiffRegex:
- modules/ecash-agora/
- modules/ecash-lib/
- modules/ecash-lib-wasm/
- src/secp256k1/
env:
JS_PROJECT_ROOT: modules/ecash-agora
depends:
- ecashaddrjs
- chronik-client
- ecash-lib
templates:
- js-mocha
ecash-agora-integration-tests:
cmake_flags:
- '-DBUILD_BITCOIN_CHRONIK=ON'
- '-DBUILD_BITCOIN_CHRONIK_PLUGINS=ON'
targets:
- - all
runOnDiffRegex:
- chronik/
- modules/chronik-client/
- modules/ecash-agora/
- modules/ecash-lib/
- modules/ecash-lib-wasm/
- modules/ecashaddrjs/
- src/secp256k1/
- Cargo.toml
- Cargo.lock
env:
JS_PROJECT_ROOT: modules/ecash-agora
depends:
- ecashaddrjs
- chronik-client
- ecash-lib
templates:
- js-mocha-integration-tests
ecash-lib-integration-tests:
cmake_flags:
- '-DBUILD_BITCOIN_CHRONIK=ON'
targets:
- - all
runOnDiffRegex:
- chronik/
- modules/chronik-client/
- modules/ecash-lib/
- modules/ecash-lib-wasm/
- modules/ecashaddrjs/
- src/secp256k1/
- Cargo.toml
- Cargo.lock
env:
JS_PROJECT_ROOT: modules/ecash-lib
depends:
- b58-ts
- ecashaddrjs
- ecash-lib-wasm
- chronik-client
templates:
- js-mocha-integration-tests
chronik-client-integration-tests:
cmake_flags:
- '-DBUILD_BITCOIN_CHRONIK=ON'
- '-DBUILD_BITCOIN_CHRONIK_PLUGINS=ON'
targets:
- - all
runOnDiffRegex:
- chronik/
- modules/chronik-client/
- modules/ecashaddrjs/
- Cargo.toml
- Cargo.lock
env:
JS_PROJECT_ROOT: modules/chronik-client
depends:
- ecashaddrjs
templates:
- js-mocha-integration-tests
ecashaddrjs-tests:
runOnDiffRegex:
- modules/ecashaddrjs/
env:
JS_PROJECT_ROOT: modules/ecashaddrjs
templates:
- js-mocha
ecash-script-tests:
runOnDiffRegex:
- modules/ecash-script/
env:
JS_PROJECT_ROOT: modules/ecash-script
templates:
- js-mocha
ecash-coinselect-tests:
runOnDiffRegex:
- modules/ecash-coinselect/
env:
JS_PROJECT_ROOT: modules/ecash-coinselect
templates:
- js-mocha
electrum-tests:
runOnDiffRegex:
- electrum/
targets:
- - check-electrum
electrum-functional-tests:
script: |
"${TOPLEVEL}"/electrum/contrib/make_secp
pip3 install -r "${TOPLEVEL}/electrum/contrib/requirements/requirements.txt"
pip3 install -r "${TOPLEVEL}/electrum/contrib/requirements/requirements-regtest.txt"
pytest "${TOPLEVEL}/electrum/electrumabc/tests/regtest"
preview-e.cash:
docker:
context: web/e.cash
port: 3000
build_args:
- "PREVIEW_BUILD=next.preview.js"
preview-chronik.e.cash:
docker:
dockerfile: chronik.e.cash.Dockerfile
build_args:
- "NGINX_CONF=nginx-preview.conf"
preview-explorer:
docker:
dockerfile: explorer.Dockerfile
port: 3035
preview-cashtab:
docker:
dockerfile: cashtab.Dockerfile
build_args:
- "NGINX_CONF=nginx-preview.conf"
diff --git a/modules/bitcoinsuite-chronik-client/Cargo.toml b/modules/bitcoinsuite-chronik-client/Cargo.toml
index 4e432474f..a68c531a3 100644
--- a/modules/bitcoinsuite-chronik-client/Cargo.toml
+++ b/modules/bitcoinsuite-chronik-client/Cargo.toml
@@ -1,40 +1,49 @@
# Copyright (c) 2024 The Bitcoin developers
# Distributed under the MIT software license, see the accompanying
# COPYING or http://www.opensource.org/licenses/mit-license.php.
[package]
name = "bitcoinsuite-chronik-client"
version = "0.1.0"
edition = "2021"
[dependencies]
abc-rust-error = { path = "../../chronik/abc-rust-error"}
bitcoinsuite-core = { path = "../../chronik/bitcoinsuite-core" }
chronik-proto = { path = "../../chronik/chronik-proto/"}
+# Async trait facility
+async-trait = "0.1.86"
+
# Error structs/enums
thiserror = "1.0"
# HTTP client
reqwest = "0.11"
# Async runtime and scheduler
tokio = { version = "1.14", features = ["full"] }
# Protobuf (de)serialization
prost = "0.11"
# Hex en-/decoding
hex = "0.4"
regex = "1"
bytes = { version = "1.4", features = ["serde"] }
+# JSON serialization/deserialization
+serde_json = "1.0"
+
+# Serializes and deserializes Rust data
+serde = "1.0.217"
+
[build-dependencies]
# Build Protobuf structs
prost-build = "0.11"
[dev-dependencies]
# Colorful diffs for assertions
pretty_assertions = "1.0"
diff --git a/modules/bitcoinsuite-chronik-client/src/handler.rs b/modules/bitcoinsuite-chronik-client/src/handler.rs
new file mode 100644
index 000000000..4d5d7479a
--- /dev/null
+++ b/modules/bitcoinsuite-chronik-client/src/handler.rs
@@ -0,0 +1,89 @@
+// Copyright (c) 2025 The Bitcoin developers
+// Distributed under the MIT software license, see the accompanying
+// file COPYING or http://www.opensource.org/licenses/mit-license.php.
+
+use std::io::{self, ErrorKind};
+use std::sync::Arc;
+
+use abc_rust_error::Result;
+use async_trait::async_trait;
+use serde_json::{from_str, Value};
+use tokio::{
+ io::{AsyncBufReadExt, AsyncWriteExt, BufReader, ReadHalf, WriteHalf},
+ net::UnixStream,
+};
+
+#[derive(Debug)]
+pub struct IpcHandler {
+ pub reader: BufReader<ReadHalf<UnixStream>>,
+ pub writer: WriteHalf<UnixStream>,
+}
+
+#[async_trait]
+pub trait IpcReader: Sync + Send {
+ async fn on_rx(
+ &self,
+ handler: &mut IpcHandler,
+ json_data: Value,
+ ) -> Result<()>;
+}
+
+// Split the stream so we can handle reader and writer operations separately
+impl IpcHandler {
+ pub fn new(stream: UnixStream) -> Self {
+ let (reader, writer) = tokio::io::split(stream);
+ Self {
+ reader: BufReader::new(reader),
+ writer,
+ }
+ }
+
+ pub async fn listen_for_messages(
+ &mut self,
+ ipc_reader: Arc<dyn IpcReader>,
+ ) -> io::Result<()> {
+ let mut buffer = String::new();
+
+ loop {
+ buffer.clear();
+
+ let bytes_read = self.reader.read_line(&mut buffer).await?;
+ if bytes_read == 0 {
+ eprintln!("EOF: Connection closed by client");
+ break Ok(());
+ }
+
+ let message = buffer.trim().to_string();
+
+ if let Err(err) = match from_str::<Value>(&message) {
+ Ok(json_data) => {
+ ipc_reader.on_rx(self, json_data).await.map_err(|e| {
+ io::Error::new(
+ ErrorKind::InvalidData,
+ format!("on_rx failed: {}", e),
+ )
+ })
+ }
+ Err(e) => Err(io::Error::new(
+ ErrorKind::InvalidData,
+ format!("Failed to parse JSON: {}", e),
+ )),
+ } {
+ self.send_message("stop").await.unwrap();
+ return Err(err);
+ }
+ }
+ }
+
+ /// Send message (encoded using JSON) to the handler‘s UnixStream
+ pub async fn send_message(&mut self, message: &str) -> io::Result<()> {
+ let json_message = serde_json::to_string(&message)?;
+ self.writer.write_all(json_message.as_bytes()).await?;
+ self.writer.write_all(b"\n").await?;
+ self.writer.flush().await?;
+
+ println!("Sent: {}", message);
+
+ Ok(())
+ }
+}
diff --git a/modules/bitcoinsuite-chronik-client/src/lib.rs b/modules/bitcoinsuite-chronik-client/src/lib.rs
index f7b41b04e..a1624cea5 100644
--- a/modules/bitcoinsuite-chronik-client/src/lib.rs
+++ b/modules/bitcoinsuite-chronik-client/src/lib.rs
@@ -1,466 +1,467 @@
// Copyright (c) 2024 The Bitcoin developers
// Distributed under the MIT software license, see the accompanying
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
use std::fmt::Display;
use abc_rust_error::{Result, WrapErr};
use bitcoinsuite_core::hash::{Hashed, Sha256d};
use bytes::Bytes;
pub use chronik_proto::proto;
use reqwest::{header::CONTENT_TYPE, StatusCode};
use thiserror::Error;
use crate::ChronikClientError::*;
+pub mod handler;
pub mod test_runner;
#[derive(Debug, Clone)]
pub struct ChronikClient {
http_url: String,
ws_url: String,
client: reqwest::Client,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum ScriptType {
Other,
P2pk,
P2pkh,
P2sh,
}
#[derive(Debug, Clone)]
pub struct ScriptEndpoint<'payload, 'client> {
script_type: ScriptType,
script_payload: &'payload [u8],
client: &'client ChronikClient,
}
#[derive(Debug, Clone)]
pub struct PluginEndpoint<'payload, 'client> {
plugin_name: &'payload str,
payload: &'payload [u8],
client: &'client ChronikClient,
}
#[derive(Debug, Error, PartialEq)]
pub enum ChronikClientError {
#[error("`url` cannot end with '/', got: {0}")]
CannotHaveTrailingSlashInUrl(String),
#[error("`url` must start with 'https://' or 'http://', got: {0}")]
InvalidUrlSchema(String),
#[error("HTTP request error")]
HttpRequestError,
#[error("Unexpected text message: {0}")]
UnexpectedWsTextMessage(String),
#[error("Chronik error ({status_code}): {error_msg}")]
ChronikError {
status_code: StatusCode,
error: proto::Error,
error_msg: String,
},
#[error("Invalid protobuf: {0}")]
InvalidProtobuf(String),
}
impl ChronikClient {
pub fn new(url: String) -> Result<Self> {
if url.ends_with('/') {
return Err(CannotHaveTrailingSlashInUrl(url).into());
}
let ws_url = if url.starts_with("https://") {
"wss://".to_string() + url.strip_prefix("https://").unwrap()
} else if url.starts_with("http://") {
"ws://".to_string() + url.strip_prefix("http://").unwrap()
} else {
return Err(InvalidUrlSchema(url).into());
};
let ws_url = ws_url + "/ws";
Ok(ChronikClient {
http_url: url,
ws_url,
client: reqwest::Client::new(),
})
}
pub fn ws_url(&self) -> &str {
&self.ws_url
}
pub async fn broadcast_tx(
&self,
raw_tx: Vec<u8>,
) -> Result<proto::BroadcastTxResponse> {
let request = proto::BroadcastTxRequest {
raw_tx,
skip_token_checks: false,
};
self._post("/broadcast-tx", &request).await
}
pub async fn broadcast_txs(
&self,
raw_txs: Vec<Vec<u8>>,
) -> Result<proto::BroadcastTxsResponse> {
let request = proto::BroadcastTxsRequest {
raw_txs,
skip_token_checks: false,
};
self._post("/broadcast-txs", &request).await
}
pub async fn blockchain_info(&self) -> Result<proto::BlockchainInfo> {
self._get("/blockchain-info").await
}
pub async fn block_by_height(&self, height: i32) -> Result<proto::Block> {
self._get(&format!("/block/{}", height)).await
}
pub async fn block_by_hash(&self, hash: &Sha256d) -> Result<proto::Block> {
self._get(&format!("/block/{}", hash.hex_be())).await
}
pub async fn blocks(
&self,
start_height: i32,
end_height: i32,
) -> Result<Vec<proto::BlockInfo>> {
let blocks: proto::Blocks = self
._get(&format!("/blocks/{}/{}", start_height, end_height))
.await?;
Ok(blocks.blocks)
}
pub async fn chronik_info(&self) -> Result<proto::ChronikInfo> {
self._get("/chronik-info").await
}
pub async fn tx(&self, txid: &Sha256d) -> Result<proto::Tx> {
self._get(&format!("/tx/{}", txid.hex_be())).await
}
pub async fn raw_tx(&self, txid: &Sha256d) -> Result<Bytes> {
Ok(self
._get::<proto::RawTx>(&format!("/raw-tx/{}", txid.hex_be()))
.await?
.raw_tx
.into())
}
pub async fn block_txs_by_height(
&self,
height: i32,
page: usize,
) -> Result<proto::TxHistoryPage> {
self._get(&format!("/block-txs/{}?page={}", height, page))
.await
}
pub async fn block_txs_by_height_with_page_size(
&self,
height: i32,
page: usize,
page_size: usize,
) -> Result<proto::TxHistoryPage> {
self._get(&format!(
"/block-txs/{}?page={}&page_size={}",
height, page, page_size
))
.await
}
pub async fn block_txs_by_hash(
&self,
hash: &Sha256d,
page: usize,
) -> Result<proto::TxHistoryPage> {
self._get(&format!("/block-txs/{}?page={}", hash.hex_be(), page))
.await
}
pub async fn block_txs_by_hash_with_page_size(
&self,
hash: &Sha256d,
page: usize,
page_size: usize,
) -> Result<proto::TxHistoryPage> {
self._get(&format!(
"/block-txs/{}?page={}&page_size={}",
hash.hex_be(),
page,
page_size
))
.await
}
pub async fn validate_tx(&self, raw_tx: Vec<u8>) -> Result<proto::Tx> {
self._post("/validate-tx", &proto::RawTx { raw_tx }).await
}
pub async fn token(&self, token_id: &Sha256d) -> Result<proto::TokenInfo> {
self._get(&format!("/token/{}", token_id.hex_be())).await
}
pub fn script<'payload, 'client>(
&'client self,
script_type: ScriptType,
script_payload: &'payload [u8],
) -> ScriptEndpoint<'payload, 'client> {
ScriptEndpoint {
script_type,
script_payload,
client: self,
}
}
pub fn plugin<'payload, 'client>(
&'client self,
plugin_name: &'payload str,
payload: &'payload [u8],
) -> PluginEndpoint<'payload, 'client> {
PluginEndpoint {
plugin_name,
payload,
client: self,
}
}
async fn _post<
MRequest: prost::Message,
MResponse: prost::Message + Default,
>(
&self,
url_suffix: &str,
request: &MRequest,
) -> Result<MResponse> {
let response = self
.client
.post(format!("{}{}", self.http_url, url_suffix))
.header(CONTENT_TYPE, "application/x-protobuf")
.body(request.encode_to_vec())
.send()
.await
.wrap_err(HttpRequestError)?;
Self::_handle_response(response).await
}
async fn _get<MResponse: prost::Message + Default>(
&self,
url_suffix: &str,
) -> Result<MResponse> {
let response = self
.client
.get(format!("{}{}", self.http_url, url_suffix))
.header(CONTENT_TYPE, "application/x-protobuf")
.send()
.await
.wrap_err(HttpRequestError)?;
Self::_handle_response(response).await
}
async fn _handle_response<MResponse: prost::Message + Default>(
response: reqwest::Response,
) -> Result<MResponse> {
use prost::Message as _;
let status_code = response.status();
if status_code != StatusCode::OK {
let data = response.bytes().await?;
let error = proto::Error::decode(data.as_ref())
.wrap_err_with(|| InvalidProtobuf(hex::encode(&data)))?;
return Err(ChronikError {
status_code,
error_msg: error.msg.clone(),
error,
}
.into());
}
let bytes = response.bytes().await.wrap_err(HttpRequestError)?;
let response = MResponse::decode(bytes.as_ref())
.wrap_err_with(|| InvalidProtobuf(hex::encode(&bytes)))?;
Ok(response)
}
}
impl ScriptEndpoint<'_, '_> {
pub async fn history_with_page_size(
&self,
page: usize,
page_size: usize,
) -> Result<proto::TxHistoryPage> {
self.client
._get(&format!(
"/script/{}/{}/history?page={}&page_size={}",
self.script_type,
hex::encode(self.script_payload),
page,
page_size,
))
.await
}
pub async fn history(&self, page: usize) -> Result<proto::TxHistoryPage> {
self.client
._get(&format!(
"/script/{}/{}/history?page={}",
self.script_type,
hex::encode(self.script_payload),
page,
))
.await
}
pub async fn confirmed_txs(
&self,
page: usize,
) -> Result<proto::TxHistoryPage> {
self.client
._get(&format!(
"/script/{}/{}/confirmed-txs?page={}",
self.script_type,
hex::encode(self.script_payload),
page,
))
.await
}
pub async fn unconfirmed_txs(
&self,
page: usize,
) -> Result<proto::TxHistoryPage> {
self.client
._get(&format!(
"/script/{}/{}/unconfirmed-txs?page={}",
self.script_type,
hex::encode(self.script_payload),
page,
))
.await
}
pub async fn utxos(&self) -> Result<Vec<proto::ScriptUtxo>> {
let utxos = self
.client
._get::<proto::ScriptUtxos>(&format!(
"/script/{}/{}/utxos",
self.script_type,
hex::encode(self.script_payload),
))
.await?;
Ok(utxos.utxos)
}
}
impl PluginEndpoint<'_, '_> {
pub async fn history_with_page_size(
&self,
page: usize,
page_size: usize,
) -> Result<proto::TxHistoryPage> {
self.client
._get(&format!(
"/plugin/{}/{}/history?page={}&page_size={}",
self.plugin_name,
hex::encode(self.payload),
page,
page_size,
))
.await
}
pub async fn history(&self, page: usize) -> Result<proto::TxHistoryPage> {
self.client
._get(&format!(
"/plugin/{}/{}/history?page={}",
self.plugin_name,
hex::encode(self.payload),
page,
))
.await
}
pub async fn confirmed_txs(
&self,
page: usize,
) -> Result<proto::TxHistoryPage> {
self.client
._get(&format!(
"/plugin/{}/{}/confirmed-txs?page={}",
self.plugin_name,
hex::encode(self.payload),
page,
))
.await
}
pub async fn unconfirmed_txs(
&self,
page: usize,
) -> Result<proto::TxHistoryPage> {
self.client
._get(&format!(
"/plugin/{}/{}/unconfirmed-txs?page={}",
self.plugin_name,
hex::encode(self.payload),
page,
))
.await
}
pub async fn utxos(&self) -> Result<Vec<proto::ScriptUtxo>> {
let utxos = self
.client
._get::<proto::ScriptUtxos>(&format!(
"/plugin/{}/{}/utxos",
self.plugin_name,
hex::encode(self.payload),
))
.await?;
Ok(utxos.utxos)
}
}
impl Display for ScriptType {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
let text = match self {
ScriptType::Other => "other",
ScriptType::P2pk => "p2pk",
ScriptType::P2pkh => "p2pkh",
ScriptType::P2sh => "p2sh",
};
write!(f, "{}", text)?;
Ok(())
}
}
#[cfg(test)]
mod tests {
use abc_rust_error::Result;
use crate::{ChronikClient, ChronikClientError};
#[test]
fn test_constructor_trailing_slash() -> Result<()> {
let url = "https://chronik.be.cash/xec/".to_string();
let err = ChronikClient::new(url.clone())
.unwrap_err()
.downcast::<ChronikClientError>()?;
assert_eq!(err, ChronikClientError::CannotHaveTrailingSlashInUrl(url));
Ok(())
}
#[test]
fn test_constructor_invalid_schema() -> Result<()> {
let url = "soap://chronik.be.cash/xec".to_string();
let err = ChronikClient::new(url.clone())
.unwrap_err()
.downcast::<ChronikClientError>()?;
assert_eq!(err, ChronikClientError::InvalidUrlSchema(url));
Ok(())
}
}
diff --git a/modules/bitcoinsuite-chronik-client/src/test_runner.rs b/modules/bitcoinsuite-chronik-client/src/test_runner.rs
index f3a115cda..db4ae7fb7 100644
--- a/modules/bitcoinsuite-chronik-client/src/test_runner.rs
+++ b/modules/bitcoinsuite-chronik-client/src/test_runner.rs
@@ -1,120 +1,100 @@
// Copyright (c) 2025 The Bitcoin developers
// Distributed under the MIT software license, see the accompanying
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
-use std::env;
+use std::{env, sync::Arc};
-use tokio::net::UnixListener;
-use tokio::process::{Child, Command};
+use abc_rust_error::{bail, Result};
+use serde_json::Value;
+use tokio::{io, io::AsyncReadExt, net::UnixListener, process::Command};
+
+use crate::handler::{IpcHandler, IpcReader};
pub async fn spin_child_process(
python_script: &str,
- socket_path: &str,
-) -> Child {
+ ipc_reader: Arc<dyn IpcReader>,
+) -> io::Result<()> {
let script_name = format!("chronik-client_{}", python_script);
+ let socket_path = format!("/tmp/{}.socket", python_script);
+ let path = std::path::Path::new(&socket_path);
- if std::path::Path::new(&socket_path).exists() {
- std::fs::remove_file(socket_path).unwrap_or_else(|_| {
- panic!("Failed to remove file {}", socket_path)
+ if path.exists() {
+ std::fs::remove_file(path).unwrap_or_else(|_| {
+ panic!("Failed to remove file {}", socket_path);
});
}
let build_dir = env::var("BUILD_DIR").unwrap_or_else(|_| ".".to_string());
let python_command = if Command::new("python3")
.arg("--version")
.output()
.await
.is_ok()
{
"python3"
} else {
"python"
};
println!("Starting test_runner for {}", script_name);
- let child = Command::new(python_command)
+ let mut child = Command::new(python_command)
.arg("test/functional/test_runner.py")
.arg(format!("setup_scripts/{}", script_name))
.current_dir(build_dir)
- .env("CHRONIK_CLIENT_RUST_IPC_SOCKET", socket_path)
+ .env("CHRONIK_CLIENT_RUST_IPC_SOCKET", socket_path.clone())
.stdout(std::process::Stdio::piped())
.stderr(std::process::Stdio::piped())
- .spawn() // Start the child process
+ .spawn()
.expect("Failed to start Python process");
- let socket_listener = UnixListener::bind(socket_path)
+ let socket_listener = UnixListener::bind(&socket_path)
.unwrap_or_else(|_| panic!("Failed to bind to socket {}", socket_path));
println!("Rust IPC server is listening on {:?}", socket_path);
- tokio::spawn(async move {
- let (_socket, _) = socket_listener.accept().await.unwrap();
+ let (socket, _) = socket_listener
+ .accept()
+ .await
+ .expect("Connection to socket failed");
+
+ let mut handler = IpcHandler::new(socket);
+
+ let ipc_reader_clone = ipc_reader.clone();
+ let listen_task = tokio::spawn(async move {
+ handler.listen_for_messages(ipc_reader_clone).await
});
+ // Block until the messaging completed and the socket is closed
+ let result = listen_task.await;
+
+ // Dump stdout to stderr, this will only be printed upon error
+ let mut output = Vec::new();
child
+ .stdout
+ .take()
+ .unwrap()
+ .read_to_end(&mut output)
+ .await?;
+ eprintln!("\nOutput: {}", String::from_utf8_lossy(&output));
+
+ if result.is_err() {
+ // Cause the test to fail
+ panic!("Test {script_name} failed!");
+ }
+
+ Ok(())
}
-#[cfg(test)]
-mod tests {
- use std::time::Duration;
-
- use tokio;
- use tokio::io::{AsyncBufReadExt, BufReader};
- use tokio::time::timeout;
-
- use super::*;
-
- #[tokio::test]
- async fn test_socket() {
- let socket_path = "/tmp/test_env_vars.socket";
- let python_script = "chronik_info";
- let mut child = spin_child_process(python_script, socket_path).await;
-
- if let Some(stdout) = child.stdout.take() {
- let reader = BufReader::new(stdout);
- let mut lines = reader.lines();
- let timeout_duration = Duration::from_secs(60);
- let mut socket_found = false;
- let mut socket_connection_found = false;
-
- // Use timeout to wrap the whole loop for 3 seconds
- let result = timeout(timeout_duration, async {
- while let Some(line) = lines.next_line().await.unwrap() {
- println!("{}", line);
- if line.trim() == "SOCKET IS FOUND" {
- socket_found = true;
- } else if line.trim() == "SOCKET CONNECTION ACCEPTED" {
- socket_connection_found = true;
- }
- if socket_connection_found && socket_found {
- child
- .kill()
- .await
- .expect("Failed to kill python process");
- return; // Exit after killing the process
- }
- }
- })
- .await;
-
- match &result {
- Ok(_) => {
- println!("Env vars have been found: exiting");
- }
- Err(e) => {
- println!("Timeout reached: {}", e);
- // Only kill the child if there was an error (don't override
- // error)
- if let Err(kill_error) = child.kill().await {
- eprintln!(
- "Error killing child process: {}",
- kill_error
- );
- }
- }
- }
-
- assert_eq!(result, Ok(()));
+pub fn handle_test_info(message: &Value) -> Result<String> {
+ if let Some(test_info) = message.as_object() {
+ if let Some(chronik_address) =
+ test_info.get("chronik").and_then(|v| v.as_str())
+ {
+ return Ok(chronik_address.to_string());
}
}
+ bail!(
+ "Chronik url is missing from the test_info message: {:?}",
+ message
+ )
}
diff --git a/modules/bitcoinsuite-chronik-client/tests/chronik_info.rs b/modules/bitcoinsuite-chronik-client/tests/chronik_info.rs
new file mode 100644
index 000000000..f127be7fa
--- /dev/null
+++ b/modules/bitcoinsuite-chronik-client/tests/chronik_info.rs
@@ -0,0 +1,85 @@
+// Copyright (c) 2025 The Bitcoin developers
+// Distributed under the MIT software license, see the accompanying
+// file COPYING or http://www.opensource.org/licenses/mit-license.php.
+
+use std::sync::{Arc, Mutex};
+
+use abc_rust_error::Result;
+use async_trait::async_trait;
+use bitcoinsuite_chronik_client::handler::{IpcHandler, IpcReader};
+use bitcoinsuite_chronik_client::test_runner::{
+ handle_test_info, spin_child_process,
+};
+use bitcoinsuite_chronik_client::ChronikClient;
+use serde_json::Value;
+
+#[derive(Default)]
+struct ChronikInfoIPC {
+ pub expected_version: Mutex<String>,
+ pub returned_version: Mutex<String>,
+}
+
+#[async_trait]
+impl IpcReader for ChronikInfoIPC {
+ async fn on_rx(
+ &self,
+ handler: &mut IpcHandler,
+ json_data: Value,
+ ) -> Result<()> {
+ // Step 0: receive the chronik url and retrieve the chronik version
+ if let Some(test_info) = json_data.get("test_info") {
+ let chronik_url = handle_test_info(&test_info)
+ .expect("Failed to extract chronik URL from test_info message");
+
+ let client = match ChronikClient::new(chronik_url.to_string()) {
+ Ok(client) => client,
+ Err(e) => return Err(e),
+ };
+
+ let version = match client.chronik_info().await {
+ Ok(info) => info.version,
+ Err(e) => return Err(e),
+ };
+
+ *self.returned_version.lock().unwrap() = version;
+
+ if let Err(e) = handler.send_message("next").await {
+ return Err(e.into());
+ }
+ }
+
+ // Step 1: receive the version sent by the setup framework
+ if let Some(chronik) = json_data.get("chronik_version") {
+ if let Some(chronik_str) = chronik.as_str() {
+ *self.expected_version.lock().unwrap() = chronik_str.into();
+
+ assert_eq!(
+ *self.returned_version.lock().unwrap(),
+ *self.expected_version.lock().unwrap()
+ );
+ }
+
+ if let Err(e) = handler.send_message("stop").await {
+ return Err(e.into());
+ }
+ }
+
+ Ok(())
+ }
+}
+
+pub async fn chronik_info_ipc() -> Result<()> {
+ let python_script = "chronik_info";
+
+ let ipc_reader = Arc::new(ChronikInfoIPC::default());
+
+ spin_child_process(python_script, ipc_reader.clone()).await?;
+
+ Ok(())
+}
+
+#[tokio::test]
+pub async fn test_chronik_version() -> Result<(), abc_rust_error::Report> {
+ chronik_info_ipc().await?;
+ Ok(())
+}
diff --git a/test/functional/setup_scripts/ipc.py b/test/functional/setup_scripts/ipc.py
index d55cf5de6..be3642746 100644
--- a/test/functional/setup_scripts/ipc.py
+++ b/test/functional/setup_scripts/ipc.py
@@ -1,79 +1,98 @@
# Copyright (c) 2023 The Bitcoin developers
# Distributed under the MIT software license, see the accompanying
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
"""
IPC communication with NodeJs and Rust
"""
import json
import os
import select
import socket
import time
+class IPCSocket:
+ _instance = None
+
+ def __init__(self, socket_path):
+ self.ipc_socket = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
+ self.ipc_socket.connect(socket_path)
+
+ def __del__(self):
+ self.ipc_socket.close()
+
+ @staticmethod
+ def get(socket_path):
+ if not IPCSocket._instance:
+ IPCSocket._instance = IPCSocket(socket_path)
+ return IPCSocket._instance
+
+ def read(self, max_bytes):
+ return self.ipc_socket.recv(max_bytes)
+
+ def write(self, message):
+ self.ipc_socket.sendall(message)
+
+
def receive_ipc_messages(timeout):
if not hasattr(receive_ipc_messages, "ipc_rbuf"):
receive_ipc_messages.ipc_rbuf = b""
messages = []
- use_stdin = "NODE_CHANNEL_FD" not in os.environ
+ # Try the rust created socket first, then the nodejs file descriptor and
+ # finally use stdin if none are present.
+ ipc_socket_path = os.getenv("CHRONIK_CLIENT_RUST_IPC_SOCKET", None)
ipc_read_fd = int(os.environ.get("NODE_CHANNEL_FD", 0))
+ use_stdin = "NODE_CHANNEL_FD" not in os.environ and not ipc_socket_path
max_time = time.time() + timeout
while not messages and time.time() < max_time:
- # Make sure there is some data before calling os.read, or we could
- # wait indefinitely. The use of select() with a 1 sec timeout makes us
- # read the file descriptor in a non blocking way, so we can escape the
- # loop preiodically and respect the global timeout supplied to the
- # receive_ipc_messages() function.
- r, _, _ = select.select([ipc_read_fd], [], [], 1)
- if ipc_read_fd not in r:
- continue
-
- receive_ipc_messages.ipc_rbuf += os.read(ipc_read_fd, 100)
+ if ipc_socket_path:
+ receive_ipc_messages.ipc_rbuf += IPCSocket.get(ipc_socket_path).read(1024)
+ else:
+ # Make sure there is some data before calling os.read, or we could
+ # wait indefinitely. The use of select() with a 1 sec timeout makes us
+ # read the file descriptor in a non blocking way, so we can escape the
+ # loop periodically and respect the global timeout supplied to the
+ # receive_ipc_messages() function.
+ r, _, _ = select.select([ipc_read_fd], [], [], 1)
+ if ipc_read_fd not in r:
+ continue
+ receive_ipc_messages.ipc_rbuf += os.read(ipc_read_fd, 100)
+
messages = receive_ipc_messages.ipc_rbuf.splitlines(keepends=True)
if messages[-1].endswith(b"\n"):
receive_ipc_messages.ipc_rbuf = b""
else:
receive_ipc_messages.ipc_rbuf = messages[-1]
messages = messages[:-1]
if messages:
return [
(
m.strip().decode(encoding="utf-8")
if use_stdin
else json.loads(m).strip()
)
for m in messages
]
time.sleep(0.1)
return []
def send_ipc_message(message):
s = (json.dumps(message) + "\n").encode(encoding="utf-8")
- os.write(int(os.environ.get("NODE_CHANNEL_FD", 1)), s)
+
+ if ipc_socket_path := os.getenv("CHRONIK_CLIENT_RUST_IPC_SOCKET", None):
+ IPCSocket.get(ipc_socket_path).write(s)
+ else:
+ os.write(int(os.environ.get("NODE_CHANNEL_FD", 1)), s)
def ready():
send_ipc_message({"status": "ready"})
-
-
-if os.environ.get("CHRONIK_CLIENT_RUST_IPC_SOCKET"):
- # This check be replaced in future diffs, when program will fail if SOCKET is not set
- print(os.environ.get("CHRONIK_CLIENT_RUST_IPC_SOCKET"), "\n", "SOCKET IS FOUND")
- socket_path = os.environ["CHRONIK_CLIENT_RUST_IPC_SOCKET"]
-
- try:
- ipc_socket = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
- ipc_socket.connect(socket_path)
- print("SOCKET CONNECTION ACCEPTED")
-
- except socket.error:
- exit(1)

File Metadata

Mime Type
text/x-diff
Expires
Sun, Mar 2, 10:39 (1 d, 11 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
5181610
Default Alt Text
(165 KB)

Event Timeline