diff --git a/Cargo.lock b/Cargo.lock index 872c26960f..a5b00d8575 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -37,6 +37,16 @@ dependencies = [ "rand_core 0.6.4", ] +[[package]] +name = "aead" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c192eb8f11fc081b0fe4259ba5af04217d4e0faddd02417310a927911abd7c8" +dependencies = [ + "crypto-common", + "generic-array 0.14.6", +] + [[package]] name = "aes" version = "0.6.0" @@ -67,24 +77,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "433cfd6710c9986c576a25ca913c39d66a6474107b406f34f91d4a8923395241" dependencies = [ "cfg-if", - "cipher 0.4.3", + "cipher 0.4.4", "cpufeatures", ] -[[package]] -name = "aes-gcm" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5278b5fabbb9bd46e24aa69b2fdea62c99088e0a950a9be40e3e0101298f88da" -dependencies = [ - "aead 0.3.2", - "aes 0.6.0", - "cipher 0.2.5", - "ctr 0.6.0", - "ghash 0.3.1", - "subtle", -] - [[package]] name = "aes-gcm" version = "0.9.4" @@ -99,6 +95,20 @@ dependencies = [ "subtle", ] +[[package]] +name = "aes-gcm" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82e1366e0c69c9f927b1fa5ce2c7bf9eafc8f9268c0b9800729e8b267612447c" +dependencies = [ + "aead 0.5.1", + "aes 0.8.2", + "cipher 0.4.4", + "ctr 0.9.2", + "ghash 0.5.0", + "subtle", +] + [[package]] name = "aes-soft" version = "0.6.4" @@ -156,6 +166,12 @@ version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4b46cbb362ab8752921c97e041f5e366ee6297bd428a31275b9fcf1e380f7299" +[[package]] +name = "anstyle" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80c697cc33851b02ab0c26b2e8a211684fbe627ff1cc506131f35026dd7686dd" + [[package]] name = "anyhow" version = "1.0.69" @@ -204,9 +220,9 @@ dependencies = [ [[package]] name = "asn1-rs" -version = "0.5.1" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf6690c370453db30743b373a60ba498fc0d6d83b11f4abfd87a84a075db5dd4" +checksum = "7f6fd5ddaf0351dff5b8da21b2fb4ff8e08ddd02857f0bf69c47639106c0fff0" dependencies = [ "asn1-rs-derive 0.4.0", "asn1-rs-impl", @@ -261,13 +277,14 @@ checksum = "e22d1f4b888c298a027c99dc9048015fac177587de20fc30232a057dfbe24a21" [[package]] name = "assert_cmd" -version = "2.0.8" +version = "2.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9834fcc22e0874394a010230586367d4a3e9f11b560f469262678547e1d2575e" +checksum = "c0dcbed38184f9219183fcf38beb4cdbf5df7163a6d7cd227c6ac89b7966d6fe" dependencies = [ + "anstyle", "bstr", "doc-comment", - "predicates", + "predicates 3.0.1", "predicates-core", "predicates-tree", "wait-timeout", @@ -320,7 +337,7 @@ checksum = "c121a894495d7d3fc3d4e15e0a9843e422e4d1d9e3c514d8062a1c94b35b005d" dependencies = [ "Inflector", "async-graphql-parser", - "darling 0.14.3", + "darling 0.14.4", "proc-macro-crate", "proc-macro2", "quote", @@ -374,12 +391,11 @@ dependencies = [ [[package]] name = "async-lock" -version = "2.6.0" +version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8101efe8695a6c17e02911402145357e718ac92d3ff88ae8419e84b1707b685" +checksum = "fa24f727524730b077666307f2734b4a1a1c57acb79193127dcc8914d5242dd7" dependencies = [ "event-listener", - "futures-lite", ] [[package]] @@ -406,9 +422,9 @@ dependencies = [ [[package]] name = "async-trait" -version = "0.1.64" +version = "0.1.66" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cd7fce9ba8c3c042128ce72d8b2ddbf3a05747efb67ea0313c635e10bda47a2" +checksum = "b84f9ebcc6c1f5b8cb160f6990096a5c127f423fcb6e1ccc46c370cbdfb75dfc" dependencies = [ "proc-macro2", "quote", @@ -590,9 +606,9 @@ checksum = "a4a4ddaa51a5bc52a6948f74c06d20aaaddb71924eab79b8c97a8c556e942d6a" [[package]] name = "base64ct" -version = "1.5.3" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b645a089122eccb6111b4f81cbc1a49f5900ac4666bb93ac027feaecf15607bf" +checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" [[package]] name = "bech32" @@ -695,9 +711,9 @@ dependencies = [ [[package]] name = "block-buffer" -version = "0.10.3" +version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69cce20737498f97b993470a6e536b8523f0af7892a4f928cceb1ac5e52ebe7e" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" dependencies = [ "generic-array 0.14.6", ] @@ -797,9 +813,9 @@ dependencies = [ [[package]] name = "camino" -version = "1.1.2" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c77df041dc383319cc661b428b6961a005db4d6808d5e12536931b1ca9556055" +checksum = "c530edf18f37068ac2d977409ed5cd50d53d73bc653c7647b48eb78976ac9ae2" dependencies = [ "serde", ] @@ -895,9 +911,9 @@ dependencies = [ [[package]] name = "chrono" -version = "0.4.23" +version = "0.4.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16b0a3d9ed01224b22057780a37bb8c5dbfe1be8ba48678e7bf57ec4b385411f" +checksum = "4e3c5919066adf22df73762e50cffcde3a758f2a848b113b586d1f86728b673b" dependencies = [ "num-integer", "num-traits", @@ -950,9 +966,9 @@ dependencies = [ [[package]] name = "cipher" -version = "0.4.3" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1873270f8f7942c191139cb8a40fd228da6c3fd2fc376d7e92d47aa14aeb59e" +checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" dependencies = [ "crypto-common", "inout", @@ -983,13 +999,13 @@ dependencies = [ [[package]] name = "clap" -version = "4.1.6" +version = "4.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec0b0588d44d4d63a87dbd75c136c166bbfd9a86a31cb89e09906521c7d3f5e3" +checksum = "c3d7ae14b20b94cb02149ed21a86c423859cbe18dc7ed69845cace50e52b40a5" dependencies = [ "bitflags", "clap_derive", - "clap_lex 0.3.1", + "clap_lex 0.3.2", "is-terminal", "once_cell", "strsim", @@ -998,9 +1014,9 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.1.0" +version = "4.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "684a277d672e91966334af371f1a7b5833f9aa00b07c84e92fbce95e00208ce8" +checksum = "44bec8e5c9d09e439c4335b1af0abaab56dcf3b94999a936e1bb47b9134288f0" dependencies = [ "heck", "proc-macro-error", @@ -1020,9 +1036,9 @@ dependencies = [ [[package]] name = "clap_lex" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "783fe232adfca04f90f56201b26d79682d4cd2625e0bc7290b95123afe558ade" +checksum = "350b9cf31731f9957399229e9b2adc51eeabdfbe9d71d9a0552275fd12710d09" dependencies = [ "os_str_bytes", ] @@ -1126,9 +1142,9 @@ dependencies = [ [[package]] name = "const-oid" -version = "0.9.1" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cec318a675afcb6a1ea1d4340e2d377e56e47c266f28043ceccbf4412ddfdd3b" +checksum = "520fbf3c07483f94e3e3ca9d0cfd913d7718ef2483d2cfd91c0d9e91474ab913" [[package]] name = "const_format" @@ -1165,6 +1181,33 @@ dependencies = [ "unicode-segmentation", ] +[[package]] +name = "cookie" +version = "0.16.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e859cd57d0710d9e06c381b550c06e76992472a8c6d527aecd2fc673dcc231fb" +dependencies = [ + "percent-encoding", + "time", + "version_check", +] + +[[package]] +name = "cookie_store" +version = "0.16.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e4b6aa369f41f5faa04bb80c9b1f4216ea81646ed6124d76ba5c49a7aafd9cd" +dependencies = [ + "cookie", + "idna 0.2.3", + "log", + "publicsuffix", + "serde", + "serde_json", + "time", + "url", +] + [[package]] name = "core-foundation" version = "0.9.3" @@ -1208,12 +1251,6 @@ dependencies = [ "libc", ] -[[package]] -name = "cpuid-bool" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcb25d077389e53838a8158c8e99174c5a9d902dee4904320db714f3c653ffba" - [[package]] name = "crc" version = "3.0.1" @@ -1282,9 +1319,9 @@ checksum = "6548a0ad5d2549e111e1f6a11a6c2e2d00ce6a3dafe22948d67c2b443f775e52" [[package]] name = "crossbeam-channel" -version = "0.5.6" +version = "0.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2dd04ddaf88237dc3b8d8f9a3c1004b506b54b3313403944054d23c0870c521" +checksum = "cf2b3e8478797446514c91ef04bafcb59faba183e621ad488df88983cc14128c" dependencies = [ "cfg-if", "crossbeam-utils", @@ -1292,9 +1329,9 @@ dependencies = [ [[package]] name = "crossbeam-deque" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "715e8152b692bba2d374b53d4875445368fdf21a94751410af607a5ac677d1fc" +checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef" dependencies = [ "cfg-if", "crossbeam-epoch", @@ -1303,22 +1340,22 @@ dependencies = [ [[package]] name = "crossbeam-epoch" -version = "0.9.13" +version = "0.9.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01a9af1f4c2ef74bb8aa1f7e19706bc72d03598c8a570bb5de72243c7a9d9d5a" +checksum = "46bd5f3f85273295a9d14aedfb86f6aadbff6d8f5295c4a9edb08e819dcf5695" dependencies = [ "autocfg", "cfg-if", "crossbeam-utils", - "memoffset 0.7.1", + "memoffset 0.8.0", "scopeguard", ] [[package]] name = "crossbeam-utils" -version = "0.8.14" +version = "0.8.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fb766fa798726286dbbb842f174001dab8abc7b627a1dd86e0b7222a95d929f" +checksum = "3c063cd8cc95f5c377ed0d4b49a4b21f632396ff690e8470c29b3359b346984b" dependencies = [ "cfg-if", ] @@ -1348,6 +1385,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" dependencies = [ "generic-array 0.14.6", + "rand_core 0.6.4", "typenum", ] @@ -1361,16 +1399,6 @@ dependencies = [ "subtle", ] -[[package]] -name = "crypto-mac" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bff07008ec701e8028e2ceb8f83f0e4274ee62bd2dbdc4fefff2e9a91824081a" -dependencies = [ - "generic-array 0.14.6", - "subtle", -] - [[package]] name = "crypto-mac" version = "0.11.1" @@ -1400,15 +1428,6 @@ dependencies = [ "syn", ] -[[package]] -name = "ctr" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb4a30d54f7443bf3d6191dcd486aca19e67cb3c49fa7a06a319966346707e7f" -dependencies = [ - "cipher 0.2.5", -] - [[package]] name = "ctr" version = "0.8.0" @@ -1424,7 +1443,7 @@ version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835" dependencies = [ - "cipher 0.4.3", + "cipher 0.4.4", ] [[package]] @@ -1452,9 +1471,9 @@ dependencies = [ [[package]] name = "curve25519-dalek" -version = "4.0.0-rc.0" +version = "4.0.0-rc.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8da00a7a9a4eb92a0a0f8e75660926d48f0d0f3c537e455c457bcdaa1e16b1ac" +checksum = "8d4ba9852b42210c7538b75484f9daa0655e9a3ac04f693747bb0f02cf3cfe16" dependencies = [ "cfg-if", "fiat-crypto", @@ -1466,9 +1485,9 @@ dependencies = [ [[package]] name = "cynic" -version = "2.2.6" +version = "2.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebd562bfccdf030094fc403380a38baff3d2822f8118cf8bd7a5688d0270bac4" +checksum = "b1afa0591b1021e427e548a1f0f147fe6168f6c7c7f7006bace77f28856051b8" dependencies = [ "cynic-proc-macros", "reqwest", @@ -1480,9 +1499,9 @@ dependencies = [ [[package]] name = "cynic-codegen" -version = "2.2.6" +version = "2.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "720bd39e2d3ead7c7b363110e3109a685a3f7cd2ea58898910d258f0eb9edbb0" +checksum = "70a1bb05cc554f46079d0fa72abe995a2d32d0737d410a41da75b31e3f7ef768" dependencies = [ "counter", "darling 0.13.4", @@ -1496,9 +1515,9 @@ dependencies = [ [[package]] name = "cynic-proc-macros" -version = "2.2.6" +version = "2.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70c799cf0c3e2f4e1ec41c70facc8f97ea19354584d15c4a014b425695191a2d" +checksum = "aa595c4ed7a5374e0e58c5c34f9d93bd6b7d45062790963bd4b4c3c0bf520c4d" dependencies = [ "cynic-codegen", "syn", @@ -1516,12 +1535,12 @@ dependencies = [ [[package]] name = "darling" -version = "0.14.3" +version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0808e1bd8671fb44a113a14e13497557533369847788fa2ae912b6ebfce9fa8" +checksum = "7b750cb3417fd1b327431a470f388520309479ab0bf5e323505daf0290cd3850" dependencies = [ - "darling_core 0.14.3", - "darling_macro 0.14.3", + "darling_core 0.14.4", + "darling_macro 0.14.4", ] [[package]] @@ -1540,9 +1559,9 @@ dependencies = [ [[package]] name = "darling_core" -version = "0.14.3" +version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "001d80444f28e193f30c2f293455da62dcf9a6b29918a4253152ae2b1de592cb" +checksum = "109c1ca6e6b7f82cc233a97004ea8ed7ca123a9af07a8230878fcfda9b158bf0" dependencies = [ "fnv", "ident_case", @@ -1565,11 +1584,11 @@ dependencies = [ [[package]] name = "darling_macro" -version = "0.14.3" +version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b36230598a2d5de7ec1c6f51f72d8a99a9208daff41de2084d06e3fd3ea56685" +checksum = "a4aab4dbc9f7611d8b55048a3a16d2d010c2c8334e46304b40ac1cc14bf3b48e" dependencies = [ - "darling_core 0.14.3", + "darling_core 0.14.4", "quote", "syn", ] @@ -1627,11 +1646,11 @@ dependencies = [ [[package]] name = "der-parser" -version = "8.1.0" +version = "8.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42d4bc9b0db0a0df9ae64634ac5bdefb7afcb534e182275ca0beadbe486701c1" +checksum = "dbd676fbbab537128ef0278adb5576cf363cff6aa22a7b24effe97347cfab61e" dependencies = [ - "asn1-rs 0.5.1", + "asn1-rs 0.5.2", "displaydoc", "nom", "num-bigint", @@ -1665,7 +1684,7 @@ version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1f91d4cfa921f1c05904dc3c57b4a32c38aed3340cce209f3a6fd1478babafc4" dependencies = [ - "darling 0.14.3", + "darling 0.14.4", "proc-macro2", "quote", "syn", @@ -1724,7 +1743,7 @@ version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f" dependencies = [ - "block-buffer 0.10.3", + "block-buffer 0.10.4", "crypto-common", "subtle", ] @@ -1774,9 +1793,9 @@ checksum = "1435fa1053d8b2fbbe9be7e97eca7f33d37b28409959813daefc1446a14247f1" [[package]] name = "dtoa" -version = "1.0.5" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c00704156a7de8df8da0911424e30c2049957b0a714542a44e05fe693dd85313" +checksum = "65d09067bfacaa79114679b279d7f5885b53295b1e2cfb4e79c8e4bd3d633169" [[package]] name = "dunce" @@ -1876,18 +1895,18 @@ dependencies = [ [[package]] name = "enum-iterator" -version = "1.3.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ea166b3f7dc1032f7866d13f8d8e02c8d87507b61750176b86554964dc6a7bf" +checksum = "706d9e7cf1c7664859d79cd524e4e53ea2b67ea03c98cc2870c5e539695d597e" dependencies = [ "enum-iterator-derive", ] [[package]] name = "enum-iterator-derive" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "828de45d0ca18782232dfb8f3ea9cc428e8ced380eb26a520baaacfc70de39ce" +checksum = "355f93763ef7b0ae1c43c4d8eccc9d5848d84ad1a1d8ce61c421d1ac85a19d05" dependencies = [ "proc-macro2", "quote", @@ -2258,9 +2277,9 @@ dependencies = [ [[package]] name = "fiat-crypto" -version = "0.1.17" +version = "0.1.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a214f5bb88731d436478f3ae1f8a277b62124089ba9fb67f4f93fb100ef73c90" +checksum = "93ace6ec7cc19c8ed33a32eaa9ea692d7faea05006b5356b9e2b668ec4bc3955" [[package]] name = "fixed-hash" @@ -2335,14 +2354,14 @@ dependencies = [ [[package]] name = "fuel-core" -version = "0.17.3" +version = "0.17.4" dependencies = [ "anyhow", "assert_matches", "async-graphql", "async-trait", "axum", - "clap 4.1.6", + "clap 4.1.8", "derive_more", "enum-iterator", "fuel-core-chain-config", @@ -2389,7 +2408,7 @@ dependencies = [ name = "fuel-core-benches" version = "0.0.0" dependencies = [ - "clap 4.1.6", + "clap 4.1.8", "criterion", "ctrlc", "fuel-core", @@ -2403,7 +2422,7 @@ dependencies = [ [[package]] name = "fuel-core-bft" -version = "0.17.3" +version = "0.17.4" dependencies = [ "anyhow", "parking_lot 0.12.1", @@ -2412,10 +2431,10 @@ dependencies = [ [[package]] name = "fuel-core-bin" -version = "0.17.3" +version = "0.17.4" dependencies = [ "anyhow", - "clap 4.1.6", + "clap 4.1.8", "const_format", "dirs", "fuel-core", @@ -2431,7 +2450,7 @@ dependencies = [ [[package]] name = "fuel-core-chain-config" -version = "0.17.3" +version = "0.17.4" dependencies = [ "anyhow", "bech32 0.9.1", @@ -2450,7 +2469,7 @@ dependencies = [ [[package]] name = "fuel-core-client" -version = "0.17.3" +version = "0.17.4" dependencies = [ "anyhow", "cynic", @@ -2473,9 +2492,9 @@ dependencies = [ [[package]] name = "fuel-core-client-bin" -version = "0.17.3" +version = "0.17.4" dependencies = [ - "clap 4.1.6", + "clap 4.1.8", "fuel-core-client", "fuel-core-types", "serde_json", @@ -2484,7 +2503,7 @@ dependencies = [ [[package]] name = "fuel-core-consensus-module" -version = "0.17.3" +version = "0.17.4" dependencies = [ "anyhow", "fuel-core-chain-config", @@ -2496,7 +2515,7 @@ dependencies = [ [[package]] name = "fuel-core-database" -version = "0.17.3" +version = "0.17.4" dependencies = [ "anyhow", "fuel-core-storage", @@ -2507,7 +2526,7 @@ dependencies = [ [[package]] name = "fuel-core-e2e-client" -version = "0.17.3" +version = "0.17.4" dependencies = [ "anyhow", "assert_cmd", @@ -2527,7 +2546,7 @@ dependencies = [ [[package]] name = "fuel-core-executor" -version = "0.17.3" +version = "0.17.4" dependencies = [ "anyhow", "fuel-core-chain-config", @@ -2538,7 +2557,7 @@ dependencies = [ [[package]] name = "fuel-core-importer" -version = "0.17.3" +version = "0.17.4" dependencies = [ "anyhow", "fuel-core-storage", @@ -2553,18 +2572,18 @@ dependencies = [ [[package]] name = "fuel-core-keygen" -version = "0.17.3" +version = "0.17.4" dependencies = [ "anyhow", - "clap 4.1.6", + "clap 4.1.8", "fuel-core-types", - "libp2p-core", + "libp2p-core 0.38.0", "serde_json", ] [[package]] name = "fuel-core-metrics" -version = "0.17.3" +version = "0.17.4" dependencies = [ "axum", "lazy_static", @@ -2574,7 +2593,7 @@ dependencies = [ [[package]] name = "fuel-core-p2p" -version = "0.17.3" +version = "0.17.4" dependencies = [ "anyhow", "async-trait", @@ -2588,14 +2607,14 @@ dependencies = [ "futures", "ip_network", "libp2p", - "libp2p-core", + "libp2p-core 0.38.0", "libp2p-dns", "libp2p-gossipsub", "libp2p-identify", "libp2p-kad", "libp2p-mdns", "libp2p-mplex", - "libp2p-noise", + "libp2p-noise 0.41.0", "libp2p-request-response", "libp2p-swarm", "libp2p-tcp", @@ -2615,7 +2634,7 @@ dependencies = [ [[package]] name = "fuel-core-poa" -version = "0.17.3" +version = "0.17.4" dependencies = [ "anyhow", "async-trait", @@ -2633,7 +2652,7 @@ dependencies = [ [[package]] name = "fuel-core-producer" -version = "0.17.3" +version = "0.17.4" dependencies = [ "anyhow", "async-trait", @@ -2649,7 +2668,7 @@ dependencies = [ [[package]] name = "fuel-core-relayer" -version = "0.17.3" +version = "0.17.4" dependencies = [ "anyhow", "async-trait", @@ -2677,7 +2696,7 @@ dependencies = [ [[package]] name = "fuel-core-services" -version = "0.17.3" +version = "0.17.4" dependencies = [ "anyhow", "async-trait", @@ -2690,7 +2709,7 @@ dependencies = [ [[package]] name = "fuel-core-storage" -version = "0.17.3" +version = "0.17.4" dependencies = [ "anyhow", "fuel-core-types", @@ -2701,7 +2720,7 @@ dependencies = [ [[package]] name = "fuel-core-sync" -version = "0.17.3" +version = "0.17.4" dependencies = [ "anyhow", "async-trait", @@ -2744,7 +2763,7 @@ dependencies = [ [[package]] name = "fuel-core-trace" -version = "0.17.3" +version = "0.17.4" dependencies = [ "ctor", "tracing", @@ -2754,7 +2773,7 @@ dependencies = [ [[package]] name = "fuel-core-txpool" -version = "0.17.3" +version = "0.17.4" dependencies = [ "anyhow", "async-trait", @@ -2776,7 +2795,7 @@ dependencies = [ [[package]] name = "fuel-core-types" -version = "0.17.3" +version = "0.17.4" dependencies = [ "anyhow", "derive_more", @@ -2886,9 +2905,9 @@ checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" [[package]] name = "futures" -version = "0.3.26" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13e2792b0ff0340399d58445b88fd9770e3489eff258a4cbc1523418f12abf84" +checksum = "531ac96c6ff5fd7c62263c5e3c67a603af4fcaee2e1a0ae5565ba3a11e69e549" dependencies = [ "futures-channel", "futures-core", @@ -2901,9 +2920,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.26" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e5317663a9089767a1ec00a487df42e0ca174b61b4483213ac24448e4664df5" +checksum = "164713a5a0dcc3e7b4b1ed7d3b433cabc18025386f9339346e8daf15963cf7ac" dependencies = [ "futures-core", "futures-sink", @@ -2911,15 +2930,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.26" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec90ff4d0fe1f57d600049061dc6bb68ed03c7d2fbd697274c41805dcb3f8608" +checksum = "86d7a0c1aa76363dac491de0ee99faf6941128376f1cf96f07db7603b7de69dd" [[package]] name = "futures-executor" -version = "0.3.26" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8de0a35a6ab97ec8869e32a2473f4b1324459e14c29275d14b10cb1fd19b50e" +checksum = "1997dd9df74cdac935c76252744c1ed5794fac083242ea4fe77ef3ed60ba0f83" dependencies = [ "futures-core", "futures-task", @@ -2929,9 +2948,9 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.26" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfb8371b6fb2aeb2d280374607aeabfc99d95c72edfe51692e42d3d7f0d08531" +checksum = "89d422fa3cbe3b40dca574ab087abb5bc98258ea57eea3fd6f1fa7162c778b91" [[package]] name = "futures-lite" @@ -2960,9 +2979,9 @@ dependencies = [ [[package]] name = "futures-macro" -version = "0.3.26" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95a73af87da33b5acf53acfebdc339fe592ecf5357ac7c0a7734ab9d8c876a70" +checksum = "3eb14ed937631bd8b8b8977f2c198443447a8355b6e3ca599f38c975e5a963b6" dependencies = [ "proc-macro2", "quote", @@ -2982,15 +3001,15 @@ dependencies = [ [[package]] name = "futures-sink" -version = "0.3.26" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f310820bb3e8cfd46c80db4d7fb8353e15dfff853a127158425f31e0be6c8364" +checksum = "ec93083a4aecafb2a80a885c9de1f0ccae9dbd32c2bb54b0c3a65690e0b8d2f2" [[package]] name = "futures-task" -version = "0.3.26" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcf79a1bf610b10f42aea489289c5a2c478a786509693b80cd39c44ccd936366" +checksum = "fd65540d33b37b16542a0438c12e6aeead10d4ac5d05bd3f805b8f35ab592879" [[package]] name = "futures-timer" @@ -3000,9 +3019,9 @@ checksum = "e64b03909df88034c26dc1547e8970b91f98bdb65165d6a4e9110d94263dbb2c" [[package]] name = "futures-util" -version = "0.3.26" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c1d6de3acfef38d2be4b1f543f553131788603495be83da675e180c8d6b7bd1" +checksum = "3ef6b17e481503ec85211fed8f39d1970f128935ca1f814cd32ac4a6842e84ab" dependencies = [ "futures-channel", "futures-core", @@ -3070,22 +3089,22 @@ dependencies = [ [[package]] name = "ghash" -version = "0.3.1" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97304e4cd182c3846f7575ced3890c53012ce534ad9114046b0a9e00bb30a375" +checksum = "1583cc1656d7839fd3732b80cf4f38850336cdb9b8ded1cd399ca62958de3c99" dependencies = [ "opaque-debug 0.3.0", - "polyval 0.4.5", + "polyval 0.5.3", ] [[package]] name = "ghash" -version = "0.4.4" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1583cc1656d7839fd3732b80cf4f38850336cdb9b8ded1cd399ca62958de3c99" +checksum = "d930750de5717d2dd0b8c0d42c076c0e884c81a73e6cab859bbd2339c71e3e40" dependencies = [ "opaque-debug 0.3.0", - "polyval 0.5.3", + "polyval 0.6.0", ] [[package]] @@ -3117,9 +3136,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.3.15" +version = "0.3.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f9f29bc9dda355256b2916cf526ab02ce0aeaaaf2bad60d65ef3f12f11dd0f4" +checksum = "5be7b54589b581f624f566bf5d8eb2bab1db736c51528720b6bd36b96b55924d" dependencies = [ "bytes", "fnv", @@ -3186,7 +3205,7 @@ dependencies = [ "hash32", "rustc_version", "serde", - "spin 0.9.5", + "spin 0.9.6", "stable_deref_trait", ] @@ -3254,16 +3273,6 @@ dependencies = [ "digest 0.9.0", ] -[[package]] -name = "hmac" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1441c6b1e930e2817404b5046f1f989899143a12bf92de603b69f4e0aee1e15" -dependencies = [ - "crypto-mac 0.10.1", - "digest 0.9.0", -] - [[package]] name = "hmac" version = "0.11.0" @@ -3363,9 +3372,9 @@ dependencies = [ [[package]] name = "hyper" -version = "0.14.24" +version = "0.14.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e011372fa0b68db8350aa7a248930ecc7839bf46d8485577d69f117a75f164c" +checksum = "cc5e554ff619822309ffd57d8734d77cd5ce6238bc956f037ea06c58238c9899" dependencies = [ "bytes", "futures-channel", @@ -3594,9 +3603,9 @@ dependencies = [ [[package]] name = "io-lifetimes" -version = "1.0.5" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1abeb7a0dd0f8181267ff8adc397075586500b81b28a73e8a0208b00fc170fb3" +checksum = "cfa919a82ea574332e2de6e74b4c36e74d41982b335080fa59d4ef31be20fdf3" dependencies = [ "libc", "windows-sys 0.45.0", @@ -3628,9 +3637,9 @@ checksum = "30e22bd8629359895450b59ea7a776c850561b96a3b1d31321c1949d9e6c9146" [[package]] name = "is-terminal" -version = "0.4.3" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22e18b0a45d56fe973d6db23972bf5bc46f988a4a2385deac9cc29572f09daef" +checksum = "21b6b32576413a8e69b90e952e4a026476040d81017b80445deda5f2d3921857" dependencies = [ "hermit-abi 0.3.1", "io-lifetimes", @@ -3649,15 +3658,15 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.5" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fad582f4b9e86b6caa621cabeb0963332d92eea04729ab12892c2533951e6440" +checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6" [[package]] name = "jobserver" -version = "0.1.25" +version = "0.1.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "068b1ee6743e4d11fb9c6a1e6064b3693a1b600e7f5f5988047d98b3dc9fb90b" +checksum = "936cfd212a0155903bcbc060e316fb6cc7cbf2e1907329391ebadc1fe0ce77c2" dependencies = [ "libc", ] @@ -3707,9 +3716,9 @@ checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" [[package]] name = "libc" -version = "0.2.139" +version = "0.2.140" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "201de327520df007757c1f0adce6e827fe8562fbc28bfd9c15571c66ca1f5f79" +checksum = "99227334921fae1a979cf0bfdfcc6b3e5ce376ef57e16fb6fb3ea2ed6095f80c" [[package]] name = "libloading" @@ -3738,7 +3747,7 @@ dependencies = [ "futures-timer", "getrandom 0.2.8", "instant", - "libp2p-core", + "libp2p-core 0.38.0", "libp2p-dns", "libp2p-gossipsub", "libp2p-identify", @@ -3746,7 +3755,7 @@ dependencies = [ "libp2p-mdns", "libp2p-metrics", "libp2p-mplex", - "libp2p-noise", + "libp2p-noise 0.41.0", "libp2p-quic", "libp2p-request-response", "libp2p-swarm", @@ -3754,7 +3763,7 @@ dependencies = [ "libp2p-webrtc", "libp2p-websocket", "libp2p-yamux", - "multiaddr", + "multiaddr 0.16.0", "parking_lot 0.12.1", "pin-project", "smallvec", @@ -3776,8 +3785,8 @@ dependencies = [ "instant", "libsecp256k1", "log", - "multiaddr", - "multihash", + "multiaddr 0.16.0", + "multihash 0.16.3", "multistream-select", "once_cell", "parking_lot 0.12.1", @@ -3795,6 +3804,34 @@ dependencies = [ "zeroize", ] +[[package]] +name = "libp2p-core" +version = "0.39.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b7f8b7d65c070a5a1b5f8f0510648189da08f787b8963f8e21219e0710733af" +dependencies = [ + "either", + "fnv", + "futures", + "futures-timer", + "instant", + "libp2p-identity", + "log", + "multiaddr 0.17.0", + "multihash 0.17.0", + "multistream-select", + "once_cell", + "parking_lot 0.12.1", + "pin-project", + "quick-protobuf", + "rand 0.8.5", + "rw-stream-sink", + "smallvec", + "thiserror", + "unsigned-varint", + "void", +] + [[package]] name = "libp2p-dns" version = "0.38.0" @@ -3802,7 +3839,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e42a271c1b49f789b92f7fc87749fa79ce5c7bdc88cbdfacb818a4bca47fec5" dependencies = [ "futures", - "libp2p-core", + "libp2p-core 0.38.0", "log", "parking_lot 0.12.1", "smallvec", @@ -3823,7 +3860,7 @@ dependencies = [ "futures", "hex_fmt", "instant", - "libp2p-core", + "libp2p-core 0.38.0", "libp2p-swarm", "log", "prometheus-client", @@ -3848,7 +3885,7 @@ dependencies = [ "asynchronous-codec", "futures", "futures-timer", - "libp2p-core", + "libp2p-core 0.38.0", "libp2p-swarm", "log", "lru", @@ -3860,6 +3897,25 @@ dependencies = [ "void", ] +[[package]] +name = "libp2p-identity" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff6c9cb71e2333d31f18e7556b9a5f1d0a2e013effc9325e36f436be65fe7bd2" +dependencies = [ + "bs58", + "ed25519-dalek", + "log", + "multiaddr 0.17.0", + "multihash 0.17.0", + "prost", + "prost-build", + "quick-protobuf", + "rand 0.8.5", + "thiserror", + "zeroize", +] + [[package]] name = "libp2p-kad" version = "0.42.0" @@ -3874,7 +3930,7 @@ dependencies = [ "futures", "futures-timer", "instant", - "libp2p-core", + "libp2p-core 0.38.0", "libp2p-swarm", "log", "prost", @@ -3897,7 +3953,7 @@ dependencies = [ "data-encoding", "futures", "if-watch", - "libp2p-core", + "libp2p-core 0.38.0", "libp2p-swarm", "log", "rand 0.8.5", @@ -3914,7 +3970,7 @@ version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5ad8a64f29da86005c86a4d2728b8a0719e9b192f4092b609fd8790acb9dec55" dependencies = [ - "libp2p-core", + "libp2p-core 0.38.0", "libp2p-gossipsub", "libp2p-identify", "libp2p-kad", @@ -3931,7 +3987,7 @@ dependencies = [ "asynchronous-codec", "bytes", "futures", - "libp2p-core", + "libp2p-core 0.38.0", "log", "nohash-hasher", "parking_lot 0.12.1", @@ -3949,7 +4005,7 @@ dependencies = [ "bytes", "curve25519-dalek 3.2.0", "futures", - "libp2p-core", + "libp2p-core 0.38.0", "log", "once_cell", "prost", @@ -3963,17 +4019,41 @@ dependencies = [ "zeroize", ] +[[package]] +name = "libp2p-noise" +version = "0.42.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c87c2803deffeae94108072a0387f8c9ff494af68a4908454c11c811e27b5e5" +dependencies = [ + "bytes", + "curve25519-dalek 3.2.0", + "futures", + "libp2p-core 0.39.1", + "libp2p-identity", + "log", + "once_cell", + "quick-protobuf", + "rand 0.8.5", + "sha2 0.10.6", + "snow", + "static_assertions", + "thiserror", + "x25519-dalek 1.1.1", + "zeroize", +] + [[package]] name = "libp2p-quic" -version = "0.7.0-alpha" +version = "0.7.0-alpha.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01e7c867e95c8130667b24409d236d37598270e6da69b3baf54213ba31ffca59" +checksum = "c6b26abd81cd2398382a1edfe739b539775be8a90fa6914f39b2ab49571ec735" dependencies = [ "bytes", "futures", "futures-timer", "if-watch", - "libp2p-core", + "libp2p-core 0.39.1", + "libp2p-identity", "libp2p-tls", "log", "parking_lot 0.12.1", @@ -3994,7 +4074,7 @@ dependencies = [ "bytes", "futures", "instant", - "libp2p-core", + "libp2p-core 0.38.0", "libp2p-swarm", "log", "rand 0.8.5", @@ -4013,7 +4093,7 @@ dependencies = [ "futures", "futures-timer", "instant", - "libp2p-core", + "libp2p-core 0.38.0", "libp2p-swarm-derive", "log", "pin-project", @@ -4045,7 +4125,7 @@ dependencies = [ "futures-timer", "if-watch", "libc", - "libp2p-core", + "libp2p-core 0.38.0", "log", "socket2", "tokio", @@ -4053,13 +4133,14 @@ dependencies = [ [[package]] name = "libp2p-tls" -version = "0.1.0-alpha" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7905ce0d040576634e8a3229a7587cc8beab83f79db6023800f1792895defa8" +checksum = "ff08d13d0dc66e5e9ba6279c1de417b84fa0d0adc3b03e5732928c180ec02781" dependencies = [ "futures", "futures-rustls", - "libp2p-core", + "libp2p-core 0.39.1", + "libp2p-identity", "rcgen 0.10.0", "ring", "rustls 0.20.8", @@ -4071,9 +4152,9 @@ dependencies = [ [[package]] name = "libp2p-webrtc" -version = "0.4.0-alpha" +version = "0.4.0-alpha.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdb6cd86dd68cba72308ea05de1cebf3ba0ae6e187c40548167955d4e3970f6a" +checksum = "ffd0c3af5921e3bdd5fecdf3eef3be5a197def64c1d23cd3ea79abcadbd461f7" dependencies = [ "async-trait", "asynchronous-codec", @@ -4082,13 +4163,13 @@ dependencies = [ "futures-timer", "hex", "if-watch", - "libp2p-core", - "libp2p-noise", + "libp2p-core 0.39.1", + "libp2p-identity", + "libp2p-noise 0.42.1", "log", - "multihash", - "prost", - "prost-build", - "prost-codec", + "multihash 0.17.0", + "quick-protobuf", + "quick-protobuf-codec", "rand 0.8.5", "rcgen 0.9.3", "serde", @@ -4109,7 +4190,7 @@ dependencies = [ "either", "futures", "futures-rustls", - "libp2p-core", + "libp2p-core 0.38.0", "log", "parking_lot 0.12.1", "quicksink", @@ -4126,7 +4207,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4f63594a0aa818642d9d4915c791945053877253f08a3626f13416b5cd928a29" dependencies = [ "futures", - "libp2p-core", + "libp2p-core 0.38.0", "log", "parking_lot 0.12.1", "thiserror", @@ -4202,7 +4283,7 @@ version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d7b603516767d1ab23d0de09d023e62966c3322f7148297c35cf3d97aa8b37fa" dependencies = [ - "clap 4.1.6", + "clap 4.1.8", "termcolor", "threadpool", ] @@ -4320,9 +4401,9 @@ dependencies = [ [[package]] name = "memoffset" -version = "0.7.1" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5de893c32cde5f383baa4c04c5d6dbdd735cfd4a794b0debdb2bb1b421da5ff4" +checksum = "d61c719bcfbcf5d62b3a09efa6088de8c54bc0bfcd3ea7ae39fcc186108b8de1" dependencies = [ "autocfg", ] @@ -4371,7 +4452,7 @@ dependencies = [ "fragile", "lazy_static", "mockall_derive", - "predicates", + "predicates 2.1.5", "predicates-tree", ] @@ -4401,7 +4482,7 @@ dependencies = [ "log", "memchr", "mime", - "spin 0.9.5", + "spin 0.9.6", "version_check", ] @@ -4415,7 +4496,25 @@ dependencies = [ "byteorder", "data-encoding", "multibase", - "multihash", + "multihash 0.16.3", + "percent-encoding", + "serde", + "static_assertions", + "unsigned-varint", + "url", +] + +[[package]] +name = "multiaddr" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b53e0cc5907a5c216ba6584bf74be8ab47d6d6289f72793b2dddbf15dc3bf8c" +dependencies = [ + "arrayref", + "byteorder", + "data-encoding", + "multibase", + "multihash 0.17.0", "percent-encoding", "serde", "static_assertions", @@ -4447,6 +4546,19 @@ dependencies = [ "unsigned-varint", ] +[[package]] +name = "multihash" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "835d6ff01d610179fbce3de1694d007e500bf33a7f29689838941d6bf783ae40" +dependencies = [ + "core2", + "digest 0.10.6", + "multihash-derive", + "sha2 0.10.6", + "unsigned-varint", +] + [[package]] name = "multihash-derive" version = "0.8.1" @@ -4536,9 +4648,9 @@ dependencies = [ [[package]] name = "netlink-sys" -version = "0.8.4" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "260e21fbb6f3d253a14df90eb0000a6066780a15dd901a7519ce02d77a94985b" +checksum = "6471bf08e7ac0135876a9581bf3217ef0333c191c128d34878079f42ee150411" dependencies = [ "bytes", "futures", @@ -4658,7 +4770,7 @@ version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9bedf36ffb6ba96c2eb7144ef6270557b52e54b20c0a8e1eb2ff99a6c6959bff" dependencies = [ - "asn1-rs 0.5.1", + "asn1-rs 0.5.2", ] [[package]] @@ -4853,9 +4965,9 @@ dependencies = [ [[package]] name = "paste" -version = "1.0.11" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d01a5bd0424d00070b0098dd17ebca6f961a959dead1dbcbbbc1d1cd8d3deeba" +checksum = "9f746c4065a8fa3fe23974dd82f15431cc8d40779821001404d10d2e79ca7d79" [[package]] name = "pbkdf2" @@ -4901,9 +5013,9 @@ checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" [[package]] name = "pest" -version = "2.5.5" +version = "2.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "028accff104c4e513bad663bbcd2ad7cfd5304144404c31ed0a77ac103d00660" +checksum = "8cbd939b234e95d72bc393d51788aec68aeeb5d51e748ca08ff3aad58cb722f7" dependencies = [ "thiserror", "ucd-trie", @@ -5019,16 +5131,18 @@ dependencies = [ [[package]] name = "polling" -version = "2.5.2" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22122d5ec4f9fe1b3916419b76be1e80bcb93f618d071d2edf841b137b2a2bd6" +checksum = "7e1f879b2998099c2d69ab9605d145d5b661195627eccc680002c4918a7fb6fa" dependencies = [ "autocfg", + "bitflags", "cfg-if", + "concurrent-queue", "libc", "log", - "wepoll-ffi", - "windows-sys 0.42.0", + "pin-project-lite 0.2.9", + "windows-sys 0.45.0", ] [[package]] @@ -5039,30 +5153,31 @@ checksum = "048aeb476be11a4b6ca432ca569e375810de9294ae78f4774e78ea98a9246ede" dependencies = [ "cpufeatures", "opaque-debug 0.3.0", - "universal-hash", + "universal-hash 0.4.1", ] [[package]] name = "polyval" -version = "0.4.5" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eebcc4aa140b9abd2bc40d9c3f7ccec842679cd79045ac3a7ac698c1a064b7cd" +checksum = "8419d2b623c7c0896ff2d5d96e2cb4ede590fed28fcc34934f4c33c036e620a1" dependencies = [ - "cpuid-bool", + "cfg-if", + "cpufeatures", "opaque-debug 0.3.0", - "universal-hash", + "universal-hash 0.4.1", ] [[package]] name = "polyval" -version = "0.5.3" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8419d2b623c7c0896ff2d5d96e2cb4ede590fed28fcc34934f4c33c036e620a1" +checksum = "7ef234e08c11dfcb2e56f79fd70f6f2eb7f025c0ce2333e82f4f0518ecad30c6" dependencies = [ "cfg-if", "cpufeatures", "opaque-debug 0.3.0", - "universal-hash", + "universal-hash 0.5.0", ] [[package]] @@ -5096,17 +5211,29 @@ dependencies = [ "regex", ] +[[package]] +name = "predicates" +version = "3.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ba7d6ead3e3966038f68caa9fc1f860185d95a793180bbcfe0d0da47b3961ed" +dependencies = [ + "anstyle", + "difflib", + "itertools", + "predicates-core", +] + [[package]] name = "predicates-core" -version = "1.0.5" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72f883590242d3c6fc5bf50299011695fa6590c2c70eac95ee1bdb9a733ad1a2" +checksum = "b794032607612e7abeb4db69adb4e33590fa6cf1149e95fd7cb00e634b92f174" [[package]] name = "predicates-tree" -version = "1.0.7" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54ff541861505aabf6ea722d2131ee980b8276e10a1297b94e896dd8b621850d" +checksum = "368ba315fb8c5052ab692e68a0eefec6ec57b23a36959c14496f0b0df2c0cecf" dependencies = [ "predicates-core", "termtree", @@ -5114,9 +5241,9 @@ dependencies = [ [[package]] name = "prettyplease" -version = "0.1.23" +version = "0.1.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e97e3215779627f01ee256d2fad52f3d95e8e1c11e9fc6fd08f7cd455d5d5c78" +checksum = "6c8646e95016a7a6c4adea95bafa8a16baab64b583356217f2c85db4a39d9a86" dependencies = [ "proc-macro2", "syn", @@ -5172,9 +5299,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.51" +version = "1.0.52" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d727cae5b39d21da60fa540906919ad737832fe0b1c165da3a34d6548c849d6" +checksum = "1d0e1ae9e836cc3beddd63db0df682593d7e2d3d891ae8c9083d2113e1744224" dependencies = [ "unicode-ident", ] @@ -5204,9 +5331,9 @@ dependencies = [ [[package]] name = "prost" -version = "0.11.6" +version = "0.11.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21dc42e00223fc37204bd4aa177e69420c604ca4a183209a8f9de30c6d934698" +checksum = "e48e50df39172a3e7eb17e14642445da64996989bc212b583015435d39a58537" dependencies = [ "bytes", "prost-derive", @@ -5214,9 +5341,9 @@ dependencies = [ [[package]] name = "prost-build" -version = "0.11.6" +version = "0.11.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3f8ad728fb08fe212df3c05169e940fbb6d9d16a877ddde14644a983ba2012e" +checksum = "2c828f93f5ca4826f97fedcbd3f9a536c16b12cff3dbbb4a007f932bbad95b12" dependencies = [ "bytes", "heck", @@ -5249,9 +5376,9 @@ dependencies = [ [[package]] name = "prost-derive" -version = "0.11.6" +version = "0.11.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bda8c0881ea9f722eb9629376db3d0b903b462477c1aafcb0566610ac28ac5d" +checksum = "4ea9b0f8cbe5e15a8a042d030bd96668db28ecb567ec37d691971ff5731d2b1b" dependencies = [ "anyhow", "itertools", @@ -5262,20 +5389,57 @@ dependencies = [ [[package]] name = "prost-types" -version = "0.11.6" +version = "0.11.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5e0526209433e96d83d750dd81a99118edbc55739e7e61a46764fd2ad537788" +checksum = "379119666929a1afd7a043aa6cf96fa67a6dce9af60c88095a4686dbce4c9c88" dependencies = [ - "bytes", "prost", ] +[[package]] +name = "psl-types" +version = "2.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33cb294fe86a74cbcf50d4445b37da762029549ebeea341421c7c70370f86cac" + +[[package]] +name = "publicsuffix" +version = "2.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96a8c1bda5ae1af7f99a2962e49df150414a43d62404644d98dd5c3a93d07457" +dependencies = [ + "idna 0.3.0", + "psl-types", +] + [[package]] name = "quick-error" version = "1.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" +[[package]] +name = "quick-protobuf" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d6da84cc204722a989e01ba2f6e1e276e190f22263d0cb6ce8526fcdb0d2e1f" +dependencies = [ + "byteorder", +] + +[[package]] +name = "quick-protobuf-codec" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1693116345026436eb2f10b677806169c1a1260c1c60eaaffe3fb5a29ae23d8b" +dependencies = [ + "asynchronous-codec", + "bytes", + "quick-protobuf", + "thiserror", + "unsigned-varint", +] + [[package]] name = "quicksink" version = "0.1.2" @@ -5307,9 +5471,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.23" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8856d8364d252a14d474036ea1358d63c9e6965c8e5c1885c18f73d70bff9c7b" +checksum = "4424af4bf778aae2051a77b60283332f386554255d722233d09fbfc7e30da2fc" dependencies = [ "proc-macro2", ] @@ -5399,9 +5563,9 @@ dependencies = [ [[package]] name = "rayon" -version = "1.6.1" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6db3a213adf02b3bcfd2d3846bb41cb22857d131789e01df434fb7e7bc0759b7" +checksum = "1d2df5196e37bcc87abebc0053e20787d73847bb33134a69841207dd0a47f03b" dependencies = [ "either", "rayon-core", @@ -5409,9 +5573,9 @@ dependencies = [ [[package]] name = "rayon-core" -version = "1.10.2" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "356a0625f1954f730c0201cdab48611198dc6ce21f4acff55089b5a78e6e835b" +checksum = "4b8f95bd6966f5c87776639160a66bd8ab9895d9d4ab01ddba9fc60661aebe8d" dependencies = [ "crossbeam-channel", "crossbeam-deque", @@ -5498,6 +5662,7 @@ checksum = "21eed90ec8570952d53b772ecf8f206aa1ec9a3d76b2521c56c42973f2d91ee9" dependencies = [ "base64 0.21.0", "bytes", + "cookie_store", "encoding_rs", "futures-core", "futures-util", @@ -5702,9 +5867,9 @@ dependencies = [ [[package]] name = "rustix" -version = "0.36.8" +version = "0.36.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f43abb88211988493c1abb44a70efa56ff0ce98f233b7b276146f1f3f7ba9644" +checksum = "fd5c6ff11fecd55b40746d1995a02f2eb375bf8c00d192d521ee09f42bef37bc" dependencies = [ "bitflags", "errno", @@ -5762,9 +5927,9 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.11" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5583e89e108996506031660fe09baa5011b9dd0341b89029313006d1fb508d70" +checksum = "4f3208ce4d8448b3f3e7d168a73f5e0c43a61e32930de3bceeccedb388b6bf06" [[package]] name = "rw-stream-sink" @@ -5779,9 +5944,9 @@ dependencies = [ [[package]] name = "ryu" -version = "1.0.12" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b4b9743ed687d4b4bcedf9ff5eaa7398495ae14e61cba0a295704edbc7decde" +checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041" [[package]] name = "salsa20" @@ -5789,7 +5954,7 @@ version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "97a22f5af31f73a954c10289c93e8a50cc23d971e80ee446f1f6f7137a088213" dependencies = [ - "cipher 0.4.3", + "cipher 0.4.4", ] [[package]] @@ -5977,9 +6142,9 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.16" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58bc9567378fc7690d6b2addae4e60ac2eeea07becb2c64b9f218b53865cba2a" +checksum = "bebd363326d05ec3e2f532ab7660680f3b02130d780c299bca73469d521bc0ed" dependencies = [ "serde", ] @@ -5992,9 +6157,9 @@ checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73" [[package]] name = "serde" -version = "1.0.152" +version = "1.0.156" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb7d1f0d3021d347a83e556fc4683dea2ea09d87bccdf88ff5c12545d89d5efb" +checksum = "314b5b092c0ade17c00142951e50ced110ec27cea304b1037c6969246c2469a4" dependencies = [ "serde_derive", ] @@ -6011,9 +6176,9 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.152" +version = "1.0.156" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af487d118eecd09402d70a5d72551860e788df87b464af30e5ea6a38c75c541e" +checksum = "d7e29c4601e36bcec74a223228dce795f4cd3616341a4af93520ca1a837c087d" dependencies = [ "proc-macro2", "quote", @@ -6022,9 +6187,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.93" +version = "1.0.94" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cad406b69c91885b5107daf2c29572f6c8cdb3c66826821e286c533490c0bc76" +checksum = "1c533a59c9d8a93a09c6ab31f0fd5e5f4dd1b8fc9434804029839884765d04ea" dependencies = [ "itoa", "ryu", @@ -6067,9 +6232,9 @@ dependencies = [ [[package]] name = "serde_yaml" -version = "0.9.17" +version = "0.9.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fb06d4b6cdaef0e0c51fa881acb721bed3c924cfaa71d9c94a3b771dfdf6567" +checksum = "f82e6c8c047aa50a7328632d067bcae6ef38772a79e28daf32f735e0e4f3dd10" dependencies = [ "indexmap", "itoa", @@ -6102,6 +6267,17 @@ dependencies = [ "digest 0.10.6", ] +[[package]] +name = "sha1" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f04293dc80c3993519f2d7f6f511707ee7094fe0c6d3406feb330cdb3540eba3" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest 0.10.6", +] + [[package]] name = "sha2" version = "0.8.2" @@ -6205,14 +6381,14 @@ checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0" [[package]] name = "snow" -version = "0.9.1" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12ba5f4d4ff12bdb6a169ed51b7c48c0e0ac4b0b4b31012b2571e97d78d3201d" +checksum = "5ccba027ba85743e09d15c03296797cad56395089b832b48b5a5217880f57733" dependencies = [ "aes-gcm 0.9.4", "blake2", "chacha20poly1305", - "curve25519-dalek 4.0.0-rc.0", + "curve25519-dalek 4.0.0-rc.1", "rand_core 0.6.4", "ring", "rustc_version", @@ -6222,9 +6398,9 @@ dependencies = [ [[package]] name = "socket2" -version = "0.4.7" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02e2d2db9033d13a1567121ddd7a095ee144db4e1ca1b1bda3419bc0da294ebd" +checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662" dependencies = [ "libc", "winapi", @@ -6254,9 +6430,9 @@ checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" [[package]] name = "spin" -version = "0.9.5" +version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7dccf47db1b41fa1573ed27ccf5e08e3ca771cb994f776668c5ebda893b248fc" +checksum = "b5d6e0250b93c8427a177b849d144a96d5acc57006149479403d7861ab721e34" dependencies = [ "lock_api", ] @@ -6347,9 +6523,9 @@ checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" [[package]] name = "syn" -version = "1.0.107" +version = "1.0.109" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f4064b5b16e03ae50984a5a8ed5d4f8803e6bc1fd170a3cda91a1be4b18e3f5" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" dependencies = [ "proc-macro2", "quote", @@ -6434,9 +6610,9 @@ dependencies = [ [[package]] name = "termtree" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95059e91184749cb66be6dc994f67f182b6d897cb3df74a5bf66b5e709295fd8" +checksum = "3369f5ac52d5eb6ab48c6b4ffdc8efbcad6b89c765749064ba298f2c68a16a76" [[package]] name = "test-case" @@ -6468,18 +6644,18 @@ checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d" [[package]] name = "thiserror" -version = "1.0.38" +version = "1.0.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a9cd18aa97d5c45c6603caea1da6628790b37f7a34b6ca89522331c5180fed0" +checksum = "a5ab016db510546d856297882807df8da66a16fb8c4101cb8b30054b0d5b2d9c" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.38" +version = "1.0.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fb327af4685e4d03fa8cbcf1716380da910eeb2bb8be417e7f9fd3fb164f36f" +checksum = "5420d42e90af0c38c3290abcca25b9b3bdf379fc9f55c528f53a269d9c9a267e" dependencies = [ "proc-macro2", "quote", @@ -6517,9 +6693,9 @@ dependencies = [ [[package]] name = "time" -version = "0.3.19" +version = "0.3.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53250a3b3fed8ff8fd988587d8925d26a83ac3845d9e03b220b37f34c2b8d6c2" +checksum = "cd0cbfecb4d19b5ea75bb31ad904eb5b9fa13f21079c3b92017ebdf4999a5890" dependencies = [ "itoa", "serde", @@ -6535,9 +6711,9 @@ checksum = "2e153e1f1acaef8acc537e68b44906d2db6436e2b35ac2c6b42640fff91f00fd" [[package]] name = "time-macros" -version = "0.2.7" +version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a460aeb8de6dcb0f381e1ee05f1cd56fcf5a5f6eb8187ff3d8f0b11078d38b7c" +checksum = "fd80a657e71da814b8e5d60d3374fc6d35045062245d80224748ae522dd76f36" dependencies = [ "time-core", ] @@ -6578,9 +6754,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.25.0" +version = "1.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8e00990ebabbe4c14c08aca901caed183ecd5c09562a12c824bb53d3c3fd3af" +checksum = "03201d01c3c27a29c8a5cee5b55a93ddae1ccf6f08f65365c2c918f8c1b76f64" dependencies = [ "autocfg", "bytes", @@ -6593,7 +6769,7 @@ dependencies = [ "signal-hook-registry", "socket2", "tokio-macros", - "windows-sys 0.42.0", + "windows-sys 0.45.0", ] [[package]] @@ -6956,15 +7132,15 @@ dependencies = [ [[package]] name = "unicode-bidi" -version = "0.3.10" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d54675592c1dbefd78cbd98db9bacd89886e1ca50692a0692baefffdeb92dd58" +checksum = "524b68aca1d05e03fdf03fcdce2c6c94b6daf6d16861ddaa7e4f2b6638a9052c" [[package]] name = "unicode-ident" -version = "1.0.6" +version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84a22b9f218b40614adcb3f4ff08b703773ad44fa9423e4e0d346d5db86e4ebc" +checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4" [[package]] name = "unicode-normalization" @@ -6997,6 +7173,16 @@ dependencies = [ "subtle", ] +[[package]] +name = "universal-hash" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d3160b73c9a19f7e2939a2fdad446c57c1bbbbf4d919d3213ff1267a580d8b5" +dependencies = [ + "crypto-common", + "subtle", +] + [[package]] name = "unreachable" version = "1.0.0" @@ -7008,9 +7194,9 @@ dependencies = [ [[package]] name = "unsafe-libyaml" -version = "0.2.5" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc7ed8ba44ca06be78ea1ad2c3682a43349126c8818054231ee6f4748012aed2" +checksum = "ad2024452afd3874bf539695e04af6732ba06517424dbf958fdb16a01f3bef6c" [[package]] name = "unsigned-varint" @@ -7334,22 +7520,22 @@ dependencies = [ [[package]] name = "webrtc-dtls" -version = "0.7.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7021987ae0a2ed6c8cd33f68e98e49bb6e74ffe9543310267b48a1bbe3900e5f" +checksum = "942be5bd85f072c3128396f6e5a9bfb93ca8c1939ded735d177b7bcba9a13d05" dependencies = [ "aes 0.6.0", - "aes-gcm 0.8.0", + "aes-gcm 0.10.1", "async-trait", "bincode", "block-modes", "byteorder", "ccm", "curve25519-dalek 3.2.0", - "der-parser 8.1.0", + "der-parser 8.2.0", "elliptic-curve", "hkdf", - "hmac 0.10.1", + "hmac 0.12.1", "log", "oid-registry 0.6.1", "p256", @@ -7361,8 +7547,8 @@ dependencies = [ "rustls 0.19.1", "sec1", "serde", - "sha-1 0.9.8", - "sha2 0.9.9", + "sha1", + "sha2 0.10.6", "signature", "subtle", "thiserror", @@ -7488,15 +7674,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "wepoll-ffi" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d743fdedc5c64377b5fc2bc036b01c7fd642205a0d96356034ae3404d49eb7fb" -dependencies = [ - "cc", -] - [[package]] name = "which" version = "4.4.0" @@ -7565,12 +7742,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" dependencies = [ "windows_aarch64_gnullvm", - "windows_aarch64_msvc 0.42.1", - "windows_i686_gnu 0.42.1", - "windows_i686_msvc 0.42.1", - "windows_x86_64_gnu 0.42.1", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", "windows_x86_64_gnullvm", - "windows_x86_64_msvc 0.42.1", + "windows_x86_64_msvc 0.42.2", ] [[package]] @@ -7584,24 +7761,24 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.42.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e2522491fbfcd58cc84d47aeb2958948c4b8982e9a2d8a2a35bbaed431390e7" +checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" dependencies = [ "windows_aarch64_gnullvm", - "windows_aarch64_msvc 0.42.1", - "windows_i686_gnu 0.42.1", - "windows_i686_msvc 0.42.1", - "windows_x86_64_gnu 0.42.1", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", "windows_x86_64_gnullvm", - "windows_x86_64_msvc 0.42.1", + "windows_x86_64_msvc 0.42.2", ] [[package]] name = "windows_aarch64_gnullvm" -version = "0.42.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c9864e83243fdec7fc9c5444389dcbbfd258f745e7853198f365e3c4968a608" +checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" [[package]] name = "windows_aarch64_msvc" @@ -7611,9 +7788,9 @@ checksum = "17cffbe740121affb56fad0fc0e421804adf0ae00891205213b5cecd30db881d" [[package]] name = "windows_aarch64_msvc" -version = "0.42.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c8b1b673ffc16c47a9ff48570a9d85e25d265735c503681332589af6253c6c7" +checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" [[package]] name = "windows_i686_gnu" @@ -7623,9 +7800,9 @@ checksum = "2564fde759adb79129d9b4f54be42b32c89970c18ebf93124ca8870a498688ed" [[package]] name = "windows_i686_gnu" -version = "0.42.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de3887528ad530ba7bdbb1faa8275ec7a1155a45ffa57c37993960277145d640" +checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" [[package]] name = "windows_i686_msvc" @@ -7635,9 +7812,9 @@ checksum = "9cd9d32ba70453522332c14d38814bceeb747d80b3958676007acadd7e166956" [[package]] name = "windows_i686_msvc" -version = "0.42.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf4d1122317eddd6ff351aa852118a2418ad4214e6613a50e0191f7004372605" +checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" [[package]] name = "windows_x86_64_gnu" @@ -7647,15 +7824,15 @@ checksum = "cfce6deae227ee8d356d19effc141a509cc503dfd1f850622ec4b0f84428e1f4" [[package]] name = "windows_x86_64_gnu" -version = "0.42.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1040f221285e17ebccbc2591ffdc2d44ee1f9186324dd3e84e99ac68d699c45" +checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" [[package]] name = "windows_x86_64_gnullvm" -version = "0.42.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "628bfdf232daa22b0d64fdb62b09fcc36bb01f05a3939e20ab73aaf9470d0463" +checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" [[package]] name = "windows_x86_64_msvc" @@ -7665,9 +7842,9 @@ checksum = "d19538ccc21819d01deaf88d6a17eae6596a12e9aafdbb97916fb49896d89de9" [[package]] name = "windows_x86_64_msvc" -version = "0.42.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "447660ad36a13288b1db4d4248e857b510e8c3a225c822ba4fb748c0aafecffd" +checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" [[package]] name = "winreg" @@ -7753,10 +7930,10 @@ version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e0ecbeb7b67ce215e40e3cc7f2ff902f94a223acf44995934763467e7b1febc8" dependencies = [ - "asn1-rs 0.5.1", + "asn1-rs 0.5.2", "base64 0.13.1", "data-encoding", - "der-parser 8.1.0", + "der-parser 8.2.0", "lazy_static", "nom", "oid-registry 0.6.1", @@ -7769,7 +7946,7 @@ dependencies = [ name = "xtask" version = "0.0.0" dependencies = [ - "clap 4.1.6", + "clap 4.1.8", "fuel-core", ] diff --git a/Cargo.toml b/Cargo.toml index 9cdb910629..d79729d458 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -45,32 +45,32 @@ homepage = "https://fuel.network/" keywords = ["blockchain", "cryptocurrencies", "fuel-vm", "vm"] license = "BUSL-1.1" repository = "https://github.com/FuelLabs/fuel-core" -version = "0.17.3" +version = "0.17.4" [workspace.dependencies] # Workspace members -fuel-core = { version = "0.17.3", path = "./crates/fuel-core", default-features = false } -fuel-core-client-bin = { version = "0.17.3", path = "./bin/client" } -fuel-core-bin = { version = "0.17.3", path = "./bin/fuel-core" } -fuel-core-keygen = { version = "0.17.3", path = "./bin/keygen" } -fuel-core-chain-config = { version = "0.17.3", path = "./crates/chain-config" } -fuel-core-client = { version = "0.17.3", path = "./crates/client" } -fuel-core-database = { version = "0.17.3", path = "./crates/database" } -fuel-core-metrics = { version = "0.17.3", path = "./crates/metrics" } -fuel-core-services = { version = "0.17.3", path = "./crates/services" } -fuel-core-consensus-module = { version = "0.17.3", path = "./crates/services/consensus_module" } -fuel-core-bft = { version = "0.17.3", path = "./crates/services/consensus_module/bft" } -fuel-core-poa = { version = "0.17.3", path = "./crates/services/consensus_module/poa" } -fuel-core-executor = { version = "0.17.3", path = "./crates/services/executor" } -fuel-core-importer = { version = "0.17.3", path = "./crates/services/importer" } -fuel-core-p2p = { version = "0.17.3", path = "./crates/services/p2p" } -fuel-core-producer = { version = "0.17.3", path = "./crates/services/producer" } -fuel-core-relayer = { version = "0.17.3", path = "./crates/services/relayer" } -fuel-core-sync = { version = "0.17.3", path = "./crates/services/sync" } -fuel-core-txpool = { version = "0.17.3", path = "./crates/services/txpool" } -fuel-core-storage = { version = "0.17.3", path = "./crates/storage" } -fuel-core-trace = { version = "0.17.3", path = "./crates/trace" } -fuel-core-types = { version = "0.17.3", path = "./crates/types", default-features = false } +fuel-core = { version = "0.17.4", path = "./crates/fuel-core", default-features = false } +fuel-core-client-bin = { version = "0.17.4", path = "./bin/client" } +fuel-core-bin = { version = "0.17.4", path = "./bin/fuel-core" } +fuel-core-keygen = { version = "0.17.4", path = "./bin/keygen" } +fuel-core-chain-config = { version = "0.17.4", path = "./crates/chain-config" } +fuel-core-client = { version = "0.17.4", path = "./crates/client" } +fuel-core-database = { version = "0.17.4", path = "./crates/database" } +fuel-core-metrics = { version = "0.17.4", path = "./crates/metrics" } +fuel-core-services = { version = "0.17.4", path = "./crates/services" } +fuel-core-consensus-module = { version = "0.17.4", path = "./crates/services/consensus_module" } +fuel-core-bft = { version = "0.17.4", path = "./crates/services/consensus_module/bft" } +fuel-core-poa = { version = "0.17.4", path = "./crates/services/consensus_module/poa" } +fuel-core-executor = { version = "0.17.4", path = "./crates/services/executor" } +fuel-core-importer = { version = "0.17.4", path = "./crates/services/importer" } +fuel-core-p2p = { version = "0.17.4", path = "./crates/services/p2p" } +fuel-core-producer = { version = "0.17.4", path = "./crates/services/producer" } +fuel-core-relayer = { version = "0.17.4", path = "./crates/services/relayer" } +fuel-core-sync = { version = "0.17.4", path = "./crates/services/sync" } +fuel-core-txpool = { version = "0.17.4", path = "./crates/services/txpool" } +fuel-core-storage = { version = "0.17.4", path = "./crates/storage" } +fuel-core-trace = { version = "0.17.4", path = "./crates/trace" } +fuel-core-types = { version = "0.17.4", path = "./crates/types", default-features = false } fuel-core-tests = { version = "0.0.0", path = "./tests" } fuel-core-xtask = { version = "0.0.0", path = "./xtask" } diff --git a/crates/chain-config/src/config/coin.rs b/crates/chain-config/src/config/coin.rs index d7288a67c1..458e03409f 100644 --- a/crates/chain-config/src/config/coin.rs +++ b/crates/chain-config/src/config/coin.rs @@ -63,7 +63,6 @@ impl GenesisCommitment for CompressedCoin { .chain(self.amount.to_be_bytes()) .chain(self.asset_id) .chain((*self.maturity).to_be_bytes()) - .chain([self.status as u8]) .chain(self.tx_pointer.block_height().to_be_bytes()) .chain(self.tx_pointer.tx_index().to_be_bytes()) .finalize(); diff --git a/crates/chain-config/src/config/message.rs b/crates/chain-config/src/config/message.rs index dd95bf008f..4745bdf939 100644 --- a/crates/chain-config/src/config/message.rs +++ b/crates/chain-config/src/config/message.rs @@ -8,7 +8,7 @@ use crate::{ use fuel_core_storage::MerkleRoot; use fuel_core_types::{ blockchain::primitives::DaBlockHeight, - entities::message::CompressedMessage, + entities::message::Message, fuel_asm::Word, fuel_types::Address, }; @@ -40,9 +40,9 @@ pub struct MessageConfig { pub da_height: DaBlockHeight, } -impl From for CompressedMessage { +impl From for Message { fn from(msg: MessageConfig) -> Self { - CompressedMessage { + Message { sender: msg.sender, recipient: msg.recipient, nonce: msg.nonce, @@ -53,7 +53,7 @@ impl From for CompressedMessage { } } -impl GenesisCommitment for CompressedMessage { +impl GenesisCommitment for Message { fn root(&self) -> anyhow::Result { Ok(self.id().into()) } diff --git a/crates/client/Cargo.toml b/crates/client/Cargo.toml index 8c79305214..e77282c1f1 100644 --- a/crates/client/Cargo.toml +++ b/crates/client/Cargo.toml @@ -21,7 +21,8 @@ hex = "0.4" # Included to enable webpki in the eventsource client hyper-rustls = { version = "0.22", features = ["webpki-tokio"], optional = true } itertools = { workspace = true } -reqwest = { version = "0.11", default-features = false, features = ["rustls-tls"] } +# enable cookie store to support L7 sticky sessions +reqwest = { version = "0.11", default-features = false, features = ["rustls-tls", "cookie_store"] } serde = { workspace = true, features = ["derive"] } serde_json = { version = "1.0", features = ["raw_value"] } tai64 = { version = "4.0", features = ["serde"] } diff --git a/crates/client/assets/schema.sdl b/crates/client/assets/schema.sdl index a7fd8b3f8b..e6ab5e32c3 100644 --- a/crates/client/assets/schema.sdl +++ b/crates/client/assets/schema.sdl @@ -111,10 +111,6 @@ type Coin { assetId: AssetId! maturity: U64! """ - The spendable status of the coin - """ - status: CoinStatus! - """ TxPointer - the height of the block this coin was created in """ blockCreated: U64! @@ -170,11 +166,6 @@ type CoinOutput { assetId: AssetId! } -enum CoinStatus { - UNSPENT - SPENT -} - union Consensus = Genesis | PoAConsensus type ConsensusParameters { @@ -382,7 +373,6 @@ type Message { nonce: U64! data: HexString! daHeight: U64! - status: MessageStatus! } type MessageConnection { @@ -433,11 +423,6 @@ type MessageProof { header: Header! } -enum MessageStatus { - UNSPENT - SPENT -} - type Mutation { startSession: ID! endSession(id: ID!): Boolean! diff --git a/crates/client/src/client/schema/coin.rs b/crates/client/src/client/schema/coin.rs index 43a2719b14..ed41eeed5f 100644 --- a/crates/client/src/client/schema/coin.rs +++ b/crates/client/src/client/schema/coin.rs @@ -124,14 +124,6 @@ pub struct Coin { pub utxo_id: UtxoId, pub maturity: U64, pub owner: Address, - pub status: CoinStatus, -} - -#[derive(cynic::Enum, Clone, Copy, Debug, Eq, PartialEq)] -#[cynic(schema_path = "./assets/schema.sdl")] -pub enum CoinStatus { - Unspent, - Spent, } #[derive(cynic::QueryFragment, Debug)] diff --git a/crates/client/src/client/schema/message.rs b/crates/client/src/client/schema/message.rs index 7d12d482b1..3f42893a73 100644 --- a/crates/client/src/client/schema/message.rs +++ b/crates/client/src/client/schema/message.rs @@ -26,14 +26,6 @@ pub struct Message { pub nonce: U64, pub data: HexString, pub da_height: U64, - pub status: MessageStatus, -} - -#[derive(cynic::Enum, Clone, Copy, Debug, Eq, PartialEq)] -#[cynic(schema_path = "./assets/schema.sdl")] -pub enum MessageStatus { - Unspent, - Spent, } #[derive(cynic::QueryFragment, Debug)] diff --git a/crates/client/src/client/schema/snapshots/fuel_core_client__client__schema__coin__tests__coin_by_id_query_gql_output.snap b/crates/client/src/client/schema/snapshots/fuel_core_client__client__schema__coin__tests__coin_by_id_query_gql_output.snap index 445ebee6fb..53ea16c9ed 100644 --- a/crates/client/src/client/schema/snapshots/fuel_core_client__client__schema__coin__tests__coin_by_id_query_gql_output.snap +++ b/crates/client/src/client/schema/snapshots/fuel_core_client__client__schema__coin__tests__coin_by_id_query_gql_output.snap @@ -10,7 +10,6 @@ query($utxoId: UtxoId!) { utxoId maturity owner - status } } diff --git a/crates/client/src/client/schema/snapshots/fuel_core_client__client__schema__coin__tests__coins_connection_query_gql_output.snap b/crates/client/src/client/schema/snapshots/fuel_core_client__client__schema__coin__tests__coins_connection_query_gql_output.snap index f63e385134..31845a1459 100644 --- a/crates/client/src/client/schema/snapshots/fuel_core_client__client__schema__coin__tests__coins_connection_query_gql_output.snap +++ b/crates/client/src/client/schema/snapshots/fuel_core_client__client__schema__coin__tests__coins_connection_query_gql_output.snap @@ -13,7 +13,6 @@ query($filter: CoinFilterInput!, $after: String, $before: String, $first: Int, $ utxoId maturity owner - status } } pageInfo { diff --git a/crates/client/src/client/schema/snapshots/fuel_core_client__client__schema__message__tests__owned_message_query_gql_output.snap b/crates/client/src/client/schema/snapshots/fuel_core_client__client__schema__message__tests__owned_message_query_gql_output.snap index c86eede152..b73208c1f4 100644 --- a/crates/client/src/client/schema/snapshots/fuel_core_client__client__schema__message__tests__owned_message_query_gql_output.snap +++ b/crates/client/src/client/schema/snapshots/fuel_core_client__client__schema__message__tests__owned_message_query_gql_output.snap @@ -14,7 +14,6 @@ query($owner: Address, $after: String, $before: String, $first: Int, $last: Int) nonce data daHeight - status } } pageInfo { diff --git a/crates/fuel-core/src/database.rs b/crates/fuel-core/src/database.rs index 7b57992764..d164ca3521 100644 --- a/crates/fuel-core/src/database.rs +++ b/crates/fuel-core/src/database.rs @@ -52,7 +52,6 @@ use tempfile::TempDir; // TODO: Move to separate `database/storage` folder, because it is only implementation of storages traits. mod block; mod code_root; -mod coin; mod contracts; mod message; mod receipts; @@ -61,6 +60,8 @@ mod relayer; mod sealed_block; mod state; +pub(crate) mod coin; + pub mod balances; pub mod metadata; pub mod storage; diff --git a/crates/fuel-core/src/database/coin.rs b/crates/fuel-core/src/database/coin.rs index fb971b1d95..f04de6d2d4 100644 --- a/crates/fuel-core/src/database/coin.rs +++ b/crates/fuel-core/src/database/coin.rs @@ -1,4 +1,5 @@ use crate::database::{ + storage::DatabaseColumn, Column, Database, Error as DatabaseError, @@ -9,15 +10,14 @@ use fuel_core_storage::{ iter::IterDirection, tables::Coins, Error as StorageError, + Mappable, + StorageAsMut, StorageInspect, StorageMutate, }; use fuel_core_txpool::types::TxId; use fuel_core_types::{ - entities::coin::{ - CoinStatus, - CompressedCoin, - }, + entities::coin::CompressedCoin, fuel_tx::{ Address, Bytes32, @@ -27,10 +27,7 @@ use fuel_core_types::{ use std::borrow::Cow; // TODO: Reuse `fuel_vm::storage::double_key` macro. -fn owner_coin_id_key( - owner: &Address, - coin_id: &UtxoId, -) -> [u8; Address::LEN + TxId::LEN + 1] { +pub fn owner_coin_id_key(owner: &Address, coin_id: &UtxoId) -> OwnedCoinKey { let mut default = [0u8; Address::LEN + TxId::LEN + 1]; default[0..Address::LEN].copy_from_slice(owner.as_ref()); default[Address::LEN..].copy_from_slice(utxo_id_to_bytes(coin_id).as_ref()); @@ -44,6 +41,24 @@ fn utxo_id_to_bytes(utxo_id: &UtxoId) -> [u8; TxId::LEN + 1] { default } +/// The storage table of owned coin ids. Maps addresses to owned coins. +pub struct OwnedCoins; +/// The storage key for owned coins: `Address ++ UtxoId` +pub type OwnedCoinKey = [u8; Address::LEN + TxId::LEN + 1]; + +impl Mappable for OwnedCoins { + type Key = Self::OwnedKey; + type OwnedKey = OwnedCoinKey; + type Value = Self::OwnedValue; + type OwnedValue = bool; +} + +impl DatabaseColumn for OwnedCoins { + fn column() -> Column { + Column::OwnedCoins + } +} + impl StorageInspect for Database { type Error = StorageError; @@ -67,8 +82,8 @@ impl StorageMutate for Database { // insert primary record let insert = Database::insert(self, utxo_id_to_bytes(key), Column::Coins, value)?; // insert secondary index by owner - let _: Option = - Database::insert(self, coin_by_owner, Column::OwnedCoins, &true)?; + self.storage_as_mut::() + .insert(&coin_by_owner, &true)?; Ok(insert) } @@ -79,8 +94,7 @@ impl StorageMutate for Database { // cleanup secondary index if let Some(coin) = &coin { let key = owner_coin_id_key(&coin.owner, key); - let _: Option = - Database::remove(self, key.as_slice(), Column::OwnedCoins)?; + self.storage_as_mut::().remove(&key)?; } Ok(coin) @@ -114,18 +128,6 @@ impl Database { pub fn get_coin_config(&self) -> DatabaseResult>> { let configs = self .iter_all::, CompressedCoin>(Column::Coins, None) - .filter_map(|coin| { - // Return only unspent coins - if let Ok(coin) = coin { - if coin.1.status == CoinStatus::Unspent { - Some(Ok(coin)) - } else { - None - } - } else { - Some(coin) - } - }) .map(|raw_coin| -> DatabaseResult { let coin = raw_coin?; diff --git a/crates/fuel-core/src/database/message.rs b/crates/fuel-core/src/database/message.rs index 0a3420a253..6b967de7ad 100644 --- a/crates/fuel-core/src/database/message.rs +++ b/crates/fuel-core/src/database/message.rs @@ -17,7 +17,7 @@ use fuel_core_storage::{ }; use fuel_core_types::{ entities::message::{ - CompressedMessage, + Message, MessageStatus, }, fuel_types::{ @@ -36,10 +36,7 @@ use super::storage::DatabaseColumn; impl StorageInspect for Database { type Error = StorageError; - fn get( - &self, - key: &MessageId, - ) -> Result>, Self::Error> { + fn get(&self, key: &MessageId) -> Result>, Self::Error> { Database::get(self, key.as_ref(), Column::Messages).map_err(Into::into) } @@ -52,8 +49,8 @@ impl StorageMutate for Database { fn insert( &mut self, key: &MessageId, - value: &CompressedMessage, - ) -> Result, Self::Error> { + value: &Message, + ) -> Result, Self::Error> { // insert primary record let result = Database::insert(self, key.as_ref(), Column::Messages, value)?; @@ -68,11 +65,8 @@ impl StorageMutate for Database { Ok(result) } - fn remove( - &mut self, - key: &MessageId, - ) -> Result, Self::Error> { - let result: Option = + fn remove(&mut self, key: &MessageId) -> Result, Self::Error> { + let result: Option = Database::remove(self, key.as_ref(), Column::Messages)?; if let Some(message) = &result { @@ -118,14 +112,10 @@ impl Database { &self, start: Option, direction: Option, - ) -> impl Iterator> + '_ { + ) -> impl Iterator> + '_ { let start = start.map(|v| v.deref().to_vec()); - self.iter_all_by_start::, CompressedMessage, _>( - Column::Messages, - start, - direction, - ) - .map(|res| res.map(|(_, message)| message)) + self.iter_all_by_start::, Message, _>(Column::Messages, start, direction) + .map(|res| res.map(|(_, message)| message)) } pub fn get_message_config(&self) -> StorageResult>> { @@ -194,7 +184,7 @@ mod tests { #[test] fn owned_message_ids() { let mut db = Database::default(); - let message = CompressedMessage::default(); + let message = Message::default(); // insert a message with the first id let first_id = MessageId::new([1; 32]); diff --git a/crates/fuel-core/src/executor.rs b/crates/fuel-core/src/executor.rs index 3d72a0da7f..c9955531c5 100644 --- a/crates/fuel-core/src/executor.rs +++ b/crates/fuel-core/src/executor.rs @@ -13,6 +13,7 @@ use fuel_core_storage::{ Coins, ContractsLatestUtxo, FuelBlocks, + Messages, Receipts, SpentMessages, Transactions, @@ -38,10 +39,7 @@ use fuel_core_types::{ }, }, entities::{ - coin::{ - CoinStatus, - CompressedCoin, - }, + coin::CompressedCoin, contract::ContractUtxoInfo, }, fuel_asm::{ @@ -743,12 +741,6 @@ where Input::CoinSigned { utxo_id, .. } | Input::CoinPredicate { utxo_id, .. } => { if let Some(coin) = db.storage::().get(utxo_id)? { - if coin.status == CoinStatus::Spent { - return Err(TransactionValidityError::CoinAlreadySpent( - *utxo_id, - ) - .into()) - } if block_height < BlockHeight::from(coin.tx_pointer.block_height()) + coin.maturity @@ -783,17 +775,18 @@ where data, .. } => { + // Eagerly return already spent if status is known. + if db.is_message_spent(message_id)? { + return Err(TransactionValidityError::MessageAlreadySpent( + *message_id, + ) + .into()) + } if let Some(message) = self .relayer .get_message(message_id, &block_da_height) .map_err(|e| ExecutorError::RelayerError(e.into()))? { - if db.is_message_spent(message_id)? { - return Err(TransactionValidityError::MessageAlreadySpent( - *message_id, - ) - .into()) - } if message.da_height > block_da_height { return Err(TransactionValidityError::MessageSpendTooEarly( *message_id, @@ -893,37 +886,22 @@ where { for input in tx.inputs() { match input { - Input::CoinSigned { - utxo_id, - owner, - amount, - asset_id, - maturity, - .. - } - | Input::CoinPredicate { - utxo_id, - owner, - amount, - asset_id, - maturity, - .. - } => { - let mut coin = self.get_coin_or_default( - db, - *utxo_id, - *owner, - *amount, - *asset_id, - (*maturity).into(), - )?; - coin.status = CoinStatus::Spent; - - db.storage::().insert(utxo_id, &coin)?; + Input::CoinSigned { utxo_id, .. } + | Input::CoinPredicate { utxo_id, .. } => { + // prune utxo from db + db.storage::().remove(utxo_id)?; } Input::MessageSigned { message_id, .. } | Input::MessagePredicate { message_id, .. } => { - db.storage::().insert(message_id, &())?; + // mark message id as spent + let was_already_spent = + db.storage::().insert(message_id, &())?; + // ensure message wasn't already marked as spent + if was_already_spent.is_some() { + return Err(ExecutorError::MessageAlreadySpent(*message_id)) + } + // cleanup message contents + db.storage::().remove(message_id)?; } _ => {} } @@ -1194,7 +1172,6 @@ where amount, asset_id, maturity, - status: CoinStatus::Spent, tx_pointer: Default::default(), }) } @@ -1327,7 +1304,6 @@ where amount: *amount, asset_id: *asset_id, maturity: 0u32.into(), - status: CoinStatus::Unspent, tx_pointer: TxPointer::new(block_height.into(), tx_idx), }; @@ -1504,7 +1480,7 @@ mod tests { blockchain::header::ConsensusHeader, entities::message::{ CheckedMessage, - CompressedMessage, + Message, }, fuel_asm::op, fuel_crypto::SecretKey, @@ -2206,114 +2182,6 @@ mod tests { )); } - // invalidate a block if a tx input contains a previously used txo - #[test] - fn executor_invalidates_spent_inputs() { - let mut rng = StdRng::seed_from_u64(2322u64); - - let spent_utxo_id = rng.gen(); - let owner = Default::default(); - let amount = 10; - let asset_id = Default::default(); - let maturity = Default::default(); - let block_created = Default::default(); - let block_created_tx_idx = Default::default(); - let coin = CompressedCoin { - owner, - amount, - asset_id, - maturity, - status: CoinStatus::Spent, - tx_pointer: TxPointer::new(block_created, block_created_tx_idx), - }; - - let db = &mut Database::default(); - // initialize database with coin that was already spent - db.storage::().insert(&spent_utxo_id, &coin).unwrap(); - - // create an input referring to a coin that is already spent - let input = Input::coin_signed( - spent_utxo_id, - owner, - amount, - asset_id, - Default::default(), - 0, - 0, - ); - let output = Output::Change { - to: owner, - amount: 0, - asset_id, - }; - let tx: Transaction = Transaction::script( - 0, - 0, - 0, - vec![], - vec![], - vec![input], - vec![output], - vec![Default::default()], - ) - .into(); - - // setup executor with utxo-validation enabled - let config = Config { - utxo_validation: true, - ..Config::local_node() - }; - let producer = Executor::test(db.clone(), config.clone()); - - let verifier = Executor::test(db.clone(), config); - - let mut block = PartialFuelBlock { - header: Default::default(), - transactions: vec![tx.clone()], - }; - - let mut block_db_transaction = producer.database.transaction(); - let ExecutionData { - skipped_transactions, - .. - } = producer - .execute_transactions( - &mut block_db_transaction, - ExecutionType::Production(&mut block), - ) - .unwrap(); - let produce_result = &skipped_transactions[0].1; - assert!(matches!( - produce_result, - &ExecutorError::TransactionValidity( - TransactionValidityError::CoinAlreadySpent(_) - ) - )); - - // Produced block is valid - let mut block_db_transaction = verifier.database.transaction(); - verifier - .execute_transactions( - &mut block_db_transaction, - ExecutionType::Validation(&mut block), - ) - .unwrap(); - - // Invalidate block by adding transaction with spent coin - block.transactions.push(tx); - let mut block_db_transaction = verifier.database.transaction(); - let verify_result = verifier.execute_transactions( - &mut block_db_transaction, - ExecutionType::Validation(&mut block), - ); - assert!(matches!( - verify_result, - Err(ExecutorError::TransactionValidity( - TransactionValidityError::CoinAlreadySpent(_) - )) - )); - } - // invalidate a block if a tx input doesn't exist #[test] fn executor_invalidates_missing_inputs() { @@ -2545,7 +2413,6 @@ mod tests { amount: 100, asset_id: AssetId::default(), maturity: Default::default(), - status: CoinStatus::Unspent, tx_pointer: Default::default(), }, ) @@ -2558,7 +2425,6 @@ mod tests { amount: 100, asset_id: AssetId::default(), maturity: Default::default(), - status: CoinStatus::Unspent, tx_pointer: Default::default(), }, ) @@ -2577,19 +2443,15 @@ mod tests { }; // The first input should be `Unspent` before execution. - let coin = db - .storage::() + db.storage::() .get(first_input.utxo_id().unwrap()) .unwrap() - .unwrap(); - assert_eq!(coin.status, CoinStatus::Unspent); + .expect("coin should be unspent"); // The second input should be `Unspent` before execution. - let coin = db - .storage::() + db.storage::() .get(second_input.utxo_id().unwrap()) .unwrap() - .unwrap(); - assert_eq!(coin.status, CoinStatus::Unspent); + .expect("coin should be unspent"); let ExecutionResult { block, @@ -2610,16 +2472,14 @@ mod tests { let coin = db .storage::() .get(first_input.utxo_id().unwrap()) - .unwrap() .unwrap(); - assert_eq!(coin.status, CoinStatus::Spent); + // verify coin is pruned from utxo set + assert!(coin.is_none()); // The second input should be `Unspent` after execution. - let coin = db - .storage::() + db.storage::() .get(second_input.utxo_id().unwrap()) .unwrap() - .unwrap(); - assert_eq!(coin.status, CoinStatus::Unspent); + .expect("coin should be unspent"); } #[test] @@ -2702,9 +2562,9 @@ mod tests { .utxo_id() .unwrap(), ) - .unwrap() .unwrap(); - assert_eq!(coin.status, CoinStatus::Spent); + // spent coins should be removed + assert!(coin.is_none()); } #[test] @@ -3071,7 +2931,6 @@ mod tests { amount, asset_id, maturity: Default::default(), - status: CoinStatus::Unspent, tx_pointer: TxPointer::new( starting_block.into(), starting_block_tx_idx, @@ -3112,11 +2971,8 @@ mod tests { .utxo_id() .unwrap(), ) - .unwrap() .unwrap(); - assert_eq!(coin.status, CoinStatus::Spent); - // assert block created from coin before spend is still intact (only a concern when utxo-validation is enabled) - assert_eq!(coin.tx_pointer.block_height(), *starting_block) + assert!(coin.is_none()); } #[test] @@ -3333,7 +3189,7 @@ mod tests { rng: &mut StdRng, da_height: u64, ) -> (Transaction, CheckedMessage) { - let mut message = CompressedMessage { + let mut message = Message { sender: rng.gen(), recipient: rng.gen(), nonce: rng.gen(), @@ -3590,7 +3446,6 @@ mod tests { amount: coin_input.amount().unwrap(), asset_id: *coin_input.asset_id().unwrap(), maturity: (coin_input.maturity().unwrap()).into(), - status: CoinStatus::Unspent, tx_pointer: TxPointer::new(0u32, block_tx_idx), }, ) @@ -3663,7 +3518,6 @@ mod tests { amount: coin_input.amount().unwrap(), asset_id: *coin_input.asset_id().unwrap(), maturity: (coin_input.maturity().unwrap()).into(), - status: CoinStatus::Unspent, tx_pointer: TxPointer::default(), }, ) diff --git a/crates/fuel-core/src/executor/ports.rs b/crates/fuel-core/src/executor/ports.rs index 9a3f3e5b81..615e10531c 100644 --- a/crates/fuel-core/src/executor/ports.rs +++ b/crates/fuel-core/src/executor/ports.rs @@ -1,6 +1,6 @@ use fuel_core_types::{ blockchain::primitives::DaBlockHeight, - entities::message::CompressedMessage, + entities::message::Message, fuel_types::MessageId, }; @@ -11,7 +11,7 @@ pub trait RelayerPort { &self, id: &MessageId, da_height: &DaBlockHeight, - ) -> anyhow::Result>; + ) -> anyhow::Result>; } #[cfg(test)] @@ -23,7 +23,7 @@ impl RelayerPort for crate::database::Database { &self, id: &MessageId, _da_height: &DaBlockHeight, - ) -> anyhow::Result> { + ) -> anyhow::Result> { use fuel_core_storage::{ tables::Messages, StorageAsRef, diff --git a/crates/fuel-core/src/query/balance.rs b/crates/fuel-core/src/query/balance.rs index f99f8eefff..7062b7deda 100644 --- a/crates/fuel-core/src/query/balance.rs +++ b/crates/fuel-core/src/query/balance.rs @@ -50,7 +50,7 @@ impl BalanceQueryData for Database { None, self, ) - .unspent_resources() + .resources() .map(|res| res.map(|resource| *resource.amount())) .try_fold(0u64, |mut balance, res| -> StorageResult<_> { let amount = res?; @@ -76,7 +76,7 @@ impl BalanceQueryData for Database { let mut amounts_per_asset = HashMap::new(); let mut errors = vec![]; - for resource in AssetsQuery::new(&owner, None, None, self).unspent_resources() { + for resource in AssetsQuery::new(&owner, None, None, self).resources() { match resource { Ok(resource) => { *amounts_per_asset.entry(*resource.asset_id()).or_default() += diff --git a/crates/fuel-core/src/query/balance/asset_query.rs b/crates/fuel-core/src/query/balance/asset_query.rs index 9e9faea499..547f328c2f 100644 --- a/crates/fuel-core/src/query/balance/asset_query.rs +++ b/crates/fuel-core/src/query/balance/asset_query.rs @@ -11,13 +11,9 @@ use fuel_core_storage::{ Result as StorageResult, }; use fuel_core_types::{ - entities::{ - coin::CoinStatus, - message::MessageStatus, - resource::{ - Resource, - ResourceId, - }, + entities::resource::{ + Resource, + ResourceId, }, fuel_tx::UtxoId, fuel_types::{ @@ -95,9 +91,7 @@ impl<'a> AssetsQuery<'a> { /// # Note: The resources of different type are not grouped by the `asset_id`. // TODO: Optimize this by creating an index // https://github.com/FuelLabs/fuel-core/issues/588 - pub fn unspent_resources( - &self, - ) -> impl Iterator> + '_ { + pub fn resources(&self) -> impl Iterator> + '_ { let coins_iter = self .database .owned_coins_ids(self.owner, None, IterDirection::Forward) @@ -117,11 +111,10 @@ impl<'a> AssetsQuery<'a> { }) .filter_ok(|coin| { if let Resource::Coin(coin) = coin { - let is_unspent = coin.status == CoinStatus::Unspent; self.assets .as_ref() - .map(|assets| assets.contains(&coin.asset_id) && is_unspent) - .unwrap_or(is_unspent) + .map(|assets| assets.contains(&coin.asset_id)) + .unwrap_or(true) } else { true } @@ -142,13 +135,6 @@ impl<'a> AssetsQuery<'a> { let message = self.database.message(&id)?; Ok(Resource::Message(message)) }) - }) - .filter_ok(|message| { - if let Resource::Message(message) = message { - matches!(message.status, MessageStatus::Unspent) - } else { - true - } }); coins_iter.chain(messages_iter.take_while(|_| { @@ -188,9 +174,7 @@ impl<'a> AssetQuery<'a> { /// Returns the iterator over all valid(spendable, allowed by `exclude`) resources of the `owner` /// for the `asset_id`. - pub fn unspent_resources( - &self, - ) -> impl Iterator> + '_ { - self.query.unspent_resources() + pub fn resources(&self) -> impl Iterator> + '_ { + self.query.resources() } } diff --git a/crates/fuel-core/src/query/message.rs b/crates/fuel-core/src/query/message.rs index c8260ad1cd..1120c2bacd 100644 --- a/crates/fuel-core/src/query/message.rs +++ b/crates/fuel-core/src/query/message.rs @@ -17,10 +17,7 @@ use fuel_core_storage::{ IterDirection, }, not_found, - tables::{ - Messages, - SpentMessages, - }, + tables::Messages, Error as StorageError, Result as StorageResult, StorageAsRef, @@ -34,7 +31,6 @@ use fuel_core_types::{ entities::message::{ Message, MessageProof, - MessageStatus, }, fuel_crypto::Signature, fuel_merkle, @@ -88,13 +84,6 @@ impl MessageQueryData for D { .get(message_id)? .ok_or(not_found!(Messages)) .map(Cow::into_owned) - .and_then(|m| { - if self.storage::().contains_key(message_id)? { - Ok(m.decompress(MessageStatus::Spent)) - } else { - Ok(m.decompress(MessageStatus::Unspent)) - } - }) } fn owned_message_ids( diff --git a/crates/fuel-core/src/resource_query.rs b/crates/fuel-core/src/resource_query.rs index b00f26b01b..c7fa140bce 100644 --- a/crates/fuel-core/src/resource_query.rs +++ b/crates/fuel-core/src/resource_query.rs @@ -114,7 +114,7 @@ impl SpendQuery { /// number of inputs for each asset can't exceed `max_inputs`, otherwise throw an error that query /// can't be satisfied. pub fn largest_first(query: &AssetQuery) -> Result, ResourceQueryError> { - let mut inputs: Vec<_> = query.unspent_resources().try_collect()?; + let mut inputs: Vec<_> = query.resources().try_collect()?; inputs.sort_by_key(|resource| Reverse(*resource.amount())); let mut collected_amount = 0u64; @@ -154,7 +154,7 @@ pub fn random_improve( let mut resources_per_asset = vec![]; for query in spend_query.asset_queries(db) { - let mut inputs: Vec<_> = query.unspent_resources().try_collect()?; + let mut inputs: Vec<_> = query.resources().try_collect()?; inputs.shuffle(&mut thread_rng()); inputs.truncate(query.asset.max); @@ -234,13 +234,9 @@ mod tests { entities::{ coin::{ Coin, - CoinStatus, CompressedCoin, }, - message::{ - CompressedMessage, - Message, - }, + message::Message, }, fuel_asm::Word, fuel_tx::*, @@ -867,7 +863,6 @@ mod tests { amount, asset_id, maturity: Default::default(), - status: CoinStatus::Unspent, tx_pointer: Default::default(), }; @@ -877,15 +872,11 @@ mod tests { coin.uncompress(id) } - pub fn make_message( - &mut self, - owner: Address, - amount: Word, - ) -> CompressedMessage { + pub fn make_message(&mut self, owner: Address, amount: Word) -> Message { let nonce = self.last_message_index; self.last_message_index += 1; - let message = CompressedMessage { + let message = Message { sender: Default::default(), recipient: owner, nonce, diff --git a/crates/fuel-core/src/schema/coin.rs b/crates/fuel-core/src/schema/coin.rs index d4de52dbc7..d5adb0520a 100644 --- a/crates/fuel-core/src/schema/coin.rs +++ b/crates/fuel-core/src/schema/coin.rs @@ -18,25 +18,14 @@ use async_graphql::{ EmptyFields, }, Context, - Enum, InputObject, Object, }; use fuel_core_types::{ - entities::coin::{ - Coin as CoinModel, - CoinStatus as CoinStatusModel, - }, + entities::coin::Coin as CoinModel, fuel_tx, }; -#[derive(Enum, Copy, Clone, Eq, PartialEq)] -#[graphql(remote = "CoinStatusModel")] -pub enum CoinStatus { - Unspent, - Spent, -} - pub struct Coin(pub(crate) CoinModel); #[Object] @@ -61,11 +50,6 @@ impl Coin { self.0.maturity.into() } - /// The spendable status of the coin - async fn status(&self) -> CoinStatus { - self.0.status.into() - } - /// TxPointer - the height of the block this coin was created in async fn block_created(&self) -> U64 { u64::from(self.0.tx_pointer.block_height()).into() diff --git a/crates/fuel-core/src/schema/message.rs b/crates/fuel-core/src/schema/message.rs index 35efc3fef0..c4e1e6d290 100644 --- a/crates/fuel-core/src/schema/message.rs +++ b/crates/fuel-core/src/schema/message.rs @@ -22,7 +22,6 @@ use async_graphql::{ EmptyFields, }, Context, - Enum, Object, }; use fuel_core_storage::iter::IntoBoxedIter; @@ -59,17 +58,6 @@ impl Message { async fn da_height(&self) -> U64 { self.0.da_height.as_u64().into() } - - async fn status(&self) -> MessageStatus { - self.0.status.into() - } -} - -#[derive(Enum, Copy, Clone, Eq, PartialEq)] -#[graphql(remote = "entities::message::MessageStatus")] -pub enum MessageStatus { - Unspent, - Spent, } #[derive(Default)] diff --git a/crates/fuel-core/src/service/adapters/executor.rs b/crates/fuel-core/src/service/adapters/executor.rs index f431a5c461..cc7875e44b 100644 --- a/crates/fuel-core/src/service/adapters/executor.rs +++ b/crates/fuel-core/src/service/adapters/executor.rs @@ -10,7 +10,7 @@ use fuel_core_storage::{ }; use fuel_core_types::{ blockchain::primitives::DaBlockHeight, - entities::message::CompressedMessage, + entities::message::Message, fuel_tx::Receipt, fuel_types::MessageId, services::executor::{ @@ -59,7 +59,7 @@ impl crate::executor::RelayerPort for MaybeRelayerAdapter { &self, id: &MessageId, da_height: &DaBlockHeight, - ) -> anyhow::Result> { + ) -> anyhow::Result> { #[cfg(feature = "relayer")] { match self.relayer_synced.as_ref() { diff --git a/crates/fuel-core/src/service/adapters/graphql_api.rs b/crates/fuel-core/src/service/adapters/graphql_api.rs index 916589059d..c924b0afc0 100644 --- a/crates/fuel-core/src/service/adapters/graphql_api.rs +++ b/crates/fuel-core/src/service/adapters/graphql_api.rs @@ -137,10 +137,7 @@ impl DatabaseMessages for Database { ) -> BoxedIter<'_, StorageResult> { self.all_messages(start_message_id, Some(direction)) .map(|result| match result { - Ok(message) => { - let id = message.id(); - Ok(message.decompress(self.message_status(&id)?)) - } + Ok(message) => Ok(message), Err(err) => Err(StorageError::from(err)), }) .into_boxed() diff --git a/crates/fuel-core/src/service/adapters/txpool.rs b/crates/fuel-core/src/service/adapters/txpool.rs index 0814fae6d5..30ad4dbc9a 100644 --- a/crates/fuel-core/src/service/adapters/txpool.rs +++ b/crates/fuel-core/src/service/adapters/txpool.rs @@ -21,7 +21,7 @@ use fuel_core_types::{ blockchain::primitives::BlockHeight, entities::{ coin::CompressedCoin, - message::CompressedMessage, + message::Message, }, fuel_tx::{ Transaction, @@ -130,10 +130,7 @@ impl fuel_core_txpool::ports::TxPoolDb for Database { self.storage::().contains_key(contract_id) } - fn message( - &self, - message_id: &MessageId, - ) -> StorageResult> { + fn message(&self, message_id: &MessageId) -> StorageResult> { self.storage::() .get(message_id) .map(|t| t.map(|t| t.as_ref().clone())) diff --git a/crates/fuel-core/src/service/genesis.rs b/crates/fuel-core/src/service/genesis.rs index ef7623bbec..47fb0e17f0 100644 --- a/crates/fuel-core/src/service/genesis.rs +++ b/crates/fuel-core/src/service/genesis.rs @@ -41,12 +41,9 @@ use fuel_core_types::{ SealedBlock, }, entities::{ - coin::{ - CoinStatus, - CompressedCoin, - }, + coin::CompressedCoin, contract::ContractUtxoInfo, - message::CompressedMessage, + message::Message, }, fuel_merkle::binary, fuel_tx::{ @@ -195,7 +192,6 @@ fn init_coin_state( amount: coin.amount, asset_id: coin.asset_id, maturity: coin.maturity.unwrap_or_default(), - status: CoinStatus::Unspent, tx_pointer: TxPointer::new( coin.tx_pointer_block_height .map(|b| b.into()) @@ -344,7 +340,7 @@ fn init_da_messages( if let Some(state) = &state { if let Some(message_state) = &state.messages { for msg in message_state { - let message = CompressedMessage { + let message = Message { sender: msg.sender, recipient: msg.recipient, nonce: msg.nonce, @@ -643,7 +639,7 @@ mod tests { maybe_initialize_state(&config, db).unwrap(); - let expected_msg: CompressedMessage = msg.into(); + let expected_msg: Message = msg.into(); let ret_msg = db .storage::() diff --git a/crates/services/relayer/src/log.rs b/crates/services/relayer/src/log.rs index fd28eecbed..0c65c45d07 100644 --- a/crates/services/relayer/src/log.rs +++ b/crates/services/relayer/src/log.rs @@ -10,7 +10,7 @@ use ethers_core::{ }; use fuel_core_types::{ blockchain::primitives::DaBlockHeight, - entities::message::CompressedMessage, + entities::message::Message, fuel_types::{ Address, Word, @@ -28,7 +28,7 @@ pub struct MessageLog { pub da_height: DaBlockHeight, } -impl From<&MessageLog> for CompressedMessage { +impl From<&MessageLog> for Message { fn from(message: &MessageLog) -> Self { Self { sender: message.sender, diff --git a/crates/services/relayer/src/mock_db.rs b/crates/services/relayer/src/mock_db.rs index 6400534da0..7b9e147520 100644 --- a/crates/services/relayer/src/mock_db.rs +++ b/crates/services/relayer/src/mock_db.rs @@ -9,7 +9,7 @@ use fuel_core_types::{ blockchain::primitives::DaBlockHeight, entities::message::{ CheckedMessage, - CompressedMessage, + Message, }, fuel_tx::MessageId, }; @@ -26,7 +26,7 @@ use std::{ #[derive(Default)] pub struct Data { - pub messages: BTreeMap>, + pub messages: BTreeMap>, pub finalized_da_height: Option, } @@ -40,7 +40,7 @@ pub struct MockDb { } impl MockDb { - pub fn get_message(&self, id: &MessageId) -> Option { + pub fn get_message(&self, id: &MessageId) -> Option { self.data .lock() .unwrap() diff --git a/crates/services/relayer/src/ports/tests.rs b/crates/services/relayer/src/ports/tests.rs index 82b67b78d5..aeb325621f 100644 --- a/crates/services/relayer/src/ports/tests.rs +++ b/crates/services/relayer/src/ports/tests.rs @@ -1,7 +1,7 @@ use std::borrow::Cow; use fuel_core_storage::test_helpers::MockStorage; -use fuel_core_types::entities::message::CompressedMessage; +use fuel_core_types::entities::message::Message; use test_case::test_case; use super::*; @@ -22,7 +22,7 @@ fn test_insert_messages() { .returning(|_| Ok(Some(std::borrow::Cow::Owned(9u64.into())))); let mut db = db.into_transactional(); - let m = CompressedMessage { + let m = Message { amount: 10, da_height: 12u64.into(), ..Default::default() @@ -39,7 +39,7 @@ fn test_insert_messages() { fn insert_always_raises_da_height_monotonically() { let messages: Vec<_> = (0..10) .map(|i| { - CompressedMessage { + Message { amount: i, da_height: i.into(), ..Default::default() diff --git a/crates/services/relayer/src/service.rs b/crates/services/relayer/src/service.rs index 373cb46042..c1b09c41c9 100644 --- a/crates/services/relayer/src/service.rs +++ b/crates/services/relayer/src/service.rs @@ -34,7 +34,7 @@ use fuel_core_storage::{ }; use fuel_core_types::{ blockchain::primitives::DaBlockHeight, - entities::message::CompressedMessage, + entities::message::Message, fuel_types::MessageId, }; use futures::StreamExt; @@ -279,7 +279,7 @@ impl SharedState { &self, id: &MessageId, da_height: &DaBlockHeight, - ) -> anyhow::Result> + ) -> anyhow::Result> where D: StorageInspect, { diff --git a/crates/services/relayer/src/service/get_logs.rs b/crates/services/relayer/src/service/get_logs.rs index 3236305818..aaa56e33bf 100644 --- a/crates/services/relayer/src/service/get_logs.rs +++ b/crates/services/relayer/src/service/get_logs.rs @@ -66,9 +66,7 @@ where .filter_map(|event| match EthEventLog::try_from(&event) { Ok(event) => { match event { - EthEventLog::Message(m) => { - Some(Ok(CompressedMessage::from(&m).check())) - } + EthEventLog::Message(m) => Some(Ok(Message::from(&m).check())), // TODO: Log out ignored messages. EthEventLog::Ignored => None, } diff --git a/crates/services/relayer/src/test_helpers.rs b/crates/services/relayer/src/test_helpers.rs index b6672389f1..3dc071c214 100644 --- a/crates/services/relayer/src/test_helpers.rs +++ b/crates/services/relayer/src/test_helpers.rs @@ -24,7 +24,7 @@ use ethers_core::{ use fuel_core_types::{ entities::message::{ CheckedMessage, - CompressedMessage, + Message, }, fuel_types::Address, }; @@ -42,7 +42,7 @@ pub trait EvtToLog { impl LogTestHelper for Log { fn to_msg(&self) -> CheckedMessage { match EthEventLog::try_from(self).unwrap() { - EthEventLog::Message(m) => CompressedMessage::from(&m).check(), + EthEventLog::Message(m) => Message::from(&m).check(), _ => panic!("This log does not form a message"), } } diff --git a/crates/services/txpool/src/containers/dependency.rs b/crates/services/txpool/src/containers/dependency.rs index 76e25f2c8c..12a177a797 100644 --- a/crates/services/txpool/src/containers/dependency.rs +++ b/crates/services/txpool/src/containers/dependency.rs @@ -6,10 +6,7 @@ use crate::{ }; use anyhow::anyhow; use fuel_core_types::{ - entities::coin::{ - CoinStatus, - CompressedCoin, - }, + entities::coin::CompressedCoin, fuel_tx::{ Input, Output, @@ -156,14 +153,12 @@ impl Dependency { ) -> anyhow::Result<()> { match input { Input::CoinSigned { - utxo_id, owner, amount, asset_id, .. } | Input::CoinPredicate { - utxo_id, owner, amount, asset_id, @@ -178,9 +173,6 @@ impl Dependency { if *asset_id != coin.asset_id { return Err(Error::NotInsertedIoWrongAssetId.into()) } - if coin.status == CoinStatus::Spent { - return Err(Error::NotInsertedInputUtxoIdSpent(*utxo_id).into()) - } Ok(()) } _ => Err(anyhow!("Use it only for coin output check")), diff --git a/crates/services/txpool/src/mock_db.rs b/crates/services/txpool/src/mock_db.rs index de47da0eb7..f0beb33e13 100644 --- a/crates/services/txpool/src/mock_db.rs +++ b/crates/services/txpool/src/mock_db.rs @@ -7,7 +7,7 @@ use fuel_core_types::{ Coin, CompressedCoin, }, - message::CompressedMessage, + message::Message, }, fuel_tx::{ Contract, @@ -31,7 +31,7 @@ use std::{ pub struct Data { pub coins: HashMap, pub contracts: HashMap, - pub messages: HashMap, + pub messages: HashMap, pub spent_messages: HashSet, } @@ -49,7 +49,7 @@ impl MockDb { .insert(coin.utxo_id, coin.compress()); } - pub fn insert_message(&self, message: CompressedMessage) { + pub fn insert_message(&self, message: Message) { self.data .lock() .unwrap() @@ -82,10 +82,7 @@ impl TxPoolDb for MockDb { .contains_key(contract_id)) } - fn message( - &self, - message_id: &MessageId, - ) -> StorageResult> { + fn message(&self, message_id: &MessageId) -> StorageResult> { Ok(self .data .lock() diff --git a/crates/services/txpool/src/ports.rs b/crates/services/txpool/src/ports.rs index 5afad26f1a..d5505fe9e0 100644 --- a/crates/services/txpool/src/ports.rs +++ b/crates/services/txpool/src/ports.rs @@ -4,7 +4,7 @@ use fuel_core_types::{ blockchain::primitives::BlockHeight, entities::{ coin::CompressedCoin, - message::CompressedMessage, + message::Message, }, fuel_tx::{ Transaction, @@ -52,8 +52,7 @@ pub trait TxPoolDb: Send + Sync { fn contract_exist(&self, contract_id: &ContractId) -> StorageResult; - fn message(&self, message_id: &MessageId) - -> StorageResult>; + fn message(&self, message_id: &MessageId) -> StorageResult>; fn is_message_spent(&self, message_id: &MessageId) -> StorageResult; diff --git a/crates/services/txpool/src/test_helpers.rs b/crates/services/txpool/src/test_helpers.rs index d80584989c..1fa241fab3 100644 --- a/crates/services/txpool/src/test_helpers.rs +++ b/crates/services/txpool/src/test_helpers.rs @@ -5,7 +5,6 @@ use crate::MockDb; use fuel_core_types::{ entities::coin::{ Coin, - CoinStatus, CompressedCoin, }, fuel_asm::op, @@ -39,7 +38,6 @@ pub(crate) fn add_coin_to_state(input: Input, mock_db: Option<&MockDb>) -> (Coin amount: TEST_COIN_AMOUNT, asset_id: *input.asset_id().unwrap(), maturity: Default::default(), - status: CoinStatus::Unspent, tx_pointer: Default::default(), }; let utxo_id = *input.utxo_id().unwrap(); diff --git a/crates/services/txpool/src/txpool/test_helpers.rs b/crates/services/txpool/src/txpool/test_helpers.rs index 1ea1e7d761..0b91a95847 100644 --- a/crates/services/txpool/src/txpool/test_helpers.rs +++ b/crates/services/txpool/src/txpool/test_helpers.rs @@ -1,5 +1,5 @@ use fuel_core_types::{ - entities::message::CompressedMessage, + entities::message::Message, fuel_asm::op, fuel_tx::{ Contract, @@ -12,11 +12,9 @@ use fuel_core_types::{ fuel_types::Word, }; -pub(crate) fn create_message_predicate_from_message( - amount: Word, -) -> (CompressedMessage, Input) { +pub(crate) fn create_message_predicate_from_message(amount: Word) -> (Message, Input) { let predicate = vec![op::ret(1)].into_iter().collect::>(); - let message = CompressedMessage { + let message = Message { sender: Default::default(), recipient: Input::predicate_owner(&predicate), nonce: 0, diff --git a/crates/services/txpool/src/txpool/tests.rs b/crates/services/txpool/src/txpool/tests.rs index 1e378a000f..138dacd31a 100644 --- a/crates/services/txpool/src/txpool/tests.rs +++ b/crates/services/txpool/src/txpool/tests.rs @@ -20,7 +20,6 @@ use crate::{ TxPool, }; use fuel_core_types::{ - entities::coin::CoinStatus, fuel_asm::{ op, RegId, @@ -256,35 +255,6 @@ fn try_to_insert_tx2_missing_utxo() { )); } -#[test] -fn tx_try_to_use_spent_coin() { - let mut rng = StdRng::seed_from_u64(0); - let db = MockDb::default(); - let mut txpool = TxPool::new(Default::default(), db); - - // put a spent coin into the database - let (mut coin, input) = setup_coin(&mut rng, None); - coin.status = CoinStatus::Spent; - txpool.database.insert_coin(coin.clone()); - - let tx = Arc::new( - TransactionBuilder::script(vec![], vec![]) - .gas_price(10) - .gas_limit(GAS_LIMIT) - .add_input(input) - .finalize_as_transaction(), - ); - - // attempt to insert the tx with an already spent coin - let err = txpool - .insert_inner(tx) - .expect_err("Tx should be Err, got Ok"); - assert!(matches!( - err.downcast_ref::(), - Some(Error::NotInsertedInputUtxoIdSpent(id)) if id == &coin.utxo_id - )); -} - #[test] fn higher_priced_tx_removes_lower_priced_tx() { let mut rng = StdRng::seed_from_u64(0); diff --git a/crates/storage/src/tables.rs b/crates/storage/src/tables.rs index 613e2007db..e32045ddc6 100644 --- a/crates/storage/src/tables.rs +++ b/crates/storage/src/tables.rs @@ -11,7 +11,7 @@ use fuel_core_types::{ entities::{ coin::CompressedCoin, contract::ContractUtxoInfo, - message::CompressedMessage, + message::Message, }, fuel_tx::{ Receipt, @@ -98,7 +98,7 @@ impl Mappable for Messages { type Key = Self::OwnedKey; type OwnedKey = MessageId; type Value = Self::OwnedValue; - type OwnedValue = CompressedMessage; + type OwnedValue = Message; } /// The storage table that indicates if the [`Message`](crate::model::Message) is spent or not. diff --git a/crates/types/src/entities/coin.rs b/crates/types/src/entities/coin.rs index cd0a4782d5..06762df619 100644 --- a/crates/types/src/entities/coin.rs +++ b/crates/types/src/entities/coin.rs @@ -31,8 +31,6 @@ pub struct Coin { pub asset_id: AssetId, /// This coin cannot be spent until the given height pub maturity: BlockHeight, - /// Whether a coin has been spent or not - pub status: CoinStatus, /// Indexes the block and transaction this coin originated from pub tx_pointer: TxPointer, } @@ -45,7 +43,6 @@ impl Coin { amount: self.amount, asset_id: self.asset_id, maturity: self.maturity, - status: self.status, tx_pointer: self.tx_pointer, } } @@ -65,9 +62,6 @@ pub struct CompressedCoin { pub asset_id: AssetId, /// This coin cannot be spent until the given height pub maturity: BlockHeight, - // TODO: Remove `status` when we will not use it for API functionality. - /// Whether a coin has been spent or not - pub status: CoinStatus, /// Indexes the block and transaction this coin originated from pub tx_pointer: TxPointer, } @@ -81,19 +75,7 @@ impl CompressedCoin { amount: self.amount, asset_id: self.asset_id, maturity: self.maturity, - status: self.status, tx_pointer: self.tx_pointer, } } } - -/// Whether a coin has been spent or not -#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] -#[derive(Debug, Copy, Clone, Eq, PartialOrd, PartialEq)] -#[repr(u8)] -pub enum CoinStatus { - /// Coin has not been spent - Unspent, - /// Coin has been spent - Spent, -} diff --git a/crates/types/src/entities/message.rs b/crates/types/src/entities/message.rs index ab73d78d50..2669c99fd7 100644 --- a/crates/types/src/entities/message.rs +++ b/crates/types/src/entities/message.rs @@ -18,24 +18,6 @@ use crate::{ }; use core::ops::Deref; -/// Message send from Da layer to fuel by bridge -#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] -#[derive(Debug, Default, Clone, PartialEq, Eq)] -pub struct CompressedMessage { - /// Account that sent the message from the da layer - pub sender: Address, - /// Fuel account receiving the message - pub recipient: Address, - /// Nonce must be unique. It's used to prevent replay attacks - pub nonce: Word, - /// The amount of the base asset of Fuel chain sent along this message - pub amount: Word, - /// Arbitrary message data - pub data: Vec, - /// The block height from the parent da layer that originated this message - pub da_height: DaBlockHeight, -} - /// Message send from Da layer to fuel by bridge #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] #[derive(Debug, Default, Clone, PartialEq, Eq)] @@ -52,11 +34,9 @@ pub struct Message { pub data: Vec, /// The block height from the parent da layer that originated this message pub da_height: DaBlockHeight, - /// Whether a message has been spent or not - pub status: MessageStatus, } -impl CompressedMessage { +impl Message { /// Computed message id pub fn id(&self) -> MessageId { Input::compute_message_id( @@ -73,50 +53,12 @@ impl CompressedMessage { let id = self.id(); CheckedMessage { message: self, id } } - - /// Decompress the message - pub fn decompress(self, status: MessageStatus) -> Message { - Message { - status, - sender: self.sender, - recipient: self.recipient, - nonce: self.nonce, - amount: self.amount, - data: self.data, - da_height: self.da_height, - } - } -} - -impl Message { - /// Compress the message - pub fn compress(self) -> CompressedMessage { - CompressedMessage { - sender: self.sender, - recipient: self.recipient, - nonce: self.nonce, - amount: self.amount, - data: self.data, - da_height: self.da_height, - } - } - - /// Computed message id - pub fn id(&self) -> MessageId { - Input::compute_message_id( - &self.sender, - &self.recipient, - self.nonce, - self.amount, - &self.data, - ) - } } /// A message associated with precomputed id #[derive(Debug, Clone, Eq, PartialEq)] pub struct CheckedMessage { - message: CompressedMessage, + message: Message, id: MessageId, } @@ -174,30 +116,30 @@ impl CheckedMessage { } /// Returns the message. - pub fn message(&self) -> &CompressedMessage { + pub fn message(&self) -> &Message { &self.message } /// Unpacks inner values of the checked message. - pub fn unpack(self) -> (MessageId, CompressedMessage) { + pub fn unpack(self) -> (MessageId, Message) { (self.id, self.message) } } -impl From for CompressedMessage { +impl From for Message { fn from(checked_message: CheckedMessage) -> Self { checked_message.message } } -impl AsRef for CheckedMessage { - fn as_ref(&self) -> &CompressedMessage { +impl AsRef for CheckedMessage { + fn as_ref(&self) -> &Message { &self.message } } impl Deref for CheckedMessage { - type Target = CompressedMessage; + type Target = Message; fn deref(&self) -> &Self::Target { &self.message diff --git a/crates/types/src/services/executor.rs b/crates/types/src/services/executor.rs index f35fd70e4c..134c13b5e7 100644 --- a/crates/types/src/services/executor.rs +++ b/crates/types/src/services/executor.rs @@ -270,6 +270,8 @@ pub enum Error { InvalidBlockId, #[error("No matching utxo for contract id ${0:#x}")] ContractUtxoMissing(ContractId), + #[error("message already spent {0:#x}")] + MessageAlreadySpent(MessageId), #[error("Expected input of type {0}")] InputTypeMismatch(String), } diff --git a/deployment/charts/Chart.yaml b/deployment/charts/Chart.yaml index 53cfec7057..b8637604bc 100644 --- a/deployment/charts/Chart.yaml +++ b/deployment/charts/Chart.yaml @@ -2,5 +2,5 @@ apiVersion: v2 name: ${fuel_core_service_name} description: ${fuel_core_service_name} Helm Chart type: application -appVersion: "0.17.3" +appVersion: "0.17.4" version: 0.1.0 diff --git a/deployment/ingress/eks/fuel-core-ingress.yaml b/deployment/ingress/eks/fuel-core-ingress.yaml index f39dd7bb86..5d56ac8746 100644 --- a/deployment/ingress/eks/fuel-core-ingress.yaml +++ b/deployment/ingress/eks/fuel-core-ingress.yaml @@ -9,8 +9,12 @@ metadata: nginx.ingress.kubernetes.io/ssl-redirect: "false" nginx.ingress.kubernetes.io/force-ssl-redirect: "false" nginx.ingress.kubernetes.io/rewrite-target: / - cert-manager.io/cluster-issuer: "letsencrypt-prod" + nginx.ingress.kubernetes.io/affinity-mode: persistent + nginx.ingress.kubernetes.io/session-cookie-expires: "172800" + nginx.ingress.kubernetes.io/session-cookie-max-age: "172800" + cert-manager.io/cluster-issuer: "letsencrypt-prod" kubernetes.io/ingress.class: "nginx" + nginx.ingress.kubernetes.io/affinity: cookie spec: rules: - host: ${fuel_core_ingress_dns} diff --git a/tests/tests/coin.rs b/tests/tests/coin.rs index 09151fc100..8fdb8320ca 100644 --- a/tests/tests/coin.rs +++ b/tests/tests/coin.rs @@ -15,10 +15,7 @@ use fuel_core_storage::{ StorageAsMut, }; use fuel_core_types::{ - entities::coin::{ - Coin, - CoinStatus, - }, + entities::coin::Coin, fuel_asm::*, fuel_tx::*, }; @@ -56,7 +53,6 @@ async fn first_5_coins( amount: i as Word, asset_id: Default::default(), maturity: Default::default(), - status: fuel_core_types::entities::coin::CoinStatus::Unspent, tx_pointer: Default::default(), }) .collect(); @@ -104,7 +100,6 @@ async fn only_asset_id_filtered_coins() { amount: i as Word, asset_id: if i <= 5 { asset_id } else { Default::default() }, maturity: Default::default(), - status: CoinStatus::Unspent, tx_pointer: Default::default(), }) .collect(); @@ -145,7 +140,7 @@ async fn only_asset_id_filtered_coins() { #[rstest] #[tokio::test] -async fn get_unspent_and_spent_coins( +async fn get_coins_forwards_backwards( #[values(Address::default(), Address::from([16; 32]))] owner: Address, #[values(AssetId::from([1u8; 32]), AssetId::from([32u8; 32]))] asset_id: AssetId, ) { @@ -157,11 +152,6 @@ async fn get_unspent_and_spent_coins( amount: i as Word, asset_id, maturity: Default::default(), - status: if i <= 5 { - CoinStatus::Unspent - } else { - CoinStatus::Spent - }, tx_pointer: Default::default(), }) .collect(); diff --git a/tests/tests/relayer.rs b/tests/tests/relayer.rs index 4324cf712f..f058b33e1f 100644 --- a/tests/tests/relayer.rs +++ b/tests/tests/relayer.rs @@ -14,7 +14,6 @@ use fuel_core::{ }, }; use fuel_core_client::client::{ - schema::message::MessageStatus, types::TransactionStatus, FuelClient, PageDirection, @@ -35,10 +34,7 @@ use fuel_core_storage::{ use fuel_core_types::{ fuel_asm::*, fuel_crypto::*, - fuel_tx::{ - field::Inputs, - *, - }, + fuel_tx::*, }; use hyper::{ service::{ @@ -169,6 +165,21 @@ async fn messages_are_spendable_after_relayer_is_synced() { // wait for relayer to catch up to eth node srv.await_relayer_synced().await.unwrap(); + // verify we have downloaded the message + let query = client + .messages( + None, + PaginationRequest { + cursor: None, + results: 1, + direction: PageDirection::Forward, + }, + ) + .await + .unwrap(); + // we should have one message before spending + assert_eq!(query.results.len(), 1); + // attempt to spend the message downloaded from the relayer let tx = TransactionBuilder::script(vec![op::ret(0)].into_iter().collect(), vec![]) .gas_limit(10_000) @@ -201,19 +212,8 @@ async fn messages_are_spendable_after_relayer_is_synced() { ) .await .unwrap(); - assert_eq!(query.results.len(), 1); - - // verify that the message id matches what we spent - let message_id = tx.inputs()[0] - .message_id() - .expect("first input should be a message"); - assert_eq!( - MessageId::from(query.results[0].message_id.clone()), - *message_id - ); - - // verify the spent status of the message - assert_eq!(query.results[0].status, MessageStatus::Spent,); + // there should be no messages after spending + assert_eq!(query.results.len(), 0); srv.stop_and_await().await.unwrap(); eth_node_handle.shutdown.send(()).unwrap();