diff --git a/.github/workflows/typos.yml b/.github/workflows/typos.yml index c07523a8b..c2ad4525c 100644 --- a/.github/workflows/typos.yml +++ b/.github/workflows/typos.yml @@ -15,4 +15,4 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - - uses: crate-ci/typos@v1.16.25 + - uses: crate-ci/typos@v1.16.26 diff --git a/Cargo.lock b/Cargo.lock index c3a99ae6f..7508de694 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -19,9 +19,9 @@ checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" [[package]] name = "ahash" -version = "0.8.6" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91429305e9f0a25f6205c5b8e0d2db09e0708a7a6df0f42212bb56c32c8ac97a" +checksum = "77c3a9648d43b9cd48db467b3f87fdd6e146bcc88ab0180006cef2179fe11d01" dependencies = [ "cfg-if", "once_cell", @@ -80,14 +80,14 @@ checksum = "1a047897373be4bbb0224c1afdabca92648dc57a9c9ef6e7b0be3aff7a859c83" dependencies = [ "proc-macro2", "quote", - "syn 2.0.43", + "syn 2.0.48", ] [[package]] name = "anstream" -version = "0.6.5" +version = "0.6.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d664a92ecae85fd0a7392615844904654d1d5f5514837f471ddef4a057aba1b6" +checksum = "6e2e1ebcb11de5c03c67de28a7df593d32191b44939c482e97702baaaa6ab6a5" dependencies = [ "anstyle", "anstyle-parse", @@ -99,9 +99,9 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.4" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7079075b41f533b8c61d2a4d073c4676e1f8b249ff94a393b0595db304e0dd87" +checksum = "2faccea4cc4ab4a667ce676a30e8ec13922a692c99bb8f5b11f1502c72e04220" [[package]] name = "anstyle-parse" @@ -133,9 +133,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.77" +version = "1.0.79" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9d19de80eff169429ac1e9f48fffb163916b448a44e8e046186232046d9e1f9" +checksum = "080e9890a082662b09c1ad45f567faeeb47f22b5fb23895fbe1e651e718e25ca" [[package]] name = "arrayvec" @@ -145,14 +145,13 @@ checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" [[package]] name = "auto_impl" -version = "1.1.0" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fee3da8ef1276b0bee5dd1c7258010d8fffd31801447323115a25560e1327b89" +checksum = "823b8bb275161044e2ac7a25879cb3e2480cb403e3943022c7c769c599b756aa" dependencies = [ - "proc-macro-error", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.48", ] [[package]] @@ -194,7 +193,7 @@ version = "0.66.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f2b84e06fc203107bfbad243f4aba2af864eb7db3b1cf46ea0a023b0b433d2a7" dependencies = [ - "bitflags 2.4.1", + "bitflags 2.4.2", "cexpr", "clang-sys", "lazy_static", @@ -207,7 +206,7 @@ dependencies = [ "regex", "rustc-hash", "shlex", - "syn 2.0.43", + "syn 2.0.48", "which", ] @@ -219,9 +218,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.4.1" +version = "2.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07" +checksum = "ed570934406eb16438a4e976b1b4500774099c13b8cb96eec99f620f05090ddf" [[package]] name = "bitvec" @@ -256,6 +255,12 @@ dependencies = [ "zeroize", ] +[[package]] +name = "bumpalo" +version = "3.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec" + [[package]] name = "byteorder" version = "1.5.0" @@ -294,9 +299,9 @@ dependencies = [ [[package]] name = "cargo-platform" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e34637b3140142bdf929fb439e8aa4ebad7651ebf7b1080b3930aa16ac1459ff" +checksum = "ceed8ef69d8518a5dda55c07425450b58a4e1946f4951eab6d7191ee86c2443d" dependencies = [ "serde", ] @@ -354,9 +359,9 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "clang-sys" -version = "1.6.1" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c688fc74432808e3eb684cae8830a86be1d66a2bd58e1f248ed0960a590baf6f" +checksum = "67523a3b4be3ce1989d607a828d036249522dd9c1c8de7f4dd2dae43a37369d1" dependencies = [ "glob", "libc", @@ -365,9 +370,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.4.11" +version = "4.4.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfaff671f6b22ca62406885ece523383b9b64022e341e53e009a62ebc47a45f2" +checksum = "1e578d6ec4194633722ccf9544794b71b1385c3c027efe0c55db226fc880865c" dependencies = [ "clap_builder", "clap_derive", @@ -375,9 +380,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.4.11" +version = "4.4.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a216b506622bb1d316cd51328dce24e07bdff4a6128a47c7e7fad11878d5adbb" +checksum = "4df4df40ec50c46000231c914968278b1eb05098cf8f1b3a518a95030e71d1c7" dependencies = [ "anstream", "anstyle", @@ -394,7 +399,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.43", + "syn 2.0.48", ] [[package]] @@ -489,9 +494,9 @@ checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" [[package]] name = "cpufeatures" -version = "0.2.11" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce420fe07aecd3e67c5f910618fe65e94158f6dcc0adf44e00d69ce2bdfe0fd0" +checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" dependencies = [ "libc", ] @@ -526,9 +531,9 @@ dependencies = [ [[package]] name = "cxx" -version = "1.0.111" +version = "1.0.115" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9fc0c733f71e58dedf4f034cd2a266f80b94cc9ed512729e1798651b68c2cba" +checksum = "8de00f15a6fa069c99b88c5c78c4541d0e7899a33b86f7480e23df2431fce0bc" dependencies = [ "cc", "cxxbridge-flags", @@ -538,9 +543,9 @@ dependencies = [ [[package]] name = "cxx-build" -version = "1.0.111" +version = "1.0.115" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51bc81d2664db24cf1d35405f66e18a85cffd4d49ab930c71a5c6342a410f38c" +checksum = "0a71e1e631fa2f2f5f92e8b0d860a00c198c6771623a6cefcc863e3554f0d8d6" dependencies = [ "cc", "codespan-reporting", @@ -548,24 +553,24 @@ dependencies = [ "proc-macro2", "quote", "scratch", - "syn 2.0.43", + "syn 2.0.48", ] [[package]] name = "cxxbridge-flags" -version = "1.0.111" +version = "1.0.115" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8511afbe34ea242697784da5cb2c5d4a0afb224ca8b136bdf93bfe180cbe5884" +checksum = "6f3fed61d56ba497c4efef9144dfdbaa25aa58f2f6b3a7cf441d4591c583745c" [[package]] name = "cxxbridge-macro" -version = "1.0.111" +version = "1.0.115" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c6888cd161769d65134846d4d4981d5a6654307cc46ec83fb917e530aea5f84" +checksum = "8908e380a8efd42150c017b0cfa31509fc49b6d47f7cb6b33e93ffb8f4e3661e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.43", + "syn 2.0.48", ] [[package]] @@ -667,13 +672,13 @@ checksum = "ef1a6892d9eef45c8fa6b9e0086428a2cca8491aca8f787c534a3d6d0bcb3ced" [[package]] name = "enumn" -version = "0.1.12" +version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2ad8cef1d801a4686bfd8919f0b30eac4c8e48968c437a6405ded4fb5272d2b" +checksum = "6fd000fd6988e73bbe993ea3db9b1aa64906ab88766d654973924340c8cddb42" dependencies = [ "proc-macro2", "quote", - "syn 2.0.43", + "syn 2.0.48", ] [[package]] @@ -694,9 +699,9 @@ dependencies = [ [[package]] name = "etc" -version = "0.1.16" +version = "0.1.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f7935cc590ee512e8073c4fe82b85e056216324e65aed24459204e3f6d9f72e" +checksum = "ed70d0ae6f3c7bc89341edb96cce201d5e009b7bb038b72c98d210acffbce2e3" [[package]] name = "evm-opcodes" @@ -707,9 +712,9 @@ dependencies = [ [[package]] name = "eyre" -version = "0.6.11" +version = "0.6.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6267a1fa6f59179ea4afc8e50fd8612a3cc60bc858f786ff877a4a8cb042799" +checksum = "7cd915d99f24784cdc19fd37ef22b97e3ff0ae756c7e492e9fbfe897d61e2aec" dependencies = [ "indenter", "once_cell", @@ -750,9 +755,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.11" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe9006bed769170c11f845cf00c7c1e9092aeb3f268e007c3e760ac68008070f" +checksum = "190092ea657667030ac6a35e305e62fc4dd69fd98ac98631e5d3a2b1575a12b5" dependencies = [ "cfg-if", "libc", @@ -800,9 +805,9 @@ checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" [[package]] name = "hermit-abi" -version = "0.3.3" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7" +checksum = "5d3d0e0f38255e7fa3cf31335b3a56f05febd18025f4db5ef7a0cfb4f8da651f" [[package]] name = "hex" @@ -842,9 +847,9 @@ checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683" [[package]] name = "indexmap" -version = "2.1.0" +version = "2.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f" +checksum = "824b2ae422412366ba479e8111fd301f7b5faece8149317bb81925979a53f520" dependencies = [ "equivalent", "hashbrown", @@ -867,9 +872,9 @@ dependencies = [ [[package]] name = "k256" -version = "0.13.2" +version = "0.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f01b677d82ef7a676aa37e099defd83a28e15687112cafdd112d60236b6115b" +checksum = "956ff9b67e26e1a6a866cb758f12c6f8746208489e3e4a4b5580802f2f0a587b" dependencies = [ "cfg-if", "ecdsa", @@ -901,18 +906,18 @@ checksum = "884e2677b40cc8c339eaefcb701c32ef1fd2493d71118dc0ca4b6a736c93bd67" [[package]] name = "libc" -version = "0.2.151" +version = "0.2.153" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "302d7ab3130588088d277783b1e2d2e10c9e9e4a16dd9050e6ec93fb3e7048f4" +checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd" [[package]] name = "libloading" -version = "0.7.4" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f" +checksum = "c571b676ddfc9a8c12f1f3d3085a7b163966a8fd8098a90640953ce5f6170161" dependencies = [ "cfg-if", - "winapi", + "windows-sys 0.48.0", ] [[package]] @@ -932,9 +937,9 @@ dependencies = [ [[package]] name = "linux-raw-sys" -version = "0.4.12" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4cd1a83af159aa67994778be9070f0ae1bd732942279cabb14f86f986a21456" +checksum = "01cda141df6706de531b6c46c3a33ecca755538219bd484262fa09410c13539c" [[package]] name = "log" @@ -953,9 +958,9 @@ dependencies = [ [[package]] name = "memchr" -version = "2.6.4" +version = "2.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167" +checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149" [[package]] name = "minimal-lexical" @@ -965,9 +970,9 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" -version = "0.7.1" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" +checksum = "9d811f3e15f28568be3407c8e7fdb6514c1cda3cb30683f15b6a1a1dc4ea14a7" dependencies = [ "adler", ] @@ -1153,43 +1158,19 @@ checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" [[package]] name = "prettyplease" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae005bd773ab59b4725093fd7df83fd7892f7d8eafb48dbd7de6e024e4215f9d" -dependencies = [ - "proc-macro2", - "syn 2.0.43", -] - -[[package]] -name = "proc-macro-error" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" -dependencies = [ - "proc-macro-error-attr", - "proc-macro2", - "quote", - "syn 1.0.109", - "version_check", -] - -[[package]] -name = "proc-macro-error-attr" -version = "1.0.4" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" +checksum = "a41cf62165e97c7f814d2221421dbb9afcbcdb0a88068e5ea206e19951c2cbb5" dependencies = [ "proc-macro2", - "quote", - "version_check", + "syn 2.0.48", ] [[package]] name = "proc-macro2" -version = "1.0.71" +version = "1.0.78" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75cb1540fadbd5b8fbccc4dddad2734eba435053f725621c070711a14bb5f4b8" +checksum = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae" dependencies = [ "unicode-ident", ] @@ -1200,7 +1181,7 @@ version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "31b476131c3c86cb68032fdc5cb6d5a1045e3e42d96b69fa599fd77701e1f5bf" dependencies = [ - "bitflags 2.4.1", + "bitflags 2.4.2", "num-traits", "rand", "rand_chacha", @@ -1210,9 +1191,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.33" +version = "1.0.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae" +checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" dependencies = [ "proc-macro2", ] @@ -1271,13 +1252,13 @@ dependencies = [ [[package]] name = "regex" -version = "1.10.2" +version = "1.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343" +checksum = "b62dbe01f0b06f9d8dc7d49e05a0785f153b00b2c227856282f671e0318c9b15" dependencies = [ "aho-corasick", "memchr", - "regex-automata 0.4.3", + "regex-automata 0.4.5", "regex-syntax 0.8.2", ] @@ -1292,9 +1273,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.3" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f" +checksum = "5bb987efffd3c6d0d8f5f89510bb458559eab11e4f869acb20bf845e016259cd" dependencies = [ "aho-corasick", "memchr", @@ -1359,7 +1340,7 @@ dependencies = [ "alloy-primitives", "alloy-rlp", "auto_impl", - "bitflags 2.4.1", + "bitflags 2.4.2", "bitvec", "enumn", "hashbrown", @@ -1435,11 +1416,11 @@ dependencies = [ [[package]] name = "rustix" -version = "0.38.28" +version = "0.38.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72e572a5e8ca657d7366229cdde4bd14c4eb5499a9573d4d366fe1b599daa316" +checksum = "6ea3e1a662af26cd7a3ba09c0297a31af215563ecf42817c98df621387f4e949" dependencies = [ - "bitflags 2.4.1", + "bitflags 2.4.2", "errno", "libc", "linux-raw-sys", @@ -1498,38 +1479,38 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.20" +version = "1.0.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "836fa6a3e1e547f9a2c4040802ec865b5d85f4014efe00555d7090a3dcaa1090" +checksum = "b97ed7a9823b74f99c7742f5336af7be5ecd3eeafcb1507d1fa93347b1d589b0" dependencies = [ "serde", ] [[package]] name = "serde" -version = "1.0.193" +version = "1.0.196" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25dd9975e68d0cb5aa1120c288333fc98731bd1dd12f561e468ea4728c042b89" +checksum = "870026e60fa08c69f064aa766c10f10b1d62db9ccd4d0abb206472bee0ce3b32" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.193" +version = "1.0.196" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43576ca501357b9b071ac53cdc7da8ef0cbd9493d8df094cd821777ea6e894d3" +checksum = "33c85360c95e7d137454dc81d9a4ed2b8efd8fbe19cee57357b32b9771fccb67" dependencies = [ "proc-macro2", "quote", - "syn 2.0.43", + "syn 2.0.48", ] [[package]] name = "serde_json" -version = "1.0.108" +version = "1.0.113" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d1c7e3eac408d115102c4c24ad393e0821bb3a5df4d506a80f85f7a742a526b" +checksum = "69801b70b1c3dac963ecb03a364ba0ceda9cf60c71cfe475e99864759c8b8a79" dependencies = [ "itoa", "ryu", @@ -1567,9 +1548,9 @@ dependencies = [ [[package]] name = "shlex" -version = "1.2.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7cee0529a6d40f580e7a5e6c495c8fbfe21b7b52795ed4bb5e62cdf92bc6380" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" [[package]] name = "signature" @@ -1583,9 +1564,9 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.11.2" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dccd0940a2dcdf68d092b8cbab7dc0ad8fa938bf95787e1b916b0e3d0e8e970" +checksum = "e6ecd384b10a64542d77071bd64bd7b231f4ed5940fba55e98c3de13824cf3d7" [[package]] name = "sol-abi" @@ -1593,7 +1574,7 @@ version = "0.0.1" dependencies = [ "quote", "serde", - "syn 2.0.43", + "syn 2.0.48", ] [[package]] @@ -1669,9 +1650,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.43" +version = "2.0.48" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee659fb5f3d355364e1f3e5bc10fb82068efbf824a1e9d1c9504244a6469ad53" +checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f" dependencies = [ "proc-macro2", "quote", @@ -1699,31 +1680,31 @@ dependencies = [ [[package]] name = "termcolor" -version = "1.4.0" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff1bc3d3f05aff0403e8ac0d92ced918ec05b666a43f83297ccef5bea8a3d449" +checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" dependencies = [ "winapi-util", ] [[package]] name = "thiserror" -version = "1.0.52" +version = "1.0.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83a48fd946b02c0a526b2e9481c8e2a17755e47039164a86c4070446e3a4614d" +checksum = "d54378c645627613241d077a3a79db965db602882668f9136ac42af9ecb730ad" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.52" +version = "1.0.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7fbe9b594d6568a6a1443250a7e67d80b74e1e96f6d1715e1e21cc1888291d3" +checksum = "fa0faa943b50f3db30a20aa7e265dbc66076993efed8463e8de414e5d06d3471" dependencies = [ "proc-macro2", "quote", - "syn 2.0.43", + "syn 2.0.48", ] [[package]] @@ -1756,9 +1737,9 @@ dependencies = [ [[package]] name = "toml" -version = "0.8.8" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1a195ec8c9da26928f773888e0742ca3ca1040c6cd859c919c9f59c1954ab35" +checksum = "c6a4b9e8023eb94392d3dca65d717c53abc5dad49c07cb65bb8fcd87115fa325" dependencies = [ "serde", "serde_spanned", @@ -1777,9 +1758,9 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.21.0" +version = "0.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d34d383cd00a163b4a5b85053df514d45bc330f6de7737edfe0a93311d1eaa03" +checksum = "6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1" dependencies = [ "indexmap", "serde", @@ -1807,7 +1788,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.43", + "syn 2.0.48", ] [[package]] @@ -1909,9 +1890,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-encoder" -version = "0.38.1" +version = "0.41.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ad2b51884de9c7f4fe2fd1043fccb8dcad4b1e29558146ee57a144d15779f3f" +checksum = "e09bca7d6388637d27fb5edbeab11f56bfabcef8743c55ae34370e1e5030a071" dependencies = [ "leb128", ] @@ -1958,20 +1939,22 @@ dependencies = [ [[package]] name = "wasmparser" -version = "0.118.1" +version = "0.121.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95ee9723b928e735d53000dec9eae7b07a60e490c85ab54abb66659fc61bfcd9" +checksum = "953cf6a7606ab31382cb1caa5ae403e77ba70c7f8e12eeda167e7040d42bfda8" dependencies = [ + "bitflags 2.4.2", "indexmap", "semver", ] [[package]] name = "wast" -version = "69.0.1" +version = "70.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1ee37317321afde358e4d7593745942c48d6d17e0e6e943704de9bbee121e7a" +checksum = "a3d5061300042ff5065123dae1e27d00c03f567d34a2937c8472255148a216dc" dependencies = [ + "bumpalo", "leb128", "memchr", "unicode-width", @@ -1980,9 +1963,9 @@ dependencies = [ [[package]] name = "wat" -version = "1.0.82" +version = "1.0.85" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aeb338ee8dee4d4cd05e6426683f21c5087dc7cfc8903e839ccf48d43332da3c" +checksum = "afd7357b6cc46d46a2509c43dcb1dd4131dafbf4e75562d87017b5a05ffad2d6" dependencies = [ "wast", ] @@ -2164,9 +2147,9 @@ checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04" [[package]] name = "winnow" -version = "0.5.31" +version = "0.5.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97a4882e6b134d6c28953a387571f1acdd3496830d5e36c5e3a1075580ea641c" +checksum = "a7cad8365489051ae9f054164e459304af2e7e9bb407c958076c8bf4aef52da5" dependencies = [ "memchr", ] @@ -2188,7 +2171,7 @@ dependencies = [ "postcard", "serde", "sol-abi", - "syn 2.0.43", + "syn 2.0.48", "thiserror", "tiny-keccak", ] @@ -2210,7 +2193,7 @@ checksum = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.43", + "syn 2.0.48", ] [[package]] @@ -2230,7 +2213,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.43", + "syn 2.0.48", ] [[package]] @@ -2265,7 +2248,7 @@ version = "0.1.10" dependencies = [ "proc-macro2", "quote", - "syn 2.0.43", + "syn 2.0.48", "zabi", ] @@ -2298,7 +2281,7 @@ dependencies = [ "cargo_metadata", "proc-macro2", "quote", - "syn 2.0.43", + "syn 2.0.48", "tracing", "tracing-subscriber", "wat", diff --git a/Cargo.toml b/Cargo.toml index bcfbf2934..d373d7a67 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -25,31 +25,31 @@ homepage = "https://github.com/clearloop/zink" repository = "https://github.com/clearloop/zink.git" [workspace.dependencies] -anyhow = "1.0.77" +anyhow = "1.0.79" cargo_metadata = "0.18.1" ccli = "0.0.1" colored = "2.1.0" -etc = "0.1.16" +etc = "0.1.19" hex = "0.4.3" -indexmap = "2.1.0" +indexmap = "2.2.2" paste = "1.0.14" postcard = { version = "1.0.8", default-features = false } -proc-macro2 = "1.0.71" -quote = "1.0.33" +proc-macro2 = "1.0.78" +quote = "1.0.35" revm = { version = "3.5.0", default-features = false } -semver = "1.0.20" -serde = { version = "1.0.193", default-features = false } -serde_json = "1.0.108" -smallvec = "1.11.2" -syn = { version = "2.0.43", features = [ "full" ] } -thiserror = "1.0.52" +semver = "1.0.21" +serde = { version = "1.0.196", default-features = false } +serde_json = "1.0.113" +smallvec = "1.13.1" +syn = { version = "2.0.48", features = [ "full" ] } +thiserror = "1.0.56" tiny-keccak = "2.0.2" -toml = "0.8.8" +toml = "0.8.9" tracing = "0.1.40" tracing-subscriber = "0.3.18" wasm-opt = "0.116.0" -wasmparser = "0.118.1" -wat = "1.0.82" +wasmparser = "0.121.0" +wat = "1.0.85" ## EVM packages opcodes = { package = "evm-opcodes", path = "evm/opcodes", version = "=0.0.3", features = [ "data" ] } @@ -96,10 +96,10 @@ readme = "zink/README.md" path = "zink/src/lib.rs" [dependencies] +paste.workspace = true zink-codegen.workspace = true [target.'cfg(not(target_arch = "wasm32"))'.dev-dependencies] anyhow.workspace = true -paste.workspace = true filetests.workspace = true zint.workspace = true diff --git a/codegen/src/visitor/call.rs b/codegen/src/visitor/call.rs index f2fb18d28..199831bf9 100644 --- a/codegen/src/visitor/call.rs +++ b/codegen/src/visitor/call.rs @@ -1,6 +1,7 @@ //! call instructions use crate::{wasm::HostFunc, Error, Function, Result}; +use opcodes::ShangHai as OpCode; impl Function { /// The call indirect instruction calls a function indirectly @@ -61,13 +62,12 @@ impl Function { .ok_or(Error::ImportedFuncNotFound(index))?; match func { - HostFunc::Sstore => self.masm._sstore(), - HostFunc::Sload => self.masm._sload(), - HostFunc::Log0 => self.log(0), - HostFunc::Log1 => self.log(1), - HostFunc::Log2 => self.log(2), - HostFunc::Log3 => self.log(3), - HostFunc::Log4 => self.log(4), + HostFunc::Evm(OpCode::LOG0) => self.log(0), + HostFunc::Evm(OpCode::LOG1) => self.log(1), + HostFunc::Evm(OpCode::LOG2) => self.log(2), + HostFunc::Evm(OpCode::LOG3) => self.log(3), + HostFunc::Evm(OpCode::LOG4) => self.log(4), + HostFunc::Evm(op) => self.masm.emit_op(op), _ => { tracing::error!("unsupported host function {func:?}"); Err(Error::UnsupportedHostFunc(func)) diff --git a/codegen/src/wasm/host.rs b/codegen/src/wasm/host.rs index adcc95f78..1d074c90d 100644 --- a/codegen/src/wasm/host.rs +++ b/codegen/src/wasm/host.rs @@ -1,27 +1,14 @@ //! Host functions use crate::{Error, Result}; +use core::str::FromStr; +use opcodes::{OpCode as _, ShangHai as OpCode}; /// EVM built-in function. -#[derive(Clone, Copy, Debug, PartialOrd, Ord, PartialEq, Eq, Hash)] +#[derive(Clone, Copy, Debug, PartialOrd, Ord, PartialEq, Eq)] pub enum HostFunc { - // EVM functions. - // - /// Run function sload. - Sload, - /// Run function sstore. - Sstore, - /// Run function log0. - Log0, - /// Run function log1. - Log1, - /// Run function log2. - Log2, - /// Run function log3. - Log3, - /// Run function log4. - Log4, - + /// EVM assemble operations. + Evm(OpCode), // Zinkc helper functions // /// Emit ABI to the compiler. @@ -32,13 +19,7 @@ impl HostFunc { /// Stack input size. pub fn stack_in(&self) -> u8 { match self { - Self::Sload => 1, - Self::Sstore => 2, - Self::Log0 => 2, - Self::Log1 => 4, - Self::Log2 => 6, - Self::Log3 => 8, - Self::Log4 => 10, + Self::Evm(op) => op.stack_in() as u8, _ => 0, } } @@ -46,13 +27,7 @@ impl HostFunc { /// Stack output size. pub fn stack_out(&self) -> u8 { match self { - Self::Sload => 1, - Self::Sstore => 0, - Self::Log0 => 0, - Self::Log1 => 0, - Self::Log2 => 0, - Self::Log3 => 0, - Self::Log4 => 0, + Self::Evm(op) => op.stack_out() as u8, _ => 0, } } @@ -64,13 +39,11 @@ impl TryFrom<(&str, &str)> for HostFunc { fn try_from(import: (&str, &str)) -> Result { let (module, name) = import; match import { - ("evm", "sload") => Ok(Self::Sload), - ("evm", "sstore") => Ok(Self::Sstore), - ("evm", "log0") => Ok(Self::Log0), - ("evm", "log1") => Ok(Self::Log1), - ("evm", "log2") => Ok(Self::Log2), - ("evm", "log3") => Ok(Self::Log3), - ("evm", "log4") => Ok(Self::Log4), + ("evm", name) => { + Ok(Self::Evm(OpCode::from_str(name).map_err(|_| { + Error::HostFuncNotFound(module.into(), name.into()) + })?)) + } ("zinkc", "emit_abi") => Ok(Self::EmitABI), _ => { tracing::warn!("Failed to load host function: {:?}", import); diff --git a/evm/opcodes/src/lib.rs b/evm/opcodes/src/lib.rs index 9b2bcc5e5..d9f531a94 100644 --- a/evm/opcodes/src/lib.rs +++ b/evm/opcodes/src/lib.rs @@ -26,7 +26,7 @@ macro_rules! opcodes { )),+ } => { /// Ethereum virtual machine opcode. - #[derive(Clone, Copy, Debug)] + #[derive(Clone, Copy, Debug, PartialOrd, Ord, PartialEq, Eq)] pub enum $version { #[cfg(feature = "data")] /// No operation but provides a byte for serializing. @@ -112,6 +112,21 @@ macro_rules! opcodes { } } + impl core::str::FromStr for $version { + type Err = (); + + fn from_str(s: &str) -> Result { + paste::paste! { + match s { + $( + stringify!([< $name:lower >]) => Ok(Self::$name), + )* + _ => Err(()), + } + } + } + } + paste::paste! { #[doc = concat!(" For each ", stringify!($version), " operator.")] #[macro_export] @@ -127,6 +142,7 @@ macro_rules! opcodes { } /// EVM opcode groups +#[derive(Clone, Copy, Debug, PartialOrd, Ord, PartialEq, Eq)] pub enum Group { /// Stop and Arithmetic Operations StopArithmetic, @@ -153,6 +169,7 @@ pub enum Group { } /// Ethereum upgrades. +#[derive(Clone, Copy, Debug, PartialOrd, Ord, PartialEq, Eq)] pub enum Upgrade { /// Frontier Frontier, diff --git a/zink/src/asm.rs b/zink/src/asm.rs new file mode 100644 index 000000000..fae4f1e8e --- /dev/null +++ b/zink/src/asm.rs @@ -0,0 +1,39 @@ +//! Assembly trait implementation. + +use crate::ffi; +use paste::paste; + +/// Types implemented this trait are able to be pushed on stack. +pub trait Asm { + /// Push self on the stack. + fn push(&self); +} + +macro_rules! impl_asm { + ($ty:ident) => { + impl Asm for $ty { + fn push(&self) { + unsafe { + paste! { ffi::asm::[](*self); } + } + } + } + }; + ($len:expr) => { + impl Asm for [u8; $len] { + fn push(&self) { + unsafe { + paste! { ffi::evm::[](self.as_ptr() as i32); } + } + } + } + }; + ($($ty:tt),+) => { + $(impl_asm!($ty);)+ + }; +} + +impl_asm!( + i8, u8, i16, u16, i32, u32, i64, u64, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, + 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32 +); diff --git a/zink/src/traits.rs b/zink/src/event.rs similarity index 83% rename from zink/src/traits.rs rename to zink/src/event.rs index 463b9b7c7..05cc0e3dc 100644 --- a/zink/src/traits.rs +++ b/zink/src/event.rs @@ -43,14 +43,3 @@ pub trait Event { } } } - -/// Storage trait. Currently not for public use -pub trait Storage { - const STORAGE_KEY: i32; - - /// Get value from storage. - fn get() -> T; - - /// Set value to storage. - fn set(value: T); -} diff --git a/zink/src/ffi.rs b/zink/src/ffi.rs deleted file mode 100644 index 7bd4364ca..000000000 --- a/zink/src/ffi.rs +++ /dev/null @@ -1,48 +0,0 @@ -//! Zink FFI. - -#[link(wasm_import_module = "zinkc")] -#[allow(improper_ctypes)] -extern "C" { - /// Emit ABI to host state. - pub fn emit_abi(ptr: u32, len: u32); - -} - -/// EVM interfaces. -pub mod evm { - #[link(wasm_import_module = "evm")] - #[allow(improper_ctypes)] - extern "C" { - /// Store a value in the storage - pub fn sstore(value: i32, key: i32); - - /// Load a value from the storage - pub fn sload(key: i32) -> i32; - - /// Append log record with no topics - pub fn log0(name: &'static [u8]); - - /// Append log record with one topics - pub fn log1(name: &'static [u8], topic1: &'static [u8]); - - /// Append log record with two topics - pub fn log2(name: &'static [u8], topic1: &'static [u8], topic2: &'static [u8]); - - /// Append log record with three topics - pub fn log3( - name: &'static [u8], - topic1: &'static [u8], - topic2: &'static [u8], - topic3: &'static [u8], - ); - - /// Append log record with four topics - pub fn log4( - name: &'static [u8], - topic1: &'static [u8], - topic2: &'static [u8], - topic3: &'static [u8], - topic4: &'static [u8], - ); - } -} diff --git a/zink/src/ffi/asm.rs b/zink/src/ffi/asm.rs new file mode 100644 index 000000000..95935825d --- /dev/null +++ b/zink/src/ffi/asm.rs @@ -0,0 +1,29 @@ +//! Assembly FFI. + +#[link(wasm_import_module = "zinkc")] +#[allow(improper_ctypes)] +extern "C" { + /// Push a 8-bit signed integer to the stack. + pub fn push_i8(val: i8); + + /// Push a 8-bit unsigned integer to the stack. + pub fn push_u8(val: u8); + + /// Push a 16-bit signed integer to the stack. + pub fn push_i16(val: i16); + + /// Push a 16-bit unsigned integer to the stack. + pub fn push_u16(val: u16); + + /// Push a 32-bit signed integer to the stack. + pub fn push_i32(val: i32); + + /// Push a 32-bit unsigned integer to the stack. + pub fn push_u32(val: u32); + + /// Push a 64-bit signed integer to the stack. + pub fn push_i64(val: i64); + + /// Push a 64-bit unsigned integer to the stack. + pub fn push_u64(val: u64); +} diff --git a/zink/src/ffi/evm.rs b/zink/src/ffi/evm.rs new file mode 100644 index 000000000..25180741a --- /dev/null +++ b/zink/src/ffi/evm.rs @@ -0,0 +1,136 @@ +//! EVM FFI. + +#[link(wasm_import_module = "evm")] +#[allow(improper_ctypes)] +extern "C" { + /// Push 1 byte to the stack. + pub fn push0(); + + /// Push 1 byte to the stack. + pub fn push1(val: i32); + + /// Push 2 bytes to the stack. + pub fn push2(val: i32); + + /// Push 3 bytes to the stack. + pub fn push3(val: i32); + + /// Push 4 bytes to the stack. + pub fn push4(val: i32); + + /// Push 5 bytes to the stack. + pub fn push5(val: i32); + + /// Push 6 bytes to the stack. + pub fn push6(val: i32); + + /// Push 7 bytes to the stack. + pub fn push7(val: i32); + + /// Push 8 bytes to the stack. + pub fn push8(val: i32); + + /// Push 9 bytes to the stack. + pub fn push9(val: i32); + + /// Push 10 bytes to the stack. + pub fn push10(val: i32); + + /// Push 11 bytes to the stack. + pub fn push11(val: i32); + + /// Push 12 bytes to the stack. + pub fn push12(val: i32); + + /// Push 13 bytes to the stack. + pub fn push13(val: i32); + + /// Push 14 bytes to the stack. + pub fn push14(val: i32); + + /// Push 15 bytes to the stack. + pub fn push15(val: i32); + + /// Push 16 bytes to the stack. + pub fn push16(val: i32); + + /// Push 17 bytes to the stack. + pub fn push17(val: i32); + + /// Push 18 bytes to the stack. + pub fn push18(val: i32); + + /// Push 19 bytes to the stack. + pub fn push19(val: i32); + + /// Push 20 bytes to the stack. + pub fn push20(val: i32); + + /// Push 21 bytes to the stack. + pub fn push21(val: i32); + + /// Push 22 bytes to the stack. + pub fn push22(val: i32); + + /// Push 23 bytes to the stack. + pub fn push23(val: i32); + + /// Push 24 bytes to the stack. + pub fn push24(val: i32); + + /// Push 25 bytes to the stack. + pub fn push25(val: i32); + + /// Push 26 bytes to the stack. + pub fn push26(val: i32); + + /// Push 27 bytes to the stack. + pub fn push27(val: i32); + + /// Push 28 bytes to the stack. + pub fn push28(val: i32); + + /// Push 29 bytes to the stack. + pub fn push29(val: i32); + + /// Push 30 bytes to the stack. + pub fn push30(val: i32); + + /// Push 31 bytes to the stack. + pub fn push31(val: i32); + + /// Push 32 bytes to the stack. + pub fn push32(val: i32); + + /// Store a value in the storage + pub fn sstore(value: i32, key: i32); + + /// Load a value from the storage + pub fn sload(key: i32) -> i32; + + /// Append log record with no topics + pub fn log0(name: &'static [u8]); + + /// Append log record with one topics + pub fn log1(name: &'static [u8], topic1: &'static [u8]); + + /// Append log record with two topics + pub fn log2(name: &'static [u8], topic1: &'static [u8], topic2: &'static [u8]); + + /// Append log record with three topics + pub fn log3( + name: &'static [u8], + topic1: &'static [u8], + topic2: &'static [u8], + topic3: &'static [u8], + ); + + /// Append log record with four topics + pub fn log4( + name: &'static [u8], + topic1: &'static [u8], + topic2: &'static [u8], + topic3: &'static [u8], + topic4: &'static [u8], + ); +} diff --git a/zink/src/ffi/mod.rs b/zink/src/ffi/mod.rs new file mode 100644 index 000000000..f40d7d1e2 --- /dev/null +++ b/zink/src/ffi/mod.rs @@ -0,0 +1,12 @@ +//! Zink FFI. + +pub mod asm; +pub mod evm; + +#[link(wasm_import_module = "zinkc")] +#[allow(improper_ctypes)] +extern "C" { + /// Emit ABI to host state. + pub fn emit_abi(ptr: u32, len: u32); + +} diff --git a/zink/src/lib.rs b/zink/src/lib.rs index 174b3a495..4a7ae6082 100644 --- a/zink/src/lib.rs +++ b/zink/src/lib.rs @@ -2,10 +2,12 @@ #![no_std] +mod asm; +mod event; pub mod ffi; -mod traits; +mod storage; -pub use traits::{Event, Storage}; +pub use self::{event::Event, storage::Storage}; pub use zink_codegen::{constructor, external, storage, Event}; // Panic hook implementation diff --git a/zink/src/storage/mapping.rs b/zink/src/storage/mapping.rs new file mode 100644 index 000000000..b6113ccca --- /dev/null +++ b/zink/src/storage/mapping.rs @@ -0,0 +1 @@ +//! Zink storage mapping implementation. diff --git a/zink/src/storage/mod.rs b/zink/src/storage/mod.rs new file mode 100644 index 000000000..8f383c3e8 --- /dev/null +++ b/zink/src/storage/mod.rs @@ -0,0 +1,14 @@ +//! Zink storage implementation. + +mod mapping; + +/// Storage trait. Currently not for public use +pub trait Storage { + const STORAGE_KEY: i32; + + /// Get value from storage. + fn get() -> T; + + /// Set value to storage. + fn set(value: T); +}