diff --git a/Cargo.lock b/Cargo.lock index 5602d418..170cabab 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3,19 +3,34 @@ version = 3 [[package]] -name = "aho-corasick" +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 = "43f6cb1bf222025340178f382c426f13757b2960e89779dfcb319c32542a5a41" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + +[[package]] +name = "aho-corasick" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0" dependencies = [ "memchr", ] [[package]] name = "aluvm" -version = "0.10.5" +version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49fd60657e5d59425e897145c167b2250238aaeaa825a6741249d120b87871bf" +checksum = "e624a600eaf54f24da48e42604ffb0fbd543808a078e5081a9441243077233df" dependencies = [ "amplify", "baid58", @@ -23,6 +38,7 @@ dependencies = [ "half", "paste", "ripemd", + "serde", "sha2", "strict_encoding", "strict_types", @@ -31,12 +47,12 @@ dependencies = [ [[package]] name = "amplify" -version = "4.0.0" +version = "4.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26966af46e0d200e8bf2b7f16230997c1c3f2d141bc27ccc091c012ed527b58" +checksum = "8629db306c0bbeb0a402e2918bdcf0026b5ddb24c46460f3bf5410b350d98710" dependencies = [ "amplify_apfloat", - "amplify_derive 3.0.1", + "amplify_derive", "amplify_num", "amplify_syn", "ascii", @@ -44,7 +60,7 @@ dependencies = [ "serde_json", "serde_yaml", "stringly_conversions", - "toml 0.5.11", + "toml", "wasm-bindgen", ] @@ -60,21 +76,9 @@ dependencies = [ [[package]] name = "amplify_derive" -version = "3.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c87df0f28e6eb1f2d355f29ba6793fa9ca643967528609608d5cbd70bd68f9d1" -dependencies = [ - "amplify_syn", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "amplify_derive" -version = "4.0.0-alpha.6" +version = "4.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01c4835e964725149d7961ec5af2ca1302f6f68c8c738b4acb06185f596c3333" +checksum = "759dcbfaf94d838367a86d493ec34ccc8aa6fe365cb7880d6bf89006de24d9c1" dependencies = [ "amplify_syn", "proc-macro2", @@ -119,30 +123,29 @@ dependencies = [ [[package]] name = "anstream" -version = "0.3.2" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ca84f3628370c59db74ee214b3263d58f9aadd9b4fe7e711fd87dc452b7f163" +checksum = "2ab91ebe16eb252986481c5b62f6098f3b698a45e34b5b98200cf20dd2484a44" dependencies = [ "anstyle", "anstyle-parse", "anstyle-query", "anstyle-wincon", "colorchoice", - "is-terminal", "utf8parse", ] [[package]] name = "anstyle" -version = "1.0.1" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a30da5c5f2d5e72842e00bcb57657162cdabef0931f40e2deb9b4140440cecd" +checksum = "7079075b41f533b8c61d2a4d073c4676e1f8b249ff94a393b0595db304e0dd87" [[package]] name = "anstyle-parse" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "938874ff5980b03a87c5524b3ae5b59cf99b1d6bc836848df7bc5ada9643c333" +checksum = "317b9a89c1868f5ea6ff1d9539a69f45dffc21ce321ac1fd1160dfa48c8e2140" dependencies = [ "utf8parse", ] @@ -158,9 +161,9 @@ dependencies = [ [[package]] name = "anstyle-wincon" -version = "1.0.1" +version = "3.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "180abfa45703aebe0093f79badacc01b8fd4ea2e35118747e5811127f926e188" +checksum = "f0699d10d2f4d628a98ee7b57b289abbc98ff3bad977cb3152709d4bf2330628" dependencies = [ "anstyle", "windows-sys", @@ -193,6 +196,21 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" +[[package]] +name = "backtrace" +version = "0.3.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837" +dependencies = [ + "addr2line", + "cc", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", +] + [[package]] name = "baid58" version = "0.4.4" @@ -213,21 +231,15 @@ checksum = "6107fe1be6682a68940da878d9e9f5e90ca5745b3dec9fd1bb393c8777d4f581" [[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.2" +version = "0.21.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "604178f6c5c21f02dc555784810edfb88d34ac2c73b2eae109655649ee73ce3d" +checksum = "9ba43ea6f343b788c8764558649e08df62f86c6ef251fdaeb1ffd010a9ae50a2" [[package]] name = "base85" -version = "1.2.1" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "affba8f9496cbbacbefe5b9f3a0a9fac6cc48f6951e7331e293b241e67bdcf06" +checksum = "36915bbaca237c626689b5bd14d02f2ba7a5a359d30a2a08be697392e3718079" dependencies = [ "thiserror", ] @@ -239,18 +251,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d86b93f97252c47b41663388e6d155714a9d0c398b99f1005cbc5f978b29f445" [[package]] -name = "bitcoin" -version = "0.30.1" +name = "bitcoin-internals" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e99ff7289b20a7385f66a0feda78af2fc119d28fb56aea8886a9cd0a4abdd75" -dependencies = [ - "bech32", - "bitcoin-private", - "bitcoin_hashes", - "hex_lit", - "secp256k1", - "serde", -] +checksum = "9425c3bf7089c983facbae04de54513cce73b41c7f9ff8c845b54e7bc64ebbfb" [[package]] name = "bitcoin-private" @@ -260,12 +264,12 @@ checksum = "73290177011694f38ec25e165d0387ab7ea749a4b81cd4c80dae5988229f7a57" [[package]] name = "bitcoin_hashes" -version = "0.12.0" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d7066118b13d4b20b23645932dfb3a81ce7e29f95726c2036fa33cd7b092501" +checksum = "1930a4dabfebb8d7d9992db18ebe3ae2876f0a305fab206fd168df931ede293b" dependencies = [ - "bitcoin-private", - "serde", + "bitcoin-internals", + "hex-conservative", ] [[package]] @@ -276,22 +280,21 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.3.3" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "630be753d4e58660abd17930c71b647fe46c27ea6b63cc59e1e3851406972e42" +checksum = "b4682ae6287fcf752ecaabbfcc7b6f9b72aa33933dc23a554d853aea8eea8635" [[package]] name = "blake3" -version = "1.4.1" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "199c42ab6972d92c9f8995f086273d25c42fc0f7b2a1fcefba465c1352d25ba5" +checksum = "0231f06152bf547e9c2b5194f247cd97aacf6dcd8b15d8e5ec0663f64580da87" dependencies = [ "arrayref", "arrayvec", "cc", "cfg-if", "constant_time_eq", - "digest", ] [[package]] @@ -303,15 +306,30 @@ dependencies = [ "generic-array", ] +[[package]] +name = "bp-consensus" +version = "0.10.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d7b87840e5fc65bcbcd3881e0a0150ecef4a9b18b1356eb7a8a9adc85280c63" +dependencies = [ + "amplify", + "chrono", + "commit_verify", + "secp256k1", + "serde", + "strict_encoding", + "strict_types", +] + [[package]] name = "bp-core" -version = "0.10.8" +version = "0.10.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "439c8341a93e8263d377060d082b8d2fe98574b234e86d41a04375a1fd8ce03c" +checksum = "3a8b5219d96064b5d277c166fd5321ce6ee3e8a74e50bf2281d47726f365ead4" dependencies = [ "amplify", + "bp-consensus", "bp-dbc", - "bp-primitives", "bp-seals", "commit_verify", "serde", @@ -322,13 +340,13 @@ dependencies = [ [[package]] name = "bp-dbc" -version = "0.10.8" +version = "0.10.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d4117c6bc39e96bdd07b255fd0e6a29557f16c7e53f3c60f0e1ff1747a9a3d2" +checksum = "e265b111f61acb39cf36778c4da9a3d3c49fcc7a7e4116fd40ab250d598b1280" dependencies = [ "amplify", "base85", - "bp-primitives", + "bp-consensus", "commit_verify", "secp256k1", "serde", @@ -336,29 +354,30 @@ dependencies = [ ] [[package]] -name = "bp-primitives" -version = "0.10.6" +name = "bp-esplora" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "608a06488cc9909ed80b1b1dc0acedd655cfe94df60bdb6af80546b993e252e7" +checksum = "e4f9f1e2117ed530960e67b2bea975cd8dee9ec48d33c285a9a06ed848308c73" dependencies = [ "amplify", - "commit_verify", - "secp256k1", + "bp-std", + "log", + "reqwest", "serde", - "strict_encoding", - "strict_types", + "serde_with", + "ureq", ] [[package]] name = "bp-seals" -version = "0.10.8" +version = "0.10.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "098878a5c4cf1256f6c07fcd7b742705e1e4e9c14b9cf992460e5f7f81254235" +checksum = "8ccb60735209233ece5927a5c66355037af8479104b5ff55371ae4a0f53c96b2" dependencies = [ "amplify", "baid58", + "bp-consensus", "bp-dbc", - "bp-primitives", "commit_verify", "rand", "serde", @@ -366,23 +385,87 @@ dependencies = [ "strict_encoding", ] +[[package]] +name = "bp-std" +version = "0.10.0-beta.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8098ada83a67537e36620857c16630bc4df32a50113650555b9a287eb0a64fe0" +dependencies = [ + "amplify", + "bech32", + "bitcoin_hashes", + "bp-consensus", + "bp-core", + "commit_verify", + "indexmap 2.0.2", + "serde", +] + +[[package]] +name = "bp-util" +version = "0.10.0-beta.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a17ad6d2b63a7396b025d9d9db577c43787c21b77aa65b72f3a05eb0bf1e7d4" +dependencies = [ + "amplify", + "base64", + "bp-esplora", + "bp-std", + "bp-wallet", + "clap", + "descriptors", + "env_logger", + "log", + "psbt", + "serde", + "serde_yaml", + "shellexpand", + "strict_encoding", + "toml", +] + +[[package]] +name = "bp-wallet" +version = "0.10.0-beta.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8f2ac375a646c39eb8b33e7ae4757a7926974f7e011643e72b01fc97e24e642" +dependencies = [ + "amplify", + "bp-esplora", + "bp-std", + "descriptors", + "psbt", + "serde", + "serde_yaml", + "toml", +] + [[package]] name = "bumpalo" -version = "3.13.0" +version = "3.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3e2c3daef883ecc1b5d58c15adae93470a91d425f3532ba1695849656af3fc1" +checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec" [[package]] name = "byteorder" -version = "1.4.3" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "bytes" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223" [[package]] name = "cc" -version = "1.0.79" +version = "1.0.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f" +checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" +dependencies = [ + "libc", +] [[package]] name = "cfg-if" @@ -390,38 +473,47 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "cfg_eval" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45565fc9416b9896014f5732ac776f810ee53a66730c17e4020c3ec064a8f88f" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.38", +] + [[package]] name = "chrono" -version = "0.4.26" +version = "0.4.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec837a71355b28f6556dbd569b37b3f363091c0bd4b2e735674521b4c5fd9bc5" +checksum = "7f2c685bad3eb3d45a01354cedb7d5faa66194d1d58ba6e267a8de788f79db38" dependencies = [ "android-tzdata", "iana-time-zone", "js-sys", "num-traits", "serde", - "time 0.1.45", "wasm-bindgen", - "winapi", + "windows-targets", ] [[package]] name = "clap" -version = "4.3.19" +version = "4.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fd304a20bff958a57f04c4e96a2e7594cc4490a0e809cbd48bb6437edaa452d" +checksum = "d04704f56c2cde07f43e8e2c154b43f216dc5c92fc98ada720177362f953b956" dependencies = [ "clap_builder", "clap_derive", - "once_cell", ] [[package]] name = "clap_builder" -version = "4.3.19" +version = "4.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01c6a3f08f1fe5662a35cfe393aec09c4df95f60ee93b7556505260f75eee9e1" +checksum = "0e231faeaca65ebd1ea3c737966bf858971cd38c3849107aa3ea7de90a804e45" dependencies = [ "anstream", "anstyle", @@ -431,21 +523,21 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.3.12" +version = "4.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54a9bb5758fc5dfe728d1019941681eccaf0cf8a4189b692a0ee2f2ecf90a050" +checksum = "0862016ff20d69b84ef8247369fabf5c008a7417002411897d40ee1f4532b873" dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.27", + "syn 2.0.38", ] [[package]] name = "clap_lex" -version = "0.5.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2da6da31387c7e4ef160ffab6d5e7f00c42626fe39aea70a7b0f1773f7dd6c1b" +checksum = "cd7cc57abe963c6d3b9d8be5b06ba7c8957a930305ca90304f24ef040aa6f961" [[package]] name = "colorchoice" @@ -468,13 +560,14 @@ dependencies = [ [[package]] name = "commit_verify" -version = "0.10.5" +version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "caa8114b3ff20947176c8cbfd1e84e56649501eed4e33ba9205c70374b2615ae" +checksum = "91d9d6e86f6cec8d4af19a0e418bac9cb266a6dc70660bcdcdac1e0fa924e0d1" dependencies = [ "amplify", "commit_encoding_derive", "rand", + "ripemd", "serde", "sha2", "strict_encoding", @@ -487,6 +580,16 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f7144d30dcf0fafbce74250a3963025d8d52177934239851c917d29f1df280c2" +[[package]] +name = "core-foundation" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "core-foundation-sys" version = "0.8.4" @@ -502,6 +605,15 @@ dependencies = [ "libc", ] +[[package]] +name = "crc32fast" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" +dependencies = [ + "cfg-if", +] + [[package]] name = "crunchy" version = "0.2.2" @@ -539,7 +651,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.27", + "syn 2.0.38", ] [[package]] @@ -550,7 +662,28 @@ checksum = "836a9bbc7ad63342d6d6e7b815ccab164bc77a2d95d84bc3117a8c0d5c98e2d5" dependencies = [ "darling_core", "quote", - "syn 2.0.27", + "syn 2.0.38", +] + +[[package]] +name = "deranged" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2696e8a945f658fd14dc3b87242e6b80cd0f36ff04ea560fa39082368847946" +dependencies = [ + "serde", +] + +[[package]] +name = "descriptors" +version = "0.10.0-BP-beta.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6105e8317f28ac87e2a30cd4f8fcd1a4fc330e63b0faf55d93cf2041fc12dd5" +dependencies = [ + "amplify", + "bp-std", + "indexmap 2.0.2", + "serde", ] [[package]] @@ -561,7 +694,6 @@ checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ "block-buffer", "crypto-common", - "subtle", ] [[package]] @@ -586,22 +718,18 @@ dependencies = [ ] [[package]] -name = "electrum-client" -version = "0.15.1" +name = "either" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" + +[[package]] +name = "encoding_rs" +version = "0.8.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06bd24afe8bbe869220a7f03ff413dcb9c4824a663e8f06f3cbd7f1c75126d21" +checksum = "7268b386296a025e474d5140678f75d6de9493ae55a5d709eeb9dd08149945e1" dependencies = [ - "bitcoin", - "bitcoin-private", - "byteorder", - "libc", - "log", - "rustls", - "serde", - "serde_json", - "webpki", - "webpki-roots", - "winapi", + "cfg-if", ] [[package]] @@ -625,23 +753,28 @@ checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" [[package]] name = "errno" -version = "0.3.1" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a" +checksum = "ac3e13f66a2f95e32a39eaa81f6b95d42878ca0e1db0c7543723dfe12557e860" dependencies = [ - "errno-dragonfly", "libc", "windows-sys", ] [[package]] -name = "errno-dragonfly" -version = "0.1.2" +name = "fastrand" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5" + +[[package]] +name = "flate2" +version = "1.0.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf" +checksum = "c6c98ee8095e9d1dcbf2fcc6d95acccb90d1c81db1e44725c6a984b1dbdfb010" dependencies = [ - "cc", - "libc", + "crc32fast", + "miniz_oxide", ] [[package]] @@ -659,6 +792,69 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" +[[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.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a62bc1cf6f830c2ec14a513a9fb124d0a213a629668a4186f329db21fe045652" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "futures-channel" +version = "0.3.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2" +dependencies = [ + "futures-core", +] + +[[package]] +name = "futures-core" +version = "0.3.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c" + +[[package]] +name = "futures-sink" +version = "0.3.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e" + +[[package]] +name = "futures-task" +version = "0.3.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65" + +[[package]] +name = "futures-util" +version = "0.3.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533" +dependencies = [ + "futures-core", + "futures-task", + "pin-project-lite", + "pin-utils", +] + [[package]] name = "generic-array" version = "0.14.7" @@ -678,10 +874,35 @@ dependencies = [ "cfg-if", "js-sys", "libc", - "wasi 0.11.0+wasi-snapshot-preview1", + "wasi", "wasm-bindgen", ] +[[package]] +name = "gimli" +version = "0.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fb8d784f27acf97159b40fc4db5ecd8aa23b9ad5ef69cdd136d3bc80665f0c0" + +[[package]] +name = "h2" +version = "0.3.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91fc23aa11be92976ef4729127f1a74adf36d8436f7816b185d18df956790833" +dependencies = [ + "bytes", + "fnv", + "futures-core", + "futures-sink", + "futures-util", + "http", + "indexmap 1.9.3", + "slab", + "tokio", + "tokio-util", + "tracing", +] + [[package]] name = "half" version = "2.2.1" @@ -699,9 +920,9 @@ checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" [[package]] name = "hashbrown" -version = "0.14.0" +version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c6201b9ff9fd90a5a3bac2e56a830d0caa509576f0e503818ee82c181b3437a" +checksum = "7dfda62a12f55daeae5015f81b0baea145391cb4520f86c248fc615d72640d12" [[package]] name = "heck" @@ -711,9 +932,9 @@ checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" [[package]] name = "hermit-abi" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "443144c8cdadd93ebf52ddb4056d257f5b52c04d3c804e657d19eb73fc33668b" +checksum = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7" [[package]] name = "hex" @@ -722,51 +943,132 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" [[package]] -name = "hex_lit" +name = "hex-conservative" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3011d1213f159867b13cfd6ac92d2cd5f1345762c63be3554e84092d85a50bbd" - -[[package]] -name = "humantime" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" +checksum = "30ed443af458ccb6d81c1e7e661545f94d3176752fb1df2f543b902a1e0f51e2" [[package]] -name = "iana-time-zone" -version = "0.1.57" +name = "http" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fad5b825842d2b38bd206f3e81d6957625fd7f0a361e345c30e01a0ae2dd613" +checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482" dependencies = [ - "android_system_properties", - "core-foundation-sys", - "iana-time-zone-haiku", - "js-sys", - "wasm-bindgen", - "windows", + "bytes", + "fnv", + "itoa", ] [[package]] -name = "iana-time-zone-haiku" -version = "0.1.2" +name = "http-body" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1" dependencies = [ - "cc", + "bytes", + "http", + "pin-project-lite", ] [[package]] -name = "ident_case" -version = "1.0.1" +name = "httparse" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" +checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" [[package]] -name = "indexmap" -version = "1.9.3" +name = "httpdate" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" + +[[package]] +name = "humantime" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" + +[[package]] +name = "hyper" +version = "0.14.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffb1cfd654a8219eaef89881fdb3bb3b1cdc5fa75ded05d6933b2b382e395468" +dependencies = [ + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "socket2 0.4.9", + "tokio", + "tower-service", + "tracing", + "want", +] + +[[package]] +name = "hyper-tls" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" +dependencies = [ + "bytes", + "hyper", + "native-tls", + "tokio", + "tokio-native-tls", +] + +[[package]] +name = "iana-time-zone" +version = "0.1.57" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2fad5b825842d2b38bd206f3e81d6957625fd7f0a361e345c30e01a0ae2dd613" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "windows", +] + +[[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 = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "idna" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c" +dependencies = [ + "unicode-bidi", + "unicode-normalization", +] + +[[package]] +name = "indexmap" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" dependencies = [ "autocfg", "hashbrown 0.12.3", @@ -775,14 +1077,21 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.0.0" +version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5477fe2230a79769d8dc68e0eabf5437907c0457a5614a9e8dddb67f65eb65d" +checksum = "8adf3ddd720272c6ea8bf59463c04e0f93d0bbf7c5439b691bca2987e0270897" dependencies = [ "equivalent", - "hashbrown 0.14.0", + "hashbrown 0.14.1", + "serde", ] +[[package]] +name = "ipnet" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28b29a3cd74f0f4598934efe3aeba42bae0eb4680554128851ebbecb02af14e6" + [[package]] name = "is-terminal" version = "0.4.9" @@ -817,27 +1126,27 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "libc" -version = "0.2.147" +version = "0.2.149" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3" +checksum = "a08173bc88b7955d1b3145aa561539096c421ac8debde8cbc3612ec635fee29b" [[package]] name = "linux-raw-sys" -version = "0.4.3" +version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09fc20d2ca12cb9f044c93e3bd6d32d523e6e2ec3db4f7b2939cd99026ecd3f0" +checksum = "da2479e8c062e40bf0066ffa0bc823de0a9368974af99c9f6df941d2c231e03f" [[package]] name = "log" -version = "0.4.19" +version = "0.4.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b06a4cde4c0f271a446782e3eff8de789548ce57dbc8eca9292c27f4a42004b4" +checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" [[package]] name = "memchr" -version = "2.5.0" +version = "2.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" +checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167" [[package]] name = "mime" @@ -845,6 +1154,26 @@ version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" +[[package]] +name = "miniz_oxide" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" +dependencies = [ + "adler", +] + +[[package]] +name = "mio" +version = "0.8.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "927a765cd3fc26206e66b296465fa9d3e5ab003e651c1b3c060e7956d96b19d2" +dependencies = [ + "libc", + "wasi", + "windows-sys", +] + [[package]] name = "mnemonic" version = "1.0.1" @@ -855,21 +1184,92 @@ dependencies = [ "lazy_static", ] +[[package]] +name = "native-tls" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e" +dependencies = [ + "lazy_static", + "libc", + "log", + "openssl", + "openssl-probe", + "openssl-sys", + "schannel", + "security-framework", + "security-framework-sys", + "tempfile", +] + [[package]] name = "num-traits" -version = "0.2.16" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f30b0abd723be7e2ffca1272140fac1a2f084c77ec3e123c192b66af1ee9e6c2" +checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" dependencies = [ "autocfg", ] +[[package]] +name = "object" +version = "0.32.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cf5f9dd3933bd50a9e1f149ec995f39ae2c496d31fd772c1fd45ebc27e902b0" +dependencies = [ + "memchr", +] + [[package]] name = "once_cell" version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d" +[[package]] +name = "openssl" +version = "0.10.57" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bac25ee399abb46215765b1cb35bc0212377e58a061560d8b29b024fd0430e7c" +dependencies = [ + "bitflags 2.4.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.38", +] + +[[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.93" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db4d56a4c0478783083cfafcc42493dd4a981d41669da64b4572a2a089b51b1d" +dependencies = [ + "cc", + "libc", + "pkg-config", + "vcpkg", +] + [[package]] name = "option-ext" version = "0.2.0" @@ -888,6 +1288,24 @@ version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94" +[[package]] +name = "pin-project-lite" +version = "0.2.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" + +[[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.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964" + [[package]] name = "ppv-lite86" version = "0.2.17" @@ -896,18 +1314,33 @@ checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" [[package]] name = "proc-macro2" -version = "1.0.66" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18fb31db3f9bddb2ea821cde30a9f70117e3f119938b5ee630b7403aa6e2ead9" +checksum = "134c189feb4956b20f6f547d2cf727d4c0fe06722b20a0eec87ed445a97f92da" dependencies = [ "unicode-ident", ] +[[package]] +name = "psbt" +version = "0.10.0-BP-beta.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cca3dfdaed6f9705ba29038985250c012bd14ad6341cb871b540222267e01cd1" +dependencies = [ + "amplify", + "base64", + "bp-std", + "chrono", + "descriptors", + "indexmap 2.0.2", + "serde", +] + [[package]] name = "quote" -version = "1.0.32" +version = "1.0.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50f3b39ccfb720540debaa0164757101c08ecb8d326b15358ce76a62c7e85965" +checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae" dependencies = [ "proc-macro2", ] @@ -951,6 +1384,15 @@ dependencies = [ "bitflags 1.3.2", ] +[[package]] +name = "redox_syscall" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" +dependencies = [ + "bitflags 1.3.2", +] + [[package]] name = "redox_users" version = "0.4.3" @@ -958,15 +1400,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" dependencies = [ "getrandom", - "redox_syscall", + "redox_syscall 0.2.16", "thiserror", ] [[package]] name = "regex" -version = "1.9.1" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2eae68fc220f7cf2532e4494aded17545fce192d59cd996e0fe7887f4ceb575" +checksum = "d119d7c7ca818f8a53c300863d4f87566aac09943aef5b355bb83969dae75d87" dependencies = [ "aho-corasick", "memchr", @@ -976,9 +1418,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.3.3" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39354c10dd07468c2e73926b23bb9c2caca74c5501e38a35da70406f1d923310" +checksum = "5d58da636bd923eae52b7e9120271cbefb16f399069ee566ca5ebf9c30e32238" dependencies = [ "aho-corasick", "memchr", @@ -987,37 +1429,53 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.7.4" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5ea92a5b6195c6ef2a0295ea818b312502c6fc94dde986c5553242e18fd4ce2" +checksum = "c3cbb081b9784b07cceb8824c8583f86db4814d172ab043f3c23f7dc600bf83d" [[package]] -name = "rgb-contracts" -version = "0.10.0-rc.4" +name = "reqwest" +version = "0.11.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "046cd98826c46c2ac8ddecae268eb5c2e58628688a5fc7a2643704a73faba95b" dependencies = [ - "amplify", - "baid58", - "bitcoin", - "bp-core", - "clap", - "commit_verify", - "electrum-client", - "env_logger", + "base64", + "bytes", + "encoding_rs", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "hyper", + "hyper-tls", + "ipnet", + "js-sys", "log", - "rgb-persist-fs", - "rgb-std", - "rgb-wallet", + "mime", + "native-tls", + "once_cell", + "percent-encoding", + "pin-project-lite", "serde", - "serde_yaml", - "shellexpand", - "strict_types", + "serde_json", + "serde_urlencoded", + "system-configuration", + "tokio", + "tokio-native-tls", + "tokio-socks", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "winreg", ] [[package]] name = "rgb-core" -version = "0.10.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4208ae00f665554fa9195c0d54e7627f70b3202490e9549c26f731eda4922943" +version = "0.10.8" +source = "git+https://github.com/RGB-WG/rgb-core?branch=v0.10#f9dc0afb736c7520c57e229438c3e9453aab9c9a" dependencies = [ "aluvm", "amplify", @@ -1027,36 +1485,77 @@ dependencies = [ "getrandom", "mime", "secp256k1-zkp", + "serde", "single_use_seals", "strict_encoding", "strict_types", "wasm-bindgen", ] +[[package]] +name = "rgb-invoice" +version = "0.11.0-alpha" +source = "git+https://github.com/RGB-WG/rgb-std?branch=v0.11#69eb429d4698c459db0c359ebf53f425984678c1" +dependencies = [ + "amplify", + "baid58", + "bp-std", + "chrono", + "fluent-uri", + "getrandom", + "indexmap 2.0.2", + "percent-encoding", + "rgb-std", + "strict_encoding", + "wasm-bindgen", +] + [[package]] name = "rgb-persist-fs" -version = "0.10.0" +version = "0.11.0" dependencies = [ "amplify", "rgb-std", "strict_encoding", ] +[[package]] +name = "rgb-runtime" +version = "0.11.0-alpha" +dependencies = [ + "amplify", + "bp-dbc", + "bp-esplora", + "bp-std", + "bp-wallet", + "descriptors", + "log", + "rgb-persist-fs", + "rgb-std", + "serde", + "serde_yaml", + "strict_types", +] + [[package]] name = "rgb-std" -version = "0.10.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d723c6bd44086fc60e1f4089ab5d6dc3aa49b851cb4bf2e9dd907c138ca57911" +version = "0.11.0-alpha" +source = "git+https://github.com/RGB-WG/rgb-std?branch=v0.11#69eb429d4698c459db0c359ebf53f425984678c1" dependencies = [ "amplify", "baid58", "base85", "bp-core", + "bp-std", + "cfg_eval", "chrono", "commit_verify", + "descriptors", "getrandom", + "indexmap 2.0.2", "rgb-core", "serde", + "serde_with", "strict_encoding", "strict_types", "wasm-bindgen", @@ -1064,24 +1563,27 @@ dependencies = [ [[package]] name = "rgb-wallet" -version = "0.10.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "176360bc82b3a3a4edae2a45189476f613e7c013ee457be078f65613b1a0da14" +version = "0.11.0-alpha" dependencies = [ "amplify", "baid58", - "bitcoin", - "bp-core", - "chrono", + "bp-esplora", + "bp-seals", + "bp-std", + "bp-util", + "bp-wallet", + "clap", "commit_verify", - "fluent-uri", - "getrandom", - "indexmap 1.9.3", - "percent-encoding", - "rgb-core", + "env_logger", + "log", + "rgb-invoice", + "rgb-runtime", "rgb-std", - "strict_encoding", - "wasm-bindgen", + "serde", + "serde_yaml", + "shellexpand", + "strict_types", + "toml", ] [[package]] @@ -1108,13 +1610,19 @@ dependencies = [ "digest", ] +[[package]] +name = "rustc-demangle" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" + [[package]] name = "rustix" -version = "0.38.4" +version = "0.38.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a962918ea88d644592894bc6dc55acc6c0956488adcebbfb6e273506b7fd6e5" +checksum = "5a74ee2d7c2581cd139b42447d7d9389b889bdaad3a73f1ebb16f2a3237bb19c" dependencies = [ - "bitflags 2.3.3", + "bitflags 2.4.0", "errno", "libc", "linux-raw-sys", @@ -1123,14 +1631,24 @@ dependencies = [ [[package]] name = "rustls" -version = "0.20.8" +version = "0.21.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fff78fc74d175294f4e83b28343315ffcfb114b156f0185e9741cb5570f50e2f" +checksum = "cd8d6c9f025a446bc4d18ad9632e69aec8f287aa84499ee335599fabd20c3fd8" dependencies = [ "log", "ring", + "rustls-webpki", "sct", - "webpki", +] + +[[package]] +name = "rustls-webpki" +version = "0.101.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c7d5dece342910d9ba34d259310cae3e0154b873b35408b787b59bce53d34fe" +dependencies = [ + "ring", + "untrusted", ] [[package]] @@ -1139,6 +1657,15 @@ version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741" +[[package]] +name = "schannel" +version = "0.1.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c3733bf4cf7ea0880754e19cb5a462007c4a8c1914bff372ccc95b464f1df88" +dependencies = [ + "windows-sys", +] + [[package]] name = "sct" version = "0.7.0" @@ -1155,7 +1682,6 @@ version = "0.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "25996b82292a7a57ed3508f052cfff8640d38d32018784acd714758b43da9c8f" dependencies = [ - "bitcoin_hashes", "rand", "secp256k1-sys", "serde", @@ -1172,14 +1698,15 @@ dependencies = [ [[package]] name = "secp256k1-zkp" -version = "0.8.0" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c07a95044ad86d2bfde4bb9bc99728aad3b311aa4fabea9db3b670846224186" +checksum = "026efcdacb95ee6aae5cc19144dc1549973eac36a4972700c28493de1ee5d69f" dependencies = [ "bitcoin-private", "rand", "secp256k1", "secp256k1-zkp-sys", + "serde", ] [[package]] @@ -1192,31 +1719,54 @@ dependencies = [ "secp256k1-sys", ] +[[package]] +name = "security-framework" +version = "2.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05b64fb303737d99b81884b2c63433e9ae28abebe5eb5045dcdd175dc2ecf4de" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework-sys" +version = "2.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e932934257d3b408ed8f30db49d85ea163bfe74961f017f405b025af298f0c7a" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "serde" -version = "1.0.174" +version = "1.0.188" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b88756493a5bd5e5395d53baa70b194b05764ab85b59e43e4b8f4e1192fa9b1" +checksum = "cf9e0fcba69a370eed61bcf2b728575f726b50b55cba78064753d708ddc7549e" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.174" +version = "1.0.188" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e5c3a298c7f978e53536f95a63bdc4c4a64550582f31a0359a9afda6aede62e" +checksum = "4eca7ac642d82aa35b60049a6eccb4be6be75e599bd2e9adb5f875a737654af2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.27", + "syn 2.0.38", ] [[package]] name = "serde_json" -version = "1.0.103" +version = "1.0.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d03b412469450d4404fe8499a268edd7f8b79fecb074b0d812ad64ca21f4031b" +checksum = "6b420ce6e3d8bd882e9b243c6eed35dbc9a6110c9769e74b584e0d68d1f20c65" dependencies = [ "itoa", "ryu", @@ -1242,32 +1792,45 @@ dependencies = [ "serde_derive", ] +[[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_with" -version = "2.3.3" +version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07ff71d2c147a7b57362cead5e22f772cd52f6ab31cfcd9edcd7f6aeb2a0afbe" +checksum = "1ca3b16a3d82c4088f343b7480a93550b3eabe1a358569c2dfe38bbcead07237" dependencies = [ - "base64 0.13.1", + "base64", "chrono", "hex", "indexmap 1.9.3", + "indexmap 2.0.2", "serde", "serde_json", "serde_with_macros", - "time 0.3.23", + "time", ] [[package]] name = "serde_with_macros" -version = "2.3.3" +version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "881b6f881b17d13214e5d494c939ebab463d01264ce1811e9d4ac3a882e7695f" +checksum = "2e6be15c453eb305019bfa438b1593c731f36a289a7853f7707ee29e870b3b3c" dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.27", + "syn 2.0.38", ] [[package]] @@ -1276,7 +1839,7 @@ version = "0.9.25" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1a49e178e4452f45cb61d0cd8cebc1b0fafd3e41929e996cef79aa3aca91f574" dependencies = [ - "indexmap 2.0.0", + "indexmap 2.0.2", "itoa", "ryu", "serde", @@ -1285,9 +1848,9 @@ dependencies = [ [[package]] name = "sha2" -version = "0.10.7" +version = "0.10.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "479fb9d862239e610720565ca91403019f2f00410f1864c5aa7479b950a76ed8" +checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" dependencies = [ "cfg-if", "cpufeatures", @@ -1305,11 +1868,51 @@ dependencies = [ [[package]] name = "single_use_seals" -version = "0.10.0" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed7655b4b597fca10d2cf7579d3dfee1987a45342bdeecf90cab5affec1c7197" +dependencies = [ + "amplify_derive", +] + +[[package]] +name = "slab" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +dependencies = [ + "autocfg", +] + +[[package]] +name = "socket2" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "socket2" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ae7f7cb6a68cfc99674a70a47ab790c6ede965107cd0823ed814b5e73b3bee2" +checksum = "4031e820eb552adee9295814c0ced9e5cf38ddf1e8b7d566d6de8e2538ea989e" dependencies = [ - "amplify_derive 4.0.0-alpha.6", + "libc", + "windows-sys", +] + +[[package]] +name = "socks" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0c3dbbd9ae980613c6dd8e28a9407b50509d3803b57624d5dfe8315218cd58b" +dependencies = [ + "byteorder", + "libc", + "winapi", ] [[package]] @@ -1320,9 +1923,9 @@ checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" [[package]] name = "strict_encoding" -version = "2.5.0" +version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23b1c91b79e62afc09025d828fa0b8dbf4105513de38f126a017919c09bca472" +checksum = "ab7b75b4af0aff9dd97b68df262bf0e807b7d007cc860fa217943f898a05a5ab" dependencies = [ "amplify", "half", @@ -1332,9 +1935,9 @@ dependencies = [ [[package]] name = "strict_encoding_derive" -version = "2.0.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f5adae55367464f5a229bfd539682c94f870b98a220be6e61dc43f85d612e7e" +checksum = "37064ec285e2a633465eb525c8698eea51373dee889fe310e0d32df8343e7f4f" dependencies = [ "amplify_syn", "heck", @@ -1345,22 +1948,21 @@ dependencies = [ [[package]] name = "strict_types" -version = "1.6.0" +version = "1.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8a6654c43ed02891b249730856ad6b866fd85d1008aad51b30bd68812798427" +checksum = "d10cc45e67d452cfe0d87d4714c3250190d97479af3502bbd823651bfe0f505f" dependencies = [ "amplify", "baid58", - "base64 0.21.2", + "base64", "half", - "indexmap 1.9.3", + "indexmap 2.0.2", "serde", "serde_json", - "serde_with", "serde_yaml", "sha2", "strict_encoding", - "toml 0.7.6", + "toml", ] [[package]] @@ -1379,12 +1981,6 @@ version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" -[[package]] -name = "subtle" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" - [[package]] name = "syn" version = "1.0.109" @@ -1398,61 +1994,85 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.27" +version = "2.0.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b60f673f44a8255b9c8c657daf66a596d435f2da81a555b06dc644d080ba45e0" +checksum = "e96b79aaa137db8f61e26363a0c9b47d8b4ec75da28b7d1d614c2303e232408b" dependencies = [ "proc-macro2", "quote", "unicode-ident", ] +[[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 = "tempfile" +version = "3.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb94d2f3cc536af71caac6b6fcebf65860b347e7ce0cc9ebe8f70d3e521054ef" +dependencies = [ + "cfg-if", + "fastrand", + "redox_syscall 0.3.5", + "rustix", + "windows-sys", +] + [[package]] name = "termcolor" -version = "1.2.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6" +checksum = "6093bad37da69aab9d123a8091e4be0aa4a03e4d601ec641c327398315f62b64" dependencies = [ "winapi-util", ] [[package]] name = "thiserror" -version = "1.0.44" +version = "1.0.49" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "611040a08a0439f8248d1990b111c95baa9c704c805fa1f62104b39655fd7f90" +checksum = "1177e8c6d7ede7afde3585fd2513e611227efd6481bd78d2e82ba1ce16557ed4" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.44" +version = "1.0.49" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "090198534930841fab3a5d1bb637cde49e339654e606195f8d9c76eeb081dc96" +checksum = "10712f02019e9288794769fba95cd6847df9874d49d871d062172f9dd41bc4cc" dependencies = [ "proc-macro2", "quote", - "syn 2.0.27", -] - -[[package]] -name = "time" -version = "0.1.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b797afad3f312d1c66a56d11d0316f916356d11bd158fbc6ca6389ff6bf805a" -dependencies = [ - "libc", - "wasi 0.10.0+wasi-snapshot-preview1", - "winapi", + "syn 2.0.38", ] [[package]] name = "time" -version = "0.3.23" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59e399c068f43a5d116fedaf73b203fa4f9c519f17e2b34f63221d3792f81446" +checksum = "426f806f4089c493dcac0d24c29c01e2c38baf8e30f1b716ee37e83d200b18fe" dependencies = [ + "deranged", "itoa", "serde", "time-core", @@ -1461,33 +2081,90 @@ dependencies = [ [[package]] name = "time-core" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7300fbefb4dadc1af235a9cef3737cea692a9d97e1b9cbcd4ebdae6f8868e6fb" +checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" [[package]] name = "time-macros" -version = "0.2.10" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96ba15a897f3c86766b757e5ac7221554c6750054d74d5b28844fce5fb36a6c4" +checksum = "4ad70d68dba9e1f8aceda7aa6711965dfec1cac869f311a51bd08b3a2ccbce20" dependencies = [ "time-core", ] [[package]] -name = "toml" -version = "0.5.11" +name = "tinyvec" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" +checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" dependencies = [ - "serde", + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + +[[package]] +name = "tokio" +version = "1.33.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f38200e3ef7995e5ef13baec2f432a6da0aa9ac495b2c0e8f3b7eec2c92d653" +dependencies = [ + "backtrace", + "bytes", + "libc", + "mio", + "pin-project-lite", + "socket2 0.5.4", + "windows-sys", +] + +[[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-socks" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51165dfa029d2a65969413a6cc96f354b86b464498702f174a4efa13608fd8c0" +dependencies = [ + "either", + "futures-util", + "thiserror", + "tokio", +] + +[[package]] +name = "tokio-util" +version = "0.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d68074620f57a0b21594d9735eb2e98ab38b17f80d3fcb189fca266771ca60d" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "pin-project-lite", + "tokio", + "tracing", ] [[package]] name = "toml" -version = "0.7.6" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c17e963a819c331dcacd7ab957d80bc2b9a9c1e71c804826d2f283dd65306542" +checksum = "185d8ab0dfbb35cf1399a6344d8484209c088f75f8f68230da55d48d95d43e3d" dependencies = [ "serde", "serde_spanned", @@ -1506,28 +2183,75 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.19.14" +version = "0.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8123f27e969974a3dfba720fdb560be359f57b44302d280ba72e76a74480e8a" +checksum = "396e4d48bbb2b7554c944bde63101b5ae446cff6ec4a24227428f15eb72ef338" dependencies = [ - "indexmap 2.0.0", + "indexmap 2.0.2", "serde", "serde_spanned", "toml_datetime", "winnow", ] +[[package]] +name = "tower-service" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" + +[[package]] +name = "tracing" +version = "0.1.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" +dependencies = [ + "cfg-if", + "pin-project-lite", + "tracing-core", +] + +[[package]] +name = "tracing-core" +version = "0.1.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0955b8137a1df6f1a2e9a37d8a6656291ff0297c1a97c24e0d8425fe2312f79a" +dependencies = [ + "once_cell", +] + +[[package]] +name = "try-lock" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed" + [[package]] name = "typenum" -version = "1.16.0" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" + +[[package]] +name = "unicode-bidi" +version = "0.3.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460" [[package]] name = "unicode-ident" -version = "1.0.11" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" + +[[package]] +name = "unicode-normalization" +version = "0.1.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "301abaae475aa91687eb82514b328ab47a211a533026cb25fc3e519b86adfc3c" +checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" +dependencies = [ + "tinyvec", +] [[package]] name = "unsafe-libyaml" @@ -1541,12 +2265,48 @@ version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" +[[package]] +name = "ureq" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f5ccd538d4a604753ebc2f17cd9946e89b77bf87f6a8e2309667c6f2e87855e3" +dependencies = [ + "base64", + "flate2", + "log", + "once_cell", + "rustls", + "rustls-webpki", + "serde", + "serde_json", + "socks", + "url", + "webpki-roots", +] + +[[package]] +name = "url" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "143b538f18257fac9cad154828a57c6bf5157e1aa604d4816b5995bf6de87ae5" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", +] + [[package]] name = "utf8parse" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" +[[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.4" @@ -1554,10 +2314,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" [[package]] -name = "wasi" -version = "0.10.0+wasi-snapshot-preview1" +name = "want" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" +dependencies = [ + "try-lock", +] [[package]] name = "wasi" @@ -1586,10 +2349,22 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.27", + "syn 2.0.38", "wasm-bindgen-shared", ] +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c02dbc21516f9f1f04f187958890d7e6026df8d16540b7ad9492bc34a67cea03" +dependencies = [ + "cfg-if", + "js-sys", + "wasm-bindgen", + "web-sys", +] + [[package]] name = "wasm-bindgen-macro" version = "0.2.87" @@ -1608,7 +2383,7 @@ checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.27", + "syn 2.0.38", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -1629,24 +2404,11 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "webpki" -version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f095d78192e208183081cc07bc5515ef55216397af48b873e5edcd72637fa1bd" -dependencies = [ - "ring", - "untrusted", -] - [[package]] name = "webpki-roots" -version = "0.22.6" +version = "0.25.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6c71e40d7d2c34a5106301fb632274ca37242cd0c9d3e64dbece371a40a2d87" -dependencies = [ - "webpki", -] +checksum = "14247bb57be4f377dfb94c72830b8ce8fc6beac03cf4bf7b9732eadd414123fc" [[package]] name = "winapi" @@ -1666,9 +2428,9 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" +checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596" dependencies = [ "winapi", ] @@ -1699,9 +2461,9 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.48.1" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05d4b17490f70499f20b9e791dcf6a299785ce8af4d709018206dc5b4953e95f" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" dependencies = [ "windows_aarch64_gnullvm", "windows_aarch64_msvc", @@ -1714,51 +2476,61 @@ dependencies = [ [[package]] name = "windows_aarch64_gnullvm" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" [[package]] name = "windows_aarch64_msvc" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" [[package]] name = "windows_i686_gnu" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" [[package]] name = "windows_i686_msvc" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" [[package]] name = "windows_x86_64_gnu" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" [[package]] name = "windows_x86_64_gnullvm" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" [[package]] name = "windows_x86_64_msvc" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" [[package]] name = "winnow" -version = "0.5.0" +version = "0.5.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81fac9742fd1ad1bd9643b991319f72dd031016d44b77039a26977eb667141e7" +checksum = "037711d82167854aff2018dfd193aa0fef5370f456732f0d5a0c59b0f1b4b907" 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", +] diff --git a/Cargo.toml b/Cargo.toml index b5e0bb5d..9c6172d3 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,35 +1,48 @@ [workspace] members = [ + "runtime", "fs", - ".", + "." ] default-members = [ + "runtime", "fs", "." ] [workspace.package] +version = "0.11.0-alpha" +keywords = ["bitcoin", "lightning", "rgb", "smart-contracts", "lnp-bp"] +categories = ["cryptography::cryptocurrencies"] authors = ["Dr Maxim Orlovsky "] -homepage = "https://github.com/RGB-WG" -repository = "https://github.com/RGB-WG/rgb" +homepage = "https://lnp-bp.org" +repository = "https://github.com/RGB-WG/rgb-wallet" rust-version = "1.67" # Due to strict encoding library edition = "2021" license = "Apache-2.0" [workspace.dependencies] -amplify = "4.0.0" +amplify = "4.5.0" baid58 = "0.4.4" -strict_encoding = "2.5.0" -strict_types = "1.6.0" -rgb-std = { version = "0.10.5", features = ["fs"] } -rgb-wallet = { version = "0.10.5", features = ["fs"] } +strict_encoding = "2.6.1" +strict_types = "1.6.3" +bp-dbc = "0.10.10" +bp-std = "0.10.0-beta.1" +bp-wallet = "0.10.0-beta.1" +bp-utils = "0.10.0-beta.1" +bp-esplora = "0.10.0-beta.1" +rgb-std = { version = "0.11.0-alpha", features = ["fs"] } +rgb-invoice = "0.11.0-alpha" +serde_crate = { package = "serde", version = "1", features = ["derive"] } +serde_yaml = "0.9.19" +log = { version = "0.4", features = ["max_level_trace", "release_max_level_debug"] } [package] -name = "rgb-contracts" -version = "0.10.0-rc.4" -description = " RGB: scalable & confidential smart contracts for Bitcoin & Lightning network" -keywords = ["bitcoin", "lightning", "rgb", "smart-contracts", "lnp-bp"] -categories = ["cryptography::cryptocurrencies"] +name = "rgb-wallet" +version = "0.11.0-alpha" +description = "Command-line wallet for RGB smart contracts on Bitcoin" +keywords = { workspace = true } +categories = { workspace = true } authors = { workspace = true } repository = { workspace = true } homepage = { workspace = true } @@ -37,38 +50,40 @@ edition = { workspace = true } license = { workspace = true } rust-version = { workspace = true } readme = "README.md" -exclude = [".github", "std"] - -[lib] -name = "rgb" +exclude = [".github"] [[bin]] name = "rgb" -required-features = ["cli"] +path = "src/main.rs" [dependencies] amplify = { workspace = true } baid58 = { workspace = true } strict_types = { workspace = true, features = ["serde"] } -commit_verify = "0.10.5" -bp-core = { version = "0.10.7", features = ["serde"] } -rgb-std = { workspace = true } -rgb-wallet = { workspace = true } -rgb-persist-fs = { version = "0.10.0", path = "fs" } -bitcoin = { version = "0.30.0", features = ["serde"] } -electrum-client = { version = "0.15.1", optional = true } -log = { version = "0.4", features = ["max_level_trace", "release_max_level_debug"], optional = true } +commit_verify = "0.10.6" +bp-seals = "0.10.11" +bp-std = { workspace = true, features = ["serde"] } +bp-wallet = { workspace = true } +bp-esplora = { workspace = true } +bp-util = "0.10.0-beta.1" +rgb-std = { workspace = true, features = ["serde", "descriptor"] } +rgb-invoice = { workspace = true } +rgb-runtime = { version = "0.11.0-alpha", path = "runtime", features = ["log", "serde"] } +log = { workspace = true } env_logger = "0.10.0" -clap = { version = "4.1.8", features = ["derive", "env"], optional = true } -shellexpand = { version = "3.0.0", optional = true } -serde = "1.0.159" -serde_yaml = "0.9.19" +clap = { version = "4.4.6", features = ["derive", "env"] } +shellexpand = "3.1.0" +serde_crate = { workspace = true } +serde_yaml = { workspace = true } +toml = "0.8.2" [features] -default = ["electrum", "log"] -all = ["cli", "log"] -electrum = ["electrum-client", "log"] -cli = ["clap", "shellexpand", "log", "electrum"] +default = [] [package.metadata.docs.rs] features = [ "all" ] + +[patch.crates-io] +rgb-core = { git = "https://github.com/RGB-WG/rgb-core", branch = "v0.10" } +rgb-std = { git = "https://github.com/RGB-WG/rgb-std", branch = "v0.11" } +rgb-invoice = { git = "https://github.com/RGB-WG/rgb-std", branch = "v0.11" } diff --git a/examples/rgb20-demo.rgb b/examples/rgb20-demo.rgb index c470c0fa..06d74549 100644 Binary files a/examples/rgb20-demo.rgb and b/examples/rgb20-demo.rgb differ diff --git a/examples/rgb20-demo.yaml b/examples/rgb20-demo.yaml index 09189bfa..dddc475d 100644 --- a/examples/rgb20-demo.yaml +++ b/examples/rgb20-demo.yaml @@ -28,5 +28,5 @@ globals: assignments: assetOwner: - seal: tapret1st:c9a86c99127f1b2d1ff495c238f13069ac881ec9527905016122d11d85b19b61:1 + seal: tapret1st:ca43e9a01782343c78fa67cc20d75d81545a8d38a031d361180c36c088639fed:0 amount: 100000000000000 diff --git a/fs/Cargo.toml b/fs/Cargo.toml index 1ee98de5..9095f05d 100644 --- a/fs/Cargo.toml +++ b/fs/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "rgb-persist-fs" -version = "0.10.0" +version = "0.11.0" description = "RGB persistence drivers for file storage" keywords = ["bitcoin", "lightning", "rgb", "smart-contracts", "lnp-bp"] categories = ["cryptography::cryptocurrencies"] diff --git a/fs/src/stock.rs b/fs/src/stock.rs index 1d431582..07c19f41 100644 --- a/fs/src/stock.rs +++ b/fs/src/stock.rs @@ -22,12 +22,12 @@ use std::path::Path; use amplify::confinement::U32; -use rgbstd::persistence::Stock; +use rgb::persistence::Stock; use strict_encoding::{DeserializeError, SerializeError, StrictDeserialize, StrictSerialize}; pub trait StockFs: Sized { - fn load(file: impl AsRef) -> Result; - fn store(&self, file: impl AsRef) -> Result<(), SerializeError>; + fn load(path: impl AsRef) -> Result; + fn store(&self, path: impl AsRef) -> Result<(), SerializeError>; } impl StockFs for Stock { diff --git a/runtime/Cargo.toml b/runtime/Cargo.toml new file mode 100644 index 00000000..60c50335 --- /dev/null +++ b/runtime/Cargo.toml @@ -0,0 +1,36 @@ +[package] +name = "rgb-runtime" +version.workspace = true +description = "RGB smart contracts wallet runtime" +keywords.workspace = true +categories.workspace = true +readme = "../README.md" +authors.workspace = true +homepage.workspace = true +repository.workspace = true +rust-version.workspace = true +edition.workspace = true +license.workspace = true + +[lib] +name = "rgb_rt" + +[dependencies] +amplify = { workspace = true } +strict_types = { workspace = true } +bp-dbc = { workspace = true } +bp-std = { workspace = true } +bp-wallet = { workspace = true, features = ["fs"] } +bp-esplora = { workspace = true, optional = true } +descriptors = "=0.10.0-BP-beta.1" +rgb-std = { workspace = true } +rgb-persist-fs = { version = "0.11.0-alpha", path = "../fs" } +serde_crate = { workspace = true, optional = true } +serde_yaml = { workspace = true, optional = true } +log = { workspace = true, optional = true } + +[features] +default = [] +all = ["esplora", "serde", "log"] +esplora = ["bp-esplora", "bp-wallet/esplora"] +serde = ["serde_crate", "serde_yaml", "bp-std/serde", "bp-wallet/serde",] diff --git a/src/descriptor.rs b/runtime/src/descriptor.rs similarity index 94% rename from src/descriptor.rs rename to runtime/src/descriptor.rs index 8a1f6fea..9b4acce0 100644 --- a/src/descriptor.rs +++ b/runtime/src/descriptor.rs @@ -1,4 +1,4 @@ -// RGB smart contracts for Bitcoin & Lightning +// RGB smart contract wallet runtime // // SPDX-License-Identifier: Apache-2.0 // @@ -30,15 +30,6 @@ use bp::dbc::tapret::{TapretCommitment, TapretPathProof, TapretProof}; use bp::{ScriptPubkey, TapNodeHash}; use commit_verify::ConvolveCommit; -#[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Debug, Display)] -#[display("*/{app}/{index}")] -#[derive(Serialize, Deserialize)] -#[serde(rename_all = "camelCase")] -pub struct TerminalPath { - pub app: u32, - pub index: u32, -} - #[derive(Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Debug)] pub struct DeriveInfo { pub terminal: TerminalPath, diff --git a/src/lib.rs b/runtime/src/lib.rs similarity index 63% rename from src/lib.rs rename to runtime/src/lib.rs index 39a609f8..38fcd037 100644 --- a/src/lib.rs +++ b/runtime/src/lib.rs @@ -1,4 +1,4 @@ -// RGB smart contracts for Bitcoin & Lightning +// RGB smart contract wallet runtime // // SPDX-License-Identifier: Apache-2.0 // @@ -24,23 +24,9 @@ extern crate amplify; #[cfg(feature = "log")] #[macro_use] extern crate log; -#[macro_use] -extern crate serde; +#[cfg(feature = "serde")] +extern crate serde_crate as serde; -mod descriptor; mod runtime; -mod wallet; - -pub mod prelude { - pub use descriptor::{RgbDescr, SpkDescriptor, Tapret, TerminalPath}; - pub use rgbfs::StockFs; - pub use rgbstd::*; - pub use rgbwallet::*; - pub use runtime::{Runtime, RuntimeError}; - #[cfg(feature = "electrum")] - pub use wallet::BlockchainResolver; - pub use wallet::{DefaultResolver, RgbWallet}; - pub use super::*; -} -pub use prelude::*; +pub use runtime::{Runtime, RuntimeError}; diff --git a/src/runtime.rs b/runtime/src/runtime.rs similarity index 53% rename from src/runtime.rs rename to runtime/src/runtime.rs index 94363955..f2d2d282 100644 --- a/src/runtime.rs +++ b/runtime/src/runtime.rs @@ -1,4 +1,4 @@ -// RGB smart contracts for Bitcoin & Lightning +// RGB smart contract wallet runtime // // SPDX-License-Identifier: Apache-2.0 // @@ -19,36 +19,30 @@ // See the License for the specific language governing permissions and // limitations under the License. -use std::collections::hash_map::Entry; -use std::collections::HashMap; use std::convert::Infallible; -use std::fs::{self, File}; -use std::io; use std::ops::{Deref, DerefMut}; use std::path::PathBuf; - -use bitcoin::bip32::ExtendedPubKey; +use std::{fs, io}; + +use bpstd::{AddressNetwork, Outpoint, XpubDerivable}; +use bpwallet::Wallet; +use descriptors::Descriptor; +use rgb::containers::{Contract, LoadError, Transfer}; +use rgb::descriptor::DescriptorRgb; +use rgb::interface::{BuilderError, OutpointFilter}; +use rgb::persistence::{Inventory, InventoryDataError, InventoryError, StashError, Stock}; +use rgb::resolvers::ResolveHeight; +use rgb::validation::ResolveTx; +use rgb::{validation, Chain}; use rgbfs::StockFs; -use rgbstd::containers::{Contract, LoadError, Transfer}; -use rgbstd::interface::BuilderError; -use rgbstd::persistence::{Inventory, InventoryDataError, InventoryError, StashError, Stock}; -use rgbstd::resolvers::ResolveHeight; -use rgbstd::validation::ResolveTx; -use rgbstd::{validation, Chain}; use strict_types::encoding::{DeserializeError, Ident, SerializeError}; -use crate::descriptor::RgbDescr; -use crate::{RgbWallet, Tapret}; - #[derive(Debug, Display, Error, From)] #[display(inner)] pub enum RuntimeError { #[from] Io(io::Error), - #[from] - Yaml(serde_yaml::Error), - #[from] Serialize(SerializeError), @@ -72,13 +66,6 @@ pub enum RuntimeError { #[display(doc_comments)] WalletUnknown(Ident), - #[from] - Psbt(bitcoin::psbt::Error), - - #[cfg(feature = "electrum")] - #[from] - Electrum(electrum_client::Error), - #[from] InvalidConsignment(validation::Status), @@ -88,6 +75,13 @@ pub enum RuntimeError { #[display(doc_comments)] IncompleteContract, + #[from] + #[from(bpwallet::LoadError)] + Bp(bpwallet::RuntimeError), + + #[from] + Yaml(serde_yaml::Error), + #[from] Custom(String), } @@ -97,74 +91,148 @@ impl From for RuntimeError { } #[derive(Getters)] -pub struct Runtime { +pub struct Runtime = DescriptorRgb, K = XpubDerivable> { stock_path: PathBuf, - wallets_path: PathBuf, - #[getter(skip)] stock: Stock, - wallets: HashMap, + #[getter(as_mut)] + wallet: Wallet, #[getter(as_copy)] chain: Chain, } -impl Deref for Runtime { +impl, K> Deref for Runtime { type Target = Stock; + fn deref(&self) -> &Self::Target { &self.stock } } -impl DerefMut for Runtime { +impl, K> DerefMut for Runtime { fn deref_mut(&mut self) -> &mut Self::Target { &mut self.stock } } -impl Runtime { - pub fn load(mut data_dir: PathBuf, chain: Chain) -> Result { +impl, K> OutpointFilter for Runtime { + fn include_outpoint(&self, outpoint: Outpoint) -> bool { + self.wallet.coins().any(|utxo| utxo.outpoint == outpoint) + } +} + +#[cfg(feature = "serde")] +impl, K> Runtime +where + D: Default, + for<'de> D: serde::Serialize + serde::Deserialize<'de>, + for<'de> bpwallet::WalletDescr: serde::Serialize + serde::Deserialize<'de>, +{ + pub fn load_pure_rgb(data_dir: PathBuf, chain: Chain) -> Result { + Self::load_attach( + data_dir, + chain, + bpwallet::Runtime::new_standard(D::default(), chain /* TODO: add layer 2 */), + ) + } +} + +#[cfg(feature = "serde")] +impl, K> Runtime +where + for<'de> D: serde::Serialize + serde::Deserialize<'de>, + for<'de> bpwallet::WalletDescr: serde::Serialize + serde::Deserialize<'de>, +{ + pub fn load(data_dir: PathBuf, wallet_name: &str, chain: Chain) -> Result { + let mut wallet_path = data_dir.clone(); + wallet_path.push(wallet_name); + let bprt = + bpwallet::Runtime::::load_standard(wallet_path /* TODO: Add layer2 */)?; + Self::load_attach_or_init(data_dir, chain, bprt.detach(), |_| { + Ok::<_, RuntimeError>(default!()) + }) + } + + pub fn load_attach( + data_dir: PathBuf, + chain: Chain, + bprt: bpwallet::Runtime, + ) -> Result { + Self::load_attach_or_init(data_dir, chain, bprt.detach(), |_| { + Ok::<_, RuntimeError>(default!()) + }) + } + + pub fn load_or_init( + data_dir: PathBuf, + wallet_name: &str, + chain: Chain, + init_wallet: impl FnOnce(bpwallet::LoadError) -> Result, + init_stock: impl FnOnce(DeserializeError) -> Result, + ) -> Result + where + E: From, + bpwallet::LoadError: From, + RuntimeError: From, + { + let mut wallet_path = data_dir.clone(); + wallet_path.push(chain.to_string()); + wallet_path.push(wallet_name); + let bprt = bpwallet::Runtime::load_standard_or_init( + wallet_path, + chain, + init_wallet, /* TODO: Add layer2 */ + )?; + Self::load_attach_or_init(data_dir, chain, bprt.detach(), init_stock) + } + + pub fn load_attach_or_init( + mut data_dir: PathBuf, + chain: Chain, + wallet: Wallet, + init: impl FnOnce(DeserializeError) -> Result, + ) -> Result + where + E: From, + RuntimeError: From, + { data_dir.push(chain.to_string()); + #[cfg(feature = "log")] debug!("Using data directory '{}'", data_dir.display()); fs::create_dir_all(&data_dir)?; let mut stock_path = data_dir.clone(); stock_path.push("stock.dat"); - #[cfg(feature = "log")] - debug!("Reading stock from '{}'", stock_path.display()); - let stock = if !stock_path.exists() { - #[cfg(feature = "log")] - info!("Stock file not found, creating default stock"); - #[cfg(feature = "cli")] - eprintln!("Stock file not found, creating default stock"); - let stock = Stock::default(); - stock.store(&stock_path)?; - stock - } else { - Stock::load(&stock_path)? - }; - let mut wallets_path = data_dir.clone(); - wallets_path.push("wallets.yml"); - #[cfg(feature = "log")] - debug!("Reading wallets from '{}'", wallets_path.display()); - let wallets = if !wallets_path.exists() { - #[cfg(feature = "log")] - info!("Wallet file not found, creating new wallet list"); - #[cfg(feature = "cli")] - eprintln!("Wallet file not found, creating new wallet list"); - empty!() - } else { - let wallets_fd = File::open(&wallets_path)?; - serde_yaml::from_reader(&wallets_fd)? - }; + let stock = Stock::load(&stock_path).or_else(init)?; Ok(Self { stock_path, - wallets_path, stock, - wallets, + wallet, chain, }) } +} + +impl, K> Runtime { + fn store(&mut self) { + self.stock + .store(&self.stock_path) + .expect("unable to save stock"); + // TODO: self.bprt.store() + /* + let wallets_fd = File::create(&self.wallets_path) + .expect("unable to access wallet file; wallets are not saved"); + serde_yaml::to_writer(wallets_fd, &self.wallets).expect("unable to save wallets"); + */ + } + + pub fn attach(&mut self, wallet: Wallet) { self.wallet = wallet } + + pub fn descriptor(&self) -> &D { self.wallet.deref() } pub fn unload(self) -> () {} + pub fn address_network(&self) -> AddressNetwork { self.chain.into() } + + /* pub fn create_wallet( &mut self, name: &Ident, @@ -188,6 +256,7 @@ impl Runtime { .ok_or(RuntimeError::WalletUnknown(name.clone()))?; Ok(RgbWallet::new(descr.clone())) } + */ pub fn import_contract( &mut self, @@ -202,10 +271,10 @@ impl Runtime { .map_err(RuntimeError::from) } - pub fn validate_transfer<'transfer>( + pub fn validate_transfer( &mut self, transfer: Transfer, - resolver: &mut impl ResolveTx, + resolver: &mut R, ) -> Result { transfer .validate(resolver) @@ -228,13 +297,6 @@ impl Runtime { } } -impl Drop for Runtime { - fn drop(&mut self) { - self.stock - .store(&self.stock_path) - .expect("unable to save stock"); - let wallets_fd = File::create(&self.wallets_path) - .expect("unable to access wallet file; wallets are not saved"); - serde_yaml::to_writer(wallets_fd, &self.wallets).expect("unable to save wallets"); - } +impl, K> Drop for Runtime { + fn drop(&mut self) { self.store() } } diff --git a/src/args.rs b/src/args.rs new file mode 100644 index 00000000..27fd5341 --- /dev/null +++ b/src/args.rs @@ -0,0 +1,77 @@ +// RGB smart contracts for Bitcoin & Lightning +// +// SPDX-License-Identifier: Apache-2.0 +// +// Written in 2019-2023 by +// Dr Maxim Orlovsky +// +// Copyright (C) 2019-2023 LNP/BP Standards Association. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +use bp_util::DescriptorOpts; +use bpstd::XpubDerivable; +use rgb::descriptor::{DescriptorRgb, TapretKey}; +use rgb_rt::{Runtime, RuntimeError}; + +use crate::Command; + +#[derive(Args, Clone, PartialEq, Eq, Debug)] +pub struct DescrRgbOpts { + /// Use tapret(KEY) descriptor as wallet. + #[arg(long, global = true)] + pub tapret_key_only: Option, +} + +impl DescriptorOpts for DescrRgbOpts { + type Descr = DescriptorRgb; + + fn is_some(&self) -> bool { self.tapret_key_only.is_some() } + + fn descriptor(&self) -> Option { + self.tapret_key_only + .clone() + .map(TapretKey::from) + .map(TapretKey::into) + } +} + +/// Command-line arguments +#[derive(Parser)] +#[derive(Wrapper, WrapperMut, Clone, Eq, PartialEq, Debug, From)] +#[wrapper(Deref)] +#[wrapper_mut(DerefMut)] +#[command(author, version, about)] +pub struct RgbArgs { + #[clap(flatten)] + #[from] + #[wrap] + pub inner: bp_util::Args, +} + +impl Default for RgbArgs { + fn default() -> Self { unreachable!() } +} + +impl RgbArgs { + pub fn rgb_runtime(&self) -> Result { + eprint!("Loading stock ... "); + let runtime = Runtime::::load_pure_rgb( + self.general.data_dir.clone(), + self.general.chain, + )?; + eprintln!("success"); + + Ok(runtime) + } +} diff --git a/src/bin/rgb/loglevel.rs b/src/bin/rgb/loglevel.rs deleted file mode 100644 index 27ecb4bf..00000000 --- a/src/bin/rgb/loglevel.rs +++ /dev/null @@ -1,96 +0,0 @@ -// RGB smart contracts for Bitcoin & Lightning -// -// SPDX-License-Identifier: Apache-2.0 -// -// Written in 2019-2023 by -// Dr Maxim Orlovsky -// -// Copyright (C) 2019-2023 LNP/BP Standards Association. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -use std::env; - -use log::LevelFilter; - -/// Represents desired logging verbosity level -#[derive(Copy, Clone, PartialEq, Eq, Debug, Display)] -pub enum LogLevel { - /// Report only errors to `stderr` and normal program output to stdin - /// (if it is not directed to a file). Corresponds to zero verbosity - /// flags. - #[display("error")] - Error = 0, - - /// Report warning messages and errors, plus standard program output. - /// Corresponds to a single `-v` verbosity flag. - #[display("warn")] - Warn, - - /// Report genetic information messages, warnings and errors. - /// Corresponds to a double `-vv` verbosity flag. - #[display("info")] - Info, - - /// Report debugging information and all non-trace messages, including - /// general information, warnings and errors. - /// Corresponds to triple `-vvv` verbosity flag. - #[display("debug")] - Debug, - - /// Print all possible messages including tracing information. - /// Corresponds to quadruple `-vvvv` verbosity flag. - #[display("trace")] - Trace, -} - -impl From for LogLevel { - fn from(val: u8) -> Self { Self::from_verbosity_flag_count(val) } -} - -impl From for u8 { - fn from(log_level: LogLevel) -> Self { log_level.verbosity_flag_count() } -} - -impl LogLevel { - /// Indicates number of required verbosity flags - pub fn verbosity_flag_count(&self) -> u8 { - match self { - LogLevel::Error => 0, - LogLevel::Warn => 1, - LogLevel::Info => 2, - LogLevel::Debug => 3, - LogLevel::Trace => 4, - } - } - - /// Constructs enum value from a given number of verbosity flags - pub fn from_verbosity_flag_count(level: u8) -> Self { - match level { - 0 => LogLevel::Error, - 1 => LogLevel::Warn, - 2 => LogLevel::Info, - 3 => LogLevel::Debug, - _ => LogLevel::Trace, - } - } - - /// Applies log level to the system - pub fn apply(&self) { - log::set_max_level(LevelFilter::Trace); - if env::var("RUST_LOG").is_err() { - env::set_var("RUST_LOG", self.to_string()); - } - env_logger::init(); - } -} diff --git a/src/bin/rgb/opts.rs b/src/bin/rgb/opts.rs deleted file mode 100644 index 59f9af57..00000000 --- a/src/bin/rgb/opts.rs +++ /dev/null @@ -1,78 +0,0 @@ -// RGB smart contracts for Bitcoin & Lightning -// -// SPDX-License-Identifier: Apache-2.0 -// -// Written in 2019-2023 by -// Dr Maxim Orlovsky -// -// Copyright (C) 2019-2023 LNP/BP Standards Association. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -use std::path::PathBuf; - -use clap::ValueHint; -use rgbstd::Chain; - -use crate::{Command, RGB_DATA_DIR}; - -/// Command-line arguments -#[derive(Parser)] -#[derive(Clone, Eq, PartialEq, Debug)] -#[command(author, version, about)] -pub struct Opts { - /// Set verbosity level. - /// - /// Can be used multiple times to increase verbosity. - #[clap(short, long, global = true, action = clap::ArgAction::Count)] - pub verbose: u8, - - /// Data directory path. - /// - /// Path to the directory that contains RGB stored data. - #[clap( - short, - long, - global = true, - default_value = RGB_DATA_DIR, - env = "RGB_DATA_DIR", - value_hint = ValueHint::DirPath - )] - pub data_dir: PathBuf, - - /// Blockchain to use. - #[clap( - short = 'n', - long, - global = true, - alias = "network", - default_value = "testnet", - env = "RGB_NETWORK" - )] - pub chain: Chain, - - /// Electrum server to use. - #[clap(short, long, env = "RGB_ELECTRUM_SERVER")] - pub electrum: Option, - - /// Command to execute. - #[clap(subcommand)] - pub command: Command, -} - -impl Opts { - pub fn process(&mut self) { - self.data_dir = - PathBuf::from(shellexpand::tilde(&self.data_dir.display().to_string()).to_string()); - } -} diff --git a/src/bin/rgb/command.rs b/src/command.rs similarity index 80% rename from src/bin/rgb/command.rs rename to src/command.rs index 65a8c8b7..55e4a280 100644 --- a/src/bin/rgb/command.rs +++ b/src/command.rs @@ -24,22 +24,23 @@ use std::path::PathBuf; use std::str::FromStr; use amplify::confinement::U16; -use bitcoin::bip32::ExtendedPubKey; -use bitcoin::psbt::Psbt; -use bp::seals::txout::{CloseMethod, ExplicitSeal, TxPtr}; -use rgb::{BlockchainResolver, Runtime, RuntimeError}; -use rgbstd::containers::{Bindle, Transfer, UniversalBindle}; -use rgbstd::contract::{ContractId, GenesisSeal, GraphSeal, StateType}; -use rgbstd::interface::{ContractBuilder, SchemaIfaces, TypedState}; -use rgbstd::persistence::{Inventory, Stash}; -use rgbstd::schema::SchemaId; -use rgbstd::Txid; -use rgbwallet::psbt::opret::OutputOpret; -use rgbwallet::psbt::tapret::OutputTapret; -use rgbwallet::{InventoryWallet, RgbInvoice, RgbTransport}; -use strict_types::encoding::{FieldName, Ident, TypeName}; +use bp_util::{Config, Exec}; +use bpstd::Txid; +use rgb::containers::{Bindle, Transfer, UniversalBindle}; +use rgb::contract::{ContractId, GenesisSeal, GraphSeal, StateType}; +use rgb::descriptor::DescriptorRgb; +use rgb::interface::{ContractBuilder, FilterExclude, SchemaIfaces, TypedState}; +use rgb::persistence::{Inventory, Stash}; +use rgb::schema::SchemaId; +use rgb_rt::RuntimeError; +use rgbinvoice::{RgbInvoice, RgbTransport}; +use seals::txout::{CloseMethod, ExplicitSeal, TxPtr}; +use strict_types::encoding::{FieldName, TypeName}; use strict_types::StrictVal; +use crate::resolver::PanickingResolver; +use crate::RgbArgs; + // TODO: For now, serde implementation doesn't work for consignments due to // some of the keys which can't be serialized to strings. Once this fixed, // allow this inspect formats option @@ -56,44 +57,22 @@ pub enum InspectFormat { } */ -#[derive(Subcommand, Clone, PartialEq, Eq, Debug, Display)] -#[display(lowercase)] +#[derive(Subcommand, Clone, PartialEq, Eq, Debug)] pub enum Command { + #[clap(flatten)] + Bp(bp_util::Command), + /// Prints out list of known RGB schemata. Schemata, /// Prints out list of known RGB interfaces. Interfaces, /// Prints out list of known RGB contracts. Contracts, - /// Prints out list of wallets. - Wallets { - /// Print out full descriptor with all tapret commitments. - #[clap(short, long)] - long: bool, - }, - - /// Create a new wallet (only key-spent only taproot wallets are supported). - Create { - /// Name of the new wallet - name: Ident, - - /// Extended public key (account-level) to create a new wallet using - /// key-only taproot descriptor. - xpub: ExtendedPubKey, - }, - - /// Display list of UTXOs for a given wallet. - Utxos { - /// Wallet to filter the state. - #[clap(short, long, default_value = "default")] - wallet: Ident, - }, /// Imports RGB data into the stash: contracts, schema, interfaces, etc. - #[display("import")] Import { /// Use BASE64 ASCII armoring for binary data. - #[clap(short)] + #[arg(short)] armored: bool, /// File with RGB data. If not provided, assumes `-a` and prints out @@ -102,10 +81,9 @@ pub enum Command { }, /// Exports existing RGB contract. - #[display("export")] Export { /// Use BASE64 ASCII armoring for binary data. - #[clap(short)] + #[arg(short)] armored: bool, /// Contract to export. @@ -117,12 +95,7 @@ pub enum Command { }, /// Reports information about state of a contract. - #[display("state")] State { - /// Wallet to filter the state. - #[clap(short, long)] - wallet: Option, - /// Contract identifier. contract_id: ContractId, /// Interface to interpret the state data. @@ -130,7 +103,6 @@ pub enum Command { }, /// Issues new contract. - #[display("issue")] Issue { /// Schema name to use for the contract. schema: SchemaId, //String, @@ -143,7 +115,6 @@ pub enum Command { }, /// Create new invoice. - #[display("invoice")] Invoice { /// Contract identifier. contract_id: ContractId, @@ -159,7 +130,6 @@ pub enum Command { }, /// Create new transfer. - #[display("transfer")] Transfer { #[clap(long, default_value = "tapret1st")] /// Method for single-use-seals. @@ -176,7 +146,6 @@ pub enum Command { }, /// Inspects any RGB data file. - #[display("inspect")] Inspect { // #[clap(short, long, default_value = "yaml")] // /// Format used for data inspection @@ -186,25 +155,22 @@ pub enum Command { }, /// Debug-dump all stash and inventory data. - #[display("dump")] Dump { /// Directory to put the dump into. - #[clap(default_value = "./rgb-dump")] + #[arg(default_value = "./rgb-dump")] root_dir: String, }, /// Validate transfer consignment. - #[display("validate")] Validate { /// File with the transfer consignment. file: PathBuf, }, /// Validate transfer consignment & accept to the stash. - #[display("accept")] Accept { /// Force accepting consignments with non-mined terminal witness. - #[clap(short, long)] + #[arg(short, long)] force: bool, /// File with the transfer consignment. @@ -212,9 +178,8 @@ pub enum Command { }, /// Set first opret/tapret output to host a commitment - #[display("set-host")] SetHost { - #[clap(long, default_value = "tapret1st")] + #[arg(long, default_value = "tapret1st")] /// Method for single-use-seals. method: CloseMethod, @@ -223,14 +188,17 @@ pub enum Command { }, } -impl Command { - pub fn exec( - self, - runtime: &mut Runtime, - resolver: &mut BlockchainResolver, - ) -> Result<(), RuntimeError> { - match self { +impl Exec for RgbArgs { + type Error = RuntimeError; + const CONF_FILE_NAME: &'static str = "rgb.toml"; + + fn exec(self, config: Config, name: &'static str) -> Result<(), RuntimeError> { + match &self.command { + Command::Bp(cmd) => { + self.inner.translate(cmd).exec(config, "rgb")?; + } Command::Schemata => { + let runtime = self.rgb_runtime()?; for id in runtime.schema_ids()? { print!("{id} "); for iimpl in runtime.schema(id)?.iimpls.values() { @@ -241,46 +209,24 @@ impl Command { } } Command::Interfaces => { + let runtime = self.rgb_runtime()?; for (id, name) in runtime.ifaces()? { println!("{} {id}", name); } } Command::Contracts => { + let runtime = self.rgb_runtime()?; for id in runtime.contract_ids()? { println!("{id}"); } } - Command::Wallets { long: details } => { - for (name, descriptor) in runtime.wallets() { - if details { - println!("{name} {descriptor:#}"); - } else { - println!("{name} {descriptor}"); - } - } - } - - Command::Create { name, xpub } => { - let descr = runtime.create_wallet(&name, xpub)?; - println!("Created new wallet '{name}' with descriptor '{descr}'"); - } - - Command::Utxos { wallet } => { - let wallet = runtime.wallet(&wallet)?; - for utxo in &wallet.utxos { - println!( - "outpoint={}, height={}, amount={}, derivation={}", - utxo.outpoint, utxo.status, utxo.amount, utxo.derivation - ); - } - } - Command::Import { armored, file } => { - if armored { + let mut runtime = self.rgb_runtime()?; + if *armored { todo!() } else { - let bindle = UniversalBindle::load(file)?; + let bindle = UniversalBindle::load_file(file)?; match bindle { UniversalBindle::Iface(iface) => { let id = iface.id(); @@ -304,11 +250,13 @@ impl Command { ); } UniversalBindle::Contract(bindle) => { + let mut resolver = self.resolver(); let id = bindle.id(); - let contract = bindle.unbindle().validate(resolver).map_err(|c| { - c.validation_status().expect("just validated").to_string() - })?; - runtime.import_contract(contract, resolver)?; + let contract = + bindle.unbindle().validate(&mut resolver).map_err(|c| { + c.validation_status().expect("just validated").to_string() + })?; + runtime.import_contract(contract, &mut resolver)?; eprintln!("Contract {id} imported to the stash"); } UniversalBindle::Transfer(_) => { @@ -324,8 +272,9 @@ impl Command { contract, file, } => { + let mut runtime = self.rgb_runtime()?; let bindle = runtime - .export_contract(contract) + .export_contract(*contract) .map_err(|err| err.to_string())?; if let Some(file) = file { // TODO: handle armored flag @@ -336,21 +285,13 @@ impl Command { } } - Command::State { - wallet, - contract_id, - iface, - } => { - let wallet = wallet - .map(|w| -> Result<_, RuntimeError> { - let mut wallet = runtime.wallet(&w)?; - wallet.update(resolver)?; - Ok(wallet) - }) - .transpose()?; + Command::State { contract_id, iface } => { + let mut runtime = self.rgb_runtime()?; + let bp_runtime = self.bp_runtime::(&config)?; + runtime.attach(bp_runtime.detach()); - let iface = runtime.iface_by_name(&tn!(iface))?.clone(); - let contract = runtime.contract_iface(contract_id, iface.iface_id())?; + let iface = runtime.iface_by_name(&tn!(iface.to_owned()))?.clone(); + let contract = runtime.contract_iface_id(*contract_id, iface.iface_id())?; println!("Global:"); for global in &contract.iface.global_state { @@ -364,24 +305,22 @@ impl Command { println!("\nOwned:"); for owned in &contract.iface.assignments { println!(" {}:", owned.name); - if let Ok(allocations) = contract.fungible(owned.name.clone(), &None) { + if let Ok(allocations) = contract.fungible(owned.name.clone(), &runtime) { for allocation in allocations { - if let Some(utxo) = - wallet.as_ref().and_then(|w| w.utxo(allocation.owner)) - { - println!( - " amount={}, utxo={}, witness={}, derivation={}", - allocation.value, - allocation.owner, - allocation.witness, - utxo.derivation - ); - } else { - println!( - " amount={}, utxo={}, witness={} # owner unknown", - allocation.value, allocation.owner, allocation.witness - ); - } + println!( + " amount={}, utxo={}, witness={} # owned by the wallet", + allocation.value, allocation.owner, allocation.witness, + ); + } + } + if let Ok(allocations) = + contract.fungible(owned.name.clone(), &FilterExclude(&runtime)) + { + for allocation in allocations { + println!( + " amount={}, utxo={}, witness={} # owner unknown", + allocation.value, allocation.owner, allocation.witness + ); } } // TODO: Print out other types of state @@ -392,11 +331,12 @@ impl Command { iface: iface_name, contract, } => { + let mut runtime = self.rgb_runtime()?; let SchemaIfaces { ref schema, ref iimpls, - } = runtime.schema(schema)?; - let iface_name = tn!(iface_name); + } = runtime.schema(*schema)?; + let iface_name = tn!(iface_name.to_owned()); let iface = runtime.iface_by_name(&iface_name)?.clone(); let iface_id = iface.iface_id(); let iface_impl = iimpls.get(&iface_id).ok_or_else(|| { @@ -521,11 +461,12 @@ impl Command { let contract = builder.issue_contract().expect("failure issuing contract"); let id = contract.contract_id(); + let mut resolver = PanickingResolver; let validated_contract = contract - .validate(resolver) + .validate(&mut resolver) .map_err(|_| RuntimeError::IncompleteContract)?; runtime - .import_contract(validated_contract, resolver) + .import_contract(validated_contract, &mut resolver) .expect("failure importing issued contract"); eprintln!( "A new contract {id} is issued and added to the stash.\nUse `export` command \ @@ -538,16 +479,17 @@ impl Command { value, seal, } => { - let iface = TypeName::try_from(iface).expect("invalid interface name"); + let mut runtime = self.rgb_runtime()?; + let iface = TypeName::try_from(iface.to_owned()).expect("invalid interface name"); let seal = GraphSeal::from(seal); let invoice = RgbInvoice { transports: vec![RgbTransport::UnspecifiedMeans], - contract: Some(contract_id), + contract: Some(*contract_id), iface: Some(iface), operation: None, assignment: None, beneficiary: seal.to_concealed_seal().into(), - owned_state: TypedState::Amount(value), + owned_state: TypedState::Amount(*value), chain: None, expiry: None, unknown_query: none!(), @@ -561,6 +503,8 @@ impl Command { invoice, out_file, } => { + todo!() + /* // TODO: Check PSBT format let psbt_data = fs::read(&psbt_file)?; let mut psbt = Psbt::deserialize(&psbt_data)?; @@ -577,9 +521,10 @@ impl Command { psbt_file.display() ); eprintln!("Stash data are updated."); + */ } Command::Inspect { file } => { - let bindle = UniversalBindle::load(file)?; + let bindle = UniversalBindle::load_file(file)?; // TODO: For now, serde implementation doesn't work for consignments due to // some of the keys which can't be serialized to strings. Once this fixed, // allow this inspect formats option @@ -601,6 +546,8 @@ impl Command { println!("{bindle:#?}"); } Command::Dump { root_dir } => { + let runtime = self.rgb_runtime()?; + fs::remove_dir_all(&root_dir).ok(); fs::create_dir_all(format!("{root_dir}/stash/schemata"))?; fs::create_dir_all(format!("{root_dir}/stash/ifaces"))?; @@ -686,8 +633,9 @@ impl Command { eprintln!("Dump is successfully generated and saved to '{root_dir}'"); } Command::Validate { file } => { - let bindle = Bindle::::load(file)?; - let status = match bindle.unbindle().validate(resolver) { + let mut resolver = self.resolver(); + let bindle = Bindle::::load_file(file)?; + let status = match bindle.unbindle().validate(&mut resolver) { Ok(consignment) => consignment.into_validation_status(), Err(consignment) => consignment.into_validation_status(), } @@ -695,13 +643,20 @@ impl Command { eprintln!("{status}"); } Command::Accept { force, file } => { - let bindle = Bindle::::load(file)?; - let transfer = bindle.unbindle().validate(resolver).unwrap_or_else(|c| c); + let mut runtime = self.rgb_runtime()?; + let mut resolver = self.resolver(); + let bindle = Bindle::::load_file(file)?; + let transfer = bindle + .unbindle() + .validate(&mut resolver) + .unwrap_or_else(|c| c); eprintln!("{}", transfer.validation_status().expect("just validated")); - runtime.accept_transfer(transfer, resolver, force)?; + runtime.accept_transfer(transfer, &mut resolver, *force)?; eprintln!("Transfer accepted into the stash"); } Command::SetHost { method, psbt_file } => { + todo!(); + /* let psbt_data = fs::read(&psbt_file)?; let mut psbt = Psbt::deserialize(&psbt_data)?; let mut psbt_modified = false; @@ -741,6 +696,7 @@ impl Command { psbt_file.display() ); } + */ } } diff --git a/src/bin/rgb/main.rs b/src/main.rs similarity index 50% rename from src/bin/rgb/main.rs rename to src/main.rs index 697987a9..fc13ac6a 100644 --- a/src/bin/rgb/main.rs +++ b/src/main.rs @@ -27,32 +27,21 @@ extern crate strict_types; extern crate log; #[macro_use] extern crate clap; +extern crate serde_crate as serde; -mod loglevel; -mod opts; mod command; +mod args; +mod resolver; use std::process::ExitCode; +use bp_util::{Config, Exec, LogLevel}; use clap::Parser; -use rgb::{BlockchainResolver, DefaultResolver, Runtime, RuntimeError}; +use rgb_rt::RuntimeError; +pub use crate::args::RgbArgs; pub use crate::command::Command; -pub use crate::loglevel::LogLevel; -pub use crate::opts::Opts; - -#[cfg(any(target_os = "linux"))] -pub const RGB_DATA_DIR: &str = "~/.rgb"; -#[cfg(any(target_os = "freebsd", target_os = "openbsd", target_os = "netbsd"))] -pub const RGB_DATA_DIR: &str = "~/.rgb"; -#[cfg(target_os = "macos")] -pub const RGB_DATA_DIR: &str = "~/Library/Application Support/RGB Smart Contracts"; -#[cfg(target_os = "windows")] -pub const RGB_DATA_DIR: &str = "~\\AppData\\Local\\RGB Smart Contracts"; -#[cfg(target_os = "ios")] -pub const RGB_DATA_DIR: &str = "~/Documents"; -#[cfg(target_os = "android")] -pub const RGB_DATA_DIR: &str = "."; +pub use crate::resolver::PanickingResolver; fn main() -> ExitCode { if let Err(err) = run() { @@ -64,18 +53,15 @@ fn main() -> ExitCode { } fn run() -> Result<(), RuntimeError> { - let mut opts = Opts::parse(); - opts.process(); - LogLevel::from_verbosity_flag_count(opts.verbose).apply(); - trace!("Command-line arguments: {:#?}", &opts); + let mut args = RgbArgs::parse(); + args.process(); + LogLevel::from_verbosity_flag_count(args.verbose).apply(); + trace!("Command-line arguments: {:#?}", &args); - let electrum = opts - .electrum - .unwrap_or_else(|| opts.chain.default_resolver()); + eprintln!("RGB: command-line wallet for RGB smart contracts"); + eprintln!(" by LNP/BP Standards Association\n"); - let mut resolver = BlockchainResolver::with(&electrum)?; - let mut runtime = Runtime::load(opts.data_dir.clone(), opts.chain)?; - debug!("Executing command: {}", opts.command); - opts.command.exec(&mut runtime, &mut resolver)?; - Ok(()) + let conf = Config::load(&args.conf_path("rgb")); + debug!("Executing command: {:?}", args.command); + args.exec(conf, "rgb") } diff --git a/src/resolver.rs b/src/resolver.rs new file mode 100644 index 00000000..e7a4f47d --- /dev/null +++ b/src/resolver.rs @@ -0,0 +1,60 @@ +// RGB smart contract wallet runtime +// +// SPDX-License-Identifier: Apache-2.0 +// +// Written in 2019-2023 by +// Dr Maxim Orlovsky +// +// Copyright (C) 2019-2023 LNP/BP Standards Association. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +use std::convert::Infallible; + +use bpstd::{Tx, Txid}; +use rgb::resolvers::ResolveHeight; +use rgb::validation::{ResolveTx, TxResolverError}; +use rgb::WitnessOrd; + +use crate::RgbArgs; + +// TODO: Embed in contract issuance builder +pub struct PanickingResolver; +impl ResolveHeight for PanickingResolver { + type Error = Infallible; + fn resolve_height(&mut self, _: Txid) -> Result { + unreachable!("PanickingResolver must be used only for newly issued contract validation") + } +} +impl ResolveTx for PanickingResolver { + fn resolve_tx(&self, _: Txid) -> Result { + unreachable!("PanickingResolver must be used only for newly issued contract validation") + } +} + +impl RgbArgs { + pub fn resolver(&self) -> impl ResolveTx + ResolveHeight { + #[derive(Default)] + struct DumbResolver(); + impl ResolveHeight for DumbResolver { + type Error = Infallible; + fn resolve_height(&mut self, _: Txid) -> Result { + Ok(WitnessOrd::OffChain) + } + } + impl ResolveTx for DumbResolver { + fn resolve_tx(&self, _: Txid) -> Result { todo!() } + } + DumbResolver::default() + } +} diff --git a/src/wallet.rs b/src/wallet.rs deleted file mode 100644 index 2dcd051e..00000000 --- a/src/wallet.rs +++ /dev/null @@ -1,247 +0,0 @@ -// RGB smart contracts for Bitcoin & Lightning -// -// SPDX-License-Identifier: Apache-2.0 -// -// Written in 2019-2023 by -// Dr Maxim Orlovsky -// -// Copyright (C) 2019-2023 LNP/BP Standards Association. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -use std::collections::{BTreeMap, BTreeSet}; - -use bitcoin::ScriptBuf; -use bp::Outpoint; - -use crate::descriptor::DeriveInfo; -use crate::{RgbDescr, SpkDescriptor}; - -#[derive(Copy, Clone, Ord, PartialOrd, Eq, PartialEq, Hash, Debug, Display)] -pub enum MiningStatus { - #[display("~")] - Mempool, - #[display(inner)] - Blockchain(u32), -} - -#[derive(Clone, Ord, PartialOrd, Eq, PartialEq, Hash, Debug)] -pub struct Utxo { - pub outpoint: Outpoint, - pub status: MiningStatus, - pub amount: u64, - pub derivation: DeriveInfo, -} - -pub trait Resolver { - fn resolve_utxo<'s>( - &mut self, - scripts: BTreeMap, - ) -> Result, String>; -} - -#[derive(Clone, Debug)] -pub struct RgbWallet { - pub descr: RgbDescr, - pub utxos: BTreeSet, -} - -impl RgbWallet { - pub fn new(descr: RgbDescr) -> Self { - Self { - descr, - utxos: empty!(), - } - } - - pub fn update(&mut self, resolver: &mut impl Resolver) -> Result<(), String> { - const STEP: u32 = 20; - for app in [0, 1, 9, 10] { - let mut index = 0; - loop { - #[cfg(feature = "log")] - debug!("Requesting {STEP} scripts from the Electrum server"); - let scripts = self.descr.derive(app, index..(index + STEP)); - let set = resolver.resolve_utxo(scripts)?; - if set.is_empty() { - break; - } - #[cfg(feature = "log")] - debug!("Electrum server returned {} UTXOs", set.len()); - self.utxos.extend(set); - index += STEP; - } - } - - Ok(()) - } - - pub fn utxo(&self, outpoint: Outpoint) -> Option<&Utxo> { - self.utxos.iter().find(|utxo| utxo.outpoint == outpoint) - } -} - -pub trait DefaultResolver { - fn default_resolver(&self) -> String; -} - -#[cfg(feature = "electrum")] -#[derive(Wrapper, WrapperMut, From)] -#[wrapper(Deref)] -#[wrapper_mut(DerefMut)] -pub struct BlockchainResolver(electrum_client::Client); - -#[cfg(feature = "electrum")] -impl BlockchainResolver { - pub fn with(url: &str) -> Result { - electrum_client::Client::new(url).map(Self) - } -} - -#[cfg(feature = "electrum")] -mod _electrum { - use amplify::RawArray; - use bitcoin::hashes::Hash; - use bitcoin::{Script, ScriptBuf}; - use bp::{Chain, LockTime, SeqNo, Tx, TxIn, TxOut, TxVer, Txid, VarIntArray, Witness}; - use electrum_client::{ElectrumApi, Error, ListUnspentRes}; - use rgbstd::contract::WitnessOrd; - use rgbstd::resolvers::ResolveHeight; - use rgbstd::validation::{ResolveTx, TxResolverError}; - - use super::*; - - impl DefaultResolver for Chain { - fn default_resolver(&self) -> String { - match self { - Chain::Bitcoin => s!("blockstream.info:110"), - Chain::Testnet3 => s!("blockstream.info:143"), - Chain::Regtest => s!("localhost:50001"), - chain => { - panic!("no default server is known for {chain}, please provide a custom URL") - } - } - } - } - - impl Resolver for BlockchainResolver { - fn resolve_utxo<'s>( - &mut self, - scripts: BTreeMap, - ) -> Result, String> { - Ok(self - .batch_script_list_unspent(scripts.values().map(ScriptBuf::as_script)) - .map_err(|err| err.to_string())? - .into_iter() - .zip(scripts.into_keys()) - .flat_map(|(list, derivation)| { - list.into_iter() - .map(move |res| Utxo::with(derivation.clone(), res)) - }) - .collect()) - } - } - - impl ResolveTx for BlockchainResolver { - fn resolve_tx(&self, txid: Txid) -> Result { - let tx = self - .0 - .transaction_get(&bitcoin::Txid::from_byte_array(txid.to_raw_array())) - .map_err(|err| match err { - Error::Message(_) | Error::Protocol(_) => TxResolverError::Unknown(txid), - err => TxResolverError::Other(txid, err.to_string()), - })?; - Ok(Tx { - version: TxVer::from_consensus_i32(tx.version) - .try_into() - .expect("non-consensus tx version"), - inputs: VarIntArray::try_from_iter(tx.input.into_iter().map(|txin| TxIn { - prev_output: Outpoint::new( - txin.previous_output.txid.to_byte_array().into(), - txin.previous_output.vout, - ), - sig_script: txin.script_sig.to_bytes().into(), - sequence: SeqNo::from_consensus_u32(txin.sequence.to_consensus_u32()), - witness: Witness::from_consensus_stack(txin.witness.to_vec()), - })) - .expect("consensus-invalid transaction"), - outputs: VarIntArray::try_from_iter(tx.output.into_iter().map(|txout| TxOut { - value: txout.value.into(), - script_pubkey: txout.script_pubkey.to_bytes().into(), - })) - .expect("consensus-invalid transaction"), - lock_time: LockTime::from_consensus_u32(tx.lock_time.to_consensus_u32()), - }) - } - } - - impl ResolveHeight for BlockchainResolver { - type Error = TxResolverError; - fn resolve_height(&mut self, txid: Txid) -> Result { - let tx = match self - .0 - .transaction_get(&bitcoin::Txid::from_byte_array(txid.to_raw_array())) - { - Ok(tx) => tx, - Err(Error::Message(_) | Error::Protocol(_)) => return Ok(WitnessOrd::OffChain), - Err(err) => return Err(TxResolverError::Other(txid, err.to_string())), - }; - - let scripts: Vec<&Script> = tx - .output - .iter() - .map(|out| out.script_pubkey.as_script()) - .collect(); - - let mut hists = vec![]; - self.0 - .batch_script_get_history(scripts) - .map_err(|err| match err { - Error::Message(_) | Error::Protocol(_) => TxResolverError::Unknown(txid), - err => TxResolverError::Other(txid, err.to_string()), - })? - .into_iter() - .for_each(|h| hists.extend(h)); - let transactions: BTreeMap = hists - .into_iter() - .map(|h| (h.tx_hash, if h.height > 0 { h.height as u32 } else { 0 })) - .collect(); - - let min_height = transactions - .into_values() - .min() - .map(WitnessOrd::with_mempool_or_height) - .unwrap_or(WitnessOrd::OffChain); - - Ok(min_height) - } - } - - impl Utxo { - fn with(derivation: DeriveInfo, res: ListUnspentRes) -> Self { - Utxo { - status: if res.height == 0 { - MiningStatus::Mempool - } else { - MiningStatus::Blockchain(res.height as u32) - }, - outpoint: Outpoint::new( - Txid::from_raw_array(res.tx_hash.to_byte_array()), - res.tx_pos as u32, - ), - derivation, - amount: res.value, - } - } - } -}