diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 4d316ce..336c525 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -23,6 +23,7 @@ jobs: with: components: llvm-tools-preview toolchain: stable + rustflags: "" - name: Install llvm-cov env: diff --git a/.gitmodules b/.gitmodules index 7b781f5..55f50d6 100644 --- a/.gitmodules +++ b/.gitmodules @@ -61,3 +61,6 @@ [submodule "amplify-nonasync"] path = amplify-nonasync url = https://github.com/rust-amplify/amplify-nonasync.git +[submodule "altered_submodules/rgb"] + path = altered_submodules/rgb + url = https://github.com/RGB-WG/rgb diff --git a/Cargo.lock b/Cargo.lock index 923c3be..b3cb480 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,18 +4,18 @@ version = 3 [[package]] name = "addr2line" -version = "0.21.0" +version = "0.24.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" +checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" dependencies = [ "gimli", ] [[package]] -name = "adler" -version = "1.0.2" +name = "adler2" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" +checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" [[package]] name = "aho-corasick" @@ -34,7 +34,7 @@ dependencies = [ "ascii-armor", "baid64", "blake3", - "getrandom", + "getrandom 0.2.15", "half", "paste", "ripemd", @@ -47,7 +47,7 @@ dependencies = [ [[package]] name = "amplify" -version = "4.7.0" +version = "4.7.1" dependencies = [ "amplify_apfloat", "amplify_derive", @@ -65,7 +65,7 @@ name = "amplify_apfloat" version = "0.3.1" dependencies = [ "amplify_num", - "bitflags 2.5.0", + "bitflags 2.8.0", "wasm-bindgen", ] @@ -113,15 +113,15 @@ dependencies = [ [[package]] name = "arrayref" -version = "0.3.7" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545" +checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" [[package]] name = "arrayvec" -version = "0.7.4" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" +checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" [[package]] name = "ascii" @@ -145,50 +145,48 @@ dependencies = [ [[package]] name = "autocfg" -version = "1.2.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1fdabc7756949593fe60f30ec81974b613357de856987752631dea1e3394c80" +checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" [[package]] name = "aws-lc-rs" -version = "1.7.3" +version = "1.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf7d844e282b4b56750b2d4e893b2205581ded8709fddd2b6aa5418c150ca877" +checksum = "4c2b7ddaa2c56a367ad27a094ad8ef4faacf8a617c2575acb2ba88949df999ca" dependencies = [ "aws-lc-sys", - "mirai-annotations", "paste", "zeroize", ] [[package]] name = "aws-lc-sys" -version = "0.18.0" +version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3a2c29203f6bf296d01141cc8bb9dbd5ecd4c27843f2ee0767bcd5985a927da" +checksum = "71b2ddd3ada61a305e1d8bb6c005d1eaa7d14d903681edfc400406d523a9b491" dependencies = [ "bindgen", "cc", "cmake", "dunce", "fs_extra", - "libc", "paste", ] [[package]] name = "backtrace" -version = "0.3.71" +version = "0.3.74" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26b05800d2e817c8b3b4b54abd461726265fa9789ae34330622f2db9ee696f9d" +checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" dependencies = [ "addr2line", - "cc", "cfg-if", "libc", "miniz_oxide", "object", "rustc-demangle", + "windows-targets", ] [[package]] @@ -196,11 +194,17 @@ name = "baid64" version = "0.2.2" dependencies = [ "amplify", - "base64", + "base64 0.22.1", "mnemonic", "sha2", ] +[[package]] +name = "base64" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3441f0f7b02788e948e47f457ca01f1d7e6d92c693bc132c22b087d3141c03ff" + [[package]] name = "base64" version = "0.22.1" @@ -224,11 +228,11 @@ checksum = "d86b93f97252c47b41663388e6d155714a9d0c398b99f1005cbc5f978b29f445" [[package]] name = "bindgen" -version = "0.69.4" +version = "0.69.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a00dc851838a2120612785d195287475a3ac45514741da670b735818822129a0" +checksum = "271383c67ccabffb7381723dea0672a673f292304fcb45c01cc648c7a8d58088" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.8.0", "cexpr", "clang-sys", "itertools", @@ -241,21 +245,15 @@ dependencies = [ "regex", "rustc-hash", "shlex", - "syn 2.0.66", + "syn 2.0.96", "which", ] [[package]] name = "bitcoin-io" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "340e09e8399c7bd8912f495af6aa58bea0c9214773417ffaa8f6460f93aaee56" - -[[package]] -name = "bitcoin-private" -version = "0.1.0" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73290177011694f38ec25e165d0387ab7ea749a4b81cd4c80dae5988229f7a57" +checksum = "0b47c4ab7a93edb0c7198c5535ed9b52b63095f4e9b45279c6736cec4b856baf" [[package]] name = "bitcoin_hashes" @@ -275,15 +273,15 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.5.0" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" +checksum = "8f68f53c83ab957f72c32642f3868eec03eb974d1fb82e453128456482613d36" [[package]] name = "blake3" -version = "1.5.4" +version = "1.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d82033247fd8e890df8f740e407ad4d038debb9eb1f40533fffb32e7d17dc6f7" +checksum = "b8ee0c1824c4dea5b5f81736aff91bae041d2c07ee1192bec91054e10e3e601e" dependencies = [ "arrayref", "arrayvec", @@ -303,12 +301,12 @@ dependencies = [ [[package]] name = "bp-consensus" -version = "0.11.0-beta.9" +version = "0.11.1-alpha.1" dependencies = [ "amplify", "chrono", "commit_verify", - "secp256k1 0.30.0", + "secp256k1", "serde", "strict_encoding", "strict_types", @@ -316,14 +314,14 @@ dependencies = [ [[package]] name = "bp-core" -version = "0.11.0-beta.9" +version = "0.11.1-alpha.1" dependencies = [ "amplify", "bp-consensus", "bp-dbc", "bp-seals", "commit_verify", - "getrandom", + "getrandom 0.2.15", "serde", "single_use_seals", "strict_encoding", @@ -333,65 +331,66 @@ dependencies = [ [[package]] name = "bp-dbc" -version = "0.11.0-beta.9" +version = "0.11.1-alpha.1" dependencies = [ "amplify", "base85", "bp-consensus", "commit_verify", - "secp256k1 0.30.0", + "secp256k1", "serde", "strict_encoding", ] [[package]] name = "bp-derive" -version = "0.11.0-beta.9.1" +version = "0.11.1-alpha.1" dependencies = [ "amplify", "bp-consensus", "bp-invoice", "commit_verify", "hmac", - "indexmap 2.6.0", + "indexmap 2.7.1", "serde", "sha2", ] [[package]] name = "bp-electrum" -version = "0.11.0-beta.9.3" +version = "0.11.1-alpha.1" dependencies = [ "amplify", "bp-std", "byteorder", "libc", "log", - "rustls", + "rustls 0.23.21", "serde", "serde_json", "sha2", - "webpki-roots", + "webpki-roots 0.26.7", "winapi", ] [[package]] name = "bp-esplora" -version = "0.11.0-beta.9" +version = "0.11.1-alpha.1" dependencies = [ "amplify", "bp-std", "log", + "minreq", "reqwest", "serde", "serde_with", "sha2", - "ureq", + "tokio", ] [[package]] name = "bp-invoice" -version = "0.11.0-beta.9.1" +version = "0.11.1-alpha.1" dependencies = [ "amplify", "bech32", @@ -402,7 +401,7 @@ dependencies = [ [[package]] name = "bp-seals" -version = "0.11.0-beta.9" +version = "0.11.1-alpha.1" dependencies = [ "amplify", "baid64", @@ -417,7 +416,7 @@ dependencies = [ [[package]] name = "bp-std" -version = "0.11.0-beta.9.1" +version = "0.11.1-alpha.1" dependencies = [ "amplify", "bp-consensus", @@ -425,16 +424,16 @@ dependencies = [ "bp-derive", "bp-invoice", "descriptors", - "getrandom", + "getrandom 0.2.15", "psbt", - "secp256k1 0.30.0", + "secp256k1", "serde", "wasm-bindgen", ] [[package]] name = "bp-wallet" -version = "0.11.0-beta.9.1" +version = "0.11.1-alpha.1" dependencies = [ "amplify", "bp-electrum", @@ -454,9 +453,9 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.16.0" +version = "3.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" +checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf" [[package]] name = "byteorder" @@ -466,15 +465,15 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.6.0" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "514de17de45fdb8dc022b1a7975556c53c86f9f0aa5f534b98977b171857c2c9" +checksum = "325918d6fe32f23b19878fe4b34794ae41fc19ddbe53b10571a4874d44ffd39b" [[package]] name = "cc" -version = "1.1.18" +version = "1.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b62ac837cdb5cb22e10a256099b4fc502b1dfe560cb282963a974d7abd80e476" +checksum = "13208fcbb66eaeffe09b99fffbe1af420f00a7b35aa99ad683dfc1aa76145229" dependencies = [ "jobserver", "libc", @@ -498,9 +497,9 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "chrono" -version = "0.4.38" +version = "0.4.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" +checksum = "7e36cc9d416881d2e24f9a963be5fb1cd90966419ac844274161d10488b3e825" dependencies = [ "android-tzdata", "iana-time-zone", @@ -508,7 +507,7 @@ dependencies = [ "num-traits", "serde", "wasm-bindgen", - "windows-targets 0.52.6", + "windows-targets", ] [[package]] @@ -524,16 +523,16 @@ dependencies = [ [[package]] name = "cmake" -version = "0.1.50" +version = "0.1.53" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a31c789563b815f77f4250caee12365734369f942439b7defd71e18a48197130" +checksum = "e24a03c8b52922d68a1589ad61032f2c1aa5a8158d2aa0d93c6e9534944bbad6" dependencies = [ "cc", ] [[package]] name = "commit_encoding_derive" -version = "0.11.0-beta.9" +version = "0.11.0" dependencies = [ "amplify", "amplify_syn", @@ -544,7 +543,7 @@ dependencies = [ [[package]] name = "commit_verify" -version = "0.11.0-beta.9" +version = "0.11.0" dependencies = [ "amplify", "commit_encoding_derive", @@ -559,9 +558,9 @@ dependencies = [ [[package]] name = "constant_time_eq" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7144d30dcf0fafbce74250a3963025d8d52177934239851c917d29f1df280c2" +checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6" [[package]] name = "core-foundation" @@ -575,33 +574,24 @@ dependencies = [ [[package]] name = "core-foundation-sys" -version = "0.8.6" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] name = "cpufeatures" -version = "0.2.12" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" dependencies = [ "libc", ] -[[package]] -name = "crc32fast" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3855a8a784b474f333699ef2bbca9db2c4a1f6d9088a90a2d25b1eb53111eaa" -dependencies = [ - "cfg-if", -] - [[package]] name = "crunchy" -version = "0.2.2" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" +checksum = "43da5946c66ffcc7745f48db692ffbb10a83bfe0afd96235c5c2a4fb23994929" [[package]] name = "crypto-common" @@ -615,9 +605,9 @@ dependencies = [ [[package]] name = "darling" -version = "0.20.8" +version = "0.20.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54e36fcd13ed84ffdfda6f5be89b31287cbb80c439841fe69e04841435464391" +checksum = "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989" dependencies = [ "darling_core", "darling_macro", @@ -625,27 +615,27 @@ dependencies = [ [[package]] name = "darling_core" -version = "0.20.8" +version = "0.20.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c2cf1c23a687a1feeb728783b993c4e1ad83d99f351801977dd809b48d0a70f" +checksum = "95133861a8032aaea082871032f5815eb9e98cef03fa916ab4500513994df9e5" dependencies = [ "fnv", "ident_case", "proc-macro2", "quote", "strsim", - "syn 2.0.66", + "syn 2.0.96", ] [[package]] name = "darling_macro" -version = "0.20.8" +version = "0.20.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a668eda54683121533a393014d8692171709ff57a7d61f187b6e782719f8933f" +checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" dependencies = [ "darling_core", "quote", - "syn 2.0.66", + "syn 2.0.96", ] [[package]] @@ -660,11 +650,11 @@ dependencies = [ [[package]] name = "descriptors" -version = "0.11.0-beta.9.1" +version = "0.11.1-alpha.1" dependencies = [ "amplify", "bp-derive", - "indexmap 2.6.0", + "indexmap 2.7.1", "serde", ] @@ -679,17 +669,28 @@ dependencies = [ "subtle", ] +[[package]] +name = "displaydoc" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.96", +] + [[package]] name = "dunce" -version = "1.0.4" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56ce8c6da7551ec6c462cbaf3bfbc75131ebbfa1c944aeaa9dab51ca1c5f0c3b" +checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" [[package]] name = "either" -version = "1.11.0" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a47c1c47d2f5964e29c61246e81db715514cd532db6b5116a25ea3c03d6780a2" +checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" [[package]] name = "equivalent" @@ -699,12 +700,12 @@ checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" [[package]] name = "errno" -version = "0.3.8" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" +checksum = "33d852cb9b869c2a9b3df2f71a3074817f01e1844f839a144f5fcef059a4eb5d" dependencies = [ "libc", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -715,9 +716,9 @@ checksum = "a35a73237400bde66c82e38387343f90d7182a2f2f22729e096a2abd57d75db9" [[package]] name = "fastrand" -version = "2.0.2" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "658bd65b1cf4c852a3cc96f18a8ce7b5640f6b703f905c7d74532294c2a63984" +checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" [[package]] name = "file-format" @@ -725,16 +726,6 @@ version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ffe3a660c3a1b10e96f304a9413d673b2118d62e4520f7ddf4a4faccfe8b9b9" -[[package]] -name = "flate2" -version = "1.0.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e" -dependencies = [ - "crc32fast", - "miniz_oxide", -] - [[package]] name = "fluent-uri" version = "0.1.4" @@ -782,9 +773,9 @@ checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" [[package]] name = "futures" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" +checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" dependencies = [ "futures-channel", "futures-core", @@ -797,9 +788,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" +checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" dependencies = [ "futures-core", "futures-sink", @@ -807,15 +798,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" [[package]] name = "futures-executor" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" +checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" dependencies = [ "futures-core", "futures-task", @@ -824,32 +815,32 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" +checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" [[package]] name = "futures-macro" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" +checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.96", ] [[package]] name = "futures-sink" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" +checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" [[package]] name = "futures-task" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" +checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" [[package]] name = "futures-timer" @@ -859,9 +850,9 @@ checksum = "f288b0a4f20f9a56b5d1da57e2227c661b7b16168e2f72365f57b63326e29b24" [[package]] name = "futures-util" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" dependencies = [ "futures-channel", "futures-core", @@ -887,28 +878,40 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.14" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94b22e06ecb0110981051723910cbf0b5f5e09a2062dd7663334ee79a9d1286c" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" dependencies = [ "cfg-if", "js-sys", "libc", - "wasi", + "wasi 0.11.0+wasi-snapshot-preview1", "wasm-bindgen", ] +[[package]] +name = "getrandom" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a49c392881ce6d5c3b8cb70f98717b7c07aabbdff06687b9030dbfbe2725f8" +dependencies = [ + "cfg-if", + "libc", + "wasi 0.13.3+wasi-0.2.2", + "windows-targets", +] + [[package]] name = "gimli" -version = "0.28.1" +version = "0.31.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" +checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" [[package]] name = "glob" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" +checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2" [[package]] name = "half" @@ -928,15 +931,9 @@ checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" [[package]] name = "hashbrown" -version = "0.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e087f84d4f86bf4b218b927129862374b72199ae7d8657835f1e89000eea4fb" - -[[package]] -name = "heck" -version = "0.4.1" +version = "0.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" +checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" [[package]] name = "heck" @@ -970,18 +967,18 @@ dependencies = [ [[package]] name = "home" -version = "0.5.9" +version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" +checksum = "589533453244b0995c858700322199b2becb13b627df2851f64a2775d024abcf" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] name = "http" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21b9ddb458710bc376481b842f5da65cdf31522de232c1ca8146abce2a358258" +checksum = "f16ca2af56261c99fba8bac40a10251ce8188205a4c448fbb745a2e4daa76fea" dependencies = [ "bytes", "fnv", @@ -990,9 +987,9 @@ dependencies = [ [[package]] name = "http-body" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cac85db508abc24a2e48553ba12a996e87244a0395ce011e62b37158745d643" +checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" dependencies = [ "bytes", "http", @@ -1013,15 +1010,15 @@ dependencies = [ [[package]] name = "httparse" -version = "1.8.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" +checksum = "f2d708df4e7140240a16cd6ab0ab65c972d7433ab77819ea693fde9c43811e2a" [[package]] name = "hyper" -version = "1.3.1" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe575dd17d0862a9a33781c8c4696a55c320909004a67a00fb286ba8b1bc496d" +checksum = "cc2b571658e38e0c01b1fdca3bbbe93c00d3d71693ff2770043f8c29bc7d6f80" dependencies = [ "bytes", "futures-channel", @@ -1054,9 +1051,9 @@ dependencies = [ [[package]] name = "hyper-util" -version = "0.1.5" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b875924a60b96e5d7b9ae7b066540b1dd1cbd90d1828f54c92e02a283351c56" +checksum = "df2dcfbe0677734ab2f3ffa7fa7bfd4706bfdc1ef393f2ee30184aed67e631b4" dependencies = [ "bytes", "futures-channel", @@ -1067,16 +1064,15 @@ dependencies = [ "pin-project-lite", "socket2", "tokio", - "tower", "tower-service", "tracing", ] [[package]] name = "iana-time-zone" -version = "0.1.60" +version = "0.1.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" +checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220" dependencies = [ "android_system_properties", "core-foundation-sys", @@ -1095,6 +1091,124 @@ dependencies = [ "cc", ] +[[package]] +name = "icu_collections" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locid" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_locid_transform" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" +dependencies = [ + "displaydoc", + "icu_locid", + "icu_locid_transform_data", + "icu_provider", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_locid_transform_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdc8ff3388f852bede6b579ad4e978ab004f139284d7b28715f773507b946f6e" + +[[package]] +name = "icu_normalizer" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "utf16_iter", + "utf8_iter", + "write16", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516" + +[[package]] +name = "icu_properties" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_locid_transform", + "icu_properties_data", + "icu_provider", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569" + +[[package]] +name = "icu_provider" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" +dependencies = [ + "displaydoc", + "icu_locid", + "icu_provider_macros", + "stable_deref_trait", + "tinystr", + "writeable", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_provider_macros" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.96", +] + [[package]] name = "ident_case" version = "1.0.1" @@ -1103,12 +1217,23 @@ checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" [[package]] name = "idna" -version = "0.5.0" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" +checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" dependencies = [ - "unicode-bidi", - "unicode-normalization", + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71" +dependencies = [ + "icu_normalizer", + "icu_properties", ] [[package]] @@ -1124,20 +1249,20 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.6.0" +version = "2.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "707907fe3c25f5424cce2cb7e1cbcafee6bdbe735ca90ef77c29e84591e5b9da" +checksum = "8c9c992b02b5b4c94ea26e32fe5bccb7aa7d9f390ab5c1221ff895bc7ea8b652" dependencies = [ "equivalent", - "hashbrown 0.15.0", + "hashbrown 0.15.2", "serde", ] [[package]] name = "ipnet" -version = "2.9.0" +version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" +checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" [[package]] name = "itertools" @@ -1150,33 +1275,34 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.11" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" +checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" [[package]] name = "jobserver" -version = "0.1.31" +version = "0.1.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2b099aaa34a9751c5bf0878add70444e1ed2dd73f347be99003d4577277de6e" +checksum = "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0" dependencies = [ "libc", ] [[package]] name = "js-sys" -version = "0.3.69" +version = "0.3.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d" +checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" dependencies = [ + "once_cell", "wasm-bindgen", ] [[package]] name = "lazy_static" -version = "1.4.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] name = "lazycell" @@ -1186,25 +1312,31 @@ checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" [[package]] name = "libc" -version = "0.2.153" +version = "0.2.169" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd" +checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a" [[package]] name = "libloading" -version = "0.8.3" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c2a198fb6b0eada2a8df47933734e6d35d350665a33a3593d7164fa52c75c19" +checksum = "fc2f4eb4bc735547cfed7c0a4922cbd04a4655978c09b54f1f7b228750664c34" dependencies = [ "cfg-if", - "windows-targets 0.52.6", + "windows-targets", ] [[package]] name = "linux-raw-sys" -version = "0.4.13" +version = "0.4.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01cda141df6706de531b6c46c3a33ecca755538219bd484262fa09410c13539c" +checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" + +[[package]] +name = "litemap" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ee93343901ab17bd981295f2cf0026d4ad018c7c31ba84549a4ddbb47a45104" [[package]] name = "lock_api" @@ -1218,15 +1350,15 @@ dependencies = [ [[package]] name = "log" -version = "0.4.22" +version = "0.4.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" +checksum = "04cbf5b083de1c7e0222a7a51dbfdba1cbe1c6ab0b15e29fff3f6c077fd9cd9f" [[package]] name = "memchr" -version = "2.7.2" +version = "2.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c8640c5d730cb13ebd907d8d04b52f55ac9a2eec55b440c8892f40d56c76c1d" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" [[package]] name = "mime" @@ -1242,29 +1374,39 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" -version = "0.7.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d811f3e15f28568be3407c8e7fdb6514c1cda3cb30683f15b6a1a1dc4ea14a7" +checksum = "b8402cab7aefae129c6977bb0ff1b8fd9a04eb5b51efc50a70bea51cda0c7924" dependencies = [ - "adler", + "adler2", ] [[package]] -name = "mio" -version = "0.8.11" +name = "minreq" +version = "2.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" +checksum = "da0c420feb01b9fb5061f8c8f452534361dd783756dcf38ec45191ce55e7a161" dependencies = [ - "libc", - "wasi", - "windows-sys 0.48.0", + "base64 0.12.3", + "log", + "once_cell", + "rustls 0.21.12", + "rustls-webpki 0.101.7", + "serde", + "serde_json", + "webpki-roots 0.25.4", ] [[package]] -name = "mirai-annotations" -version = "1.12.0" +name = "mio" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9be0862c1b3f26a88803c4a49de6889c10e608b3ee9344e6ef5b45fb37ad3d1" +checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" +dependencies = [ + "libc", + "wasi 0.11.0+wasi-snapshot-preview1", + "windows-sys 0.52.0", +] [[package]] name = "mnemonic" @@ -1274,11 +1416,10 @@ checksum = "f2b8f3a258db515d5e91a904ce4ae3f73e091149b90cadbdb93d210bee07f63b" [[package]] name = "native-tls" -version = "0.2.11" +version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e" +checksum = "0dab59f8e050d5df8e4dd87d9206fb6f65a483e20ac9fda365ade4fab353196c" dependencies = [ - "lazy_static", "libc", "log", "openssl", @@ -1316,35 +1457,35 @@ checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" [[package]] name = "num-traits" -version = "0.2.18" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da0df0e5185db44f69b44f26786fe401b6c293d1907744beaa7fa62b2e5a517a" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", ] [[package]] name = "object" -version = "0.32.2" +version = "0.36.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441" +checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" dependencies = [ "memchr", ] [[package]] name = "once_cell" -version = "1.19.0" +version = "1.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" +checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" [[package]] name = "openssl" -version = "0.10.64" +version = "0.10.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95a0481286a310808298130d22dd1fef0fa571e05a8f44ec801801e84b216b1f" +checksum = "f5e534d133a060a3c19daec1eb3e98ec6f4685978834f2dbadfe2ec215bab64e" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.8.0", "cfg-if", "foreign-types", "libc", @@ -1361,20 +1502,20 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.96", ] [[package]] name = "openssl-probe" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" +checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" [[package]] name = "openssl-sys" -version = "0.9.102" +version = "0.9.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c597637d56fbc83893a35eb0dd04b2b8e7a50c91e64e9493e398b5df4fb45fa2" +checksum = "45abf306cbf99debc8195b66b7346498d7b10c210de50418b5ccd7ceba08c741" dependencies = [ "cc", "libc", @@ -1402,14 +1543,14 @@ dependencies = [ "libc", "redox_syscall", "smallvec", - "windows-targets 0.52.6", + "windows-targets", ] [[package]] name = "paste" -version = "1.0.14" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" [[package]] name = "percent-encoding" @@ -1417,31 +1558,11 @@ version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" -[[package]] -name = "pin-project" -version = "1.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bf43b791c5b9e34c3d182969b4abb522f9343702850a2e57f460d00d09b4b3" -dependencies = [ - "pin-project-internal", -] - -[[package]] -name = "pin-project-internal" -version = "1.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.66", -] - [[package]] name = "pin-project-lite" -version = "0.2.14" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" +checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" [[package]] name = "pin-utils" @@ -1451,9 +1572,9 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "pkg-config" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" +checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" [[package]] name = "powerfmt" @@ -1463,50 +1584,53 @@ checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" [[package]] name = "ppv-lite86" -version = "0.2.17" +version = "0.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" +checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" +dependencies = [ + "zerocopy", +] [[package]] name = "prettyplease" -version = "0.2.20" +version = "0.2.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f12335488a2f3b0a83b14edad48dca9879ce89b2edd10e80237e4e852dd645e" +checksum = "6924ced06e1f7dfe3fa48d57b9f74f55d8915f5036121bef647ef4b204895fac" dependencies = [ "proc-macro2", - "syn 2.0.66", + "syn 2.0.96", ] [[package]] name = "proc-macro2" -version = "1.0.85" +version = "1.0.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22244ce15aa966053a896d1accb3a6e68469b97c7f33f284b99f0d576879fc23" +checksum = "60946a68e5f9d28b0dc1c21bb8a97ee7d018a8b322fa57838ba31cc878e22d99" dependencies = [ "unicode-ident", ] [[package]] name = "psbt" -version = "0.11.0-beta.9.1" +version = "0.11.1-alpha.1" dependencies = [ "amplify", - "base64", + "base64 0.22.1", "bp-core", "bp-derive", "chrono", "commit_verify", "descriptors", - "indexmap 2.6.0", + "indexmap 2.7.1", "serde", "strict_encoding", ] [[package]] name = "quote" -version = "1.0.36" +version = "1.0.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" +checksum = "0e4dccaaaf89514f546c693ddc140f729f958c247918a13380cccc6078391acc" dependencies = [ "proc-macro2", ] @@ -1538,7 +1662,7 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom", + "getrandom 0.2.15", ] [[package]] @@ -1547,14 +1671,14 @@ version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "03a862b389f93e68874fbf580b9de08dd02facb9a788ebadaf4a3fd33cf58834" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.8.0", ] [[package]] name = "regex" -version = "1.10.4" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c117dbdfde9c8308975b6a18d71f3f385c89461f7b3fb054288ecf2a2058ba4c" +checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" dependencies = [ "aho-corasick", "memchr", @@ -1564,9 +1688,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.6" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86b83b8b9847f9bf95ef68afb0b8e6cdb80f498442f5179a29fad448fcc1eaea" +checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" dependencies = [ "aho-corasick", "memchr", @@ -1575,9 +1699,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.8.3" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adad44e29e4c806119491a7f06f03de4d1af22c3a680dd47f1e6e179439d1f56" +checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" [[package]] name = "relative-path" @@ -1587,11 +1711,11 @@ checksum = "ba39f3699c378cd8970968dcbff9c43159ea4cfbd88d43c00b22f2ef10a435d2" [[package]] name = "reqwest" -version = "0.12.9" +version = "0.12.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a77c62af46e79de0a562e1a9849205ffcb7fc1238876e9bd743357570e04046f" +checksum = "43e734407157c3c2034e0258f5e4473ddb361b1e85f95a66690d67264d7cd1da" dependencies = [ - "base64", + "base64 0.22.1", "bytes", "futures-core", "futures-util", @@ -1617,6 +1741,7 @@ dependencies = [ "tokio", "tokio-native-tls", "tokio-socks", + "tower", "tower-service", "url", "wasm-bindgen", @@ -1627,7 +1752,7 @@ dependencies = [ [[package]] name = "rgb-core" -version = "0.11.0-beta.9" +version = "0.11.1-alpha.1" dependencies = [ "aluvm", "amplify", @@ -1635,9 +1760,9 @@ dependencies = [ "bp-core", "chrono", "commit_verify", - "getrandom", + "getrandom 0.2.15", "mime", - "secp256k1-zkp", + "secp256k1", "serde", "single_use_seals", "strict_encoding", @@ -1647,13 +1772,13 @@ dependencies = [ [[package]] name = "rgb-interfaces" -version = "0.11.0-beta.9" +version = "0.11.1-alpha.1" dependencies = [ "aluvm", "amplify", "bp-core", "chrono", - "getrandom", + "getrandom 0.2.15", "rgb-std", "serde_json", "sha2", @@ -1664,7 +1789,7 @@ dependencies = [ [[package]] name = "rgb-invoice" -version = "0.11.0-beta.9.1" +version = "0.11.1-alpha.1" dependencies = [ "amplify", "baid64", @@ -1672,7 +1797,7 @@ dependencies = [ "bp-invoice", "fast32", "fluent-uri", - "indexmap 2.6.0", + "indexmap 2.7.1", "percent-encoding", "rand", "rgb-core", @@ -1683,14 +1808,30 @@ dependencies = [ [[package]] name = "rgb-psbt" -version = "0.11.0-beta.9" +version = "0.11.1-alpha.1" dependencies = [ "amplify", "baid64", "bp-core", "bp-std", "commit_verify", - "getrandom", + "getrandom 0.2.15", + "rgb-std", + "strict_encoding", + "wasm-bindgen", +] + +[[package]] +name = "rgb-psbt" +version = "0.11.1-alpha.1" +source = "git+https://github.com/RGB-WG/rgb?branch=revert_fix_same_blinded_transfer#aff6ea943922a48bd4b261b5b63a20f5b2ae8800" +dependencies = [ + "amplify", + "baid64", + "bp-core", + "bp-std", + "commit_verify", + "getrandom 0.2.15", "rgb-std", "strict_encoding", "wasm-bindgen", @@ -1698,7 +1839,7 @@ dependencies = [ [[package]] name = "rgb-runtime" -version = "0.11.0-beta.9" +version = "0.11.1-alpha.1" dependencies = [ "amplify", "baid64", @@ -1709,10 +1850,35 @@ dependencies = [ "bp-wallet", "chrono", "commit_verify", - "getrandom", - "indexmap 2.6.0", + "getrandom 0.2.15", + "indexmap 2.7.1", "nonasync", - "rgb-psbt", + "rgb-psbt 0.11.1-alpha.1", + "rgb-std", + "serde", + "serde_yaml", + "strict_types", + "wasm-bindgen", +] + +[[package]] +name = "rgb-runtime" +version = "0.11.1-alpha.1" +source = "git+https://github.com/RGB-WG/rgb?branch=revert_fix_same_blinded_transfer#aff6ea943922a48bd4b261b5b63a20f5b2ae8800" +dependencies = [ + "amplify", + "baid64", + "bp-core", + "bp-electrum", + "bp-esplora", + "bp-std", + "bp-wallet", + "chrono", + "commit_verify", + "getrandom 0.2.15", + "indexmap 2.7.1", + "nonasync", + "rgb-psbt 0.11.1-alpha.1 (git+https://github.com/RGB-WG/rgb?branch=revert_fix_same_blinded_transfer)", "rgb-std", "serde", "serde_yaml", @@ -1722,7 +1888,7 @@ dependencies = [ [[package]] name = "rgb-schemata" -version = "0.11.0-beta.9" +version = "0.11.1-alpha.1" dependencies = [ "aluvm", "amplify", @@ -1739,7 +1905,7 @@ dependencies = [ [[package]] name = "rgb-std" -version = "0.11.0-beta.9.1" +version = "0.11.1-alpha.1" dependencies = [ "aluvm", "amplify", @@ -1749,8 +1915,8 @@ dependencies = [ "bp-core", "chrono", "commit_verify", - "getrandom", - "indexmap 2.6.0", + "getrandom 0.2.15", + "indexmap 2.7.1", "nonasync", "rand", "rgb-core", @@ -1779,8 +1945,10 @@ dependencies = [ "psbt", "rand", "rgb-interfaces", - "rgb-psbt", - "rgb-runtime", + "rgb-psbt 0.11.1-alpha.1", + "rgb-psbt 0.11.1-alpha.1 (git+https://github.com/RGB-WG/rgb?branch=revert_fix_same_blinded_transfer)", + "rgb-runtime 0.11.1-alpha.1", + "rgb-runtime 0.11.1-alpha.1 (git+https://github.com/RGB-WG/rgb?branch=revert_fix_same_blinded_transfer)", "rgb-schemata", "rgb-std", "rstest", @@ -1802,7 +1970,7 @@ checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" dependencies = [ "cc", "cfg-if", - "getrandom", + "getrandom 0.2.15", "libc", "spin", "untrusted", @@ -1843,7 +2011,7 @@ dependencies = [ "regex", "relative-path", "rustc_version", - "syn 2.0.66", + "syn 2.0.96", "unicode-ident", ] @@ -1856,14 +2024,14 @@ dependencies = [ "quote", "rand", "rustc_version", - "syn 2.0.66", + "syn 2.0.96", ] [[package]] name = "rustc-demangle" -version = "0.1.23" +version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" +checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" [[package]] name = "rustc-hash" @@ -1873,63 +2041,83 @@ checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" [[package]] name = "rustc_version" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" dependencies = [ "semver", ] [[package]] name = "rustix" -version = "0.38.34" +version = "0.38.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f" +checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.8.0", "errno", "libc", "linux-raw-sys", - "windows-sys 0.52.0", + "windows-sys 0.59.0", +] + +[[package]] +name = "rustls" +version = "0.21.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" +dependencies = [ + "log", + "ring", + "rustls-webpki 0.101.7", + "sct", ] [[package]] name = "rustls" -version = "0.23.7" +version = "0.23.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebbbdb961df0ad3f2652da8f3fdc4b36122f568f968f45ad3316f26c025c677b" +checksum = "8f287924602bf649d949c63dc8ac8b235fa5387d394020705b80c4eb597ce5b8" dependencies = [ "aws-lc-rs", "log", "once_cell", - "ring", "rustls-pki-types", - "rustls-webpki", + "rustls-webpki 0.102.8", "subtle", "zeroize", ] [[package]] name = "rustls-pemfile" -version = "2.1.2" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29993a25686778eb88d4189742cd713c9bce943bc54251a33509dc63cbacf73d" +checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50" dependencies = [ - "base64", "rustls-pki-types", ] [[package]] name = "rustls-pki-types" -version = "1.5.0" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "beb461507cee2c2ff151784c52762cf4d9ff6a61f3e80968600ed24fa837fa54" +checksum = "917ce264624a4b4db1c364dcc35bfca9ded014d0a958cd47ad3e960e988ea51c" [[package]] name = "rustls-webpki" -version = "0.102.3" +version = "0.101.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3bce581c0dd41bce533ce695a1437fa16a7ab5ac3ccfa99fe1a620a7885eabf" +checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" +dependencies = [ + "ring", + "untrusted", +] + +[[package]] +name = "rustls-webpki" +version = "0.102.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9" dependencies = [ "aws-lc-rs", "ring", @@ -1939,32 +2127,32 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.15" +version = "1.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80af6f9131f277a45a3fba6ce8e2258037bb0477a67e610d3c1fe046ab31de47" +checksum = "f7c45b9784283f1b2e7fb61b42047c2fd678ef0960d4f6f1eba131594cc369d4" [[package]] name = "ryu" -version = "1.0.17" +version = "1.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e86697c916019a8588c99b5fac3cead74ec0b4b819707a682fd4d23fa0ce1ba1" +checksum = "6ea1a2d0a644769cc99faa24c3ad26b379b786fe7c36fd3c546254801650e6dd" [[package]] name = "scc" -version = "2.2.6" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94b13f8ea6177672c49d12ed964cca44836f59621981b04a3e26b87e675181de" +checksum = "28e1c91382686d21b5ac7959341fcb9780fa7c03773646995a87c950fa7be640" dependencies = [ "sdd", ] [[package]] name = "schannel" -version = "0.1.23" +version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbc91545643bcf3a0bbb6569265615222618bdf33ce4ffbbd13c4bbd4c093534" +checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -1974,21 +2162,20 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] -name = "sdd" -version = "3.0.5" +name = "sct" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "478f121bb72bbf63c52c93011ea1791dca40140dfe13f8336c4c5ac952c33aa9" +checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" +dependencies = [ + "ring", + "untrusted", +] [[package]] -name = "secp256k1" -version = "0.29.0" +name = "sdd" +version = "3.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e0cc0f1cf93f4969faf3ea1c7d8a9faed25918d96affa959720823dfe86d4f3" -dependencies = [ - "rand", - "secp256k1-sys", - "serde", -] +checksum = "478f121bb72bbf63c52c93011ea1791dca40140dfe13f8336c4c5ac952c33aa9" [[package]] name = "secp256k1" @@ -2004,43 +2191,20 @@ dependencies = [ [[package]] name = "secp256k1-sys" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1433bd67156263443f14d603720b082dd3121779323fce20cba2aa07b874bc1b" -dependencies = [ - "cc", -] - -[[package]] -name = "secp256k1-zkp" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52a44aed3002b5ae975f8624c5df3a949cfbf00479e18778b6058fcd213b76e3" -dependencies = [ - "bitcoin-private", - "rand", - "secp256k1 0.29.0", - "secp256k1-zkp-sys", - "serde", -] - -[[package]] -name = "secp256k1-zkp-sys" -version = "0.10.0" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c6eea7919e0cab992510edfbf40bd9342c0a3c2bb910f2c51355c2cb2d69839" +checksum = "d4387882333d3aa8cb20530a17c69a3752e97837832f34f6dccc760e715001d9" dependencies = [ "cc", - "secp256k1-sys", ] [[package]] name = "security-framework" -version = "2.10.0" +version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "770452e37cad93e0a50d5abc3990d2bc351c36d0328f86cefec2f2fb206eaef6" +checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.8.0", "core-foundation", "core-foundation-sys", "libc", @@ -2049,9 +2213,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.10.0" +version = "2.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41f3cc463c0ef97e11c3461a9d3787412d30e8e7eb907c79180c4a57bf7c04ef" +checksum = "49db231d56a190491cb4aeda9527f1ad45345af50b0851622a7adb8c03b01c32" dependencies = [ "core-foundation-sys", "libc", @@ -2059,46 +2223,47 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.23" +version = "1.0.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" +checksum = "f79dfe2d285b0488816f30e700a7438c5a73d816b5b7d3ac72fbc48b0d185e03" [[package]] name = "serde" -version = "1.0.198" +version = "1.0.217" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9846a40c979031340571da2545a4e5b7c4163bdae79b301d5f86d03979451fcc" +checksum = "02fc4265df13d6fa1d00ecff087228cc0a2b5f3c0e87e258d8b94a156e984c70" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.198" +version = "1.0.217" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e88edab869b01783ba905e7d0153f9fc1a6505a96e4ad3018011eedb838566d9" +checksum = "5a9bf7cf98d04a2b28aead066b7496853d4779c9cc183c440dbac457641e19a0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.96", ] [[package]] name = "serde_json" -version = "1.0.116" +version = "1.0.138" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e17db7126d17feb94eb3fad46bf1a96b034e8aacbc2e775fe81505f8b0b2813" +checksum = "d434192e7da787e94a6ea7e9670b26a036d0ca41e0b7efb2676dd32bae872949" dependencies = [ "itoa", + "memchr", "ryu", "serde", ] [[package]] name = "serde_spanned" -version = "0.6.7" +version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb5b1b31579f3811bf615c144393417496f152e12ac8b7663bf664f4a815306d" +checksum = "87607cb1398ed59d48732e575a4c28a7a8ebf2454b964fe3f224f2afc07909e1" dependencies = [ "serde", ] @@ -2127,15 +2292,15 @@ dependencies = [ [[package]] name = "serde_with" -version = "3.11.0" +version = "3.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e28bdad6db2b8340e449f7108f020b3b092e8583a9e3fb82713e1d4e71fe817" +checksum = "d6b6f7f2fcb69f747921f79f3926bd1e203fce4fef62c268dd3abfb6d86029aa" dependencies = [ - "base64", + "base64 0.22.1", "chrono", "hex", "indexmap 1.9.3", - "indexmap 2.6.0", + "indexmap 2.7.1", "serde", "serde_derive", "serde_json", @@ -2145,14 +2310,14 @@ dependencies = [ [[package]] name = "serde_with_macros" -version = "3.11.0" +version = "3.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d846214a9854ef724f3da161b426242d8de7c1fc7de2f89bb1efcb154dca79d" +checksum = "8d00caa5193a3c8362ac2b73be6b9e768aa5a4b2f721d8f4b339600c3cb51f8e" dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.96", ] [[package]] @@ -2161,7 +2326,7 @@ version = "0.9.34+deprecated" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" dependencies = [ - "indexmap 2.6.0", + "indexmap 2.7.1", "itoa", "ryu", "serde", @@ -2190,7 +2355,7 @@ checksum = "5d69265a08751de7844521fd15003ae0a888e035773ba05695c5c759a6f89eef" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.96", ] [[package]] @@ -2212,7 +2377,7 @@ checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" [[package]] name = "single_use_seals" -version = "0.11.0-beta.9" +version = "0.11.0" dependencies = [ "amplify_derive", ] @@ -2234,31 +2399,26 @@ checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" [[package]] name = "socket2" -version = "0.5.6" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05ffd9c0a93b7543e062e759284fcf5f5e3b098501104bfbdde4d404db792871" +checksum = "c970269d99b64e60ec3bd6ad27270092a5394c4e309314b18ae3fe575695fbe8" dependencies = [ "libc", "windows-sys 0.52.0", ] -[[package]] -name = "socks" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0c3dbbd9ae980613c6dd8e28a9407b50509d3803b57624d5dfe8315218cd58b" -dependencies = [ - "byteorder", - "libc", - "winapi", -] - [[package]] name = "spin" version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + [[package]] name = "strict_encoding" version = "2.7.0" @@ -2275,7 +2435,7 @@ name = "strict_encoding_derive" version = "2.7.0" dependencies = [ "amplify_syn", - "heck 0.5.0", + "heck", "proc-macro2", "quote", "syn 1.0.109", @@ -2289,7 +2449,7 @@ dependencies = [ "ascii-armor", "baid64", "half", - "indexmap 2.6.0", + "indexmap 2.7.1", "serde", "serde_json", "serde_yaml", @@ -2312,37 +2472,37 @@ dependencies = [ [[package]] name = "strsim" -version = "0.10.0" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" [[package]] name = "strum" -version = "0.26.2" +version = "0.26.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d8cec3501a5194c432b2b7976db6b7d10ec95c253208b45f83f7136aa985e29" +checksum = "8fec0f0aef304996cf250b31b5a10dee7980c85da9d759361292b8bca5a18f06" dependencies = [ "strum_macros", ] [[package]] name = "strum_macros" -version = "0.26.2" +version = "0.26.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6cf59daf282c0a494ba14fd21610a0325f9f90ec9d1231dea26bcb1d696c946" +checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be" dependencies = [ - "heck 0.4.1", + "heck", "proc-macro2", "quote", "rustversion", - "syn 2.0.66", + "syn 2.0.96", ] [[package]] name = "subtle" -version = "2.5.0" +version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "syn" @@ -2357,9 +2517,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.66" +version = "2.0.96" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c42f3f41a2de00b01c0aaad383c5a45241efc8b2d1eda5661812fda5f3cdcff5" +checksum = "d5d0adab1ae378d7f53bdebc67a39f1f151407ef230f0ce2883572f5d8985c80" dependencies = [ "proc-macro2", "quote", @@ -2368,50 +2528,63 @@ dependencies = [ [[package]] name = "sync_wrapper" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7065abeca94b6a8a577f9bd45aa0867a2238b74e8eb67cf10d492bc39351394" +checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" dependencies = [ "futures-core", ] +[[package]] +name = "synstructure" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.96", +] + [[package]] name = "tempfile" -version = "3.10.1" +version = "3.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1" +checksum = "38c246215d7d24f48ae091a2902398798e05d978b24315d6efbc00ede9a8bb91" dependencies = [ "cfg-if", "fastrand", + "getrandom 0.3.1", + "once_cell", "rustix", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] name = "thiserror" -version = "1.0.59" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0126ad08bff79f29fc3ae6a55cc72352056dfff61e3ff8bb7129476d44b23aa" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.59" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1cd413b5d558b4c5bf3680e324a6fa5014e7b7c067a51e69dbdf47eb7148b66" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.96", ] [[package]] name = "time" -version = "0.3.36" +version = "0.3.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885" +checksum = "35e7868883861bd0e56d9ac6efcaaca0d6d5d82a2a7ec8209ff492c07cf37b21" dependencies = [ "deranged", "itoa", @@ -2430,34 +2603,29 @@ checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" [[package]] name = "time-macros" -version = "0.2.18" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf" +checksum = "2834e6017e3e5e4b9834939793b282bc03b37a3336245fa820e35e233e2a85de" dependencies = [ "num-conv", "time-core", ] [[package]] -name = "tinyvec" -version = "1.6.0" +name = "tinystr" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" +checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" dependencies = [ - "tinyvec_macros", + "displaydoc", + "zerovec", ] -[[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.37.0" +version = "1.43.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1adbebffeca75fcfd058afa480fb6c0b81e165a0323f9c9d39c9697e37c46787" +checksum = "3d61fa4ffa3de412bfea335c6ecff681de2b609ba3c77ef3e00e521813a9ed9e" dependencies = [ "backtrace", "bytes", @@ -2465,7 +2633,7 @@ dependencies = [ "mio", "pin-project-lite", "socket2", - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] @@ -2513,11 +2681,11 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.22.20" +version = "0.22.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "583c44c02ad26b0c3f3066fe629275e50627026c51ac2e595cca4c230ce1ce1d" +checksum = "4ae48d6208a266e853d946088ed816055e556cc6028c5e8e2b84d9fa5dd7c7f5" dependencies = [ - "indexmap 2.6.0", + "indexmap 2.7.1", "serde", "serde_spanned", "toml_datetime", @@ -2526,14 +2694,14 @@ dependencies = [ [[package]] name = "tower" -version = "0.4.13" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" +checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" dependencies = [ "futures-core", "futures-util", - "pin-project", "pin-project-lite", + "sync_wrapper", "tokio", "tower-layer", "tower-service", @@ -2541,21 +2709,21 @@ dependencies = [ [[package]] name = "tower-layer" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0" +checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" [[package]] name = "tower-service" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" [[package]] name = "tracing" -version = "0.1.40" +version = "0.1.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" dependencies = [ "pin-project-lite", "tracing-core", @@ -2563,9 +2731,9 @@ dependencies = [ [[package]] name = "tracing-core" -version = "0.1.32" +version = "0.1.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" +checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c" dependencies = [ "once_cell", ] @@ -2582,26 +2750,11 @@ version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" -[[package]] -name = "unicode-bidi" -version = "0.3.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" - [[package]] name = "unicode-ident" -version = "1.0.12" +version = "1.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" - -[[package]] -name = "unicode-normalization" -version = "0.1.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5" -dependencies = [ - "tinyvec", -] +checksum = "a210d160f08b701c8721ba1c726c11662f877ea6b7094007e1ca9a1041945034" [[package]] name = "unsafe-libyaml" @@ -2615,36 +2768,29 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" -[[package]] -name = "ureq" -version = "2.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b74fc6b57825be3373f7054754755f03ac3a8f5d70015ccad699ba2029956f4a" -dependencies = [ - "base64", - "flate2", - "log", - "once_cell", - "rustls", - "rustls-pki-types", - "serde", - "serde_json", - "socks", - "url", - "webpki-roots", -] - [[package]] name = "url" -version = "2.5.0" +version = "2.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633" +checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" dependencies = [ "form_urlencoded", "idna", "percent-encoding", ] +[[package]] +name = "utf16_iter" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" + +[[package]] +name = "utf8_iter" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" + [[package]] name = "vcpkg" version = "0.2.15" @@ -2653,9 +2799,9 @@ checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" [[package]] name = "version_check" -version = "0.9.4" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" [[package]] name = "vesper-lang" @@ -2680,48 +2826,59 @@ version = "0.11.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" +[[package]] +name = "wasi" +version = "0.13.3+wasi-0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26816d2e1a4a36a2940b96c5296ce403917633dff8f3440e9b236ed6f6bacad2" +dependencies = [ + "wit-bindgen-rt", +] + [[package]] name = "wasm-bindgen" -version = "0.2.92" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8" +checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" dependencies = [ "cfg-if", + "once_cell", + "rustversion", "wasm-bindgen-macro", ] [[package]] name = "wasm-bindgen-backend" -version = "0.2.92" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da" +checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" dependencies = [ "bumpalo", "log", - "once_cell", "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.96", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.42" +version = "0.4.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76bc14366121efc8dbb487ab05bcc9d346b3b5ec0eaa76e46594cabbe51762c0" +checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61" dependencies = [ "cfg-if", "js-sys", + "once_cell", "wasm-bindgen", "web-sys", ] [[package]] name = "wasm-bindgen-macro" -version = "0.2.92" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726" +checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -2729,28 +2886,31 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.92" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" +checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.96", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.92" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" +checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" +dependencies = [ + "unicode-ident", +] [[package]] name = "web-sys" -version = "0.3.69" +version = "0.3.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77afa9a11836342370f4817622a2f0f418b134426d91a82dfb48f532d2ec13ef" +checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" dependencies = [ "js-sys", "wasm-bindgen", @@ -2758,9 +2918,15 @@ dependencies = [ [[package]] name = "webpki-roots" -version = "0.26.1" +version = "0.25.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3de34ae270483955a94f4b21bdaaeb83d508bb84a01435f393818edb0012009" +checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" + +[[package]] +name = "webpki-roots" +version = "0.26.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d642ff16b7e79272ae451b7322067cdc17cadf68c23264be9d94a32319efe7e" dependencies = [ "rustls-pki-types", ] @@ -2805,7 +2971,7 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" dependencies = [ - "windows-targets 0.52.6", + "windows-targets", ] [[package]] @@ -2816,7 +2982,7 @@ checksum = "e400001bb720a623c1c69032f8e3e4cf09984deec740f007dd2b03ec864804b0" dependencies = [ "windows-result", "windows-strings", - "windows-targets 0.52.6", + "windows-targets", ] [[package]] @@ -2825,7 +2991,7 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e" dependencies = [ - "windows-targets 0.52.6", + "windows-targets", ] [[package]] @@ -2835,16 +3001,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10" dependencies = [ "windows-result", - "windows-targets 0.52.6", -] - -[[package]] -name = "windows-sys" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" -dependencies = [ - "windows-targets 0.48.5", + "windows-targets", ] [[package]] @@ -2853,22 +3010,16 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" dependencies = [ - "windows-targets 0.52.6", + "windows-targets", ] [[package]] -name = "windows-targets" -version = "0.48.5" +name = "windows-sys" +version = "0.59.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" dependencies = [ - "windows_aarch64_gnullvm 0.48.5", - "windows_aarch64_msvc 0.48.5", - "windows_i686_gnu 0.48.5", - "windows_i686_msvc 0.48.5", - "windows_x86_64_gnu 0.48.5", - "windows_x86_64_gnullvm 0.48.5", - "windows_x86_64_msvc 0.48.5", + "windows-targets", ] [[package]] @@ -2877,46 +3028,28 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" dependencies = [ - "windows_aarch64_gnullvm 0.52.6", - "windows_aarch64_msvc 0.52.6", - "windows_i686_gnu 0.52.6", + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", "windows_i686_gnullvm", - "windows_i686_msvc 0.52.6", - "windows_x86_64_gnu 0.52.6", - "windows_x86_64_gnullvm 0.52.6", - "windows_x86_64_msvc 0.52.6", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", ] -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" - [[package]] name = "windows_aarch64_gnullvm" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" -[[package]] -name = "windows_aarch64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" - [[package]] name = "windows_aarch64_msvc" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" -[[package]] -name = "windows_i686_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" - [[package]] name = "windows_i686_gnu" version = "0.52.6" @@ -2931,77 +3064,148 @@ checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" [[package]] name = "windows_i686_msvc" -version = "0.48.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" [[package]] -name = "windows_i686_msvc" +name = "windows_x86_64_gnu" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" [[package]] -name = "windows_x86_64_gnu" -version = "0.48.5" +name = "windows_x86_64_gnullvm" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" [[package]] -name = "windows_x86_64_gnu" +name = "windows_x86_64_msvc" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] -name = "windows_x86_64_gnullvm" -version = "0.48.5" +name = "winnow" +version = "0.6.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" +checksum = "ad699df48212c6cc6eb4435f35500ac6fd3b9913324f938aea302022ce19d310" +dependencies = [ + "memchr", +] [[package]] -name = "windows_x86_64_gnullvm" -version = "0.52.6" +name = "wit-bindgen-rt" +version = "0.33.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" +checksum = "3268f3d866458b787f390cf61f4bbb563b922d091359f9608842999eaee3943c" +dependencies = [ + "bitflags 2.8.0", +] [[package]] -name = "windows_x86_64_msvc" -version = "0.48.5" +name = "write16" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" +checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" [[package]] -name = "windows_x86_64_msvc" -version = "0.52.6" +name = "writeable" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" +checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" [[package]] -name = "winnow" -version = "0.6.18" +name = "yoke" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68a9bda4691f099d435ad181000724da8e5899daa10713c2d432552b9ccd3a6f" +checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40" dependencies = [ - "memchr", + "serde", + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.96", + "synstructure", +] + +[[package]] +name = "zerocopy" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" +dependencies = [ + "byteorder", + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.96", +] + +[[package]] +name = "zerofrom" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cff3ee08c995dee1859d998dea82f7374f2826091dd9cd47def953cae446cd2e" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "595eed982f7d355beb85837f651fa22e90b3c044842dc7f2c2842c086f295808" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.96", + "synstructure", ] [[package]] name = "zeroize" -version = "1.8.0" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" + +[[package]] +name = "zerovec" +version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63381fa6624bf92130a6b87c0d07380116f80b565c42cf0d754136f0238359ef" +checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079" dependencies = [ - "zeroize_derive", + "yoke", + "zerofrom", + "zerovec-derive", ] [[package]] -name = "zeroize_derive" -version = "1.4.2" +name = "zerovec-derive" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" +checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.96", ] diff --git a/Cargo.toml b/Cargo.toml index 7140ef0..c66f48a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -32,7 +32,9 @@ bp-core = { path = "./bp-core" } ## bp-electrum-client bp-electrum = { path = "./bp-electrum-client" } ## bp-esplora -bp-esplora = { path = "./bp-esplora-client" } +bp-esplora = { path = "./bp-esplora-client", features = [ + "blocking-https", +] } ## bp-std bp-std = { path = "./bp-std", features = ["signers"] } descriptors = { path = "./bp-std/descriptors" } @@ -52,6 +54,14 @@ rgb-runtime = { path = "./rgb", features = [ "serde", ] } rgb-psbt = { path = "./rgb/psbt" } +## altered_submodules/rgb (cannot use path, see https://github.com/rust-lang/cargo/issues/10353) +rgb_altered = { git = "https://github.com/RGB-WG/rgb", branch = "revert_fix_same_blinded_transfer", package = "rgb-runtime", features = [ + "electrum_blocking", + "esplora_blocking", + "fs", + "serde", +], optional = true } +psrgbt_altered = { git = "https://github.com/RGB-WG/rgb", branch = "revert_fix_same_blinded_transfer", package = "rgb-psbt", optional = true } ## rgb-interfaces rgb-interfaces = { path = "./rgb-interfaces" } ## rgb-schemata @@ -123,3 +133,10 @@ strict_encoding_derive = { path = "./strict-encoding/rust/derive" } strict_types = { path = "./strict-types" } ## vesper vesper-lang = { path = "./vesper" } + +[features] +default = [] +altered = [ + "rgb_altered", + "psrgbt_altered", +] diff --git a/README.md b/README.md index 6648b86..c7413f0 100644 --- a/README.md +++ b/README.md @@ -84,6 +84,10 @@ If you are developing new tests and want a faster execution, you can set cannot switch to another indexer when using this option, you'll have to use the same indexer type from the previous test execution. +A feature `altered` is there to run some specific tests with altered crates +(e.g. tests that simulate a modified sender that tries to perform an attack). +Run `cargo test --features altered` to run those tests. + ### Coverage To run the tests and generate a code coverage report run: diff --git a/altered_submodules/rgb b/altered_submodules/rgb new file mode 160000 index 0000000..aff6ea9 --- /dev/null +++ b/altered_submodules/rgb @@ -0,0 +1 @@ +Subproject commit aff6ea943922a48bd4b261b5b63a20f5b2ae8800 diff --git a/bp-core b/bp-core index a928721..c7437e6 160000 --- a/bp-core +++ b/bp-core @@ -1 +1 @@ -Subproject commit a9287214102c70be45f05dec1aba3decb62d3173 +Subproject commit c7437e61db9398d36eaa9b0b0aca7a38e8edf9bc diff --git a/bp-electrum-client b/bp-electrum-client index a660268..ce1f0c3 160000 --- a/bp-electrum-client +++ b/bp-electrum-client @@ -1 +1 @@ -Subproject commit a66026874b948479b14aa5f01629c677ae005abc +Subproject commit ce1f0c342a2cdd8b760c7acf03a12bc37f7032c3 diff --git a/bp-esplora-client b/bp-esplora-client index 87e487e..93d071d 160000 --- a/bp-esplora-client +++ b/bp-esplora-client @@ -1 +1 @@ -Subproject commit 87e487e1aa8547833253f951929769a646e9387f +Subproject commit 93d071de63f8f6413295a41be6adacda4c512ee3 diff --git a/bp-std b/bp-std index f81848a..cf7b197 160000 --- a/bp-std +++ b/bp-std @@ -1 +1 @@ -Subproject commit f81848a0751e073c92881c2d6c9c06c87e7a58bd +Subproject commit cf7b197ef8d429c57fdbe8bb46c05d2b925d61c3 diff --git a/bp-wallet b/bp-wallet index 429c853..38f7267 160000 --- a/bp-wallet +++ b/bp-wallet @@ -1 +1 @@ -Subproject commit 429c853ad424d0d4e08b6b496b35fe8a4b64a321 +Subproject commit 38f7267d17f4046974e52f9b67107cf48283aef5 diff --git a/client_side_validation b/client_side_validation index 7215fb5..3ce2fc1 160000 --- a/client_side_validation +++ b/client_side_validation @@ -1 +1 @@ -Subproject commit 7215fb50a7ef56f090a051dffe23a3c318bb8351 +Subproject commit 3ce2fc16bb6e2a57c5e2415bc66ebd94ec8aab3e diff --git a/rgb b/rgb index 55a814a..b035820 160000 --- a/rgb +++ b/rgb @@ -1 +1 @@ -Subproject commit 55a814a6ff37677934e764790e4e0b31a5d0f18b +Subproject commit b035820c3d90863988ef022e72d52bfa2ff94196 diff --git a/rgb-core b/rgb-core index 52592c6..8dabd36 160000 --- a/rgb-core +++ b/rgb-core @@ -1 +1 @@ -Subproject commit 52592c62f9f0ba32b3deab69725f2fd6cd6784c4 +Subproject commit 8dabd3658196513e7d94d590a066565a4e2c4687 diff --git a/rgb-interfaces b/rgb-interfaces index 70b5528..43e1dcd 160000 --- a/rgb-interfaces +++ b/rgb-interfaces @@ -1 +1 @@ -Subproject commit 70b5528cb2b93dae57796373fd9ef81506cae352 +Subproject commit 43e1dcda06ebf26cb84cccd53478624929d56059 diff --git a/rgb-schemata b/rgb-schemata index 7a66a9b..66d8920 160000 --- a/rgb-schemata +++ b/rgb-schemata @@ -1 +1 @@ -Subproject commit 7a66a9b02a3a36d3f121cbc5833fe876caf9f1f2 +Subproject commit 66d89205d0e207349c99f0ce5b0879c3b58d7cd0 diff --git a/rgb-std b/rgb-std index b374468..9018355 160000 --- a/rgb-std +++ b/rgb-std @@ -1 +1 @@ -Subproject commit b3744689e7ff2603b7093afdea09db50d032c5ca +Subproject commit 9018355a63888098da536a23c2989fb64f5a537f diff --git a/rust-amplify b/rust-amplify index d01b9f5..9095ba9 160000 --- a/rust-amplify +++ b/rust-amplify @@ -1 +1 @@ -Subproject commit d01b9f52c23e839c6620f68d1bf9099152178f6d +Subproject commit 9095ba9c054c946c8d699330b92cdc1f566dfae1 diff --git a/tests/coverage.sh b/tests/coverage.sh index 88b84ee..9aacea1 100755 --- a/tests/coverage.sh +++ b/tests/coverage.sh @@ -3,9 +3,9 @@ # script to run project tests and report code coverage # uses llvm-cov (https://github.com/taiki-e/cargo-llvm-cov) -LLVM_COV_OPTS=() -CARGO_TEST_OPTS=("--") COV="cargo llvm-cov" +COV_OPTS="--html" +CARGO_TEST_OPTS=("--") _die() { echo "err $*" @@ -41,10 +41,8 @@ while [ -n "$1" ]; do shift ;; --ci) - COV_CI="$COV --lcov --output-path coverage.lcov" - INDEXER=esplora $COV_CI - INDEXER=electrum $COV_CI --no-clean - exit 0 + COV_OPTS="--lcov --output-path coverage.lcov" + CI=1 ;; *) help @@ -54,14 +52,19 @@ while [ -n "$1" ]; do shift done -_tit "installing requirements" -rustup component add llvm-tools-preview -cargo install cargo-llvm-cov +if [ -z "$CI" ]; then + _tit "installing requirements" + rustup component add llvm-tools-preview + cargo install cargo-llvm-cov +fi _tit "generating coverage report" # shellcheck disable=2086 -INDEXER=esplora $COV --html "${LLVM_COV_OPTS[@]}" "${CARGO_TEST_OPTS[@]}" -INDEXER=electrum $COV --no-clean --html "${LLVM_COV_OPTS[@]}" "${CARGO_TEST_OPTS[@]}" +INDEXER=electrum $COV $COV_OPTS "${CARGO_TEST_OPTS[@]}" +INDEXER=esplora $COV $COV_OPTS --no-clean "${CARGO_TEST_OPTS[@]}" +SKIP_INIT=1 INDEXER=esplora $COV $COV_OPTS --no-clean --features altered "${CARGO_TEST_OPTS[@]}" -## show html report location -echo "generated html report: target/llvm-cov/html/index.html" +if [ -z "$CI" ]; then + ## show html report location + echo "generated html report: target/llvm-cov/html/index.html" +fi diff --git a/tests/docker-compose.yml b/tests/docker-compose.yml index 037f580..51692fc 100644 --- a/tests/docker-compose.yml +++ b/tests/docker-compose.yml @@ -1,18 +1,18 @@ services: bitcoind_1: - image: registry.gitlab.com/hashbeam/docker/bitcoind:25.0 + image: registry.gitlab.com/hashbeam/docker/bitcoind:28.1 profiles: [electrum] command: "-fallbackfee=0.0002" bitcoind_2: - image: registry.gitlab.com/hashbeam/docker/bitcoind:25.0 + image: registry.gitlab.com/hashbeam/docker/bitcoind:28.1 profiles: [electrum] command: "-fallbackfee=0.0002" bitcoind_3: - image: registry.gitlab.com/hashbeam/docker/bitcoind:25.0 + image: registry.gitlab.com/hashbeam/docker/bitcoind:28.1 profiles: [electrum] command: "-fallbackfee=0.0002" electrs_1: - image: registry.gitlab.com/hashbeam/docker/electrs:0.9.14 + image: registry.gitlab.com/hashbeam/docker/electrs:0.10.9 profiles: [electrum] environment: BTCHOST: bitcoind_1 @@ -21,7 +21,7 @@ services: depends_on: - bitcoind_1 electrs_2: - image: registry.gitlab.com/hashbeam/docker/electrs:0.9.14 + image: registry.gitlab.com/hashbeam/docker/electrs:0.10.9 profiles: [electrum] environment: BTCHOST: bitcoind_2 @@ -30,7 +30,7 @@ services: depends_on: - bitcoind_2 electrs_3: - image: registry.gitlab.com/hashbeam/docker/electrs:0.9.14 + image: registry.gitlab.com/hashbeam/docker/electrs:0.10.9 profiles: [electrum] environment: BTCHOST: bitcoind_3 @@ -39,7 +39,7 @@ services: depends_on: - bitcoind_3 esplora_1: - image: blockstream/esplora:956c74f42eb6ad803d8aedc272ba83d3aa6dcf5c + image: blockstream/esplora:4de8457de518526425d4f872d98d5cdb9efdaf0e profiles: [esplora] command: /srv/explorer/run.sh bitcoin-regtest explorer environment: @@ -51,7 +51,7 @@ services: - 50004:50001 - 8094:80 esplora_2: - image: blockstream/esplora:956c74f42eb6ad803d8aedc272ba83d3aa6dcf5c + image: blockstream/esplora:4de8457de518526425d4f872d98d5cdb9efdaf0e profiles: [esplora] command: /srv/explorer/run.sh bitcoin-regtest explorer environment: @@ -63,7 +63,7 @@ services: - 50005:50001 - 8095:80 esplora_3: - image: blockstream/esplora:956c74f42eb6ad803d8aedc272ba83d3aa6dcf5c + image: blockstream/esplora:4de8457de518526425d4f872d98d5cdb9efdaf0e profiles: [esplora] command: /srv/explorer/run.sh bitcoin-regtest explorer environment: diff --git a/tests/fixtures/2c033a3584f571a3b8146dc0f7f904cb421bda9880307ed38f5b7a28ae183eff.yaml b/tests/fixtures/2c033a3584f571a3b8146dc0f7f904cb421bda9880307ed38f5b7a28ae183eff.yaml new file mode 100644 index 0000000..97e7b6f --- /dev/null +++ b/tests/fixtures/2c033a3584f571a3b8146dc0f7f904cb421bda9880307ed38f5b7a28ae183eff.yaml @@ -0,0 +1,14 @@ +version: 2 +inputs: +- prevOutput: 3bda7cfcd64b4255dc8d86090a49497379bd61a5de108f88e50c9a3cda9fa20b:1 + sigScript: '' + sequence: 0 + witness: + - 3045022100f7468259ae2f3b6ad599f96176deb9afe22c5647cda5441801dbbc1216d955690220284ec5d61e5c94e56c2809833c6dacba2e9e3bf870d6d0dffe7805391980871b01 + - 03180d591406d3106794a4908e43b9abe74ccec4212b0ade1b8d7f5ba2c000122e +outputs: +- value: 0 + scriptPubkey: 6a2004fa0afe61cb15facef532b7656caabb2ea3e879b6d7cfa9354abd173e566669 +- value: 99999200 + scriptPubkey: 00147db3c392013fcbb67ac449267be461ac0e9fbf48 +lockTime: 0 diff --git a/tests/fixtures/3bda7cfcd64b4255dc8d86090a49497379bd61a5de108f88e50c9a3cda9fa20b.yaml b/tests/fixtures/3bda7cfcd64b4255dc8d86090a49497379bd61a5de108f88e50c9a3cda9fa20b.yaml new file mode 100644 index 0000000..09ce3f2 --- /dev/null +++ b/tests/fixtures/3bda7cfcd64b4255dc8d86090a49497379bd61a5de108f88e50c9a3cda9fa20b.yaml @@ -0,0 +1,14 @@ +version: 2 +inputs: +- prevOutput: 080aa44f1dc8abcabeccf1cc8623d05074e3bb6eef141e27425004fbfb1f42c4:0 + sigScript: '' + sequence: 0 + witness: + - 3045022100d681a552efdb6a9b76b8ec02396829b49fb0753476f36e0a1f84eea5228d4ed502203149f311daebd2240f1042936e2640d339c4fa0b617b47338f89c438bb003c1801 + - 020b4fd00749e79599fe2d9d5c8610fc2f061f1218a652638d5a240f8226a3d1dd +outputs: +- value: 0 + scriptPubkey: 6a20a1440d59d96ad7e5f3c8cf0126e3f1638c6fa7d472c8eb9d7e04f99063555bdd +- value: 99999600 + scriptPubkey: 0014cde198c07214906f68af5e5b7c1d3dfc1829002c +lockTime: 0 diff --git a/tests/fixtures/6788fec62a2e871cc6b5f250aeadf68b11560719bb986bc97c271b0505211d81.yaml b/tests/fixtures/6788fec62a2e871cc6b5f250aeadf68b11560719bb986bc97c271b0505211d81.yaml new file mode 100644 index 0000000..efa5984 --- /dev/null +++ b/tests/fixtures/6788fec62a2e871cc6b5f250aeadf68b11560719bb986bc97c271b0505211d81.yaml @@ -0,0 +1,16 @@ +version: 2 +inputs: +- prevOutput: 82e491ecb9b7bb99714ec3a6ca4a896eedefc0460a741907c98338423eeebaf3:2 + sigScript: '' + sequence: 0 + witness: + - 3045022100a3bfe4c72afe93ebbbaa2548ddad12c2dba44f198330623b4e1aab0b47e47b9602203f272975c6d733de7b8b7d951e2797db3f06a873556a58b1e45cb349c68d67cb01 + - 031bb6f519efcc51ffa8877a061806334b78f63a291aac6b5ca619fe3638cf4d53 +outputs: +- value: 0 + scriptPubkey: 6a20eabdab4d680dfc9d0769bda6e8325f2568a753c7d5eb72ecc96977347a95387c +- value: 9000 + scriptPubkey: 0014d898ac9ffca24f952d7a82067c44e7d9df24f320 +- value: 99981200 + scriptPubkey: 0014c9c7c0c68940434f27cc5b1bb9447dc622e0e644 +lockTime: 0 diff --git a/tests/fixtures/82e491ecb9b7bb99714ec3a6ca4a896eedefc0460a741907c98338423eeebaf3.yaml b/tests/fixtures/82e491ecb9b7bb99714ec3a6ca4a896eedefc0460a741907c98338423eeebaf3.yaml new file mode 100644 index 0000000..d1df62c --- /dev/null +++ b/tests/fixtures/82e491ecb9b7bb99714ec3a6ca4a896eedefc0460a741907c98338423eeebaf3.yaml @@ -0,0 +1,16 @@ +version: 2 +inputs: +- prevOutput: 667bcbc4c236eabade1ca5e6ad933e0cdcbd819e5aa2b76017569660c89a33ba:1 + sigScript: '' + sequence: 0 + witness: + - 3044022038d7709b763b413325dfbb8975b50ac21c02439f24a519b330f48e2997b48aa7022044046f4bf633f421aa44de0cf070cd96857f43f4938610032bafae9803b5599b01 + - 02e7ed677834995029ead29975cd20ae68de6e726c8f0f26b5ca8b64f2a085874b +outputs: +- value: 0 + scriptPubkey: 6a205739ae67beea0fb5f1099b79574d93f3cdc174f1d2ab586a9027894b03a3b1f7 +- value: 9000 + scriptPubkey: 0014d898ac9ffca24f952d7a82067c44e7d9df24f320 +- value: 99990600 + scriptPubkey: 0014e39cf7957ff2c2a47bb82f39f803c95ee5ce7c9f +lockTime: 0 diff --git a/tests/fixtures/attack_bundles_pubWitness_data_input_sequence.yaml b/tests/fixtures/attack_bundles_pubWitness_data_input_sequence.yaml index e47d027..5532c73 100644 --- a/tests/fixtures/attack_bundles_pubWitness_data_input_sequence.yaml +++ b/tests/fixtures/attack_bundles_pubWitness_data_input_sequence.yaml @@ -1,19 +1,14 @@ version: v2 transfer: true terminals: - 3bb2645029b3de98be6c3ed5ce3332b8591f59c693146a007b75db5cfdb7c7b8: - chain: bitcoin - data: e1c963ea4a2d4e21f870c713a76d0397a0cc197aece1f53a66ae9febf122bb50 + 343a3efbd95e81201c3cd610801c6b96d90af6d03116185153ff9c8977f99da2: 500be63f6011863ac171fb507f1cd19dfc83c93c8501c80e90bf68e5bb237df7 genesis: ffv: 0 schemaId: rgb:sch:RDYhMTR!9gv8Y2GLv9UNBEK1hcrCmdLDFk9Qd5fnO8k#brave-dinner-banana flags: null - timestamp: 1728925859 + timestamp: 1738319632 issuer: ssi:anonymous - testnet: true - altLayers1: [] - assetTags: - 4000: 603a2b302aac8d1cd7c8adc3acd72f31ce652128f96218fa5b519fd5e9930f6d + chainNet: bitcoinRegtest metadata: {} globals: 2000: @@ -27,60 +22,52 @@ genesis: type: fungible items: - seal: - chain: bitcoin - data: - method: opretFirst - txid: 22f0538e189f32922e55daf6fa0b7120bc01de8520a9a4c80655fdaf70272ac0 - vout: 1 - blinding: 7704601239148887312 + txid: 080aa44f1dc8abcabeccf1cc8623d05074e3bb6eef141e27425004fbfb1f42c4 + vout: 0 + blinding: 5639181920309542414 state: value: 666 - blinding: 7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e - tag: 603a2b302aac8d1cd7c8adc3acd72f31ce652128f96218fa5b519fd5e9930f6d lock: null valencies: [] validator: null extensions: [] bundles: -- pubWitness: - chain: bitcoin - data: !tx - version: 2 - inputs: - - prevOutput: a5c3085efe8dfdba0fa0e11d81bf90cdcac27c0af496c4de1a2fd9659948ffce:0 - sigScript: '' - sequence: 1 - witness: [] - outputs: - - value: 99999200 - scriptPubkey: 001430d944c2d49db5c315c49e13aab8cad8b9415cac - - value: 0 - scriptPubkey: 6a20669e87f4fe2acf39e58ef94c4a2f81791b7848acac344cd8a2e562f4777acc7f - lockTime: 0 - anchoredBundles: !opret +- pubWitness: !tx + version: 2 + inputs: + - prevOutput: 080aa44f1dc8abcabeccf1cc8623d05074e3bb6eef141e27425004fbfb1f42c4:0 + sigScript: '' + sequence: 1 + witness: [] + outputs: + - value: 0 + scriptPubkey: 6a20a1440d59d96ad7e5f3c8cf0126e3f1638c6fa7d472c8eb9d7e04f99063555bdd + - value: 99999600 + scriptPubkey: 0014cde198c07214906f68af5e5b7c1d3dfc1829002c + lockTime: 0 + anchoredBundle: !opret mpcProof: - pos: 1 - cofactor: 1 + pos: 4 + cofactor: 0 path: - - 0d4042fb3c309aa40bff3159cee3a0ca87c4efc804a5347aa1a363d7244a88f7 - - e56d0e3dbadefb489899917dbc2e1dbf0c49c3ff155e178ef52feab2f351fc7c - - 4edc7f8808488b46c10bedf910818a9afbe2512c1f08a436a7b3db244f22ac85 + - ccfce6b11ea53ba1c9252f51c62f9fea098bda4c5c88e52edf11687a48644995 + - f6b01774f1b4119b7a791fbd1c885a30e9ee10cb995bbb66095ab208504499a8 + - 78a91dec657ed20ff9658fab11c30c31e670225ddcc3d1ec5a79fa0008ac7d35 dbcProof: null bundle: - closeMethod: opretFirst inputMap: - 0: 9b50df314989fe006013a96d2ded4b508e5f32ef2b29e7245abfb3d9a35888e3 + 0: 837b7b9605b21958518c2172471e1b2f78156353809e7e3ea26ed137556e7e79 knownTransitions: - 9b50df314989fe006013a96d2ded4b508e5f32ef2b29e7245abfb3d9a35888e3: + 837b7b9605b21958518c2172471e1b2f78156353809e7e3ea26ed137556e7e79: ffv: 0 - contractId: rgb:JgunSMvZ-VCH4cfz-qW1qNyp-VO2a9f7-UYT3vN1-mjO$Ebg + contractId: rgb:XNSQJkiC-Ty2ykhj-ASznz2O-vNaMisA-ohYh4GO-fwH8BTo nonce: 18446744073709551615 - transitionType: 10000 + transitionType: 65535 metadata: {} globals: {} inputs: - prevOut: - op: fb58c747eec9c44a05ec907ec9d14e0e72572f75db0a3f9aa47f0673702e760e + op: 5cd4902648824f2db29218c04b39f3d8ebcd68c8ac02885887818e7f01fc053a ty: 4000 no: 0 assignments: @@ -88,67 +75,51 @@ bundles: type: fungible items: - seal: - chain: bitcoin - data: - method: opretFirst - txid: null - vout: 0 - blinding: 10251942175724995735 - state: - value: 616 - blinding: 361c123b494b218e332794a2390dc6d5cc7c332f64cf8764b6dfb3e04e56c9fc - tag: 603a2b302aac8d1cd7c8adc3acd72f31ce652128f96218fa5b519fd5e9930f6d - lock: null - - seal: - chain: bitcoin - data: 108b3912eb0b836427f235bafe449f3153c2aae08887b948a3d8529f17b19b95 + txid: null + vout: 1 + blinding: 10973063553836119379 state: - value: 50 - blinding: 48626c4335335cf04b56e9dc4570b7a8b2024b4f19aef719c79eca9e3027b482 - tag: 603a2b302aac8d1cd7c8adc3acd72f31ce652128f96218fa5b519fd5e9930f6d + value: 666 lock: null valencies: [] validator: null witness: null -- pubWitness: - chain: bitcoin - data: !tx - version: 2 - inputs: - - prevOutput: 22f0538e189f32922e55daf6fa0b7120bc01de8520a9a4c80655fdaf70272ac0:1 - sigScript: '' - sequence: 0 - witness: [] - outputs: - - value: 99999600 - scriptPubkey: 00141d66111f9daca8769c3ab2b0fe14354b6198b29c - - value: 0 - scriptPubkey: 6a20a02ab7dd75b9911b540419440ebe8f5be0742f76fd9fdaf5e69ebb30f38d3f11 - lockTime: 0 - anchoredBundles: !opret +- pubWitness: !tx + version: 2 + inputs: + - prevOutput: 2c033a3584f571a3b8146dc0f7f904cb421bda9880307ed38f5b7a28ae183eff:1 + sigScript: '' + sequence: 0 + witness: [] + outputs: + - value: 0 + scriptPubkey: 6a20aabe7e0a73e7a77aa578debd24b23032247c6afaffc74d33d2b35b05e8df97d9 + - value: 99998800 + scriptPubkey: 00140e11c2b98e1e5be4645e903225c9eea1d3564f49 + lockTime: 0 + anchoredBundle: !opret mpcProof: - pos: 1 - cofactor: 1 + pos: 4 + cofactor: 0 path: - - 0ae6caac7df078206a7af28b0a885098f743d49b92cdb3485558b804492a5be5 - - 843d661f6822486889697a7446a6a9bd1e123921c6dafdde687140cf863a9403 - - 040c8d2b550cc8f3bd210535dbf482f91e7fe62989168c1ed87eebf2b4f35be3 + - 497171ec2882c5c32ca5f53b92ff7df0474c505315ab279af5c55053fc4d01bf + - 72b9326cabdb9258164a569ffdd4d516e4e4674df9f731bacb6fbde425baddf8 + - 8f5a3c62452bc6631251bb3b173c59cb32b719a2a92b02bf2ac886512bc9be16 dbcProof: null bundle: - closeMethod: opretFirst inputMap: - 0: fb58c747eec9c44a05ec907ec9d14e0e72572f75db0a3f9aa47f0673702e760e + 0: a8288b02e5d1604eaf260c1301746b53a1f37537ad37f66ee3fccae207bcd06c knownTransitions: - fb58c747eec9c44a05ec907ec9d14e0e72572f75db0a3f9aa47f0673702e760e: + a8288b02e5d1604eaf260c1301746b53a1f37537ad37f66ee3fccae207bcd06c: ffv: 0 - contractId: rgb:JgunSMvZ-VCH4cfz-qW1qNyp-VO2a9f7-UYT3vN1-mjO$Ebg + contractId: rgb:XNSQJkiC-Ty2ykhj-ASznz2O-vNaMisA-ohYh4GO-fwH8BTo nonce: 18446744073709551615 - transitionType: 65535 + transitionType: 10000 metadata: {} globals: {} inputs: - prevOut: - op: 260ba748cbd95421f871fcea5b5a8dca954ed9af5fed4613def3759a33bf11b8 + op: 8c3537cca0d3a89482686352800444781c5baa9c822bb9cbf2995d798c2b10e6 ty: 4000 no: 0 assignments: @@ -156,59 +127,55 @@ bundles: type: fungible items: - seal: - chain: bitcoin - data: - method: opretFirst - txid: null - vout: 0 - blinding: 7687739675014878388 + txid: null + vout: 1 + blinding: 2266984746474877836 state: - value: 666 - blinding: 7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e - tag: 603a2b302aac8d1cd7c8adc3acd72f31ce652128f96218fa5b519fd5e9930f6d + value: 539 + lock: null + - seal: 500be63f6011863ac171fb507f1cd19dfc83c93c8501c80e90bf68e5bb237df7 + state: + value: 77 lock: null valencies: [] validator: null witness: null -- pubWitness: - chain: bitcoin - data: !tx - version: 2 - inputs: - - prevOutput: d077ea7e3a55a215893a18e82cb03fda0f50619893e4aee0ba70b014e6d63248:0 - sigScript: '' - sequence: 0 - witness: [] - outputs: - - value: 99998800 - scriptPubkey: 00146ab6fe162c087a01a717d2b6d4bbef87829cec24 - - value: 0 - scriptPubkey: 6a2088b706bf16e225b5d438f48c8c1abc544e807bb7fb99e6fc8ca460d4de62d1b0 - lockTime: 0 - anchoredBundles: !opret +- pubWitness: !tx + version: 2 + inputs: + - prevOutput: 3bda7cfcd64b4255dc8d86090a49497379bd61a5de108f88e50c9a3cda9fa20b:1 + sigScript: '' + sequence: 0 + witness: [] + outputs: + - value: 0 + scriptPubkey: 6a2004fa0afe61cb15facef532b7656caabb2ea3e879b6d7cfa9354abd173e566669 + - value: 99999200 + scriptPubkey: 00147db3c392013fcbb67ac449267be461ac0e9fbf48 + lockTime: 0 + anchoredBundle: !opret mpcProof: - pos: 1 - cofactor: 1 + pos: 4 + cofactor: 0 path: - - 91246094600e4cae70d42147330754f25ef710118c7bc3aa963b1a8900125b83 - - 58bb69c807310413032dd30a245738b48f1a5cb8645f55b8f089489ae16b0533 - - 500d82630b8bb4a1bcb8973500acae7114dc0d5ef77b748a60b4d93aa9375ca1 + - 8718080820ea5a3556e9b82dc72def8c41115260f6d6a1f4d963d01f3276b87f + - 356553755fea1b394aa1933f9ddfd0cdf28cb069820c4a0873fffe47dbdfe963 + - 8ff5b6b5c8d3e6902c5945956c1a3c8b8d02350df7bebfa55a44278219764a99 dbcProof: null bundle: - closeMethod: opretFirst inputMap: - 0: c04da8609a2a8ddf7e0e9847f4ebd6758b1091bceeda10094b24352c97840ea2 + 0: 8c3537cca0d3a89482686352800444781c5baa9c822bb9cbf2995d798c2b10e6 knownTransitions: - c04da8609a2a8ddf7e0e9847f4ebd6758b1091bceeda10094b24352c97840ea2: + 8c3537cca0d3a89482686352800444781c5baa9c822bb9cbf2995d798c2b10e6: ffv: 0 - contractId: rgb:JgunSMvZ-VCH4cfz-qW1qNyp-VO2a9f7-UYT3vN1-mjO$Ebg + contractId: rgb:XNSQJkiC-Ty2ykhj-ASznz2O-vNaMisA-ohYh4GO-fwH8BTo nonce: 18446744073709551615 transitionType: 10000 metadata: {} globals: {} inputs: - prevOut: - op: 9b50df314989fe006013a96d2ded4b508e5f32ef2b29e7245abfb3d9a35888e3 + op: 837b7b9605b21958518c2172471e1b2f78156353809e7e3ea26ed137556e7e79 ty: 4000 no: 0 assignments: @@ -216,24 +183,15 @@ bundles: type: fungible items: - seal: - chain: bitcoin - data: - method: opretFirst - txid: null - vout: 0 - blinding: 9888072140771099372 + txid: null + vout: 1 + blinding: 13359815499838509364 state: - value: 539 - blinding: ae89403cecbdb782ddba50b592d9590bb664bb3d4dc9f7772f7c6611f4755345 - tag: 603a2b302aac8d1cd7c8adc3acd72f31ce652128f96218fa5b519fd5e9930f6d + value: 616 lock: null - - seal: - chain: bitcoin - data: e1c963ea4a2d4e21f870c713a76d0397a0cc197aece1f53a66ae9febf122bb50 + - seal: 3b5918d65ecbfafea7bd43b5ec1fe99b3272eecb8cfb4ecbc739f16bd9dbb041 state: - value: 77 - blinding: 8792d1fe5c8d6a0b556d43eca6346dc8d0c654d8c64e30294735ac5b2a17b7f8 - tag: 603a2b302aac8d1cd7c8adc3acd72f31ce652128f96218fa5b519fd5e9930f6d + value: 50 lock: null valencies: [] validator: null diff --git a/tests/fixtures/attack_chain.yaml b/tests/fixtures/attack_chain.yaml index 21e9889..47e3723 100644 --- a/tests/fixtures/attack_chain.yaml +++ b/tests/fixtures/attack_chain.yaml @@ -1,19 +1,14 @@ version: v2 transfer: true terminals: - 3bb2645029b3de98be6c3ed5ce3332b8591f59c693146a007b75db5cfdb7c7b8: - chain: liquid - data: e1c963ea4a2d4e21f870c713a76d0397a0cc197aece1f53a66ae9febf122bb50 + 343a3efbd95e81201c3cd610801c6b96d90af6d03116185153ff9c8977f99da2: 500be63f6011863ac171fb507f1cd19dfc83c93c8501c80e90bf68e5bb237df7 genesis: ffv: 0 schemaId: rgb:sch:RDYhMTR!9gv8Y2GLv9UNBEK1hcrCmdLDFk9Qd5fnO8k#brave-dinner-banana flags: null - timestamp: 1728925859 + timestamp: 1738319632 issuer: ssi:anonymous - testnet: true - altLayers1: [] - assetTags: - 4000: 603a2b302aac8d1cd7c8adc3acd72f31ce652128f96218fa5b519fd5e9930f6d + chainNet: liquidTestnet metadata: {} globals: 2000: @@ -27,60 +22,52 @@ genesis: type: fungible items: - seal: - chain: liquid - data: - method: opretFirst - txid: 22f0538e189f32922e55daf6fa0b7120bc01de8520a9a4c80655fdaf70272ac0 - vout: 1 - blinding: 7704601239148887312 + txid: 080aa44f1dc8abcabeccf1cc8623d05074e3bb6eef141e27425004fbfb1f42c4 + vout: 0 + blinding: 5639181920309542414 state: value: 666 - blinding: 7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e - tag: 603a2b302aac8d1cd7c8adc3acd72f31ce652128f96218fa5b519fd5e9930f6d lock: null valencies: [] validator: null extensions: [] bundles: -- pubWitness: - chain: liquid - data: !tx - version: 2 - inputs: - - prevOutput: a5c3085efe8dfdba0fa0e11d81bf90cdcac27c0af496c4de1a2fd9659948ffce:0 - sigScript: '' - sequence: 0 - witness: [] - outputs: - - value: 99999200 - scriptPubkey: 001430d944c2d49db5c315c49e13aab8cad8b9415cac - - value: 0 - scriptPubkey: 6a20669e87f4fe2acf39e58ef94c4a2f81791b7848acac344cd8a2e562f4777acc7f - lockTime: 0 - anchoredBundles: !opret +- pubWitness: !tx + version: 2 + inputs: + - prevOutput: 080aa44f1dc8abcabeccf1cc8623d05074e3bb6eef141e27425004fbfb1f42c4:0 + sigScript: '' + sequence: 0 + witness: [] + outputs: + - value: 0 + scriptPubkey: 6a20a1440d59d96ad7e5f3c8cf0126e3f1638c6fa7d472c8eb9d7e04f99063555bdd + - value: 99999600 + scriptPubkey: 0014cde198c07214906f68af5e5b7c1d3dfc1829002c + lockTime: 0 + anchoredBundle: !opret mpcProof: - pos: 1 - cofactor: 1 + pos: 4 + cofactor: 0 path: - - 0d4042fb3c309aa40bff3159cee3a0ca87c4efc804a5347aa1a363d7244a88f7 - - e56d0e3dbadefb489899917dbc2e1dbf0c49c3ff155e178ef52feab2f351fc7c - - 4edc7f8808488b46c10bedf910818a9afbe2512c1f08a436a7b3db244f22ac85 + - ccfce6b11ea53ba1c9252f51c62f9fea098bda4c5c88e52edf11687a48644995 + - f6b01774f1b4119b7a791fbd1c885a30e9ee10cb995bbb66095ab208504499a8 + - 78a91dec657ed20ff9658fab11c30c31e670225ddcc3d1ec5a79fa0008ac7d35 dbcProof: null bundle: - closeMethod: opretFirst inputMap: - 0: 9b50df314989fe006013a96d2ded4b508e5f32ef2b29e7245abfb3d9a35888e3 + 0: 837b7b9605b21958518c2172471e1b2f78156353809e7e3ea26ed137556e7e79 knownTransitions: - 9b50df314989fe006013a96d2ded4b508e5f32ef2b29e7245abfb3d9a35888e3: + 837b7b9605b21958518c2172471e1b2f78156353809e7e3ea26ed137556e7e79: ffv: 0 - contractId: rgb:JgunSMvZ-VCH4cfz-qW1qNyp-VO2a9f7-UYT3vN1-mjO$Ebg + contractId: rgb:XNSQJkiC-Ty2ykhj-ASznz2O-vNaMisA-ohYh4GO-fwH8BTo nonce: 18446744073709551615 - transitionType: 10000 + transitionType: 65535 metadata: {} globals: {} inputs: - prevOut: - op: fb58c747eec9c44a05ec907ec9d14e0e72572f75db0a3f9aa47f0673702e760e + op: 5cd4902648824f2db29218c04b39f3d8ebcd68c8ac02885887818e7f01fc053a ty: 4000 no: 0 assignments: @@ -88,67 +75,51 @@ bundles: type: fungible items: - seal: - chain: liquid - data: - method: opretFirst - txid: null - vout: 0 - blinding: 10251942175724995735 - state: - value: 616 - blinding: 361c123b494b218e332794a2390dc6d5cc7c332f64cf8764b6dfb3e04e56c9fc - tag: 603a2b302aac8d1cd7c8adc3acd72f31ce652128f96218fa5b519fd5e9930f6d - lock: null - - seal: - chain: liquid - data: 108b3912eb0b836427f235bafe449f3153c2aae08887b948a3d8529f17b19b95 + txid: null + vout: 1 + blinding: 10973063553836119379 state: - value: 50 - blinding: 48626c4335335cf04b56e9dc4570b7a8b2024b4f19aef719c79eca9e3027b482 - tag: 603a2b302aac8d1cd7c8adc3acd72f31ce652128f96218fa5b519fd5e9930f6d + value: 666 lock: null valencies: [] validator: null witness: null -- pubWitness: - chain: liquid - data: !tx - version: 2 - inputs: - - prevOutput: 22f0538e189f32922e55daf6fa0b7120bc01de8520a9a4c80655fdaf70272ac0:1 - sigScript: '' - sequence: 0 - witness: [] - outputs: - - value: 99999600 - scriptPubkey: 00141d66111f9daca8769c3ab2b0fe14354b6198b29c - - value: 0 - scriptPubkey: 6a20a02ab7dd75b9911b540419440ebe8f5be0742f76fd9fdaf5e69ebb30f38d3f11 - lockTime: 0 - anchoredBundles: !opret +- pubWitness: !tx + version: 2 + inputs: + - prevOutput: 2c033a3584f571a3b8146dc0f7f904cb421bda9880307ed38f5b7a28ae183eff:1 + sigScript: '' + sequence: 0 + witness: [] + outputs: + - value: 0 + scriptPubkey: 6a20aabe7e0a73e7a77aa578debd24b23032247c6afaffc74d33d2b35b05e8df97d9 + - value: 99998800 + scriptPubkey: 00140e11c2b98e1e5be4645e903225c9eea1d3564f49 + lockTime: 0 + anchoredBundle: !opret mpcProof: - pos: 1 - cofactor: 1 + pos: 4 + cofactor: 0 path: - - 0ae6caac7df078206a7af28b0a885098f743d49b92cdb3485558b804492a5be5 - - 843d661f6822486889697a7446a6a9bd1e123921c6dafdde687140cf863a9403 - - 040c8d2b550cc8f3bd210535dbf482f91e7fe62989168c1ed87eebf2b4f35be3 + - 497171ec2882c5c32ca5f53b92ff7df0474c505315ab279af5c55053fc4d01bf + - 72b9326cabdb9258164a569ffdd4d516e4e4674df9f731bacb6fbde425baddf8 + - 8f5a3c62452bc6631251bb3b173c59cb32b719a2a92b02bf2ac886512bc9be16 dbcProof: null bundle: - closeMethod: opretFirst inputMap: - 0: fb58c747eec9c44a05ec907ec9d14e0e72572f75db0a3f9aa47f0673702e760e + 0: a8288b02e5d1604eaf260c1301746b53a1f37537ad37f66ee3fccae207bcd06c knownTransitions: - fb58c747eec9c44a05ec907ec9d14e0e72572f75db0a3f9aa47f0673702e760e: + a8288b02e5d1604eaf260c1301746b53a1f37537ad37f66ee3fccae207bcd06c: ffv: 0 - contractId: rgb:JgunSMvZ-VCH4cfz-qW1qNyp-VO2a9f7-UYT3vN1-mjO$Ebg + contractId: rgb:XNSQJkiC-Ty2ykhj-ASznz2O-vNaMisA-ohYh4GO-fwH8BTo nonce: 18446744073709551615 - transitionType: 65535 + transitionType: 10000 metadata: {} globals: {} inputs: - prevOut: - op: 260ba748cbd95421f871fcea5b5a8dca954ed9af5fed4613def3759a33bf11b8 + op: 8c3537cca0d3a89482686352800444781c5baa9c822bb9cbf2995d798c2b10e6 ty: 4000 no: 0 assignments: @@ -156,59 +127,55 @@ bundles: type: fungible items: - seal: - chain: liquid - data: - method: opretFirst - txid: null - vout: 0 - blinding: 7687739675014878388 + txid: null + vout: 1 + blinding: 2266984746474877836 state: - value: 666 - blinding: 7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e - tag: 603a2b302aac8d1cd7c8adc3acd72f31ce652128f96218fa5b519fd5e9930f6d + value: 539 + lock: null + - seal: 500be63f6011863ac171fb507f1cd19dfc83c93c8501c80e90bf68e5bb237df7 + state: + value: 77 lock: null valencies: [] validator: null witness: null -- pubWitness: - chain: liquid - data: !tx - version: 2 - inputs: - - prevOutput: d077ea7e3a55a215893a18e82cb03fda0f50619893e4aee0ba70b014e6d63248:0 - sigScript: '' - sequence: 0 - witness: [] - outputs: - - value: 99998800 - scriptPubkey: 00146ab6fe162c087a01a717d2b6d4bbef87829cec24 - - value: 0 - scriptPubkey: 6a2088b706bf16e225b5d438f48c8c1abc544e807bb7fb99e6fc8ca460d4de62d1b0 - lockTime: 0 - anchoredBundles: !opret +- pubWitness: !tx + version: 2 + inputs: + - prevOutput: 3bda7cfcd64b4255dc8d86090a49497379bd61a5de108f88e50c9a3cda9fa20b:1 + sigScript: '' + sequence: 0 + witness: [] + outputs: + - value: 0 + scriptPubkey: 6a2004fa0afe61cb15facef532b7656caabb2ea3e879b6d7cfa9354abd173e566669 + - value: 99999200 + scriptPubkey: 00147db3c392013fcbb67ac449267be461ac0e9fbf48 + lockTime: 0 + anchoredBundle: !opret mpcProof: - pos: 1 - cofactor: 1 + pos: 4 + cofactor: 0 path: - - 91246094600e4cae70d42147330754f25ef710118c7bc3aa963b1a8900125b83 - - 58bb69c807310413032dd30a245738b48f1a5cb8645f55b8f089489ae16b0533 - - 500d82630b8bb4a1bcb8973500acae7114dc0d5ef77b748a60b4d93aa9375ca1 + - 8718080820ea5a3556e9b82dc72def8c41115260f6d6a1f4d963d01f3276b87f + - 356553755fea1b394aa1933f9ddfd0cdf28cb069820c4a0873fffe47dbdfe963 + - 8ff5b6b5c8d3e6902c5945956c1a3c8b8d02350df7bebfa55a44278219764a99 dbcProof: null bundle: - closeMethod: opretFirst inputMap: - 0: c04da8609a2a8ddf7e0e9847f4ebd6758b1091bceeda10094b24352c97840ea2 + 0: 8c3537cca0d3a89482686352800444781c5baa9c822bb9cbf2995d798c2b10e6 knownTransitions: - c04da8609a2a8ddf7e0e9847f4ebd6758b1091bceeda10094b24352c97840ea2: + 8c3537cca0d3a89482686352800444781c5baa9c822bb9cbf2995d798c2b10e6: ffv: 0 - contractId: rgb:JgunSMvZ-VCH4cfz-qW1qNyp-VO2a9f7-UYT3vN1-mjO$Ebg + contractId: rgb:XNSQJkiC-Ty2ykhj-ASznz2O-vNaMisA-ohYh4GO-fwH8BTo nonce: 18446744073709551615 transitionType: 10000 metadata: {} globals: {} inputs: - prevOut: - op: 9b50df314989fe006013a96d2ded4b508e5f32ef2b29e7245abfb3d9a35888e3 + op: 837b7b9605b21958518c2172471e1b2f78156353809e7e3ea26ed137556e7e79 ty: 4000 no: 0 assignments: @@ -216,24 +183,15 @@ bundles: type: fungible items: - seal: - chain: liquid - data: - method: opretFirst - txid: null - vout: 0 - blinding: 9888072140771099372 + txid: null + vout: 1 + blinding: 13359815499838509364 state: - value: 539 - blinding: ae89403cecbdb782ddba50b592d9590bb664bb3d4dc9f7772f7c6611f4755345 - tag: 603a2b302aac8d1cd7c8adc3acd72f31ce652128f96218fa5b519fd5e9930f6d + value: 616 lock: null - - seal: - chain: liquid - data: e1c963ea4a2d4e21f870c713a76d0397a0cc197aece1f53a66ae9febf122bb50 + - seal: 3b5918d65ecbfafea7bd43b5ec1fe99b3272eecb8cfb4ecbc739f16bd9dbb041 state: - value: 77 - blinding: 8792d1fe5c8d6a0b556d43eca6346dc8d0c654d8c64e30294735ac5b2a17b7f8 - tag: 603a2b302aac8d1cd7c8adc3acd72f31ce652128f96218fa5b519fd5e9930f6d + value: 50 lock: null valencies: [] validator: null diff --git a/tests/fixtures/attack_genesis_schema_id.yaml b/tests/fixtures/attack_genesis_schema_id.yaml index 94cc24c..c03ce02 100644 --- a/tests/fixtures/attack_genesis_schema_id.yaml +++ b/tests/fixtures/attack_genesis_schema_id.yaml @@ -5,12 +5,9 @@ genesis: ffv: 0 schemaId: rgb:sch:cJjPZfUpkOqIWhpCTqYJtFYzLfz$AB3JNxIEOJZYn28#circus-version-silence flags: null - timestamp: 1728926035 + timestamp: 1738319695 issuer: ssi:anonymous - testnet: true - altLayers1: [] - assetTags: - 4000: 182bcffc792b3b0b5ea98515b0babbf1650db23f30e508eb8637000d8ad590db + chainNet: bitcoinRegtest metadata: {} globals: 2000: @@ -24,62 +21,54 @@ genesis: type: fungible items: - seal: - chain: bitcoin - data: - method: opretFirst - txid: 39f4d1888d1d994a2649397d34bfcaf8a9f7de2d6369dd1d42e0c61a26b4384b - vout: 1 - blinding: 7943510731595037200 + txid: 667bcbc4c236eabade1ca5e6ad933e0cdcbd819e5aa2b76017569660c89a33ba + vout: 1 + blinding: 12133577306296987570 state: value: 666 - blinding: 7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e - tag: 182bcffc792b3b0b5ea98515b0babbf1650db23f30e508eb8637000d8ad590db lock: null valencies: [] validator: null extensions: [] bundles: -- pubWitness: - chain: bitcoin - data: !tx - version: 2 - inputs: - - prevOutput: c269055b7750a234087c11acd7a408172cb84d8fc6af0ded42d8a8cbea6712e9:1 - sigScript: '' - sequence: 0 - witness: [] - outputs: - - value: 9000 - scriptPubkey: 0014a39902b742ace887eeef8b91463f30893f777a12 - - value: 99981200 - scriptPubkey: 0014ceb732c6400f984d3258c202811ef439234ff028 - - value: 0 - scriptPubkey: 6a20efce72c00a4dafa508d223854191b9bc534505d7b40841136ea57454bcd8f62e - lockTime: 0 - anchoredBundles: !opret +- pubWitness: !tx + version: 2 + inputs: + - prevOutput: 82e491ecb9b7bb99714ec3a6ca4a896eedefc0460a741907c98338423eeebaf3:2 + sigScript: '' + sequence: 0 + witness: [] + outputs: + - value: 0 + scriptPubkey: 6a20eabdab4d680dfc9d0769bda6e8325f2568a753c7d5eb72ecc96977347a95387c + - value: 9000 + scriptPubkey: 0014d898ac9ffca24f952d7a82067c44e7d9df24f320 + - value: 99981200 + scriptPubkey: 0014c9c7c0c68940434f27cc5b1bb9447dc622e0e644 + lockTime: 0 + anchoredBundle: !opret mpcProof: - pos: 4 - cofactor: 1 + pos: 7 + cofactor: 0 path: - - 59fb64885c9d21d566c630261ebaf61e6fdfb90fd755734580e2853606e04468 - - 972bd31741970dcfdcb1fd6e1e0cb86b43a95cdf9be16e26b20f7efb55b8815a - - 59c4bea42d613b9b4d9190c70713db38fcb1213e1384390305c9f41b105e7ad7 + - 1e4a0190d01755eaf29561aa98c85b527224fc8ebf2eb713049685b5ea5b7688 + - 4731cb7fa145f024c33532c90dbe21b53768b87db50b390783dc83168330b962 + - ac21e99bf11e80e6910f2f238b131e74e8cb8c864b76e3d7c1bbd8e68043a5ec dbcProof: null bundle: - closeMethod: opretFirst inputMap: - 0: 93ff8f77c5f41ebdfb417b9f30a603e2b48a0db75d5a0e520495954e564f62f6 + 0: 5a6756b480ba825bb9964c2e35c311528a08bfbce77e8c18f838a832d44b5cc3 knownTransitions: - 93ff8f77c5f41ebdfb417b9f30a603e2b48a0db75d5a0e520495954e564f62f6: + 5a6756b480ba825bb9964c2e35c311528a08bfbce77e8c18f838a832d44b5cc3: ffv: 0 - contractId: rgb:P9y8fj2n-Hjyhxbb-FSv9Jb6-xVz3qn$-laXX8N6-hzNhlHQ + contractId: rgb:ZwpqwCEf-uNLgo0v-DHh4YE2-rs6ni1x-$eT2TF$-Qapuav0 nonce: 18446744073709551615 transitionType: 10000 metadata: {} globals: {} inputs: - prevOut: - op: 76fc3455d84d793361211daa2a85be764b9bebc559dd2958833bf6ab153fa9a3 + op: eb6c87fe9949de2b96f04ba5165471674c98be2cb3d186b532e4ce6e1121c44d ty: 4000 no: 0 assignments: @@ -87,73 +76,60 @@ bundles: type: fungible items: - seal: - chain: bitcoin - data: - method: opretFirst - txid: null - vout: 0 - blinding: 10355153668244730300 + txid: null + vout: 1 + blinding: 308949839619168014 state: value: 50 - blinding: 6ba480e64c69b4e53fe7c76e5c79bb79e8d1a442ba405e9b568612b0014dc452 - tag: 182bcffc792b3b0b5ea98515b0babbf1650db23f30e508eb8637000d8ad590db lock: null - seal: - chain: bitcoin - data: - method: opretFirst - txid: null - vout: 1 - blinding: 4411272172758969930 + txid: null + vout: 2 + blinding: 1395950772980243693 state: value: 616 - blinding: 12d9fd983214c9993e96b7102204c30495acda3bc43e1fe327f86bce7d30ba2c - tag: 182bcffc792b3b0b5ea98515b0babbf1650db23f30e508eb8637000d8ad590db lock: null valencies: [] validator: null witness: null -- pubWitness: - chain: bitcoin - data: !tx - version: 2 - inputs: - - prevOutput: d84c37b6c6616184c454c815d970505bed9b3a3723a4445dd1289dc708bc80b3:1 - sigScript: '' - sequence: 0 - witness: [] - outputs: - - value: 9000 - scriptPubkey: 0014a39902b742ace887eeef8b91463f30893f777a12 - - value: 99971800 - scriptPubkey: 0014b63cbe65e66aaec213d9e25a2ff8cd4e4f3c47d0 - - value: 0 - scriptPubkey: 6a2036831c40589897909e67d439cba95004d53280635e2ca66b6e53da52551f957c - lockTime: 0 - anchoredBundles: !opret +- pubWitness: !tx + version: 2 + inputs: + - prevOutput: 6788fec62a2e871cc6b5f250aeadf68b11560719bb986bc97c271b0505211d81:2 + sigScript: '' + sequence: 0 + witness: [] + outputs: + - value: 0 + scriptPubkey: 6a20857f9e8bf7e99cfb3154636de0ed27d86a76a6fc62abfbd4c6ee64b9cf9ea16d + - value: 9000 + scriptPubkey: 0014d898ac9ffca24f952d7a82067c44e7d9df24f320 + - value: 99971800 + scriptPubkey: 001466b39e8f780f36084a3811f13b2ee9bb66618871 + lockTime: 0 + anchoredBundle: !opret mpcProof: - pos: 4 - cofactor: 1 + pos: 7 + cofactor: 0 path: - - ade25d6370736e013b7148b4e223030112c4dff704d992e0a8d92073df669c2f - - f478b2c344da010822be93fb7405c56c0b95867ce56582a6c4f647b678fba56e - - 9461109d34187938798bf29433c2b3f11f08ed7f7c8831fcceeab43874f11689 + - 68e62b692e4542c987afdb5d10e81cbf52b8134d9c9cb1d4accb639e65b7e94f + - 2515a5cff2e6caa272781807e8bc7ba5d54a598f214d9b9de8a9f34e4401efe8 + - 285bc7f4f1931d95c293860a81ea07cbc37d3e7b4d0af41e09427068384091c8 dbcProof: null bundle: - closeMethod: opretFirst inputMap: - 0: 295cbd02dbfeddee5c9691cfcc2b5c59b284c8130ad1c9e2cfb867b45dc24dec + 0: 1bcfc0aa5537e4eb887f86b511f105913c9be1bbe522673ba4c7a79976785a49 knownTransitions: - 295cbd02dbfeddee5c9691cfcc2b5c59b284c8130ad1c9e2cfb867b45dc24dec: + 1bcfc0aa5537e4eb887f86b511f105913c9be1bbe522673ba4c7a79976785a49: ffv: 0 - contractId: rgb:P9y8fj2n-Hjyhxbb-FSv9Jb6-xVz3qn$-laXX8N6-hzNhlHQ + contractId: rgb:ZwpqwCEf-uNLgo0v-DHh4YE2-rs6ni1x-$eT2TF$-Qapuav0 nonce: 18446744073709551615 transitionType: 10000 metadata: {} globals: {} inputs: - prevOut: - op: 93ff8f77c5f41ebdfb417b9f30a603e2b48a0db75d5a0e520495954e564f62f6 + op: 5a6756b480ba825bb9964c2e35c311528a08bfbce77e8c18f838a832d44b5cc3 ty: 4000 no: 1 assignments: @@ -161,73 +137,60 @@ bundles: type: fungible items: - seal: - chain: bitcoin - data: - method: opretFirst - txid: null - vout: 0 - blinding: 5517491780835545414 + txid: null + vout: 1 + blinding: 11478527946593826468 state: value: 77 - blinding: ab9ad5d441db401474f2f15c2d7940cec37d8b1c962dc20752256f95fdfd1634 - tag: 182bcffc792b3b0b5ea98515b0babbf1650db23f30e508eb8637000d8ad590db lock: null - seal: - chain: bitcoin - data: - method: opretFirst - txid: null - vout: 1 - blinding: 17151752316201612509 + txid: null + vout: 2 + blinding: 4693334950104603760 state: value: 539 - blinding: 673f27c3f0398984c9a3c5b3f48b82348cde2c05dd58fe1795a55ac54f69e539 - tag: 182bcffc792b3b0b5ea98515b0babbf1650db23f30e508eb8637000d8ad590db lock: null valencies: [] validator: null witness: null -- pubWitness: - chain: bitcoin - data: !tx - version: 2 - inputs: - - prevOutput: 39f4d1888d1d994a2649397d34bfcaf8a9f7de2d6369dd1d42e0c61a26b4384b:1 - sigScript: '' - sequence: 0 - witness: [] - outputs: - - value: 9000 - scriptPubkey: 0014a39902b742ace887eeef8b91463f30893f777a12 - - value: 99990600 - scriptPubkey: 00147c22e5543af0a3dca1c89ae5ffbf6cadd03a1bb3 - - value: 0 - scriptPubkey: 6a209f6aed701fb9da0762a238d96e0b203220a609a9afaba47ea71ba96e08065458 - lockTime: 0 - anchoredBundles: !opret +- pubWitness: !tx + version: 2 + inputs: + - prevOutput: 667bcbc4c236eabade1ca5e6ad933e0cdcbd819e5aa2b76017569660c89a33ba:1 + sigScript: '' + sequence: 0 + witness: [] + outputs: + - value: 0 + scriptPubkey: 6a205739ae67beea0fb5f1099b79574d93f3cdc174f1d2ab586a9027894b03a3b1f7 + - value: 9000 + scriptPubkey: 0014d898ac9ffca24f952d7a82067c44e7d9df24f320 + - value: 99990600 + scriptPubkey: 0014e39cf7957ff2c2a47bb82f39f803c95ee5ce7c9f + lockTime: 0 + anchoredBundle: !opret mpcProof: - pos: 4 - cofactor: 1 + pos: 7 + cofactor: 0 path: - - 09a4be7f9ba65f3e4588a93061fe429c8e257de6cb5194a82c1e4dc5d6ff48fd - - cdc9e7844302abff47462927f67cfc6b350a5023dcceb1798eeea250dcce7052 - - 6ef2b8c22960c49c7be94ea27b5909ac60dbbd69fe057d5475795a35802bf24a + - afc4c59b4be86ec206e496628d0ac99807d0d05e971a6342bd68567a09c11c72 + - e15d5d784efeb99e7df3751f14df023e3b0f502ca7ed51beee4fbe85040ea1ad + - fbe3242db955587745533fb1aba9de4ab6aaae7a6fbb57278ee237f6e0093c27 dbcProof: null bundle: - closeMethod: opretFirst inputMap: - 0: 76fc3455d84d793361211daa2a85be764b9bebc559dd2958833bf6ab153fa9a3 + 0: eb6c87fe9949de2b96f04ba5165471674c98be2cb3d186b532e4ce6e1121c44d knownTransitions: - 76fc3455d84d793361211daa2a85be764b9bebc559dd2958833bf6ab153fa9a3: + eb6c87fe9949de2b96f04ba5165471674c98be2cb3d186b532e4ce6e1121c44d: ffv: 0 - contractId: rgb:P9y8fj2n-Hjyhxbb-FSv9Jb6-xVz3qn$-laXX8N6-hzNhlHQ + contractId: rgb:ZwpqwCEf-uNLgo0v-DHh4YE2-rs6ni1x-$eT2TF$-Qapuav0 nonce: 18446744073709551615 transitionType: 65535 metadata: {} globals: {} inputs: - prevOut: - op: 3fdcbc7e3da71e3ca1c5b6c54aff496fac55cf7aa7fe56975fc37a8733619474 + op: 670a6ac0211fb8d2e0a34bc31e1e18136aecea78b5c7f793d9317f41aa6e6afd ty: 4000 no: 0 assignments: @@ -235,16 +198,11 @@ bundles: type: fungible items: - seal: - chain: bitcoin - data: - method: opretFirst - txid: null - vout: 1 - blinding: 16141698382146724670 + txid: null + vout: 2 + blinding: 7664701288462200009 state: value: 666 - blinding: 7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e - tag: 182bcffc792b3b0b5ea98515b0babbf1650db23f30e508eb8637000d8ad590db lock: null valencies: [] validator: null diff --git a/tests/fixtures/attack_genesis_testnet.yaml b/tests/fixtures/attack_genesis_testnet.yaml index caf0a80..0140801 100644 --- a/tests/fixtures/attack_genesis_testnet.yaml +++ b/tests/fixtures/attack_genesis_testnet.yaml @@ -5,12 +5,9 @@ genesis: ffv: 0 schemaId: rgb:sch:RDYhMTR!9gv8Y2GLv9UNBEK1hcrCmdLDFk9Qd5fnO8k#brave-dinner-banana flags: null - timestamp: 1728926035 + timestamp: 1738319695 issuer: ssi:anonymous - testnet: false - altLayers1: [] - assetTags: - 4000: 182bcffc792b3b0b5ea98515b0babbf1650db23f30e508eb8637000d8ad590db + chainNet: bitcoinMainnet metadata: {} globals: 2000: @@ -24,62 +21,54 @@ genesis: type: fungible items: - seal: - chain: bitcoin - data: - method: opretFirst - txid: 39f4d1888d1d994a2649397d34bfcaf8a9f7de2d6369dd1d42e0c61a26b4384b - vout: 1 - blinding: 7943510731595037200 + txid: 667bcbc4c236eabade1ca5e6ad933e0cdcbd819e5aa2b76017569660c89a33ba + vout: 1 + blinding: 12133577306296987570 state: value: 666 - blinding: 7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e - tag: 182bcffc792b3b0b5ea98515b0babbf1650db23f30e508eb8637000d8ad590db lock: null valencies: [] validator: null extensions: [] bundles: -- pubWitness: - chain: bitcoin - data: !tx - version: 2 - inputs: - - prevOutput: c269055b7750a234087c11acd7a408172cb84d8fc6af0ded42d8a8cbea6712e9:1 - sigScript: '' - sequence: 0 - witness: [] - outputs: - - value: 9000 - scriptPubkey: 0014a39902b742ace887eeef8b91463f30893f777a12 - - value: 99981200 - scriptPubkey: 0014ceb732c6400f984d3258c202811ef439234ff028 - - value: 0 - scriptPubkey: 6a20efce72c00a4dafa508d223854191b9bc534505d7b40841136ea57454bcd8f62e - lockTime: 0 - anchoredBundles: !opret +- pubWitness: !tx + version: 2 + inputs: + - prevOutput: 82e491ecb9b7bb99714ec3a6ca4a896eedefc0460a741907c98338423eeebaf3:2 + sigScript: '' + sequence: 0 + witness: [] + outputs: + - value: 0 + scriptPubkey: 6a20eabdab4d680dfc9d0769bda6e8325f2568a753c7d5eb72ecc96977347a95387c + - value: 9000 + scriptPubkey: 0014d898ac9ffca24f952d7a82067c44e7d9df24f320 + - value: 99981200 + scriptPubkey: 0014c9c7c0c68940434f27cc5b1bb9447dc622e0e644 + lockTime: 0 + anchoredBundle: !opret mpcProof: - pos: 4 - cofactor: 1 + pos: 7 + cofactor: 0 path: - - 59fb64885c9d21d566c630261ebaf61e6fdfb90fd755734580e2853606e04468 - - 972bd31741970dcfdcb1fd6e1e0cb86b43a95cdf9be16e26b20f7efb55b8815a - - 59c4bea42d613b9b4d9190c70713db38fcb1213e1384390305c9f41b105e7ad7 + - 1e4a0190d01755eaf29561aa98c85b527224fc8ebf2eb713049685b5ea5b7688 + - 4731cb7fa145f024c33532c90dbe21b53768b87db50b390783dc83168330b962 + - ac21e99bf11e80e6910f2f238b131e74e8cb8c864b76e3d7c1bbd8e68043a5ec dbcProof: null bundle: - closeMethod: opretFirst inputMap: - 0: 93ff8f77c5f41ebdfb417b9f30a603e2b48a0db75d5a0e520495954e564f62f6 + 0: 5a6756b480ba825bb9964c2e35c311528a08bfbce77e8c18f838a832d44b5cc3 knownTransitions: - 93ff8f77c5f41ebdfb417b9f30a603e2b48a0db75d5a0e520495954e564f62f6: + 5a6756b480ba825bb9964c2e35c311528a08bfbce77e8c18f838a832d44b5cc3: ffv: 0 - contractId: rgb:P9y8fj2n-Hjyhxbb-FSv9Jb6-xVz3qn$-laXX8N6-hzNhlHQ + contractId: rgb:ZwpqwCEf-uNLgo0v-DHh4YE2-rs6ni1x-$eT2TF$-Qapuav0 nonce: 18446744073709551615 transitionType: 10000 metadata: {} globals: {} inputs: - prevOut: - op: 76fc3455d84d793361211daa2a85be764b9bebc559dd2958833bf6ab153fa9a3 + op: eb6c87fe9949de2b96f04ba5165471674c98be2cb3d186b532e4ce6e1121c44d ty: 4000 no: 0 assignments: @@ -87,73 +76,60 @@ bundles: type: fungible items: - seal: - chain: bitcoin - data: - method: opretFirst - txid: null - vout: 0 - blinding: 10355153668244730300 + txid: null + vout: 1 + blinding: 308949839619168014 state: value: 50 - blinding: 6ba480e64c69b4e53fe7c76e5c79bb79e8d1a442ba405e9b568612b0014dc452 - tag: 182bcffc792b3b0b5ea98515b0babbf1650db23f30e508eb8637000d8ad590db lock: null - seal: - chain: bitcoin - data: - method: opretFirst - txid: null - vout: 1 - blinding: 4411272172758969930 + txid: null + vout: 2 + blinding: 1395950772980243693 state: value: 616 - blinding: 12d9fd983214c9993e96b7102204c30495acda3bc43e1fe327f86bce7d30ba2c - tag: 182bcffc792b3b0b5ea98515b0babbf1650db23f30e508eb8637000d8ad590db lock: null valencies: [] validator: null witness: null -- pubWitness: - chain: bitcoin - data: !tx - version: 2 - inputs: - - prevOutput: d84c37b6c6616184c454c815d970505bed9b3a3723a4445dd1289dc708bc80b3:1 - sigScript: '' - sequence: 0 - witness: [] - outputs: - - value: 9000 - scriptPubkey: 0014a39902b742ace887eeef8b91463f30893f777a12 - - value: 99971800 - scriptPubkey: 0014b63cbe65e66aaec213d9e25a2ff8cd4e4f3c47d0 - - value: 0 - scriptPubkey: 6a2036831c40589897909e67d439cba95004d53280635e2ca66b6e53da52551f957c - lockTime: 0 - anchoredBundles: !opret +- pubWitness: !tx + version: 2 + inputs: + - prevOutput: 6788fec62a2e871cc6b5f250aeadf68b11560719bb986bc97c271b0505211d81:2 + sigScript: '' + sequence: 0 + witness: [] + outputs: + - value: 0 + scriptPubkey: 6a20857f9e8bf7e99cfb3154636de0ed27d86a76a6fc62abfbd4c6ee64b9cf9ea16d + - value: 9000 + scriptPubkey: 0014d898ac9ffca24f952d7a82067c44e7d9df24f320 + - value: 99971800 + scriptPubkey: 001466b39e8f780f36084a3811f13b2ee9bb66618871 + lockTime: 0 + anchoredBundle: !opret mpcProof: - pos: 4 - cofactor: 1 + pos: 7 + cofactor: 0 path: - - ade25d6370736e013b7148b4e223030112c4dff704d992e0a8d92073df669c2f - - f478b2c344da010822be93fb7405c56c0b95867ce56582a6c4f647b678fba56e - - 9461109d34187938798bf29433c2b3f11f08ed7f7c8831fcceeab43874f11689 + - 68e62b692e4542c987afdb5d10e81cbf52b8134d9c9cb1d4accb639e65b7e94f + - 2515a5cff2e6caa272781807e8bc7ba5d54a598f214d9b9de8a9f34e4401efe8 + - 285bc7f4f1931d95c293860a81ea07cbc37d3e7b4d0af41e09427068384091c8 dbcProof: null bundle: - closeMethod: opretFirst inputMap: - 0: 295cbd02dbfeddee5c9691cfcc2b5c59b284c8130ad1c9e2cfb867b45dc24dec + 0: 1bcfc0aa5537e4eb887f86b511f105913c9be1bbe522673ba4c7a79976785a49 knownTransitions: - 295cbd02dbfeddee5c9691cfcc2b5c59b284c8130ad1c9e2cfb867b45dc24dec: + 1bcfc0aa5537e4eb887f86b511f105913c9be1bbe522673ba4c7a79976785a49: ffv: 0 - contractId: rgb:P9y8fj2n-Hjyhxbb-FSv9Jb6-xVz3qn$-laXX8N6-hzNhlHQ + contractId: rgb:ZwpqwCEf-uNLgo0v-DHh4YE2-rs6ni1x-$eT2TF$-Qapuav0 nonce: 18446744073709551615 transitionType: 10000 metadata: {} globals: {} inputs: - prevOut: - op: 93ff8f77c5f41ebdfb417b9f30a603e2b48a0db75d5a0e520495954e564f62f6 + op: 5a6756b480ba825bb9964c2e35c311528a08bfbce77e8c18f838a832d44b5cc3 ty: 4000 no: 1 assignments: @@ -161,73 +137,60 @@ bundles: type: fungible items: - seal: - chain: bitcoin - data: - method: opretFirst - txid: null - vout: 0 - blinding: 5517491780835545414 + txid: null + vout: 1 + blinding: 11478527946593826468 state: value: 77 - blinding: ab9ad5d441db401474f2f15c2d7940cec37d8b1c962dc20752256f95fdfd1634 - tag: 182bcffc792b3b0b5ea98515b0babbf1650db23f30e508eb8637000d8ad590db lock: null - seal: - chain: bitcoin - data: - method: opretFirst - txid: null - vout: 1 - blinding: 17151752316201612509 + txid: null + vout: 2 + blinding: 4693334950104603760 state: value: 539 - blinding: 673f27c3f0398984c9a3c5b3f48b82348cde2c05dd58fe1795a55ac54f69e539 - tag: 182bcffc792b3b0b5ea98515b0babbf1650db23f30e508eb8637000d8ad590db lock: null valencies: [] validator: null witness: null -- pubWitness: - chain: bitcoin - data: !tx - version: 2 - inputs: - - prevOutput: 39f4d1888d1d994a2649397d34bfcaf8a9f7de2d6369dd1d42e0c61a26b4384b:1 - sigScript: '' - sequence: 0 - witness: [] - outputs: - - value: 9000 - scriptPubkey: 0014a39902b742ace887eeef8b91463f30893f777a12 - - value: 99990600 - scriptPubkey: 00147c22e5543af0a3dca1c89ae5ffbf6cadd03a1bb3 - - value: 0 - scriptPubkey: 6a209f6aed701fb9da0762a238d96e0b203220a609a9afaba47ea71ba96e08065458 - lockTime: 0 - anchoredBundles: !opret +- pubWitness: !tx + version: 2 + inputs: + - prevOutput: 667bcbc4c236eabade1ca5e6ad933e0cdcbd819e5aa2b76017569660c89a33ba:1 + sigScript: '' + sequence: 0 + witness: [] + outputs: + - value: 0 + scriptPubkey: 6a205739ae67beea0fb5f1099b79574d93f3cdc174f1d2ab586a9027894b03a3b1f7 + - value: 9000 + scriptPubkey: 0014d898ac9ffca24f952d7a82067c44e7d9df24f320 + - value: 99990600 + scriptPubkey: 0014e39cf7957ff2c2a47bb82f39f803c95ee5ce7c9f + lockTime: 0 + anchoredBundle: !opret mpcProof: - pos: 4 - cofactor: 1 + pos: 7 + cofactor: 0 path: - - 09a4be7f9ba65f3e4588a93061fe429c8e257de6cb5194a82c1e4dc5d6ff48fd - - cdc9e7844302abff47462927f67cfc6b350a5023dcceb1798eeea250dcce7052 - - 6ef2b8c22960c49c7be94ea27b5909ac60dbbd69fe057d5475795a35802bf24a + - afc4c59b4be86ec206e496628d0ac99807d0d05e971a6342bd68567a09c11c72 + - e15d5d784efeb99e7df3751f14df023e3b0f502ca7ed51beee4fbe85040ea1ad + - fbe3242db955587745533fb1aba9de4ab6aaae7a6fbb57278ee237f6e0093c27 dbcProof: null bundle: - closeMethod: opretFirst inputMap: - 0: 76fc3455d84d793361211daa2a85be764b9bebc559dd2958833bf6ab153fa9a3 + 0: eb6c87fe9949de2b96f04ba5165471674c98be2cb3d186b532e4ce6e1121c44d knownTransitions: - 76fc3455d84d793361211daa2a85be764b9bebc559dd2958833bf6ab153fa9a3: + eb6c87fe9949de2b96f04ba5165471674c98be2cb3d186b532e4ce6e1121c44d: ffv: 0 - contractId: rgb:P9y8fj2n-Hjyhxbb-FSv9Jb6-xVz3qn$-laXX8N6-hzNhlHQ + contractId: rgb:ZwpqwCEf-uNLgo0v-DHh4YE2-rs6ni1x-$eT2TF$-Qapuav0 nonce: 18446744073709551615 transitionType: 65535 metadata: {} globals: {} inputs: - prevOut: - op: 3fdcbc7e3da71e3ca1c5b6c54aff496fac55cf7aa7fe56975fc37a8733619474 + op: 670a6ac0211fb8d2e0a34bc31e1e18136aecea78b5c7f793d9317f41aa6e6afd ty: 4000 no: 0 assignments: @@ -235,16 +198,11 @@ bundles: type: fungible items: - seal: - chain: bitcoin - data: - method: opretFirst - txid: null - vout: 1 - blinding: 16141698382146724670 + txid: null + vout: 2 + blinding: 7664701288462200009 state: value: 666 - blinding: 7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e - tag: 182bcffc792b3b0b5ea98515b0babbf1650db23f30e508eb8637000d8ad590db lock: null valencies: [] validator: null diff --git a/tests/fixtures/attack_resolver_error.yaml b/tests/fixtures/attack_resolver_error.yaml index 00f696b..1a4a9fa 100644 --- a/tests/fixtures/attack_resolver_error.yaml +++ b/tests/fixtures/attack_resolver_error.yaml @@ -1,19 +1,14 @@ version: v2 transfer: true terminals: - 3bb2645029b3de98be6c3ed5ce3332b8591f59c693146a007b75db5cfdb7c7b8: - chain: bitcoin - data: e1c963ea4a2d4e21f870c713a76d0397a0cc197aece1f53a66ae9febf122bb50 + 343a3efbd95e81201c3cd610801c6b96d90af6d03116185153ff9c8977f99da2: 500be63f6011863ac171fb507f1cd19dfc83c93c8501c80e90bf68e5bb237df7 genesis: ffv: 0 schemaId: rgb:sch:RDYhMTR!9gv8Y2GLv9UNBEK1hcrCmdLDFk9Qd5fnO8k#brave-dinner-banana flags: null - timestamp: 1728925859 + timestamp: 1738319632 issuer: ssi:anonymous - testnet: true - altLayers1: [] - assetTags: - 4000: 603a2b302aac8d1cd7c8adc3acd72f31ce652128f96218fa5b519fd5e9930f6d + chainNet: bitcoinRegtest metadata: {} globals: 2000: @@ -27,49 +22,52 @@ genesis: type: fungible items: - seal: - chain: bitcoin - data: - method: opretFirst - txid: 22f0538e189f32922e55daf6fa0b7120bc01de8520a9a4c80655fdaf70272ac0 - vout: 1 - blinding: 7704601239148887312 + txid: 080aa44f1dc8abcabeccf1cc8623d05074e3bb6eef141e27425004fbfb1f42c4 + vout: 0 + blinding: 5639181920309542414 state: value: 666 - blinding: 7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e - tag: 603a2b302aac8d1cd7c8adc3acd72f31ce652128f96218fa5b519fd5e9930f6d lock: null valencies: [] validator: null extensions: [] bundles: -- pubWitness: - chain: bitcoin - data: !txid - d077ea7e3a55a215893a18e82cb03fda0f50619893e4aee0ba70b014e6d63248 - anchoredBundles: !opret +- pubWitness: !tx + version: 2 + inputs: + - prevOutput: 080aa44f1dc8abcabeccf1cc8623d05074e3bb6eef141e27425004fbfb1f42c4:0 + sigScript: '' + sequence: 0 + witness: [] + outputs: + - value: 0 + scriptPubkey: 6a20a1440d59d96ad7e5f3c8cf0126e3f1638c6fa7d472c8eb9d7e04f99063555bdd + - value: 99999600 + scriptPubkey: 0014cde198c07214906f68af5e5b7c1d3dfc1829002c + lockTime: 0 + anchoredBundle: !opret mpcProof: - pos: 1 - cofactor: 1 + pos: 4 + cofactor: 0 path: - - 0d4042fb3c309aa40bff3159cee3a0ca87c4efc804a5347aa1a363d7244a88f7 - - e56d0e3dbadefb489899917dbc2e1dbf0c49c3ff155e178ef52feab2f351fc7c - - 4edc7f8808488b46c10bedf910818a9afbe2512c1f08a436a7b3db244f22ac85 + - ccfce6b11ea53ba1c9252f51c62f9fea098bda4c5c88e52edf11687a48644995 + - f6b01774f1b4119b7a791fbd1c885a30e9ee10cb995bbb66095ab208504499a8 + - 78a91dec657ed20ff9658fab11c30c31e670225ddcc3d1ec5a79fa0008ac7d35 dbcProof: null bundle: - closeMethod: opretFirst inputMap: - 0: 9b50df314989fe006013a96d2ded4b508e5f32ef2b29e7245abfb3d9a35888e3 + 0: 837b7b9605b21958518c2172471e1b2f78156353809e7e3ea26ed137556e7e79 knownTransitions: - 9b50df314989fe006013a96d2ded4b508e5f32ef2b29e7245abfb3d9a35888e3: + 837b7b9605b21958518c2172471e1b2f78156353809e7e3ea26ed137556e7e79: ffv: 0 - contractId: rgb:JgunSMvZ-VCH4cfz-qW1qNyp-VO2a9f7-UYT3vN1-mjO$Ebg + contractId: rgb:XNSQJkiC-Ty2ykhj-ASznz2O-vNaMisA-ohYh4GO-fwH8BTo nonce: 18446744073709551615 - transitionType: 10000 + transitionType: 65535 metadata: {} globals: {} inputs: - prevOut: - op: fb58c747eec9c44a05ec907ec9d14e0e72572f75db0a3f9aa47f0673702e760e + op: 5cd4902648824f2db29218c04b39f3d8ebcd68c8ac02885887818e7f01fc053a ty: 4000 no: 0 assignments: @@ -77,67 +75,51 @@ bundles: type: fungible items: - seal: - chain: bitcoin - data: - method: opretFirst - txid: null - vout: 0 - blinding: 10251942175724995735 - state: - value: 616 - blinding: 361c123b494b218e332794a2390dc6d5cc7c332f64cf8764b6dfb3e04e56c9fc - tag: 603a2b302aac8d1cd7c8adc3acd72f31ce652128f96218fa5b519fd5e9930f6d - lock: null - - seal: - chain: bitcoin - data: 108b3912eb0b836427f235bafe449f3153c2aae08887b948a3d8529f17b19b95 + txid: null + vout: 1 + blinding: 10973063553836119379 state: - value: 50 - blinding: 48626c4335335cf04b56e9dc4570b7a8b2024b4f19aef719c79eca9e3027b482 - tag: 603a2b302aac8d1cd7c8adc3acd72f31ce652128f96218fa5b519fd5e9930f6d + value: 666 lock: null valencies: [] validator: null witness: null -- pubWitness: - chain: bitcoin - data: !tx - version: 2 - inputs: - - prevOutput: 22f0538e189f32922e55daf6fa0b7120bc01de8520a9a4c80655fdaf70272ac0:1 - sigScript: '' - sequence: 0 - witness: [] - outputs: - - value: 99999600 - scriptPubkey: 00141d66111f9daca8769c3ab2b0fe14354b6198b29c - - value: 0 - scriptPubkey: 6a20a02ab7dd75b9911b540419440ebe8f5be0742f76fd9fdaf5e69ebb30f38d3f11 - lockTime: 0 - anchoredBundles: !opret +- pubWitness: !tx + version: 2 + inputs: + - prevOutput: 2c033a3584f571a3b8146dc0f7f904cb421bda9880307ed38f5b7a28ae183eff:1 + sigScript: '' + sequence: 0 + witness: [] + outputs: + - value: 0 + scriptPubkey: 6a20aabe7e0a73e7a77aa578debd24b23032247c6afaffc74d33d2b35b05e8df97d9 + - value: 99998800 + scriptPubkey: 00140e11c2b98e1e5be4645e903225c9eea1d3564f49 + lockTime: 0 + anchoredBundle: !opret mpcProof: - pos: 1 - cofactor: 1 + pos: 4 + cofactor: 0 path: - - 0ae6caac7df078206a7af28b0a885098f743d49b92cdb3485558b804492a5be5 - - 843d661f6822486889697a7446a6a9bd1e123921c6dafdde687140cf863a9403 - - 040c8d2b550cc8f3bd210535dbf482f91e7fe62989168c1ed87eebf2b4f35be3 + - 497171ec2882c5c32ca5f53b92ff7df0474c505315ab279af5c55053fc4d01bf + - 72b9326cabdb9258164a569ffdd4d516e4e4674df9f731bacb6fbde425baddf8 + - 8f5a3c62452bc6631251bb3b173c59cb32b719a2a92b02bf2ac886512bc9be16 dbcProof: null bundle: - closeMethod: opretFirst inputMap: - 0: fb58c747eec9c44a05ec907ec9d14e0e72572f75db0a3f9aa47f0673702e760e + 0: a8288b02e5d1604eaf260c1301746b53a1f37537ad37f66ee3fccae207bcd06c knownTransitions: - fb58c747eec9c44a05ec907ec9d14e0e72572f75db0a3f9aa47f0673702e760e: + a8288b02e5d1604eaf260c1301746b53a1f37537ad37f66ee3fccae207bcd06c: ffv: 0 - contractId: rgb:JgunSMvZ-VCH4cfz-qW1qNyp-VO2a9f7-UYT3vN1-mjO$Ebg + contractId: rgb:XNSQJkiC-Ty2ykhj-ASznz2O-vNaMisA-ohYh4GO-fwH8BTo nonce: 18446744073709551615 - transitionType: 65535 + transitionType: 10000 metadata: {} globals: {} inputs: - prevOut: - op: 260ba748cbd95421f871fcea5b5a8dca954ed9af5fed4613def3759a33bf11b8 + op: 8c3537cca0d3a89482686352800444781c5baa9c822bb9cbf2995d798c2b10e6 ty: 4000 no: 0 assignments: @@ -145,59 +127,43 @@ bundles: type: fungible items: - seal: - chain: bitcoin - data: - method: opretFirst - txid: null - vout: 0 - blinding: 7687739675014878388 + txid: null + vout: 1 + blinding: 2266984746474877836 state: - value: 666 - blinding: 7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e - tag: 603a2b302aac8d1cd7c8adc3acd72f31ce652128f96218fa5b519fd5e9930f6d + value: 539 + lock: null + - seal: 500be63f6011863ac171fb507f1cd19dfc83c93c8501c80e90bf68e5bb237df7 + state: + value: 77 lock: null valencies: [] validator: null witness: null -- pubWitness: - chain: bitcoin - data: !tx - version: 2 - inputs: - - prevOutput: d077ea7e3a55a215893a18e82cb03fda0f50619893e4aee0ba70b014e6d63248:0 - sigScript: '' - sequence: 0 - witness: [] - outputs: - - value: 99998800 - scriptPubkey: 00146ab6fe162c087a01a717d2b6d4bbef87829cec24 - - value: 0 - scriptPubkey: 6a2088b706bf16e225b5d438f48c8c1abc544e807bb7fb99e6fc8ca460d4de62d1b0 - lockTime: 0 - anchoredBundles: !opret +- pubWitness: !txid 2c033a3584f571a3b8146dc0f7f904cb421bda9880307ed38f5b7a28ae183eff + anchoredBundle: !opret mpcProof: - pos: 1 - cofactor: 1 + pos: 4 + cofactor: 0 path: - - 91246094600e4cae70d42147330754f25ef710118c7bc3aa963b1a8900125b83 - - 58bb69c807310413032dd30a245738b48f1a5cb8645f55b8f089489ae16b0533 - - 500d82630b8bb4a1bcb8973500acae7114dc0d5ef77b748a60b4d93aa9375ca1 + - 8718080820ea5a3556e9b82dc72def8c41115260f6d6a1f4d963d01f3276b87f + - 356553755fea1b394aa1933f9ddfd0cdf28cb069820c4a0873fffe47dbdfe963 + - 8ff5b6b5c8d3e6902c5945956c1a3c8b8d02350df7bebfa55a44278219764a99 dbcProof: null bundle: - closeMethod: opretFirst inputMap: - 0: c04da8609a2a8ddf7e0e9847f4ebd6758b1091bceeda10094b24352c97840ea2 + 0: 8c3537cca0d3a89482686352800444781c5baa9c822bb9cbf2995d798c2b10e6 knownTransitions: - c04da8609a2a8ddf7e0e9847f4ebd6758b1091bceeda10094b24352c97840ea2: + 8c3537cca0d3a89482686352800444781c5baa9c822bb9cbf2995d798c2b10e6: ffv: 0 - contractId: rgb:JgunSMvZ-VCH4cfz-qW1qNyp-VO2a9f7-UYT3vN1-mjO$Ebg + contractId: rgb:XNSQJkiC-Ty2ykhj-ASznz2O-vNaMisA-ohYh4GO-fwH8BTo nonce: 18446744073709551615 transitionType: 10000 metadata: {} globals: {} inputs: - prevOut: - op: 9b50df314989fe006013a96d2ded4b508e5f32ef2b29e7245abfb3d9a35888e3 + op: 837b7b9605b21958518c2172471e1b2f78156353809e7e3ea26ed137556e7e79 ty: 4000 no: 0 assignments: @@ -205,24 +171,15 @@ bundles: type: fungible items: - seal: - chain: bitcoin - data: - method: opretFirst - txid: null - vout: 0 - blinding: 9888072140771099372 + txid: null + vout: 1 + blinding: 13359815499838509364 state: - value: 539 - blinding: ae89403cecbdb782ddba50b592d9590bb664bb3d4dc9f7772f7c6611f4755345 - tag: 603a2b302aac8d1cd7c8adc3acd72f31ce652128f96218fa5b519fd5e9930f6d + value: 616 lock: null - - seal: - chain: bitcoin - data: e1c963ea4a2d4e21f870c713a76d0397a0cc197aece1f53a66ae9febf122bb50 + - seal: 3b5918d65ecbfafea7bd43b5ec1fe99b3272eecb8cfb4ecbc739f16bd9dbb041 state: - value: 77 - blinding: 8792d1fe5c8d6a0b556d43eca6346dc8d0c654d8c64e30294735ac5b2a17b7f8 - tag: 603a2b302aac8d1cd7c8adc3acd72f31ce652128f96218fa5b519fd5e9930f6d + value: 50 lock: null valencies: [] validator: null diff --git a/tests/fixtures/bae5df6d2943dc8c17bc913a3ff2c5572cdf175c35b8933c6655a46bd4e22ced.yaml b/tests/fixtures/bae5df6d2943dc8c17bc913a3ff2c5572cdf175c35b8933c6655a46bd4e22ced.yaml new file mode 100644 index 0000000..105cdc0 --- /dev/null +++ b/tests/fixtures/bae5df6d2943dc8c17bc913a3ff2c5572cdf175c35b8933c6655a46bd4e22ced.yaml @@ -0,0 +1,16 @@ +version: 2 +inputs: +- prevOutput: 6788fec62a2e871cc6b5f250aeadf68b11560719bb986bc97c271b0505211d81:2 + sigScript: '' + sequence: 0 + witness: + - 3044022054effb402ff9c42fdbb9931302eadbb79856026ea34411dbcdf5c2daee5b89dd022039cdcedb467a7d5547f2ad014a0748f8f6d462dad6bbbad300cc54615b9d045701 + - 03491526eb26d3252691b177f57b74c1d026ec1523d79c7ea71ed3804a141103eb +outputs: +- value: 0 + scriptPubkey: 6a20857f9e8bf7e99cfb3154636de0ed27d86a76a6fc62abfbd4c6ee64b9cf9ea16d +- value: 9000 + scriptPubkey: 0014d898ac9ffca24f952d7a82067c44e7d9df24f320 +- value: 99971800 + scriptPubkey: 001466b39e8f780f36084a3811f13b2ee9bb66618871 +lockTime: 0 diff --git a/tests/fixtures/bc_0bc3024ce6404cd7aea387debde687d9e8731228e16b04b4eefda7283069f1c3.yaml b/tests/fixtures/bc_0bc3024ce6404cd7aea387debde687d9e8731228e16b04b4eefda7283069f1c3.yaml deleted file mode 100644 index 4e1fb30..0000000 --- a/tests/fixtures/bc_0bc3024ce6404cd7aea387debde687d9e8731228e16b04b4eefda7283069f1c3.yaml +++ /dev/null @@ -1,16 +0,0 @@ -version: 2 -inputs: -- prevOutput: d84c37b6c6616184c454c815d970505bed9b3a3723a4445dd1289dc708bc80b3:1 - sigScript: '' - sequence: 0 - witness: - - 3044022031154900dd3db440c9d286fc6714ce73a63d3b70131fa61372dc830d63d8feb8022061376e25cc7e8850d0070d982092ecd1e715404b2185428a0950b24a410f98be01 - - 027884e03cdcf5f3ce603ff95bfa16d527d3078c7b48e31695a3d4ef6e552b175d -outputs: -- value: 9000 - scriptPubkey: 0014a39902b742ace887eeef8b91463f30893f777a12 -- value: 99971800 - scriptPubkey: 0014b63cbe65e66aaec213d9e25a2ff8cd4e4f3c47d0 -- value: 0 - scriptPubkey: 6a2036831c40589897909e67d439cba95004d53280635e2ca66b6e53da52551f957c -lockTime: 0 diff --git a/tests/fixtures/bc_3652d9fea802cb051f671455cbd7472e3bce2c440a4e54fa4321107037dfaff0.yaml b/tests/fixtures/bc_3652d9fea802cb051f671455cbd7472e3bce2c440a4e54fa4321107037dfaff0.yaml deleted file mode 100644 index e924c61..0000000 --- a/tests/fixtures/bc_3652d9fea802cb051f671455cbd7472e3bce2c440a4e54fa4321107037dfaff0.yaml +++ /dev/null @@ -1,14 +0,0 @@ -version: 2 -inputs: -- prevOutput: d077ea7e3a55a215893a18e82cb03fda0f50619893e4aee0ba70b014e6d63248:0 - sigScript: '' - sequence: 0 - witness: - - 3045022100980c27acde83d1583762873f8bb8b11ead3eb72831e0bb12b9f17b9445fc63fd0220528bb1fbe5ad8b0e7ab272e4648003f3ab235e24421e97d46adff70d280316c401 - - 02d40f2a8d89f52a92d1b2f1b1047bff2e00f6847dd4243a8adea0253cc3b94591 -outputs: -- value: 99998800 - scriptPubkey: 00146ab6fe162c087a01a717d2b6d4bbef87829cec24 -- value: 0 - scriptPubkey: 6a2088b706bf16e225b5d438f48c8c1abc544e807bb7fb99e6fc8ca460d4de62d1b0 -lockTime: 0 diff --git a/tests/fixtures/bc_a5c3085efe8dfdba0fa0e11d81bf90cdcac27c0af496c4de1a2fd9659948ffce.yaml b/tests/fixtures/bc_a5c3085efe8dfdba0fa0e11d81bf90cdcac27c0af496c4de1a2fd9659948ffce.yaml deleted file mode 100644 index ca5ff5c..0000000 --- a/tests/fixtures/bc_a5c3085efe8dfdba0fa0e11d81bf90cdcac27c0af496c4de1a2fd9659948ffce.yaml +++ /dev/null @@ -1,14 +0,0 @@ -version: 2 -inputs: -- prevOutput: 22f0538e189f32922e55daf6fa0b7120bc01de8520a9a4c80655fdaf70272ac0:1 - sigScript: '' - sequence: 0 - witness: - - 3044022017ded71ced861ea4e548ce9deeb69a556717911a644fb88369d12269cd25281302200cc72396108b905e8235362a953387f2195d51ea0376b0870cbfe90cbada9a9e01 - - 029376e491db9dde1d42ed68100e1bf069cf89a735d9175738f4238f9d617ed834 -outputs: -- value: 99999600 - scriptPubkey: 00141d66111f9daca8769c3ab2b0fe14354b6198b29c -- value: 0 - scriptPubkey: 6a20a02ab7dd75b9911b540419440ebe8f5be0742f76fd9fdaf5e69ebb30f38d3f11 -lockTime: 0 diff --git a/tests/fixtures/bc_c269055b7750a234087c11acd7a408172cb84d8fc6af0ded42d8a8cbea6712e9.yaml b/tests/fixtures/bc_c269055b7750a234087c11acd7a408172cb84d8fc6af0ded42d8a8cbea6712e9.yaml deleted file mode 100644 index 6ad6bc7..0000000 --- a/tests/fixtures/bc_c269055b7750a234087c11acd7a408172cb84d8fc6af0ded42d8a8cbea6712e9.yaml +++ /dev/null @@ -1,16 +0,0 @@ -version: 2 -inputs: -- prevOutput: 39f4d1888d1d994a2649397d34bfcaf8a9f7de2d6369dd1d42e0c61a26b4384b:1 - sigScript: '' - sequence: 0 - witness: - - 3044022040589e75b92bd9a9cb725edbbb06d7fe5ee24432f94f758e36dd929841e3701d02206c83c8d7673ee10c9deef90aaad3b71587484cda6ade3eae51e44f32430cb0db01 - - 023b7da09b05da276d729b004663767db536967bc782d14b3d87baba73f1e7de94 -outputs: -- value: 9000 - scriptPubkey: 0014a39902b742ace887eeef8b91463f30893f777a12 -- value: 99990600 - scriptPubkey: 00147c22e5543af0a3dca1c89ae5ffbf6cadd03a1bb3 -- value: 0 - scriptPubkey: 6a209f6aed701fb9da0762a238d96e0b203220a609a9afaba47ea71ba96e08065458 -lockTime: 0 diff --git a/tests/fixtures/bc_d077ea7e3a55a215893a18e82cb03fda0f50619893e4aee0ba70b014e6d63248.yaml b/tests/fixtures/bc_d077ea7e3a55a215893a18e82cb03fda0f50619893e4aee0ba70b014e6d63248.yaml deleted file mode 100644 index 9d770ae..0000000 --- a/tests/fixtures/bc_d077ea7e3a55a215893a18e82cb03fda0f50619893e4aee0ba70b014e6d63248.yaml +++ /dev/null @@ -1,14 +0,0 @@ -version: 2 -inputs: -- prevOutput: a5c3085efe8dfdba0fa0e11d81bf90cdcac27c0af496c4de1a2fd9659948ffce:0 - sigScript: '' - sequence: 0 - witness: - - 30450221008ed3d3ce756c894485a9bf761add8cd58dfe5a3ee844226b8d09db9760e32a800220678c467e6923976550ce485ebbac7861dcfa2193c18d687c8b25863ad6331f7b01 - - 030508210e85f58443ad57f66f75dacc76ab84fca7879f10a7325eeeef942e3e84 -outputs: -- value: 99999200 - scriptPubkey: 001430d944c2d49db5c315c49e13aab8cad8b9415cac -- value: 0 - scriptPubkey: 6a20669e87f4fe2acf39e58ef94c4a2f81791b7848acac344cd8a2e562f4777acc7f -lockTime: 0 diff --git a/tests/fixtures/bc_d84c37b6c6616184c454c815d970505bed9b3a3723a4445dd1289dc708bc80b3.yaml b/tests/fixtures/bc_d84c37b6c6616184c454c815d970505bed9b3a3723a4445dd1289dc708bc80b3.yaml deleted file mode 100644 index bed65f8..0000000 --- a/tests/fixtures/bc_d84c37b6c6616184c454c815d970505bed9b3a3723a4445dd1289dc708bc80b3.yaml +++ /dev/null @@ -1,16 +0,0 @@ -version: 2 -inputs: -- prevOutput: c269055b7750a234087c11acd7a408172cb84d8fc6af0ded42d8a8cbea6712e9:1 - sigScript: '' - sequence: 0 - witness: - - 3044022073070da9946fab45dbc02010cacc6e3e89c0539e1741c8abadb1e9aaa7831b190220561c8270ce63fe44af34624a0aa93f6c1fa28cec14f39d92c16e205fe6e1778401 - - 020e8dd627ba520d0c209b7859c1e7cbe4d01bd609d0a28dbcd9be2583692786a0 -outputs: -- value: 9000 - scriptPubkey: 0014a39902b742ace887eeef8b91463f30893f777a12 -- value: 99981200 - scriptPubkey: 0014ceb732c6400f984d3258c202811ef439234ff028 -- value: 0 - scriptPubkey: 6a20efce72c00a4dafa508d223854191b9bc534505d7b40841136ea57454bcd8f62e -lockTime: 0 diff --git a/tests/fixtures/consignment_A.yaml b/tests/fixtures/consignment_A.yaml index bbda5fe..ca67e48 100644 --- a/tests/fixtures/consignment_A.yaml +++ b/tests/fixtures/consignment_A.yaml @@ -1,19 +1,14 @@ version: v2 transfer: true terminals: - 3bb2645029b3de98be6c3ed5ce3332b8591f59c693146a007b75db5cfdb7c7b8: - chain: bitcoin - data: e1c963ea4a2d4e21f870c713a76d0397a0cc197aece1f53a66ae9febf122bb50 + 343a3efbd95e81201c3cd610801c6b96d90af6d03116185153ff9c8977f99da2: 500be63f6011863ac171fb507f1cd19dfc83c93c8501c80e90bf68e5bb237df7 genesis: ffv: 0 schemaId: rgb:sch:RDYhMTR!9gv8Y2GLv9UNBEK1hcrCmdLDFk9Qd5fnO8k#brave-dinner-banana flags: null - timestamp: 1728925859 + timestamp: 1738319632 issuer: ssi:anonymous - testnet: true - altLayers1: [] - assetTags: - 4000: 603a2b302aac8d1cd7c8adc3acd72f31ce652128f96218fa5b519fd5e9930f6d + chainNet: bitcoinRegtest metadata: {} globals: 2000: @@ -27,60 +22,52 @@ genesis: type: fungible items: - seal: - chain: bitcoin - data: - method: opretFirst - txid: 22f0538e189f32922e55daf6fa0b7120bc01de8520a9a4c80655fdaf70272ac0 - vout: 1 - blinding: 7704601239148887312 + txid: 080aa44f1dc8abcabeccf1cc8623d05074e3bb6eef141e27425004fbfb1f42c4 + vout: 0 + blinding: 5639181920309542414 state: value: 666 - blinding: 7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e - tag: 603a2b302aac8d1cd7c8adc3acd72f31ce652128f96218fa5b519fd5e9930f6d lock: null valencies: [] validator: null extensions: [] bundles: -- pubWitness: - chain: bitcoin - data: !tx - version: 2 - inputs: - - prevOutput: a5c3085efe8dfdba0fa0e11d81bf90cdcac27c0af496c4de1a2fd9659948ffce:0 - sigScript: '' - sequence: 0 - witness: [] - outputs: - - value: 99999200 - scriptPubkey: 001430d944c2d49db5c315c49e13aab8cad8b9415cac - - value: 0 - scriptPubkey: 6a20669e87f4fe2acf39e58ef94c4a2f81791b7848acac344cd8a2e562f4777acc7f - lockTime: 0 - anchoredBundles: !opret +- pubWitness: !tx + version: 2 + inputs: + - prevOutput: 080aa44f1dc8abcabeccf1cc8623d05074e3bb6eef141e27425004fbfb1f42c4:0 + sigScript: '' + sequence: 0 + witness: [] + outputs: + - value: 0 + scriptPubkey: 6a20a1440d59d96ad7e5f3c8cf0126e3f1638c6fa7d472c8eb9d7e04f99063555bdd + - value: 99999600 + scriptPubkey: 0014cde198c07214906f68af5e5b7c1d3dfc1829002c + lockTime: 0 + anchoredBundle: !opret mpcProof: - pos: 1 - cofactor: 1 + pos: 4 + cofactor: 0 path: - - 0d4042fb3c309aa40bff3159cee3a0ca87c4efc804a5347aa1a363d7244a88f7 - - e56d0e3dbadefb489899917dbc2e1dbf0c49c3ff155e178ef52feab2f351fc7c - - 4edc7f8808488b46c10bedf910818a9afbe2512c1f08a436a7b3db244f22ac85 + - ccfce6b11ea53ba1c9252f51c62f9fea098bda4c5c88e52edf11687a48644995 + - f6b01774f1b4119b7a791fbd1c885a30e9ee10cb995bbb66095ab208504499a8 + - 78a91dec657ed20ff9658fab11c30c31e670225ddcc3d1ec5a79fa0008ac7d35 dbcProof: null bundle: - closeMethod: opretFirst inputMap: - 0: 9b50df314989fe006013a96d2ded4b508e5f32ef2b29e7245abfb3d9a35888e3 + 0: 837b7b9605b21958518c2172471e1b2f78156353809e7e3ea26ed137556e7e79 knownTransitions: - 9b50df314989fe006013a96d2ded4b508e5f32ef2b29e7245abfb3d9a35888e3: + 837b7b9605b21958518c2172471e1b2f78156353809e7e3ea26ed137556e7e79: ffv: 0 - contractId: rgb:JgunSMvZ-VCH4cfz-qW1qNyp-VO2a9f7-UYT3vN1-mjO$Ebg + contractId: rgb:XNSQJkiC-Ty2ykhj-ASznz2O-vNaMisA-ohYh4GO-fwH8BTo nonce: 18446744073709551615 - transitionType: 10000 + transitionType: 65535 metadata: {} globals: {} inputs: - prevOut: - op: fb58c747eec9c44a05ec907ec9d14e0e72572f75db0a3f9aa47f0673702e760e + op: 5cd4902648824f2db29218c04b39f3d8ebcd68c8ac02885887818e7f01fc053a ty: 4000 no: 0 assignments: @@ -88,67 +75,51 @@ bundles: type: fungible items: - seal: - chain: bitcoin - data: - method: opretFirst - txid: null - vout: 0 - blinding: 10251942175724995735 - state: - value: 616 - blinding: 361c123b494b218e332794a2390dc6d5cc7c332f64cf8764b6dfb3e04e56c9fc - tag: 603a2b302aac8d1cd7c8adc3acd72f31ce652128f96218fa5b519fd5e9930f6d - lock: null - - seal: - chain: bitcoin - data: 108b3912eb0b836427f235bafe449f3153c2aae08887b948a3d8529f17b19b95 + txid: null + vout: 1 + blinding: 10973063553836119379 state: - value: 50 - blinding: 48626c4335335cf04b56e9dc4570b7a8b2024b4f19aef719c79eca9e3027b482 - tag: 603a2b302aac8d1cd7c8adc3acd72f31ce652128f96218fa5b519fd5e9930f6d + value: 666 lock: null valencies: [] validator: null witness: null -- pubWitness: - chain: bitcoin - data: !tx - version: 2 - inputs: - - prevOutput: 22f0538e189f32922e55daf6fa0b7120bc01de8520a9a4c80655fdaf70272ac0:1 - sigScript: '' - sequence: 0 - witness: [] - outputs: - - value: 99999600 - scriptPubkey: 00141d66111f9daca8769c3ab2b0fe14354b6198b29c - - value: 0 - scriptPubkey: 6a20a02ab7dd75b9911b540419440ebe8f5be0742f76fd9fdaf5e69ebb30f38d3f11 - lockTime: 0 - anchoredBundles: !opret +- pubWitness: !tx + version: 2 + inputs: + - prevOutput: 2c033a3584f571a3b8146dc0f7f904cb421bda9880307ed38f5b7a28ae183eff:1 + sigScript: '' + sequence: 0 + witness: [] + outputs: + - value: 0 + scriptPubkey: 6a20aabe7e0a73e7a77aa578debd24b23032247c6afaffc74d33d2b35b05e8df97d9 + - value: 99998800 + scriptPubkey: 00140e11c2b98e1e5be4645e903225c9eea1d3564f49 + lockTime: 0 + anchoredBundle: !opret mpcProof: - pos: 1 - cofactor: 1 + pos: 4 + cofactor: 0 path: - - 0ae6caac7df078206a7af28b0a885098f743d49b92cdb3485558b804492a5be5 - - 843d661f6822486889697a7446a6a9bd1e123921c6dafdde687140cf863a9403 - - 040c8d2b550cc8f3bd210535dbf482f91e7fe62989168c1ed87eebf2b4f35be3 + - 497171ec2882c5c32ca5f53b92ff7df0474c505315ab279af5c55053fc4d01bf + - 72b9326cabdb9258164a569ffdd4d516e4e4674df9f731bacb6fbde425baddf8 + - 8f5a3c62452bc6631251bb3b173c59cb32b719a2a92b02bf2ac886512bc9be16 dbcProof: null bundle: - closeMethod: opretFirst inputMap: - 0: fb58c747eec9c44a05ec907ec9d14e0e72572f75db0a3f9aa47f0673702e760e + 0: a8288b02e5d1604eaf260c1301746b53a1f37537ad37f66ee3fccae207bcd06c knownTransitions: - fb58c747eec9c44a05ec907ec9d14e0e72572f75db0a3f9aa47f0673702e760e: + a8288b02e5d1604eaf260c1301746b53a1f37537ad37f66ee3fccae207bcd06c: ffv: 0 - contractId: rgb:JgunSMvZ-VCH4cfz-qW1qNyp-VO2a9f7-UYT3vN1-mjO$Ebg + contractId: rgb:XNSQJkiC-Ty2ykhj-ASznz2O-vNaMisA-ohYh4GO-fwH8BTo nonce: 18446744073709551615 - transitionType: 65535 + transitionType: 10000 metadata: {} globals: {} inputs: - prevOut: - op: 260ba748cbd95421f871fcea5b5a8dca954ed9af5fed4613def3759a33bf11b8 + op: 8c3537cca0d3a89482686352800444781c5baa9c822bb9cbf2995d798c2b10e6 ty: 4000 no: 0 assignments: @@ -156,59 +127,55 @@ bundles: type: fungible items: - seal: - chain: bitcoin - data: - method: opretFirst - txid: null - vout: 0 - blinding: 7687739675014878388 + txid: null + vout: 1 + blinding: 2266984746474877836 state: - value: 666 - blinding: 7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e - tag: 603a2b302aac8d1cd7c8adc3acd72f31ce652128f96218fa5b519fd5e9930f6d + value: 539 + lock: null + - seal: 500be63f6011863ac171fb507f1cd19dfc83c93c8501c80e90bf68e5bb237df7 + state: + value: 77 lock: null valencies: [] validator: null witness: null -- pubWitness: - chain: bitcoin - data: !tx - version: 2 - inputs: - - prevOutput: d077ea7e3a55a215893a18e82cb03fda0f50619893e4aee0ba70b014e6d63248:0 - sigScript: '' - sequence: 0 - witness: [] - outputs: - - value: 99998800 - scriptPubkey: 00146ab6fe162c087a01a717d2b6d4bbef87829cec24 - - value: 0 - scriptPubkey: 6a2088b706bf16e225b5d438f48c8c1abc544e807bb7fb99e6fc8ca460d4de62d1b0 - lockTime: 0 - anchoredBundles: !opret +- pubWitness: !tx + version: 2 + inputs: + - prevOutput: 3bda7cfcd64b4255dc8d86090a49497379bd61a5de108f88e50c9a3cda9fa20b:1 + sigScript: '' + sequence: 0 + witness: [] + outputs: + - value: 0 + scriptPubkey: 6a2004fa0afe61cb15facef532b7656caabb2ea3e879b6d7cfa9354abd173e566669 + - value: 99999200 + scriptPubkey: 00147db3c392013fcbb67ac449267be461ac0e9fbf48 + lockTime: 0 + anchoredBundle: !opret mpcProof: - pos: 1 - cofactor: 1 + pos: 4 + cofactor: 0 path: - - 91246094600e4cae70d42147330754f25ef710118c7bc3aa963b1a8900125b83 - - 58bb69c807310413032dd30a245738b48f1a5cb8645f55b8f089489ae16b0533 - - 500d82630b8bb4a1bcb8973500acae7114dc0d5ef77b748a60b4d93aa9375ca1 + - 8718080820ea5a3556e9b82dc72def8c41115260f6d6a1f4d963d01f3276b87f + - 356553755fea1b394aa1933f9ddfd0cdf28cb069820c4a0873fffe47dbdfe963 + - 8ff5b6b5c8d3e6902c5945956c1a3c8b8d02350df7bebfa55a44278219764a99 dbcProof: null bundle: - closeMethod: opretFirst inputMap: - 0: c04da8609a2a8ddf7e0e9847f4ebd6758b1091bceeda10094b24352c97840ea2 + 0: 8c3537cca0d3a89482686352800444781c5baa9c822bb9cbf2995d798c2b10e6 knownTransitions: - c04da8609a2a8ddf7e0e9847f4ebd6758b1091bceeda10094b24352c97840ea2: + 8c3537cca0d3a89482686352800444781c5baa9c822bb9cbf2995d798c2b10e6: ffv: 0 - contractId: rgb:JgunSMvZ-VCH4cfz-qW1qNyp-VO2a9f7-UYT3vN1-mjO$Ebg + contractId: rgb:XNSQJkiC-Ty2ykhj-ASznz2O-vNaMisA-ohYh4GO-fwH8BTo nonce: 18446744073709551615 transitionType: 10000 metadata: {} globals: {} inputs: - prevOut: - op: 9b50df314989fe006013a96d2ded4b508e5f32ef2b29e7245abfb3d9a35888e3 + op: 837b7b9605b21958518c2172471e1b2f78156353809e7e3ea26ed137556e7e79 ty: 4000 no: 0 assignments: @@ -216,24 +183,15 @@ bundles: type: fungible items: - seal: - chain: bitcoin - data: - method: opretFirst - txid: null - vout: 0 - blinding: 9888072140771099372 + txid: null + vout: 1 + blinding: 13359815499838509364 state: - value: 539 - blinding: ae89403cecbdb782ddba50b592d9590bb664bb3d4dc9f7772f7c6611f4755345 - tag: 603a2b302aac8d1cd7c8adc3acd72f31ce652128f96218fa5b519fd5e9930f6d + value: 616 lock: null - - seal: - chain: bitcoin - data: e1c963ea4a2d4e21f870c713a76d0397a0cc197aece1f53a66ae9febf122bb50 + - seal: 3b5918d65ecbfafea7bd43b5ec1fe99b3272eecb8cfb4ecbc739f16bd9dbb041 state: - value: 77 - blinding: 8792d1fe5c8d6a0b556d43eca6346dc8d0c654d8c64e30294735ac5b2a17b7f8 - tag: 603a2b302aac8d1cd7c8adc3acd72f31ce652128f96218fa5b519fd5e9930f6d + value: 50 lock: null valencies: [] validator: null diff --git a/tests/fixtures/consignment_B.yaml b/tests/fixtures/consignment_B.yaml index bd61796..ff7c74c 100644 --- a/tests/fixtures/consignment_B.yaml +++ b/tests/fixtures/consignment_B.yaml @@ -5,12 +5,9 @@ genesis: ffv: 0 schemaId: rgb:sch:RDYhMTR!9gv8Y2GLv9UNBEK1hcrCmdLDFk9Qd5fnO8k#brave-dinner-banana flags: null - timestamp: 1728926035 + timestamp: 1738319695 issuer: ssi:anonymous - testnet: true - altLayers1: [] - assetTags: - 4000: 182bcffc792b3b0b5ea98515b0babbf1650db23f30e508eb8637000d8ad590db + chainNet: bitcoinRegtest metadata: {} globals: 2000: @@ -24,62 +21,54 @@ genesis: type: fungible items: - seal: - chain: bitcoin - data: - method: opretFirst - txid: 39f4d1888d1d994a2649397d34bfcaf8a9f7de2d6369dd1d42e0c61a26b4384b - vout: 1 - blinding: 7943510731595037200 + txid: 667bcbc4c236eabade1ca5e6ad933e0cdcbd819e5aa2b76017569660c89a33ba + vout: 1 + blinding: 12133577306296987570 state: value: 666 - blinding: 7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e - tag: 182bcffc792b3b0b5ea98515b0babbf1650db23f30e508eb8637000d8ad590db lock: null valencies: [] validator: null extensions: [] bundles: -- pubWitness: - chain: bitcoin - data: !tx - version: 2 - inputs: - - prevOutput: c269055b7750a234087c11acd7a408172cb84d8fc6af0ded42d8a8cbea6712e9:1 - sigScript: '' - sequence: 0 - witness: [] - outputs: - - value: 9000 - scriptPubkey: 0014a39902b742ace887eeef8b91463f30893f777a12 - - value: 99981200 - scriptPubkey: 0014ceb732c6400f984d3258c202811ef439234ff028 - - value: 0 - scriptPubkey: 6a20efce72c00a4dafa508d223854191b9bc534505d7b40841136ea57454bcd8f62e - lockTime: 0 - anchoredBundles: !opret +- pubWitness: !tx + version: 2 + inputs: + - prevOutput: 82e491ecb9b7bb99714ec3a6ca4a896eedefc0460a741907c98338423eeebaf3:2 + sigScript: '' + sequence: 0 + witness: [] + outputs: + - value: 0 + scriptPubkey: 6a20eabdab4d680dfc9d0769bda6e8325f2568a753c7d5eb72ecc96977347a95387c + - value: 9000 + scriptPubkey: 0014d898ac9ffca24f952d7a82067c44e7d9df24f320 + - value: 99981200 + scriptPubkey: 0014c9c7c0c68940434f27cc5b1bb9447dc622e0e644 + lockTime: 0 + anchoredBundle: !opret mpcProof: - pos: 4 - cofactor: 1 + pos: 7 + cofactor: 0 path: - - 59fb64885c9d21d566c630261ebaf61e6fdfb90fd755734580e2853606e04468 - - 972bd31741970dcfdcb1fd6e1e0cb86b43a95cdf9be16e26b20f7efb55b8815a - - 59c4bea42d613b9b4d9190c70713db38fcb1213e1384390305c9f41b105e7ad7 + - 1e4a0190d01755eaf29561aa98c85b527224fc8ebf2eb713049685b5ea5b7688 + - 4731cb7fa145f024c33532c90dbe21b53768b87db50b390783dc83168330b962 + - ac21e99bf11e80e6910f2f238b131e74e8cb8c864b76e3d7c1bbd8e68043a5ec dbcProof: null bundle: - closeMethod: opretFirst inputMap: - 0: 93ff8f77c5f41ebdfb417b9f30a603e2b48a0db75d5a0e520495954e564f62f6 + 0: 5a6756b480ba825bb9964c2e35c311528a08bfbce77e8c18f838a832d44b5cc3 knownTransitions: - 93ff8f77c5f41ebdfb417b9f30a603e2b48a0db75d5a0e520495954e564f62f6: + 5a6756b480ba825bb9964c2e35c311528a08bfbce77e8c18f838a832d44b5cc3: ffv: 0 - contractId: rgb:P9y8fj2n-Hjyhxbb-FSv9Jb6-xVz3qn$-laXX8N6-hzNhlHQ + contractId: rgb:ZwpqwCEf-uNLgo0v-DHh4YE2-rs6ni1x-$eT2TF$-Qapuav0 nonce: 18446744073709551615 transitionType: 10000 metadata: {} globals: {} inputs: - prevOut: - op: 76fc3455d84d793361211daa2a85be764b9bebc559dd2958833bf6ab153fa9a3 + op: eb6c87fe9949de2b96f04ba5165471674c98be2cb3d186b532e4ce6e1121c44d ty: 4000 no: 0 assignments: @@ -87,73 +76,60 @@ bundles: type: fungible items: - seal: - chain: bitcoin - data: - method: opretFirst - txid: null - vout: 0 - blinding: 10355153668244730300 + txid: null + vout: 1 + blinding: 308949839619168014 state: value: 50 - blinding: 6ba480e64c69b4e53fe7c76e5c79bb79e8d1a442ba405e9b568612b0014dc452 - tag: 182bcffc792b3b0b5ea98515b0babbf1650db23f30e508eb8637000d8ad590db lock: null - seal: - chain: bitcoin - data: - method: opretFirst - txid: null - vout: 1 - blinding: 4411272172758969930 + txid: null + vout: 2 + blinding: 1395950772980243693 state: value: 616 - blinding: 12d9fd983214c9993e96b7102204c30495acda3bc43e1fe327f86bce7d30ba2c - tag: 182bcffc792b3b0b5ea98515b0babbf1650db23f30e508eb8637000d8ad590db lock: null valencies: [] validator: null witness: null -- pubWitness: - chain: bitcoin - data: !tx - version: 2 - inputs: - - prevOutput: d84c37b6c6616184c454c815d970505bed9b3a3723a4445dd1289dc708bc80b3:1 - sigScript: '' - sequence: 0 - witness: [] - outputs: - - value: 9000 - scriptPubkey: 0014a39902b742ace887eeef8b91463f30893f777a12 - - value: 99971800 - scriptPubkey: 0014b63cbe65e66aaec213d9e25a2ff8cd4e4f3c47d0 - - value: 0 - scriptPubkey: 6a2036831c40589897909e67d439cba95004d53280635e2ca66b6e53da52551f957c - lockTime: 0 - anchoredBundles: !opret +- pubWitness: !tx + version: 2 + inputs: + - prevOutput: 6788fec62a2e871cc6b5f250aeadf68b11560719bb986bc97c271b0505211d81:2 + sigScript: '' + sequence: 0 + witness: [] + outputs: + - value: 0 + scriptPubkey: 6a20857f9e8bf7e99cfb3154636de0ed27d86a76a6fc62abfbd4c6ee64b9cf9ea16d + - value: 9000 + scriptPubkey: 0014d898ac9ffca24f952d7a82067c44e7d9df24f320 + - value: 99971800 + scriptPubkey: 001466b39e8f780f36084a3811f13b2ee9bb66618871 + lockTime: 0 + anchoredBundle: !opret mpcProof: - pos: 4 - cofactor: 1 + pos: 7 + cofactor: 0 path: - - ade25d6370736e013b7148b4e223030112c4dff704d992e0a8d92073df669c2f - - f478b2c344da010822be93fb7405c56c0b95867ce56582a6c4f647b678fba56e - - 9461109d34187938798bf29433c2b3f11f08ed7f7c8831fcceeab43874f11689 + - 68e62b692e4542c987afdb5d10e81cbf52b8134d9c9cb1d4accb639e65b7e94f + - 2515a5cff2e6caa272781807e8bc7ba5d54a598f214d9b9de8a9f34e4401efe8 + - 285bc7f4f1931d95c293860a81ea07cbc37d3e7b4d0af41e09427068384091c8 dbcProof: null bundle: - closeMethod: opretFirst inputMap: - 0: 295cbd02dbfeddee5c9691cfcc2b5c59b284c8130ad1c9e2cfb867b45dc24dec + 0: 1bcfc0aa5537e4eb887f86b511f105913c9be1bbe522673ba4c7a79976785a49 knownTransitions: - 295cbd02dbfeddee5c9691cfcc2b5c59b284c8130ad1c9e2cfb867b45dc24dec: + 1bcfc0aa5537e4eb887f86b511f105913c9be1bbe522673ba4c7a79976785a49: ffv: 0 - contractId: rgb:P9y8fj2n-Hjyhxbb-FSv9Jb6-xVz3qn$-laXX8N6-hzNhlHQ + contractId: rgb:ZwpqwCEf-uNLgo0v-DHh4YE2-rs6ni1x-$eT2TF$-Qapuav0 nonce: 18446744073709551615 transitionType: 10000 metadata: {} globals: {} inputs: - prevOut: - op: 93ff8f77c5f41ebdfb417b9f30a603e2b48a0db75d5a0e520495954e564f62f6 + op: 5a6756b480ba825bb9964c2e35c311528a08bfbce77e8c18f838a832d44b5cc3 ty: 4000 no: 1 assignments: @@ -161,73 +137,60 @@ bundles: type: fungible items: - seal: - chain: bitcoin - data: - method: opretFirst - txid: null - vout: 0 - blinding: 5517491780835545414 + txid: null + vout: 1 + blinding: 11478527946593826468 state: value: 77 - blinding: ab9ad5d441db401474f2f15c2d7940cec37d8b1c962dc20752256f95fdfd1634 - tag: 182bcffc792b3b0b5ea98515b0babbf1650db23f30e508eb8637000d8ad590db lock: null - seal: - chain: bitcoin - data: - method: opretFirst - txid: null - vout: 1 - blinding: 17151752316201612509 + txid: null + vout: 2 + blinding: 4693334950104603760 state: value: 539 - blinding: 673f27c3f0398984c9a3c5b3f48b82348cde2c05dd58fe1795a55ac54f69e539 - tag: 182bcffc792b3b0b5ea98515b0babbf1650db23f30e508eb8637000d8ad590db lock: null valencies: [] validator: null witness: null -- pubWitness: - chain: bitcoin - data: !tx - version: 2 - inputs: - - prevOutput: 39f4d1888d1d994a2649397d34bfcaf8a9f7de2d6369dd1d42e0c61a26b4384b:1 - sigScript: '' - sequence: 0 - witness: [] - outputs: - - value: 9000 - scriptPubkey: 0014a39902b742ace887eeef8b91463f30893f777a12 - - value: 99990600 - scriptPubkey: 00147c22e5543af0a3dca1c89ae5ffbf6cadd03a1bb3 - - value: 0 - scriptPubkey: 6a209f6aed701fb9da0762a238d96e0b203220a609a9afaba47ea71ba96e08065458 - lockTime: 0 - anchoredBundles: !opret +- pubWitness: !tx + version: 2 + inputs: + - prevOutput: 667bcbc4c236eabade1ca5e6ad933e0cdcbd819e5aa2b76017569660c89a33ba:1 + sigScript: '' + sequence: 0 + witness: [] + outputs: + - value: 0 + scriptPubkey: 6a205739ae67beea0fb5f1099b79574d93f3cdc174f1d2ab586a9027894b03a3b1f7 + - value: 9000 + scriptPubkey: 0014d898ac9ffca24f952d7a82067c44e7d9df24f320 + - value: 99990600 + scriptPubkey: 0014e39cf7957ff2c2a47bb82f39f803c95ee5ce7c9f + lockTime: 0 + anchoredBundle: !opret mpcProof: - pos: 4 - cofactor: 1 + pos: 7 + cofactor: 0 path: - - 09a4be7f9ba65f3e4588a93061fe429c8e257de6cb5194a82c1e4dc5d6ff48fd - - cdc9e7844302abff47462927f67cfc6b350a5023dcceb1798eeea250dcce7052 - - 6ef2b8c22960c49c7be94ea27b5909ac60dbbd69fe057d5475795a35802bf24a + - afc4c59b4be86ec206e496628d0ac99807d0d05e971a6342bd68567a09c11c72 + - e15d5d784efeb99e7df3751f14df023e3b0f502ca7ed51beee4fbe85040ea1ad + - fbe3242db955587745533fb1aba9de4ab6aaae7a6fbb57278ee237f6e0093c27 dbcProof: null bundle: - closeMethod: opretFirst inputMap: - 0: 76fc3455d84d793361211daa2a85be764b9bebc559dd2958833bf6ab153fa9a3 + 0: eb6c87fe9949de2b96f04ba5165471674c98be2cb3d186b532e4ce6e1121c44d knownTransitions: - 76fc3455d84d793361211daa2a85be764b9bebc559dd2958833bf6ab153fa9a3: + eb6c87fe9949de2b96f04ba5165471674c98be2cb3d186b532e4ce6e1121c44d: ffv: 0 - contractId: rgb:P9y8fj2n-Hjyhxbb-FSv9Jb6-xVz3qn$-laXX8N6-hzNhlHQ + contractId: rgb:ZwpqwCEf-uNLgo0v-DHh4YE2-rs6ni1x-$eT2TF$-Qapuav0 nonce: 18446744073709551615 transitionType: 65535 metadata: {} globals: {} inputs: - prevOut: - op: 3fdcbc7e3da71e3ca1c5b6c54aff496fac55cf7aa7fe56975fc37a8733619474 + op: 670a6ac0211fb8d2e0a34bc31e1e18136aecea78b5c7f793d9317f41aa6e6afd ty: 4000 no: 0 assignments: @@ -235,16 +198,11 @@ bundles: type: fungible items: - seal: - chain: bitcoin - data: - method: opretFirst - txid: null - vout: 1 - blinding: 16141698382146724670 + txid: null + vout: 2 + blinding: 7664701288462200009 state: value: 666 - blinding: 7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e - tag: 182bcffc792b3b0b5ea98515b0babbf1650db23f30e508eb8637000d8ad590db lock: null valencies: [] validator: null diff --git a/tests/fixtures/f71c8a732de7148cb01ce34c108a1c982dcfb65f4c3c033f52ff9fb0e4d4de87.yaml b/tests/fixtures/f71c8a732de7148cb01ce34c108a1c982dcfb65f4c3c033f52ff9fb0e4d4de87.yaml new file mode 100644 index 0000000..36c57e2 --- /dev/null +++ b/tests/fixtures/f71c8a732de7148cb01ce34c108a1c982dcfb65f4c3c033f52ff9fb0e4d4de87.yaml @@ -0,0 +1,14 @@ +version: 2 +inputs: +- prevOutput: 2c033a3584f571a3b8146dc0f7f904cb421bda9880307ed38f5b7a28ae183eff:1 + sigScript: '' + sequence: 0 + witness: + - 304402203cd8cf45cdaab6468b8b2ebb4e1d2c87878df48b8cf85ac0fc348b09736f1f3b02203f7f924a24f899983df2e98fca6f96013046eabcd79a819e10d6807be5f00fcb01 + - 025a25971a8cf7bb162e39fed2a2405003a27c472a6f47e2881295095f54ba58e1 +outputs: +- value: 0 + scriptPubkey: 6a20aabe7e0a73e7a77aa578debd24b23032247c6afaffc74d33d2b35b05e8df97d9 +- value: 99998800 + scriptPubkey: 00140e11c2b98e1e5be4645e903225c9eea1d3564f49 +lockTime: 0 diff --git a/tests/issuance.rs b/tests/issuance.rs index 16a7bdf..ab4a6d6 100644 --- a/tests/issuance.rs +++ b/tests/issuance.rs @@ -7,19 +7,14 @@ const MEDIA_FPATH: &str = "tests/fixtures/rgb_logo.jpeg"; #[template] #[rstest] -#[case(DescriptorType::Wpkh, CloseMethod::OpretFirst)] -#[case(DescriptorType::Wpkh, CloseMethod::TapretFirst)] -#[case(DescriptorType::Tr, CloseMethod::OpretFirst)] -#[case(DescriptorType::Tr, CloseMethod::TapretFirst)] -fn descriptor_and_close_method( - #[case] wallet_desc: DescriptorType, - #[case] close_method: CloseMethod, -) { -} +#[case(DescriptorType::Wpkh)] +#[case(DescriptorType::Tr)] +fn descriptor(#[case] wallet_desc: DescriptorType) {} -#[apply(descriptor_and_close_method)] -fn issue_nia(wallet_desc: DescriptorType, close_method: CloseMethod) { - println!("wallet_desc {wallet_desc:?} close_method {close_method:?}"); +#[cfg(not(feature = "altered"))] +#[apply(descriptor)] +fn issue_nia(wallet_desc: DescriptorType) { + println!("wallet_desc {wallet_desc:?}"); initialize(); @@ -41,7 +36,7 @@ fn issue_nia(wallet_desc: DescriptorType, close_method: CloseMethod) { terms_media_fpath, vec![issued_supply], ); - let (contract_id, iface_type_name) = wallet.issue_with_info(asset_info, close_method, vec![]); + let (contract_id, iface_type_name) = wallet.issue_with_info(asset_info, vec![]); let contract = wallet.contract_iface_class::(contract_id); let spec = contract.spec(); @@ -61,13 +56,13 @@ fn issue_nia(wallet_desc: DescriptorType, close_method: CloseMethod) { let allocations = wallet.contract_fungible_allocations(contract_id, &iface_type_name, false); assert_eq!(allocations.len(), 1); let allocation = allocations[0]; - assert_eq!(allocation.seal.method(), close_method); assert_eq!(allocation.state, Amount::from(issued_supply)); } -#[apply(descriptor_and_close_method)] -fn issue_uda(wallet_desc: DescriptorType, close_method: CloseMethod) { - println!("wallet_desc {wallet_desc:?} close_method {close_method:?}"); +#[cfg(not(feature = "altered"))] +#[apply(descriptor)] +fn issue_uda(wallet_desc: DescriptorType) { + println!("wallet_desc {wallet_desc:?}"); initialize(); @@ -114,7 +109,7 @@ fn issue_uda(wallet_desc: DescriptorType, close_method: CloseMethod) { terms_media_fpath, token_data, ); - let (contract_id, iface_type_name) = wallet.issue_with_info(asset_info, close_method, vec![]); + let (contract_id, iface_type_name) = wallet.issue_with_info(asset_info, vec![]); let contract = wallet.contract_iface_class::(contract_id); let spec = contract.spec(); @@ -145,13 +140,13 @@ fn issue_uda(wallet_desc: DescriptorType, close_method: CloseMethod) { let allocations = wallet.contract_data_allocations(contract_id, &iface_type_name); assert_eq!(allocations.len(), 1); let allocation = &allocations[0]; - assert_eq!(allocation.seal.method(), close_method); assert_eq!(allocation.state.to_string(), "000000000100000000000000"); } -#[apply(descriptor_and_close_method)] -fn issue_cfa(wallet_desc: DescriptorType, close_method: CloseMethod) { - println!("wallet_desc {wallet_desc:?} close_method {close_method:?}"); +#[cfg(not(feature = "altered"))] +#[apply(descriptor)] +fn issue_cfa(wallet_desc: DescriptorType) { + println!("wallet_desc {wallet_desc:?}"); initialize(); @@ -171,7 +166,7 @@ fn issue_cfa(wallet_desc: DescriptorType, close_method: CloseMethod) { terms_media_fpath, vec![issued_supply], ); - let (contract_id, iface_type_name) = wallet.issue_with_info(asset_info, close_method, vec![]); + let (contract_id, iface_type_name) = wallet.issue_with_info(asset_info, vec![]); let contract = wallet.contract_iface_class::(contract_id); assert_eq!(contract.name().to_string(), name.to_string()); @@ -193,13 +188,13 @@ fn issue_cfa(wallet_desc: DescriptorType, close_method: CloseMethod) { let allocations = wallet.contract_fungible_allocations(contract_id, &iface_type_name, false); assert_eq!(allocations.len(), 1); let allocation = allocations[0]; - assert_eq!(allocation.seal.method(), close_method); assert_eq!(allocation.state, Amount::from(issued_supply)); } -#[apply(descriptor_and_close_method)] -fn issue_nia_multiple_utxos(wallet_desc: DescriptorType, close_method: CloseMethod) { - println!("wallet_desc {wallet_desc:?} close_method {close_method:?}"); +#[cfg(not(feature = "altered"))] +#[apply(descriptor)] +fn issue_nia_multiple_utxos(wallet_desc: DescriptorType) { + println!("wallet_desc {wallet_desc:?}"); initialize(); @@ -210,8 +205,7 @@ fn issue_nia_multiple_utxos(wallet_desc: DescriptorType, close_method: CloseMeth .map(|_| Some(wallet.get_utxo(None))) .collect(); let asset_info = AssetInfo::default_nia(amounts.clone()); - let (contract_id, iface_type_name) = - wallet.issue_with_info(asset_info, close_method, outpoints.clone()); + let (contract_id, iface_type_name) = wallet.issue_with_info(asset_info, outpoints.clone()); let contract = wallet.contract_iface_class::(contract_id); assert_eq!( @@ -224,17 +218,17 @@ fn issue_nia_multiple_utxos(wallet_desc: DescriptorType, close_method: CloseMeth for (amt, outpoint) in amounts.iter().zip(outpoints.into_iter()) { assert!(allocations.iter().any(|a| a.state == Amount::from(*amt) && a.seal - == XChain::Bitcoin(ExplicitSeal { - method: close_method, + == ExplicitSeal { txid: outpoint.unwrap().txid, vout: outpoint.unwrap().vout - }))) + })) } } -#[apply(descriptor_and_close_method)] -fn issue_cfa_multiple_utxos(wallet_desc: DescriptorType, close_method: CloseMethod) { - println!("wallet_desc {wallet_desc:?} close_method {close_method:?}"); +#[cfg(not(feature = "altered"))] +#[apply(descriptor)] +fn issue_cfa_multiple_utxos(wallet_desc: DescriptorType) { + println!("wallet_desc {wallet_desc:?}"); initialize(); @@ -245,8 +239,7 @@ fn issue_cfa_multiple_utxos(wallet_desc: DescriptorType, close_method: CloseMeth .map(|_| Some(wallet.get_utxo(None))) .collect(); let asset_info = AssetInfo::default_cfa(amounts.clone()); - let (contract_id, iface_type_name) = - wallet.issue_with_info(asset_info, close_method, outpoints.clone()); + let (contract_id, iface_type_name) = wallet.issue_with_info(asset_info, outpoints.clone()); let contract = wallet.contract_iface_class::(contract_id); assert_eq!( @@ -259,10 +252,110 @@ fn issue_cfa_multiple_utxos(wallet_desc: DescriptorType, close_method: CloseMeth for (amt, outpoint) in amounts.iter().zip(outpoints.into_iter()) { assert!(allocations.iter().any(|a| a.state == Amount::from(*amt) && a.seal - == XChain::Bitcoin(ExplicitSeal { - method: close_method, + == ExplicitSeal { txid: outpoint.unwrap().txid, vout: outpoint.unwrap().vout - }))) + })) + } +} + +#[cfg(not(feature = "altered"))] +#[rstest] +#[should_panic( + expected = "Invoice requesting chain-network pair BitcoinRegtest but contract commits to a different one (LiquidTestnet)" +)] +#[case("standard_invoice")] +#[should_panic(expected = "NetworkMismatch")] +#[case("liquid_testnet_invoice")] +#[should_panic(expected = "ContractChainNetMismatch(BitcoinMainnet)")] +#[case("liquid_mainnet_invoice")] +fn issue_on_different_layers(#[case] scenario: &str) { + initialize(); + + let mut wlt_1 = if scenario == "liquid_mainnet_invoice" { + get_mainnet_wallet() + } else { + get_wallet(&DescriptorType::Wpkh) + }; + + let issued_amt = 100; + let amounts = vec![issued_amt]; + let asset_info = AssetInfo::default_nia(amounts.clone()); + let contract_chainnet = if scenario == "liquid_mainnet_invoice" { + ChainNet::LiquidMainnet + } else { + ChainNet::LiquidTestnet + }; + let mut builder = ContractBuilder::with( + Identity::default(), + asset_info.iface(), + asset_info.schema(), + asset_info.issue_impl(), + asset_info.types(), + asset_info.scripts(), + contract_chainnet, + ); + + builder = asset_info.add_global_state(builder); + + let outpoint = if scenario == "liquid_mainnet_invoice" { + Outpoint::from_str("bebcfcb200a17763f6932a6d6fca9448a4b46c5b737cc3810769a7403ef79ce6:0") + .unwrap() + } else { + wlt_1.get_utxo(None) + }; + + builder = builder + .add_fungible_state("assetOwner", get_builder_seal(outpoint), amounts[0]) + .unwrap(); + + let contract = builder.issue_contract().expect("failure issuing contract"); + let resolver = wlt_1.get_resolver(); + wlt_1.import_contract(&contract, resolver); + + let mut wlt_2 = if scenario == "liquid_mainnet_invoice" { + get_mainnet_wallet() + } else { + get_wallet(&DescriptorType::Wpkh) + }; + let contract_id = contract.contract_id(); + let iface_type_name = asset_info.iface_type_name(); + let amt = 60; + let sats = 1000; + + match scenario { + "standard_invoice" => { + wlt_1.send( + &mut wlt_2, + TransferType::Witness, + contract_id, + &iface_type_name, + amt, + sats, + None, + ); + } + "liquid_testnet_invoice" => { + let address = wlt_2.get_address(); + let beneficiary = Beneficiary::WitnessVout(Pay2Vout::new(address.payload)); + let builder = RgbInvoiceBuilder::new(XChainNet::LiquidTestnet(beneficiary)) + .set_contract(contract_id) + .set_interface(iface_type_name) + .set_amount_raw(amt); + let invoice = builder.finish(); + wlt_1.send_to_invoice(&mut wlt_2, invoice, Some(sats), None, None); + } + "liquid_mainnet_invoice" => { + let address = wlt_2.get_address(); + let beneficiary = Beneficiary::WitnessVout(Pay2Vout::new(address.payload)); + let builder = RgbInvoiceBuilder::new(XChainNet::LiquidMainnet(beneficiary)) + .set_contract(contract_id) + .set_interface(iface_type_name) + .set_amount_raw(issued_amt); + let invoice = builder.finish(); + let (_, _, consignment) = wlt_1.pay(invoice, Some(500), Some(100)); + wlt_2.accept_transfer(consignment.clone(), None); + } + _ => unreachable!(), } } diff --git a/tests/start_services.sh b/tests/start_services.sh index ff32e6c..f555909 100755 --- a/tests/start_services.sh +++ b/tests/start_services.sh @@ -1,5 +1,5 @@ #!/bin/bash -set -eu +set -u _die () { echo "ERR: $*" >&2 @@ -46,23 +46,16 @@ _wait_for_esplora() { done } -_stop_esplora() { - # stop an esplora sub service +_stop_esplora_tor() { esplora_service_name="$1" - esplora_sub_service_name="${2:-electrs}" if $COMPOSE ps |grep -q $esplora_service_name; then - for SRV in socat $esplora_sub_service_name; do + for SRV in socat tor; do $COMPOSE exec $esplora_service_name bash -c "sv -w 60 force-stop /etc/service/$SRV" done fi } _stop_services() { - if [ "$PROFILE" == "esplora" ]; then - _stop_esplora esplora_1 - _stop_esplora esplora_2 - _stop_esplora esplora_3 - fi # bring all services down $COMPOSE --profile '*' down -v --remove-orphans } @@ -110,9 +103,9 @@ if [ "$PROFILE" == "esplora" ]; then _wait_for_esplora esplora_1 _wait_for_esplora esplora_2 _wait_for_esplora esplora_3 - _stop_esplora esplora_1 tor - _stop_esplora esplora_2 tor - _stop_esplora esplora_3 tor + _stop_esplora_tor esplora_1 + _stop_esplora_tor esplora_2 + _stop_esplora_tor esplora_3 elif [ "$PROFILE" == "electrum" ]; then _wait_for_bitcoind bitcoind_1 _wait_for_bitcoind bitcoind_2 diff --git a/tests/stress.rs b/tests/stress.rs index e266758..28e7cb4 100644 --- a/tests/stress.rs +++ b/tests/stress.rs @@ -5,6 +5,7 @@ use utils::*; type TT = TransferType; type DT = DescriptorType; +#[cfg(not(feature = "altered"))] #[rstest] // blinded #[case(TT::Blinded, DT::Wpkh, DT::Wpkh)] @@ -47,7 +48,7 @@ fn back_and_forth( let issued_supply = u64::MAX; - let (contract_id, iface_type_name) = wlt_1.issue_nia(issued_supply, wlt_1.close_method(), None); + let (contract_id, iface_type_name) = wlt_1.issue_nia(issued_supply, None); let loops = match std::env::var("LOOPS") { Ok(val) if u16::from_str(&val).is_ok() => u16::from_str(&val).unwrap(), diff --git a/tests/transfers.rs b/tests/transfers.rs index 776b31d..bb7967c 100644 --- a/tests/transfers.rs +++ b/tests/transfers.rs @@ -6,6 +6,7 @@ type TT = TransferType; type DT = DescriptorType; type AS = AssetSchema; +#[cfg(not(feature = "altered"))] #[rstest] // blinded: nia - nia #[case(TT::Blinded, DT::Wpkh, DT::Wpkh, AS::Nia, AS::Nia)] @@ -122,14 +123,14 @@ fn transfer_loop( // wlt_1 issues 2 assets on the same UTXO let utxo = wlt_1.get_utxo(None); let (contract_id_1, iface_type_name_1) = match asset_schema_1 { - AssetSchema::Nia => wlt_1.issue_nia(issued_supply_1, wlt_1.close_method(), Some(&utxo)), - AssetSchema::Uda => wlt_1.issue_uda(wlt_1.close_method(), Some(&utxo)), - AssetSchema::Cfa => wlt_1.issue_cfa(issued_supply_1, wlt_1.close_method(), Some(&utxo)), + AssetSchema::Nia => wlt_1.issue_nia(issued_supply_1, Some(&utxo)), + AssetSchema::Uda => wlt_1.issue_uda(Some(&utxo)), + AssetSchema::Cfa => wlt_1.issue_cfa(issued_supply_1, Some(&utxo)), }; let (contract_id_2, iface_type_name_2) = match asset_schema_2 { - AssetSchema::Nia => wlt_1.issue_nia(issued_supply_2, wlt_1.close_method(), Some(&utxo)), - AssetSchema::Uda => wlt_1.issue_uda(wlt_1.close_method(), Some(&utxo)), - AssetSchema::Cfa => wlt_1.issue_cfa(issued_supply_2, wlt_1.close_method(), Some(&utxo)), + AssetSchema::Nia => wlt_1.issue_nia(issued_supply_2, Some(&utxo)), + AssetSchema::Uda => wlt_1.issue_uda(Some(&utxo)), + AssetSchema::Cfa => wlt_1.issue_cfa(issued_supply_2, Some(&utxo)), }; wlt_1.check_allocations( contract_id_1, @@ -443,6 +444,7 @@ fn transfer_loop( ); } +#[cfg(not(feature = "altered"))] #[test] fn rbf_transfer() { initialize(); @@ -451,19 +453,13 @@ fn rbf_transfer() { let mut wlt_2 = get_wallet(&DescriptorType::Wpkh); let issue_supply = 600; - let (contract_id, iface_type_name) = wlt_1.issue_nia(issue_supply, wlt_1.close_method(), None); + let (contract_id, iface_type_name) = wlt_1.issue_nia(issue_supply, None); stop_mining(); let initial_height = get_height(); let amount = 400; - let invoice = wlt_2.invoice( - contract_id, - &iface_type_name, - amount, - wlt_2.close_method(), - InvoiceType::Witness, - ); + let invoice = wlt_2.invoice(contract_id, &iface_type_name, amount, InvoiceType::Witness); let (consignment, _) = wlt_1.transfer(invoice.clone(), None, Some(500), true, None); wlt_2.accept_transfer(consignment.clone(), None); @@ -508,12 +504,11 @@ fn rbf_transfer() { ); } +#[cfg(feature = "altered")] #[rstest] -#[ignore = "fix needed"] // https://github.com/RGB-WG/rgb-core/issues/283 +#[should_panic(expected = "DoubleSpend")] #[case(TransferType::Blinded)] -#[should_panic( - expected = "the invoice requirements can't be fulfilled using available assets or smart contract state." -)] +#[should_panic(expected = "Composition(InsufficientState)")] #[case(TransferType::Witness)] fn same_transfer_twice_no_update_witnesses(#[case] transfer_type: TransferType) { println!("transfer_type {transfer_type:?}"); @@ -524,16 +519,10 @@ fn same_transfer_twice_no_update_witnesses(#[case] transfer_type: TransferType) let mut wlt_2 = get_wallet(&DescriptorType::Wpkh); let issue_supply = 2000; - let (contract_id, iface_type_name) = wlt_1.issue_nia(issue_supply, wlt_1.close_method(), None); + let (contract_id, iface_type_name) = wlt_1.issue_nia(issue_supply, None); let amount = 100; - let invoice = wlt_2.invoice( - contract_id, - &iface_type_name, - amount, - wlt_2.close_method(), - transfer_type.into(), - ); + let invoice = wlt_2.invoice(contract_id, &iface_type_name, amount, transfer_type.into()); let _ = wlt_1.transfer(invoice.clone(), None, Some(500), false, None); let (consignment, _) = wlt_1.transfer(invoice, None, Some(1000), true, None); @@ -543,17 +532,20 @@ fn same_transfer_twice_no_update_witnesses(#[case] transfer_type: TransferType) // with TransferType::Blinded this shows duplicated allocations wlt_2.debug_logs(contract_id, &iface_type_name, AllocationFilter::WalletAll); - // with TransferType::Blinded this fails because the wallet sees 2 allocations instead of 1 - // comment it in order to see the inflation bug + let allocations = match transfer_type { + TransferType::Blinded => vec![amount, amount], + TransferType::Witness => vec![amount], + }; wlt_2.check_allocations( contract_id, &iface_type_name, AssetSchema::Nia, - vec![amount], + allocations, false, ); - // with TransferType::Blinded this works but should fail + // with TransferType::Blinded the receiver will detect a double spend, to avoid this the + // sendert should call update_witnesses when retrying the same transfer twice wlt_2.send( &mut wlt_1, TransferType::Blinded, @@ -564,6 +556,10 @@ fn same_transfer_twice_no_update_witnesses(#[case] transfer_type: TransferType) None, ); + if transfer_type == TransferType::Blinded { + unreachable!("should have panicked at previous send"); + } + // with TransferType::Blinded this shows 1900+200 as owned, but we issued 2000 wlt_1.debug_logs(contract_id, &iface_type_name, AllocationFilter::WalletAll); @@ -583,8 +579,8 @@ fn same_transfer_twice_no_update_witnesses(#[case] transfer_type: TransferType) wlt_3.debug_logs(contract_id, &iface_type_name, AllocationFilter::WalletAll); } +#[cfg(not(feature = "altered"))] #[rstest] -#[ignore = "fix needed"] // https://github.com/RGB-WG/rgb-core/issues/283 #[case(TransferType::Blinded)] #[case(TransferType::Witness)] fn same_transfer_twice_update_witnesses(#[case] transfer_type: TransferType) { @@ -596,16 +592,10 @@ fn same_transfer_twice_update_witnesses(#[case] transfer_type: TransferType) { let mut wlt_2 = get_wallet(&DescriptorType::Wpkh); let issue_supply = 2000; - let (contract_id, iface_type_name) = wlt_1.issue_nia(issue_supply, wlt_1.close_method(), None); + let (contract_id, iface_type_name) = wlt_1.issue_nia(issue_supply, None); let amount = 100; - let invoice = wlt_2.invoice( - contract_id, - &iface_type_name, - amount, - wlt_2.close_method(), - transfer_type.into(), - ); + let invoice = wlt_2.invoice(contract_id, &iface_type_name, amount, transfer_type.into()); let _ = wlt_1.transfer(invoice.clone(), None, Some(500), false, None); wlt_1.sync_and_update_witnesses(None); @@ -643,8 +633,8 @@ fn same_transfer_twice_update_witnesses(#[case] transfer_type: TransferType) { ); } +#[cfg(not(feature = "altered"))] #[rstest] -#[ignore = "probably not a bug, but still unexpected"] #[case(TT::Blinded)] #[case(TT::Witness)] fn invoice_reuse(#[case] transfer_type: TransferType) { @@ -656,17 +646,10 @@ fn invoice_reuse(#[case] transfer_type: TransferType) { let mut wlt_2 = get_wallet(&DescriptorType::Wpkh); let asset_info = AssetInfo::default_nia(vec![500, 400]); - let (contract_id, iface_type_name) = - wlt_1.issue_with_info(asset_info, wlt_1.close_method(), vec![None, None]); + let (contract_id, iface_type_name) = wlt_1.issue_with_info(asset_info, vec![None, None]); let amount = 300; - let invoice = wlt_2.invoice( - contract_id, - &iface_type_name, - amount, - wlt_2.close_method(), - transfer_type.into(), - ); + let invoice = wlt_2.invoice(contract_id, &iface_type_name, amount, transfer_type.into()); wlt_1.send_to_invoice(&mut wlt_2, invoice.clone(), Some(500), None, None); let (consignment, _) = wlt_1.send_to_invoice(&mut wlt_2, invoice, Some(600), None, None); @@ -689,6 +672,7 @@ fn invoice_reuse(#[case] transfer_type: TransferType) { assert_eq!(consignment.bundles.len(), 1); } +#[cfg(not(feature = "altered"))] #[test] fn accept_0conf() { initialize(); @@ -697,16 +681,10 @@ fn accept_0conf() { let mut wlt_2 = get_wallet(&DescriptorType::Wpkh); let issue_supply = 600; - let (contract_id, iface_type_name) = wlt_1.issue_nia(issue_supply, wlt_1.close_method(), None); + let (contract_id, iface_type_name) = wlt_1.issue_nia(issue_supply, None); let amt = 200; - let invoice = wlt_2.invoice( - contract_id, - &iface_type_name, - amt, - wlt_2.close_method(), - InvoiceType::Witness, - ); + let invoice = wlt_2.invoice(contract_id, &iface_type_name, amt, InvoiceType::Witness); let (consignment, tx) = wlt_1.transfer(invoice.clone(), None, None, true, None); let txid = tx.txid(); @@ -748,32 +726,49 @@ fn accept_0conf() { ); } +#[cfg(not(feature = "altered"))] #[rstest] #[case(false)] -#[ignore = "fix needed"] // https://github.com/RGB-WG/rgb-std/issues/292 #[case(true)] fn ln_transfers(#[case] update_witnesses_before_htlc: bool) { initialize(); let mut wlt_1 = get_wallet(&DescriptorType::Wpkh); - let wlt_2 = get_wallet(&DescriptorType::Wpkh); + let mut wlt_2 = get_wallet(&DescriptorType::Wpkh); let pre_funding_height = get_height(); - let utxo = wlt_1.get_utxo(Some(10_000)); - let (contract_id, iface_type_name) = wlt_1.issue_nia(600, wlt_1.close_method(), Some(&utxo)); + let utxo_1 = wlt_1.get_utxo(Some(10_000)); + let utxo_2 = wlt_1.get_utxo(Some(20_000)); + let amounts = vec![600, 600]; + let outpoints = vec![Some(utxo_1), Some(utxo_2)]; + let asset_info = AssetInfo::default_nia(amounts.clone()); + let (contract_id, iface_type_name) = wlt_1.issue_with_info(asset_info, outpoints); + + struct LNFasciaResolver {} + impl ResolveWitness for LNFasciaResolver { + fn resolve_pub_witness(&self, _: Txid) -> Result { + unreachable!() + } + fn resolve_pub_witness_ord(&self, _: Txid) -> Result { + Ok(WitnessOrd::Ignored) + } + fn check_chain_net(&self, _: ChainNet) -> Result<(), WitnessResolverError> { + unreachable!() + } + } println!("\n1. fake commitment TX (no HTLCs)"); let beneficiaries = vec![ (wlt_2.get_address(), Some(2000)), (wlt_1.get_address(), None), ]; - let (mut psbt, _meta) = wlt_1.construct_psbt(vec![utxo], beneficiaries, None); + let (mut psbt, _meta) = wlt_1.construct_psbt(vec![utxo_1], beneficiaries, None); let coloring_info = ColoringInfo { asset_info_map: HashMap::from([( contract_id, AssetColoringInfo { iface: iface_type_name.clone(), - input_outpoints: vec![utxo], + input_outpoints: vec![utxo_1], output_map: HashMap::from([(0, 100), (1, 500)]), static_blinding: Some(666), }, @@ -782,13 +777,13 @@ fn ln_transfers(#[case] update_witnesses_before_htlc: bool) { nonce: Some(u64::MAX - 1), }; let (fascia, _asset_beneficiaries) = wlt_1.color_psbt(&mut psbt, coloring_info.clone()); - wlt_1.consume_fascia(fascia.clone(), psbt.txid()); + wlt_1.consume_fascia_custom_resolver(fascia.clone(), LNFasciaResolver {}); wlt_1.debug_logs(contract_id, &iface_type_name, AllocationFilter::WalletAll); let htlc_vout = 2; let htlc_rgb_amt = 200; let htlc_btc_amt = 4000; - let htlc_derived_addr = wlt_1.get_derived_address(); + let htlc_derived_addr = wlt_1.get_derived_address(true); // no problem: since there's no htlc for this commitment wlt_1.sync_and_update_witnesses(Some(pre_funding_height)); @@ -799,13 +794,13 @@ fn ln_transfers(#[case] update_witnesses_before_htlc: bool) { (wlt_1.get_address(), None), (htlc_derived_addr.addr, Some(htlc_btc_amt)), ]; - let (mut psbt, _meta) = wlt_1.construct_psbt(vec![utxo], beneficiaries, None); + let (mut psbt, _meta) = wlt_1.construct_psbt(vec![utxo_1], beneficiaries, None); let coloring_info = ColoringInfo { asset_info_map: HashMap::from([( contract_id, AssetColoringInfo { iface: iface_type_name.clone(), - input_outpoints: vec![utxo], + input_outpoints: vec![utxo_1], output_map: HashMap::from([(0, 100), (1, 300), (htlc_vout, htlc_rgb_amt)]), static_blinding: Some(666), }, @@ -814,7 +809,7 @@ fn ln_transfers(#[case] update_witnesses_before_htlc: bool) { nonce: Some(u64::MAX - 1), }; let (fascia, _asset_beneficiaries) = wlt_1.color_psbt(&mut psbt, coloring_info); - wlt_1.consume_fascia(fascia.clone(), psbt.txid()); + wlt_1.consume_fascia_custom_resolver(fascia.clone(), LNFasciaResolver {}); wlt_1.debug_logs(contract_id, &iface_type_name, AllocationFilter::WalletAll); if update_witnesses_before_htlc { @@ -822,9 +817,8 @@ fn ln_transfers(#[case] update_witnesses_before_htlc: bool) { } println!("\n3. fake HTLC TX"); - let witness_id = fascia.witness_id(); - let txid = witness_id.as_reduced_unsafe(); - let input_outpoint = Outpoint::new(*txid, htlc_vout); + let txid = fascia.witness_id(); + let input_outpoint = Outpoint::new(txid, htlc_vout); let beneficiaries = vec![(wlt_1.get_address(), None)]; let (mut psbt, _meta) = wlt_1.construct_psbt_offchain( vec![(input_outpoint, htlc_btc_amt, htlc_derived_addr.terminal)], @@ -845,7 +839,7 @@ fn ln_transfers(#[case] update_witnesses_before_htlc: bool) { nonce: Some(u64::MAX), }; let (fascia, _asset_beneficiaries) = wlt_1.color_psbt(&mut psbt, coloring_info); - wlt_1.consume_fascia(fascia.clone(), psbt.txid()); + wlt_1.consume_fascia_custom_resolver(fascia.clone(), LNFasciaResolver {}); wlt_1.debug_logs(contract_id, &iface_type_name, AllocationFilter::WalletAll); println!("\n4. fake commitment TX (no HTLCs)"); @@ -853,13 +847,13 @@ fn ln_transfers(#[case] update_witnesses_before_htlc: bool) { (wlt_2.get_address(), Some(3000)), (wlt_1.get_address(), None), ]; - let (mut psbt, _meta) = wlt_1.construct_psbt(vec![utxo], beneficiaries, None); + let (mut psbt, _meta) = wlt_1.construct_psbt(vec![utxo_1], beneficiaries, None); let coloring_info = ColoringInfo { asset_info_map: HashMap::from([( contract_id, AssetColoringInfo { iface: iface_type_name.clone(), - input_outpoints: vec![utxo], + input_outpoints: vec![utxo_1], output_map: HashMap::from([(0, 100), (1, 500)]), static_blinding: Some(666), }, @@ -868,7 +862,7 @@ fn ln_transfers(#[case] update_witnesses_before_htlc: bool) { nonce: Some(u64::MAX - 1), }; let (fascia, _asset_beneficiaries) = wlt_1.color_psbt(&mut psbt, coloring_info); - wlt_1.consume_fascia(fascia.clone(), psbt.txid()); + wlt_1.consume_fascia_custom_resolver(fascia.clone(), LNFasciaResolver {}); wlt_1.debug_logs(contract_id, &iface_type_name, AllocationFilter::WalletAll); let mut old_psbt = psbt.clone(); @@ -879,13 +873,13 @@ fn ln_transfers(#[case] update_witnesses_before_htlc: bool) { (wlt_1.get_address(), None), (htlc_derived_addr.addr, Some(htlc_btc_amt)), ]; - let (mut psbt, _meta) = wlt_1.construct_psbt(vec![utxo], beneficiaries, None); + let (mut psbt, _meta) = wlt_1.construct_psbt(vec![utxo_1], beneficiaries, None); let coloring_info = ColoringInfo { asset_info_map: HashMap::from([( contract_id, AssetColoringInfo { iface: iface_type_name.clone(), - input_outpoints: vec![utxo], + input_outpoints: vec![utxo_1], output_map: HashMap::from([(0, 122), (1, 298), (htlc_vout, htlc_rgb_amt)]), static_blinding: Some(666), }, @@ -894,7 +888,7 @@ fn ln_transfers(#[case] update_witnesses_before_htlc: bool) { nonce: Some(u64::MAX - 1), }; let (fascia, _asset_beneficiaries) = wlt_1.color_psbt(&mut psbt, coloring_info.clone()); - wlt_1.consume_fascia(fascia.clone(), psbt.txid()); + wlt_1.consume_fascia_custom_resolver(fascia.clone(), LNFasciaResolver {}); wlt_1.debug_logs(contract_id, &iface_type_name, AllocationFilter::WalletAll); if update_witnesses_before_htlc { @@ -902,9 +896,8 @@ fn ln_transfers(#[case] update_witnesses_before_htlc: bool) { } println!("\n6. fake HTLC TX"); - let witness_id = fascia.witness_id(); - let txid = witness_id.as_reduced_unsafe(); - let input_outpoint = Outpoint::new(*txid, htlc_vout); + let txid = fascia.witness_id(); + let input_outpoint = Outpoint::new(txid, htlc_vout); let beneficiaries = vec![(wlt_1.get_address(), None)]; let (mut psbt, _meta) = wlt_1.construct_psbt_offchain( vec![(input_outpoint, htlc_btc_amt, htlc_derived_addr.terminal)], @@ -925,17 +918,43 @@ fn ln_transfers(#[case] update_witnesses_before_htlc: bool) { nonce: Some(u64::MAX), }; let (fascia, _asset_beneficiaries) = wlt_1.color_psbt(&mut psbt, coloring_info); - wlt_1.consume_fascia(fascia.clone(), psbt.txid()); + wlt_1.consume_fascia_custom_resolver(fascia.clone(), LNFasciaResolver {}); wlt_1.debug_logs(contract_id, &iface_type_name, AllocationFilter::WalletAll); // no problem: since the force-close tx will be updated to mined soon wlt_1.sync_and_update_witnesses(Some(pre_funding_height)); - println!("\n7. broadcast old PSBT"); + println!("\n7. fake commitment TX (1 HTLC) on 2nd channel"); + let beneficiaries = vec![ + (wlt_2.get_address(), Some(2000)), + (wlt_1.get_address(), None), + (htlc_derived_addr.addr, Some(htlc_btc_amt)), + ]; + let (mut psbt, _meta) = wlt_1.construct_psbt(vec![utxo_2], beneficiaries, None); + let coloring_info = ColoringInfo { + asset_info_map: HashMap::from([( + contract_id, + AssetColoringInfo { + iface: iface_type_name.clone(), + input_outpoints: vec![utxo_2], + output_map: HashMap::from([(0, 100), (1, 300), (htlc_vout, htlc_rgb_amt)]), + static_blinding: Some(666), + }, + )]), + static_blinding: Some(666), + nonce: Some(u64::MAX - 1), + }; + let (fascia, _asset_beneficiaries) = wlt_1.color_psbt(&mut psbt, coloring_info); + wlt_1.consume_fascia_custom_resolver(fascia.clone(), LNFasciaResolver {}); + wlt_1.debug_logs(contract_id, &iface_type_name, AllocationFilter::WalletAll); + + println!("\n8. broadcast old PSBT"); let tx = wlt_1.sign_finalize_extract(&mut old_psbt); wlt_1.broadcast_tx(&tx); - wlt_1.mine_tx(&tx.txid(), false); - wlt_1.sync_and_update_witnesses(Some(pre_funding_height)); + let txid = tx.txid(); + wlt_1.mine_tx(&txid, false); + wlt_1.sync(); + wlt_1.update_witnesses(pre_funding_height, vec![txid]); let mut wlt_3 = get_wallet(&DescriptorType::Wpkh); wlt_1.send( &mut wlt_3, @@ -946,42 +965,67 @@ fn ln_transfers(#[case] update_witnesses_before_htlc: bool) { 1000, None, ); + + println!("\n9. fake HTLC TX on 2nd channel"); + let txid = fascia.witness_id(); + let input_outpoint = Outpoint::new(txid, htlc_vout); + let beneficiaries = vec![(wlt_1.get_address(), None)]; + let (mut psbt, _meta) = wlt_1.construct_psbt_offchain( + vec![(input_outpoint, htlc_btc_amt, htlc_derived_addr.terminal)], + beneficiaries, + None, + ); + let coloring_info = ColoringInfo { + asset_info_map: HashMap::from([( + contract_id, + AssetColoringInfo { + iface: iface_type_name.clone(), + input_outpoints: vec![input_outpoint], + output_map: HashMap::from([(0, htlc_rgb_amt)]), + static_blinding: Some(666), + }, + )]), + static_blinding: Some(666), + nonce: Some(u64::MAX), + }; + let (fascia, _asset_beneficiaries) = wlt_1.color_psbt(&mut psbt, coloring_info); + wlt_1.consume_fascia_custom_resolver(fascia.clone(), LNFasciaResolver {}); + wlt_1.debug_logs(contract_id, &iface_type_name, AllocationFilter::WalletAll); } -#[test] -fn mainnet_wlt_receiving_test_asset() { +#[cfg(not(feature = "altered"))] +#[rstest] +#[should_panic( + expected = "Invoice requesting chain-network pair BitcoinMainnet but contract commits to a different one (BitcoinRegtest)" +)] +#[case(false)] +#[should_panic(expected = "ContractChainNetMismatch(BitcoinMainnet)")] +#[case(true)] +fn mainnet_wlt_receiving_test_asset(#[case] custom_invoice: bool) { initialize(); let mut wlt_1 = get_wallet(&DescriptorType::Wpkh); let mut wlt_2 = get_mainnet_wallet(); - let (contract_id, iface_type_name) = wlt_1.issue_nia(700, wlt_1.close_method(), None); + let (contract_id, iface_type_name) = wlt_1.issue_nia(700, None); let utxo = Outpoint::from_str("bebcfcb200a17763f6932a6d6fca9448a4b46c5b737cc3810769a7403ef79ce6:0") .unwrap(); - let invoice = wlt_2.invoice( + let mut invoice = wlt_2.invoice( contract_id, &iface_type_name, 150, - wlt_2.close_method(), InvoiceType::Blinded(Some(utxo)), ); - let (consignment, tx) = wlt_1.transfer(invoice.clone(), None, Some(500), true, None); - wlt_1.mine_tx(&tx.txid(), false); - match consignment.validate(&wlt_2.get_resolver(), wlt_2.testnet()) { - Err((status, _invalid_consignment)) => { - assert_eq!( - status.failures, - vec![Failure::NetworkMismatch(wlt_2.testnet())] - ) - } - _ => panic!("validation must fail"), + if custom_invoice { + invoice.beneficiary = XChainNet::BitcoinRegtest(invoice.beneficiary.into_inner()); } + wlt_1.send_to_invoice(&mut wlt_2, invoice, Some(1000), None, None); } +#[cfg(not(feature = "altered"))] #[test] -#[ignore = "fix needed"] // https://github.com/BP-WG/bp-wallet/issues/70 fn sync_mainnet_wlt() { initialize(); @@ -991,70 +1035,7 @@ fn sync_mainnet_wlt() { wlt_1.sync(); } -#[test] -fn tapret_wlt_receiving_opret() { - initialize(); - - let mut wlt_1 = get_wallet(&DescriptorType::Tr); - let mut wlt_2 = get_wallet(&DescriptorType::Wpkh); - - let (contract_id, iface_type_name) = wlt_1.issue_nia(600, wlt_1.close_method(), None); - - println!("1st transfer"); - wlt_1.send( - &mut wlt_2, - TransferType::Blinded, - contract_id, - &iface_type_name, - 400, - 5000, - None, - ); - - println!("2nd transfer"); - let invoice = wlt_1.invoice( - contract_id, - &iface_type_name, - 100, - CloseMethod::OpretFirst, - InvoiceType::Witness, - ); - wlt_2.send_to_invoice(&mut wlt_1, invoice, None, None, None); - - println!("3rd transfer"); - wlt_1.send( - &mut wlt_2, - TransferType::Blinded, - contract_id, - &iface_type_name, - 290, - 1000, - None, - ); - - println!("4th transfer"); - wlt_2.send( - &mut wlt_1, - TransferType::Blinded, - contract_id, - &iface_type_name, - 560, - 1000, - None, - ); - - println!("5th transfer"); - wlt_1.send( - &mut wlt_2, - TransferType::Blinded, - contract_id, - &iface_type_name, - 570, - 1000, - None, - ); -} - +#[cfg(not(feature = "altered"))] #[test] fn collaborative_transfer() { initialize(); @@ -1066,7 +1047,7 @@ fn collaborative_transfer() { let sats = 30_000; let utxo_0 = wlt_1.get_utxo(Some(sats)); - let (contract_id, iface_type_name) = wlt_1.issue_nia(600, wlt_1.close_method(), Some(&utxo_0)); + let (contract_id, iface_type_name) = wlt_1.issue_nia(600, Some(&utxo_0)); let (_, tx) = wlt_1.send( &mut wlt_2, TransferType::Witness, @@ -1076,8 +1057,8 @@ fn collaborative_transfer() { 18_000, None, ); - let utxo_1 = Outpoint::new(tx.txid(), 1); // change: 11_600 sat - let utxo_2 = Outpoint::new(tx.txid(), 0); // transfered: 18_000 sat + let utxo_1 = Outpoint::new(tx.txid(), 2); // change: 11_600 sat + let utxo_2 = Outpoint::new(tx.txid(), 1); // transfered: 18_000 sat let mut psbt = Psbt::default(); @@ -1153,6 +1134,7 @@ fn collaborative_transfer() { ); } +#[cfg(not(feature = "altered"))] #[test] fn receive_from_unbroadcasted_transfer_to_blinded() { initialize(); @@ -1161,7 +1143,7 @@ fn receive_from_unbroadcasted_transfer_to_blinded() { let mut wlt_2 = get_wallet(&DescriptorType::Wpkh); let mut wlt_3 = get_wallet(&DescriptorType::Wpkh); - let (contract_id, iface_type_name) = wlt_1.issue_nia(600, wlt_1.close_method(), None); + let (contract_id, iface_type_name) = wlt_1.issue_nia(600, None); let utxo = wlt_2.get_utxo(None); mine(false); @@ -1169,42 +1151,41 @@ fn receive_from_unbroadcasted_transfer_to_blinded() { contract_id, &iface_type_name, 100, - wlt_2.close_method(), InvoiceType::Blinded(Some(utxo)), ); // create transfer but do not broadcast its TX let (consignment, tx) = wlt_1.transfer(invoice.clone(), None, Some(500), false, None); - let txid = tx.txid(); + let witness_id = tx.txid(); struct OffchainResolver<'a, 'cons, const TRANSFER: bool> { - witness_id: XWitnessId, + witness_id: Txid, consignment: &'cons IndexedConsignment<'cons, TRANSFER>, fallback: &'a AnyResolver, } impl ResolveWitness for OffchainResolver<'_, '_, TRANSFER> { - fn resolve_pub_witness( - &self, - witness_id: XWitnessId, - ) -> Result { + fn resolve_pub_witness(&self, witness_id: Txid) -> Result { self.consignment .pub_witness(witness_id) - .and_then(|p| p.map_ref(|pw| pw.tx().cloned()).transpose()) + .and_then(|p| p.tx().cloned()) .ok_or(WitnessResolverError::Unknown(witness_id)) .or_else(|_| self.fallback.resolve_pub_witness(witness_id)) } fn resolve_pub_witness_ord( &self, - witness_id: XWitnessId, + witness_id: Txid, ) -> Result { if witness_id != self.witness_id { return self.fallback.resolve_pub_witness_ord(witness_id); } Ok(WitnessOrd::Tentative) } + fn check_chain_net(&self, _: ChainNet) -> Result<(), WitnessResolverError> { + Ok(()) + } } let resolver = OffchainResolver { - witness_id: XChain::Bitcoin(txid), + witness_id, consignment: &IndexedConsignment::new(&consignment), fallback: &wlt_2.get_resolver(), }; @@ -1213,18 +1194,12 @@ fn receive_from_unbroadcasted_transfer_to_blinded() { // blinded UTXO has not been broadcasted wlt_2.accept_transfer_custom_resolver(consignment.clone(), None, &resolver); - let invoice = wlt_3.invoice( - contract_id, - &iface_type_name, - 50, - wlt_2.close_method(), - InvoiceType::Witness, - ); + let invoice = wlt_3.invoice(contract_id, &iface_type_name, 50, InvoiceType::Witness); let (consignment, tx) = wlt_2.transfer(invoice, Some(2000), None, true, None); wlt_2.mine_tx(&tx.txid(), false); // consignment validation fails because it notices an unbroadcasted TX in the history - let res = consignment.validate(&wlt_3.get_resolver(), wlt_3.testnet()); + let res = consignment.validate(&wlt_3.get_resolver(), wlt_3.chain_net()); assert!(res.is_err()); let validation_status = match res { Ok(validated_consignment) => validated_consignment.validation_status().clone(), @@ -1237,6 +1212,7 @@ fn receive_from_unbroadcasted_transfer_to_blinded() { )); } +#[cfg(not(feature = "altered"))] #[test] fn check_fungible_history() { initialize(); @@ -1246,7 +1222,7 @@ fn check_fungible_history() { let issue_supply = 600; - let (contract_id, iface_type_name) = wlt_1.issue_nia(issue_supply, wlt_1.close_method(), None); + let (contract_id, iface_type_name) = wlt_1.issue_nia(issue_supply, None); wlt_1.debug_contracts(); wlt_1.debug_history(contract_id, &iface_type_name, false); @@ -1292,6 +1268,7 @@ fn check_fungible_history() { ); } +#[cfg(not(feature = "altered"))] #[test] fn send_to_oneself() { initialize(); @@ -1300,17 +1277,11 @@ fn send_to_oneself() { let issue_supply = 600; - let (contract_id, iface_type_name) = wlt.issue_nia(issue_supply, wlt.close_method(), None); + let (contract_id, iface_type_name) = wlt.issue_nia(issue_supply, None); let amt = 200; - let invoice = wlt.invoice( - contract_id, - &iface_type_name, - amt, - wlt.close_method(), - InvoiceType::Witness, - ); + let invoice = wlt.invoice(contract_id, &iface_type_name, amt, InvoiceType::Witness); let (consignment, tx) = wlt.transfer(invoice.clone(), None, None, true, None); wlt.mine_tx(&tx.txid(), false); @@ -1336,64 +1307,65 @@ fn send_to_oneself() { ); } -#[rstest] -#[ignore = "fix needed"] // https://github.com/RGB-WG/rgb-std/issues/284 -#[case(CloseMethod::OpretFirst, CloseMethod::OpretFirst)] -#[case(CloseMethod::TapretFirst, CloseMethod::TapretFirst)] -#[ignore = "fix needed"] // https://github.com/RGB-WG/rgb-std/issues/284 -#[case(CloseMethod::OpretFirst, CloseMethod::TapretFirst)] -#[ignore = "fix needed"] // https://github.com/RGB-WG/rgb-std/issues/284 -#[case(CloseMethod::TapretFirst, CloseMethod::OpretFirst)] -fn blank_tapret_opret(#[case] close_method_0: CloseMethod, #[case] close_method_1: CloseMethod) { - println!("close_method_0 {close_method_0:?} close_method_1 {close_method_1:?}"); - +#[cfg(not(feature = "altered"))] +#[test] +fn tapret_opret_same_utxo() { initialize(); let mut wlt_1 = get_wallet(&DescriptorType::Tr); - let mut wlt_2 = get_wallet(&DescriptorType::Tr); + let mut wlt_2 = get_wallet(&DescriptorType::Wpkh); + let mut wlt_3 = get_wallet(&DescriptorType::Wpkh); - let utxo = wlt_1.get_utxo(None); + let (contract_id_1, iface_type_name_1) = wlt_1.issue_nia(600, None); + let (contract_id_2, iface_type_name_2) = wlt_2.issue_nia(800, None); - let amt_0 = 200; - let (contract_id_0, iface_type_name_0) = wlt_1.issue_nia(amt_0, close_method_0, Some(&utxo)); + let utxo = wlt_3.get_utxo(None); + mine(false); - // asset to be moved in blank - let amt_1 = 100; - let (contract_id_1, iface_type_name_1) = wlt_1.issue_nia(amt_1, close_method_1, Some(&utxo)); + let invoice = wlt_3.invoice( + contract_id_1, + &iface_type_name_1, + 100, + InvoiceType::Blinded(Some(utxo)), + ); + wlt_1.send_to_invoice(&mut wlt_3, invoice, Some(1000), None, None); - wlt_1.send( + let invoice = wlt_3.invoice( + contract_id_2, + &iface_type_name_2, + 550, + InvoiceType::Blinded(Some(utxo)), + ); + wlt_2.send_to_invoice(&mut wlt_3, invoice, Some(1000), None, None); + + wlt_3.send( &mut wlt_2, TransferType::Blinded, - contract_id_0, - &iface_type_name_0, - amt_0, + contract_id_1, + &iface_type_name_1, + 70, 1000, None, ); - // send opret, blank opret: pay fails with Composition(Stock("the spent UTXOs contain too many seals which can't fit the state transition input limit.")) - // send opret, blank tapret: pay fails with Composition(Stock("the spent UTXOs contain too many seals which can't fit the state transition input limit.")) - // send tapret, blank opret: pay fails with Composition(Construction(NoInputs)) - wlt_1.send( - &mut wlt_2, + wlt_3.send( + &mut wlt_1, TransferType::Blinded, - contract_id_1, - &iface_type_name_1, - amt_1, + contract_id_2, + &iface_type_name_2, + 20, 1000, None, ); } +#[cfg(not(feature = "altered"))] #[rstest] #[case(HistoryType::Linear, ReorgType::ChangeOrder)] -#[ignore = "fix needed"] #[case(HistoryType::Linear, ReorgType::Revert)] #[case(HistoryType::Branching, ReorgType::ChangeOrder)] -#[ignore = "fix needed"] #[case(HistoryType::Branching, ReorgType::Revert)] #[case(HistoryType::Merging, ReorgType::ChangeOrder)] -#[ignore = "fix needed"] #[case(HistoryType::Merging, ReorgType::Revert)] #[serial] fn reorg_history(#[case] history_type: HistoryType, #[case] reorg_type: ReorgType) { @@ -1406,12 +1378,10 @@ fn reorg_history(#[case] history_type: HistoryType, #[case] reorg_type: ReorgTyp let mut wlt_2 = get_wallet_custom(&DescriptorType::Wpkh, INSTANCE_2); let (contract_id, iface_type_name) = match history_type { - HistoryType::Linear | HistoryType::Branching => { - wlt_1.issue_nia(600, wlt_1.close_method(), None) - } + HistoryType::Linear | HistoryType::Branching => wlt_1.issue_nia(600, None), HistoryType::Merging => { let asset_info = AssetInfo::default_nia(vec![400, 200]); - wlt_1.issue_with_info(asset_info, wlt_1.close_method(), vec![None, None]) + wlt_1.issue_with_info(asset_info, vec![None, None]) } }; @@ -1429,7 +1399,6 @@ fn reorg_history(#[case] history_type: HistoryType, #[case] reorg_type: ReorgTyp contract_id, &iface_type_name, amt_0, - CloseMethod::OpretFirst, InvoiceType::Blinded(Some(utxo_wlt_2_1)), ); let (_, tx_0) = wlt_1.send_to_invoice(&mut wlt_2, invoice, Some(1000), None, None); @@ -1439,7 +1408,6 @@ fn reorg_history(#[case] history_type: HistoryType, #[case] reorg_type: ReorgTyp contract_id, &iface_type_name, amt_1, - CloseMethod::OpretFirst, InvoiceType::Blinded(Some(utxo_wlt_1_1)), ); let (_, tx_1) = wlt_2.send_to_invoice(&mut wlt_1, invoice, Some(1000), None, None); @@ -1449,7 +1417,6 @@ fn reorg_history(#[case] history_type: HistoryType, #[case] reorg_type: ReorgTyp contract_id, &iface_type_name, amt_2, - CloseMethod::OpretFirst, InvoiceType::Blinded(Some(utxo_wlt_2_2)), ); let (_, tx_2) = wlt_1.send_to_invoice(&mut wlt_2, invoice, Some(1000), None, None); @@ -1462,7 +1429,6 @@ fn reorg_history(#[case] history_type: HistoryType, #[case] reorg_type: ReorgTyp contract_id, &iface_type_name, amt_0, - CloseMethod::OpretFirst, InvoiceType::Blinded(Some(utxo_wlt_2_1)), ); let (_, tx_0) = wlt_1.send_to_invoice(&mut wlt_2, invoice, Some(1000), None, None); @@ -1472,7 +1438,6 @@ fn reorg_history(#[case] history_type: HistoryType, #[case] reorg_type: ReorgTyp contract_id, &iface_type_name, amt_1, - CloseMethod::OpretFirst, InvoiceType::Blinded(Some(utxo_wlt_1_1)), ); let (_, tx_1) = wlt_2.send_to_invoice(&mut wlt_1, invoice, Some(1000), None, None); @@ -1482,7 +1447,6 @@ fn reorg_history(#[case] history_type: HistoryType, #[case] reorg_type: ReorgTyp contract_id, &iface_type_name, amt_2, - CloseMethod::OpretFirst, InvoiceType::Blinded(Some(utxo_wlt_1_2)), ); let (_, tx_2) = wlt_2.send_to_invoice(&mut wlt_1, invoice, Some(1000), None, None); @@ -1495,7 +1459,6 @@ fn reorg_history(#[case] history_type: HistoryType, #[case] reorg_type: ReorgTyp contract_id, &iface_type_name, amt_0, - CloseMethod::OpretFirst, InvoiceType::Blinded(Some(utxo_wlt_2_1)), ); let (_, tx_0) = wlt_1.send_to_invoice(&mut wlt_2, invoice, None, None, None); @@ -1505,7 +1468,6 @@ fn reorg_history(#[case] history_type: HistoryType, #[case] reorg_type: ReorgTyp contract_id, &iface_type_name, amt_1, - CloseMethod::OpretFirst, InvoiceType::Blinded(Some(utxo_wlt_2_2)), ); let (_, tx_1) = wlt_1.send_to_invoice(&mut wlt_2, invoice, None, None, None); @@ -1515,7 +1477,6 @@ fn reorg_history(#[case] history_type: HistoryType, #[case] reorg_type: ReorgTyp contract_id, &iface_type_name, amt_2, - CloseMethod::OpretFirst, InvoiceType::Blinded(Some(utxo_wlt_1_1)), ); let (_, tx_2) = wlt_2.send_to_invoice(&mut wlt_1, invoice, None, None, None); @@ -1624,7 +1585,7 @@ fn reorg_history(#[case] history_type: HistoryType, #[case] reorg_type: ReorgTyp wlt_1.switch_to_instance(INSTANCE_3); wlt_2.switch_to_instance(INSTANCE_3); let wlt_1_alloc_1 = 400; - let wlt_2_alloc_1 = 200; + let _wlt_2_alloc_1 = 200; wlt_1.check_allocations( contract_id, &iface_type_name, @@ -1632,11 +1593,14 @@ fn reorg_history(#[case] history_type: HistoryType, #[case] reorg_type: ReorgTyp vec![wlt_1_alloc_1], false, ); + // this checks 0 allocations instead of vec![_wlt_2_alloc_1] + // because funds are burnt in this case + // to avoid this sender & acceptor should check mining depth of history when merging wlt_2.check_allocations( contract_id, &iface_type_name, AssetSchema::Nia, - vec![wlt_2_alloc_1], + vec![], false, ); } @@ -1644,6 +1608,7 @@ fn reorg_history(#[case] history_type: HistoryType, #[case] reorg_type: ReorgTyp mine_custom(false, INSTANCE_3, 3); connect_reorg_nodes(); + mine_custom(false, INSTANCE_2, 3); wlt_1.switch_to_instance(INSTANCE_2); wlt_2.switch_to_instance(INSTANCE_2); @@ -1791,10 +1756,198 @@ fn reorg_history(#[case] history_type: HistoryType, #[case] reorg_type: ReorgTyp } } +#[cfg(not(feature = "altered"))] +#[rstest] +#[case(HistoryType::Linear)] +#[case(HistoryType::Branching)] +#[case(HistoryType::Merging)] +#[serial] +fn reorg_revert_multiple(#[case] history_type: HistoryType) { + println!("history_type {history_type:?}"); + + initialize(); + connect_reorg_nodes(); + + let mut wlt_1 = get_wallet_custom(&DescriptorType::Wpkh, INSTANCE_2); + let mut wlt_2 = get_wallet_custom(&DescriptorType::Wpkh, INSTANCE_2); + + let (contract_id, iface_type_name) = match history_type { + HistoryType::Linear | HistoryType::Branching => wlt_1.issue_nia(600, None), + HistoryType::Merging => { + let asset_info = AssetInfo::default_nia(vec![400, 200]); + wlt_1.issue_with_info(asset_info, vec![None, None]) + } + }; + + let utxo_wlt_1_1 = wlt_1.get_utxo(None); + let utxo_wlt_1_2 = wlt_1.get_utxo(None); + let utxo_wlt_2_1 = wlt_2.get_utxo(None); + let utxo_wlt_2_2 = wlt_2.get_utxo(None); + mine_custom(false, INSTANCE_2, 6); + disconnect_reorg_nodes(); + + let txs = match history_type { + HistoryType::Linear => { + let amt_0 = 590; + let invoice = wlt_2.invoice( + contract_id, + &iface_type_name, + amt_0, + InvoiceType::Blinded(Some(utxo_wlt_2_1)), + ); + let (_, tx_0) = wlt_1.send_to_invoice(&mut wlt_2, invoice, Some(1000), None, None); + + let amt_1 = 100; + let invoice = wlt_1.invoice( + contract_id, + &iface_type_name, + amt_1, + InvoiceType::Blinded(Some(utxo_wlt_1_1)), + ); + let (_, tx_1) = wlt_2.send_to_invoice(&mut wlt_1, invoice, Some(1000), None, None); + + let amt_2 = 80; + let invoice = wlt_2.invoice( + contract_id, + &iface_type_name, + amt_2, + InvoiceType::Blinded(Some(utxo_wlt_2_2)), + ); + let (_, tx_2) = wlt_1.send_to_invoice(&mut wlt_2, invoice, Some(1000), None, None); + + vec![tx_0, tx_1, tx_2] + } + HistoryType::Branching => { + let amt_0 = 600; + let invoice = wlt_2.invoice( + contract_id, + &iface_type_name, + amt_0, + InvoiceType::Blinded(Some(utxo_wlt_2_1)), + ); + let (_, tx_0) = wlt_1.send_to_invoice(&mut wlt_2, invoice, Some(1000), None, None); + + let amt_1 = 200; + let invoice = wlt_1.invoice( + contract_id, + &iface_type_name, + amt_1, + InvoiceType::Blinded(Some(utxo_wlt_1_1)), + ); + let (_, tx_1) = wlt_2.send_to_invoice(&mut wlt_1, invoice, Some(1000), None, None); + + let amt_2 = amt_0 - amt_1 - 1; + let invoice = wlt_1.invoice( + contract_id, + &iface_type_name, + amt_2, + InvoiceType::Blinded(Some(utxo_wlt_1_2)), + ); + let (_, tx_2) = wlt_2.send_to_invoice(&mut wlt_1, invoice, Some(1000), None, None); + + vec![tx_0, tx_1, tx_2] + } + HistoryType::Merging => { + let amt_0 = 400; + let invoice = wlt_2.invoice( + contract_id, + &iface_type_name, + amt_0, + InvoiceType::Blinded(Some(utxo_wlt_2_1)), + ); + let (_, tx_0) = wlt_1.send_to_invoice(&mut wlt_2, invoice, None, None, None); + + let amt_1 = 200; + let invoice = wlt_2.invoice( + contract_id, + &iface_type_name, + amt_1, + InvoiceType::Blinded(Some(utxo_wlt_2_2)), + ); + let (_, tx_1) = wlt_1.send_to_invoice(&mut wlt_2, invoice, None, None, None); + + let amt_2 = amt_0 + amt_1 - 1; + let invoice = wlt_1.invoice( + contract_id, + &iface_type_name, + amt_2, + InvoiceType::Blinded(Some(utxo_wlt_1_1)), + ); + let (_, tx_2) = wlt_2.send_to_invoice(&mut wlt_1, invoice, None, None, None); + + vec![tx_0, tx_1, tx_2] + } + }; + + broadcast_tx_and_mine(&txs[1], INSTANCE_3); + wlt_1.switch_to_instance(INSTANCE_3); + wlt_2.switch_to_instance(INSTANCE_3); + let (wlt_1_allocs, wlt_2_allocs) = match history_type { + HistoryType::Linear | HistoryType::Branching => (vec![600], vec![]), + HistoryType::Merging => (vec![400], vec![200]), + }; + wlt_1.check_allocations( + contract_id, + &iface_type_name, + AssetSchema::Nia, + wlt_1_allocs, + false, + ); + wlt_2.check_allocations( + contract_id, + &iface_type_name, + AssetSchema::Nia, + wlt_2_allocs, + false, + ); + broadcast_tx_and_mine(&txs[2], INSTANCE_3); + wlt_1.sync_and_update_witnesses(None); + wlt_2.sync_and_update_witnesses(None); + let (wlt_1_allocs, wlt_2_allocs) = match history_type { + HistoryType::Linear | HistoryType::Branching => (vec![600], vec![]), + HistoryType::Merging => (vec![400], vec![]), // funds are burnt + }; + wlt_1.check_allocations( + contract_id, + &iface_type_name, + AssetSchema::Nia, + wlt_1_allocs, + false, + ); + wlt_2.check_allocations( + contract_id, + &iface_type_name, + AssetSchema::Nia, + wlt_2_allocs, + false, + ); + broadcast_tx_and_mine(&txs[0], INSTANCE_3); + wlt_1.sync_and_update_witnesses(None); + wlt_2.sync_and_update_witnesses(None); + let (wlt_1_allocs, wlt_2_allocs) = match history_type { + HistoryType::Linear => (vec![10, 20], vec![490, 80]), + HistoryType::Branching => (vec![200, 399], vec![1]), + HistoryType::Merging => (vec![599], vec![1]), + }; + wlt_1.check_allocations( + contract_id, + &iface_type_name, + AssetSchema::Nia, + wlt_1_allocs, + false, + ); + wlt_2.check_allocations( + contract_id, + &iface_type_name, + AssetSchema::Nia, + wlt_2_allocs, + false, + ); +} + +#[cfg(not(feature = "altered"))] #[rstest] -#[ignore = "fix needed"] #[case(false)] -#[ignore = "fix needed"] #[case(true)] #[serial] fn revert_genesis(#[case] with_transfers: bool) { @@ -1809,8 +1962,7 @@ fn revert_genesis(#[case] with_transfers: bool) { let issued_supply = 600; let utxo = wlt.get_utxo(None); - let (contract_id, iface_type_name) = - wlt.issue_nia(issued_supply, wlt.close_method(), Some(&utxo)); + let (contract_id, iface_type_name) = wlt.issue_nia(issued_supply, Some(&utxo)); wlt.check_allocations( contract_id, &iface_type_name, @@ -1847,7 +1999,6 @@ fn revert_genesis(#[case] with_transfers: bool) { wlt.switch_to_instance(INSTANCE_3); assert_eq!(wlt.get_witness_ord(&utxo.txid), WitnessOrd::Archived); - // this should remove the utxo that is now archived but it doesn't wlt.sync(); let utxos = wlt.utxos(); assert!(utxos.is_empty()); diff --git a/tests/utils/helpers.rs b/tests/utils/helpers.rs index 56e6136..bd31d6a 100644 --- a/tests/utils/helpers.rs +++ b/tests/utils/helpers.rs @@ -28,7 +28,7 @@ enum Filter<'w> { } impl AssignmentsFilter for Filter<'_> { - fn should_include(&self, outpoint: impl Into, id: Option) -> bool { + fn should_include(&self, outpoint: impl Into, id: Option) -> bool { match self { Filter::Wallet(wallet) => wallet .wallet() @@ -43,11 +43,7 @@ impl AssignmentsFilter for Filter<'_> { } } impl Filter<'_> { - fn comment(&self, outpoint: XOutpoint) -> &'static str { - let outpoint = outpoint - .into_bp() - .into_bitcoin() - .expect("liquid is not yet supported"); + fn comment(&self, outpoint: Outpoint) -> &'static str { match self { Filter::Wallet(rgb) if rgb.wallet().is_unspent(outpoint) => "", Filter::WalletAll(rgb) | Filter::WalletTentative(rgb) @@ -90,7 +86,7 @@ pub enum ReorgType { Revert, } -#[derive(Debug, Copy, Clone)] +#[derive(Debug, Copy, Clone, PartialEq)] pub enum TransferType { Blinded, Witness, @@ -246,27 +242,27 @@ impl AssetInfo { } } - fn iface_type_name(&self) -> TypeName { + pub fn iface_type_name(&self) -> TypeName { self.asset_schema().iface_type_name() } - fn schema(&self) -> Schema { + pub fn schema(&self) -> Schema { self.asset_schema().schema() } - fn issue_impl(&self) -> IfaceImpl { + pub fn issue_impl(&self) -> IfaceImpl { self.asset_schema().issue_impl() } - fn scripts(&self) -> Scripts { + pub fn scripts(&self) -> Scripts { self.asset_schema().scripts() } - fn types(&self) -> TypeSystem { + pub fn types(&self) -> TypeSystem { self.asset_schema().types() } - fn iface(&self) -> Iface { + pub fn iface(&self) -> Iface { self.asset_schema().iface() } @@ -371,7 +367,7 @@ impl AssetInfo { } } - fn add_global_state(&self, mut builder: ContractBuilder) -> ContractBuilder { + pub fn add_global_state(&self, mut builder: ContractBuilder) -> ContractBuilder { match self { Self::Nia { spec, @@ -427,38 +423,16 @@ impl AssetInfo { } } - fn add_asset_owner( + pub fn add_asset_owner( &self, mut builder: ContractBuilder, - close_method: CloseMethod, outpoints: Vec, ) -> ContractBuilder { - fn get_genesis_seal( - close_method: CloseMethod, - outpoint: Outpoint, - ) -> BuilderSeal> { - let blind_seal = match close_method { - CloseMethod::TapretFirst => { - BlindSeal::tapret_first_rand(outpoint.txid, outpoint.vout) - } - CloseMethod::OpretFirst => { - BlindSeal::opret_first_rand(outpoint.txid, outpoint.vout) - } - }; - let genesis_seal = GenesisSeal::from(blind_seal); - let seal: XChain> = XChain::with(Layer1::Bitcoin, genesis_seal); - BuilderSeal::from(seal) - } - match self { Self::Nia { issue_amounts, .. } | Self::Cfa { issue_amounts, .. } => { for (amt, outpoint) in issue_amounts.iter().zip(outpoints.iter().cycle()) { builder = builder - .add_fungible_state( - "assetOwner", - get_genesis_seal(close_method, *outpoint), - *amt, - ) + .add_fungible_state("assetOwner", get_builder_seal(*outpoint), *amt) .unwrap(); } builder @@ -467,11 +441,7 @@ impl AssetInfo { let fraction = OwnedFraction::from(1); let allocation = Allocation::with(token_data.index, fraction); builder - .add_data( - "assetOwner", - get_genesis_seal(close_method, outpoints[0]), - allocation, - ) + .add_data("assetOwner", get_builder_seal(outpoints[0]), allocation) .unwrap() } } @@ -512,6 +482,11 @@ impl Report { } } +pub fn get_builder_seal(outpoint: Outpoint) -> BuilderSeal> { + let blind_seal = BlindSeal::new_random(outpoint.txid, outpoint.vout); + BuilderSeal::from(blind_seal) +} + fn _get_wallet( descriptor_type: &DescriptorType, network: Network, @@ -578,10 +553,7 @@ fn _get_wallet( instance, }; - // TODO: remove if once found solution for esplora 'Too many requests' error - if network.is_testnet() { - wallet.sync(); - } + wallet.sync(); wallet } @@ -711,6 +683,16 @@ impl TestWallet { self.wallet.wallet().network() } + pub fn chain_net(&self) -> ChainNet { + match self.network() { + Network::Mainnet => ChainNet::BitcoinMainnet, + Network::Regtest => ChainNet::BitcoinRegtest, + Network::Signet => ChainNet::BitcoinSignet, + Network::Testnet3 => ChainNet::BitcoinTestnet3, + Network::Testnet4 => ChainNet::BitcoinTestnet4, + } + } + pub fn testnet(&self) -> bool { self.network().is_testnet() } @@ -719,16 +701,24 @@ impl TestWallet { RgbKeychain::for_method(self.close_method()) } - pub fn get_derived_address(&self) -> DerivedAddr { + fn get_next_index(&mut self, keychain: impl Into, shift: bool) -> NormalIndex { + self.wallet + .wallet_mut() + .next_derivation_index(keychain, shift) + } + + pub fn get_derived_address(&mut self, shift: bool) -> DerivedAddr { + let keychain = self.keychain(); + let index = self.get_next_index(keychain, shift); self.wallet .wallet() - .addresses(self.keychain()) - .next() - .expect("no addresses left") + .addresses(keychain) + .nth(index.index() as usize) + .expect("address iterator always can produce address") } - pub fn get_address(&self) -> Address { - self.get_derived_address().addr + pub fn get_address(&mut self) -> Address { + self.get_derived_address(true).addr } pub fn get_utxo(&mut self, sats: Option) -> Outpoint { @@ -757,7 +747,7 @@ impl TestWallet { pub fn sync_and_update_witnesses(&mut self, after_height: Option) { self.sync(); - self.update_witnesses(after_height.unwrap_or(1)); + self.update_witnesses(after_height.unwrap_or(1), vec![]); } pub fn switch_to_instance(&mut self, instance: u8) { @@ -782,9 +772,7 @@ impl TestWallet { } pub fn get_witness_ord(&self, txid: &Txid) -> WitnessOrd { - self.get_resolver() - .resolve_pub_witness_ord(XWitnessId::Bitcoin(*txid)) - .unwrap() + self.get_resolver().resolve_pub_witness_ord(*txid).unwrap() } pub fn get_tx_height(&self, txid: &Txid) -> Option { @@ -798,13 +786,13 @@ impl TestWallet { let indexer = self.get_indexer(); self.wallet .wallet_mut() - .update(&indexer) + .sync_from_scratch(&indexer) .into_result() .unwrap(); } pub fn close_method(&self) -> CloseMethod { - self.wallet.wallet().seal_close_method() + self.wallet.wallet().close_method() } pub fn mine_tx(&self, txid: &Txid, resume: bool) { @@ -821,10 +809,16 @@ impl TestWallet { } } + pub fn import_contract(&mut self, contract: &ValidContract, resolver: impl ResolveWitness) { + self.wallet + .stock_mut() + .import_contract(contract.clone(), resolver) + .unwrap(); + } + pub fn issue_with_info( &mut self, asset_info: AssetInfo, - close_method: CloseMethod, outpoints: Vec>, ) -> (ContractId, TypeName) { let outpoints = if outpoints.is_empty() { @@ -843,18 +837,16 @@ impl TestWallet { asset_info.issue_impl(), asset_info.types(), asset_info.scripts(), + self.chain_net(), ); builder = asset_info.add_global_state(builder); - builder = asset_info.add_asset_owner(builder, close_method, outpoints); + builder = asset_info.add_asset_owner(builder, outpoints); let contract = builder.issue_contract().expect("failure issuing contract"); let resolver = self.get_resolver(); - self.wallet - .stock_mut() - .import_contract(contract.clone(), resolver) - .unwrap(); + self.import_contract(&contract, resolver); (contract.contract_id(), asset_info.iface_type_name()) } @@ -862,30 +854,24 @@ impl TestWallet { pub fn issue_nia( &mut self, issued_supply: u64, - close_method: CloseMethod, outpoint: Option<&Outpoint>, ) -> (ContractId, TypeName) { let asset_info = AssetInfo::default_nia(vec![issued_supply]); - self.issue_with_info(asset_info, close_method, vec![outpoint.copied()]) + self.issue_with_info(asset_info, vec![outpoint.copied()]) } - pub fn issue_uda( - &mut self, - close_method: CloseMethod, - outpoint: Option<&Outpoint>, - ) -> (ContractId, TypeName) { + pub fn issue_uda(&mut self, outpoint: Option<&Outpoint>) -> (ContractId, TypeName) { let asset_info = AssetInfo::default_uda(); - self.issue_with_info(asset_info, close_method, vec![outpoint.copied()]) + self.issue_with_info(asset_info, vec![outpoint.copied()]) } pub fn issue_cfa( &mut self, issued_supply: u64, - close_method: CloseMethod, outpoint: Option<&Outpoint>, ) -> (ContractId, TypeName) { let asset_info = AssetInfo::default_cfa(vec![issued_supply]); - self.issue_with_info(asset_info, close_method, vec![outpoint.copied()]) + self.issue_with_info(asset_info, vec![outpoint.copied()]) } pub fn invoice( @@ -893,7 +879,6 @@ impl TestWallet { contract_id: ContractId, iface_type_name: &TypeName, amount: u64, - close_method: CloseMethod, invoice_type: InvoiceType, ) -> RgbInvoice { let network = self.wallet.wallet().network(); @@ -904,20 +889,13 @@ impl TestWallet { } else { self.get_utxo(None) }; - let seal = XChain::Bitcoin(GraphSeal::new_random( - close_method, - outpoint.txid, - outpoint.vout, - )); + let seal = GraphSeal::new_random(outpoint.txid, outpoint.vout); self.wallet.stock_mut().store_secret_seal(seal).unwrap(); - Beneficiary::BlindedSeal(*seal.to_secret_seal().as_reduced_unsafe()) + Beneficiary::BlindedSeal(seal.to_secret_seal()) } InvoiceType::Witness => { let address = self.get_address(); - Beneficiary::WitnessVout(Pay2Vout { - address: address.payload, - method: close_method, - }) + Beneficiary::WitnessVout(Pay2Vout::new(address.payload)) } }; @@ -948,6 +926,18 @@ impl TestWallet { psbt.extract().unwrap() } + pub fn pay( + &mut self, + invoice: RgbInvoice, + sats: Option, + fee: Option, + ) -> (Psbt, PsbtMeta, Transfer) { + let fee = Sats::from_sats(fee.unwrap_or(DEFAULT_FEE_ABS)); + let sats = Sats::from_sats(sats.unwrap_or(2000)); + let params = TransferParams::with(fee, sats); + self.wallet.pay(&invoice, params).unwrap() + } + pub fn transfer( &mut self, invoice: RgbInvoice, @@ -958,11 +948,8 @@ impl TestWallet { ) -> (Transfer, Tx) { self.sync(); - let fee = Sats::from_sats(fee.unwrap_or(DEFAULT_FEE_ABS)); - let sats = Sats::from_sats(sats.unwrap_or(2000)); - let params = TransferParams::with(fee, sats); let pay_start = Instant::now(); - let (mut psbt, _psbt_meta, consignment) = self.wallet.pay(&invoice, params).unwrap(); + let (mut psbt, _psbt_meta, consignment) = self.pay(invoice, sats, fee); let pay_duration = pay_start.elapsed(); if let Some(report) = report { report.write_duration(pay_duration); @@ -1009,7 +996,7 @@ impl TestWallet { pub fn accept_transfer(&mut self, consignment: Transfer, report: Option<&Report>) { let mut resolver = self.get_resolver(); - resolver.add_terminals(&consignment); + resolver.add_consignment_txes(&consignment); self.accept_transfer_custom_resolver(consignment, report, &resolver); } @@ -1022,7 +1009,7 @@ impl TestWallet { self.sync(); let validate_start = Instant::now(); let validated_consignment = consignment - .validate(&resolver, self.testnet()) + .validate(&resolver, self.chain_net()) .map_err(|(status, _)| status) .unwrap(); let validate_duration = validate_start.elapsed(); @@ -1273,13 +1260,7 @@ impl TestWallet { sats: u64, report: Option<&Report>, ) -> (Transfer, Tx) { - let invoice = recv_wlt.invoice( - contract_id, - iface_type_name, - amount, - recv_wlt.close_method(), - transfer_type.into(), - ); + let invoice = recv_wlt.invoice(contract_id, iface_type_name, amount, transfer_type.into()); self.send_to_invoice(recv_wlt, invoice, Some(sats), None, report) } @@ -1318,9 +1299,6 @@ impl TestWallet { actual_fungible_allocations.sort(); expected_fungible_allocations.sort(); assert_eq!(actual_fungible_allocations, expected_fungible_allocations); - assert!(allocations - .iter() - .all(|a| a.seal.method() == self.close_method())); } AssetSchema::Uda => { let allocations = self.contract_data_allocations(contract_id, iface_type_name); @@ -1354,9 +1332,7 @@ impl TestWallet { .into_iter() .find(|co| { co.direction == direction - && co - .witness - .map_or(true, |w| Some(w.id.as_reduced_unsafe()) == txid) + && co.witness.map_or(true, |w| Some(w.id) == txid.copied()) }) .unwrap(); assert!(matches!(operation.state, AllocatedState::Amount(amt) if amt.value() == amount)); @@ -1409,10 +1385,8 @@ impl TestWallet { } let (change_vout, change_terminal) = if remaining_value > Sats::from(546u64) { - let change_index = self - .wallet - .wallet_mut() - .next_derivation_index(tx_params.change_keychain, tx_params.change_shift); + let change_index = + self.get_next_index(tx_params.change_keychain, tx_params.change_shift); let change_terminal = Terminal::new(tx_params.change_keychain, change_index); let change_vout = psbt .construct_change_expect( @@ -1503,6 +1477,7 @@ impl TestWallet { coloring_info: ColoringInfo, ) -> (Fascia, AssetBeneficiariesMap) { let asset_beneficiaries = self.color_psbt_init(psbt, coloring_info); + psbt.set_rgb_close_method(CloseMethod::OpretFirst); psbt.complete_construction(); let fascia = psbt.rgb_commit().unwrap(); (fascia, asset_beneficiaries) @@ -1522,8 +1497,7 @@ impl TestWallet { .inputs .iter() .map(|txin| txin.prev_output) - .map(|outpoint| XOutpoint::from(XChain::Bitcoin(outpoint))) - .collect::>(); + .collect::>(); let mut all_transitions: HashMap = HashMap::new(); let mut asset_beneficiaries: AssetBeneficiariesMap = bmap![]; @@ -1548,17 +1522,17 @@ impl TestWallet { prev_outputs .iter() // only retrieve assignments for owned prevouts using coloring_info - .filter(|xop| { + .filter(|op| { coloring_info.asset_info_map[&contract_id] .input_outpoints - .contains(xop.as_reduced_unsafe()) + .contains(op) }) .copied(), ) .unwrap() { for (opout, state) in opout_state_map { - if let PersistedState::Amount(amt, _, _) = &state { + if let PersistedState::Amount(amt) = &state { asset_available_amt += amt.value(); } asset_transition_builder = @@ -1577,22 +1551,15 @@ impl TestWallet { panic!("invalid vout in output_map, does not exist in the given PSBT"); } let graph_seal = if let Some(blinding) = asset_coloring_info.static_blinding { - GraphSeal::with_blinded_vout(CloseMethod::OpretFirst, vout, blinding) + GraphSeal::with_blinded_vout(vout, blinding) } else { - GraphSeal::new_random_vout(CloseMethod::OpretFirst, vout) + GraphSeal::new_random_vout(vout) }; - let seal = BuilderSeal::Revealed(XChain::with(Layer1::Bitcoin, graph_seal)); + let seal = BuilderSeal::Revealed(graph_seal); beneficiaries.push(seal); - let blinding_factor = if let Some(blinding) = asset_coloring_info.static_blinding { - let mut blinding_32_bytes: [u8; 32] = [0; 32]; - blinding_32_bytes[0..8].copy_from_slice(&blinding.to_le_bytes()); - BlindingFactor::try_from(blinding_32_bytes).unwrap() - } else { - BlindingFactor::random() - }; asset_transition_builder = asset_transition_builder - .add_fungible_state_raw(assignment_id, seal, amount, blinding_factor) + .add_fungible_state_raw(assignment_id, seal, amount) .unwrap(); } if sending_amt > asset_available_amt { @@ -1643,55 +1610,60 @@ impl TestWallet { .unwrap(); } } - psbt.push_rgb_transition(transition, CloseMethod::OpretFirst) - .unwrap(); + psbt.push_rgb_transition(transition).unwrap(); } asset_beneficiaries } - pub fn consume_fascia(&mut self, fascia: Fascia, witness_txid: Txid) { + pub fn consume_fascia(&mut self, fascia: Fascia, witness_id: Txid) { struct FasciaResolver { - witness_id: XWitnessId, + witness_id: Txid, } impl ResolveWitness for FasciaResolver { - fn resolve_pub_witness( - &self, - _: XWitnessId, - ) -> Result { + fn resolve_pub_witness(&self, _: Txid) -> Result { unreachable!() } fn resolve_pub_witness_ord( &self, - witness_id: XWitnessId, + witness_id: Txid, ) -> Result { assert_eq!(witness_id, self.witness_id); Ok(WitnessOrd::Tentative) } + fn check_chain_net(&self, _: ChainNet) -> Result<(), WitnessResolverError> { + unreachable!() + } } - let resolver = FasciaResolver { - witness_id: XChain::Bitcoin(witness_txid), - }; + let resolver = FasciaResolver { witness_id }; + self.consume_fascia_custom_resolver(fascia, resolver); + } + + pub fn consume_fascia_custom_resolver( + &mut self, + fascia: Fascia, + resolver: impl ResolveWitness, + ) { self.wallet .stock_mut() .consume_fascia(fascia, resolver) .unwrap(); } - pub fn update_witnesses(&mut self, after_height: u32) { + pub fn update_witnesses(&mut self, after_height: u32, force_witnesses: Vec) { let resolver = self.get_resolver(); self.wallet .stock_mut() - .update_witnesses(resolver, after_height) + .update_witnesses(resolver, after_height, force_witnesses) .unwrap(); } pub fn create_consignments( &self, asset_beneficiaries: AssetBeneficiariesMap, - witness_txid: Txid, + witness_id: Txid, ) -> Vec { let mut transfers = vec![]; let stock = self.wallet.stock(); @@ -1700,14 +1672,19 @@ impl TestWallet { for beneficiary in beneficiaries { match beneficiary { BuilderSeal::Revealed(seal) => { - let explicit_seal = XChain::Bitcoin(ExplicitSeal::new( - seal.method(), - Outpoint::new(witness_txid, seal.as_reduced_unsafe().vout), - )); - transfers.push(stock.transfer(contract_id, [explicit_seal], None).unwrap()); + let explicit_seal = ExplicitSeal::new(Outpoint::new(witness_id, seal.vout)); + transfers.push( + stock + .transfer(contract_id, [explicit_seal], None, Some(witness_id)) + .unwrap(), + ); } BuilderSeal::Concealed(seal) => { - transfers.push(stock.transfer(contract_id, vec![], Some(seal)).unwrap()); + transfers.push( + stock + .transfer(contract_id, vec![], Some(seal), Some(witness_id)) + .unwrap(), + ); } } } diff --git a/tests/utils/mod.rs b/tests/utils/mod.rs index d36a9e3..c152de4 100644 --- a/tests/utils/mod.rs +++ b/tests/utils/mod.rs @@ -49,8 +49,8 @@ pub use bp::{ }; pub use bpstd::{ h, signers::TestnetSigner, Address, DerivationPath, DerivationSeg, DerivedAddr, Descriptor, - HardenedIndex, Keychain, Network, Terminal, XkeyOrigin, Xpriv, XprivAccount, Xpub, XpubAccount, - XpubDerivable, XpubFp, + HardenedIndex, IdxBase, Keychain, Network, NormalIndex, Terminal, XkeyOrigin, Xpriv, + XprivAccount, Xpub, XpubAccount, XpubDerivable, XpubFp, }; pub use bpwallet::{ fs::FsTextStore, indexers::esplora::Client as EsploraClient, AnyIndexer, Indexer as BpIndexer, @@ -68,9 +68,14 @@ pub use once_cell::sync::Lazy; pub use psbt::{ Beneficiary as PsbtBeneficiary, Payment, Prevout, Psbt, PsbtConstructor, PsbtMeta, PsbtVer, }; +#[cfg(not(feature = "altered"))] pub use psrgbt::{RgbExt, RgbInExt, RgbPsbt, TxParams}; +#[cfg(feature = "altered")] +pub use psrgbt_altered::{RgbExt, RgbInExt, RgbPsbt, TxParams}; pub use rand::RngCore; +#[cfg(not(feature = "altered"))] pub use rgb::{ + containers::ValidContract, info::ContractInfo, interface::{AllocatedState, AssignmentsFilter, ContractOp, OpDirection}, invoice::Pay2Vout, @@ -78,9 +83,23 @@ pub use rgb::{ resolvers::AnyResolver, stl::ContractTerms, validation::{Failure, ResolveWitness, Scripts, Validity, WitnessResolverError}, - vm::{WitnessOrd, WitnessPos, XWitnessTx}, - BlindingFactor, DescriptorRgb, GenesisSeal, GraphSeal, Identity, OpId, RgbDescr, RgbKeychain, - RgbWallet, TapretKey, TransferParams, Transition, WalletProvider, XOutpoint, XWitnessId, + vm::{WitnessOrd, WitnessPos}, + DescriptorRgb, GenesisSeal, GraphSeal, Identity, OpId, RgbDescr, RgbKeychain, RgbWallet, + TapretKey, TransferParams, Transition, WalletProvider, +}; +#[cfg(feature = "altered")] +pub use rgb_altered::{ + containers::ValidContract, + info::ContractInfo, + interface::{AllocatedState, AssignmentsFilter, ContractOp, OpDirection}, + invoice::Pay2Vout, + persistence::{MemContract, MemContractState, Stock}, + resolvers::AnyResolver, + stl::ContractTerms, + validation::{Failure, ResolveWitness, Scripts, Validity, WitnessResolverError}, + vm::{WitnessOrd, WitnessPos}, + DescriptorRgb, GenesisSeal, GraphSeal, Identity, OpId, RgbDescr, RgbKeychain, RgbWallet, + TapretKey, TransferParams, Transition, WalletProvider, }; pub use rgbstd::{ containers::{ @@ -97,8 +116,8 @@ pub use rgbstd::{ stl::{ AssetSpec, Attachment, Details, MediaType, Name, ProofOfReserves, RicardianContract, Ticker, }, - Allocation, Amount, ContractId, GlobalStateType, KnownState, Layer1, Operation, - OutputAssignment, OwnedFraction, Precision, Schema, TokenIndex, TxoSeal, XChain, + Allocation, Amount, ChainNet, ContractId, GlobalStateType, KnownState, Layer1, Operation, + OutputAssignment, OwnedFraction, Precision, Schema, TokenIndex, TxoSeal, }; pub use rstest::rstest; pub use schemata::{CollectibleFungibleAsset, NonInflatableAsset, UniqueDigitalAsset}; diff --git a/tests/validation.rs b/tests/validation.rs index 6049d92..1b70afa 100644 --- a/tests/validation.rs +++ b/tests/validation.rs @@ -13,18 +13,15 @@ enum MockResolvePubWitnessOrd { } struct MockResolver { - pub_witnesses: HashMap, - pub_witness_ords: HashMap, + pub_witnesses: HashMap, + pub_witness_ords: HashMap, } impl ResolveWitness for MockResolver { - fn resolve_pub_witness( - &self, - witness_id: XWitnessId, - ) -> Result { + fn resolve_pub_witness(&self, witness_id: Txid) -> Result { if let Some(res) = self.pub_witnesses.get(&witness_id) { match res { - MockResolvePubWitness::Success(tx) => Ok(XChain::Bitcoin(tx.clone())), + MockResolvePubWitness::Success(tx) => Ok(tx.clone()), MockResolvePubWitness::Error(err) => Err(err.clone()), } } else { @@ -34,7 +31,7 @@ impl ResolveWitness for MockResolver { fn resolve_pub_witness_ord( &self, - witness_id: XWitnessId, + witness_id: Txid, ) -> Result { if let Some(res) = self.pub_witness_ords.get(&witness_id) { match res { @@ -45,6 +42,10 @@ impl ResolveWitness for MockResolver { Err(WitnessResolverError::Unknown(witness_id)) } } + + fn check_chain_net(&self, _: ChainNet) -> Result<(), WitnessResolverError> { + Ok(()) + } } #[derive(Debug, EnumIter, Copy, Clone, PartialEq)] @@ -64,11 +65,11 @@ impl Scenario { match self { Self::A => { let (tx_1, witness_id_1) = - get_tx("bc:a5c3085efe8dfdba0fa0e11d81bf90cdcac27c0af496c4de1a2fd9659948ffce"); + get_tx("3bda7cfcd64b4255dc8d86090a49497379bd61a5de108f88e50c9a3cda9fa20b"); let (tx_2, witness_id_2) = - get_tx("bc:d077ea7e3a55a215893a18e82cb03fda0f50619893e4aee0ba70b014e6d63248"); + get_tx("2c033a3584f571a3b8146dc0f7f904cb421bda9880307ed38f5b7a28ae183eff"); let (tx_3, witness_id_3) = - get_tx("bc:3652d9fea802cb051f671455cbd7472e3bce2c440a4e54fa4321107037dfaff0"); + get_tx("f71c8a732de7148cb01ce34c108a1c982dcfb65f4c3c033f52ff9fb0e4d4de87"); MockResolver { pub_witnesses: map![ witness_id_1 => MockResolvePubWitness::Success(tx_1), @@ -84,11 +85,11 @@ impl Scenario { } Self::B => { let (tx_1, witness_id_1) = - get_tx("bc:c269055b7750a234087c11acd7a408172cb84d8fc6af0ded42d8a8cbea6712e9"); + get_tx("82e491ecb9b7bb99714ec3a6ca4a896eedefc0460a741907c98338423eeebaf3"); let (tx_2, witness_id_2) = - get_tx("bc:d84c37b6c6616184c454c815d970505bed9b3a3723a4445dd1289dc708bc80b3"); + get_tx("6788fec62a2e871cc6b5f250aeadf68b11560719bb986bc97c271b0505211d81"); let (tx_3, witness_id_3) = - get_tx("bc:0bc3024ce6404cd7aea387debde687d9e8731228e16b04b4eefda7283069f1c3"); + get_tx("bae5df6d2943dc8c17bc913a3ff2c5572cdf175c35b8933c6655a46bd4e22ced"); MockResolver { pub_witnesses: map![ witness_id_1 => MockResolvePubWitness::Success(tx_1), @@ -123,10 +124,8 @@ fn get_consignment(scenario: Scenario) -> (Transfer, Vec) { let sats = 9000; let utxo = wlt_1.get_utxo(None); - let (contract_id_1, iface_type_name_1) = - wlt_1.issue_nia(issued_supply_1, wlt_1.close_method(), Some(&utxo)); - let (contract_id_2, iface_type_name_2) = - wlt_1.issue_nia(issued_supply_2, wlt_1.close_method(), Some(&utxo)); + let (contract_id_1, iface_type_name_1) = wlt_1.issue_nia(issued_supply_1, Some(&utxo)); + let (contract_id_2, iface_type_name_2) = wlt_1.issue_nia(issued_supply_2, Some(&utxo)); let mut txes = vec![]; @@ -174,6 +173,7 @@ fn get_consignment(scenario: Scenario) -> (Transfer, Vec) { // // then copy the generated consignemnt file to tests/fixtures/attack_.yaml // manually change tests/fixtures/attack_.yaml files to simulate attacks +#[cfg(not(feature = "altered"))] #[test] #[ignore = "one-shot"] fn validate_consignment_generate() { @@ -191,12 +191,10 @@ fn validate_consignment_generate() { println!("written consignment in: {cons_path}"); for tx in txes { let txid = tx.txid().to_string(); - let witness_id = XWitnessId::from_str(&txid).unwrap(); - let normalized_witness_id = witness_id.to_string().replace(":", "_"); let yaml = serde_yaml::to_string(&tx).unwrap(); - let yaml_path = format!("tests/fixtures/{normalized_witness_id}.yaml"); + let yaml_path = format!("tests/fixtures/{txid}.yaml"); std::fs::write(&yaml_path, yaml).unwrap(); - println!("written tx: {witness_id}"); + println!("written tx: {txid}"); } } @@ -208,21 +206,22 @@ fn get_consignment_from_yaml(fname: &str) -> Transfer { consignment } -fn get_tx(witness_id: &str) -> (Tx, XWitnessId) { - let normalized_witness_id = witness_id.replace(":", "_"); - let yaml_path = format!("tests/fixtures/{normalized_witness_id}.yaml"); +fn get_tx(txid: &str) -> (Tx, Txid) { + let normalized_txid = txid.replace(":", "_"); + let yaml_path = format!("tests/fixtures/{normalized_txid}.yaml"); let file = std::fs::File::open(yaml_path).unwrap(); let tx: Tx = serde_yaml::from_reader(file).unwrap(); - let xwitness_id = XWitnessId::from_str(witness_id).unwrap(); - (tx, xwitness_id) + let txid = Txid::from_str(txid).unwrap(); + (tx, txid) } +#[cfg(not(feature = "altered"))] #[test] fn validate_consignment_success() { for scenario in Scenario::iter() { let resolver = scenario.resolver(); let consignment = get_consignment_from_yaml(&format!("consignment_{scenario}")); - let res = consignment.validate(&resolver, true); + let res = consignment.validate(&resolver, ChainNet::BitcoinRegtest); assert!(res.is_ok()); let validation_status = match res { Ok(validated_consignment) => validated_consignment.validation_status().clone(), @@ -237,13 +236,14 @@ fn validate_consignment_success() { } } +#[cfg(not(feature = "altered"))] #[test] fn validate_consignment_chain_fail() { let resolver = Scenario::A.resolver(); - // liquid + // genesis chainNet: change from bitcoinRegtest to liquidTestnet let consignment = get_consignment_from_yaml("attack_chain"); - let res = consignment.validate(&resolver, true); + let res = consignment.validate(&resolver, ChainNet::BitcoinRegtest); assert!(res.is_err()); let validation_status = match res { Ok(validated_consignment) => validated_consignment.validation_status().clone(), @@ -256,13 +256,14 @@ fn validate_consignment_chain_fail() { assert_eq!(validity, Validity::Invalid); } +#[cfg(not(feature = "altered"))] #[test] fn validate_consignment_genesis_fail() { let resolver = Scenario::B.resolver(); // schema ID: change genesis[schemaId] with CFA schema ID let consignment = get_consignment_from_yaml("attack_genesis_schema_id"); - let res = consignment.validate(&resolver, true); + let res = consignment.validate(&resolver, ChainNet::BitcoinRegtest); assert!(res.is_err()); let validation_status = match res { Ok(validated_consignment) => validated_consignment.validation_status().clone(), @@ -272,7 +273,7 @@ fn validate_consignment_genesis_fail() { assert_eq!(validation_status.failures.len(), 5); assert!(matches!( validation_status.failures[0], - Failure::OperationAbsent(_) + Failure::MpcInvalid(_, _, _) )); assert!(matches!( validation_status.failures[1], @@ -280,7 +281,7 @@ fn validate_consignment_genesis_fail() { )); assert!(matches!( validation_status.failures[2], - Failure::BundleExtraTransition(_, _) + Failure::OperationAbsent(_) )); assert!(matches!( validation_status.failures[3], @@ -288,16 +289,16 @@ fn validate_consignment_genesis_fail() { )); assert!(matches!( validation_status.failures[4], - Failure::MpcInvalid(_, _, _) + Failure::BundleExtraTransition(_, _) )); assert!(validation_status.warnings.is_empty()); assert!(validation_status.info.is_empty()); let validity = validation_status.validity(); assert_eq!(validity, Validity::Invalid); - // genesis testnet: change from true to false + // genesis chainNet: change from bitcoinRegtest to bitcoinMainnet let consignment = get_consignment_from_yaml("attack_genesis_testnet"); - let res = consignment.validate(&resolver, true); + let res = consignment.validate(&resolver, ChainNet::BitcoinRegtest); assert!(res.is_err()); let validation_status = match res { Ok(validated_consignment) => validated_consignment.validation_status().clone(), @@ -307,7 +308,7 @@ fn validate_consignment_genesis_fail() { assert_eq!(validation_status.failures.len(), 1); assert!(matches!( validation_status.failures[0], - Failure::NetworkMismatch(_) + Failure::ContractChainNetMismatch(_) )); assert!(validation_status.warnings.is_empty()); assert!(validation_status.info.is_empty()); @@ -315,13 +316,14 @@ fn validate_consignment_genesis_fail() { assert_eq!(validity, Validity::Invalid); } +#[cfg(not(feature = "altered"))] #[test] fn validate_consignment_bundles_fail() { let resolver = Scenario::A.resolver(); // bundles pubWitness data inputs[0] sequence: change from 0 to 1 let consignment = get_consignment_from_yaml("attack_bundles_pubWitness_data_input_sequence"); - let res = consignment.validate(&resolver, true); + let res = consignment.validate(&resolver, ChainNet::BitcoinRegtest); assert!(res.is_err()); let validation_status = match res { Ok(validated_consignment) => validated_consignment.validation_status().clone(), @@ -331,15 +333,15 @@ fn validate_consignment_bundles_fail() { assert_eq!(validation_status.failures.len(), 3); assert!(matches!( validation_status.failures[0], - Failure::SealsInvalid(_, _, _) + Failure::SealNoPubWitness(_, _, _) )); assert!(matches!( validation_status.failures[1], - Failure::BundleInvalidCommitment(_, _, _, _) + Failure::SealsInvalid(_, _, _) )); assert!(matches!( validation_status.failures[2], - Failure::SealNoPubWitness(_, _, _) + Failure::BundleInvalidCommitment(_, _, _, _) )); assert!(validation_status.warnings.is_empty()); assert!(validation_status.info.is_empty()); @@ -347,20 +349,19 @@ fn validate_consignment_bundles_fail() { assert_eq!(validity, Validity::Invalid); } +#[cfg(not(feature = "altered"))] #[test] fn validate_consignment_resolver_error() { let scenario = Scenario::A; let mut resolver = scenario.resolver(); let txid = - Txid::from_str("d077ea7e3a55a215893a18e82cb03fda0f50619893e4aee0ba70b014e6d63248").unwrap(); - let xwitness_id = XChain::Bitcoin(txid); + Txid::from_str("2c033a3584f571a3b8146dc0f7f904cb421bda9880307ed38f5b7a28ae183eff").unwrap(); // resolve_pub_witness error - *resolver.pub_witnesses.get_mut(&xwitness_id).unwrap() = MockResolvePubWitness::Error( - WitnessResolverError::Other(xwitness_id, s!("unexpected error")), - ); + *resolver.pub_witnesses.get_mut(&txid).unwrap() = + MockResolvePubWitness::Error(WitnessResolverError::Other(txid, s!("unexpected error"))); let consignment = get_consignment_from_yaml("attack_resolver_error"); - let res = consignment.validate(&resolver, true); + let res = consignment.validate(&resolver, ChainNet::BitcoinRegtest); assert!(res.is_err()); let validation_status = match res { Ok(validated_consignment) => validated_consignment.validation_status().clone(), @@ -378,11 +379,10 @@ fn validate_consignment_resolver_error() { assert_eq!(validity, Validity::Invalid); // resolve_pub_witness_ord error - *resolver.pub_witness_ords.get_mut(&xwitness_id).unwrap() = MockResolvePubWitnessOrd::Error( - WitnessResolverError::Other(xwitness_id, s!("unexpected error")), - ); + *resolver.pub_witness_ords.get_mut(&txid).unwrap() = + MockResolvePubWitnessOrd::Error(WitnessResolverError::Other(txid, s!("unexpected error"))); let consignment = get_consignment_from_yaml("attack_resolver_error"); - let res = consignment.validate(&resolver, true); + let res = consignment.validate(&resolver, ChainNet::BitcoinRegtest); assert!(res.is_err()); let validation_status = match res { Ok(validated_consignment) => validated_consignment.validation_status().clone(),