Radish alpha
h
Radicle Heartwood Protocol & Stack
Radicle
Git (anonymous pull)
Log in to clone via SSH
Migrate `/v1/`, `/v1/node` routes to heartwood
xphoniex committed 3 years ago
commit acd7aeb9c9041fa40d4df4a4f2a0a0a5d65992ab
parent da55e521a179d3a56a2e3d8e1fde464078b8ccf3
7 files changed +955 -117
modified Cargo.lock
@@ -67,10 +67,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "216261ddc8289130e551ddcd5ce8a064710c0d064a4d2895c67151c92b5443f6"

[[package]]
+
name = "arrayvec"
+
version = "0.7.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6"
+

+
[[package]]
name = "async-trait"
-
version = "0.1.58"
+
version = "0.1.59"
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "1e805d94e6b5001b651426cf4cd446b1ab5f319d27bab5c644f61de0a804360c"
+
checksum = "31e6e93155431f3931513b243d371981bb2770112b370c82745a1d19d2f99364"
dependencies = [
 "proc-macro2",
 "quote",
@@ -83,12 +89,24 @@ version = "0.2.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
dependencies = [
-
 "hermit-abi",
+
 "hermit-abi 0.1.19",
 "libc",
 "winapi",
]

[[package]]
+
name = "auto_impl"
+
version = "1.0.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "8a8c1df849285fbacd587de7818cc7d13be6cd2cbcd47a04fb1801b0e2706e33"
+
dependencies = [
+
 "proc-macro-error",
+
 "proc-macro2",
+
 "quote",
+
 "syn",
+
]
+

+
[[package]]
name = "autocfg"
version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -125,6 +143,7 @@ dependencies = [
 "bitflags",
 "bytes",
 "futures-util",
+
 "headers",
 "http",
 "http-body",
 "hyper",
@@ -135,6 +154,8 @@ dependencies = [
 "percent-encoding",
 "pin-project-lite",
 "serde",
+
 "serde_json",
+
 "serde_urlencoded",
 "sync_wrapper",
 "tokio",
 "tower",
@@ -161,9 +182,9 @@ dependencies = [

[[package]]
name = "axum-server"
-
version = "0.4.2"
+
version = "0.4.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "87ba6170b61f7b086609dabcae68d2e07352539c6ef04a7c82980bdfa01a159d"
+
checksum = "8456dab8f11484979a86651da8e619b355ede5d61a160755155f6c344bd18c47"
dependencies = [
 "bytes",
 "futures-util",
@@ -216,6 +237,18 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"

[[package]]
+
name = "bitvec"
+
version = "1.0.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c"
+
dependencies = [
+
 "funty",
+
 "radium",
+
 "tap",
+
 "wyz",
+
]
+

+
[[package]]
name = "block-buffer"
version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -259,6 +292,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "572f695136211188308f16ad2ca5c851a712c464060ae6974944458eb83880ba"

[[package]]
+
name = "byte-slice-cast"
+
version = "1.2.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "c3ac9f8b63eca6fd385229b3675f6cc0dc5c8a5c8a54a59d4f52ffd670d87b0c"
+

+
[[package]]
name = "byteorder"
version = "1.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -266,15 +305,18 @@ checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"

[[package]]
name = "bytes"
-
version = "1.2.1"
+
version = "1.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "ec8a7b6a70fde80372154c65702f00a0f56f3e1c36abbc6c440484be248856db"
+
checksum = "dfb24e866b15a1af2a1b663f10c6b6b8f397a84aadb828f12e5b289ec23a3a3c"
+
dependencies = [
+
 "serde",
+
]

[[package]]
name = "cc"
-
version = "1.0.74"
+
version = "1.0.77"
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "581f5dba903aac52ea3feb5ec4810848460ee833876f1f9b0fdeab1f19091574"
+
checksum = "e9f73505338f7d905b19d18738976aae232eb46b8efc15554ffc56deb5d9ebe4"
dependencies = [
 "jobserver",
]
@@ -295,7 +337,7 @@ dependencies = [
 "js-sys",
 "num-integer",
 "num-traits",
-
 "time 0.1.44",
+
 "time 0.1.45",
 "wasm-bindgen",
 "winapi",
]
@@ -343,13 +385,13 @@ dependencies = [

[[package]]
name = "concolor"
-
version = "0.0.9"
+
version = "0.0.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "b90f9dcd9490a97db91a85ccd79e38a87e14323f0bb824659ee3274e9143ba37"
+
checksum = "318d6c16e73b3a900eb212ad6a82fc7d298c5ab8184c7a9998646455bc474a16"
dependencies = [
-
 "atty",
 "bitflags",
 "concolor-query",
+
 "is-terminal",
]

[[package]]
@@ -374,9 +416,9 @@ dependencies = [

[[package]]
name = "const-oid"
-
version = "0.9.0"
+
version = "0.9.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "722e23542a15cea1f65d4a1419c4cfd7a26706c70871a13a04238ca3f40f1661"
+
checksum = "cec318a675afcb6a1ea1d4340e2d377e56e47c266f28043ceccbf4412ddfdd3b"

[[package]]
name = "core-foundation-sys"
@@ -425,9 +467,9 @@ dependencies = [

[[package]]
name = "crossbeam-epoch"
-
version = "0.9.11"
+
version = "0.9.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "f916dfc5d356b0ed9dae65f1db9fc9770aa2851d2662b988ccf4fe3516e86348"
+
checksum = "01a9af1f4c2ef74bb8aa1f7e19706bc72d03598c8a570bb5de72243c7a9d9d5a"
dependencies = [
 "autocfg",
 "cfg-if",
@@ -438,14 +480,20 @@ dependencies = [

[[package]]
name = "crossbeam-utils"
-
version = "0.8.12"
+
version = "0.8.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "edbafec5fa1f196ca66527c1b12c2ec4745ca14b50f1ad8f9f6f720b55d11fac"
+
checksum = "4fb766fa798726286dbbb842f174001dab8abc7b627a1dd86e0b7222a95d929f"
dependencies = [
 "cfg-if",
]

[[package]]
+
name = "crunchy"
+
version = "0.2.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7"
+

+
[[package]]
name = "crypto-bigint"
version = "0.4.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -507,9 +555,9 @@ dependencies = [

[[package]]
name = "cxx"
-
version = "1.0.80"
+
version = "1.0.82"
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "6b7d4e43b25d3c994662706a1d4fcfc32aaa6afd287502c111b237093bb23f3a"
+
checksum = "d4a41a86530d0fe7f5d9ea779916b7cadd2d4f9add748b99c2c029cbbdfaf453"
dependencies = [
 "cc",
 "cxxbridge-flags",
@@ -519,9 +567,9 @@ dependencies = [

[[package]]
name = "cxx-build"
-
version = "1.0.80"
+
version = "1.0.82"
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "84f8829ddc213e2c1368e51a2564c552b65a8cb6a28f31e576270ac81d5e5827"
+
checksum = "06416d667ff3e3ad2df1cd8cd8afae5da26cf9cec4d0825040f88b5ca659a2f0"
dependencies = [
 "cc",
 "codespan-reporting",
@@ -534,15 +582,15 @@ dependencies = [

[[package]]
name = "cxxbridge-flags"
-
version = "1.0.80"
+
version = "1.0.82"
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "e72537424b474af1460806647c41d4b6d35d09ef7fe031c5c2fa5766047cc56a"
+
checksum = "820a9a2af1669deeef27cb271f476ffd196a2c4b6731336011e0ba63e2c7cf71"

[[package]]
name = "cxxbridge-macro"
-
version = "1.0.80"
+
version = "1.0.82"
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "309e4fb93eed90e1e14bea0da16b209f81813ba9fc7830c20ed151dd7bc0a4d7"
+
checksum = "a08a6e2fcc370a089ad3b4aaf54db3b1b4cee38ddabce5896b33eb693275f470"
dependencies = [
 "proc-macro2",
 "quote",
@@ -597,6 +645,17 @@ dependencies = [
]

[[package]]
+
name = "derive_more"
+
version = "0.99.17"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321"
+
dependencies = [
+
 "proc-macro2",
+
 "quote",
+
 "syn",
+
]
+

+
[[package]]
name = "dialoguer"
version = "0.10.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -624,9 +683,9 @@ dependencies = [

[[package]]
name = "digest"
-
version = "0.10.5"
+
version = "0.10.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "adfbc57365a37acbd2ebf2b64d7e69bb766e2fea813521ed536f5d0520dcf86c"
+
checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f"
dependencies = [
 "block-buffer 0.10.3",
 "const-oid",
@@ -694,7 +753,7 @@ dependencies = [
 "base16ct",
 "crypto-bigint",
 "der",
-
 "digest 0.10.5",
+
 "digest 0.10.6",
 "ff",
 "generic-array",
 "group",
@@ -721,6 +780,101 @@ dependencies = [
]

[[package]]
+
name = "errno"
+
version = "0.2.8"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "f639046355ee4f37944e44f60642c6f3a7efa3cf6b78c78a0d989a8ce6c396a1"
+
dependencies = [
+
 "errno-dragonfly",
+
 "libc",
+
 "winapi",
+
]
+

+
[[package]]
+
name = "errno-dragonfly"
+
version = "0.1.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf"
+
dependencies = [
+
 "cc",
+
 "libc",
+
]
+

+
[[package]]
+
name = "ethabi"
+
version = "18.0.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "7413c5f74cc903ea37386a8965a936cbeb334bd270862fdece542c1b2dcbc898"
+
dependencies = [
+
 "ethereum-types",
+
 "hex",
+
 "once_cell",
+
 "regex",
+
 "serde",
+
 "serde_json",
+
 "sha3",
+
 "thiserror",
+
 "uint",
+
]
+

+
[[package]]
+
name = "ethbloom"
+
version = "0.13.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "c22d4b5885b6aa2fe5e8b9329fb8d232bf739e434e6b87347c63bdd00c120f60"
+
dependencies = [
+
 "crunchy",
+
 "fixed-hash",
+
 "impl-codec",
+
 "impl-rlp",
+
 "impl-serde",
+
 "scale-info",
+
 "tiny-keccak",
+
]
+

+
[[package]]
+
name = "ethereum-types"
+
version = "0.14.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "81224dc661606574f5a0f28c9947d0ee1d93ff11c5f1c4e7272f52e8c0b5483c"
+
dependencies = [
+
 "ethbloom",
+
 "fixed-hash",
+
 "impl-codec",
+
 "impl-rlp",
+
 "impl-serde",
+
 "primitive-types",
+
 "scale-info",
+
 "uint",
+
]
+

+
[[package]]
+
name = "ethers-core"
+
version = "1.0.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "ade3e9c97727343984e1ceada4fdab11142d2ee3472d2c67027d56b1251d4f15"
+
dependencies = [
+
 "arrayvec",
+
 "bytes",
+
 "chrono",
+
 "elliptic-curve",
+
 "ethabi",
+
 "generic-array",
+
 "hex",
+
 "k256",
+
 "open-fastrlp",
+
 "rand 0.8.5",
+
 "rlp",
+
 "rlp-derive",
+
 "serde",
+
 "serde_json",
+
 "strum",
+
 "thiserror",
+
 "tiny-keccak",
+
 "unicode-xid",
+
]
+

+
[[package]]
name = "fastrand"
version = "1.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -740,6 +894,18 @@ dependencies = [
]

[[package]]
+
name = "fixed-hash"
+
version = "0.8.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "835c052cb0c08c1acf6ffd71c022172e18723949c8282f2b9f27efbc51e64534"
+
dependencies = [
+
 "byteorder",
+
 "rand 0.8.5",
+
 "rustc-hex",
+
 "static_assertions",
+
]
+

+
[[package]]
name = "fixedbitset"
version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -747,9 +913,9 @@ checksum = "37ab347416e802de484e4d03c7316c48f1ecb56574dfd4a46a80f173ce1de04d"

[[package]]
name = "flate2"
-
version = "1.0.24"
+
version = "1.0.25"
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "f82b0f4c27ad9f8bfd1f3208d882da2b09c301bc1c828fd3a00d0216d2fbbff6"
+
checksum = "a8a2db397cb1c8772f31494cb8917e48cd1e64f0fa7efac59fbd741a0a8ce841"
dependencies = [
 "crc32fast",
 "miniz_oxide",
@@ -771,6 +937,12 @@ dependencies = [
]

[[package]]
+
name = "funty"
+
version = "2.0.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c"
+

+
[[package]]
name = "futures-channel"
version = "0.3.25"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -959,6 +1131,37 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"

[[package]]
+
name = "headers"
+
version = "0.3.8"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "f3e372db8e5c0d213e0cd0b9be18be2aca3d44cf2fe30a9d46a65581cd454584"
+
dependencies = [
+
 "base64",
+
 "bitflags",
+
 "bytes",
+
 "headers-core",
+
 "http",
+
 "httpdate",
+
 "mime",
+
 "sha1",
+
]
+

+
[[package]]
+
name = "headers-core"
+
version = "0.2.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "e7f66481bfee273957b1f20485a4ff3362987f85b2c236580d81b4eb7a326429"
+
dependencies = [
+
 "http",
+
]
+

+
[[package]]
+
name = "heck"
+
version = "0.4.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9"
+

+
[[package]]
name = "hermit-abi"
version = "0.1.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -968,6 +1171,15 @@ dependencies = [
]

[[package]]
+
name = "hermit-abi"
+
version = "0.2.6"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7"
+
dependencies = [
+
 "libc",
+
]
+

+
[[package]]
name = "hex"
version = "0.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -979,7 +1191,7 @@ version = "0.12.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e"
dependencies = [
-
 "digest 0.10.5",
+
 "digest 0.10.6",
]

[[package]]
@@ -1040,9 +1252,9 @@ dependencies = [

[[package]]
name = "hyper"
-
version = "0.14.22"
+
version = "0.14.23"
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "abfba89e19b959ca163c7752ba59d737c1ceea53a5d31a149c805446fc958064"
+
checksum = "034711faac9d2166cb1baf1a2fb0b60b1f277f8492fd72176c17f3515e1abd3c"
dependencies = [
 "bytes",
 "futures-channel",
@@ -1097,10 +1309,48 @@ dependencies = [
]

[[package]]
+
name = "impl-codec"
+
version = "0.6.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "ba6a270039626615617f3f36d15fc827041df3b78c439da2cadfa47455a77f2f"
+
dependencies = [
+
 "parity-scale-codec",
+
]
+

+
[[package]]
+
name = "impl-rlp"
+
version = "0.3.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "f28220f89297a075ddc7245cd538076ee98b01f2a9c23a53a4f1105d5a322808"
+
dependencies = [
+
 "rlp",
+
]
+

+
[[package]]
+
name = "impl-serde"
+
version = "0.4.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "ebc88fc67028ae3db0c853baa36269d398d5f45b6982f95549ff5def78c935cd"
+
dependencies = [
+
 "serde",
+
]
+

+
[[package]]
+
name = "impl-trait-for-tuples"
+
version = "0.2.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "11d7a9f6330b71fea57921c9b61c47ee6e84f72d394754eff6163ae67e7395eb"
+
dependencies = [
+
 "proc-macro2",
+
 "quote",
+
 "syn",
+
]
+

+
[[package]]
name = "indexmap"
-
version = "1.9.1"
+
version = "1.9.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "10a35a97730320ffe8e2d410b5d3b69279b98d2c14bdb8b70ea89ecf7888d41e"
+
checksum = "1885e79c1fc4b10f0e172c475f458b7f7b93061064d98c3293e98c5ba0c8b399"
dependencies = [
 "autocfg",
 "hashbrown",
@@ -1137,6 +1387,38 @@ dependencies = [
]

[[package]]
+
name = "io-lifetimes"
+
version = "1.0.3"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "46112a93252b123d31a119a8d1a1ac19deac4fac6e0e8b0df58f0d4e5870e63c"
+
dependencies = [
+
 "libc",
+
 "windows-sys",
+
]
+

+
[[package]]
+
name = "iri-string"
+
version = "0.6.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "6d0586ad318a04c73acdbad33f67969519b5452c80770c4c72059a686da48a7e"
+
dependencies = [
+
 "memchr",
+
 "serde",
+
]
+

+
[[package]]
+
name = "is-terminal"
+
version = "0.4.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "927609f78c2913a6f6ac3c27a4fe87f43e2a35367c0c4b0f8265e8f49a104330"
+
dependencies = [
+
 "hermit-abi 0.2.6",
+
 "io-lifetimes",
+
 "rustix",
+
 "windows-sys",
+
]
+

+
[[package]]
name = "itertools"
version = "0.10.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1181,6 +1463,28 @@ dependencies = [
]

[[package]]
+
name = "k256"
+
version = "0.11.6"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "72c1e0b51e7ec0a97369623508396067a486bd0cbed95a2659a4b863d28cfc8b"
+
dependencies = [
+
 "cfg-if",
+
 "ecdsa",
+
 "elliptic-curve",
+
 "sha2 0.10.6",
+
 "sha3",
+
]
+

+
[[package]]
+
name = "keccak"
+
version = "0.1.3"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "3afef3b6eff9ce9d8ff9b3601125eec7f0c8cbac7abd14f355d053fa56c98768"
+
dependencies = [
+
 "cpufeatures",
+
]
+

+
[[package]]
name = "lazy_static"
version = "1.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1221,9 +1525,9 @@ dependencies = [

[[package]]
name = "libm"
-
version = "0.2.5"
+
version = "0.2.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "292a948cd991e376cf75541fe5b97a1081d713c618b4f1b9500f8844e49eb565"
+
checksum = "348108ab3fba42ec82ff6e9564fc4ca0247bdccdc68dd8af9764bbc79c3c8ffb"

[[package]]
name = "libz-sys"
@@ -1253,6 +1557,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f"

[[package]]
+
name = "linux-raw-sys"
+
version = "0.1.3"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "8f9f08d8963a6c613f4b1a78f4f4a4dbfadf8e6545b2d72861731e4858b8b47f"
+

+
[[package]]
name = "log"
version = "0.4.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1284,9 +1594,9 @@ checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"

[[package]]
name = "memoffset"
-
version = "0.6.5"
+
version = "0.7.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce"
+
checksum = "5de893c32cde5f383baa4c04c5d6dbdd735cfd4a794b0debdb2bb1b421da5ff4"
dependencies = [
 "autocfg",
]
@@ -1305,9 +1615,9 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"

[[package]]
name = "miniz_oxide"
-
version = "0.5.4"
+
version = "0.6.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "96590ba8f175222643a85693f33d26e9c8a015f599c216509b1a6894af675d34"
+
checksum = "b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa"
dependencies = [
 "adler",
]
@@ -1396,9 +1706,9 @@ dependencies = [

[[package]]
name = "num-bigint-dig"
-
version = "0.8.1"
+
version = "0.8.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "566d173b2f9406afbc5510a90925d5a2cd80cae4605631f1212303df265de011"
+
checksum = "2399c9463abc5f909349d8aa9ba080e0b88b3ce2885389b60b993f39b1a56905"
dependencies = [
 "byteorder",
 "lazy_static",
@@ -1444,20 +1754,11 @@ dependencies = [

[[package]]
name = "num_cpus"
-
version = "1.13.1"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "19e64526ebdee182341572e50e9ad03965aa510cd94427a4549448f285e957a1"
-
dependencies = [
-
 "hermit-abi",
-
 "libc",
-
]
-

-
[[package]]
-
name = "num_threads"
-
version = "0.1.6"
+
version = "1.14.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "2819ce041d2ee131036f4fc9d6ae7ae125a3a40e97ba64d04fe799ad9dabbb44"
+
checksum = "f6058e64324c71e02bc2b150e4f3bc8286db6c83092132ffa3f6b1eab0f9def5"
dependencies = [
+
 "hermit-abi 0.1.19",
 "libc",
]

@@ -1491,13 +1792,38 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5"

[[package]]
+
name = "open-fastrlp"
+
version = "0.1.4"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "786393f80485445794f6043fd3138854dd109cc6c4bd1a6383db304c9ce9b9ce"
+
dependencies = [
+
 "arrayvec",
+
 "auto_impl",
+
 "bytes",
+
 "ethereum-types",
+
 "open-fastrlp-derive",
+
]
+

+
[[package]]
+
name = "open-fastrlp-derive"
+
version = "0.1.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "003b2be5c6c53c1cfeb0a238b8a1c3915cd410feb684457a36c10038f764bb1c"
+
dependencies = [
+
 "bytes",
+
 "proc-macro2",
+
 "quote",
+
 "syn",
+
]
+

+
[[package]]
name = "os_pipe"
-
version = "1.1.1"
+
version = "1.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "0dceb7e43f59c35ee1548045b2c72945a5a3bb6ce6d6f07cdc13dc8f6bc4930a"
+
checksum = "c6a252f1f8c11e84b3ab59d7a488e48e4478a93937e027076638c49536204639"
dependencies = [
 "libc",
-
 "winapi",
+
 "windows-sys",
]

[[package]]
@@ -1538,12 +1864,38 @@ dependencies = [
]

[[package]]
+
name = "parity-scale-codec"
+
version = "3.2.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "366e44391a8af4cfd6002ef6ba072bae071a96aafca98d7d448a34c5dca38b6a"
+
dependencies = [
+
 "arrayvec",
+
 "bitvec",
+
 "byte-slice-cast",
+
 "impl-trait-for-tuples",
+
 "parity-scale-codec-derive",
+
 "serde",
+
]
+

+
[[package]]
+
name = "parity-scale-codec-derive"
+
version = "3.1.3"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "9299338969a3d2f491d65f140b00ddec470858402f888af98e8642fb5e8965cd"
+
dependencies = [
+
 "proc-macro-crate",
+
 "proc-macro2",
+
 "quote",
+
 "syn",
+
]
+

+
[[package]]
name = "pbkdf2"
version = "0.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "83a0692ec44e4cf1ef28ca317f14f8f07da2d95ec3fa01f86e4467b725e60917"
dependencies = [
-
 "digest 0.10.5",
+
 "digest 0.10.6",
]

[[package]]
@@ -1642,9 +1994,9 @@ dependencies = [

[[package]]
name = "ppv-lite86"
-
version = "0.2.16"
+
version = "0.2.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872"
+
checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"

[[package]]
name = "pretty_assertions"
@@ -1659,6 +2011,31 @@ dependencies = [
]

[[package]]
+
name = "primitive-types"
+
version = "0.12.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "9f3486ccba82358b11a77516035647c34ba167dfa53312630de83b12bd4f3d66"
+
dependencies = [
+
 "fixed-hash",
+
 "impl-codec",
+
 "impl-rlp",
+
 "impl-serde",
+
 "scale-info",
+
 "uint",
+
]
+

+
[[package]]
+
name = "proc-macro-crate"
+
version = "1.2.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "eda0fc3b0fb7c975631757e14d9049da17374063edb6ebbcbc54d880d4fe94e9"
+
dependencies = [
+
 "once_cell",
+
 "thiserror",
+
 "toml",
+
]
+

+
[[package]]
name = "proc-macro-error"
version = "1.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1755,7 +2132,7 @@ dependencies = [
 "sqlite",
 "tempfile",
 "thiserror",
-
 "uuid 1.2.1",
+
 "uuid 1.2.2",
 "zeroize",
]

@@ -1864,11 +2241,16 @@ dependencies = [
 "anyhow",
 "axum",
 "axum-server",
+
 "ethers-core",
 "flate2",
 "hyper",
 "lexopt",
 "radicle",
+
 "serde",
+
 "serde_json",
+
 "siwe",
 "thiserror",
+
 "time 0.3.17",
 "tokio",
 "tower-http",
 "tracing",
@@ -1941,6 +2323,12 @@ dependencies = [
]

[[package]]
+
name = "radium"
+
version = "0.7.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09"
+

+
[[package]]
name = "rand"
version = "0.7.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -2013,11 +2401,10 @@ dependencies = [

[[package]]
name = "rayon"
-
version = "1.5.3"
+
version = "1.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "bd99e5772ead8baa5215278c9b15bf92087709e9c1b2d1f97cdb5a183c933a7d"
+
checksum = "1e060280438193c554f654141c9ea9417886713b7acd75974c85b18a69a88e0b"
dependencies = [
-
 "autocfg",
 "crossbeam-deque",
 "either",
 "rayon-core",
@@ -2025,9 +2412,9 @@ dependencies = [

[[package]]
name = "rayon-core"
-
version = "1.9.3"
+
version = "1.10.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "258bcdb5ac6dad48491bb2992db6b7cf74878b0384908af124823d118c99683f"
+
checksum = "cac410af5d00ab6884528b4ab69d1e8e146e8d471201800fa1b4524126de6ad3"
dependencies = [
 "crossbeam-channel",
 "crossbeam-deque",
@@ -2046,9 +2433,9 @@ dependencies = [

[[package]]
name = "regex"
-
version = "1.6.0"
+
version = "1.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "4c4eb3267174b8c6c2f654116623910a0fef09c4753f8dd83db29c48a0df988b"
+
checksum = "e076559ef8e241f2ae3479e36f97bd5741c0330689e217ad51ce2c76808b868a"
dependencies = [
 "aho-corasick",
 "memchr",
@@ -2066,9 +2453,9 @@ dependencies = [

[[package]]
name = "regex-syntax"
-
version = "0.6.27"
+
version = "0.6.28"
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "a3f87b73ce11b1619a3c6332f45341e0047173771e8b8b73f87bfeefb7b56244"
+
checksum = "456c603be3e8d448b072f410900c09faf164fbce2d480456f50eea6e25f9c848"

[[package]]
name = "remove_dir_all"
@@ -2081,9 +2468,9 @@ dependencies = [

[[package]]
name = "rfc6979"
-
version = "0.3.0"
+
version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "88c86280f057430a52f4861551b092a01b419b8eacefc7c995eacb9dc132fe32"
+
checksum = "7743f17af12fa0b03b803ba12cd6a8d9483a587e89c69445e3909655c0b9fabb"
dependencies = [
 "crypto-bigint",
 "hmac",
@@ -2091,13 +2478,34 @@ dependencies = [
]

[[package]]
+
name = "rlp"
+
version = "0.5.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "bb919243f34364b6bd2fc10ef797edbfa75f33c252e7998527479c6d6b47e1ec"
+
dependencies = [
+
 "bytes",
+
 "rustc-hex",
+
]
+

+
[[package]]
+
name = "rlp-derive"
+
version = "0.1.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "e33d7b2abe0c340d8797fe2907d3f20d3b5ea5908683618bfe80df7f621f672a"
+
dependencies = [
+
 "proc-macro2",
+
 "quote",
+
 "syn",
+
]
+

+
[[package]]
name = "rsa"
-
version = "0.7.1"
+
version = "0.7.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "b0ecc3307be66bfb3574577895555bacfb9a37a8d5cd959444b72ff02495c618"
+
checksum = "094052d5470cbcef561cb848a7209968c9f12dfa6d668f4bca048ac5de51099c"
dependencies = [
 "byteorder",
-
 "digest 0.10.5",
+
 "digest 0.10.6",
 "num-bigint-dig",
 "num-integer",
 "num-iter",
@@ -2112,6 +2520,32 @@ dependencies = [
]

[[package]]
+
name = "rustc-hex"
+
version = "2.1.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "3e75f6a532d0fd9f7f13144f392b6ad56a32696bfcd9c78f797f16bbb6f072d6"
+

+
[[package]]
+
name = "rustix"
+
version = "0.36.4"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "cb93e85278e08bb5788653183213d3a60fc242b10cb9be96586f5a73dcb67c23"
+
dependencies = [
+
 "bitflags",
+
 "errno",
+
 "io-lifetimes",
+
 "libc",
+
 "linux-raw-sys",
+
 "windows-sys",
+
]
+

+
[[package]]
+
name = "rustversion"
+
version = "1.0.9"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "97477e48b4cf8603ad5f7aaf897467cf42ab4218a38ef76fb14c2d6773a6d6a8"
+

+
[[package]]
name = "ryu"
version = "1.0.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -2127,6 +2561,30 @@ dependencies = [
]

[[package]]
+
name = "scale-info"
+
version = "2.3.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "88d8a765117b237ef233705cc2cc4c6a27fccd46eea6ef0c8c6dae5f3ef407f8"
+
dependencies = [
+
 "cfg-if",
+
 "derive_more",
+
 "parity-scale-codec",
+
 "scale-info-derive",
+
]
+

+
[[package]]
+
name = "scale-info-derive"
+
version = "2.3.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "cdcd47b380d8c4541044e341dcd9475f55ba37ddc50c908d945fc036a8642496"
+
dependencies = [
+
 "proc-macro-crate",
+
 "proc-macro2",
+
 "quote",
+
 "syn",
+
]
+

+
[[package]]
name = "scopeguard"
version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -2166,18 +2624,18 @@ dependencies = [

[[package]]
name = "serde"
-
version = "1.0.147"
+
version = "1.0.148"
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "d193d69bae983fc11a79df82342761dfbf28a99fc8d203dca4c3c1b590948965"
+
checksum = "e53f64bb4ba0191d6d0676e1b141ca55047d83b74f5607e6d8eb88126c52c2dc"
dependencies = [
 "serde_derive",
]

[[package]]
name = "serde_derive"
-
version = "1.0.147"
+
version = "1.0.148"
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "4f1d362ca8fc9c3e3a7484440752472d68a6caa98f1ab81d99b5dfe517cec852"
+
checksum = "a55492425aa53521babf6137309e7d34c20bbfbbfcfe2c7f3a047fd1f6b92c0c"
dependencies = [
 "proc-macro2",
 "quote",
@@ -2186,9 +2644,9 @@ dependencies = [

[[package]]
name = "serde_json"
-
version = "1.0.87"
+
version = "1.0.89"
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "6ce777b7b150d76b9cf60d28b55f5847135a003f7d7350c6be7a773508ce7d45"
+
checksum = "020ff22c755c2ed3f8cf162dbb41a7268d934702f3ed3631656ea597e08fc3db"
dependencies = [
 "indexmap",
 "itoa",
@@ -2197,6 +2655,18 @@ dependencies = [
]

[[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 = "serde_yaml"
version = "0.8.26"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -2209,6 +2679,17 @@ dependencies = [
]

[[package]]
+
name = "sha1"
+
version = "0.10.5"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "f04293dc80c3993519f2d7f6f511707ee7094fe0c6d3406feb330cdb3540eba3"
+
dependencies = [
+
 "cfg-if",
+
 "cpufeatures",
+
 "digest 0.10.6",
+
]
+

+
[[package]]
name = "sha2"
version = "0.9.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -2229,7 +2710,17 @@ checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0"
dependencies = [
 "cfg-if",
 "cpufeatures",
-
 "digest 0.10.5",
+
 "digest 0.10.6",
+
]
+

+
[[package]]
+
name = "sha3"
+
version = "0.10.6"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "bdf0c33fae925bdc080598b84bc15c55e7b9a4a43b3c704da051f977469691c9"
+
dependencies = [
+
 "digest 0.10.6",
+
 "keccak",
]

[[package]]
@@ -2253,7 +2744,7 @@ version = "1.6.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "74233d3b3b2f6d4b006dc19dee745e73e2a6bfb6f93607cd3b02bd5b00797d7c"
dependencies = [
-
 "digest 0.10.5",
+
 "digest 0.10.6",
 "rand_core 0.6.4",
]

@@ -2264,6 +2755,22 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de"

[[package]]
+
name = "siwe"
+
version = "0.5.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "ec4cc2eafb2354c1aeaeac5f53b7726ca4ea5ad16314a0b5ebacb6676f599c2b"
+
dependencies = [
+
 "hex",
+
 "http",
+
 "iri-string",
+
 "k256",
+
 "rand 0.8.5",
+
 "sha3",
+
 "thiserror",
+
 "time 0.3.17",
+
]
+

+
[[package]]
name = "slab"
version = "0.4.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -2289,9 +2796,9 @@ dependencies = [

[[package]]
name = "snapbox"
-
version = "0.4.1"
+
version = "0.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "827c00e91b15e2674d8a5270bae91f898693cbf9561cbb58d8eaa31974597293"
+
checksum = "efbd7b250c7243273b5aec4ca366fced84ad716d110bb7baae4814678952ebde"
dependencies = [
 "concolor",
 "libc",
@@ -2299,7 +2806,7 @@ dependencies = [
 "os_pipe",
 "snapbox-macros",
 "wait-timeout",
-
 "winapi",
+
 "windows-sys",
 "yansi",
]

@@ -2409,6 +2916,34 @@ dependencies = [
]

[[package]]
+
name = "static_assertions"
+
version = "1.1.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
+

+
[[package]]
+
name = "strum"
+
version = "0.24.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "063e6045c0e62079840579a7e47a355ae92f60eb74daaf156fb1e84ba164e63f"
+
dependencies = [
+
 "strum_macros",
+
]
+

+
[[package]]
+
name = "strum_macros"
+
version = "0.24.3"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "1e385be0d24f186b4ce2f9982191e7101bb737312ad61c1f2f984f34bcf85d59"
+
dependencies = [
+
 "heck",
+
 "proc-macro2",
+
 "quote",
+
 "rustversion",
+
 "syn",
+
]
+

+
[[package]]
name = "subtle"
version = "2.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -2416,9 +2951,9 @@ checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601"

[[package]]
name = "syn"
-
version = "1.0.103"
+
version = "1.0.104"
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "a864042229133ada95abf3b54fdc62ef5ccabe9515b64717bcb9a1919e59445d"
+
checksum = "4ae548ec36cf198c0ef7710d3c230987c2d6d7bd98ad6edc0274462724c585ce"
dependencies = [
 "proc-macro2",
 "quote",
@@ -2444,6 +2979,12 @@ dependencies = [
]

[[package]]
+
name = "tap"
+
version = "1.0.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369"
+

+
[[package]]
name = "tempfile"
version = "3.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -2507,9 +3048,9 @@ dependencies = [

[[package]]
name = "time"
-
version = "0.1.44"
+
version = "0.1.45"
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "6db9e6914ab8b1ae1c260a4ae7a49b6c5611b40328a735b21862567685e73255"
+
checksum = "1b797afad3f312d1c66a56d11d0316f916356d11bd158fbc6ca6389ff6bf805a"
dependencies = [
 "libc",
 "wasi 0.10.0+wasi-snapshot-preview1",
@@ -2518,13 +3059,11 @@ dependencies = [

[[package]]
name = "time"
-
version = "0.3.16"
+
version = "0.3.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "0fab5c8b9980850e06d92ddbe3ab839c062c801f3927c0fb8abd6fc8e918fbca"
+
checksum = "a561bf4617eebd33bca6434b988f39ed798e527f51a1e797d0ee4f61c0a38376"
dependencies = [
 "itoa",
-
 "libc",
-
 "num_threads",
 "serde",
 "time-core",
 "time-macros",
@@ -2538,9 +3077,9 @@ checksum = "2e153e1f1acaef8acc537e68b44906d2db6436e2b35ac2c6b42640fff91f00fd"

[[package]]
name = "time-macros"
-
version = "0.2.5"
+
version = "0.2.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "65bb801831d812c562ae7d2bfb531f26e66e4e1f6b17307ba4149c5064710e5b"
+
checksum = "d967f99f534ca7e495c575c62638eebc2898a8c84c119b89e250477bc4ba16b2"
dependencies = [
 "time-core",
]
@@ -2552,6 +3091,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6ec32dde57efb15c035ac074118d7f32820451395f28cb0524a01d4e94983b26"

[[package]]
+
name = "tiny-keccak"
+
version = "2.0.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237"
+
dependencies = [
+
 "crunchy",
+
]
+

+
[[package]]
name = "tinyvec"
version = "1.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -2568,9 +3116,9 @@ checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c"

[[package]]
name = "tokio"
-
version = "1.21.2"
+
version = "1.22.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "a9e03c497dc955702ba729190dc4aac6f2a0ce97f913e5b1b5912fc5039d9099"
+
checksum = "d76ce4a75fb488c605c54bf610f221cea8b0dafb53333c1a67e8ee199dcd2ae3"
dependencies = [
 "autocfg",
 "bytes",
@@ -2610,6 +3158,15 @@ dependencies = [
]

[[package]]
+
name = "toml"
+
version = "0.5.9"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "8d82e1a7758622a465f8cee077614c73484dac5b836c02ff6a40d5d1010324d7"
+
dependencies = [
+
 "serde",
+
]
+

+
[[package]]
name = "toml_datetime"
version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -2730,7 +3287,7 @@ version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c08aacc136419ba433b3f9bfd434a1bb62fe385328935e6ac11d952122b8a8cb"
dependencies = [
-
 "time 0.3.16",
+
 "time 0.3.17",
 "tracing",
 "tracing-core",
 "tracing-subscriber",
@@ -2762,9 +3319,9 @@ checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642"

[[package]]
name = "trycmd"
-
version = "0.14.4"
+
version = "0.14.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "e44a0ef010323b99f3b8fc13c6cac2e25df2e3bf5daacea5abef7bf5bd841bb8"
+
checksum = "e381af441e13a3635303d26769620a9454aef05ec3303711efc3f1dd785a33af"
dependencies = [
 "glob",
 "humantime",
@@ -2783,6 +3340,18 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987"

[[package]]
+
name = "uint"
+
version = "0.9.4"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "a45526d29728d135c2900b0d30573fe3ee79fceb12ef534c7bb30e810a91b601"
+
dependencies = [
+
 "byteorder",
+
 "crunchy",
+
 "hex",
+
 "static_assertions",
+
]
+

+
[[package]]
name = "unicode-bidi"
version = "0.3.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -2838,9 +3407,9 @@ dependencies = [

[[package]]
name = "uuid"
-
version = "1.2.1"
+
version = "1.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "feb41e78f93363bb2df8b0e86a2ca30eed7806ea16ea0c790d757cf93f79be83"
+
checksum = "422ee0de9031b5b948b97a8fc04e3aa35230001a722ddd27943e0be31564ce4c"
dependencies = [
 "getrandom 0.2.8",
 "rand 0.8.5",
@@ -3045,6 +3614,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f40009d85759725a34da6d89a94e63d7bdc50a862acf0dbc7c8e488f1edcb6f5"

[[package]]
+
name = "wyz"
+
version = "0.5.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed"
+
dependencies = [
+
 "tap",
+
]
+

+
[[package]]
name = "yaml-rust"
version = "0.4.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
modified radicle-httpd/Cargo.toml
@@ -16,17 +16,22 @@ logfmt = [

[dependencies]
anyhow = { version = "1" }
+
axum = { version = "0.5.16", default-features = false, features = ["json", "headers", "query"] }
+
axum-server = { version = "0.4.2", default-features = false }
+
ethers-core = { version = "1.0" }
flate2 = { version = "1" }
+
hyper = { version = "0.14.17", default-features = false }
lexopt = { version = "0.2.1" }
+
serde = { version = "1", features = ["derive"] }
+
serde_json = { version = "1", features = ["preserve_order"] }
+
siwe = { version = "0.5" }
thiserror = { version = "1" }
+
time = { version = "0.3.17" }
tokio = { version = "1.21", default-features = false, features = ["macros", "rt-multi-thread"] }
+
tower-http = { version = "0.3.4", default-features = false, features = ["trace", "cors"] }
tracing = { version = "0.1.37", default-features = false, features = ["std", "log"] }
-
tracing-subscriber = { version = "0.3", default-features = false, features = ["std", "ansi", "fmt"] }
tracing-logfmt = { version = "0.2", optional = true }
-
axum = { version = "0.5.16", default-features = false }
-
axum-server = { version = "0.4.2", default-features = false }
-
hyper = { version = "0.14.17", default-features = false }
-
tower-http = { version = "0.3.4", default-features = false, features = ["trace"] }
+
tracing-subscriber = { version = "0.3", default-features = false, features = ["std", "ansi", "fmt"] }

[dependencies.radicle]
path = "../radicle"
added radicle-httpd/src/api.rs
@@ -0,0 +1,119 @@
+
use std::collections::HashMap;
+
use std::sync::Arc;
+
use std::time::Duration;
+

+
use axum::body::{Body, BoxBody};
+
use axum::http::header::{AUTHORIZATION, CONTENT_TYPE};
+
use axum::http::Method;
+
use axum::response::{IntoResponse, Json};
+
use axum::routing::get;
+
use axum::{Extension, Router};
+
use hyper::http::{Request, Response};
+
use serde::{Deserialize, Serialize};
+
use serde_json::json;
+
use tokio::sync::RwLock;
+
use tower_http::cors::{self, CorsLayer};
+
use tower_http::trace::TraceLayer;
+
use tracing::Span;
+

+
use radicle::{Profile, Storage};
+

+
mod auth;
+
mod v1;
+

+
pub const VERSION: &str = env!("CARGO_PKG_VERSION");
+

+
/// Identifier for sessions
+
type SessionId = String;
+

+
#[derive(Clone)]
+
pub struct Context {
+
    profile: Arc<Profile>,
+
    sessions: Arc<RwLock<HashMap<SessionId, auth::AuthState>>>,
+
}
+

+
impl Context {
+
    pub fn new(profile: Arc<Profile>) -> Self {
+
        Self {
+
            profile,
+
            sessions: Default::default(),
+
        }
+
    }
+

+
    fn storage(&self) -> &Storage {
+
        &self.profile.storage
+
    }
+
}
+

+
pub fn router(ctx: Context) -> Router {
+
    let root_router = Router::new()
+
        .route("/", get(root_handler))
+
        .layer(Extension(ctx.clone()));
+

+
    Router::new()
+
        .merge(root_router)
+
        .merge(v1::router(ctx))
+
        .layer(
+
            CorsLayer::new()
+
                .max_age(Duration::from_secs(86400))
+
                .allow_origin(cors::Any)
+
                .allow_methods([Method::GET, Method::POST, Method::PUT])
+
                .allow_headers([CONTENT_TYPE, AUTHORIZATION]),
+
        )
+
        .layer(
+
            TraceLayer::new_for_http()
+
                .make_span_with(|request: &Request<Body>| {
+
                    tracing::info_span!(
+
                        "request",
+
                        method = %request.method(),
+
                        uri = %request.uri(),
+
                        status = tracing::field::Empty,
+
                        latency = tracing::field::Empty,
+
                    )
+
                })
+
                .on_response(
+
                    |response: &Response<BoxBody>, latency: Duration, span: &Span| {
+
                        span.record("status", &tracing::field::debug(response.status()));
+
                        span.record("latency", &tracing::field::debug(latency));
+

+
                        tracing::info!("Processed");
+
                    },
+
                ),
+
        )
+
}
+

+
async fn root_handler(Extension(ctx): Extension<Context>) -> impl IntoResponse {
+
    let response = json!({
+
        "message": "Welcome!",
+
        "service": "radicle-httpd",
+
        "version": format!("{}-{}", VERSION, env!("GIT_HEAD")),
+
        "node": { "id": ctx.profile.public_key },
+
        "path": "/",
+
        "links": [
+
            {
+
                "href": "/v1/projects",
+
                "rel": "projects",
+
                "type": "GET"
+
            },
+
            {
+
                "href": "/v1/node",
+
                "rel": "node",
+
                "type": "GET"
+
            },
+
            {
+
                "href": "/v1/delegates/:urn/projects",
+
                "rel": "projects",
+
                "type": "GET"
+
            }
+
        ]
+
    });
+

+
    Json(response)
+
}
+

+
#[derive(Serialize, Deserialize, Clone)]
+
#[serde(rename_all = "kebab-case")]
+
pub struct PaginationQuery {
+
    pub page: Option<usize>,
+
    pub per_page: Option<usize>,
+
}
added radicle-httpd/src/api/auth.rs
@@ -0,0 +1,90 @@
+
use std::convert::TryFrom;
+
use std::str::FromStr;
+

+
use ethers_core::types::{Signature, H160};
+
use serde::{Deserialize, Serialize, Serializer};
+
use time::OffsetDateTime;
+

+
use crate::error::Error;
+

+
#[derive(Clone)]
+
pub struct DateTime(OffsetDateTime);
+

+
impl Serialize for DateTime {
+
    fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
+
        serializer.serialize_str(&format!("{}", self.0))
+
    }
+
}
+

+
#[derive(Deserialize, Serialize)]
+
pub struct AuthRequest {
+
    pub message: String,
+
    #[serde(deserialize_with = "deserialize_signature")]
+
    pub signature: Signature,
+
}
+

+
fn deserialize_signature<'de, D>(deserializer: D) -> Result<Signature, D::Error>
+
where
+
    D: serde::de::Deserializer<'de>,
+
{
+
    let buf = String::deserialize(deserializer)?;
+
    Signature::from_str(&buf).map_err(serde::de::Error::custom)
+
}
+

+
pub enum AuthState {
+
    Authorized(Session),
+
    Unauthorized {
+
        nonce: String,
+
        expiration_time: DateTime,
+
    },
+
}
+

+
// We copy the implementation of siwe::Message here to derive Serialization and Debug
+
#[derive(Clone, Serialize)]
+
#[serde(rename_all = "camelCase")]
+
pub struct Session {
+
    pub domain: String,
+
    pub address: H160,
+
    pub statement: Option<String>,
+
    pub uri: String,
+
    pub version: u64,
+
    pub chain_id: u64,
+
    pub nonce: String,
+
    pub issued_at: DateTime,
+
    pub expiration_time: Option<DateTime>,
+
    pub resources: Vec<String>,
+
}
+

+
impl TryFrom<siwe::Message> for Session {
+
    type Error = Error;
+

+
    fn try_from(message: siwe::Message) -> Result<Session, Error> {
+
        Ok(Session {
+
            domain: message.domain.host().to_string(),
+
            address: H160(message.address),
+
            statement: None,
+
            uri: message.uri.to_string(),
+
            version: message.version as u64,
+
            chain_id: message.chain_id,
+
            nonce: message.nonce,
+
            issued_at: DateTime(message.issued_at.as_ref().to_owned()),
+
            expiration_time: message
+
                .expiration_time
+
                .map(|x| DateTime(x.as_ref().to_owned())),
+
            resources: message.resources.iter().map(|r| r.to_string()).collect(),
+
        })
+
    }
+
}
+

+
#[cfg(test)]
+
mod test {
+
    #[test]
+
    fn test_auth_request_de() {
+
        let json = serde_json::json!({
+
            "message": "Hello World!",
+
            "signature": "20096c6ed2bcccb88c9cafbbbbda7a5a3cff6d0ca318c07faa58464083ca40a92f899fbeb26a4c763a7004b13fd0f1ba6c321d4e3a023e30f63c40d4154b99a41c"
+
        });
+

+
        let _req: super::AuthRequest = serde_json::from_value(json).unwrap();
+
    }
+
}
added radicle-httpd/src/api/v1.rs
@@ -0,0 +1,11 @@
+
mod node;
+

+
use axum::Router;
+

+
use crate::api::Context;
+

+
pub fn router(ctx: Context) -> Router {
+
    let routes = Router::new().merge(node::router(ctx));
+

+
    Router::new().nest("/v1", routes)
+
}
added radicle-httpd/src/api/v1/node.rs
@@ -0,0 +1,26 @@
+
use axum::response::IntoResponse;
+
use axum::routing::get;
+
use axum::{Extension, Json, Router};
+
use serde_json::json;
+

+
use radicle::node::NodeId;
+

+
use crate::api::Context;
+

+
pub fn router(ctx: Context) -> Router {
+
    let node_id = ctx.profile.public_key;
+

+
    Router::new()
+
        .route("/node", get(node_handler))
+
        .layer(Extension(node_id))
+
}
+

+
/// Return the node id for the node identity.
+
/// `GET /node`
+
async fn node_handler(Extension(node_id): Extension<NodeId>) -> impl IntoResponse {
+
    let response = json!({
+
        "id": node_id.to_string(),
+
    });
+

+
    Json(response)
+
}
modified radicle-httpd/src/lib.rs
@@ -32,6 +32,8 @@ use radicle::profile::Profile;

use error::Error;

+
mod api;
+

pub const VERSION: &str = env!("CARGO_PKG_VERSION");

#[derive(Debug, Clone)]
@@ -39,7 +41,7 @@ pub struct Options {
    pub listen: net::SocketAddr,
}

-
/// Run the Git Server.
+
/// Run the Server.
pub async fn run(options: Options) -> anyhow::Result<()> {
    let git_version = Command::new("git")
        .arg("version")
@@ -48,12 +50,12 @@ pub async fn run(options: Options) -> anyhow::Result<()> {
        .stdout;
    tracing::info!("{}", str::from_utf8(&git_version)?.trim());

-
    let profile = radicle::Profile::load()?;
+
    let profile = Arc::new(radicle::Profile::load()?);
    tracing::info!("using radicle home at {}", profile.home.display());

-
    let app = Router::new()
+
    let git_router = Router::new()
        .route("/:project/*request", any(git_handler))
-
        .layer(Extension(Arc::new(profile)))
+
        .layer(Extension(profile.clone()))
        .layer(
            TraceLayer::new_for_http()
                .make_span_with(|request: &Request<Body>| {
@@ -73,11 +75,18 @@ pub async fn run(options: Options) -> anyhow::Result<()> {
                        tracing::info!("Processed");
                    },
                ),
-
        )
-
        .into_make_service_with_connect_info::<SocketAddr>();
+
        );
+

+
    let ctx = api::Context::new(profile);
+
    let api_router = api::router(ctx);

    tracing::info!("listening on http://{}", options.listen);

+
    let app = Router::new()
+
        .merge(git_router)
+
        .nest("/api", api_router)
+
        .into_make_service_with_connect_info::<SocketAddr>();
+

    axum::Server::bind(&options.listen)
        .serve(app)
        .await