diff --git a/Cargo.lock b/Cargo.lock index 25872bcc..0025e6f7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,18 +4,18 @@ version = 3 [[package]] name = "aho-corasick" -version = "0.7.18" +version = "0.7.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f" +checksum = "b4f55bd91a0978cbfd91c457a164bab8b4001c833b7f323132c0a4e1922dd44e" dependencies = [ "memchr", ] [[package]] name = "amplify" -version = "3.12.1" +version = "3.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e45c604e86700ffea68a7d90c3ffb1508dad1120902f31dbb08afc942cf8acf3" +checksum = "116019a174e912931d5b19ca7ab6a22596d12cdb1320358fad3368f0aba135a9" dependencies = [ "amplify_apfloat", "amplify_derive", @@ -70,11 +70,20 @@ dependencies = [ "syn", ] +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + [[package]] name = "anyhow" -version = "1.0.58" +version = "1.0.65" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb07d2053ccdbe10e2af2995a2f116c1330396493dc1269f6a91d0ae82e19704" +checksum = "98161a4e3e2184da77bb14f02184cdd111e83bbbcc9979dfee3c44b9a85f5602" [[package]] name = "arrayvec" @@ -88,9 +97,9 @@ dependencies = [ [[package]] name = "async-trait" -version = "0.1.56" +version = "0.1.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96cf8829f67d2eab0b2dfa42c5d0ef737e0724e4a82b01b3e292456202b19716" +checksum = "76464446b8bc32758d7e88ee1a804d9914cd9b1cb264c029899680b0be29826f" dependencies = [ "proc-macro2", "quote", @@ -114,15 +123,15 @@ dependencies = [ [[package]] name = "bech32" -version = "0.8.1" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf9ff0bbfd639f15c74af777d81383cf53efb7c93613f6cab67c6c11e05bbf8b" +checksum = "d86b93f97252c47b41663388e6d155714a9d0c398b99f1005cbc5f978b29f445" [[package]] name = "bitcoin" -version = "0.28.1" +version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05bba324e6baf655b882df672453dbbc527bc938cadd27750ae510aaccc3a66a" +checksum = "9cb36de3b18ad25f396f9168302e36fb7e1e8923298ab3127da252d288d5af9d" dependencies = [ "bech32", "bitcoin_hashes", @@ -131,9 +140,9 @@ dependencies = [ [[package]] name = "bitcoin_hashes" -version = "0.10.0" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "006cc91e1a1d99819bc5b8214be3555c1f0611b169f527a1fdc54ed1f2b745b0" +checksum = "90064b8dee6815a6470d60bad07bbbaee885c0e12d04177138fa3291a01b7bc4" dependencies = [ "serde", ] @@ -153,6 +162,12 @@ dependencies = [ "generic-array", ] +[[package]] +name = "bumpalo" +version = "3.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1ad822118d20d2c234f427000d5acc36eabe1e29a348c89b63dd60b13f28e5d" + [[package]] name = "byteorder" version = "1.4.3" @@ -173,20 +188,22 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "chrono" -version = "0.4.19" +version = "0.4.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "670ad68c9088c2a963aaa298cb369688cf3f9465ce5e2d4ca10e6e0098a1ce73" +checksum = "bfd4d1b31faaa3a89d7934dbded3111da0d2ef28e3ebccdb4f0179f5929d1ef1" dependencies = [ - "libc", + "iana-time-zone", + "js-sys", "num-integer", "num-traits", "time", + "wasm-bindgen", "winapi", ] [[package]] name = "client_side_validation" -version = "0.8.0" +version = "0.9.0" dependencies = [ "async-trait", "commit_verify", @@ -205,7 +222,7 @@ dependencies = [ [[package]] name = "commit_verify" -version = "0.8.0" +version = "0.9.0" dependencies = [ "amplify", "bitcoin_hashes", @@ -218,9 +235,9 @@ dependencies = [ [[package]] name = "compiletest_rs" -version = "0.7.1" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29843cb8d351febf86557681d049d1e1652b81a086a190fa1173c07fd17fbf83" +checksum = "70489bbb718aea4f92e5f48f2e3b5be670c2051de30e57cb6e5377b4aa08b372" dependencies = [ "diff", "filetime", @@ -238,11 +255,17 @@ dependencies = [ "winapi", ] +[[package]] +name = "core-foundation-sys" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" + [[package]] name = "cpufeatures" -version = "0.2.2" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59a6001667ab124aebae2a495118e11d30984c3a653e99d86d58971708cf5e4b" +checksum = "28d997bd5e24a5928dd43e46dc529867e207907fe0b239c3477d924f7f2ca320" dependencies = [ "libc", ] @@ -362,7 +385,7 @@ dependencies = [ [[package]] name = "encoding_derive_helpers" -version = "0.8.1" +version = "0.9.0" dependencies = [ "amplify", "proc-macro2", @@ -372,14 +395,14 @@ dependencies = [ [[package]] name = "filetime" -version = "0.2.16" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0408e2626025178a6a7f7ffc05a25bc47103229f19c113755de7bf63816290c" +checksum = "e94a7bbaa59354bc20dd75b67f23e2797b4490e9d6928203fb105c79e448c86c" dependencies = [ "cfg-if", "libc", "redox_syscall", - "winapi", + "windows-sys", ] [[package]] @@ -408,9 +431,9 @@ checksum = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba" [[package]] name = "generic-array" -version = "0.14.5" +version = "0.14.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd48d33ec7f05fbfa152300fdad764757cbded343c1aa1cff2fbaf4134851803" +checksum = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9" dependencies = [ "typenum", "version_check", @@ -465,15 +488,18 @@ dependencies = [ [[package]] name = "half" -version = "1.8.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eabb4a44450da02c90444cf74558da904edde8fb4e9035a9a6a4e15445af0bd7" +checksum = "ad6a9459c9c30b177b925162351f97e7d967c7ea8bab3b8352805327daf45554" +dependencies = [ + "crunchy", +] [[package]] name = "hashbrown" -version = "0.12.1" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db0d4cf898abf0081f964436dc980e96670a0f36863e4b83aaacdb65c9d7ccc3" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" [[package]] name = "heck" @@ -505,6 +531,19 @@ version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7ebdb29d2ea9ed0083cd8cece49bbd968021bd99b0849edb4a9a7ee0fdf6a4e0" +[[package]] +name = "iana-time-zone" +version = "0.1.50" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd911b35d940d2bd0bea0f9100068e5b97b51a1cbe13d13382f132e0365257a0" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "js-sys", + "wasm-bindgen", + "winapi", +] + [[package]] name = "ident_case" version = "1.0.1" @@ -523,9 +562,18 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.2" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "112c678d4050afce233f4f2852bb2eb519230b3cf12f33585275537d7e41578d" +checksum = "4217ad341ebadf8d8e724e264f13e593e0648f5b3e94b3896a5df283be015ecc" + +[[package]] +name = "js-sys" +version = "0.3.60" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49409df3e3bf0856b916e2ceaca09ee28e6871cf7d9ce97a692cacfdb2a25a47" +dependencies = [ + "wasm-bindgen", +] [[package]] name = "lazy_static" @@ -535,9 +583,9 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "libc" -version = "0.2.126" +version = "0.2.134" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "349d5a591cd28b49e1d1037471617a32ddcda5731b99419008085f72d5a53836" +checksum = "329c933548736bc49fd575ee68c89e8be4d260064184389a5b77517cddd99ffb" [[package]] name = "linked-hash-map" @@ -562,9 +610,9 @@ checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" [[package]] name = "miniscript" -version = "7.0.0" +version = "8.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da39fc7a8adea97a677337b0091779dd86349226b869053af496584a9b9e5847" +checksum = "7f4975078076f0b7b914a3044ad7432d2a7fcec38edb855afdc672e24ca35b69" dependencies = [ "bitcoin", ] @@ -580,9 +628,9 @@ dependencies = [ [[package]] name = "monero" -version = "0.17.0" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be363920a304283a18c33a2e3312d46e209a7f6ccda1535f59768e03ede4f0fb" +checksum = "d0de5ecaeeb7618bb1554d1d90e79cc673ba755fd20d43ed4352ab6efa1a7b0f" dependencies = [ "base58-monero", "curve25519-dalek", @@ -635,6 +683,12 @@ version = "0.2.26" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4eae0151b9dacf24fcc170d9995e511669a082856a91f958a2fe380bfab3fb22" +[[package]] +name = "once_cell" +version = "1.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e82dad04139b71a90c080c8463fe0dc7902db5192d939bd0950f074d014339e1" + [[package]] name = "opaque-debug" version = "0.3.0" @@ -643,9 +697,9 @@ checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" [[package]] name = "paste" -version = "1.0.7" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c520e05135d6e763148b6426a837e239041653ba7becd2e538c076c738025fc" +checksum = "b1de2e551fb905ac83f73f7aedf2f0cb4a0da7e35efa24a202a936269f1f18e1" [[package]] name = "ppv-lite86" @@ -655,18 +709,18 @@ checksum = "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872" [[package]] name = "proc-macro2" -version = "1.0.40" +version = "1.0.46" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd96a1e8ed2596c337f8eae5f24924ec83f5ad5ab21ea8e455d3566c69fbcaf7" +checksum = "94e2ef8dbfc347b10c094890f778ee2e36ca9bb4262e86dc99cd217e35f3470b" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.20" +version = "1.0.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3bcdf212e9776fbcb2d23ab029360416bb1706b1aea2d1a5ba002727cbcab804" +checksum = "bbe448f377a7d6961e30f5955f9b8d106c3f5e449d493ee1b125c1d43c2b5179" dependencies = [ "proc-macro2", ] @@ -705,7 +759,7 @@ checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" dependencies = [ "libc", "rand_chacha 0.3.1", - "rand_core 0.6.3", + "rand_core 0.6.4", ] [[package]] @@ -725,7 +779,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" dependencies = [ "ppv-lite86", - "rand_core 0.6.3", + "rand_core 0.6.4", ] [[package]] @@ -754,9 +808,9 @@ dependencies = [ [[package]] name = "rand_core" -version = "0.6.3" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ "getrandom 0.2.7", ] @@ -772,9 +826,9 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.2.13" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62f25bc4c7e55e0b0b7a1d43fb893f4fa1361d0abe38b9ce4f323c2adfe6ef42" +checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" dependencies = [ "bitflags", ] @@ -792,9 +846,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.5.6" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d83f127d94bdbcda4c8cc2e50f6f84f4b611f69c902699ca385a39c3a75f9ff1" +checksum = "4c4eb3267174b8c6c2f654116623910a0fef09c4753f8dd83db29c48a0df988b" dependencies = [ "aho-corasick", "memchr", @@ -803,9 +857,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.6.26" +version = "0.6.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49b3de9ec5dc0a3417da371aab17d729997c15010e7fd24ff707773a33bddb64" +checksum = "a3f87b73ce11b1619a3c6332f45341e0047173771e8b8b73f87bfeefb7b56244" [[package]] name = "rustc-hex" @@ -821,9 +875,9 @@ checksum = "dcf128d1287d2ea9d80910b5f1120d0b8eede3fbf1abe91c40d39ea7d51e6fda" [[package]] name = "rustfix" -version = "0.5.1" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2c50b74badcddeb8f7652fa8323ce440b95286f8e4b64ebfd871c609672704e" +checksum = "ecd2853d9e26988467753bd9912c3a126f642d05d229a4b53f5752ee36c56481" dependencies = [ "anyhow", "log", @@ -833,15 +887,15 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.7" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0a5f7c728f5d284929a1cccb5bc19884422bfe6ef4d6c409da2c41838983fcf" +checksum = "97477e48b4cf8603ad5f7aaf897467cf42ab4218a38ef76fb14c2d6773a6d6a8" [[package]] name = "ryu" -version = "1.0.10" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3f6f92acf49d1b98f7a81226834412ada05458b7364277387724a237f062695" +checksum = "4501abdff3ae82a1c1b477a17252eb69cee9e66eb915c1abaa4f44d873df9f09" [[package]] name = "sealed" @@ -857,36 +911,37 @@ dependencies = [ [[package]] name = "secp256k1" -version = "0.22.1" +version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26947345339603ae8395f68e2f3d85a6b0a8ddfe6315818e80b8504415099db0" +checksum = "b7649a0b3ffb32636e60c7ce0d70511eda9c52c658cd0634e194d5a19943aeff" dependencies = [ + "bitcoin_hashes", "secp256k1-sys", ] [[package]] name = "secp256k1-sys" -version = "0.5.2" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "152e20a0fd0519390fc43ab404663af8a0b794273d2a91d60ad4a39f13ffe110" +checksum = "7058dc8eaf3f2810d7828680320acda0b25a288f6d288e19278e249bbf74226b" dependencies = [ "cc", ] [[package]] name = "serde" -version = "1.0.137" +version = "1.0.145" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61ea8d54c77f8315140a05f4c7237403bf38b72704d031543aa1d16abbf517d1" +checksum = "728eb6351430bccb993660dfffc5a72f91ccc1295abaa8ce19b27ebe4f75568b" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.137" +version = "1.0.145" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f26faba0c3959972377d3b2d306ee9f71faee9714294e41bb777f83f88578be" +checksum = "81fa1584d3d1bcacd84c277a0dfe21f5b0f6accf4a23d04d4c6d61f1af522b4c" dependencies = [ "proc-macro2", "quote", @@ -895,9 +950,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.82" +version = "1.0.85" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82c2c1fdcd807d1098552c5b9a36e425e42e9fbd7c6a37a8425f390f781f7fa7" +checksum = "e55a28e3aaef9d5ce0506d0a14dbba8054ddc7e499ef522dd8b26859ec9d4a44" dependencies = [ "itoa", "ryu", @@ -938,9 +993,9 @@ dependencies = [ [[package]] name = "serde_yaml" -version = "0.8.24" +version = "0.8.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "707d15895415db6628332b737c838b88c598522e4dc70647e59b72312924aebc" +checksum = "578a7433b776b56a35785ed5ce9a7e777ac0598aac5a6dd1b4b18a307c7fc71b" dependencies = [ "indexmap", "ryu", @@ -963,13 +1018,13 @@ dependencies = [ [[package]] name = "signature" -version = "1.5.0" +version = "1.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f054c6c1a6e95179d6f23ed974060dcefb2d9388bb7256900badad682c499de4" +checksum = "74233d3b3b2f6d4b006dc19dee745e73e2a6bfb6f93607cd3b02bd5b00797d7c" [[package]] name = "single_use_seals" -version = "0.8.0" +version = "0.9.0" dependencies = [ "amplify_derive", "async-trait", @@ -983,7 +1038,7 @@ checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" [[package]] name = "strict_encoding" -version = "0.8.1" +version = "0.9.0" dependencies = [ "amplify", "bitcoin", @@ -1002,7 +1057,7 @@ dependencies = [ [[package]] name = "strict_encoding_derive" -version = "0.8.0" +version = "0.9.0" dependencies = [ "amplify", "amplify_syn", @@ -1016,7 +1071,7 @@ dependencies = [ [[package]] name = "strict_encoding_test" -version = "0.8.0" +version = "0.9.0" dependencies = [ "amplify", "strict_encoding", @@ -1046,9 +1101,9 @@ checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" [[package]] name = "syn" -version = "1.0.98" +version = "1.0.102" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c50aef8a904de4c23c788f104b7dddc7d6f79c647c7c8ce4cc8f73eb0ca773dd" +checksum = "3fcd952facd492f9be3ef0d0b7032a6e442ee9b361d4acc2b1d0c4aaa5f613a1" dependencies = [ "proc-macro2", "quote", @@ -1093,18 +1148,18 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.31" +version = "1.0.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd829fe32373d27f76265620b5309d0340cb8550f523c1dda251d6298069069a" +checksum = "10deb33631e3c9018b9baf9dcbbc4f737320d2b576bac10f6aefa048fa407e3e" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.31" +version = "1.0.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0396bc89e626244658bef819e22d0cc459e795a5ebe878e6ec336d1674a8d79a" +checksum = "982d17546b47146b28f7c22e3d08465f6b8903d0ea13c1660d9d84a6e7adcdbb" dependencies = [ "proc-macro2", "quote", @@ -1148,27 +1203,27 @@ checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987" [[package]] name = "unicode-ident" -version = "1.0.1" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5bd2fe26506023ed7b5e1e315add59d6f584c621d037f9368fea9cfb988f368c" +checksum = "dcc811dc4066ac62f84f11307873c4850cb653bfa9b1719cee2bd2204a4bc5dd" [[package]] name = "unicode-segmentation" -version = "1.9.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e8820f5d777f6224dc4be3632222971ac30164d4a258d595640799554ebfd99" +checksum = "0fdbf052a0783de01e944a6ce7a8cb939e295b1e7be835a1112c3b9a7f047a5a" [[package]] name = "unicode-width" -version = "0.1.9" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ed742d4ea2bd1176e236172c8429aaf54486e7ac098db29ffe6529e0ce50973" +checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b" [[package]] name = "unicode-xid" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "957e51f3646910546462e67d5f7599b9e4fb8acdd304b087a6494730f9eebf04" +checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" [[package]] name = "version_check" @@ -1194,6 +1249,60 @@ version = "0.11.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" +[[package]] +name = "wasm-bindgen" +version = "0.2.83" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eaf9f5aceeec8be17c128b2e93e031fb8a4d469bb9c4ae2d7dc1888b26887268" +dependencies = [ + "cfg-if", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.83" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c8ffb332579b0557b52d268b91feab8df3615f265d5270fec2a8c95b17c1142" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.83" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "052be0f94026e6cbc75cdefc9bae13fd6052cdcaf532fa6c45e7ae33a1e6c810" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.83" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07bc0c051dc5f23e307b13285f9d75df86bfdf816c5721e573dec1f9b8aa193c" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.83" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c38c045535d93ec4f0b4defec448e4291638ee608530863b1e2ba115d4fff7f" + [[package]] name = "winapi" version = "0.3.9" @@ -1216,6 +1325,49 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +[[package]] +name = "windows-sys" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea04155a16a59f9eab786fe12a4a450e75cdb175f9e0d80da1e17db09f55b8d2" +dependencies = [ + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_msvc", +] + +[[package]] +name = "windows_aarch64_msvc" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47" + +[[package]] +name = "windows_i686_gnu" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6" + +[[package]] +name = "windows_i686_msvc" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680" + [[package]] name = "yaml-rust" version = "0.4.5" diff --git a/Cargo.toml b/Cargo.toml index 36dc4b03..1e11d972 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,8 +1,8 @@ [package] name = "client_side_validation" -version = "0.8.0" +version = "0.9.0" license = "Apache-2.0" -authors = ["Dr. Maxim Orlovsky "] +authors = ["Dr. Maxim Orlovsky "] description = "Client-side validation foundation library" repository = "https://github.com/LNP-BP/client_side_validation" homepage = "https://github.com/LNP-BP" @@ -18,9 +18,9 @@ name = "client_side_validation" path = "src/lib.rs" [dependencies] -strict_encoding = { version = "0.8.0", path = "./strict_encoding" } -commit_verify = { version = "0.8.0", path = "./commit_verify" } -single_use_seals = { version = "0.8.0", path = "./single_use_seals" } +strict_encoding = { version = "0.9.0", path = "./strict_encoding" } +commit_verify = { version = "0.9.0", path = "./commit_verify" } +single_use_seals = { version = "0.9.0", path = "./single_use_seals" } [dev-dependencies] async-trait = "0.1.51" diff --git a/commit_verify/Cargo.toml b/commit_verify/Cargo.toml index 4d5dfeec..1cf0a4ee 100644 --- a/commit_verify/Cargo.toml +++ b/commit_verify/Cargo.toml @@ -1,8 +1,8 @@ [package] name = "commit_verify" -version = "0.8.0" +version = "0.9.0" license = "Apache-2.0" -authors = ["Dr. Maxim Orlovsky "] +authors = ["Dr. Maxim Orlovsky "] description = "Commit-verify API for client-side validation" repository = "https://github.com/LNP-BP/client_side_validation" homepage = "https://github.com/LNP-BP" @@ -17,16 +17,16 @@ name = "commit_verify" path = "src/lib.rs" [dependencies] -amplify = { version = "3.12.0", features = ["hex"] } -bitcoin_hashes = "0.10" -strict_encoding = { version = "0.8.0", path = "../strict_encoding" } -rand = { version = "0.8.4", optional = true } -serde_crate = { version = "1", package = "serde", optional = true } -serde_with = { version = "1.8", optional = true } +amplify = { version = "3.13.0", features = ["hex"] } +bitcoin_hashes = "0.11.0" +strict_encoding = { version = "0.9.0", path = "../strict_encoding" } +rand = { version = "0.8.5", optional = true } +serde_crate = { version = "1.0", package = "serde", optional = true } +serde_with = { version = "1.14", optional = true } grin_secp256k1zkp = { version = "0.7", optional = true } [dev-dependencies] -rand = "0.8.4" +rand = "0.8.5" [features] default = [] diff --git a/commit_verify/src/lib.rs b/commit_verify/src/lib.rs index 0b51ae03..ce87624a 100644 --- a/commit_verify/src/lib.rs +++ b/commit_verify/src/lib.rs @@ -29,9 +29,9 @@ extern crate amplify; #[macro_use] extern crate bitcoin_hashes; #[cfg(feature = "serde")] +#[macro_use] extern crate serde_crate as serde; #[cfg(feature = "serde")] -#[macro_use] extern crate serde_with; pub mod commit_encode; diff --git a/single_use_seals/Cargo.toml b/single_use_seals/Cargo.toml index fd25b8b2..3e1d3430 100644 --- a/single_use_seals/Cargo.toml +++ b/single_use_seals/Cargo.toml @@ -1,8 +1,8 @@ [package] name = "single_use_seals" -version = "0.8.0" +version = "0.9.0" license = "Apache-2.0" -authors = ["Dr. Maxim Orlovsky "] +authors = ["Dr. Maxim Orlovsky "] description = "Single-use-seals foundation API. For bitcoin-specific implementation check bp-seals" repository = "https://github.com/LNP-BP/client_side_validation" homepage = "https://github.com/LNP-BP" @@ -17,8 +17,8 @@ name = "single_use_seals" path = "src/lib.rs" [dependencies] -amplify_derive = "2.9" -async-trait = { version = "0.1.51", optional = true } +amplify_derive = "2.11" +async-trait = { version = "0.1.57", optional = true } [features] default = [] diff --git a/strict_encoding/Cargo.toml b/strict_encoding/Cargo.toml index c5d17a03..a5f6b9c9 100644 --- a/strict_encoding/Cargo.toml +++ b/strict_encoding/Cargo.toml @@ -1,8 +1,8 @@ [package] name = "strict_encoding" -version = "0.8.1" +version = "0.9.0" license = "Apache-2.0" -authors = ["Dr. Maxim Orlovsky "] +authors = ["Dr. Maxim Orlovsky "] description = "Strict encoding: deterministic binary serialization for networking & client-side validation" repository = "https://github.com/LNP-BP/client_side_validation" homepage = "https://github.com/LNP-BP" @@ -19,22 +19,22 @@ path = "src/lib.rs" crate-type = ["rlib", "staticlib"] [dependencies] -amplify = { version = "3.12.0", features = ["proc_attr"] } -strict_encoding_derive = { version = "0.8.0", path = "./derive", optional = true } -bitcoin_hashes = "0.10" # We need this separately since bitcoin is an optional dependency -bitcoin = { version = "0.28.0", optional = true } -miniscript = { version = "7.0.0", optional = true } -ed25519-dalek = { version = "1", optional = true } +amplify = { version = "3.13.0", features = ["proc_attr"] } +strict_encoding_derive = { version = "0.9.0", path = "./derive", optional = true } +bitcoin_hashes = "0.11.0" # We need this separately since bitcoin is an optional dependency +bitcoin = { version = "0.29.1", optional = true } +miniscript = { version = "8.0.0", optional = true } +ed25519-dalek = { version = "1.0", optional = true } grin_secp256k1zkp = { version = "0.7", optional = true } chrono = { version = "0.4", optional = true } -half = { version = "1.8", optional = true } -serde = { version = "1", optional = true } -monero = { version = "0.17", optional = true } +half = { version = "2.1", optional = true } +serde = { version = "1.0", optional = true } +monero = { version = "0.18", optional = true } [dev-dependencies] rand = "0.7" -amplify = { version = "3.12.0", features = ["proc_attr", "hex"] } -strict_encoding_test = { version = "0.8.0", path = "./test_helpers" } +amplify = { version = "3.13.0", features = ["proc_attr", "hex"] } +strict_encoding_test = { version = "0.9.0", path = "./test_helpers" } [features] default = ["chrono", "derive", "bitcoin"] diff --git a/strict_encoding/derive/Cargo.toml b/strict_encoding/derive/Cargo.toml index c69bb709..daa4e95d 100644 --- a/strict_encoding/derive/Cargo.toml +++ b/strict_encoding/derive/Cargo.toml @@ -1,8 +1,8 @@ [package] name = "strict_encoding_derive" -version = "0.8.0" +version = "0.9.0" license = "Apache-2.0" -authors = ["Dr. Maxim Orlovsky "] +authors = ["Dr. Maxim Orlovsky "] description = "Strict encoding derivation macros" repository = "https://github.com/LNP-BP/client_side_validation" homepage = "https://github.com/LNP-BP" @@ -18,11 +18,11 @@ proc-macro = true [dependencies] syn = "1" proc-macro2 = "1" -encoding_derive_helpers = { version = "0.8.0", path = "../derive_helpers" } +encoding_derive_helpers = { version = "0.9.0", path = "../derive_helpers" } amplify_syn = "1.1.6" [dev-dependencies] strict_encoding = { path = ".." } strict_encoding_test = { path = "../test_helpers" } -amplify = "3.9.1" -compiletest_rs = "0.7.0" +amplify = "3.13.0" +compiletest_rs = "0.9.0" diff --git a/strict_encoding/derive_helpers/Cargo.toml b/strict_encoding/derive_helpers/Cargo.toml index 4eb08834..777df694 100644 --- a/strict_encoding/derive_helpers/Cargo.toml +++ b/strict_encoding/derive_helpers/Cargo.toml @@ -1,8 +1,8 @@ [package] name = "encoding_derive_helpers" -version = "0.8.1" +version = "0.9.0" license = "Apache-2.0" -authors = ["Dr. Maxim Orlovsky "] +authors = ["Dr. Maxim Orlovsky "] description = "Helper functions for creating different encoding derivation macros" repository = "https://github.com/LNP-BP/client_side_validation" homepage = "https://github.com/LNP-BP" @@ -18,4 +18,4 @@ rust-version = "1.59.0" quote = "1" syn = "1" proc-macro2 = "1" -amplify = { version = "3.7.1", features = [ "proc_attr" ] } +amplify = { version = "3.13.0", features = [ "proc_attr" ] } diff --git a/strict_encoding/src/bitcoin.rs b/strict_encoding/src/bitcoin.rs index 3555ac0e..3991094c 100644 --- a/strict_encoding/src/bitcoin.rs +++ b/strict_encoding/src/bitcoin.rs @@ -26,10 +26,10 @@ use bitcoin::util::taproot::{ }; use bitcoin::{ schnorr as bip340, secp256k1, Amount, BlockHash, EcdsaSig, - EcdsaSighashType, KeyPair, OutPoint, PubkeyHash, SchnorrSig, - SchnorrSighashType, Script, ScriptHash, Sighash, Transaction, TxIn, TxOut, - Txid, WPubkeyHash, WScriptHash, Witness, Wtxid, XOnlyPublicKey, - XpubIdentifier, + EcdsaSighashType, KeyPair, LockTime, OutPoint, PackedLockTime, PubkeyHash, + SchnorrSig, SchnorrSighashType, Script, ScriptHash, Sequence, Sighash, + Transaction, TxIn, TxOut, Txid, WPubkeyHash, WScriptHash, Witness, Wtxid, + XOnlyPublicKey, XpubIdentifier, }; use bitcoin_hashes::sha256; @@ -121,7 +121,7 @@ impl StrictEncode for TaprootMerkleBranch { impl StrictDecode for TaprootMerkleBranch { fn strict_decode(d: D) -> Result { let data = Vec::::strict_decode(d)?; - TaprootMerkleBranch::from_inner(data).map_err(|_| { + TaprootMerkleBranch::try_from(data).map_err(|_| { Error::DataIntegrityError(s!( "taproot merkle branch length exceeds 128 consensus limit" )) @@ -150,7 +150,7 @@ impl StrictDecode for secp256k1::SecretKey { impl StrictEncode for bip340::TweakedKeyPair { #[inline] fn strict_encode(&self, e: E) -> Result { - self.into_inner().strict_encode(e) + self.to_inner().strict_encode(e) } } @@ -332,9 +332,13 @@ impl StrictEncode for SchnorrSighashType { impl StrictDecode for SchnorrSighashType { #[inline] fn strict_decode(d: D) -> Result { - SchnorrSighashType::from_u8(u8::strict_decode(d)?).map_err(|_| { - Error::DataIntegrityError(s!("invalid BIP431 SighashType value")) - }) + SchnorrSighashType::from_consensus_u8(u8::strict_decode(d)?).map_err( + |_| { + Error::DataIntegrityError( + s!("invalid BIP431 SighashType value"), + ) + }, + ) } } @@ -436,6 +440,15 @@ impl Strategy for OutPoint { impl Strategy for Witness { type Strategy = strategies::BitcoinConsensus; } +impl Strategy for LockTime { + type Strategy = strategies::BitcoinConsensus; +} +impl Strategy for PackedLockTime { + type Strategy = strategies::BitcoinConsensus; +} +impl Strategy for Sequence { + type Strategy = strategies::BitcoinConsensus; +} impl Strategy for TxOut { type Strategy = strategies::BitcoinConsensus; } @@ -456,7 +469,7 @@ impl StrictEncode for address::Payload { 33u8.strict_encode(&mut e)? + sh.strict_encode(&mut e)? } address::Payload::WitnessProgram { version, program } => { - version.into_num().strict_encode(&mut e)? + version.to_num().strict_encode(&mut e)? + program.strict_encode(&mut e)? } }) @@ -473,7 +486,7 @@ impl StrictDecode for address::Payload { address::Payload::ScriptHash(ScriptHash::strict_decode(&mut d)?) } version if version <= 16 => address::Payload::WitnessProgram { - version: WitnessVersion::from_num(version) + version: WitnessVersion::try_from(version) .expect("bech32::u8 decider is broken"), program: StrictDecode::strict_decode(&mut d)?, }, @@ -502,7 +515,7 @@ impl StrictDecode for Address { impl StrictEncode for Amount { fn strict_encode(&self, e: E) -> Result { - self.as_sat().strict_encode(e) + self.to_sat().strict_encode(e) } } @@ -749,7 +762,7 @@ impl StrictDecode for TapTree { builder.add_leaf(depth, script) }) .map_err(|err| Error::DataIntegrityError(err.to_string()))?; - TapTree::from_builder(builder) + TapTree::try_from(builder) .map_err(|_| Error::DataIntegrityError(s!("incomplete tree"))) } } @@ -1023,7 +1036,7 @@ pub(crate) mod test { secp256k1::KeyPair::from_seckey_slice(&secp, &KEY).unwrap(); let pk_ecdsa = secp256k1::PublicKey::from_secret_key(&secp, &sk_ecdsa); - let pk_schnorr = XOnlyPublicKey::from_keypair(&sk_schnorr); + let (pk_schnorr, _parity) = XOnlyPublicKey::from_keypair(&sk_schnorr); let msg = Message::from_slice(&[1u8; 32]).unwrap(); let ecdsa = secp.sign_ecdsa(&msg, &sk_ecdsa); diff --git a/strict_encoding/src/miniscript.rs b/strict_encoding/src/miniscript.rs index 2a143724..e454556a 100644 --- a/strict_encoding/src/miniscript.rs +++ b/strict_encoding/src/miniscript.rs @@ -17,19 +17,18 @@ use std::io::{Read, Write}; use std::sync::Arc; use bitcoin::consensus::ReadExt; -use bitcoin::hashes::{hash160, ripemd160, sha256, sha256d}; use bitcoin::XOnlyPublicKey; use miniscript::descriptor::{ - self, Descriptor, DescriptorPublicKey, DescriptorSinglePub, DescriptorXKey, - InnerXKey, SinglePubKey, TapTree, Wildcard, + self, Descriptor, DescriptorPublicKey, DescriptorXKey, InnerXKey, + SinglePub, SinglePubKey, TapTree, Wildcard, }; use miniscript::policy::concrete::Policy; use miniscript::{ - BareCtx, Legacy, Miniscript, MiniscriptKey, ScriptContext, Segwitv0, Tap, + hash256, BareCtx, Legacy, Miniscript, MiniscriptKey, Segwitv0, Tap, Terminal, }; -use crate::{Error, StrictDecode, StrictEncode}; +use crate::{strategies, Error, Strategy, StrictDecode, StrictEncode}; /// Maximum level of nested miniscript and miniscript concrete policy levels /// supported by strict encoding process. @@ -46,7 +45,8 @@ const MS_FALSE: u8 = 0; const MS_TRUE: u8 = 1; const MS_KEY: u8 = 0x02; -const MS_KEY_HASH: u8 = 0x03; +const MS_KEY_HASH: u8 = 0x0a; +const MS_HASHED_KEY: u8 = 0x03; const MS_THRESH: u8 = 0x20; const MS_MULTI: u8 = 0x21; const MS_MULTI_A: u8 = 0x2c; @@ -151,10 +151,17 @@ impl StrictDecode for Tap { } } +impl Strategy for hash256::Hash { + type Strategy = strategies::HashFixedBytes; +} + impl StrictEncode for TapTree where Pk: MiniscriptKey + StrictEncode, - Pk::Hash: StrictEncode, + ::Hash160: StrictEncode, + ::Ripemd160: StrictEncode, + ::Hash256: StrictEncode, + ::Sha256: StrictEncode, { fn strict_encode(&self, mut e: E) -> Result { Ok(match self { @@ -174,7 +181,10 @@ where impl StrictDecode for TapTree where Pk: MiniscriptKey + StrictDecode, - Pk::Hash: StrictDecode, + ::Hash160: StrictDecode, + ::Ripemd160: StrictDecode, + ::Hash256: StrictDecode, + ::Sha256: StrictDecode, { fn strict_decode(mut d: D) -> Result { match u8::strict_decode(&mut d)? { @@ -195,7 +205,10 @@ where impl StrictEncode for Policy where Pk: MiniscriptKey + StrictEncode, - ::Hash: StrictEncode, + ::Hash160: StrictEncode, + ::Ripemd160: StrictEncode, + ::Hash256: StrictEncode, + ::Sha256: StrictEncode, { fn strict_encode(&self, mut e: E) -> Result { // We need this because of the need to control maximum number of nested @@ -207,7 +220,10 @@ where ) -> Result where Pk: MiniscriptKey + StrictEncode, - ::Hash: StrictEncode, + ::Hash160: StrictEncode, + ::Ripemd160: StrictEncode, + ::Hash256: StrictEncode, + ::Sha256: StrictEncode, { if depth > MINISCRIPT_DEPTH_LIMIT { return Err(Error::ExceedMaxItems( @@ -273,7 +289,10 @@ where impl StrictDecode for Policy where Pk: MiniscriptKey + StrictDecode, - ::Hash: StrictDecode, + ::Hash160: StrictDecode, + ::Ripemd160: StrictDecode, + ::Hash256: StrictDecode, + ::Sha256: StrictDecode, { fn strict_decode(mut d: D) -> Result { // We need this first because of the need to control maximum number of @@ -285,7 +304,10 @@ where ) -> Result, Error> where Pk: MiniscriptKey + StrictDecode, - ::Hash: StrictDecode, + ::Hash160: StrictDecode, + ::Ripemd160: StrictDecode, + ::Hash256: StrictDecode, + ::Sha256: StrictDecode, { if depth > MINISCRIPT_DEPTH_LIMIT { return Err(Error::ExceedMaxItems( @@ -299,14 +321,14 @@ where MS_TRUE => Policy::Trivial, MS_FALSE => Policy::Unsatisfiable, MS_KEY => Policy::Key(Pk::strict_decode(d)?), - MS_AFTER => Policy::After(u32::strict_decode(d)?), - MS_OLDER => Policy::Older(u32::strict_decode(d)?), - MS_SHA256 => Policy::Sha256(sha256::Hash::strict_decode(d)?), - MS_HASH256 => Policy::Hash256(sha256d::Hash::strict_decode(d)?), + MS_AFTER => Policy::After(StrictDecode::strict_decode(d)?), + MS_OLDER => Policy::Older(StrictDecode::strict_decode(d)?), + MS_SHA256 => Policy::Sha256(StrictDecode::strict_decode(d)?), + MS_HASH256 => Policy::Hash256(StrictDecode::strict_decode(d)?), MS_RIPEMD160 => { - Policy::Ripemd160(ripemd160::Hash::strict_decode(d)?) + Policy::Ripemd160(StrictDecode::strict_decode(d)?) } - MS_HASH160 => Policy::Hash160(hash160::Hash::strict_decode(d)?), + MS_HASH160 => Policy::Hash160(StrictDecode::strict_decode(d)?), MS_AND_B => { let len = d.read_u16()?; let mut vec = Vec::with_capacity(len as usize); @@ -336,9 +358,10 @@ where Policy::Threshold(thresh, vec) } - MS_KEY_HASH | MS_ALT | MS_SWAP | MS_CHECK | MS_DUP_IF - | MS_VERIFY | MS_NON_ZERO | MS_ZERO_NE | MS_AND_V - | MS_AND_OR | MS_OR_D | MS_OR_C | MS_OR_I | MS_MULTI => { + MS_KEY_HASH | MS_HASHED_KEY | MS_ALT | MS_SWAP | MS_CHECK + | MS_DUP_IF | MS_VERIFY | MS_NON_ZERO | MS_ZERO_NE + | MS_AND_V | MS_AND_OR | MS_OR_D | MS_OR_C | MS_OR_I + | MS_MULTI => { return Err(Error::DataIntegrityError(format!( "byte {:#04X} is a valid miniscript instruction, but \ does not belong to a set of concrete policy \ @@ -365,7 +388,10 @@ where impl StrictEncode for Miniscript where Pk: MiniscriptKey + StrictEncode, - ::Hash: StrictEncode, + ::Hash160: StrictEncode, + ::Ripemd160: StrictEncode, + ::Hash256: StrictEncode, + ::Sha256: StrictEncode, Ctx: miniscript::ScriptContext, { fn strict_encode(&self, mut e: E) -> Result { @@ -389,8 +415,11 @@ where ) -> Result where Pk: MiniscriptKey + StrictEncode, - ::Hash: StrictEncode, Ctx: miniscript::ScriptContext, + ::Hash160: StrictEncode, + ::Ripemd160: StrictEncode, + ::Hash256: StrictEncode, + ::Sha256: StrictEncode, { if depth > MINISCRIPT_DEPTH_LIMIT { return Err(Error::ExceedMaxItems( @@ -403,7 +432,10 @@ where Terminal::False => MS_FALSE.strict_encode(e)?, Terminal::True => MS_TRUE.strict_encode(e)?, Terminal::PkK(pk) => strict_encode_tuple!(e; MS_KEY, pk), - Terminal::PkH(hash) => { + Terminal::PkH(pk) => { + strict_encode_tuple!(e; MS_HASHED_KEY, pk) + } + Terminal::RawPkH(hash) => { strict_encode_tuple!(e; MS_KEY_HASH, hash) } Terminal::After(tl) => strict_encode_tuple!(e; MS_AFTER, tl), @@ -500,7 +532,10 @@ where impl StrictDecode for Miniscript where Pk: MiniscriptKey + StrictDecode, - ::Hash: StrictDecode, + ::Hash160: StrictDecode, + ::Ripemd160: StrictDecode, + ::Hash256: StrictDecode, + ::Sha256: StrictDecode, Ctx: miniscript::ScriptContext, { fn strict_decode(mut d: D) -> Result { @@ -513,8 +548,11 @@ where ) -> Result, Error> where Pk: MiniscriptKey + StrictDecode, - ::Hash: StrictDecode, Ctx: miniscript::ScriptContext, + ::Hash160: StrictDecode, + ::Ripemd160: StrictDecode, + ::Hash256: StrictDecode, + ::Sha256: StrictDecode, { if depth > MINISCRIPT_DEPTH_LIMIT { return Err(Error::ExceedMaxItems( @@ -526,19 +564,22 @@ where MS_TRUE => Terminal::True, MS_FALSE => Terminal::False, MS_KEY => Terminal::PkK(Pk::strict_decode(d)?), - MS_KEY_HASH => Terminal::PkH(Pk::Hash::strict_decode(d)?), + MS_HASHED_KEY => Terminal::PkH(Pk::strict_decode(d)?), + MS_KEY_HASH => { + Terminal::RawPkH(StrictDecode::strict_decode(d)?) + } - MS_AFTER => Terminal::After(u32::strict_decode(d)?), - MS_OLDER => Terminal::Older(u32::strict_decode(d)?), - MS_SHA256 => Terminal::Sha256(sha256::Hash::strict_decode(d)?), + MS_AFTER => Terminal::After(StrictDecode::strict_decode(d)?), + MS_OLDER => Terminal::Older(StrictDecode::strict_decode(d)?), + MS_SHA256 => Terminal::Sha256(StrictDecode::strict_decode(d)?), MS_HASH256 => { - Terminal::Hash256(sha256d::Hash::strict_decode(d)?) + Terminal::Hash256(StrictDecode::strict_decode(d)?) } MS_RIPEMD160 => { - Terminal::Ripemd160(ripemd160::Hash::strict_decode(d)?) + Terminal::Ripemd160(StrictDecode::strict_decode(d)?) } MS_HASH160 => { - Terminal::Hash160(hash160::Hash::strict_decode(d)?) + Terminal::Hash160(StrictDecode::strict_decode(d)?) } MS_ALT => { @@ -672,7 +713,7 @@ impl StrictDecode for SinglePubKey { impl StrictEncode for DescriptorPublicKey { fn strict_encode(&self, mut e: E) -> Result { Ok(match self { - DescriptorPublicKey::SinglePub(pk) => { + DescriptorPublicKey::Single(pk) => { strict_encode_list!(e; 0x01u8, pk) } DescriptorPublicKey::XPub(xpub) => { @@ -685,9 +726,9 @@ impl StrictEncode for DescriptorPublicKey { impl StrictDecode for DescriptorPublicKey { fn strict_decode(mut d: D) -> Result { Ok(match u8::strict_decode(&mut d)? { - 0x01 => DescriptorPublicKey::SinglePub( - DescriptorSinglePub::strict_decode(&mut d)?, - ), + 0x01 => { + DescriptorPublicKey::Single(SinglePub::strict_decode(&mut d)?) + } 0x02 => DescriptorPublicKey::XPub(DescriptorXKey::strict_decode( &mut d, )?), @@ -701,13 +742,13 @@ impl StrictDecode for DescriptorPublicKey { } } -impl StrictEncode for DescriptorSinglePub { +impl StrictEncode for SinglePub { fn strict_encode(&self, mut e: E) -> Result { Ok(strict_encode_list!(e; self.origin, self.key)) } } -impl StrictDecode for DescriptorSinglePub { +impl StrictDecode for SinglePub { fn strict_decode(mut d: D) -> Result { Ok(strict_decode_self!(d; origin, key; crate)) } @@ -765,7 +806,10 @@ impl StrictDecode for Wildcard { impl StrictEncode for Descriptor where Pk: MiniscriptKey + StrictEncode, - ::Hash: StrictEncode, + ::Hash160: StrictEncode, + ::Ripemd160: StrictEncode, + ::Hash256: StrictEncode, + ::Sha256: StrictEncode, { fn strict_encode(&self, mut e: E) -> Result { Ok(match self { @@ -794,7 +838,10 @@ where impl StrictDecode for Descriptor where Pk: MiniscriptKey + StrictDecode, - ::Hash: StrictDecode, + ::Hash160: StrictDecode, + ::Ripemd160: StrictDecode, + ::Hash256: StrictDecode, + ::Sha256: StrictDecode, { fn strict_decode(mut d: D) -> Result { Ok(match u8::strict_decode(&mut d)? { @@ -829,7 +876,10 @@ where impl StrictEncode for descriptor::Bare where Pk: StrictEncode + MiniscriptKey, - ::Hash: StrictEncode, + ::Hash160: StrictEncode, + ::Ripemd160: StrictEncode, + ::Hash256: StrictEncode, + ::Sha256: StrictEncode, { #[inline] fn strict_encode(&self, e: E) -> Result { @@ -840,7 +890,10 @@ where impl StrictDecode for descriptor::Bare where Pk: StrictDecode + MiniscriptKey, - ::Hash: StrictDecode, + ::Hash160: StrictDecode, + ::Ripemd160: StrictDecode, + ::Hash256: StrictDecode, + ::Sha256: StrictDecode, { #[inline] fn strict_decode(d: D) -> Result { @@ -851,7 +904,10 @@ where impl StrictEncode for descriptor::Pkh where Pk: StrictEncode + MiniscriptKey, - ::Hash: StrictEncode, + ::Hash160: StrictEncode, + ::Ripemd160: StrictEncode, + ::Hash256: StrictEncode, + ::Sha256: StrictEncode, { #[inline] fn strict_encode(&self, e: E) -> Result { @@ -862,7 +918,10 @@ where impl StrictDecode for descriptor::Pkh where Pk: StrictDecode + MiniscriptKey, - ::Hash: StrictDecode, + ::Hash160: StrictDecode, + ::Ripemd160: StrictDecode, + ::Hash256: StrictDecode, + ::Sha256: StrictDecode, { #[inline] fn strict_decode(d: D) -> Result { @@ -873,7 +932,10 @@ where impl StrictEncode for descriptor::Wpkh where Pk: StrictEncode + MiniscriptKey, - ::Hash: StrictEncode, + ::Hash160: StrictEncode, + ::Ripemd160: StrictEncode, + ::Hash256: StrictEncode, + ::Sha256: StrictEncode, { #[inline] fn strict_encode(&self, e: E) -> Result { @@ -884,7 +946,10 @@ where impl StrictDecode for descriptor::Wpkh where Pk: StrictDecode + MiniscriptKey, - ::Hash: StrictDecode, + ::Hash160: StrictDecode, + ::Ripemd160: StrictDecode, + ::Hash256: StrictDecode, + ::Sha256: StrictDecode, { #[inline] fn strict_decode(d: D) -> Result { @@ -895,7 +960,10 @@ where impl StrictEncode for descriptor::Sh where Pk: StrictEncode + MiniscriptKey, - ::Hash: StrictEncode, + ::Hash160: StrictEncode, + ::Ripemd160: StrictEncode, + ::Hash256: StrictEncode, + ::Sha256: StrictEncode, { #[inline] fn strict_encode(&self, e: E) -> Result { @@ -906,7 +974,10 @@ where impl StrictDecode for descriptor::Sh where Pk: StrictDecode + MiniscriptKey, - ::Hash: StrictDecode, + ::Hash160: StrictDecode, + ::Ripemd160: StrictDecode, + ::Hash256: StrictDecode, + ::Sha256: StrictDecode, { #[inline] fn strict_decode(d: D) -> Result { @@ -926,7 +997,10 @@ where impl StrictEncode for descriptor::Wsh where Pk: StrictEncode + MiniscriptKey, - ::Hash: StrictEncode, + ::Hash160: StrictEncode, + ::Ripemd160: StrictEncode, + ::Hash256: StrictEncode, + ::Sha256: StrictEncode, { #[inline] fn strict_encode(&self, e: E) -> Result { @@ -937,7 +1011,10 @@ where impl StrictDecode for descriptor::Wsh where Pk: StrictDecode + MiniscriptKey, - ::Hash: StrictDecode, + ::Hash160: StrictDecode, + ::Ripemd160: StrictDecode, + ::Hash256: StrictDecode, + ::Sha256: StrictDecode, { #[inline] fn strict_decode(d: D) -> Result { @@ -954,7 +1031,10 @@ where impl StrictEncode for descriptor::Tr where Pk: StrictEncode + MiniscriptKey, - ::Hash: StrictEncode, + ::Hash160: StrictEncode, + ::Ripemd160: StrictEncode, + ::Hash256: StrictEncode, + ::Sha256: StrictEncode, { fn strict_encode(&self, mut e: E) -> Result { Ok(strict_encode_list!(e; self.internal_key(), self.taptree())) @@ -964,7 +1044,10 @@ where impl StrictDecode for descriptor::Tr where Pk: StrictDecode + MiniscriptKey, - ::Hash: StrictDecode, + ::Hash160: StrictDecode, + ::Ripemd160: StrictDecode, + ::Hash256: StrictDecode, + ::Sha256: StrictDecode, { fn strict_decode(mut d: D) -> Result { descriptor::Tr::new( @@ -978,8 +1061,11 @@ where impl StrictEncode for descriptor::SortedMultiVec where Pk: StrictEncode + MiniscriptKey, - ::Hash: StrictEncode, - Ctx: ScriptContext, + ::Hash160: StrictEncode, + ::Ripemd160: StrictEncode, + ::Hash256: StrictEncode, + ::Sha256: StrictEncode, + Ctx: miniscript::ScriptContext, { fn strict_encode(&self, mut e: E) -> Result { Ok(strict_encode_list!(e; self.k, self.pks)) @@ -989,8 +1075,11 @@ where impl StrictDecode for descriptor::SortedMultiVec where Pk: StrictDecode + MiniscriptKey, - ::Hash: StrictDecode, - Ctx: ScriptContext, + ::Hash160: StrictDecode, + ::Ripemd160: StrictDecode, + ::Hash256: StrictDecode, + ::Sha256: StrictDecode, + Ctx: miniscript::ScriptContext, { fn strict_decode(mut d: D) -> Result { descriptor::SortedMultiVec::new( @@ -1004,7 +1093,10 @@ where impl StrictEncode for descriptor::ShInner where Pk: StrictEncode + MiniscriptKey, - ::Hash: StrictEncode, + ::Hash160: StrictEncode, + ::Ripemd160: StrictEncode, + ::Hash256: StrictEncode, + ::Sha256: StrictEncode, { fn strict_encode(&self, mut e: E) -> Result { Ok(match self { @@ -1027,7 +1119,10 @@ where impl StrictDecode for descriptor::ShInner where Pk: StrictDecode + MiniscriptKey, - ::Hash: StrictDecode, + ::Hash160: StrictDecode, + ::Ripemd160: StrictDecode, + ::Hash256: StrictDecode, + ::Sha256: StrictDecode, { fn strict_decode(mut d: D) -> Result { Ok(match u8::strict_decode(&mut d)? { @@ -1056,7 +1151,10 @@ where impl StrictEncode for descriptor::WshInner where Pk: StrictEncode + MiniscriptKey, - ::Hash: StrictEncode, + ::Hash160: StrictEncode, + ::Ripemd160: StrictEncode, + ::Hash256: StrictEncode, + ::Sha256: StrictEncode, { fn strict_encode(&self, mut e: E) -> Result { Ok(match self { @@ -1073,7 +1171,10 @@ where impl StrictDecode for descriptor::WshInner where Pk: StrictDecode + MiniscriptKey, - ::Hash: StrictDecode, + ::Hash160: StrictDecode, + ::Ripemd160: StrictDecode, + ::Hash256: StrictDecode, + ::Sha256: StrictDecode, { fn strict_decode(mut d: D) -> Result { Ok(match u8::strict_decode(&mut d)? { @@ -1141,7 +1242,7 @@ mod test { #[test] fn test_miniscript() { - const SET: [&str; 27] = [ + const SET: [&str; 28] = [ "lltvln:after(1231488000)", "uuj:and_v(v:multi(2,03d01115d548e7561b15c38f004d734633687cf4419620095bc5b0f47070afe85a,025601570cb47f238d2b0286db4a990fa0f3ba28d1a319f5e7cf55c2a2444da7cc),after(1231488000))", "or_b(un:multi(2,03daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729,024ce119c96e2fa357200b559b2f7dd5a5f02d5290aff74b03f3e471b273211c97),al:older(16))", @@ -1162,16 +1263,18 @@ mod test { "and_v(andor(hash256(8a35d9ca92a48eaade6f53a64985e9e2afeb74dcf8acb4c3721e0dc7e4294b25),v:hash256(939894f70e6c3a25da75da0cc2071b4076d9b006563cf635986ada2e93c0d735),v:older(50000)),after(499999999))", "andor(hash256(5f8d30e655a7ba0d7596bb3ddfb1d2d20390d23b1845000e1e118b3be1b3f040),j:and_v(v:hash160(3a2bff0da9d96868e66abc4427bea4691cf61ccd),older(4194305)),ripemd160(44d90e2d3714c8663b632fcf0f9d5f22192cc4c8))", "or_i(c:and_v(v:after(500000),pk_k(02c6047f9441ed7d6d3045406e95c07cd85c778e4b8cef3ca7abac09b95c709ee5)),sha256(d9147961436944f43cd99d28b2bbddbf452ef872b30c8279e255e7daafc7f946))", - "thresh(2,c:pk_h(5dedfbf9ea599dd4e3ca6a80b333c472fd0b3f69),s:sha256(e38990d0c7fc009880a9c07c23842e886c6bbdc964ce6bdd5817ad357335ee6f),a:hash160(dd69735817e0e3f6f826a9238dc2e291184f0131))", + "thresh(2,c:pk_h(03daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729),s:sha256(e38990d0c7fc009880a9c07c23842e886c6bbdc964ce6bdd5817ad357335ee6f),a:hash160(dd69735817e0e3f6f826a9238dc2e291184f0131))", "and_n(sha256(9267d3dbed802941483f1afa2a6bc68de5f653128aca9bf1461c5d0a3ad36ed2),uc:and_v(v:older(144),pk_k(03fe72c435413d33d48ac09c9161ba8b09683215439d62b7940502bda8b202e6ce)))", "and_n(c:pk_k(03daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729),and_b(l:older(4252898),a:older(16)))", - "c:or_i(and_v(v:older(16),pk_h(9fc5dbe5efdce10374a4dd4053c93af540211718)),pk_h(2fbd32c8dd59ee7c17e66cb6ebea7e9846c3040f))", - "or_d(c:pk_h(c42e7ef92fdb603af844d064faad95db9bcdfd3d),andor(c:pk_k(024ce119c96e2fa357200b559b2f7dd5a5f02d5290aff74b03f3e471b273211c97),older(2016),after(1567547623)))", - "c:andor(ripemd160(6ad07d21fd5dfc646f0b30577045ce201616b9ba),pk_h(9fc5dbe5efdce10374a4dd4053c93af540211718),and_v(v:hash256(8a35d9ca92a48eaade6f53a64985e9e2afeb74dcf8acb4c3721e0dc7e4294b25),pk_h(dd100be7d9aea5721158ebde6d6a1fd8fff93bb1)))", - "c:or_i(andor(c:pk_h(fcd35ddacad9f2d5be5e464639441c6065e6955d),pk_h(9652d86bedf43ad264362e6e6eba6eb764508127),pk_h(06afd46bcdfd22ef94ac122aa11f241244a37ecc)),pk_k(02d7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e))" + "c:or_i(and_v(v:older(16),pk_h(03daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729)),pk_h(02352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5))", + "or_d(c:pk_h(02352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5),andor(c:pk_k(03daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729),older(2016),after(1567547623)))", + "c:andor(ripemd160(6ad07d21fd5dfc646f0b30577045ce201616b9ba),pk_h(03daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729),and_v(v:hash256(8a35d9ca92a48eaade6f53a64985e9e2afeb74dcf8acb4c3721e0dc7e4294b25),pk_h(02352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5)))", + "c:andor(u:ripemd160(6ad07d21fd5dfc646f0b30577045ce201616b9ba),pk_h(03daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729),or_i(pk_h(024ce119c96e2fa357200b559b2f7dd5a5f02d5290aff74b03f3e471b273211c97),pk_h(02352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5)))", + "c:or_i(andor(c:pk_h(02352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5),pk_h(024ce119c96e2fa357200b559b2f7dd5a5f02d5290aff74b03f3e471b273211c97),pk_h(03daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729)),pk_k(03fff97bd5755eeea420453a14355235d382f6472f8568a18b2f057a1460297556))", ]; for s in &SET { + println!("{}", s); let ms = Miniscript::::from_str_insane(s) .unwrap(); diff --git a/strict_encoding/src/strategies.rs b/strict_encoding/src/strategies.rs index 8d42b41b..f73bf3e2 100644 --- a/strict_encoding/src/strategies.rs +++ b/strict_encoding/src/strategies.rs @@ -133,8 +133,10 @@ where B: bitcoin::consensus::Encodable, { #[inline] - fn strict_encode(&self, e: E) -> Result { - self.as_inner().consensus_encode(e).map_err(Error::from) + fn strict_encode(&self, mut e: E) -> Result { + self.as_inner() + .consensus_encode(&mut e) + .map_err(Error::from) } } @@ -144,8 +146,8 @@ where B: bitcoin::consensus::Decodable, { #[inline] - fn strict_decode(d: D) -> Result { - Ok(Self::new(B::consensus_decode(d).map_err(Error::from)?)) + fn strict_decode(mut d: D) -> Result { + Ok(Self::new(B::consensus_decode(&mut d).map_err(Error::from)?)) } } diff --git a/strict_encoding/test_helpers/Cargo.toml b/strict_encoding/test_helpers/Cargo.toml index 8e36cfdb..933f42b1 100644 --- a/strict_encoding/test_helpers/Cargo.toml +++ b/strict_encoding/test_helpers/Cargo.toml @@ -1,8 +1,8 @@ [package] name = "strict_encoding_test" -version = "0.8.0" +version = "0.9.0" license = "Apache-2.0" -authors = ["Dr. Maxim Orlovsky "] +authors = ["Dr. Maxim Orlovsky "] description = "Helper functions for testing strict encodings" repository = "https://github.com/LNP-BP/client_side_validation" homepage = "https://github.com/LNP-BP" @@ -15,5 +15,5 @@ rust-version = "1.59.0" [lib] [dependencies] -amplify = "3.9.1" -strict_encoding = { version = "0.8.0", path = ".." } +amplify = "3.13.0" +strict_encoding = { version = "0.9.0", path = ".." }