diff --git a/.github/codecov.yml b/.github/codecov.yml deleted file mode 100644 index f3070d457..000000000 --- a/.github/codecov.yml +++ /dev/null @@ -1,17 +0,0 @@ -coverage: - status: - project: - default: - target: 50% - threshold: 1% - patch: - default: - target: 50% - threshold: 1% - informational: true - ignore: - - "arbiter-core/contracts/*" - - "arbiter/arbiter-core/benches*" - - "arbiter/arbiter-core/src/bindings" - - "arbiter/arbiter-bindings/*" - diff --git a/.github/workflows/book.yaml b/.github/workflows/book.yaml index d0e54a824..1e9eac307 100644 --- a/.github/workflows/book.yaml +++ b/.github/workflows/book.yaml @@ -12,73 +12,69 @@ on: merge_group: jobs: - test: + build: runs-on: ubuntu-latest - name: test steps: - uses: actions/checkout@v3 + with: + fetch-depth: 0 + + # Install Rust + - name: Install Rust toolchain + uses: actions-rs/toolchain@v1 + with: + toolchain: stable + override: true + # Install mdbook - name: Install mdbook - run: | - mkdir mdbook - curl -sSL https://github.com/rust-lang/mdBook/releases/download/v0.4.14/mdbook-v0.4.14-x86_64-unknown-linux-gnu.tar.gz | tar -xz --directory=./mdbook - echo `pwd`/mdbook >> $GITHUB_PATH + run: cargo install mdbook --vers "^0.4.35" - - name: Install mdbook-template - run: | - mkdir mdbook-template - curl -sSL https://github.com/sgoudham/mdbook-template/releases/latest/download/mdbook-template-x86_64-unknown-linux-gnu.tar.gz | tar -xz --directory=./mdbook-template - echo `pwd`/mdbook-template >> $GITHUB_PATH + # Install mdbook-katex + - name: Install mdbook-katex + run: cargo install mdbook-katex - - name: Run tests - run: mdbook test + # Build book + - name: build book + run: mdbook build lint: runs-on: ubuntu-latest - name: lint steps: - uses: actions/checkout@v3 - + with: + fetch-depth: 0 + + # Install Rust + - name: Install Rust toolchain + uses: actions-rs/toolchain@v1 + with: + toolchain: stable + override: true + + # Install mdbook-linkcheck - name: Install mdbook-linkcheck - run: | - mkdir mdbook-linkcheck - curl -sSL -o mdbook-linkcheck.zip https://github.com/Michael-F-Bryan/mdbook-linkcheck/releases/latest/download/mdbook-linkcheck.x86_64-unknown-linux-gnu.zip - unzip mdbook-linkcheck.zip -d ./mdbook-linkcheck - chmod +x `pwd`/mdbook-linkcheck/mdbook-linkcheck - echo `pwd`/mdbook-linkcheck >> $GITHUB_PATH - - - name: Run linkcheck + run: cargo install mdbook-linkcheck + + - name: linkcheck run: mdbook-linkcheck --standalone - build: + test: runs-on: ubuntu-latest + steps: - uses: actions/checkout@v3 with: fetch-depth: 0 - - - name: Install toolchain - uses: dtolnay/rust-toolchain@nightly - - uses: Swatinem/rust-cache@v2 + + # Install Rust + - name: Install Rust toolchain + uses: actions-rs/toolchain@v1 with: - cache-on-failure: true - - - name: Install mdbook - run: | - mkdir mdbook - curl -sSL https://github.com/rust-lang/mdBook/releases/download/v0.4.14/mdbook-v0.4.14-x86_64-unknown-linux-gnu.tar.gz | tar -xz --directory=./mdbook - echo `pwd`/mdbook >> $GITHUB_PATH - - - name: Install mdbook-template - run: | - mkdir mdbook-template - curl -sSL https://github.com/sgoudham/mdbook-template/releases/latest/download/mdbook-template-x86_64-unknown-linux-gnu.tar.gz | tar -xz --directory=./mdbook-template - echo `pwd`/mdbook-template >> $GITHUB_PATH - - - name: Build book - run: mdbook build documentation - - - name: Build docs - run: RUSTDOCFLAGS="--enable-index-page -Zunstable-options" cargo +nightly doc --all --no-deps \ No newline at end of file + toolchain: stable + override: true + + - name: test + run: cargo test --package documentation \ No newline at end of file diff --git a/.github/workflows/mdbook.yml b/.github/workflows/mdbook.yml new file mode 100644 index 000000000..b51d058a2 --- /dev/null +++ b/.github/workflows/mdbook.yml @@ -0,0 +1,60 @@ +# Sample workflow for building and deploying a mdBook site to GitHub Pages +# +# To get started with mdBook see: https://rust-lang.github.io/mdBook/index.html +# +name: Deploy mdBook site to Pages + +on: + # Runs on pushes targeting the default branch + push: + branches: ["main"] + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages +permissions: + contents: read + pages: write + id-token: write + +# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued. +# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete. +concurrency: + group: "pages" + cancel-in-progress: false + +jobs: + # Build job + build: + runs-on: ubuntu-latest + env: + MDBOOK_VERSION: 0.4.36 + steps: + - uses: actions/checkout@v4 + - name: Install mdBook + run: | + curl --proto '=https' --tlsv1.2 https://sh.rustup.rs -sSf -y | sh + rustup update + cargo install --version ${MDBOOK_VERSION} mdbook + - name: Setup Pages + id: pages + uses: actions/configure-pages@v4 + - name: Build with mdBook + run: mdbook build + - name: Upload artifact + uses: actions/upload-pages-artifact@v3 + with: + path: ./book/html + + # Deployment job + deploy: + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + runs-on: ubuntu-latest + needs: build + steps: + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v4 diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index f562322b8..34e1674c6 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -20,28 +20,4 @@ jobs: override: true - name: test - run: cargo test --workspace --all-features - - codecov: - name: codecov - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v3 - - - name: install rust toolchain - uses: actions-rs/toolchain@v1 - with: - toolchain: stable - - - name: install cargo-llvm-cov - uses: taiki-e/install-action@cargo-llvm-cov - - - name: codecov - run: cargo llvm-cov --all-features --workspace --lcov --output-path lcov.info - - - name: Upload coverage reports to Codecov - uses: codecov/codecov-action@v3 - with: - files: lcov.info - fail_ci_if_error: true + run: cargo test --workspace --all-features --exclude documentation diff --git a/.gitignore b/.gitignore index e5d62e4a5..7baa747c7 100644 --- a/.gitignore +++ b/.gitignore @@ -20,4 +20,6 @@ arbiter/ book arbiter-core/data -example_fork/test.json \ No newline at end of file +example_fork/test.json + +doctest_cache/ \ No newline at end of file diff --git a/.gitmodules b/.gitmodules index a4fa8fd85..99af72158 100644 --- a/.gitmodules +++ b/.gitmodules @@ -7,3 +7,6 @@ [submodule "arbiter-bindings/lib/solstat"] path = arbiter-bindings/lib/solstat url = https://github.com/primitivefinance/solstat +[submodule "arbiter-bindings/lib/ds-test"] + path = arbiter-bindings/lib/ds-test + url = https://github.com/dapphub/ds-test diff --git a/.rustfmt.toml b/.rustfmt.toml index 10d8a7e27..a148c11f7 100644 --- a/.rustfmt.toml +++ b/.rustfmt.toml @@ -9,4 +9,5 @@ use_field_init_shorthand = true wrap_comments = true normalize_comments = true -comment_width = 80 \ No newline at end of file +comment_width = 80 +edition = "2021" diff --git a/Cargo.lock b/Cargo.lock index 4e468c22a..3ce15d97b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -38,17 +38,6 @@ dependencies = [ "cpufeatures", ] -[[package]] -name = "ahash" -version = "0.7.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a824f2aa7e75a0c98c5a504fceb80649e9c35265d44525b5f94de4771a395cd" -dependencies = [ - "getrandom", - "once_cell", - "version_check", -] - [[package]] name = "ahash" version = "0.8.7" @@ -111,9 +100,9 @@ dependencies = [ [[package]] name = "alloy-primitives" -version = "0.5.4" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c234f92024707f224510ff82419b2be0e1d8e1fd911defcac5a085cd7f83898" +checksum = "f4b6fb2b432ff223d513db7f908937f63c252bee0af9b82bfd25b0a5dd1eb0d8" dependencies = [ "alloy-rlp", "bytes", @@ -122,6 +111,7 @@ dependencies = [ "derive_more", "hex-literal", "itoa", + "k256", "keccak-asm", "proptest", "rand", @@ -149,7 +139,7 @@ checksum = "1a047897373be4bbb0224c1afdabca92648dc57a9c9ef6e7b0be3aff7a859c83" dependencies = [ "proc-macro2", "quote", - "syn 2.0.43", + "syn 2.0.48", ] [[package]] @@ -183,9 +173,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" @@ -242,17 +232,16 @@ dependencies = [ "ethers", "foundry-config", "proc-macro2", - "quote", "rayon", "revm", - "revm-primitives 1.3.0 (git+https://github.com/bluealloy/revm.git?rev=30bbcdfe81446c9d1e9b37acc95f208943ddf858)", + "revm-primitives 2.0.0", "serde", "serde_json", - "syn 2.0.43", + "syn 2.0.48", "tempfile", "thiserror", "tokio", - "toml 0.8.8", + "toml 0.8.10", ] [[package]] @@ -273,7 +262,7 @@ dependencies = [ "async-stream", "async-trait", "bytes", - "cargo_metadata", + "cargo_metadata 0.18.1", "chrono", "crossbeam-channel", "ethers", @@ -287,7 +276,7 @@ dependencies = [ "rand", "rand_distr", "revm", - "revm-primitives 1.3.0 (git+https://github.com/bluealloy/revm.git?rev=30bbcdfe81446c9d1e9b37acc95f208943ddf858)", + "revm-primitives 2.0.0", "serde", "serde_json", "statrs", @@ -297,15 +286,16 @@ dependencies = [ "tracing", "tracing-subscriber", "tracing-test", + "uint", ] [[package]] name = "arbiter-engine" version = "0.1.0" dependencies = [ - "anyhow", "arbiter-bindings", "arbiter-core", + "arbiter-macros", "async-stream", "async-trait", "crossbeam-channel", @@ -314,13 +304,23 @@ dependencies = [ "futures-util", "serde", "serde_json", + "thiserror", "tokio", "tokio-stream", + "toml 0.8.10", "tracing", "tracing-subscriber", "tracing-test", ] +[[package]] +name = "arbiter-macros" +version = "0.1.0" +dependencies = [ + "quote", + "syn 2.0.48", +] + [[package]] name = "argminmax" version = "0.6.1" @@ -525,18 +525,18 @@ checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" dependencies = [ "proc-macro2", "quote", - "syn 2.0.43", + "syn 2.0.48", ] [[package]] name = "async-trait" -version = "0.1.76" +version = "0.1.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "531b97fb4cd3dfdce92c35dedbfdc1f0b9d8091c8ca943d6dae340ef5012d514" +checksum = "c980ee35e870bd1a4d2c8294d4c04d0499e67bca1e4b5cefcc693c2fa00caea9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.43", + "syn 2.0.48", ] [[package]] @@ -586,14 +586,13 @@ dependencies = [ [[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]] @@ -647,29 +646,6 @@ version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d86b93f97252c47b41663388e6d155714a9d0c398b99f1005cbc5f978b29f445" -[[package]] -name = "bindgen" -version = "0.66.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2b84e06fc203107bfbad243f4aba2af864eb7db3b1cf46ea0a023b0b433d2a7" -dependencies = [ - "bitflags 2.4.2", - "cexpr", - "clang-sys", - "lazy_static", - "lazycell", - "log", - "peeking_take_while", - "prettyplease", - "proc-macro2", - "quote", - "regex", - "rustc-hash", - "shlex", - "syn 2.0.43", - "which", -] - [[package]] name = "bit-set" version = "0.5.3" @@ -772,7 +748,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c48f0051a4b4c5e0b6d365cd04af53aeaa209e3cc15ec2cdb69e73cc87fbd0dc" dependencies = [ "memchr", - "regex-automata 0.4.3", + "regex-automata 0.4.5", "serde", ] @@ -794,11 +770,17 @@ version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3ac9f8b63eca6fd385229b3675f6cc0dc5c8a5c8a54a59d4f52ffd670d87b0c" +[[package]] +name = "bytecount" +version = "0.6.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1e5f035d16fc623ae5f74981db80a439803888314e3a555fd6f04acd51a3205" + [[package]] name = "bytemuck" -version = "1.14.0" +version = "1.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "374d28ec25809ee0e23827c2ab573d729e293f281dfe393500e7ad618baa61c6" +checksum = "ed2490600f404f2b94c167e31d3ed1d5f3c225a0f3b80230053b3e0b7b962bd9" dependencies = [ "bytemuck_derive", ] @@ -811,7 +793,7 @@ checksum = "965ab7eb5f8f97d2a083c799f3a1b994fc397b2fe2da5d1da1626ce15a39f2b1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.43", + "syn 2.0.48", ] [[package]] @@ -852,11 +834,10 @@ dependencies = [ [[package]] name = "c-kzg" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32700dc7904064bb64e857d38a1766607372928e2466ee5f02a869829b3297d7" +checksum = "b9d8c306be83ec04bf5f73710badd8edf56dea23f2f0d8b7f9fe4644d371c758" dependencies = [ - "bindgen", "blst", "cc", "glob", @@ -883,6 +864,19 @@ dependencies = [ "serde", ] +[[package]] +name = "cargo_metadata" +version = "0.14.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4acbb09d9ee8e23699b9634375c72795d095bf268439da88562cf9b501f181fa" +dependencies = [ + "camino", + "cargo-platform", + "semver 1.0.20", + "serde", + "serde_json", +] + [[package]] name = "cargo_metadata" version = "0.18.1" @@ -907,15 +901,6 @@ dependencies = [ "libc", ] -[[package]] -name = "cexpr" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" -dependencies = [ - "nom", -] - [[package]] name = "cfg-if" version = "1.0.0" @@ -924,9 +909,9 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "chrono" -version = "0.4.32" +version = "0.4.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41daef31d7a747c5c847246f36de49ced6f7403b4cdabc807a97b5cc184cda7a" +checksum = "9f13690e35a5e4ace198e7beea2895d29f3a9cc55015fcebe6336bd2010af9eb" dependencies = [ "android-tzdata", "iana-time-zone", @@ -946,17 +931,6 @@ dependencies = [ "inout", ] -[[package]] -name = "clang-sys" -version = "1.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67523a3b4be3ce1989d607a828d036249522dd9c1c8de7f4dd2dae43a37369d1" -dependencies = [ - "glob", - "libc", - "libloading", -] - [[package]] name = "clap" version = "4.4.18" @@ -988,7 +962,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.43", + "syn 2.0.48", ] [[package]] @@ -1069,11 +1043,12 @@ dependencies = [ [[package]] name = "config" -version = "0.13.4" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23738e11972c7643e4ec947840fc463b6a571afcd3e735bdfce7d03c7a784aca" +checksum = "7328b20597b53c2454f0b1919720c25c7339051c02b72b7e05409e00b14132be" dependencies = [ "async-trait", + "convert_case 0.6.0", "json5", "lazy_static", "nom", @@ -1082,7 +1057,7 @@ dependencies = [ "rust-ini", "serde", "serde_json", - "toml 0.5.11", + "toml 0.8.10", "yaml-rust", ] @@ -1105,6 +1080,26 @@ version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" +[[package]] +name = "const-random" +version = "0.1.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5aaf16c9c2c612020bcfd042e170f6e32de9b9d75adb5277cdbbd2e2c8c8299a" +dependencies = [ + "const-random-macro", +] + +[[package]] +name = "const-random-macro" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9d839f2a20b0aee515dc581a6172f2321f96cab76c1a38a4c584a194955390e" +dependencies = [ + "getrandom", + "once_cell", + "tiny-keccak", +] + [[package]] name = "constant_time_eq" version = "0.1.5" @@ -1117,6 +1112,15 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" +[[package]] +name = "convert_case" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec182b0ca2f35d8fc196cf3404988fd8b8c739a4d270ff118a398feb0cbec1ca" +dependencies = [ + "unicode-segmentation", +] + [[package]] name = "core-foundation" version = "0.9.4" @@ -1295,7 +1299,7 @@ version = "0.99.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" dependencies = [ - "convert_case", + "convert_case 0.4.0", "proc-macro2", "quote", "rustc_version 0.4.0", @@ -1379,9 +1383,12 @@ dependencies = [ [[package]] name = "dlv-list" -version = "0.3.0" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0688c2a7f92e427f44895cd63841bff7b29f8d7a1648b9e7e07a4a365b2e1257" +checksum = "442039f5147480ba31067cb00ada1adae6892028e40e45fc5de7b7df6dcc1b5f" +dependencies = [ + "const-random", +] [[package]] name = "doc-comment" @@ -1389,6 +1396,16 @@ version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" +[[package]] +name = "documentation" +version = "0.0.0" +dependencies = [ + "arbiter-bindings", + "arbiter-core", + "skeptic", + "tokio", +] + [[package]] name = "dunce" version = "1.0.4" @@ -1485,7 +1502,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.43", + "syn 2.0.48", ] [[package]] @@ -1496,7 +1513,7 @@ checksum = "c2ad8cef1d801a4686bfd8919f0b30eac4c8e48968c437a6405ded4fb5272d2b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.43", + "syn 2.0.48", ] [[package]] @@ -1524,6 +1541,15 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "error-chain" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d2f06b9cac1506ece98fe3231e3cc9c4410ec3d5b1f24ae1c8946f0742cdefc" +dependencies = [ + "version_check", +] + [[package]] name = "eth-keystore" version = "0.5.0" @@ -1596,9 +1622,9 @@ dependencies = [ [[package]] name = "ethers" -version = "2.0.11" +version = "2.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a5344eea9b20effb5efeaad29418215c4d27017639fd1f908260f59cbbd226e" +checksum = "6c7cd562832e2ff584fa844cd2f6e5d4f35bbe11b28c7c9b8df957b2e1d0c701" dependencies = [ "ethers-addressbook", "ethers-contract", @@ -1612,9 +1638,9 @@ dependencies = [ [[package]] name = "ethers-addressbook" -version = "2.0.12" +version = "2.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9bf35eb7d2e2092ad41f584951e08ec7c077b142dba29c4f1b8f52d2efddc49c" +checksum = "35dc9a249c066d17e8947ff52a4116406163cf92c7f0763cb8c001760b26403f" dependencies = [ "ethers-core", "once_cell", @@ -1624,9 +1650,9 @@ dependencies = [ [[package]] name = "ethers-contract" -version = "2.0.11" +version = "2.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0111ead599d17a7bff6985fd5756f39ca7033edc79a31b23026a8d5d64fa95cd" +checksum = "43304317c7f776876e47f2f637859f6d0701c1ec7930a150f169d5fbe7d76f5a" dependencies = [ "const-hex", "ethers-contract-abigen", @@ -1643,9 +1669,9 @@ dependencies = [ [[package]] name = "ethers-contract-abigen" -version = "2.0.12" +version = "2.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbdfb952aafd385b31d316ed80d7b76215ce09743c172966d840e96924427e0c" +checksum = "f9f96502317bf34f6d71a3e3d270defaa9485d754d789e15a8e04a84161c95eb" dependencies = [ "Inflector", "const-hex", @@ -1660,16 +1686,16 @@ dependencies = [ "reqwest", "serde", "serde_json", - "syn 2.0.43", - "toml 0.8.8", + "syn 2.0.48", + "toml 0.8.10", "walkdir", ] [[package]] name = "ethers-contract-derive" -version = "2.0.12" +version = "2.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7465c814a2ecd0de0442160da13584205d1cdc08f4717a6511cad455bd5d7dc4" +checksum = "452ff6b0a64507ce8d67ffd48b1da3b42f03680dcf5382244e9c93822cbbf5de" dependencies = [ "Inflector", "const-hex", @@ -1678,18 +1704,18 @@ dependencies = [ "proc-macro2", "quote", "serde_json", - "syn 2.0.43", + "syn 2.0.48", ] [[package]] name = "ethers-core" -version = "2.0.12" +version = "2.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "918b1a9ba585ea61022647def2f27c29ba19f6d2a4a4c8f68a9ae97fd5769737" +checksum = "aab3cef6cc1c9fd7f787043c81ad3052eff2b96a3878ef1526aa446311bdbfc9" dependencies = [ "arrayvec", "bytes", - "cargo_metadata", + "cargo_metadata 0.18.1", "chrono", "const-hex", "elliptic-curve", @@ -1704,7 +1730,7 @@ dependencies = [ "serde", "serde_json", "strum", - "syn 2.0.43", + "syn 2.0.48", "tempfile", "thiserror", "tiny-keccak", @@ -1713,9 +1739,9 @@ dependencies = [ [[package]] name = "ethers-etherscan" -version = "2.0.12" +version = "2.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "facabf8551b4d1a3c08cb935e7fca187804b6c2525cc0dafb8e5a6dd453a24de" +checksum = "16d45b981f5fa769e1d0343ebc2a44cfa88c9bc312eb681b676318b40cef6fb1" dependencies = [ "chrono", "ethers-core", @@ -1729,9 +1755,9 @@ dependencies = [ [[package]] name = "ethers-middleware" -version = "2.0.11" +version = "2.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "681ece6eb1d10f7cf4f873059a77c04ff1de4f35c63dd7bccde8f438374fcb93" +checksum = "145211f34342487ef83a597c1e69f0d3e01512217a7c72cc8a25931854c7dca0" dependencies = [ "async-trait", "auto_impl", @@ -1756,9 +1782,9 @@ dependencies = [ [[package]] name = "ethers-providers" -version = "2.0.11" +version = "2.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25d6c0c9455d93d4990c06e049abf9b30daf148cf461ee939c11d88907c60816" +checksum = "fb6b15393996e3b8a78ef1332d6483c11d839042c17be58decc92fa8b1c3508a" dependencies = [ "async-trait", "auto_impl", @@ -1794,9 +1820,9 @@ dependencies = [ [[package]] name = "ethers-signers" -version = "2.0.11" +version = "2.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cb1b714e227bbd2d8c53528adb580b203009728b17d0d0e4119353aa9bc5532" +checksum = "b3b125a103b56aef008af5d5fb48191984aa326b50bfd2557d231dc499833de3" dependencies = [ "async-trait", "coins-bip32", @@ -1813,9 +1839,9 @@ dependencies = [ [[package]] name = "ethers-solc" -version = "2.0.12" +version = "2.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc2e46e3ec8ef0c986145901fa9864205dc4dcee701f9846be2d56112d34bdea" +checksum = "d21df08582e0a43005018a858cc9b465c5fff9cf4056651be64f844e57d1f55f" dependencies = [ "cfg-if", "const-hex", @@ -1854,9 +1880,9 @@ checksum = "b90ca2580b73ab6a1f724b76ca11ab632df820fd6040c336200d2c1df7b3c82c" [[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", @@ -1910,7 +1936,7 @@ dependencies = [ "atomic", "pear", "serde", - "toml 0.8.8", + "toml 0.8.10", "uncased", "version_check", ] @@ -1993,7 +2019,7 @@ dependencies = [ "path-slash", "regex", "reqwest", - "revm-primitives 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", + "revm-primitives 1.3.0", "semver 1.0.20", "serde", "serde_json", @@ -2088,7 +2114,7 @@ checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" dependencies = [ "proc-macro2", "quote", - "syn 2.0.43", + "syn 2.0.48", ] [[package]] @@ -2185,7 +2211,7 @@ dependencies = [ "aho-corasick", "bstr", "log", - "regex-automata 0.4.3", + "regex-automata 0.4.5", "regex-syntax 0.8.2", ] @@ -2241,22 +2267,13 @@ dependencies = [ "serde", ] -[[package]] -name = "hashbrown" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" -dependencies = [ - "ahash 0.7.7", -] - [[package]] name = "hashbrown" version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" dependencies = [ - "ahash 0.8.7", + "ahash", ] [[package]] @@ -2265,7 +2282,7 @@ version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" dependencies = [ - "ahash 0.8.7", + "ahash", "allocator-api2", "rayon", "serde", @@ -2476,9 +2493,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 0.14.3", @@ -2662,12 +2679,6 @@ dependencies = [ "spin 0.5.2", ] -[[package]] -name = "lazycell" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" - [[package]] name = "lexical-core" version = "0.8.5" @@ -2734,19 +2745,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.152" +version = "0.2.153" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13e3bf6590cbc649f4d1a3eefc9d5d6eb746f5200ffb04e5e142700b8faa56e7" - -[[package]] -name = "libloading" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c571b676ddfc9a8c12f1f3d3085a7b163966a8fd8098a90640953ce5f6170161" -dependencies = [ - "cfg-if", - "windows-sys 0.48.0", -] +checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd" [[package]] name = "libm" @@ -3018,6 +3019,12 @@ dependencies = [ "num-traits", ] +[[package]] +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + [[package]] name = "num-integer" version = "0.1.45" @@ -3089,7 +3096,7 @@ dependencies = [ "proc-macro-crate 3.1.0", "proc-macro2", "quote", - "syn 2.0.43", + "syn 2.0.48", ] [[package]] @@ -3146,12 +3153,12 @@ checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" [[package]] name = "ordered-multimap" -version = "0.4.3" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccd746e37177e1711c20dd619a1620f34f5c8b569c53590a72dedd5344d8924a" +checksum = "4ed8acf08e98e744e5384c8bc63ceb0364e68a6854187221c18df61c4797690e" dependencies = [ "dlv-list", - "hashbrown 0.12.3", + "hashbrown 0.13.2", ] [[package]] @@ -3290,15 +3297,9 @@ dependencies = [ "proc-macro2", "proc-macro2-diagnostics", "quote", - "syn 2.0.43", + "syn 2.0.48", ] -[[package]] -name = "peeking_take_while" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" - [[package]] name = "pem" version = "1.1.1" @@ -3345,7 +3346,7 @@ dependencies = [ "pest_meta", "proc-macro2", "quote", - "syn 2.0.43", + "syn 2.0.48", ] [[package]] @@ -3409,7 +3410,7 @@ dependencies = [ "phf_shared 0.11.2", "proc-macro2", "quote", - "syn 2.0.43", + "syn 2.0.48", ] [[package]] @@ -3432,22 +3433,22 @@ dependencies = [ [[package]] name = "pin-project" -version = "1.1.3" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fda4ed1c6c173e3fc7a83629421152e01d7b1f9b7f65fb301e490e8cfc656422" +checksum = "0302c4a0442c456bd56f841aee5c3bfd17967563f6fadc9ceb9f9c23cf3807e0" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.1.3" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4359fd9c9171ec6e8c62926d6faaf553a8dc3f64e1507e76da7911b4f6a04405" +checksum = "266c042b60c9c76b8d53061e52b2e0d1116abc57cefc8c5cd671619a56ac3690" dependencies = [ "proc-macro2", "quote", - "syn 2.0.43", + "syn 2.0.48", ] [[package]] @@ -3509,7 +3510,7 @@ version = "0.36.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ce68a02f698ff7787c261aea1b4c040a8fe183a8fb200e2436d7f35d95a1b86f" dependencies = [ - "ahash 0.8.7", + "ahash", "arrow-format", "atoi_simd", "bytemuck", @@ -3555,7 +3556,7 @@ version = "0.36.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d0f5efe734b6cbe5f97ea769be8360df5324fade396f1f3f5ad7fe9360ca4a23" dependencies = [ - "ahash 0.8.7", + "ahash", "bitflags 2.4.2", "bytemuck", "chrono", @@ -3598,7 +3599,7 @@ version = "0.36.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7d0458efe8946f4718fd352f230c0db5a37926bd0d2bd25af79dc24746abaaea" dependencies = [ - "ahash 0.8.7", + "ahash", "async-trait", "atoi_simd", "bytes", @@ -3636,7 +3637,7 @@ version = "0.36.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ea47d46b7a98fa683ef235ad48b783abf61734828e754096cfbdc77404fff9b3" dependencies = [ - "ahash 0.8.7", + "ahash", "chrono", "fallible-streaming-iterator", "hashbrown 0.14.3", @@ -3657,7 +3658,7 @@ version = "0.36.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9d7105b40905bb38e8fc4a7fd736594b7491baa12fad3ac492969ca221a1b5d5" dependencies = [ - "ahash 0.8.7", + "ahash", "bitflags 2.4.2", "glob", "once_cell", @@ -3681,7 +3682,7 @@ version = "0.36.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2e09afc456ab11e75e5dcb43e00a01c71f3a46a2781e450054acb6bb096ca78e" dependencies = [ - "ahash 0.8.7", + "ahash", "argminmax", "bytemuck", "either", @@ -3706,7 +3707,7 @@ version = "0.36.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7ba24d67b1f64ab85143033dd46fa090b13c0f74acdf91b0780c16aecf005e3d" dependencies = [ - "ahash 0.8.7", + "ahash", "async-stream", "base64 0.21.7", "brotli", @@ -3756,7 +3757,7 @@ version = "0.36.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "384a175624d050c31c473ee11df9d7af5d729ae626375e522158cfb3d150acd0" dependencies = [ - "ahash 0.8.7", + "ahash", "bytemuck", "once_cell", "percent-encoding", @@ -3828,7 +3829,7 @@ version = "0.36.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b174ca4a77ad47d7b91a0460aaae65bbf874c8bfbaaa5308675dadef3976bbda" dependencies = [ - "ahash 0.8.7", + "ahash", "bytemuck", "hashbrown 0.14.3", "indexmap", @@ -3893,7 +3894,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ae005bd773ab59b4725093fd7df83fd7892f7d8eafb48dbd7de6e024e4215f9d" dependencies = [ "proc-macro2", - "syn 2.0.43", + "syn 2.0.48", ] [[package]] @@ -3935,31 +3936,7 @@ version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6d37c51ca738a55da99dc0c4a34860fd675453b8b36209178c2249bb13651284" dependencies = [ - "toml_edit 0.21.0", -] - -[[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" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" -dependencies = [ - "proc-macro2", - "quote", - "version_check", + "toml_edit 0.21.1", ] [[package]] @@ -3979,7 +3956,7 @@ checksum = "af066a9c399a26e020ada66a034357a868728e72cd426f3adcd35f80d88d88c8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.43", + "syn 2.0.48", "version_check", "yansi 1.0.0-rc.1", ] @@ -4004,6 +3981,17 @@ dependencies = [ "unarray", ] +[[package]] +name = "pulldown-cmark" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57206b407293d2bcd3af849ce869d52068623f19e1b5ff8e8778e3309439682b" +dependencies = [ + "bitflags 2.4.2", + "memchr", + "unicase", +] + [[package]] name = "quick-error" version = "1.2.3" @@ -4012,9 +4000,9 @@ checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" [[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", ] @@ -4137,18 +4125,18 @@ checksum = "2566c4bf6845f2c2e83b27043c3f5dfcd5ba8f2937d6c00dc009bfb51a079dc4" dependencies = [ "proc-macro2", "quote", - "syn 2.0.43", + "syn 2.0.48", ] [[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", ] @@ -4163,9 +4151,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", @@ -4192,9 +4180,9 @@ checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" [[package]] name = "reqwest" -version = "0.11.23" +version = "0.11.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37b1ae8d9ac08420c66222fb9096fc5de435c3c48542bc5336c51892cffafb41" +checksum = "c6920094eb85afde5e4a138be3f2de8bbdf28000f0029e72c45025a56b042251" dependencies = [ "base64 0.21.7", "bytes", @@ -4218,6 +4206,7 @@ dependencies = [ "serde", "serde_json", "serde_urlencoded", + "sync_wrapper", "system-configuration", "tokio", "tokio-rustls", @@ -4232,10 +4221,12 @@ dependencies = [ [[package]] name = "revm" -version = "3.5.0" -source = "git+https://github.com/bluealloy/revm.git?rev=30bbcdfe81446c9d1e9b37acc95f208943ddf858#30bbcdfe81446c9d1e9b37acc95f208943ddf858" +version = "4.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7e55c6c96e1fd215dc981978602e6b5943b48509267060fb8e73714b44a47a8" dependencies = [ "auto_impl", + "cfg-if", "ethers-core", "ethers-providers", "futures", @@ -4248,23 +4239,26 @@ dependencies = [ [[package]] name = "revm-interpreter" -version = "1.3.0" -source = "git+https://github.com/bluealloy/revm.git?rev=30bbcdfe81446c9d1e9b37acc95f208943ddf858#30bbcdfe81446c9d1e9b37acc95f208943ddf858" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12d7aac43d36bcd69ba4ad53aeedc0deaf411e88fc81b54dbf546990d93c2bd7" dependencies = [ - "revm-primitives 1.3.0 (git+https://github.com/bluealloy/revm.git?rev=30bbcdfe81446c9d1e9b37acc95f208943ddf858)", + "revm-primitives 2.0.0", "serde", ] [[package]] name = "revm-precompile" -version = "2.2.0" -source = "git+https://github.com/bluealloy/revm.git?rev=30bbcdfe81446c9d1e9b37acc95f208943ddf858#30bbcdfe81446c9d1e9b37acc95f208943ddf858" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bdbf367d7a9515113bf9ab128b64ba80d6e0e238904fb66f8567765ae52b6699" dependencies = [ "aurora-engine-modexp", + "blst", "c-kzg", "k256", "once_cell", - "revm-primitives 1.3.0 (git+https://github.com/bluealloy/revm.git?rev=30bbcdfe81446c9d1e9b37acc95f208943ddf858)", + "revm-primitives 2.0.0", "ripemd", "secp256k1", "sha2", @@ -4289,15 +4283,17 @@ dependencies = [ [[package]] name = "revm-primitives" -version = "1.3.0" -source = "git+https://github.com/bluealloy/revm.git?rev=30bbcdfe81446c9d1e9b37acc95f208943ddf858#30bbcdfe81446c9d1e9b37acc95f208943ddf858" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b3683a40f1e94e7389c8e81e5f26bb5d30875ed0b48ab07985ec32eb6d6c712" dependencies = [ - "alloy-primitives 0.5.4", - "alloy-rlp", + "alloy-primitives 0.6.2", "auto_impl", "bitflags 2.4.2", "bitvec", + "blst", "c-kzg", + "cfg-if", "derive_more", "enumn", "hashbrown 0.14.3", @@ -4378,13 +4374,14 @@ dependencies = [ [[package]] name = "ron" -version = "0.7.1" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88073939a61e5b7680558e6be56b419e208420c2adb92be54921fa6b72283f1a" +checksum = "b91f7eff05f748767f183df4320a63d6936e9c6107d97c9e6bdd9784f4289c94" dependencies = [ - "base64 0.13.1", - "bitflags 1.3.2", + "base64 0.21.7", + "bitflags 2.4.2", "serde", + "serde_derive", ] [[package]] @@ -4419,9 +4416,9 @@ checksum = "e666a5496a0b2186dbcd0ff6106e29e093c15591bde62c20d3842007c6978a09" [[package]] name = "rust-ini" -version = "0.18.0" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6d5f2436026b4f6e79dc829837d467cc7e9a55ee40e750d716713540715a2df" +checksum = "7e2a3bcec1f113553ef1c88aae6c020a369d03d55b58de9869a0908930385091" dependencies = [ "cfg-if", "ordered-multimap", @@ -4433,12 +4430,6 @@ version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" -[[package]] -name = "rustc-hash" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" - [[package]] name = "rustc-hex" version = "2.1.0" @@ -4465,9 +4456,9 @@ dependencies = [ [[package]] name = "rustix" -version = "0.38.30" +version = "0.38.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "322394588aaf33c24007e8bb3238ee3e4c5c09c084ab32bc73890b99ff326bca" +checksum = "6ea3e1a662af26cd7a3ba09c0297a31af215563ecf42817c98df621387f4e949" dependencies = [ "bitflags 2.4.2", "errno", @@ -4626,9 +4617,9 @@ dependencies = [ [[package]] name = "secp256k1" -version = "0.28.1" +version = "0.28.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f622567e3b4b38154fb8190bcf6b160d7a4301d70595a49195b48c116007a27" +checksum = "d24b59d129cdadea20aea4fb2352fa053712e5d713eee47d700cd4b2bc002f10" dependencies = [ "secp256k1-sys", ] @@ -4689,29 +4680,29 @@ checksum = "a3f0bf26fd526d2a95683cd0f87bf103b8539e2ca1ef48ce002d67aad59aa0b4" [[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 = [ "indexmap", "itoa", @@ -4801,12 +4792,6 @@ dependencies = [ "lazy_static", ] -[[package]] -name = "shlex" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7cee0529a6d40f580e7a5e6c495c8fbfe21b7b52795ed4bb5e62cdf92bc6380" - [[package]] name = "signal-hook-registry" version = "1.4.1" @@ -4845,7 +4830,7 @@ version = "0.13.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2faf8f101b9bc484337a6a6b0409cf76c139f2fb70a9e3aee6b6774be7bfbf76" dependencies = [ - "ahash 0.8.7", + "ahash", "getrandom", "halfbrown", "lexical-core", @@ -4881,6 +4866,21 @@ version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" +[[package]] +name = "skeptic" +version = "0.13.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16d23b015676c90a0f01c197bfdc786c20342c73a0afdda9025adb0bc42940a8" +dependencies = [ + "bytecount", + "cargo_metadata 0.14.2", + "error-chain", + "glob", + "pulldown-cmark", + "tempfile", + "walkdir", +] + [[package]] name = "slab" version = "0.4.9" @@ -5046,7 +5046,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.43", + "syn 2.0.48", ] [[package]] @@ -5070,9 +5070,9 @@ checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" [[package]] name = "svm-rs" -version = "0.3.3" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20689c7d03b6461b502d0b95d6c24874c7d24dea2688af80486a130a06af3b07" +checksum = "11297baafe5fa0c99d5722458eac6a5e25c01eb1b8e5cd137f54079093daa7a4" dependencies = [ "dirs", "fs2", @@ -5114,15 +5114,21 @@ 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", "unicode-ident", ] +[[package]] +name = "sync_wrapper" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" + [[package]] name = "sysinfo" version = "0.30.5" @@ -5218,27 +5224,27 @@ checksum = "7ba277e77219e9eea169e8508942db1bf5d8a41ff2db9b20aab5a5aadc9fa25d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.43", + "syn 2.0.48", ] [[package]] name = "thiserror" -version = "1.0.55" +version = "1.0.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e3de26b0965292219b4287ff031fcba86837900fe9cd2b34ea8ad893c0953d2" +checksum = "d54378c645627613241d077a3a79db965db602882668f9136ac42af9ecb730ad" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.55" +version = "1.0.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "268026685b2be38d7103e9e507c938a1fcb3d7e6eb15e87870b617bf37b6d581" +checksum = "fa0faa943b50f3db30a20aa7e265dbc66076993efed8463e8de414e5d06d3471" dependencies = [ "proc-macro2", "quote", - "syn 2.0.43", + "syn 2.0.48", ] [[package]] @@ -5262,12 +5268,13 @@ dependencies = [ [[package]] name = "time" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f657ba42c3f86e7680e53c8cd3af8abbe56b5491790b46e22e19c0d57463583e" +checksum = "fe80ced77cbfb4cb91a94bf72b378b4b6791a0d9b7f09d0be747d1bdff4e68bd" dependencies = [ "deranged", "itoa", + "num-conv", "powerfmt", "serde", "time-core", @@ -5282,10 +5289,11 @@ checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" [[package]] name = "time-macros" -version = "0.2.16" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26197e33420244aeb70c3e8c78376ca46571bc4e701e4791c2cd9f57dcb3a43f" +checksum = "7ba3a3ef41e6672a2f0f001392bb5dcd3ff0a9992d618ca761a11c3121547774" dependencies = [ + "num-conv", "time-core", ] @@ -5315,9 +5323,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.35.1" +version = "1.36.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c89b4efa943be685f629b149f53829423f8f5531ea21249408e8e2f8671ec104" +checksum = "61285f6515fa018fb2d1e46eb21223fff441ee8db5d0f1435e8ab4f5cdb80931" dependencies = [ "backtrace", "bytes", @@ -5340,7 +5348,7 @@ checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.43", + "syn 2.0.48", ] [[package]] @@ -5393,15 +5401,6 @@ dependencies = [ "tracing", ] -[[package]] -name = "toml" -version = "0.5.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" -dependencies = [ - "serde", -] - [[package]] name = "toml" version = "0.7.8" @@ -5417,14 +5416,14 @@ dependencies = [ [[package]] name = "toml" -version = "0.8.8" +version = "0.8.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1a195ec8c9da26928f773888e0742ca3ca1040c6cd859c919c9f59c1954ab35" +checksum = "9a9aad4a3066010876e8dcf5a8a06e70a558751117a145c6ce2b82c2e2054290" dependencies = [ "serde", "serde_spanned", "toml_datetime", - "toml_edit 0.21.0", + "toml_edit 0.22.4", ] [[package]] @@ -5462,9 +5461,20 @@ 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", + "toml_datetime", + "winnow", +] + +[[package]] +name = "toml_edit" +version = "0.22.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c9ffdf896f8daaabf9b66ba8e77ea1ed5ed0f72821b398aba62352e95062951" dependencies = [ "indexmap", "serde", @@ -5498,7 +5508,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.43", + "syn 2.0.48", ] [[package]] @@ -5631,9 +5641,18 @@ checksum = "eaea85b334db583fe3274d12b4cd1880032beab409c0d774be044d4480ab9a94" [[package]] name = "uncased" -version = "0.9.9" +version = "0.9.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b9bc53168a4be7402ab86c3aad243a84dd7381d09be0eddc81280c1da95ca68" +checksum = "e1b88fcfe09e89d3866a5c11019378088af2d24c3fbd4f0543f96b479ec90697" +dependencies = [ + "version_check", +] + +[[package]] +name = "unicase" +version = "2.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7d2d4dafb69621809a81864c9c1b864479e1235c0dd4e199924b9742439ed89" dependencies = [ "version_check", ] @@ -5659,6 +5678,12 @@ dependencies = [ "tinyvec", ] +[[package]] +name = "unicode-segmentation" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36" + [[package]] name = "unicode-width" version = "0.1.11" @@ -5724,9 +5749,9 @@ checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" [[package]] name = "value-trait" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea87257cfcbedcb9444eda79c59fdfea71217e6305afee8ee33f500375c2ac97" +checksum = "dad8db98c1e677797df21ba03fca7d3bf9bec3ca38db930954e4fe6e1ea27eb4" dependencies = [ "float-cmp", "halfbrown", @@ -5795,7 +5820,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.43", + "syn 2.0.48", "wasm-bindgen-shared", ] @@ -5829,7 +5854,7 @@ checksum = "bae1abb6806dc1ad9e560ed242107c0f6c84335f1749dd4e8ddb012ebd5e25a7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.43", + "syn 2.0.48", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -5856,23 +5881,11 @@ version = "0.25.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1778a42e8b3b90bff8d0f5032bf22250792889a5cdc752aa0020c84abe3aaf10" -[[package]] -name = "which" -version = "4.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7" -dependencies = [ - "either", - "home", - "once_cell", - "rustix", -] - [[package]] name = "wide" -version = "0.7.13" +version = "0.7.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c68938b57b33da363195412cfc5fc37c9ed49aa9cfe2156fde64b8d2c9498242" +checksum = "89beec544f246e679fc25490e3f8e08003bc4bf612068f325120dad4cea02c1c" dependencies = [ "bytemuck", "safe_arch", @@ -6062,9 +6075,9 @@ checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04" [[package]] name = "winnow" -version = "0.5.34" +version = "0.5.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7cf47b659b318dccbd69cc4797a39ae128f533dce7902a1096044d1967b9c16" +checksum = "818ce546a11a9986bc24f93d0cdf38a8a1a400f1473ea8c82e59f6e0ffab9249" dependencies = [ "memchr", ] @@ -6151,7 +6164,7 @@ checksum = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.43", + "syn 2.0.48", ] [[package]] @@ -6171,7 +6184,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.43", + "syn 2.0.48", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index a8e584abe..c2d6b0640 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,12 @@ [workspace] # List of crates included in this workspace -members = [ "arbiter-bindings", "arbiter-core", "arbiter-engine"] +members = [ + "arbiter-bindings", + "arbiter-core", + "arbiter-engine", + "arbiter-macros", + "documentation", +] # List of crates excluded from this workspace exclude = ["benches"] @@ -10,7 +16,10 @@ exclude = ["benches"] name = "arbiter" version = "0.4.14" edition = "2021" -authors = ["Waylon Jepsen ", "Colin Roberts "] +authors = [ + "Waylon Jepsen ", + "Colin Roberts ", +] description = "Allowing smart contract developers to do simulation driven development via an EVM emulator" license = "Apache-2.0" keywords = ["ethereum", "evm", "emulator", "testing", "smart-contracts"] @@ -23,21 +32,23 @@ path = "bin/main.rs" [workspace.dependencies] arbiter-bindings = { version = "*", path = "./arbiter-bindings" } arbiter-core = { version = "*", path = "./arbiter-core" } -ethers = { version = "2.0.11" } +arbiter-macros = { path = "./arbiter-macros" } +arbiter-engine = { path = "./arbiter-engine" } +revm = { version = "=4.0.0", features = ["ethersdb", "std", "serde"] } +revm-primitives = "=2.0.0" +ethers = { version = "2.0.13" } serde = { version = "1.0.193", features = ["derive"] } -serde_json = { version = "=1.0.108" } -revm = { git = "https://github.com/bluealloy/revm.git", features = [ "ethersdb", "std", "serde"], rev = "30bbcdfe81446c9d1e9b37acc95f208943ddf858" } -revm-primitives = { git = "https://github.com/bluealloy/revm.git", rev = "30bbcdfe81446c9d1e9b37acc95f208943ddf858" } -thiserror = { version = "1.0.55" } -syn = { version = "2.0.43" } -quote = { version = "=1.0.33" } +serde_json = { version = "1.0.113" } +thiserror = { version = "1.0.56" } +syn = { version = "2.0.48", features = ["full"] } proc-macro2 = { version = "1.0.78" } -tokio = { version = "1.35.1", features = ["macros", "full"] } -crossbeam-channel = { version = "0.5.11" } -futures-util = { version = "=0.3.30" } -async-trait = { version = "0.1.76" } +tokio = { version = "1.36.0", features = ["macros", "full"] } +crossbeam-channel = { version = "0.5.11" } +futures-util = { version = "0.3.30" } +async-trait = { version = "0.1.77" } tracing = "0.1.40" async-stream = "0.3.5" +toml = "0.8.10" # Dependencies for the release build [dependencies] @@ -47,18 +58,17 @@ arbiter-core.workspace = true clap = { version = "=4.4.18", features = ["derive"] } serde.workspace = true serde_json.workspace = true -config = { version = "=0.13.4" } +config = { version = "=0.14.0" } ethers.workspace = true revm.workspace = true -toml = { version = "=0.8.8" } +toml.workspace = true proc-macro2.workspace = true syn.workspace = true Inflector = { version = "=0.11.4" } # Building files -quote.workspace = true foundry-config = { version = "=0.2.0" } -tempfile = { version = "3.9.0"} +tempfile = { version = "3.9.0" } # Errors thiserror.workspace = true @@ -76,5 +86,3 @@ lto = true # The Rust compiler splits your crate into multiple codegen units to parallelize (and thus speed up) compilation but at the cost of optimization. # This setting tells the compiler to use only one codegen unit, which will slow down compilation but improve optimization. codegen-units = 1 - - diff --git a/README.md b/README.md index 212df6c09..362a11445 100644 --- a/README.md +++ b/README.md @@ -3,18 +3,16 @@ > Expanding the EVM tooling ecosystem. ![Github Actions](https://github.com/primitivefinance/arbiter/workflows/test/badge.svg) -[![Codecov badge](https://codecov.io/gh/primitivefinance/arbiter/branch/main/graph/badge.svg?token=UQ1SE0D9IN)](https://codecov.io/gh/primitivefinance/arbiter) ![Visitors badge](https://visitor-badge.laobi.icu/badge?page_id=arbiter) ![Telegram badge](https://img.shields.io/endpoint?color=neon&logo=telegram&label=chat&style=flat-square&url=https%3A%2F%2Ftg.sumanjay.workers.dev%2Farbiter_rs) [![Twitter Badge](https://badgen.net/badge/icon/twitter?icon=twitter&label)](https://twitter.com/primitivefi) +## Overview **Arbiter** is a framework for stateful Ethereum smart-contract simulation. The framework features an [`ethers-rs`](https://github.com/gakonst/ethers-rs) middleware built on top of [revm](https://github.com/bluealloy/revm) which allows the end user to interact with a sandboxed `revm` instance as if it were an Ethereum node. This provides a familiar interface for interacting with the Ethereum Virtual Machine (EVM), but with unrivaled speed. Furthermore, Arbiter provides containment and management for simulations. For a running list of vulnerabilities found with Arbiter, please see the [Vulnerability Corpus](./documentation/src/contributing/vulnerability_corpus.md). -## Overview - The Arbiter workspace has three crates: - `arbiter`: The binary crate that exposes a command line interface for initializing simulations via a templated repository and generating contract bindings needed for the simulation. - `arbiter-core`: The lib crate that contains the core logic for the Arbiter framework including the `RevmMiddleware` discussed before, the `Environment` which envelopes simulations, and the `Manager` who controls a collection of environments. @@ -23,6 +21,9 @@ The Arbiter workspace has three crates: The purpose of Arbiter is to provide a toolset to construct arbitrary agents (defined in Rust, by smart contracts, or even other foreign function interfaces) and have these agents interact with an Ethereum-like environment of your design. All contract bytecode is run directly using a blazing-fast EVM instance `revm` (which is used in live RPC nodes such as [`reth`](https://github.com/paradigmxyz/reth)) so that your contracts are tested in the exact same type of environment that they are deployed in. +## Docs +Here you can find the [Arbiter docs](https://primitivefinance.github.io/arbiter/) + ## Motivation Smart contract engineers need to test their contracts against a wide array of potentially adversarial environments and contract parameters. diff --git a/arbiter-bindings/contracts/Counter.sol b/arbiter-bindings/contracts/Counter.sol index aded7997b..ea83468d0 100644 --- a/arbiter-bindings/contracts/Counter.sol +++ b/arbiter-bindings/contracts/Counter.sol @@ -1,11 +1,13 @@ // SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.13; +import "forge-std/console2.sol"; contract Counter { uint256 public number; function setNumber(uint256 newNumber) public { number = newNumber; + console2.log("You set the number to: ", newNumber); } function increment() public { diff --git a/arbiter-bindings/foundry.toml b/arbiter-bindings/foundry.toml index 54ee53217..e6d7428a3 100644 --- a/arbiter-bindings/foundry.toml +++ b/arbiter-bindings/foundry.toml @@ -7,6 +7,7 @@ remappings = [ "/solstat=/lib/solstat/src", "/solmate=/lib/solmate/src", "/solmate-erc20=/lib/solmate-erc20/src", + "forge-std/=lib/forge-std/src", ] solc_version = "0.8.19" diff --git a/arbiter-bindings/lib/ds-test b/arbiter-bindings/lib/ds-test new file mode 160000 index 000000000..e282159d5 --- /dev/null +++ b/arbiter-bindings/lib/ds-test @@ -0,0 +1 @@ +Subproject commit e282159d5170298eb2455a6c05280ab5a73a4ef0 diff --git a/arbiter-bindings/src/bindings/counter.rs b/arbiter-bindings/src/bindings/counter.rs index d7271f84e..9f5a871fe 100644 --- a/arbiter-bindings/src/bindings/counter.rs +++ b/arbiter-bindings/src/bindings/counter.rs @@ -83,13 +83,13 @@ pub mod counter { __abi, ); #[rustfmt::skip] - const __BYTECODE: &[u8] = b"`\x80`@R4\x80\x15a\0]W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\"`$\x82\x01R\x7FEther sent to non-payable functi`D\x82\x01\x90\x81Ra7\xB7`\xF1\x1B`d\x83\x01R`\x84\x82\xFD[Pa\x01\xC7\x80a\0m`\09`\0\xF3\xFE`\x80`@R4\x80\x15a\0]W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\"`$\x82\x01R\x7FEther sent to non-payable functi`D\x82\x01\x90\x81Ra7\xB7`\xF1\x1B`d\x83\x01R`\x84\x82\xFD[P`\x046\x10a\0\x8EW`\x005`\xE0\x1C\x80c?\xB5\xC1\xCB\x14a\0\xF3W\x80c\x83\x81\xF5\x8A\x14a\x01\x08W\x80c\xD0\x9D\xE0\x8A\x14a\x01#W[`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`5`$\x82\x01R\x7FContract does not have fallback `D\x82\x01\x90\x81Rtnor receive functions`X\x1B`d\x83\x01R`\x84\x82\xFD[a\x01\x06a\x01\x016`\x04a\x01", "Colin Roberts "] +authors = [ + "Waylon Jepsen ", + "Colin Roberts ", +] description = "Allowing smart contract developers to do simulation driven development via an EVM emulator" license = "Apache-2.0" keywords = ["ethereum", "evm", "emulator", "testing", "smart-contracts"] @@ -10,7 +13,10 @@ readme = "../README.md" # Dependencies for the release build [dependencies] +arbiter-bindings = { path = "../arbiter-bindings" } + # Ethereum and EVM +uint = "0.9.5" ethers.workspace = true revm.workspace = true revm-primitives.workspace = true @@ -32,7 +38,7 @@ futures-locks = { version = "=0.7.1" } # Randomness -rand = { version = "=0.8.5" } +rand = { version = "=0.8.5" } rand_distr = { version = "=0.4.3" } statrs = { version = "=0.16.0" } @@ -56,10 +62,10 @@ tracing-subscriber = "0.3.18" polars = "0.36.2" cargo_metadata = "0.18.1" -chrono = "0.4.32" -futures = { version = "=0.3.30" } +chrono = "0.4.33" +futures = { version = "=0.3.30" } -assert_matches = { version = "=1.5" } +assert_matches = { version = "=1.5" } [[bench]] name = "bench" diff --git a/arbiter-core/benches/bench.rs b/arbiter-core/benches/bench.rs index b6e10e313..d8665d177 100644 --- a/arbiter-core/benches/bench.rs +++ b/arbiter-core/benches/bench.rs @@ -11,8 +11,8 @@ use arbiter_bindings::bindings::{ arbiter_token::{self, ArbiterToken}, }; use arbiter_core::{ - environment::{builder::EnvironmentBuilder, Environment}, - middleware::RevmMiddleware, + environment::{Environment, EnvironmentBuilder}, + middleware::ArbiterMiddleware, }; use ethers::{ core::{k256::ecdsa::SigningKey, utils::Anvil}, @@ -177,10 +177,10 @@ async fn anvil_startup() -> Result<( Ok((client, anvil)) } -fn arbiter_startup() -> Result<(Environment, Arc)> { - let environment = EnvironmentBuilder::new().build(); +fn arbiter_startup() -> Result<(Environment, Arc)> { + let environment = Environment::builder().build(); - let client = RevmMiddleware::new(&environment, Some("name"))?; + let client = ArbiterMiddleware::new(&environment, Some("name"))?; Ok((environment, client)) } diff --git a/arbiter-core/src/console/abi.rs b/arbiter-core/src/console/abi.rs new file mode 100644 index 000000000..9255b27e4 --- /dev/null +++ b/arbiter-core/src/console/abi.rs @@ -0,0 +1,28579 @@ +pub use hardhat_console::*; +/// This module was auto-generated with ethers-rs Abigen. +/// More information at: +#[allow( + clippy::enum_variant_names, + clippy::too_many_arguments, + clippy::upper_case_acronyms, + clippy::type_complexity, + dead_code, + non_camel_case_types +)] +pub mod hardhat_console { + #[allow(deprecated)] + fn __abi() -> ::ethers::core::abi::Abi { + ::ethers::core::abi::ethabi::Contract { + constructor: ::core::option::Option::None, + functions: ::core::convert::From::from([ + ( + ::std::borrow::ToOwned::to_owned("log"), + ::std::vec![ + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + },], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + },], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + },], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + },], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p2"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p3"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Int(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("int256"), + ), + },], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("log"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p1"), + kind: ::ethers::core::abi::ethabi::ParamType::Int(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("int256"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ], + ), + ( + ::std::borrow::ToOwned::to_owned("logAddress"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("logAddress"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + },], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("logBool"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("logBool"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + },], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("logBytes"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("logBytes"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Bytes, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes"), + ), + },], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("logBytes1"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("logBytes1"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes(1usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes1"), + ), + },], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("logBytes10"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("logBytes10"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes(10usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes10"), + ), + },], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("logBytes11"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("logBytes11"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes(11usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes11"), + ), + },], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("logBytes12"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("logBytes12"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes(12usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes12"), + ), + },], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("logBytes13"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("logBytes13"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes(13usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes13"), + ), + },], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("logBytes14"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("logBytes14"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes(14usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes14"), + ), + },], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("logBytes15"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("logBytes15"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes(15usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes15"), + ), + },], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("logBytes16"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("logBytes16"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes(16usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes16"), + ), + },], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("logBytes17"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("logBytes17"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes(17usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes17"), + ), + },], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("logBytes18"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("logBytes18"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes(18usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes18"), + ), + },], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("logBytes19"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("logBytes19"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes(19usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes19"), + ), + },], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("logBytes2"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("logBytes2"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes(2usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes2"), + ), + },], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("logBytes20"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("logBytes20"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes(20usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes20"), + ), + },], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("logBytes21"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("logBytes21"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes(21usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes21"), + ), + },], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("logBytes22"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("logBytes22"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes(22usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes22"), + ), + },], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("logBytes23"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("logBytes23"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes(23usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes23"), + ), + },], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("logBytes24"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("logBytes24"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes(24usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes24"), + ), + },], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("logBytes25"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("logBytes25"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes(25usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes25"), + ), + },], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("logBytes26"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("logBytes26"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes(26usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes26"), + ), + },], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("logBytes27"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("logBytes27"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes(27usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes27"), + ), + },], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("logBytes28"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("logBytes28"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes(28usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes28"), + ), + },], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("logBytes29"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("logBytes29"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes(29usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes29"), + ), + },], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("logBytes3"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("logBytes3"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes(3usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes3"), + ), + },], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("logBytes30"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("logBytes30"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes(30usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes30"), + ), + },], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("logBytes31"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("logBytes31"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes(31usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes31"), + ), + },], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("logBytes32"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("logBytes32"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes(32usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes32"), + ), + },], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("logBytes4"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("logBytes4"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes(4usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes4"), + ), + },], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("logBytes5"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("logBytes5"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes(5usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes5"), + ), + },], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("logBytes6"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("logBytes6"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes(6usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes6"), + ), + },], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("logBytes7"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("logBytes7"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes(7usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes7"), + ), + },], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("logBytes8"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("logBytes8"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes(8usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes8"), + ), + },], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("logBytes9"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("logBytes9"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes(9usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes9"), + ), + },], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("logInt"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("logInt"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Int(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("int256"), + ), + },], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("logString"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("logString"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + },], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("logUint"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("logUint"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("p0"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + },], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ]), + events: ::std::collections::BTreeMap::new(), + errors: ::std::collections::BTreeMap::new(), + receive: false, + fallback: false, + } + } + /// The parsed JSON ABI of the contract. + pub static HARDHATCONSOLE_ABI: ::ethers::contract::Lazy<::ethers::core::abi::Abi> = + ::ethers::contract::Lazy::new(__abi); + pub struct HardhatConsole(::ethers::contract::Contract); + impl ::core::clone::Clone for HardhatConsole { + fn clone(&self) -> Self { + Self(::core::clone::Clone::clone(&self.0)) + } + } + impl ::core::ops::Deref for HardhatConsole { + type Target = ::ethers::contract::Contract; + fn deref(&self) -> &Self::Target { + &self.0 + } + } + impl ::core::ops::DerefMut for HardhatConsole { + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.0 + } + } + impl ::core::fmt::Debug for HardhatConsole { + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + f.debug_tuple(::core::stringify!(HardhatConsole)) + .field(&self.address()) + .finish() + } + } + impl HardhatConsole { + /// Creates a new contract instance with the specified `ethers` client + /// at `address`. The contract derefs to a `ethers::Contract` + /// object. + pub fn new>( + address: T, + client: ::std::sync::Arc, + ) -> Self { + Self(::ethers::contract::Contract::new( + address.into(), + HARDHATCONSOLE_ABI.clone(), + client, + )) + } + /// Calls the contract's `log` (0x007150be) function + pub fn log_23( + &self, + p_0: ::ethers::core::types::Address, + p_1: ::ethers::core::types::Address, + p_2: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([0, 113, 80, 190], (p_0, p_1, p_2)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x00dd87b9) function + pub fn log_87( + &self, + p_0: bool, + p_1: ::ethers::core::types::U256, + p_2: ::ethers::core::types::U256, + p_3: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([0, 221, 135, 185], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x018c84c2) function + pub fn log_24( + &self, + p_0: ::ethers::core::types::Address, + p_1: ::ethers::core::types::Address, + p_2: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([1, 140, 132, 194], (p_0, p_1, p_2)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x031c6f73) function + pub fn log_88( + &self, + p_0: ::ethers::core::types::U256, + p_1: ::ethers::core::types::Address, + p_2: ::ethers::core::types::Address, + p_3: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([3, 28, 111, 115], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x0454c079) function + pub fn log_89( + &self, + p_0: ::std::string::String, + p_1: ::ethers::core::types::Address, + p_2: bool, + p_3: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([4, 84, 192, 121], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x078287f5) function + pub fn log_90( + &self, + p_0: ::ethers::core::types::U256, + p_1: bool, + p_2: ::ethers::core::types::Address, + p_3: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([7, 130, 135, 245], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x07831502) function + pub fn log_91( + &self, + p_0: bool, + p_1: ::ethers::core::types::Address, + p_2: bool, + p_3: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([7, 131, 21, 2], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x088ef9d2) function + pub fn log_25( + &self, + p_0: bool, + p_1: ::ethers::core::types::U256, + p_2: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([8, 142, 249, 210], (p_0, p_1, p_2)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x091ffaf5) function + pub fn log_92( + &self, + p_0: ::ethers::core::types::U256, + p_1: ::ethers::core::types::Address, + p_2: ::ethers::core::types::Address, + p_3: bool, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([9, 31, 250, 245], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x0aa6cfad) function + pub fn log_93( + &self, + p_0: ::ethers::core::types::Address, + p_1: bool, + p_2: ::ethers::core::types::U256, + p_3: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([10, 166, 207, 173], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x0bb00eab) function + pub fn log_94( + &self, + p_0: bool, + p_1: bool, + p_2: ::ethers::core::types::U256, + p_3: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([11, 176, 14, 171], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x0c66d1be) function + pub fn log_95( + &self, + p_0: bool, + p_1: ::ethers::core::types::Address, + p_2: ::ethers::core::types::Address, + p_3: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([12, 102, 209, 190], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x0c9cd9c1) function + pub fn log_96( + &self, + p_0: ::ethers::core::types::U256, + p_1: ::ethers::core::types::Address, + p_2: ::ethers::core::types::U256, + p_3: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([12, 156, 217, 193], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x0d26b925) function + pub fn log_26( + &self, + p_0: ::std::string::String, + p_1: ::ethers::core::types::Address, + p_2: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([13, 38, 185, 37], (p_0, p_1, p_2)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x0d36fa20) function + pub fn log_97( + &self, + p_0: ::ethers::core::types::Address, + p_1: ::std::string::String, + p_2: ::ethers::core::types::Address, + p_3: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([13, 54, 250, 32], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x0df12b76) function + pub fn log_98( + &self, + p_0: ::ethers::core::types::Address, + p_1: ::std::string::String, + p_2: ::ethers::core::types::Address, + p_3: bool, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([13, 241, 43, 118], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x0e378994) function + pub fn log_99( + &self, + p_0: ::ethers::core::types::Address, + p_1: ::ethers::core::types::Address, + p_2: ::ethers::core::types::Address, + p_3: bool, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([14, 55, 137, 148], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x0ef7e050) function + pub fn log_100( + &self, + p_0: ::ethers::core::types::Address, + p_1: ::std::string::String, + p_2: ::ethers::core::types::U256, + p_3: bool, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([14, 247, 224, 80], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x100f650e) function + pub fn log_101( + &self, + p_0: ::ethers::core::types::Address, + p_1: ::ethers::core::types::U256, + p_2: ::ethers::core::types::Address, + p_3: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([16, 15, 101, 14], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x1023f7b2) function + pub fn log_102( + &self, + p_0: ::std::string::String, + p_1: ::std::string::String, + p_2: ::ethers::core::types::U256, + p_3: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([16, 35, 247, 178], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x1078f68d) function + pub fn log_27( + &self, + p_0: bool, + p_1: bool, + p_2: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([16, 120, 246, 141], (p_0, p_1, p_2)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x1093ee11) function + pub fn log_28( + &self, + p_0: bool, + p_1: ::std::string::String, + p_2: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([16, 147, 238, 17], (p_0, p_1, p_2)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x12d6c788) function + pub fn log_103( + &self, + p_0: bool, + p_1: ::std::string::String, + p_2: ::ethers::core::types::Address, + p_3: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([18, 214, 199, 136], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x12f21602) function + pub fn log_29( + &self, + p_0: bool, + p_1: bool, + p_2: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([18, 242, 22, 2], (p_0, p_1, p_2)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x136b05dd) function + pub fn log_104( + &self, + p_0: bool, + p_1: ::ethers::core::types::Address, + p_2: ::ethers::core::types::U256, + p_3: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([19, 107, 5, 221], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x1537dc87) function + pub fn log_105( + &self, + p_0: bool, + p_1: ::ethers::core::types::U256, + p_2: ::ethers::core::types::Address, + p_3: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([21, 55, 220, 135], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x1596a1ce) function + pub fn log_106( + &self, + p_0: bool, + p_1: ::std::string::String, + p_2: ::ethers::core::types::U256, + p_3: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([21, 150, 161, 206], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x159f8927) function + pub fn log_107( + &self, + p_0: ::ethers::core::types::Address, + p_1: ::std::string::String, + p_2: ::std::string::String, + p_3: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([21, 159, 137, 39], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x15c127b5) function + pub fn log_108( + &self, + p_0: ::ethers::core::types::U256, + p_1: ::ethers::core::types::Address, + p_2: ::ethers::core::types::U256, + p_3: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([21, 193, 39, 181], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x15cac476) function + pub fn log_109( + &self, + p_0: ::ethers::core::types::U256, + p_1: ::ethers::core::types::U256, + p_2: ::ethers::core::types::Address, + p_3: bool, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([21, 202, 196, 118], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x1606a393) function + pub fn log_110( + &self, + p_0: bool, + p_1: ::std::string::String, + p_2: bool, + p_3: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([22, 6, 163, 147], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x1762e32a) function + pub fn log_111( + &self, + p_0: bool, + p_1: ::std::string::String, + p_2: ::std::string::String, + p_3: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([23, 98, 227, 42], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x17fe6185) function + pub fn log_30( + &self, + p_0: ::ethers::core::types::Address, + p_1: ::ethers::core::types::Address, + p_2: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([23, 254, 97, 133], (p_0, p_1, p_2)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x18c9c746) function + pub fn log_31( + &self, + p_0: bool, + p_1: ::ethers::core::types::Address, + p_2: bool, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([24, 201, 199, 70], (p_0, p_1, p_2)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x193fb800) function + pub fn log_112( + &self, + p_0: ::ethers::core::types::U256, + p_1: ::ethers::core::types::U256, + p_2: ::ethers::core::types::U256, + p_3: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([25, 63, 184, 0], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x19fd4956) function + pub fn log_113( + &self, + p_0: ::ethers::core::types::Address, + p_1: bool, + p_2: ::std::string::String, + p_3: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([25, 253, 73, 86], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x1ad96de6) function + pub fn log_114( + &self, + p_0: bool, + p_1: ::std::string::String, + p_2: ::ethers::core::types::U256, + p_3: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([26, 217, 109, 230], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x1bb3b09a) function + pub fn log_115( + &self, + p_0: bool, + p_1: ::ethers::core::types::U256, + p_2: ::ethers::core::types::Address, + p_3: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([27, 179, 176, 154], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x1c41a336) function + pub fn log_116( + &self, + p_0: bool, + p_1: ::ethers::core::types::Address, + p_2: bool, + p_3: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([28, 65, 163, 54], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x1c7ec448) function + pub fn log_32( + &self, + p_0: ::std::string::String, + p_1: ::ethers::core::types::U256, + p_2: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([28, 126, 196, 72], (p_0, p_1, p_2)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x1c9d7eb3) function + pub fn log_6( + &self, + p_0: ::ethers::core::types::U256, + p_1: bool, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([28, 157, 126, 179], (p_0, p_1)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x1d14d001) function + pub fn log_117( + &self, + p_0: bool, + p_1: ::ethers::core::types::Address, + p_2: ::ethers::core::types::Address, + p_3: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([29, 20, 208, 1], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x1da986ea) function + pub fn log_118( + &self, + p_0: ::ethers::core::types::Address, + p_1: ::ethers::core::types::U256, + p_2: ::ethers::core::types::Address, + p_3: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([29, 169, 134, 234], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x1dc8e1b8) function + pub fn log_119( + &self, + p_0: ::ethers::core::types::Address, + p_1: ::std::string::String, + p_2: ::ethers::core::types::U256, + p_3: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([29, 200, 225, 184], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x1e4b87e5) function + pub fn log_120( + &self, + p_0: bool, + p_1: ::std::string::String, + p_2: ::std::string::String, + p_3: bool, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([30, 75, 135, 229], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x20098014) function + pub fn log_33( + &self, + p_0: ::ethers::core::types::U256, + p_1: bool, + p_2: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([32, 9, 128, 20], (p_0, p_1, p_2)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x205871c2) function + pub fn log_121( + &self, + p_0: ::ethers::core::types::Address, + p_1: ::std::string::String, + p_2: bool, + p_3: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([32, 88, 113, 194], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x20718650) function + pub fn log_34( + &self, + p_0: ::ethers::core::types::U256, + p_1: bool, + p_2: bool, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([32, 113, 134, 80], (p_0, p_1, p_2)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x20e3984d) function + pub fn log_122( + &self, + p_0: ::ethers::core::types::Address, + p_1: ::ethers::core::types::U256, + p_2: ::ethers::core::types::U256, + p_3: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([32, 227, 152, 77], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x212255cc) function + pub fn log_35( + &self, + p_0: ::ethers::core::types::Address, + p_1: bool, + p_2: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([33, 34, 85, 204], (p_0, p_1, p_2)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x21ad0683) function + pub fn log_123( + &self, + p_0: ::ethers::core::types::U256, + p_1: ::std::string::String, + p_2: ::std::string::String, + p_3: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([33, 173, 6, 131], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x21bdaf25) function + pub fn log_124( + &self, + p_0: ::ethers::core::types::Address, + p_1: ::ethers::core::types::Address, + p_2: ::std::string::String, + p_3: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([33, 189, 175, 37], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x223603bd) function + pub fn log_125( + &self, + p_0: ::std::string::String, + p_1: ::ethers::core::types::Address, + p_2: bool, + p_3: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([34, 54, 3, 189], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x22f6b999) function + pub fn log_126( + &self, + p_0: ::ethers::core::types::Address, + p_1: ::ethers::core::types::U256, + p_2: bool, + p_3: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([34, 246, 185, 153], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x245986f2) function + pub fn log_127( + &self, + p_0: ::std::string::String, + p_1: ::ethers::core::types::Address, + p_2: ::std::string::String, + p_3: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([36, 89, 134, 242], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x2488b414) function + pub fn log_128( + &self, + p_0: ::ethers::core::types::U256, + p_1: ::ethers::core::types::Address, + p_2: ::ethers::core::types::Address, + p_3: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([36, 136, 180, 20], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x24f91465) function + pub fn log_129( + &self, + p_0: ::std::string::String, + p_1: bool, + p_2: ::std::string::String, + p_3: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([36, 249, 20, 101], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x2555fa46) function + pub fn log_36( + &self, + p_0: bool, + p_1: bool, + p_2: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([37, 85, 250, 70], (p_0, p_1, p_2)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x26f560a8) function + pub fn log_130( + &self, + p_0: bool, + p_1: ::ethers::core::types::U256, + p_2: ::ethers::core::types::Address, + p_3: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([38, 245, 96, 168], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x27d8afd2) function + pub fn log_131( + &self, + p_0: ::ethers::core::types::U256, + p_1: ::ethers::core::types::U256, + p_2: ::std::string::String, + p_3: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([39, 216, 175, 210], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x28863fcb) function + pub fn log_132( + &self, + p_0: bool, + p_1: ::std::string::String, + p_2: ::ethers::core::types::U256, + p_3: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([40, 134, 63, 203], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x2a110e83) function + pub fn log_7( + &self, + p_0: bool, + p_1: bool, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([42, 17, 14, 131], (p_0, p_1)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x2ae408d4) function + pub fn log_133( + &self, + p_0: bool, + p_1: bool, + p_2: bool, + p_3: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([42, 228, 8, 212], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x2b2b18dc) function + pub fn log_134( + &self, + p_0: bool, + p_1: ::std::string::String, + p_2: ::ethers::core::types::Address, + p_3: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([43, 43, 24, 220], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x2c1754ed) function + pub fn log_135( + &self, + p_0: ::std::string::String, + p_1: ::std::string::String, + p_2: ::std::string::String, + p_3: bool, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([44, 23, 84, 237], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x2c1d0746) function + pub fn log_136( + &self, + p_0: ::ethers::core::types::U256, + p_1: bool, + p_2: ::std::string::String, + p_3: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([44, 29, 7, 70], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x2c2ecbc2) function + pub fn log_1( + &self, + p_0: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([44, 46, 203, 194], p_0) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x2cd4134a) function + pub fn log_137( + &self, + p_0: ::ethers::core::types::Address, + p_1: ::ethers::core::types::Address, + p_2: bool, + p_3: bool, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([44, 212, 19, 74], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x2ced7cef) function + pub fn log_37( + &self, + p_0: ::std::string::String, + p_1: ::std::string::String, + p_2: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([44, 237, 124, 239], (p_0, p_1, p_2)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x2d8e33a4) function + pub fn log_138( + &self, + p_0: ::std::string::String, + p_1: bool, + p_2: ::ethers::core::types::Address, + p_3: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([45, 142, 51, 164], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x2dd778e6) function + pub fn log_139( + &self, + p_0: ::ethers::core::types::Address, + p_1: bool, + p_2: ::ethers::core::types::Address, + p_3: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([45, 215, 120, 230], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x319af333) function + pub fn log_8( + &self, + p_0: ::std::string::String, + p_1: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([49, 154, 243, 51], (p_0, p_1)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x32458eed) function + pub fn log_2(&self, p_0: bool) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([50, 69, 142, 237], p_0) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x33e9dd1d) function + pub fn log_140( + &self, + p_0: ::std::string::String, + p_1: bool, + p_2: ::ethers::core::types::Address, + p_3: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([51, 233, 221, 29], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x34f0e636) function + pub fn log_141( + &self, + p_0: ::ethers::core::types::Address, + p_1: ::ethers::core::types::U256, + p_2: ::ethers::core::types::U256, + p_3: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([52, 240, 230, 54], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x35085f7b) function + pub fn log_38( + &self, + p_0: ::ethers::core::types::U256, + p_1: bool, + p_2: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([53, 8, 95, 123], (p_0, p_1, p_2)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x354c36d6) function + pub fn log_142( + &self, + p_0: ::std::string::String, + p_1: ::ethers::core::types::U256, + p_2: bool, + p_3: bool, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([53, 76, 54, 214], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x35a5071f) function + pub fn log_143( + &self, + p_0: ::ethers::core::types::Address, + p_1: ::std::string::String, + p_2: ::std::string::String, + p_3: bool, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([53, 165, 7, 31], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x37103367) function + pub fn log_39( + &self, + p_0: bool, + p_1: ::ethers::core::types::U256, + p_2: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([55, 16, 51, 103], (p_0, p_1, p_2)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x374bb4b2) function + pub fn log_144( + &self, + p_0: bool, + p_1: ::ethers::core::types::U256, + p_2: ::ethers::core::types::U256, + p_3: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([55, 75, 180, 178], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x37aa7d4c) function + pub fn log_40( + &self, + p_0: ::ethers::core::types::U256, + p_1: ::std::string::String, + p_2: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([55, 170, 125, 76], (p_0, p_1, p_2)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x386ff5f4) function + pub fn log_145( + &self, + p_0: ::ethers::core::types::Address, + p_1: bool, + p_2: ::ethers::core::types::U256, + p_3: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([56, 111, 245, 244], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x3971e78c) function + pub fn log_146( + &self, + p_0: ::ethers::core::types::Address, + p_1: ::ethers::core::types::Address, + p_2: bool, + p_3: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([57, 113, 231, 140], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x399174d3) function + pub fn log_9( + &self, + p_0: bool, + p_1: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([57, 145, 116, 211], (p_0, p_1)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x3b2279b4) function + pub fn log_147( + &self, + p_0: ::ethers::core::types::U256, + p_1: ::std::string::String, + p_2: ::ethers::core::types::U256, + p_3: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([59, 34, 121, 180], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x3b2a5ce0) function + pub fn log_148( + &self, + p_0: bool, + p_1: bool, + p_2: bool, + p_3: bool, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([59, 42, 92, 224], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x3bf5e537) function + pub fn log_149( + &self, + p_0: ::ethers::core::types::Address, + p_1: ::ethers::core::types::U256, + p_2: bool, + p_3: bool, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([59, 245, 229, 55], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x3e128ca3) function + pub fn log_150( + &self, + p_0: ::ethers::core::types::U256, + p_1: ::ethers::core::types::Address, + p_2: ::std::string::String, + p_3: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([62, 18, 140, 163], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x3e9f866a) function + pub fn log_151( + &self, + p_0: ::std::string::String, + p_1: ::ethers::core::types::Address, + p_2: bool, + p_3: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([62, 159, 134, 106], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x3f8a701d) function + pub fn log_152( + &self, + p_0: ::std::string::String, + p_1: bool, + p_2: ::std::string::String, + p_3: bool, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([63, 138, 112, 29], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x40785869) function + pub fn log_153( + &self, + p_0: ::std::string::String, + p_1: ::std::string::String, + p_2: bool, + p_3: bool, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([64, 120, 88, 105], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x41304fac) function + pub fn log_3( + &self, + p_0: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([65, 48, 79, 172], p_0) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x42d21db7) function + pub fn log_154( + &self, + p_0: ::ethers::core::types::U256, + p_1: ::ethers::core::types::U256, + p_2: ::std::string::String, + p_3: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([66, 210, 29, 183], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x439c7bef) function + pub fn log_155( + &self, + p_0: ::std::string::String, + p_1: ::std::string::String, + p_2: ::ethers::core::types::Address, + p_3: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([67, 156, 123, 239], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x448830a8) function + pub fn log_156( + &self, + p_0: ::ethers::core::types::Address, + p_1: ::std::string::String, + p_2: ::ethers::core::types::U256, + p_3: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([68, 136, 48, 168], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x454d54a5) function + pub fn log_157( + &self, + p_0: ::ethers::core::types::U256, + p_1: bool, + p_2: ::ethers::core::types::Address, + p_3: bool, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([69, 77, 84, 165], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x457fe3cf) function + pub fn log_158( + &self, + p_0: ::ethers::core::types::Address, + p_1: ::std::string::String, + p_2: ::ethers::core::types::Address, + p_3: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([69, 127, 227, 207], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x46600be0) function + pub fn log_159( + &self, + p_0: bool, + p_1: ::ethers::core::types::Address, + p_2: ::ethers::core::types::Address, + p_3: bool, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([70, 96, 11, 224], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x46826b5d) function + pub fn log_160( + &self, + p_0: ::ethers::core::types::U256, + p_1: ::ethers::core::types::Address, + p_2: ::std::string::String, + p_3: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([70, 130, 107, 93], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x475c5c33) function + pub fn log_161( + &self, + p_0: ::ethers::core::types::Address, + p_1: bool, + p_2: ::std::string::String, + p_3: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([71, 92, 92, 51], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x4766da72) function + pub fn log_41( + &self, + p_0: ::ethers::core::types::U256, + p_1: ::ethers::core::types::U256, + p_2: bool, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([71, 102, 218, 114], (p_0, p_1, p_2)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x478d1c62) function + pub fn log_162( + &self, + p_0: ::ethers::core::types::Address, + p_1: ::ethers::core::types::U256, + p_2: ::ethers::core::types::Address, + p_3: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([71, 141, 28, 98], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x483d0416) function + pub fn log_163( + &self, + p_0: bool, + p_1: ::std::string::String, + p_2: bool, + p_3: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([72, 61, 4, 22], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x4a28c017) function + pub fn log_164( + &self, + p_0: ::ethers::core::types::Address, + p_1: ::ethers::core::types::U256, + p_2: ::ethers::core::types::U256, + p_3: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([74, 40, 192, 23], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x4a66cb34) function + pub fn log_165( + &self, + p_0: bool, + p_1: ::ethers::core::types::Address, + p_2: bool, + p_3: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([74, 102, 203, 52], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x4b5c4277) function + pub fn log_10( + &self, + p_0: ::std::string::String, + p_1: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([75, 92, 66, 119], (p_0, p_1)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x4c123d57) function + pub fn log_166( + &self, + p_0: bool, + p_1: bool, + p_2: ::ethers::core::types::Address, + p_3: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([76, 18, 61, 87], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x4ceda75a) function + pub fn log_42( + &self, + p_0: ::ethers::core::types::U256, + p_1: ::std::string::String, + p_2: bool, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([76, 237, 167, 90], (p_0, p_1, p_2)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x4f04fdc6) function + pub fn log_167( + &self, + p_0: ::std::string::String, + p_1: ::ethers::core::types::U256, + p_2: ::ethers::core::types::Address, + p_3: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([79, 4, 253, 198], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x50709698) function + pub fn log_43( + &self, + p_0: bool, + p_1: bool, + p_2: bool, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([80, 112, 150, 152], (p_0, p_1, p_2)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x50ad461d) function + pub fn log_168( + &self, + p_0: ::ethers::core::types::Address, + p_1: bool, + p_2: ::std::string::String, + p_3: bool, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([80, 173, 70, 29], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x515e38b6) function + pub fn log_169( + &self, + p_0: ::ethers::core::types::Address, + p_1: ::std::string::String, + p_2: bool, + p_3: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([81, 94, 56, 182], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x51973ec9) function + pub fn log_0(&self) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([81, 151, 62, 201], ()) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x51f09ff8) function + pub fn log_170( + &self, + p_0: bool, + p_1: ::ethers::core::types::Address, + p_2: ::ethers::core::types::U256, + p_3: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([81, 240, 159, 248], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x538e06ab) function + pub fn log_171( + &self, + p_0: bool, + p_1: ::std::string::String, + p_2: bool, + p_3: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([83, 142, 6, 171], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x54a7a9a0) function + pub fn log_172( + &self, + p_0: bool, + p_1: bool, + p_2: ::ethers::core::types::U256, + p_3: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([84, 167, 169, 160], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x56a5d1b1) function + pub fn log_173( + &self, + p_0: ::ethers::core::types::U256, + p_1: ::ethers::core::types::U256, + p_2: ::ethers::core::types::Address, + p_3: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([86, 165, 209, 177], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x5821efa1) function + pub fn log_44( + &self, + p_0: ::std::string::String, + p_1: ::std::string::String, + p_2: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([88, 33, 239, 161], (p_0, p_1, p_2)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x5970e089) function + pub fn log_45( + &self, + p_0: ::std::string::String, + p_1: ::ethers::core::types::U256, + p_2: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([89, 112, 224, 137], (p_0, p_1, p_2)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x59cfcbe3) function + pub fn log_174( + &self, + p_0: ::ethers::core::types::U256, + p_1: ::ethers::core::types::U256, + p_2: ::ethers::core::types::U256, + p_3: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([89, 207, 203, 227], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x5a477632) function + pub fn log_175( + &self, + p_0: ::std::string::String, + p_1: ::ethers::core::types::Address, + p_2: ::ethers::core::types::U256, + p_3: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([90, 71, 118, 50], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x5a9b5ed5) function + pub fn log_46( + &self, + p_0: ::ethers::core::types::U256, + p_1: ::ethers::core::types::Address, + p_2: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([90, 155, 94, 213], (p_0, p_1, p_2)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x5ab84e1f) function + pub fn log_176( + &self, + p_0: ::std::string::String, + p_1: ::ethers::core::types::U256, + p_2: ::std::string::String, + p_3: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([90, 184, 78, 31], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x5abd992a) function + pub fn log_177( + &self, + p_0: ::ethers::core::types::U256, + p_1: ::ethers::core::types::Address, + p_2: bool, + p_3: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([90, 189, 153, 42], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x5c430d47) function + pub fn log_178( + &self, + p_0: ::ethers::core::types::Address, + p_1: ::ethers::core::types::U256, + p_2: ::std::string::String, + p_3: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([92, 67, 13, 71], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x5c96b331) function + pub fn log_47( + &self, + p_0: ::ethers::core::types::U256, + p_1: ::ethers::core::types::U256, + p_2: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([92, 150, 179, 49], (p_0, p_1, p_2)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x5ccd4e37) function + pub fn log_179( + &self, + p_0: ::std::string::String, + p_1: ::std::string::String, + p_2: ::ethers::core::types::Address, + p_3: bool, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([92, 205, 78, 55], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x5d02c50b) function + pub fn log_180( + &self, + p_0: ::ethers::core::types::Address, + p_1: ::std::string::String, + p_2: ::std::string::String, + p_3: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([93, 2, 197, 11], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x5d08bb05) function + pub fn log_181( + &self, + p_0: ::std::string::String, + p_1: bool, + p_2: ::ethers::core::types::Address, + p_3: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([93, 8, 187, 5], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x5d1a971a) function + pub fn log_182( + &self, + p_0: ::std::string::String, + p_1: ::std::string::String, + p_2: ::ethers::core::types::U256, + p_3: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([93, 26, 151, 26], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x5da297eb) function + pub fn log_183( + &self, + p_0: ::ethers::core::types::U256, + p_1: ::ethers::core::types::U256, + p_2: ::std::string::String, + p_3: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([93, 162, 151, 235], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x5e84b0ea) function + pub fn log_184( + &self, + p_0: ::std::string::String, + p_1: ::std::string::String, + p_2: bool, + p_3: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([94, 132, 176, 234], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x5ea2b7ae) function + pub fn log_185( + &self, + p_0: ::std::string::String, + p_1: ::ethers::core::types::U256, + p_2: ::ethers::core::types::Address, + p_3: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([94, 162, 183, 174], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x5f15d28c) function + pub fn log_186( + &self, + p_0: ::std::string::String, + p_1: ::ethers::core::types::Address, + p_2: ::std::string::String, + p_3: bool, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([95, 21, 210, 140], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x5f1d5c9f) function + pub fn log_187( + &self, + p_0: ::ethers::core::types::Address, + p_1: ::std::string::String, + p_2: bool, + p_3: bool, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([95, 29, 92, 159], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x5f743a7c) function + pub fn log_188( + &self, + p_0: ::ethers::core::types::U256, + p_1: ::ethers::core::types::Address, + p_2: ::ethers::core::types::U256, + p_3: bool, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([95, 116, 58, 124], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x5f7b9afb) function + pub fn log_48( + &self, + p_0: bool, + p_1: ::ethers::core::types::Address, + p_2: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([95, 123, 154, 251], (p_0, p_1, p_2)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x6168ed61) function + pub fn log_189( + &self, + p_0: ::ethers::core::types::U256, + p_1: ::std::string::String, + p_2: ::ethers::core::types::Address, + p_3: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([97, 104, 237, 97], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x619e4d0e) function + pub fn log_190( + &self, + p_0: bool, + p_1: bool, + p_2: ::ethers::core::types::U256, + p_3: bool, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([97, 158, 77, 14], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x63183678) function + pub fn log_191( + &self, + p_0: ::ethers::core::types::Address, + p_1: ::std::string::String, + p_2: ::ethers::core::types::U256, + p_3: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([99, 24, 54, 120], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x63cb41f9) function + pub fn log_49( + &self, + p_0: ::ethers::core::types::U256, + p_1: ::ethers::core::types::Address, + p_2: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([99, 203, 65, 249], (p_0, p_1, p_2)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x63fb8bc5) function + pub fn log_192( + &self, + p_0: ::std::string::String, + p_1: ::ethers::core::types::Address, + p_2: ::ethers::core::types::U256, + p_3: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([99, 251, 139, 197], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x643fd0df) function + pub fn log_11( + &self, + p_0: ::ethers::core::types::U256, + p_1: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([100, 63, 208, 223], (p_0, p_1)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x64b5bb67) function + pub fn log_193( + &self, + p_0: ::std::string::String, + p_1: bool, + p_2: ::ethers::core::types::U256, + p_3: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([100, 181, 187, 103], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x660375dd) function + pub fn log_194( + &self, + p_0: ::ethers::core::types::Address, + p_1: bool, + p_2: ::ethers::core::types::Address, + p_3: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([102, 3, 117, 221], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x665bf134) function + pub fn log_195( + &self, + p_0: ::ethers::core::types::Address, + p_1: ::ethers::core::types::Address, + p_2: ::ethers::core::types::Address, + p_3: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([102, 91, 241, 52], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x66f1bc67) function + pub fn log_196( + &self, + p_0: ::ethers::core::types::Address, + p_1: ::ethers::core::types::U256, + p_2: ::ethers::core::types::U256, + p_3: bool, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([102, 241, 188, 103], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x678209a8) function + pub fn log_50( + &self, + p_0: ::ethers::core::types::Address, + p_1: ::ethers::core::types::U256, + p_2: bool, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([103, 130, 9, 168], (p_0, p_1, p_2)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x67dd6ff1) function + pub fn log_51( + &self, + p_0: ::ethers::core::types::Address, + p_1: ::std::string::String, + p_2: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([103, 221, 111, 241], (p_0, p_1, p_2)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x68c8b8bd) function + pub fn log_197( + &self, + p_0: ::ethers::core::types::U256, + p_1: bool, + p_2: ::std::string::String, + p_3: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([104, 200, 184, 189], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x691a8f74) function + pub fn log_198( + &self, + p_0: ::ethers::core::types::U256, + p_1: ::std::string::String, + p_2: ::ethers::core::types::U256, + p_3: bool, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([105, 26, 143, 116], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x69276c86) function + pub fn log_12( + &self, + p_0: ::ethers::core::types::U256, + p_1: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([105, 39, 108, 134], (p_0, p_1)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x69640b59) function + pub fn log_199( + &self, + p_0: ::ethers::core::types::U256, + p_1: bool, + p_2: bool, + p_3: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([105, 100, 11, 89], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x6a1199e2) function + pub fn log_200( + &self, + p_0: bool, + p_1: ::ethers::core::types::U256, + p_2: ::std::string::String, + p_3: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([106, 17, 153, 226], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x6a9c478b) function + pub fn log_201( + &self, + p_0: bool, + p_1: ::ethers::core::types::Address, + p_2: bool, + p_3: bool, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([106, 156, 71, 139], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x6b0e5d53) function + pub fn log_202( + &self, + p_0: bool, + p_1: ::std::string::String, + p_2: ::ethers::core::types::U256, + p_3: bool, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([107, 14, 93, 83], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x6cde40b8) function + pub fn log_203( + &self, + p_0: ::ethers::core::types::U256, + p_1: ::ethers::core::types::U256, + p_2: ::ethers::core::types::Address, + p_3: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([108, 222, 64, 184], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x6d1e8751) function + pub fn log_204( + &self, + p_0: bool, + p_1: bool, + p_2: ::std::string::String, + p_3: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([109, 30, 135, 81], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x6d572f44) function + pub fn log_205( + &self, + p_0: ::std::string::String, + p_1: ::std::string::String, + p_2: ::std::string::String, + p_3: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([109, 87, 47, 68], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x6d7045c1) function + pub fn log_206( + &self, + p_0: bool, + p_1: bool, + p_2: bool, + p_3: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([109, 112, 69, 193], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x6dd434ca) function + pub fn log_207( + &self, + p_0: bool, + p_1: ::std::string::String, + p_2: ::ethers::core::types::Address, + p_3: bool, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([109, 212, 52, 202], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x6f1a594e) function + pub fn log_208( + &self, + p_0: ::ethers::core::types::Address, + p_1: ::ethers::core::types::Address, + p_2: ::std::string::String, + p_3: bool, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([111, 26, 89, 78], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x6f7c603e) function + pub fn log_209( + &self, + p_0: bool, + p_1: ::ethers::core::types::Address, + p_2: ::std::string::String, + p_3: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([111, 124, 96, 62], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x7190a529) function + pub fn log_210( + &self, + p_0: ::std::string::String, + p_1: bool, + p_2: bool, + p_3: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([113, 144, 165, 41], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x71d04af2) function + pub fn log_52( + &self, + p_0: ::ethers::core::types::U256, + p_1: ::ethers::core::types::U256, + p_2: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([113, 208, 74, 242], (p_0, p_1, p_2)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x736efbb6) function + pub fn log_211( + &self, + p_0: ::ethers::core::types::U256, + p_1: ::ethers::core::types::Address, + p_2: ::ethers::core::types::Address, + p_3: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([115, 110, 251, 182], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x742d6ee7) function + pub fn log_212( + &self, + p_0: ::std::string::String, + p_1: bool, + p_2: ::ethers::core::types::U256, + p_3: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([116, 45, 110, 231], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x7464ce23) function + pub fn log_213( + &self, + p_0: ::ethers::core::types::U256, + p_1: bool, + p_2: bool, + p_3: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([116, 100, 206, 35], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x759f86bb) function + pub fn log_13( + &self, + p_0: ::ethers::core::types::Address, + p_1: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([117, 159, 134, 187], (p_0, p_1)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x75b605d3) function + pub fn log_14( + &self, + p_0: ::ethers::core::types::Address, + p_1: bool, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([117, 182, 5, 211], (p_0, p_1)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x7626db92) function + pub fn log_214( + &self, + p_0: ::std::string::String, + p_1: ::ethers::core::types::U256, + p_2: ::ethers::core::types::U256, + p_3: bool, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([118, 38, 219, 146], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x79884c2b) function + pub fn log_215( + &self, + p_0: ::std::string::String, + p_1: ::ethers::core::types::Address, + p_2: bool, + p_3: bool, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([121, 136, 76, 43], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x7af6ab25) function + pub fn log_216( + &self, + p_0: ::ethers::core::types::U256, + p_1: ::ethers::core::types::U256, + p_2: ::std::string::String, + p_3: bool, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([122, 246, 171, 37], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x7afac959) function + pub fn log_53( + &self, + p_0: ::ethers::core::types::U256, + p_1: ::std::string::String, + p_2: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([122, 250, 201, 89], (p_0, p_1, p_2)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x7bc0d848) function + pub fn log_54( + &self, + p_0: ::ethers::core::types::Address, + p_1: ::ethers::core::types::U256, + p_2: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([123, 192, 216, 72], (p_0, p_1, p_2)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x7be0c3eb) function + pub fn log_217( + &self, + p_0: bool, + p_1: ::std::string::String, + p_2: ::std::string::String, + p_3: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([123, 224, 195, 235], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x7bf181a1) function + pub fn log_218( + &self, + p_0: bool, + p_1: ::ethers::core::types::Address, + p_2: ::ethers::core::types::U256, + p_3: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([123, 241, 129, 161], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x7c4632a4) function + pub fn log_219( + &self, + p_0: ::std::string::String, + p_1: ::ethers::core::types::U256, + p_2: ::std::string::String, + p_3: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([124, 70, 50, 164], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x7cc3c607) function + pub fn log_220( + &self, + p_0: ::std::string::String, + p_1: ::std::string::String, + p_2: ::ethers::core::types::Address, + p_3: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([124, 195, 198, 7], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x7d24491d) function + pub fn log_221( + &self, + p_0: ::std::string::String, + p_1: ::ethers::core::types::U256, + p_2: ::std::string::String, + p_3: bool, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([125, 36, 73, 29], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x7dd4d0e0) function + pub fn log_222( + &self, + p_0: bool, + p_1: bool, + p_2: ::ethers::core::types::U256, + p_3: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([125, 212, 208, 224], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x7f9bbca2) function + pub fn log_223( + &self, + p_0: bool, + p_1: ::ethers::core::types::U256, + p_2: bool, + p_3: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([127, 155, 188, 162], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x800a1c67) function + pub fn log_224( + &self, + p_0: ::std::string::String, + p_1: ::ethers::core::types::Address, + p_2: ::ethers::core::types::Address, + p_3: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([128, 10, 28, 103], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x80e6a20b) function + pub fn log_225( + &self, + p_0: ::ethers::core::types::Address, + p_1: bool, + p_2: ::std::string::String, + p_3: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([128, 230, 162, 11], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x82112a42) function + pub fn log_226( + &self, + p_0: ::std::string::String, + p_1: ::ethers::core::types::U256, + p_2: ::ethers::core::types::Address, + p_3: bool, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([130, 17, 42, 66], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x82c25b74) function + pub fn log_227( + &self, + p_0: ::ethers::core::types::U256, + p_1: ::std::string::String, + p_2: ::ethers::core::types::U256, + p_3: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([130, 194, 91, 116], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x8309e8a8) function + pub fn log_15( + &self, + p_0: ::ethers::core::types::Address, + p_1: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([131, 9, 232, 168], (p_0, p_1)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x850b7ad6) function + pub fn log_55( + &self, + p_0: ::std::string::String, + p_1: bool, + p_2: bool, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([133, 11, 122, 214], (p_0, p_1, p_2)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x853c4849) function + pub fn log_16( + &self, + p_0: bool, + p_1: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([133, 60, 72, 73], (p_0, p_1)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x854b3496) function + pub fn log_228( + &self, + p_0: ::std::string::String, + p_1: ::ethers::core::types::U256, + p_2: ::ethers::core::types::U256, + p_3: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([133, 75, 52, 150], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x85775021) function + pub fn log_56( + &self, + p_0: ::ethers::core::types::U256, + p_1: bool, + p_2: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([133, 119, 80, 33], (p_0, p_1, p_2)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x88a8c406) function + pub fn log_229( + &self, + p_0: ::ethers::core::types::Address, + p_1: ::ethers::core::types::U256, + p_2: ::std::string::String, + p_3: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([136, 168, 196, 6], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x88cb6041) function + pub fn log_230( + &self, + p_0: ::ethers::core::types::U256, + p_1: bool, + p_2: ::ethers::core::types::U256, + p_3: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([136, 203, 96, 65], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x88f6e4b2) function + pub fn log_231( + &self, + p_0: ::ethers::core::types::U256, + p_1: ::ethers::core::types::U256, + p_2: ::ethers::core::types::Address, + p_3: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([136, 246, 228, 178], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x895af8c5) function + pub fn log_232( + &self, + p_0: ::std::string::String, + p_1: bool, + p_2: bool, + p_3: bool, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([137, 90, 248, 197], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x8af7cf8a) function + pub fn log_233( + &self, + p_0: ::std::string::String, + p_1: bool, + p_2: ::ethers::core::types::U256, + p_3: bool, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([138, 247, 207, 138], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x8c329b1a) function + pub fn log_234( + &self, + p_0: bool, + p_1: bool, + p_2: bool, + p_3: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([140, 50, 155, 26], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x8c4e5de6) function + pub fn log_235( + &self, + p_0: ::ethers::core::types::Address, + p_1: bool, + p_2: bool, + p_3: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([140, 78, 93, 230], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x8da6def5) function + pub fn log_236( + &self, + p_0: ::ethers::core::types::Address, + p_1: ::ethers::core::types::Address, + p_2: ::ethers::core::types::U256, + p_3: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([141, 166, 222, 245], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x8e3f78a9) function + pub fn log_237( + &self, + p_0: ::std::string::String, + p_1: bool, + p_2: bool, + p_3: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([142, 63, 120, 169], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x8e69fb5d) function + pub fn log_238( + &self, + p_0: bool, + p_1: ::ethers::core::types::U256, + p_2: ::ethers::core::types::U256, + p_3: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([142, 105, 251, 93], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x8eafb02b) function + pub fn log_239( + &self, + p_0: ::std::string::String, + p_1: ::std::string::String, + p_2: ::std::string::String, + p_3: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([142, 175, 176, 43], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x8ef3f399) function + pub fn log_240( + &self, + p_0: ::std::string::String, + p_1: ::ethers::core::types::Address, + p_2: ::ethers::core::types::Address, + p_3: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([142, 243, 243, 153], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x8f736d16) function + pub fn log_241( + &self, + p_0: ::ethers::core::types::Address, + p_1: ::ethers::core::types::Address, + p_2: ::std::string::String, + p_3: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([143, 115, 109, 22], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x8feac525) function + pub fn log_17( + &self, + p_0: bool, + p_1: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([143, 234, 197, 37], (p_0, p_1)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x90c30a56) function + pub fn log_242( + &self, + p_0: ::ethers::core::types::U256, + p_1: ::std::string::String, + p_2: ::ethers::core::types::Address, + p_3: bool, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([144, 195, 10, 86], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x90fb06aa) function + pub fn log_243( + &self, + p_0: ::ethers::core::types::U256, + p_1: ::ethers::core::types::Address, + p_2: bool, + p_3: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([144, 251, 6, 170], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x9143dbb1) function + pub fn log_244( + &self, + p_0: bool, + p_1: ::ethers::core::types::U256, + p_2: bool, + p_3: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([145, 67, 219, 177], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x91a02e2a) function + pub fn log_245( + &self, + p_0: ::ethers::core::types::U256, + p_1: bool, + p_2: ::ethers::core::types::U256, + p_3: bool, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([145, 160, 46, 42], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x91d1112e) function + pub fn log_246( + &self, + p_0: ::std::string::String, + p_1: ::ethers::core::types::Address, + p_2: ::std::string::String, + p_3: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([145, 209, 17, 46], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x932bbb38) function + pub fn log_57( + &self, + p_0: ::std::string::String, + p_1: bool, + p_2: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([147, 43, 187, 56], (p_0, p_1, p_2)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x935e09bf) function + pub fn log_247( + &self, + p_0: ::std::string::String, + p_1: bool, + p_2: ::ethers::core::types::U256, + p_3: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([147, 94, 9, 191], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x94250d77) function + pub fn log_248( + &self, + p_0: ::ethers::core::types::Address, + p_1: ::ethers::core::types::Address, + p_2: ::ethers::core::types::Address, + p_3: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([148, 37, 13, 119], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x958c28c6) function + pub fn log_249( + &self, + p_0: ::std::string::String, + p_1: bool, + p_2: ::ethers::core::types::Address, + p_3: bool, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([149, 140, 40, 198], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x9591b953) function + pub fn log_58( + &self, + p_0: bool, + p_1: ::std::string::String, + p_2: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([149, 145, 185, 83], (p_0, p_1, p_2)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x95ed0195) function + pub fn log_59( + &self, + p_0: ::std::string::String, + p_1: ::std::string::String, + p_2: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([149, 237, 1, 149], (p_0, p_1, p_2)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x97d394d8) function + pub fn log_250( + &self, + p_0: bool, + p_1: ::std::string::String, + p_2: ::std::string::String, + p_3: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([151, 211, 148, 216], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x9a816a83) function + pub fn log_251( + &self, + p_0: ::ethers::core::types::U256, + p_1: ::ethers::core::types::U256, + p_2: bool, + p_3: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([154, 129, 106, 131], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x9acd3616) function + pub fn log_252( + &self, + p_0: bool, + p_1: ::ethers::core::types::U256, + p_2: bool, + p_3: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([154, 205, 54, 22], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x9b4254e2) function + pub fn log_253( + &self, + p_0: ::ethers::core::types::Address, + p_1: ::ethers::core::types::Address, + p_2: ::ethers::core::types::U256, + p_3: bool, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([155, 66, 84, 226], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x9b6ec042) function + pub fn log_60( + &self, + p_0: ::ethers::core::types::U256, + p_1: ::ethers::core::types::Address, + p_2: bool, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([155, 110, 192, 66], (p_0, p_1, p_2)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x9c3adfa1) function + pub fn log_254( + &self, + p_0: ::ethers::core::types::U256, + p_1: ::std::string::String, + p_2: ::ethers::core::types::Address, + p_3: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([156, 58, 223, 161], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x9c4f99fb) function + pub fn log_61( + &self, + p_0: ::ethers::core::types::Address, + p_1: bool, + p_2: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([156, 79, 153, 251], (p_0, p_1, p_2)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x9cba8fff) function + pub fn log_255( + &self, + p_0: ::ethers::core::types::U256, + p_1: ::ethers::core::types::Address, + p_2: ::std::string::String, + p_3: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([156, 186, 143, 255], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x9d22d5dd) function + pub fn log_256( + &self, + p_0: ::std::string::String, + p_1: bool, + p_2: bool, + p_3: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([157, 34, 213, 221], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x9f1bc36e) function + pub fn log_257( + &self, + p_0: ::ethers::core::types::Address, + p_1: ::ethers::core::types::Address, + p_2: bool, + p_3: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([159, 27, 195, 110], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x9ffb2f93) function + pub fn log_258( + &self, + p_0: ::std::string::String, + p_1: ::ethers::core::types::U256, + p_2: ::ethers::core::types::Address, + p_3: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([159, 251, 47, 147], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xa04e2f87) function + pub fn log_259( + &self, + p_0: ::ethers::core::types::Address, + p_1: ::std::string::String, + p_2: ::std::string::String, + p_3: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([160, 78, 47, 135], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xa0a47963) function + pub fn log_260( + &self, + p_0: bool, + p_1: bool, + p_2: ::ethers::core::types::Address, + p_3: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([160, 164, 121, 99], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xa1bcc9b3) function + pub fn log_261( + &self, + p_0: ::ethers::core::types::Address, + p_1: ::ethers::core::types::U256, + p_2: ::ethers::core::types::Address, + p_3: bool, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([161, 188, 201, 179], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xa1ef4cbb) function + pub fn log_262( + &self, + p_0: ::ethers::core::types::U256, + p_1: bool, + p_2: ::ethers::core::types::Address, + p_3: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([161, 239, 76, 187], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xa1f2e8aa) function + pub fn log_62( + &self, + p_0: ::ethers::core::types::Address, + p_1: ::ethers::core::types::U256, + p_2: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([161, 242, 232, 170], (p_0, p_1, p_2)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xa31bfdcc) function + pub fn log_263( + &self, + p_0: ::ethers::core::types::Address, + p_1: ::ethers::core::types::U256, + p_2: bool, + p_3: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([163, 27, 253, 204], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xa5b4fc99) function + pub fn log_264( + &self, + p_0: ::ethers::core::types::U256, + p_1: ::ethers::core::types::U256, + p_2: bool, + p_3: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([165, 180, 252, 153], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xa5cada94) function + pub fn log_265( + &self, + p_0: bool, + p_1: ::std::string::String, + p_2: ::ethers::core::types::Address, + p_3: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([165, 202, 218, 148], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xa6f50b0f) function + pub fn log_266( + &self, + p_0: ::ethers::core::types::Address, + p_1: bool, + p_2: ::ethers::core::types::Address, + p_3: bool, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([166, 245, 11, 15], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xa73c1db6) function + pub fn log_267( + &self, + p_0: bool, + p_1: ::ethers::core::types::Address, + p_2: ::std::string::String, + p_3: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([167, 60, 29, 182], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xa75c59de) function + pub fn log_268( + &self, + p_0: ::ethers::core::types::Address, + p_1: bool, + p_2: ::ethers::core::types::Address, + p_3: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([167, 92, 89, 222], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xa7a87853) function + pub fn log_269( + &self, + p_0: ::std::string::String, + p_1: ::ethers::core::types::U256, + p_2: ::ethers::core::types::U256, + p_3: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([167, 168, 120, 83], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xa826caeb) function + pub fn log_270( + &self, + p_0: ::std::string::String, + p_1: bool, + p_2: ::std::string::String, + p_3: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([168, 38, 202, 235], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xaa6540c8) function + pub fn log_271( + &self, + p_0: ::ethers::core::types::Address, + p_1: ::ethers::core::types::Address, + p_2: bool, + p_3: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([170, 101, 64, 200], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xaabc9a31) function + pub fn log_272( + &self, + p_0: ::std::string::String, + p_1: ::ethers::core::types::Address, + p_2: ::std::string::String, + p_3: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([170, 188, 154, 49], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xab085ae6) function + pub fn log_273( + &self, + p_0: ::ethers::core::types::U256, + p_1: ::ethers::core::types::U256, + p_2: bool, + p_3: bool, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([171, 8, 90, 230], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xabf73a98) function + pub fn log_274( + &self, + p_0: ::std::string::String, + p_1: ::ethers::core::types::U256, + p_2: bool, + p_3: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([171, 247, 58, 152], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xade052c7) function + pub fn log_275( + &self, + p_0: ::ethers::core::types::U256, + p_1: bool, + p_2: ::ethers::core::types::Address, + p_3: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([173, 224, 82, 199], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xae2ec581) function + pub fn log_276( + &self, + p_0: ::ethers::core::types::U256, + p_1: ::std::string::String, + p_2: bool, + p_3: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([174, 46, 197, 129], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xb028c9bd) function + pub fn log_277( + &self, + p_0: ::ethers::core::types::U256, + p_1: ::std::string::String, + p_2: ::std::string::String, + p_3: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([176, 40, 201, 189], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xb076847f) function + pub fn log_63( + &self, + p_0: bool, + p_1: ::std::string::String, + p_2: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([176, 118, 132, 127], (p_0, p_1, p_2)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xb0e0f9b5) function + pub fn log_64( + &self, + p_0: ::std::string::String, + p_1: ::std::string::String, + p_2: bool, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([176, 224, 249, 181], (p_0, p_1, p_2)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xb115611f) function + pub fn log_65( + &self, + p_0: ::ethers::core::types::U256, + p_1: ::std::string::String, + p_2: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([177, 21, 97, 31], (p_0, p_1, p_2)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xb3a6b6bd) function + pub fn log_278( + &self, + p_0: ::ethers::core::types::U256, + p_1: ::std::string::String, + p_2: ::std::string::String, + p_3: bool, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([179, 166, 182, 189], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xb4c314ff) function + pub fn log_279( + &self, + p_0: bool, + p_1: ::ethers::core::types::U256, + p_2: ::ethers::core::types::Address, + p_3: bool, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([180, 195, 20, 255], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xb59dbd60) function + pub fn log_280( + &self, + p_0: ::std::string::String, + p_1: ::ethers::core::types::Address, + p_2: ::ethers::core::types::Address, + p_3: bool, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([181, 157, 189, 96], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xb60e72cc) function + pub fn log_18( + &self, + p_0: ::std::string::String, + p_1: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([182, 14, 114, 204], (p_0, p_1)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xb69bcaf6) function + pub fn log_66( + &self, + p_0: ::ethers::core::types::Address, + p_1: ::ethers::core::types::U256, + p_2: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([182, 155, 202, 246], (p_0, p_1, p_2)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xb6f577a1) function + pub fn log_281( + &self, + p_0: ::ethers::core::types::U256, + p_1: bool, + p_2: bool, + p_3: bool, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([182, 245, 119, 161], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xb7b914ca) function + pub fn log_282( + &self, + p_0: ::ethers::core::types::U256, + p_1: ::std::string::String, + p_2: ::ethers::core::types::U256, + p_3: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([183, 185, 20, 202], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xb857163a) function + pub fn log_283( + &self, + p_0: bool, + p_1: bool, + p_2: ::std::string::String, + p_3: bool, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([184, 87, 22, 58], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xba535d9c) function + pub fn log_284( + &self, + p_0: ::ethers::core::types::U256, + p_1: ::std::string::String, + p_2: bool, + p_3: bool, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([186, 83, 93, 156], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xbc0b61fe) function + pub fn log_285( + &self, + p_0: ::ethers::core::types::Address, + p_1: ::std::string::String, + p_2: bool, + p_3: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([188, 11, 97, 254], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xbcfd9be0) function + pub fn log_67( + &self, + p_0: ::ethers::core::types::U256, + p_1: ::ethers::core::types::Address, + p_2: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([188, 253, 155, 224], (p_0, p_1, p_2)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xbe553481) function + pub fn log_286( + &self, + p_0: ::ethers::core::types::Address, + p_1: ::ethers::core::types::Address, + p_2: ::ethers::core::types::U256, + p_3: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([190, 85, 52, 129], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xbe984353) function + pub fn log_287( + &self, + p_0: bool, + p_1: ::ethers::core::types::U256, + p_2: ::ethers::core::types::U256, + p_3: bool, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([190, 152, 67, 83], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xbf01f891) function + pub fn log_288( + &self, + p_0: ::ethers::core::types::Address, + p_1: ::ethers::core::types::U256, + p_2: ::std::string::String, + p_3: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([191, 1, 248, 145], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xc0a302d8) function + pub fn log_289( + &self, + p_0: bool, + p_1: bool, + p_2: ::ethers::core::types::Address, + p_3: bool, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([192, 163, 2, 216], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xc21f64c7) function + pub fn log_290( + &self, + p_0: bool, + p_1: ::ethers::core::types::Address, + p_2: ::std::string::String, + p_3: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([194, 31, 100, 199], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xc371c7db) function + pub fn log_291( + &self, + p_0: ::std::string::String, + p_1: ::std::string::String, + p_2: bool, + p_3: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([195, 113, 199, 219], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xc3a8a654) function + pub fn log_292( + &self, + p_0: ::std::string::String, + p_1: ::std::string::String, + p_2: ::ethers::core::types::U256, + p_3: bool, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([195, 168, 166, 84], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xc3b55635) function + pub fn log_19( + &self, + p_0: ::std::string::String, + p_1: bool, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([195, 181, 86, 53], (p_0, p_1)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xc3fc3970) function + pub fn log_68( + &self, + p_0: bool, + p_1: ::ethers::core::types::U256, + p_2: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([195, 252, 57, 112], (p_0, p_1, p_2)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xc4643e20) function + pub fn log_293( + &self, + p_0: ::ethers::core::types::Address, + p_1: bool, + p_2: ::ethers::core::types::U256, + p_3: bool, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([196, 100, 62, 32], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xc598d185) function + pub fn log_294( + &self, + p_0: ::ethers::core::types::U256, + p_1: ::ethers::core::types::U256, + p_2: ::ethers::core::types::U256, + p_3: bool, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([197, 152, 209, 133], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xc5ad85f9) function + pub fn log_295( + &self, + p_0: ::ethers::core::types::Address, + p_1: ::ethers::core::types::U256, + p_2: bool, + p_3: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([197, 173, 133, 249], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xc67ea9d1) function + pub fn log_296( + &self, + p_0: ::std::string::String, + p_1: ::ethers::core::types::U256, + p_2: ::std::string::String, + p_3: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([198, 126, 169, 209], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xc6acc7a8) function + pub fn log_297( + &self, + p_0: ::ethers::core::types::U256, + p_1: bool, + p_2: ::ethers::core::types::U256, + p_3: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([198, 172, 199, 168], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xc91d5ed4) function + pub fn log_69( + &self, + p_0: ::std::string::String, + p_1: ::ethers::core::types::Address, + p_2: bool, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([201, 29, 94, 212], (p_0, p_1, p_2)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xc95958d6) function + pub fn log_70( + &self, + p_0: ::std::string::String, + p_1: bool, + p_2: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([201, 89, 88, 214], (p_0, p_1, p_2)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xca47c4eb) function + pub fn log_71( + &self, + p_0: ::std::string::String, + p_1: ::ethers::core::types::U256, + p_2: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([202, 71, 196, 235], (p_0, p_1, p_2)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xca7733b1) function + pub fn log_72( + &self, + p_0: ::std::string::String, + p_1: ::ethers::core::types::U256, + p_2: bool, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([202, 119, 51, 177], (p_0, p_1, p_2)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xcac43479) function + pub fn log_298( + &self, + p_0: ::ethers::core::types::Address, + p_1: bool, + p_2: bool, + p_3: bool, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([202, 196, 52, 121], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xcc32ab07) function + pub fn log_299( + &self, + p_0: ::ethers::core::types::U256, + p_1: ::ethers::core::types::Address, + p_2: ::std::string::String, + p_3: bool, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([204, 50, 171, 7], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xccf790a1) function + pub fn log_300( + &self, + p_0: ::ethers::core::types::Address, + p_1: bool, + p_2: ::ethers::core::types::U256, + p_3: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([204, 247, 144, 161], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xceb5f4d7) function + pub fn log_301( + &self, + p_0: bool, + p_1: ::ethers::core::types::U256, + p_2: bool, + p_3: bool, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([206, 181, 244, 215], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xcf009880) function + pub fn log_302( + &self, + p_0: ::ethers::core::types::U256, + p_1: ::std::string::String, + p_2: bool, + p_3: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([207, 0, 152, 128], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xcf020fb1) function + pub fn log_73( + &self, + p_0: ::ethers::core::types::Address, + p_1: ::std::string::String, + p_2: bool, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([207, 2, 15, 177], (p_0, p_1, p_2)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xcf18105c) function + pub fn log_303( + &self, + p_0: ::ethers::core::types::Address, + p_1: ::ethers::core::types::U256, + p_2: ::std::string::String, + p_3: bool, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([207, 24, 16, 92], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xcf394485) function + pub fn log_304( + &self, + p_0: ::ethers::core::types::Address, + p_1: bool, + p_2: bool, + p_3: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([207, 57, 68, 133], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xd1ed7a3c) function + pub fn log_74( + &self, + p_0: ::ethers::core::types::U256, + p_1: ::ethers::core::types::U256, + p_2: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([209, 237, 122, 60], (p_0, p_1, p_2)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xd2763667) function + pub fn log_75( + &self, + p_0: bool, + p_1: ::ethers::core::types::Address, + p_2: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([210, 118, 54, 103], (p_0, p_1, p_2)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xd2d423cd) function + pub fn log_305( + &self, + p_0: ::ethers::core::types::U256, + p_1: ::std::string::String, + p_2: bool, + p_3: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([210, 212, 35, 205], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xd583c602) function + pub fn log_306( + &self, + p_0: ::ethers::core::types::U256, + p_1: ::std::string::String, + p_2: ::std::string::String, + p_3: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([213, 131, 198, 2], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xd6019f1c) function + pub fn log_307( + &self, + p_0: bool, + p_1: ::ethers::core::types::Address, + p_2: ::ethers::core::types::U256, + p_3: bool, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([214, 1, 159, 28], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xd6aefad2) function + pub fn log_308( + &self, + p_0: ::std::string::String, + p_1: ::std::string::String, + p_2: bool, + p_3: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([214, 174, 250, 210], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xd812a167) function + pub fn log_309( + &self, + p_0: bool, + p_1: ::ethers::core::types::Address, + p_2: ::ethers::core::types::Address, + p_3: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([216, 18, 161, 103], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xdaf0d4aa) function + pub fn log_20( + &self, + p_0: ::ethers::core::types::Address, + p_1: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([218, 240, 212, 170], (p_0, p_1)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xdbb4c247) function + pub fn log_76( + &self, + p_0: bool, + p_1: ::std::string::String, + p_2: bool, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([219, 180, 194, 71], (p_0, p_1, p_2)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xdc5e935b) function + pub fn log_310( + &self, + p_0: bool, + p_1: ::std::string::String, + p_2: bool, + p_3: bool, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([220, 94, 147, 91], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xddb06521) function + pub fn log_311( + &self, + p_0: ::ethers::core::types::U256, + p_1: ::ethers::core::types::Address, + p_2: ::ethers::core::types::U256, + p_3: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([221, 176, 101, 33], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xdddb9561) function + pub fn log_312( + &self, + p_0: ::ethers::core::types::U256, + p_1: bool, + p_2: bool, + p_3: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([221, 219, 149, 97], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xde03e774) function + pub fn log_313( + &self, + p_0: ::ethers::core::types::U256, + p_1: bool, + p_2: ::ethers::core::types::U256, + p_3: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([222, 3, 231, 116], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xde68f20a) function + pub fn log_314( + &self, + p_0: ::std::string::String, + p_1: ::std::string::String, + p_2: ::std::string::String, + p_3: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([222, 104, 242, 10], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xde9a9270) function + pub fn log_77( + &self, + p_0: bool, + p_1: ::ethers::core::types::Address, + p_2: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([222, 154, 146, 112], (p_0, p_1, p_2)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xdfc4a2e8) function + pub fn log_315( + &self, + p_0: ::ethers::core::types::Address, + p_1: bool, + p_2: bool, + p_3: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([223, 196, 162, 232], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xe0625b29) function + pub fn log_316( + &self, + p_0: ::std::string::String, + p_1: bool, + p_2: ::std::string::String, + p_3: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([224, 98, 91, 41], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xe0e95b98) function + pub fn log_317( + &self, + p_0: ::std::string::String, + p_1: ::ethers::core::types::U256, + p_2: bool, + p_3: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([224, 233, 91, 152], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xe0e9ad4f) function + pub fn log_78( + &self, + p_0: ::std::string::String, + p_1: ::ethers::core::types::Address, + p_2: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([224, 233, 173, 79], (p_0, p_1, p_2)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xe21de278) function + pub fn log_318( + &self, + p_0: ::std::string::String, + p_1: ::ethers::core::types::U256, + p_2: ::ethers::core::types::U256, + p_3: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([226, 29, 226, 120], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xe298f47d) function + pub fn log_79( + &self, + p_0: ::std::string::String, + p_1: bool, + p_2: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([226, 152, 244, 125], (p_0, p_1, p_2)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xe2bfd60b) function + pub fn log_319( + &self, + p_0: bool, + p_1: ::ethers::core::types::Address, + p_2: ::std::string::String, + p_3: bool, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([226, 191, 214, 11], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xe351140f) function + pub fn log_320( + &self, + p_0: ::ethers::core::types::U256, + p_1: ::ethers::core::types::Address, + p_2: bool, + p_3: bool, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([227, 81, 20, 15], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xe3a9ca2f) function + pub fn log_321( + &self, + p_0: bool, + p_1: bool, + p_2: ::std::string::String, + p_3: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([227, 169, 202, 47], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xe41b6f6f) function + pub fn log_322( + &self, + p_0: ::std::string::String, + p_1: ::ethers::core::types::U256, + p_2: bool, + p_3: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([228, 27, 111, 111], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xe5e70b2b) function + pub fn log_323( + &self, + p_0: bool, + p_1: ::ethers::core::types::U256, + p_2: ::std::string::String, + p_3: bool, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([229, 231, 11, 43], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xe8d3018d) function + pub fn log_324( + &self, + p_0: ::ethers::core::types::U256, + p_1: ::std::string::String, + p_2: ::ethers::core::types::Address, + p_3: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([232, 211, 1, 141], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xe8defba9) function + pub fn log_80( + &self, + p_0: bool, + p_1: ::ethers::core::types::U256, + p_2: bool, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([232, 222, 251, 169], (p_0, p_1, p_2)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xeb1bff80) function + pub fn log_325( + &self, + p_0: ::std::string::String, + p_1: ::std::string::String, + p_2: ::ethers::core::types::Address, + p_3: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([235, 27, 255, 128], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xeb7f6fd2) function + pub fn log_326( + &self, + p_0: ::ethers::core::types::U256, + p_1: ::ethers::core::types::U256, + p_2: bool, + p_3: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([235, 127, 111, 210], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xeb830c92) function + pub fn log_81( + &self, + p_0: ::ethers::core::types::Address, + p_1: bool, + p_2: bool, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([235, 131, 12, 146], (p_0, p_1, p_2)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xeb928d7f) function + pub fn log_327( + &self, + p_0: ::ethers::core::types::U256, + p_1: bool, + p_2: ::std::string::String, + p_3: bool, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([235, 146, 141, 127], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xed8f28f6) function + pub fn log_328( + &self, + p_0: ::std::string::String, + p_1: ::ethers::core::types::Address, + p_2: ::ethers::core::types::Address, + p_3: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([237, 143, 40, 246], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xef1cefe7) function + pub fn log_329( + &self, + p_0: ::ethers::core::types::Address, + p_1: ::ethers::core::types::Address, + p_2: ::std::string::String, + p_3: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([239, 28, 239, 231], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xef529018) function + pub fn log_330( + &self, + p_0: ::ethers::core::types::U256, + p_1: bool, + p_2: ::std::string::String, + p_3: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([239, 82, 144, 24], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xef72c513) function + pub fn log_331( + &self, + p_0: ::ethers::core::types::U256, + p_1: ::ethers::core::types::Address, + p_2: bool, + p_3: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([239, 114, 197, 19], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xf08744e8) function + pub fn log_82( + &self, + p_0: ::ethers::core::types::Address, + p_1: ::std::string::String, + p_2: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([240, 135, 68, 232], (p_0, p_1, p_2)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xf11699ed) function + pub fn log_83( + &self, + p_0: ::ethers::core::types::Address, + p_1: bool, + p_2: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([241, 22, 153, 237], (p_0, p_1, p_2)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xf2a66286) function + pub fn log_84( + &self, + p_0: ::ethers::core::types::Address, + p_1: ::ethers::core::types::Address, + p_2: bool, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([242, 166, 98, 134], (p_0, p_1, p_2)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xf45d7d2c) function + pub fn log_332( + &self, + p_0: ::std::string::String, + p_1: ::std::string::String, + p_2: ::ethers::core::types::U256, + p_3: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([244, 93, 125, 44], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xf4880ea4) function + pub fn log_333( + &self, + p_0: bool, + p_1: bool, + p_2: ::ethers::core::types::Address, + p_3: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([244, 136, 14, 164], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xf5bc2249) function + pub fn log_334( + &self, + p_0: bool, + p_1: ::ethers::core::types::U256, + p_2: ::std::string::String, + p_3: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([245, 188, 34, 73], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xf666715a) function + pub fn log_21( + &self, + p_0: ::ethers::core::types::U256, + p_1: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([246, 102, 113, 90], (p_0, p_1)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xf7e36245) function + pub fn log_335( + &self, + p_0: ::ethers::core::types::Address, + p_1: ::std::string::String, + p_2: ::ethers::core::types::Address, + p_3: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([247, 227, 98, 69], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xf808da20) function + pub fn log_336( + &self, + p_0: ::ethers::core::types::Address, + p_1: ::ethers::core::types::Address, + p_2: ::ethers::core::types::Address, + p_3: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([248, 8, 218, 32], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xf82c50f1) function + pub fn log_4( + &self, + p_0: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([248, 44, 80, 241], p_0) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xf8f51b1e) function + pub fn log_337( + &self, + p_0: ::std::string::String, + p_1: ::ethers::core::types::Address, + p_2: ::ethers::core::types::U256, + p_3: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([248, 245, 27, 30], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xf9ad2b89) function + pub fn log_338( + &self, + p_0: bool, + p_1: bool, + p_2: ::std::string::String, + p_3: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([249, 173, 43, 137], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xfa8185af) function + pub fn log_339( + &self, + p_0: ::ethers::core::types::U256, + p_1: ::ethers::core::types::U256, + p_2: ::ethers::core::types::U256, + p_3: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([250, 129, 133, 175], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xfb772265) function + pub fn log_85( + &self, + p_0: ::ethers::core::types::Address, + p_1: ::std::string::String, + p_2: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([251, 119, 34, 101], (p_0, p_1, p_2)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xfc4845f0) function + pub fn log_340( + &self, + p_0: ::std::string::String, + p_1: ::ethers::core::types::Address, + p_2: ::ethers::core::types::U256, + p_3: bool, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([252, 72, 69, 240], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xfcec75e0) function + pub fn log_86( + &self, + p_0: ::std::string::String, + p_1: ::ethers::core::types::Address, + p_2: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([252, 236, 117, 224], (p_0, p_1, p_2)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xfdb4f990) function + pub fn log_341( + &self, + p_0: ::ethers::core::types::Address, + p_1: ::ethers::core::types::Address, + p_2: ::ethers::core::types::U256, + p_3: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([253, 180, 249, 144], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0xfedd1fff) function + pub fn log_342( + &self, + p_0: bool, + p_1: ::ethers::core::types::U256, + p_2: ::std::string::String, + p_3: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([254, 221, 31, 255], (p_0, p_1, p_2, p_3)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x2d5b6cb9) function + pub fn log_5( + &self, + p_0: ::ethers::core::types::I256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([45, 91, 108, 185], p_0) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `log` (0x3ca6268e) function + pub fn log_22( + &self, + p_0: ::std::string::String, + p_1: ::ethers::core::types::I256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([60, 166, 38, 142], (p_0, p_1)) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `logAddress` (0x5f91b0af) function + pub fn log_address( + &self, + p_0: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([95, 145, 176, 175], p_0) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `logBool` (0xba7ab84e) function + pub fn log_bool(&self, p_0: bool) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([186, 122, 184, 78], p_0) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `logBytes` (0xe17bf956) function + pub fn log_bytes( + &self, + p_0: ::ethers::core::types::Bytes, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([225, 123, 249, 86], p_0) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `logBytes1` (0x6f4171c9) function + pub fn log_bytes_1( + &self, + p_0: [u8; 1], + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([111, 65, 113, 201], p_0) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `logBytes10` (0x9dc2a897) function + pub fn log_bytes_10( + &self, + p_0: [u8; 10], + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([157, 194, 168, 151], p_0) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `logBytes11` (0xdc08b6a7) function + pub fn log_bytes_11( + &self, + p_0: [u8; 11], + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([220, 8, 182, 167], p_0) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `logBytes12` (0x7656d6c7) function + pub fn log_bytes_12( + &self, + p_0: [u8; 12], + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([118, 86, 214, 199], p_0) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `logBytes13` (0x34c1d81b) function + pub fn log_bytes_13( + &self, + p_0: [u8; 13], + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([52, 193, 216, 27], p_0) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `logBytes14` (0x3ceaba65) function + pub fn log_bytes_14( + &self, + p_0: [u8; 14], + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([60, 234, 186, 101], p_0) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `logBytes15` (0x591a3da2) function + pub fn log_bytes_15( + &self, + p_0: [u8; 15], + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([89, 26, 61, 162], p_0) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `logBytes16` (0x1f8d7312) function + pub fn log_bytes_16( + &self, + p_0: [u8; 16], + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([31, 141, 115, 18], p_0) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `logBytes17` (0xf89a532f) function + pub fn log_bytes_17( + &self, + p_0: [u8; 17], + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([248, 154, 83, 47], p_0) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `logBytes18` (0xd8652642) function + pub fn log_bytes_18( + &self, + p_0: [u8; 18], + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([216, 101, 38, 66], p_0) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `logBytes19` (0x00f56bc9) function + pub fn log_bytes_19( + &self, + p_0: [u8; 19], + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([0, 245, 107, 201], p_0) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `logBytes2` (0x9b5e943e) function + pub fn log_bytes_2( + &self, + p_0: [u8; 2], + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([155, 94, 148, 62], p_0) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `logBytes20` (0xecb8567e) function + pub fn log_bytes_20( + &self, + p_0: [u8; 20], + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([236, 184, 86, 126], p_0) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `logBytes21` (0x3052c08f) function + pub fn log_bytes_21( + &self, + p_0: [u8; 21], + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([48, 82, 192, 143], p_0) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `logBytes22` (0x807ab434) function + pub fn log_bytes_22( + &self, + p_0: [u8; 22], + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([128, 122, 180, 52], p_0) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `logBytes23` (0x4979b037) function + pub fn log_bytes_23( + &self, + p_0: [u8; 23], + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([73, 121, 176, 55], p_0) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `logBytes24` (0x0977aefc) function + pub fn log_bytes_24( + &self, + p_0: [u8; 24], + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([9, 119, 174, 252], p_0) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `logBytes25` (0xaea9963f) function + pub fn log_bytes_25( + &self, + p_0: [u8; 25], + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([174, 169, 150, 63], p_0) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `logBytes26` (0xd3635628) function + pub fn log_bytes_26( + &self, + p_0: [u8; 26], + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([211, 99, 86, 40], p_0) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `logBytes27` (0xfc372f9f) function + pub fn log_bytes_27( + &self, + p_0: [u8; 27], + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([252, 55, 47, 159], p_0) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `logBytes28` (0x382f9a34) function + pub fn log_bytes_28( + &self, + p_0: [u8; 28], + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([56, 47, 154, 52], p_0) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `logBytes29` (0x7a187641) function + pub fn log_bytes_29( + &self, + p_0: [u8; 29], + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([122, 24, 118, 65], p_0) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `logBytes3` (0x7782fa2d) function + pub fn log_bytes_3( + &self, + p_0: [u8; 3], + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([119, 130, 250, 45], p_0) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `logBytes30` (0xc4340ef6) function + pub fn log_bytes_30( + &self, + p_0: [u8; 30], + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([196, 52, 14, 246], p_0) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `logBytes31` (0x81fc8648) function + pub fn log_bytes_31( + &self, + p_0: [u8; 31], + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([129, 252, 134, 72], p_0) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `logBytes32` (0x2d21d6f7) function + pub fn log_bytes_32( + &self, + p_0: [u8; 32], + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([45, 33, 214, 247], p_0) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `logBytes4` (0xfba3ad39) function + pub fn log_bytes_4( + &self, + p_0: [u8; 4], + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([251, 163, 173, 57], p_0) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `logBytes5` (0x5583be2e) function + pub fn log_bytes_5( + &self, + p_0: [u8; 5], + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([85, 131, 190, 46], p_0) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `logBytes6` (0x4942adc6) function + pub fn log_bytes_6( + &self, + p_0: [u8; 6], + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([73, 66, 173, 198], p_0) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `logBytes7` (0x4574afab) function + pub fn log_bytes_7( + &self, + p_0: [u8; 7], + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([69, 116, 175, 171], p_0) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `logBytes8` (0x9902e47f) function + pub fn log_bytes_8( + &self, + p_0: [u8; 8], + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([153, 2, 228, 127], p_0) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `logBytes9` (0x50a138df) function + pub fn log_bytes_9( + &self, + p_0: [u8; 9], + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([80, 161, 56, 223], p_0) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `logInt` (0x6525b5f5) function + pub fn log_int( + &self, + p_0: ::ethers::core::types::I256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([101, 37, 181, 245], p_0) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `logString` (0x0bb563d6) function + pub fn log_string( + &self, + p_0: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([11, 181, 99, 214], p_0) + .expect("method not found (this should never happen)") + } + /// Calls the contract's `logUint` (0x9905b744) function + pub fn log_uint( + &self, + p_0: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([153, 5, 183, 68], p_0) + .expect("method not found (this should never happen)") + } + } + impl From<::ethers::contract::Contract> + for HardhatConsole + { + fn from(contract: ::ethers::contract::Contract) -> Self { + Self::new(contract.address(), contract.client()) + } + } + /// Container type for all input parameters for the `log` function with + /// signature `log(address,address,string)` and selector `0x007150be` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(address,address,string)")] + pub struct Log23Call { + pub p_0: ::ethers::core::types::Address, + pub p_1: ::ethers::core::types::Address, + pub p_2: ::std::string::String, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(bool,uint256,uint256,address)` and selector `0x00dd87b9` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(bool,uint256,uint256,address)")] + pub struct Log87Call { + pub p_0: bool, + pub p_1: ::ethers::core::types::U256, + pub p_2: ::ethers::core::types::U256, + pub p_3: ::ethers::core::types::Address, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(address,address,address)` and selector `0x018c84c2` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(address,address,address)")] + pub struct Log24Call { + pub p_0: ::ethers::core::types::Address, + pub p_1: ::ethers::core::types::Address, + pub p_2: ::ethers::core::types::Address, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(uint256,address,address,string)` and selector + /// `0x031c6f73` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(uint256,address,address,string)")] + pub struct Log88Call { + pub p_0: ::ethers::core::types::U256, + pub p_1: ::ethers::core::types::Address, + pub p_2: ::ethers::core::types::Address, + pub p_3: ::std::string::String, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(string,address,bool,string)` and selector `0x0454c079` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(string,address,bool,string)")] + pub struct Log89Call { + pub p_0: ::std::string::String, + pub p_1: ::ethers::core::types::Address, + pub p_2: bool, + pub p_3: ::std::string::String, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(uint256,bool,address,uint256)` and selector `0x078287f5` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(uint256,bool,address,uint256)")] + pub struct Log90Call { + pub p_0: ::ethers::core::types::U256, + pub p_1: bool, + pub p_2: ::ethers::core::types::Address, + pub p_3: ::ethers::core::types::U256, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(bool,address,bool,uint256)` and selector `0x07831502` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(bool,address,bool,uint256)")] + pub struct Log91Call { + pub p_0: bool, + pub p_1: ::ethers::core::types::Address, + pub p_2: bool, + pub p_3: ::ethers::core::types::U256, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(bool,uint256,address)` and selector `0x088ef9d2` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(bool,uint256,address)")] + pub struct Log25Call { + pub p_0: bool, + pub p_1: ::ethers::core::types::U256, + pub p_2: ::ethers::core::types::Address, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(uint256,address,address,bool)` and selector `0x091ffaf5` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(uint256,address,address,bool)")] + pub struct Log92Call { + pub p_0: ::ethers::core::types::U256, + pub p_1: ::ethers::core::types::Address, + pub p_2: ::ethers::core::types::Address, + pub p_3: bool, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(address,bool,uint256,string)` and selector `0x0aa6cfad` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(address,bool,uint256,string)")] + pub struct Log93Call { + pub p_0: ::ethers::core::types::Address, + pub p_1: bool, + pub p_2: ::ethers::core::types::U256, + pub p_3: ::std::string::String, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(bool,bool,uint256,uint256)` and selector `0x0bb00eab` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(bool,bool,uint256,uint256)")] + pub struct Log94Call { + pub p_0: bool, + pub p_1: bool, + pub p_2: ::ethers::core::types::U256, + pub p_3: ::ethers::core::types::U256, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(bool,address,address,uint256)` and selector `0x0c66d1be` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(bool,address,address,uint256)")] + pub struct Log95Call { + pub p_0: bool, + pub p_1: ::ethers::core::types::Address, + pub p_2: ::ethers::core::types::Address, + pub p_3: ::ethers::core::types::U256, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(uint256,address,uint256,uint256)` and selector + /// `0x0c9cd9c1` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(uint256,address,uint256,uint256)")] + pub struct Log96Call { + pub p_0: ::ethers::core::types::U256, + pub p_1: ::ethers::core::types::Address, + pub p_2: ::ethers::core::types::U256, + pub p_3: ::ethers::core::types::U256, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(string,address,uint256)` and selector `0x0d26b925` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(string,address,uint256)")] + pub struct Log26Call { + pub p_0: ::std::string::String, + pub p_1: ::ethers::core::types::Address, + pub p_2: ::ethers::core::types::U256, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(address,string,address,address)` and selector + /// `0x0d36fa20` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(address,string,address,address)")] + pub struct Log97Call { + pub p_0: ::ethers::core::types::Address, + pub p_1: ::std::string::String, + pub p_2: ::ethers::core::types::Address, + pub p_3: ::ethers::core::types::Address, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(address,string,address,bool)` and selector `0x0df12b76` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(address,string,address,bool)")] + pub struct Log98Call { + pub p_0: ::ethers::core::types::Address, + pub p_1: ::std::string::String, + pub p_2: ::ethers::core::types::Address, + pub p_3: bool, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(address,address,address,bool)` and selector `0x0e378994` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(address,address,address,bool)")] + pub struct Log99Call { + pub p_0: ::ethers::core::types::Address, + pub p_1: ::ethers::core::types::Address, + pub p_2: ::ethers::core::types::Address, + pub p_3: bool, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(address,string,uint256,bool)` and selector `0x0ef7e050` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(address,string,uint256,bool)")] + pub struct Log100Call { + pub p_0: ::ethers::core::types::Address, + pub p_1: ::std::string::String, + pub p_2: ::ethers::core::types::U256, + pub p_3: bool, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(address,uint256,address,uint256)` and selector + /// `0x100f650e` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(address,uint256,address,uint256)")] + pub struct Log101Call { + pub p_0: ::ethers::core::types::Address, + pub p_1: ::ethers::core::types::U256, + pub p_2: ::ethers::core::types::Address, + pub p_3: ::ethers::core::types::U256, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(string,string,uint256,address)` and selector `0x1023f7b2` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(string,string,uint256,address)")] + pub struct Log102Call { + pub p_0: ::std::string::String, + pub p_1: ::std::string::String, + pub p_2: ::ethers::core::types::U256, + pub p_3: ::ethers::core::types::Address, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(bool,bool,address)` and selector `0x1078f68d` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(bool,bool,address)")] + pub struct Log27Call { + pub p_0: bool, + pub p_1: bool, + pub p_2: ::ethers::core::types::Address, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(bool,string,uint256)` and selector `0x1093ee11` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(bool,string,uint256)")] + pub struct Log28Call { + pub p_0: bool, + pub p_1: ::std::string::String, + pub p_2: ::ethers::core::types::U256, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(bool,string,address,string)` and selector `0x12d6c788` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(bool,string,address,string)")] + pub struct Log103Call { + pub p_0: bool, + pub p_1: ::std::string::String, + pub p_2: ::ethers::core::types::Address, + pub p_3: ::std::string::String, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(bool,bool,uint256)` and selector `0x12f21602` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(bool,bool,uint256)")] + pub struct Log29Call { + pub p_0: bool, + pub p_1: bool, + pub p_2: ::ethers::core::types::U256, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(bool,address,uint256,address)` and selector `0x136b05dd` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(bool,address,uint256,address)")] + pub struct Log104Call { + pub p_0: bool, + pub p_1: ::ethers::core::types::Address, + pub p_2: ::ethers::core::types::U256, + pub p_3: ::ethers::core::types::Address, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(bool,uint256,address,uint256)` and selector `0x1537dc87` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(bool,uint256,address,uint256)")] + pub struct Log105Call { + pub p_0: bool, + pub p_1: ::ethers::core::types::U256, + pub p_2: ::ethers::core::types::Address, + pub p_3: ::ethers::core::types::U256, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(bool,string,uint256,address)` and selector `0x1596a1ce` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(bool,string,uint256,address)")] + pub struct Log106Call { + pub p_0: bool, + pub p_1: ::std::string::String, + pub p_2: ::ethers::core::types::U256, + pub p_3: ::ethers::core::types::Address, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(address,string,string,uint256)` and selector `0x159f8927` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(address,string,string,uint256)")] + pub struct Log107Call { + pub p_0: ::ethers::core::types::Address, + pub p_1: ::std::string::String, + pub p_2: ::std::string::String, + pub p_3: ::ethers::core::types::U256, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(uint256,address,uint256,address)` and selector + /// `0x15c127b5` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(uint256,address,uint256,address)")] + pub struct Log108Call { + pub p_0: ::ethers::core::types::U256, + pub p_1: ::ethers::core::types::Address, + pub p_2: ::ethers::core::types::U256, + pub p_3: ::ethers::core::types::Address, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(uint256,uint256,address,bool)` and selector `0x15cac476` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(uint256,uint256,address,bool)")] + pub struct Log109Call { + pub p_0: ::ethers::core::types::U256, + pub p_1: ::ethers::core::types::U256, + pub p_2: ::ethers::core::types::Address, + pub p_3: bool, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(bool,string,bool,uint256)` and selector `0x1606a393` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(bool,string,bool,uint256)")] + pub struct Log110Call { + pub p_0: bool, + pub p_1: ::std::string::String, + pub p_2: bool, + pub p_3: ::ethers::core::types::U256, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(bool,string,string,string)` and selector `0x1762e32a` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(bool,string,string,string)")] + pub struct Log111Call { + pub p_0: bool, + pub p_1: ::std::string::String, + pub p_2: ::std::string::String, + pub p_3: ::std::string::String, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(address,address,uint256)` and selector `0x17fe6185` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(address,address,uint256)")] + pub struct Log30Call { + pub p_0: ::ethers::core::types::Address, + pub p_1: ::ethers::core::types::Address, + pub p_2: ::ethers::core::types::U256, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(bool,address,bool)` and selector `0x18c9c746` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(bool,address,bool)")] + pub struct Log31Call { + pub p_0: bool, + pub p_1: ::ethers::core::types::Address, + pub p_2: bool, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(uint256,uint256,uint256,uint256)` and selector + /// `0x193fb800` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(uint256,uint256,uint256,uint256)")] + pub struct Log112Call { + pub p_0: ::ethers::core::types::U256, + pub p_1: ::ethers::core::types::U256, + pub p_2: ::ethers::core::types::U256, + pub p_3: ::ethers::core::types::U256, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(address,bool,string,address)` and selector `0x19fd4956` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(address,bool,string,address)")] + pub struct Log113Call { + pub p_0: ::ethers::core::types::Address, + pub p_1: bool, + pub p_2: ::std::string::String, + pub p_3: ::ethers::core::types::Address, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(bool,string,uint256,string)` and selector `0x1ad96de6` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(bool,string,uint256,string)")] + pub struct Log114Call { + pub p_0: bool, + pub p_1: ::std::string::String, + pub p_2: ::ethers::core::types::U256, + pub p_3: ::std::string::String, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(bool,uint256,address,string)` and selector `0x1bb3b09a` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(bool,uint256,address,string)")] + pub struct Log115Call { + pub p_0: bool, + pub p_1: ::ethers::core::types::U256, + pub p_2: ::ethers::core::types::Address, + pub p_3: ::std::string::String, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(bool,address,bool,address)` and selector `0x1c41a336` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(bool,address,bool,address)")] + pub struct Log116Call { + pub p_0: bool, + pub p_1: ::ethers::core::types::Address, + pub p_2: bool, + pub p_3: ::ethers::core::types::Address, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(string,uint256,address)` and selector `0x1c7ec448` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(string,uint256,address)")] + pub struct Log32Call { + pub p_0: ::std::string::String, + pub p_1: ::ethers::core::types::U256, + pub p_2: ::ethers::core::types::Address, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(uint256,bool)` and selector `0x1c9d7eb3` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(uint256,bool)")] + pub struct Log6Call { + pub p_0: ::ethers::core::types::U256, + pub p_1: bool, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(bool,address,address,address)` and selector `0x1d14d001` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(bool,address,address,address)")] + pub struct Log117Call { + pub p_0: bool, + pub p_1: ::ethers::core::types::Address, + pub p_2: ::ethers::core::types::Address, + pub p_3: ::ethers::core::types::Address, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(address,uint256,address,string)` and selector + /// `0x1da986ea` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(address,uint256,address,string)")] + pub struct Log118Call { + pub p_0: ::ethers::core::types::Address, + pub p_1: ::ethers::core::types::U256, + pub p_2: ::ethers::core::types::Address, + pub p_3: ::std::string::String, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(address,string,uint256,uint256)` and selector + /// `0x1dc8e1b8` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(address,string,uint256,uint256)")] + pub struct Log119Call { + pub p_0: ::ethers::core::types::Address, + pub p_1: ::std::string::String, + pub p_2: ::ethers::core::types::U256, + pub p_3: ::ethers::core::types::U256, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(bool,string,string,bool)` and selector `0x1e4b87e5` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(bool,string,string,bool)")] + pub struct Log120Call { + pub p_0: bool, + pub p_1: ::std::string::String, + pub p_2: ::std::string::String, + pub p_3: bool, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(uint256,bool,uint256)` and selector `0x20098014` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(uint256,bool,uint256)")] + pub struct Log33Call { + pub p_0: ::ethers::core::types::U256, + pub p_1: bool, + pub p_2: ::ethers::core::types::U256, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(address,string,bool,address)` and selector `0x205871c2` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(address,string,bool,address)")] + pub struct Log121Call { + pub p_0: ::ethers::core::types::Address, + pub p_1: ::std::string::String, + pub p_2: bool, + pub p_3: ::ethers::core::types::Address, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(uint256,bool,bool)` and selector `0x20718650` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(uint256,bool,bool)")] + pub struct Log34Call { + pub p_0: ::ethers::core::types::U256, + pub p_1: bool, + pub p_2: bool, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(address,uint256,uint256,address)` and selector + /// `0x20e3984d` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(address,uint256,uint256,address)")] + pub struct Log122Call { + pub p_0: ::ethers::core::types::Address, + pub p_1: ::ethers::core::types::U256, + pub p_2: ::ethers::core::types::U256, + pub p_3: ::ethers::core::types::Address, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(address,bool,string)` and selector `0x212255cc` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(address,bool,string)")] + pub struct Log35Call { + pub p_0: ::ethers::core::types::Address, + pub p_1: bool, + pub p_2: ::std::string::String, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(uint256,string,string,string)` and selector `0x21ad0683` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(uint256,string,string,string)")] + pub struct Log123Call { + pub p_0: ::ethers::core::types::U256, + pub p_1: ::std::string::String, + pub p_2: ::std::string::String, + pub p_3: ::std::string::String, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(address,address,string,string)` and selector `0x21bdaf25` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(address,address,string,string)")] + pub struct Log124Call { + pub p_0: ::ethers::core::types::Address, + pub p_1: ::ethers::core::types::Address, + pub p_2: ::std::string::String, + pub p_3: ::std::string::String, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(string,address,bool,address)` and selector `0x223603bd` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(string,address,bool,address)")] + pub struct Log125Call { + pub p_0: ::std::string::String, + pub p_1: ::ethers::core::types::Address, + pub p_2: bool, + pub p_3: ::ethers::core::types::Address, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(address,uint256,bool,uint256)` and selector `0x22f6b999` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(address,uint256,bool,uint256)")] + pub struct Log126Call { + pub p_0: ::ethers::core::types::Address, + pub p_1: ::ethers::core::types::U256, + pub p_2: bool, + pub p_3: ::ethers::core::types::U256, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(string,address,string,string)` and selector `0x245986f2` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(string,address,string,string)")] + pub struct Log127Call { + pub p_0: ::std::string::String, + pub p_1: ::ethers::core::types::Address, + pub p_2: ::std::string::String, + pub p_3: ::std::string::String, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(uint256,address,address,address)` and selector + /// `0x2488b414` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(uint256,address,address,address)")] + pub struct Log128Call { + pub p_0: ::ethers::core::types::U256, + pub p_1: ::ethers::core::types::Address, + pub p_2: ::ethers::core::types::Address, + pub p_3: ::ethers::core::types::Address, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(string,bool,string,uint256)` and selector `0x24f91465` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(string,bool,string,uint256)")] + pub struct Log129Call { + pub p_0: ::std::string::String, + pub p_1: bool, + pub p_2: ::std::string::String, + pub p_3: ::ethers::core::types::U256, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(bool,bool,string)` and selector `0x2555fa46` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(bool,bool,string)")] + pub struct Log36Call { + pub p_0: bool, + pub p_1: bool, + pub p_2: ::std::string::String, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(bool,uint256,address,address)` and selector `0x26f560a8` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(bool,uint256,address,address)")] + pub struct Log130Call { + pub p_0: bool, + pub p_1: ::ethers::core::types::U256, + pub p_2: ::ethers::core::types::Address, + pub p_3: ::ethers::core::types::Address, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(uint256,uint256,string,string)` and selector `0x27d8afd2` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(uint256,uint256,string,string)")] + pub struct Log131Call { + pub p_0: ::ethers::core::types::U256, + pub p_1: ::ethers::core::types::U256, + pub p_2: ::std::string::String, + pub p_3: ::std::string::String, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(bool,string,uint256,uint256)` and selector `0x28863fcb` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(bool,string,uint256,uint256)")] + pub struct Log132Call { + pub p_0: bool, + pub p_1: ::std::string::String, + pub p_2: ::ethers::core::types::U256, + pub p_3: ::ethers::core::types::U256, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(bool,bool)` and selector `0x2a110e83` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(bool,bool)")] + pub struct Log7Call { + pub p_0: bool, + pub p_1: bool, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(bool,bool,bool,string)` and selector `0x2ae408d4` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(bool,bool,bool,string)")] + pub struct Log133Call { + pub p_0: bool, + pub p_1: bool, + pub p_2: bool, + pub p_3: ::std::string::String, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(bool,string,address,address)` and selector `0x2b2b18dc` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(bool,string,address,address)")] + pub struct Log134Call { + pub p_0: bool, + pub p_1: ::std::string::String, + pub p_2: ::ethers::core::types::Address, + pub p_3: ::ethers::core::types::Address, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(string,string,string,bool)` and selector `0x2c1754ed` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(string,string,string,bool)")] + pub struct Log135Call { + pub p_0: ::std::string::String, + pub p_1: ::std::string::String, + pub p_2: ::std::string::String, + pub p_3: bool, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(uint256,bool,string,uint256)` and selector `0x2c1d0746` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(uint256,bool,string,uint256)")] + pub struct Log136Call { + pub p_0: ::ethers::core::types::U256, + pub p_1: bool, + pub p_2: ::std::string::String, + pub p_3: ::ethers::core::types::U256, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(address)` and selector `0x2c2ecbc2` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(address)")] + pub struct Log1Call { + pub p_0: ::ethers::core::types::Address, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(address,address,bool,bool)` and selector `0x2cd4134a` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(address,address,bool,bool)")] + pub struct Log137Call { + pub p_0: ::ethers::core::types::Address, + pub p_1: ::ethers::core::types::Address, + pub p_2: bool, + pub p_3: bool, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(string,string,string)` and selector `0x2ced7cef` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(string,string,string)")] + pub struct Log37Call { + pub p_0: ::std::string::String, + pub p_1: ::std::string::String, + pub p_2: ::std::string::String, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(string,bool,address,string)` and selector `0x2d8e33a4` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(string,bool,address,string)")] + pub struct Log138Call { + pub p_0: ::std::string::String, + pub p_1: bool, + pub p_2: ::ethers::core::types::Address, + pub p_3: ::std::string::String, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(address,bool,address,string)` and selector `0x2dd778e6` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(address,bool,address,string)")] + pub struct Log139Call { + pub p_0: ::ethers::core::types::Address, + pub p_1: bool, + pub p_2: ::ethers::core::types::Address, + pub p_3: ::std::string::String, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(string,address)` and selector `0x319af333` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(string,address)")] + pub struct Log8Call { + pub p_0: ::std::string::String, + pub p_1: ::ethers::core::types::Address, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(bool)` and selector `0x32458eed` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(bool)")] + pub struct Log2Call { + pub p_0: bool, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(string,bool,address,address)` and selector `0x33e9dd1d` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(string,bool,address,address)")] + pub struct Log140Call { + pub p_0: ::std::string::String, + pub p_1: bool, + pub p_2: ::ethers::core::types::Address, + pub p_3: ::ethers::core::types::Address, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(address,uint256,uint256,uint256)` and selector + /// `0x34f0e636` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(address,uint256,uint256,uint256)")] + pub struct Log141Call { + pub p_0: ::ethers::core::types::Address, + pub p_1: ::ethers::core::types::U256, + pub p_2: ::ethers::core::types::U256, + pub p_3: ::ethers::core::types::U256, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(uint256,bool,address)` and selector `0x35085f7b` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(uint256,bool,address)")] + pub struct Log38Call { + pub p_0: ::ethers::core::types::U256, + pub p_1: bool, + pub p_2: ::ethers::core::types::Address, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(string,uint256,bool,bool)` and selector `0x354c36d6` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(string,uint256,bool,bool)")] + pub struct Log142Call { + pub p_0: ::std::string::String, + pub p_1: ::ethers::core::types::U256, + pub p_2: bool, + pub p_3: bool, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(address,string,string,bool)` and selector `0x35a5071f` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(address,string,string,bool)")] + pub struct Log143Call { + pub p_0: ::ethers::core::types::Address, + pub p_1: ::std::string::String, + pub p_2: ::std::string::String, + pub p_3: bool, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(bool,uint256,uint256)` and selector `0x37103367` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(bool,uint256,uint256)")] + pub struct Log39Call { + pub p_0: bool, + pub p_1: ::ethers::core::types::U256, + pub p_2: ::ethers::core::types::U256, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(bool,uint256,uint256,uint256)` and selector `0x374bb4b2` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(bool,uint256,uint256,uint256)")] + pub struct Log144Call { + pub p_0: bool, + pub p_1: ::ethers::core::types::U256, + pub p_2: ::ethers::core::types::U256, + pub p_3: ::ethers::core::types::U256, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(uint256,string,uint256)` and selector `0x37aa7d4c` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(uint256,string,uint256)")] + pub struct Log40Call { + pub p_0: ::ethers::core::types::U256, + pub p_1: ::std::string::String, + pub p_2: ::ethers::core::types::U256, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(address,bool,uint256,uint256)` and selector `0x386ff5f4` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(address,bool,uint256,uint256)")] + pub struct Log145Call { + pub p_0: ::ethers::core::types::Address, + pub p_1: bool, + pub p_2: ::ethers::core::types::U256, + pub p_3: ::ethers::core::types::U256, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(address,address,bool,uint256)` and selector `0x3971e78c` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(address,address,bool,uint256)")] + pub struct Log146Call { + pub p_0: ::ethers::core::types::Address, + pub p_1: ::ethers::core::types::Address, + pub p_2: bool, + pub p_3: ::ethers::core::types::U256, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(bool,uint256)` and selector `0x399174d3` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(bool,uint256)")] + pub struct Log9Call { + pub p_0: bool, + pub p_1: ::ethers::core::types::U256, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(uint256,string,uint256,address)` and selector + /// `0x3b2279b4` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(uint256,string,uint256,address)")] + pub struct Log147Call { + pub p_0: ::ethers::core::types::U256, + pub p_1: ::std::string::String, + pub p_2: ::ethers::core::types::U256, + pub p_3: ::ethers::core::types::Address, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(bool,bool,bool,bool)` and selector `0x3b2a5ce0` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(bool,bool,bool,bool)")] + pub struct Log148Call { + pub p_0: bool, + pub p_1: bool, + pub p_2: bool, + pub p_3: bool, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(address,uint256,bool,bool)` and selector `0x3bf5e537` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(address,uint256,bool,bool)")] + pub struct Log149Call { + pub p_0: ::ethers::core::types::Address, + pub p_1: ::ethers::core::types::U256, + pub p_2: bool, + pub p_3: bool, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(uint256,address,string,string)` and selector `0x3e128ca3` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(uint256,address,string,string)")] + pub struct Log150Call { + pub p_0: ::ethers::core::types::U256, + pub p_1: ::ethers::core::types::Address, + pub p_2: ::std::string::String, + pub p_3: ::std::string::String, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(string,address,bool,uint256)` and selector `0x3e9f866a` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(string,address,bool,uint256)")] + pub struct Log151Call { + pub p_0: ::std::string::String, + pub p_1: ::ethers::core::types::Address, + pub p_2: bool, + pub p_3: ::ethers::core::types::U256, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(string,bool,string,bool)` and selector `0x3f8a701d` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(string,bool,string,bool)")] + pub struct Log152Call { + pub p_0: ::std::string::String, + pub p_1: bool, + pub p_2: ::std::string::String, + pub p_3: bool, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(string,string,bool,bool)` and selector `0x40785869` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(string,string,bool,bool)")] + pub struct Log153Call { + pub p_0: ::std::string::String, + pub p_1: ::std::string::String, + pub p_2: bool, + pub p_3: bool, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(string)` and selector `0x41304fac` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(string)")] + pub struct Log3Call { + pub p_0: ::std::string::String, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(uint256,uint256,string,address)` and selector + /// `0x42d21db7` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(uint256,uint256,string,address)")] + pub struct Log154Call { + pub p_0: ::ethers::core::types::U256, + pub p_1: ::ethers::core::types::U256, + pub p_2: ::std::string::String, + pub p_3: ::ethers::core::types::Address, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(string,string,address,address)` and selector `0x439c7bef` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(string,string,address,address)")] + pub struct Log155Call { + pub p_0: ::std::string::String, + pub p_1: ::std::string::String, + pub p_2: ::ethers::core::types::Address, + pub p_3: ::ethers::core::types::Address, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(address,string,uint256,string)` and selector `0x448830a8` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(address,string,uint256,string)")] + pub struct Log156Call { + pub p_0: ::ethers::core::types::Address, + pub p_1: ::std::string::String, + pub p_2: ::ethers::core::types::U256, + pub p_3: ::std::string::String, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(uint256,bool,address,bool)` and selector `0x454d54a5` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(uint256,bool,address,bool)")] + pub struct Log157Call { + pub p_0: ::ethers::core::types::U256, + pub p_1: bool, + pub p_2: ::ethers::core::types::Address, + pub p_3: bool, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(address,string,address,uint256)` and selector + /// `0x457fe3cf` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(address,string,address,uint256)")] + pub struct Log158Call { + pub p_0: ::ethers::core::types::Address, + pub p_1: ::std::string::String, + pub p_2: ::ethers::core::types::Address, + pub p_3: ::ethers::core::types::U256, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(bool,address,address,bool)` and selector `0x46600be0` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(bool,address,address,bool)")] + pub struct Log159Call { + pub p_0: bool, + pub p_1: ::ethers::core::types::Address, + pub p_2: ::ethers::core::types::Address, + pub p_3: bool, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(uint256,address,string,uint256)` and selector + /// `0x46826b5d` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(uint256,address,string,uint256)")] + pub struct Log160Call { + pub p_0: ::ethers::core::types::U256, + pub p_1: ::ethers::core::types::Address, + pub p_2: ::std::string::String, + pub p_3: ::ethers::core::types::U256, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(address,bool,string,string)` and selector `0x475c5c33` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(address,bool,string,string)")] + pub struct Log161Call { + pub p_0: ::ethers::core::types::Address, + pub p_1: bool, + pub p_2: ::std::string::String, + pub p_3: ::std::string::String, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(uint256,uint256,bool)` and selector `0x4766da72` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(uint256,uint256,bool)")] + pub struct Log41Call { + pub p_0: ::ethers::core::types::U256, + pub p_1: ::ethers::core::types::U256, + pub p_2: bool, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(address,uint256,address,address)` and selector + /// `0x478d1c62` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(address,uint256,address,address)")] + pub struct Log162Call { + pub p_0: ::ethers::core::types::Address, + pub p_1: ::ethers::core::types::U256, + pub p_2: ::ethers::core::types::Address, + pub p_3: ::ethers::core::types::Address, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(bool,string,bool,string)` and selector `0x483d0416` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(bool,string,bool,string)")] + pub struct Log163Call { + pub p_0: bool, + pub p_1: ::std::string::String, + pub p_2: bool, + pub p_3: ::std::string::String, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(address,uint256,uint256,string)` and selector + /// `0x4a28c017` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(address,uint256,uint256,string)")] + pub struct Log164Call { + pub p_0: ::ethers::core::types::Address, + pub p_1: ::ethers::core::types::U256, + pub p_2: ::ethers::core::types::U256, + pub p_3: ::std::string::String, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(bool,address,bool,string)` and selector `0x4a66cb34` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(bool,address,bool,string)")] + pub struct Log165Call { + pub p_0: bool, + pub p_1: ::ethers::core::types::Address, + pub p_2: bool, + pub p_3: ::std::string::String, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(string,string)` and selector `0x4b5c4277` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(string,string)")] + pub struct Log10Call { + pub p_0: ::std::string::String, + pub p_1: ::std::string::String, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(bool,bool,address,uint256)` and selector `0x4c123d57` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(bool,bool,address,uint256)")] + pub struct Log166Call { + pub p_0: bool, + pub p_1: bool, + pub p_2: ::ethers::core::types::Address, + pub p_3: ::ethers::core::types::U256, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(uint256,string,bool)` and selector `0x4ceda75a` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(uint256,string,bool)")] + pub struct Log42Call { + pub p_0: ::ethers::core::types::U256, + pub p_1: ::std::string::String, + pub p_2: bool, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(string,uint256,address,uint256)` and selector + /// `0x4f04fdc6` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(string,uint256,address,uint256)")] + pub struct Log167Call { + pub p_0: ::std::string::String, + pub p_1: ::ethers::core::types::U256, + pub p_2: ::ethers::core::types::Address, + pub p_3: ::ethers::core::types::U256, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(bool,bool,bool)` and selector `0x50709698` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(bool,bool,bool)")] + pub struct Log43Call { + pub p_0: bool, + pub p_1: bool, + pub p_2: bool, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(address,bool,string,bool)` and selector `0x50ad461d` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(address,bool,string,bool)")] + pub struct Log168Call { + pub p_0: ::ethers::core::types::Address, + pub p_1: bool, + pub p_2: ::std::string::String, + pub p_3: bool, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(address,string,bool,uint256)` and selector `0x515e38b6` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(address,string,bool,uint256)")] + pub struct Log169Call { + pub p_0: ::ethers::core::types::Address, + pub p_1: ::std::string::String, + pub p_2: bool, + pub p_3: ::ethers::core::types::U256, + } + /// Container type for all input parameters for the `log` function with + /// signature `log()` and selector `0x51973ec9` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log()")] + pub struct Log0Call; + /// Container type for all input parameters for the `log` function with + /// signature `log(bool,address,uint256,string)` and selector `0x51f09ff8` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(bool,address,uint256,string)")] + pub struct Log170Call { + pub p_0: bool, + pub p_1: ::ethers::core::types::Address, + pub p_2: ::ethers::core::types::U256, + pub p_3: ::std::string::String, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(bool,string,bool,address)` and selector `0x538e06ab` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(bool,string,bool,address)")] + pub struct Log171Call { + pub p_0: bool, + pub p_1: ::std::string::String, + pub p_2: bool, + pub p_3: ::ethers::core::types::Address, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(bool,bool,uint256,address)` and selector `0x54a7a9a0` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(bool,bool,uint256,address)")] + pub struct Log172Call { + pub p_0: bool, + pub p_1: bool, + pub p_2: ::ethers::core::types::U256, + pub p_3: ::ethers::core::types::Address, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(uint256,uint256,address,address)` and selector + /// `0x56a5d1b1` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(uint256,uint256,address,address)")] + pub struct Log173Call { + pub p_0: ::ethers::core::types::U256, + pub p_1: ::ethers::core::types::U256, + pub p_2: ::ethers::core::types::Address, + pub p_3: ::ethers::core::types::Address, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(string,string,uint256)` and selector `0x5821efa1` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(string,string,uint256)")] + pub struct Log44Call { + pub p_0: ::std::string::String, + pub p_1: ::std::string::String, + pub p_2: ::ethers::core::types::U256, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(string,uint256,string)` and selector `0x5970e089` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(string,uint256,string)")] + pub struct Log45Call { + pub p_0: ::std::string::String, + pub p_1: ::ethers::core::types::U256, + pub p_2: ::std::string::String, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(uint256,uint256,uint256,string)` and selector + /// `0x59cfcbe3` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(uint256,uint256,uint256,string)")] + pub struct Log174Call { + pub p_0: ::ethers::core::types::U256, + pub p_1: ::ethers::core::types::U256, + pub p_2: ::ethers::core::types::U256, + pub p_3: ::std::string::String, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(string,address,uint256,string)` and selector `0x5a477632` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(string,address,uint256,string)")] + pub struct Log175Call { + pub p_0: ::std::string::String, + pub p_1: ::ethers::core::types::Address, + pub p_2: ::ethers::core::types::U256, + pub p_3: ::std::string::String, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(uint256,address,uint256)` and selector `0x5a9b5ed5` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(uint256,address,uint256)")] + pub struct Log46Call { + pub p_0: ::ethers::core::types::U256, + pub p_1: ::ethers::core::types::Address, + pub p_2: ::ethers::core::types::U256, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(string,uint256,string,string)` and selector `0x5ab84e1f` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(string,uint256,string,string)")] + pub struct Log176Call { + pub p_0: ::std::string::String, + pub p_1: ::ethers::core::types::U256, + pub p_2: ::std::string::String, + pub p_3: ::std::string::String, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(uint256,address,bool,uint256)` and selector `0x5abd992a` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(uint256,address,bool,uint256)")] + pub struct Log177Call { + pub p_0: ::ethers::core::types::U256, + pub p_1: ::ethers::core::types::Address, + pub p_2: bool, + pub p_3: ::ethers::core::types::U256, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(address,uint256,string,address)` and selector + /// `0x5c430d47` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(address,uint256,string,address)")] + pub struct Log178Call { + pub p_0: ::ethers::core::types::Address, + pub p_1: ::ethers::core::types::U256, + pub p_2: ::std::string::String, + pub p_3: ::ethers::core::types::Address, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(uint256,uint256,address)` and selector `0x5c96b331` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(uint256,uint256,address)")] + pub struct Log47Call { + pub p_0: ::ethers::core::types::U256, + pub p_1: ::ethers::core::types::U256, + pub p_2: ::ethers::core::types::Address, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(string,string,address,bool)` and selector `0x5ccd4e37` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(string,string,address,bool)")] + pub struct Log179Call { + pub p_0: ::std::string::String, + pub p_1: ::std::string::String, + pub p_2: ::ethers::core::types::Address, + pub p_3: bool, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(address,string,string,string)` and selector `0x5d02c50b` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(address,string,string,string)")] + pub struct Log180Call { + pub p_0: ::ethers::core::types::Address, + pub p_1: ::std::string::String, + pub p_2: ::std::string::String, + pub p_3: ::std::string::String, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(string,bool,address,uint256)` and selector `0x5d08bb05` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(string,bool,address,uint256)")] + pub struct Log181Call { + pub p_0: ::std::string::String, + pub p_1: bool, + pub p_2: ::ethers::core::types::Address, + pub p_3: ::ethers::core::types::U256, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(string,string,uint256,string)` and selector `0x5d1a971a` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(string,string,uint256,string)")] + pub struct Log182Call { + pub p_0: ::std::string::String, + pub p_1: ::std::string::String, + pub p_2: ::ethers::core::types::U256, + pub p_3: ::std::string::String, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(uint256,uint256,string,uint256)` and selector + /// `0x5da297eb` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(uint256,uint256,string,uint256)")] + pub struct Log183Call { + pub p_0: ::ethers::core::types::U256, + pub p_1: ::ethers::core::types::U256, + pub p_2: ::std::string::String, + pub p_3: ::ethers::core::types::U256, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(string,string,bool,string)` and selector `0x5e84b0ea` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(string,string,bool,string)")] + pub struct Log184Call { + pub p_0: ::std::string::String, + pub p_1: ::std::string::String, + pub p_2: bool, + pub p_3: ::std::string::String, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(string,uint256,address,address)` and selector + /// `0x5ea2b7ae` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(string,uint256,address,address)")] + pub struct Log185Call { + pub p_0: ::std::string::String, + pub p_1: ::ethers::core::types::U256, + pub p_2: ::ethers::core::types::Address, + pub p_3: ::ethers::core::types::Address, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(string,address,string,bool)` and selector `0x5f15d28c` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(string,address,string,bool)")] + pub struct Log186Call { + pub p_0: ::std::string::String, + pub p_1: ::ethers::core::types::Address, + pub p_2: ::std::string::String, + pub p_3: bool, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(address,string,bool,bool)` and selector `0x5f1d5c9f` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(address,string,bool,bool)")] + pub struct Log187Call { + pub p_0: ::ethers::core::types::Address, + pub p_1: ::std::string::String, + pub p_2: bool, + pub p_3: bool, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(uint256,address,uint256,bool)` and selector `0x5f743a7c` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(uint256,address,uint256,bool)")] + pub struct Log188Call { + pub p_0: ::ethers::core::types::U256, + pub p_1: ::ethers::core::types::Address, + pub p_2: ::ethers::core::types::U256, + pub p_3: bool, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(bool,address,uint256)` and selector `0x5f7b9afb` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(bool,address,uint256)")] + pub struct Log48Call { + pub p_0: bool, + pub p_1: ::ethers::core::types::Address, + pub p_2: ::ethers::core::types::U256, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(uint256,string,address,address)` and selector + /// `0x6168ed61` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(uint256,string,address,address)")] + pub struct Log189Call { + pub p_0: ::ethers::core::types::U256, + pub p_1: ::std::string::String, + pub p_2: ::ethers::core::types::Address, + pub p_3: ::ethers::core::types::Address, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(bool,bool,uint256,bool)` and selector `0x619e4d0e` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(bool,bool,uint256,bool)")] + pub struct Log190Call { + pub p_0: bool, + pub p_1: bool, + pub p_2: ::ethers::core::types::U256, + pub p_3: bool, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(address,string,uint256,address)` and selector + /// `0x63183678` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(address,string,uint256,address)")] + pub struct Log191Call { + pub p_0: ::ethers::core::types::Address, + pub p_1: ::std::string::String, + pub p_2: ::ethers::core::types::U256, + pub p_3: ::ethers::core::types::Address, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(uint256,address,string)` and selector `0x63cb41f9` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(uint256,address,string)")] + pub struct Log49Call { + pub p_0: ::ethers::core::types::U256, + pub p_1: ::ethers::core::types::Address, + pub p_2: ::std::string::String, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(string,address,uint256,address)` and selector + /// `0x63fb8bc5` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(string,address,uint256,address)")] + pub struct Log192Call { + pub p_0: ::std::string::String, + pub p_1: ::ethers::core::types::Address, + pub p_2: ::ethers::core::types::U256, + pub p_3: ::ethers::core::types::Address, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(uint256,string)` and selector `0x643fd0df` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(uint256,string)")] + pub struct Log11Call { + pub p_0: ::ethers::core::types::U256, + pub p_1: ::std::string::String, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(string,bool,uint256,uint256)` and selector `0x64b5bb67` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(string,bool,uint256,uint256)")] + pub struct Log193Call { + pub p_0: ::std::string::String, + pub p_1: bool, + pub p_2: ::ethers::core::types::U256, + pub p_3: ::ethers::core::types::U256, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(address,bool,address,address)` and selector `0x660375dd` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(address,bool,address,address)")] + pub struct Log194Call { + pub p_0: ::ethers::core::types::Address, + pub p_1: bool, + pub p_2: ::ethers::core::types::Address, + pub p_3: ::ethers::core::types::Address, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(address,address,address,address)` and selector + /// `0x665bf134` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(address,address,address,address)")] + pub struct Log195Call { + pub p_0: ::ethers::core::types::Address, + pub p_1: ::ethers::core::types::Address, + pub p_2: ::ethers::core::types::Address, + pub p_3: ::ethers::core::types::Address, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(address,uint256,uint256,bool)` and selector `0x66f1bc67` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(address,uint256,uint256,bool)")] + pub struct Log196Call { + pub p_0: ::ethers::core::types::Address, + pub p_1: ::ethers::core::types::U256, + pub p_2: ::ethers::core::types::U256, + pub p_3: bool, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(address,uint256,bool)` and selector `0x678209a8` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(address,uint256,bool)")] + pub struct Log50Call { + pub p_0: ::ethers::core::types::Address, + pub p_1: ::ethers::core::types::U256, + pub p_2: bool, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(address,string,uint256)` and selector `0x67dd6ff1` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(address,string,uint256)")] + pub struct Log51Call { + pub p_0: ::ethers::core::types::Address, + pub p_1: ::std::string::String, + pub p_2: ::ethers::core::types::U256, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(uint256,bool,string,string)` and selector `0x68c8b8bd` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(uint256,bool,string,string)")] + pub struct Log197Call { + pub p_0: ::ethers::core::types::U256, + pub p_1: bool, + pub p_2: ::std::string::String, + pub p_3: ::std::string::String, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(uint256,string,uint256,bool)` and selector `0x691a8f74` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(uint256,string,uint256,bool)")] + pub struct Log198Call { + pub p_0: ::ethers::core::types::U256, + pub p_1: ::std::string::String, + pub p_2: ::ethers::core::types::U256, + pub p_3: bool, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(uint256,address)` and selector `0x69276c86` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(uint256,address)")] + pub struct Log12Call { + pub p_0: ::ethers::core::types::U256, + pub p_1: ::ethers::core::types::Address, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(uint256,bool,bool,address)` and selector `0x69640b59` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(uint256,bool,bool,address)")] + pub struct Log199Call { + pub p_0: ::ethers::core::types::U256, + pub p_1: bool, + pub p_2: bool, + pub p_3: ::ethers::core::types::Address, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(bool,uint256,string,uint256)` and selector `0x6a1199e2` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(bool,uint256,string,uint256)")] + pub struct Log200Call { + pub p_0: bool, + pub p_1: ::ethers::core::types::U256, + pub p_2: ::std::string::String, + pub p_3: ::ethers::core::types::U256, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(bool,address,bool,bool)` and selector `0x6a9c478b` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(bool,address,bool,bool)")] + pub struct Log201Call { + pub p_0: bool, + pub p_1: ::ethers::core::types::Address, + pub p_2: bool, + pub p_3: bool, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(bool,string,uint256,bool)` and selector `0x6b0e5d53` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(bool,string,uint256,bool)")] + pub struct Log202Call { + pub p_0: bool, + pub p_1: ::std::string::String, + pub p_2: ::ethers::core::types::U256, + pub p_3: bool, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(uint256,uint256,address,string)` and selector + /// `0x6cde40b8` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(uint256,uint256,address,string)")] + pub struct Log203Call { + pub p_0: ::ethers::core::types::U256, + pub p_1: ::ethers::core::types::U256, + pub p_2: ::ethers::core::types::Address, + pub p_3: ::std::string::String, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(bool,bool,string,string)` and selector `0x6d1e8751` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(bool,bool,string,string)")] + pub struct Log204Call { + pub p_0: bool, + pub p_1: bool, + pub p_2: ::std::string::String, + pub p_3: ::std::string::String, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(string,string,string,address)` and selector `0x6d572f44` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(string,string,string,address)")] + pub struct Log205Call { + pub p_0: ::std::string::String, + pub p_1: ::std::string::String, + pub p_2: ::std::string::String, + pub p_3: ::ethers::core::types::Address, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(bool,bool,bool,uint256)` and selector `0x6d7045c1` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(bool,bool,bool,uint256)")] + pub struct Log206Call { + pub p_0: bool, + pub p_1: bool, + pub p_2: bool, + pub p_3: ::ethers::core::types::U256, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(bool,string,address,bool)` and selector `0x6dd434ca` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(bool,string,address,bool)")] + pub struct Log207Call { + pub p_0: bool, + pub p_1: ::std::string::String, + pub p_2: ::ethers::core::types::Address, + pub p_3: bool, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(address,address,string,bool)` and selector `0x6f1a594e` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(address,address,string,bool)")] + pub struct Log208Call { + pub p_0: ::ethers::core::types::Address, + pub p_1: ::ethers::core::types::Address, + pub p_2: ::std::string::String, + pub p_3: bool, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(bool,address,string,address)` and selector `0x6f7c603e` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(bool,address,string,address)")] + pub struct Log209Call { + pub p_0: bool, + pub p_1: ::ethers::core::types::Address, + pub p_2: ::std::string::String, + pub p_3: ::ethers::core::types::Address, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(string,bool,bool,address)` and selector `0x7190a529` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(string,bool,bool,address)")] + pub struct Log210Call { + pub p_0: ::std::string::String, + pub p_1: bool, + pub p_2: bool, + pub p_3: ::ethers::core::types::Address, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(uint256,uint256,string)` and selector `0x71d04af2` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(uint256,uint256,string)")] + pub struct Log52Call { + pub p_0: ::ethers::core::types::U256, + pub p_1: ::ethers::core::types::U256, + pub p_2: ::std::string::String, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(uint256,address,address,uint256)` and selector + /// `0x736efbb6` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(uint256,address,address,uint256)")] + pub struct Log211Call { + pub p_0: ::ethers::core::types::U256, + pub p_1: ::ethers::core::types::Address, + pub p_2: ::ethers::core::types::Address, + pub p_3: ::ethers::core::types::U256, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(string,bool,uint256,string)` and selector `0x742d6ee7` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(string,bool,uint256,string)")] + pub struct Log212Call { + pub p_0: ::std::string::String, + pub p_1: bool, + pub p_2: ::ethers::core::types::U256, + pub p_3: ::std::string::String, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(uint256,bool,bool,uint256)` and selector `0x7464ce23` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(uint256,bool,bool,uint256)")] + pub struct Log213Call { + pub p_0: ::ethers::core::types::U256, + pub p_1: bool, + pub p_2: bool, + pub p_3: ::ethers::core::types::U256, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(address,string)` and selector `0x759f86bb` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(address,string)")] + pub struct Log13Call { + pub p_0: ::ethers::core::types::Address, + pub p_1: ::std::string::String, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(address,bool)` and selector `0x75b605d3` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(address,bool)")] + pub struct Log14Call { + pub p_0: ::ethers::core::types::Address, + pub p_1: bool, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(string,uint256,uint256,bool)` and selector `0x7626db92` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(string,uint256,uint256,bool)")] + pub struct Log214Call { + pub p_0: ::std::string::String, + pub p_1: ::ethers::core::types::U256, + pub p_2: ::ethers::core::types::U256, + pub p_3: bool, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(string,address,bool,bool)` and selector `0x79884c2b` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(string,address,bool,bool)")] + pub struct Log215Call { + pub p_0: ::std::string::String, + pub p_1: ::ethers::core::types::Address, + pub p_2: bool, + pub p_3: bool, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(uint256,uint256,string,bool)` and selector `0x7af6ab25` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(uint256,uint256,string,bool)")] + pub struct Log216Call { + pub p_0: ::ethers::core::types::U256, + pub p_1: ::ethers::core::types::U256, + pub p_2: ::std::string::String, + pub p_3: bool, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(uint256,string,address)` and selector `0x7afac959` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(uint256,string,address)")] + pub struct Log53Call { + pub p_0: ::ethers::core::types::U256, + pub p_1: ::std::string::String, + pub p_2: ::ethers::core::types::Address, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(address,uint256,address)` and selector `0x7bc0d848` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(address,uint256,address)")] + pub struct Log54Call { + pub p_0: ::ethers::core::types::Address, + pub p_1: ::ethers::core::types::U256, + pub p_2: ::ethers::core::types::Address, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(bool,string,string,uint256)` and selector `0x7be0c3eb` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(bool,string,string,uint256)")] + pub struct Log217Call { + pub p_0: bool, + pub p_1: ::std::string::String, + pub p_2: ::std::string::String, + pub p_3: ::ethers::core::types::U256, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(bool,address,uint256,uint256)` and selector `0x7bf181a1` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(bool,address,uint256,uint256)")] + pub struct Log218Call { + pub p_0: bool, + pub p_1: ::ethers::core::types::Address, + pub p_2: ::ethers::core::types::U256, + pub p_3: ::ethers::core::types::U256, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(string,uint256,string,address)` and selector `0x7c4632a4` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(string,uint256,string,address)")] + pub struct Log219Call { + pub p_0: ::std::string::String, + pub p_1: ::ethers::core::types::U256, + pub p_2: ::std::string::String, + pub p_3: ::ethers::core::types::Address, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(string,string,address,uint256)` and selector `0x7cc3c607` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(string,string,address,uint256)")] + pub struct Log220Call { + pub p_0: ::std::string::String, + pub p_1: ::std::string::String, + pub p_2: ::ethers::core::types::Address, + pub p_3: ::ethers::core::types::U256, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(string,uint256,string,bool)` and selector `0x7d24491d` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(string,uint256,string,bool)")] + pub struct Log221Call { + pub p_0: ::std::string::String, + pub p_1: ::ethers::core::types::U256, + pub p_2: ::std::string::String, + pub p_3: bool, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(bool,bool,uint256,string)` and selector `0x7dd4d0e0` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(bool,bool,uint256,string)")] + pub struct Log222Call { + pub p_0: bool, + pub p_1: bool, + pub p_2: ::ethers::core::types::U256, + pub p_3: ::std::string::String, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(bool,uint256,bool,uint256)` and selector `0x7f9bbca2` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(bool,uint256,bool,uint256)")] + pub struct Log223Call { + pub p_0: bool, + pub p_1: ::ethers::core::types::U256, + pub p_2: bool, + pub p_3: ::ethers::core::types::U256, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(string,address,address,string)` and selector `0x800a1c67` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(string,address,address,string)")] + pub struct Log224Call { + pub p_0: ::std::string::String, + pub p_1: ::ethers::core::types::Address, + pub p_2: ::ethers::core::types::Address, + pub p_3: ::std::string::String, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(address,bool,string,uint256)` and selector `0x80e6a20b` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(address,bool,string,uint256)")] + pub struct Log225Call { + pub p_0: ::ethers::core::types::Address, + pub p_1: bool, + pub p_2: ::std::string::String, + pub p_3: ::ethers::core::types::U256, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(string,uint256,address,bool)` and selector `0x82112a42` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(string,uint256,address,bool)")] + pub struct Log226Call { + pub p_0: ::std::string::String, + pub p_1: ::ethers::core::types::U256, + pub p_2: ::ethers::core::types::Address, + pub p_3: bool, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(uint256,string,uint256,uint256)` and selector + /// `0x82c25b74` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(uint256,string,uint256,uint256)")] + pub struct Log227Call { + pub p_0: ::ethers::core::types::U256, + pub p_1: ::std::string::String, + pub p_2: ::ethers::core::types::U256, + pub p_3: ::ethers::core::types::U256, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(address,uint256)` and selector `0x8309e8a8` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(address,uint256)")] + pub struct Log15Call { + pub p_0: ::ethers::core::types::Address, + pub p_1: ::ethers::core::types::U256, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(string,bool,bool)` and selector `0x850b7ad6` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(string,bool,bool)")] + pub struct Log55Call { + pub p_0: ::std::string::String, + pub p_1: bool, + pub p_2: bool, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(bool,address)` and selector `0x853c4849` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(bool,address)")] + pub struct Log16Call { + pub p_0: bool, + pub p_1: ::ethers::core::types::Address, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(string,uint256,uint256,string)` and selector `0x854b3496` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(string,uint256,uint256,string)")] + pub struct Log228Call { + pub p_0: ::std::string::String, + pub p_1: ::ethers::core::types::U256, + pub p_2: ::ethers::core::types::U256, + pub p_3: ::std::string::String, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(uint256,bool,string)` and selector `0x85775021` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(uint256,bool,string)")] + pub struct Log56Call { + pub p_0: ::ethers::core::types::U256, + pub p_1: bool, + pub p_2: ::std::string::String, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(address,uint256,string,string)` and selector `0x88a8c406` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(address,uint256,string,string)")] + pub struct Log229Call { + pub p_0: ::ethers::core::types::Address, + pub p_1: ::ethers::core::types::U256, + pub p_2: ::std::string::String, + pub p_3: ::std::string::String, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(uint256,bool,uint256,address)` and selector `0x88cb6041` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(uint256,bool,uint256,address)")] + pub struct Log230Call { + pub p_0: ::ethers::core::types::U256, + pub p_1: bool, + pub p_2: ::ethers::core::types::U256, + pub p_3: ::ethers::core::types::Address, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(uint256,uint256,address,uint256)` and selector + /// `0x88f6e4b2` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(uint256,uint256,address,uint256)")] + pub struct Log231Call { + pub p_0: ::ethers::core::types::U256, + pub p_1: ::ethers::core::types::U256, + pub p_2: ::ethers::core::types::Address, + pub p_3: ::ethers::core::types::U256, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(string,bool,bool,bool)` and selector `0x895af8c5` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(string,bool,bool,bool)")] + pub struct Log232Call { + pub p_0: ::std::string::String, + pub p_1: bool, + pub p_2: bool, + pub p_3: bool, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(string,bool,uint256,bool)` and selector `0x8af7cf8a` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(string,bool,uint256,bool)")] + pub struct Log233Call { + pub p_0: ::std::string::String, + pub p_1: bool, + pub p_2: ::ethers::core::types::U256, + pub p_3: bool, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(bool,bool,bool,address)` and selector `0x8c329b1a` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(bool,bool,bool,address)")] + pub struct Log234Call { + pub p_0: bool, + pub p_1: bool, + pub p_2: bool, + pub p_3: ::ethers::core::types::Address, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(address,bool,bool,uint256)` and selector `0x8c4e5de6` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(address,bool,bool,uint256)")] + pub struct Log235Call { + pub p_0: ::ethers::core::types::Address, + pub p_1: bool, + pub p_2: bool, + pub p_3: ::ethers::core::types::U256, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(address,address,uint256,address)` and selector + /// `0x8da6def5` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(address,address,uint256,address)")] + pub struct Log236Call { + pub p_0: ::ethers::core::types::Address, + pub p_1: ::ethers::core::types::Address, + pub p_2: ::ethers::core::types::U256, + pub p_3: ::ethers::core::types::Address, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(string,bool,bool,uint256)` and selector `0x8e3f78a9` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(string,bool,bool,uint256)")] + pub struct Log237Call { + pub p_0: ::std::string::String, + pub p_1: bool, + pub p_2: bool, + pub p_3: ::ethers::core::types::U256, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(bool,uint256,uint256,string)` and selector `0x8e69fb5d` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(bool,uint256,uint256,string)")] + pub struct Log238Call { + pub p_0: bool, + pub p_1: ::ethers::core::types::U256, + pub p_2: ::ethers::core::types::U256, + pub p_3: ::std::string::String, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(string,string,string,uint256)` and selector `0x8eafb02b` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(string,string,string,uint256)")] + pub struct Log239Call { + pub p_0: ::std::string::String, + pub p_1: ::std::string::String, + pub p_2: ::std::string::String, + pub p_3: ::ethers::core::types::U256, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(string,address,address,uint256)` and selector + /// `0x8ef3f399` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(string,address,address,uint256)")] + pub struct Log240Call { + pub p_0: ::std::string::String, + pub p_1: ::ethers::core::types::Address, + pub p_2: ::ethers::core::types::Address, + pub p_3: ::ethers::core::types::U256, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(address,address,string,address)` and selector + /// `0x8f736d16` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(address,address,string,address)")] + pub struct Log241Call { + pub p_0: ::ethers::core::types::Address, + pub p_1: ::ethers::core::types::Address, + pub p_2: ::std::string::String, + pub p_3: ::ethers::core::types::Address, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(bool,string)` and selector `0x8feac525` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(bool,string)")] + pub struct Log17Call { + pub p_0: bool, + pub p_1: ::std::string::String, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(uint256,string,address,bool)` and selector `0x90c30a56` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(uint256,string,address,bool)")] + pub struct Log242Call { + pub p_0: ::ethers::core::types::U256, + pub p_1: ::std::string::String, + pub p_2: ::ethers::core::types::Address, + pub p_3: bool, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(uint256,address,bool,string)` and selector `0x90fb06aa` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(uint256,address,bool,string)")] + pub struct Log243Call { + pub p_0: ::ethers::core::types::U256, + pub p_1: ::ethers::core::types::Address, + pub p_2: bool, + pub p_3: ::std::string::String, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(bool,uint256,bool,string)` and selector `0x9143dbb1` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(bool,uint256,bool,string)")] + pub struct Log244Call { + pub p_0: bool, + pub p_1: ::ethers::core::types::U256, + pub p_2: bool, + pub p_3: ::std::string::String, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(uint256,bool,uint256,bool)` and selector `0x91a02e2a` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(uint256,bool,uint256,bool)")] + pub struct Log245Call { + pub p_0: ::ethers::core::types::U256, + pub p_1: bool, + pub p_2: ::ethers::core::types::U256, + pub p_3: bool, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(string,address,string,uint256)` and selector `0x91d1112e` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(string,address,string,uint256)")] + pub struct Log246Call { + pub p_0: ::std::string::String, + pub p_1: ::ethers::core::types::Address, + pub p_2: ::std::string::String, + pub p_3: ::ethers::core::types::U256, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(string,bool,address)` and selector `0x932bbb38` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(string,bool,address)")] + pub struct Log57Call { + pub p_0: ::std::string::String, + pub p_1: bool, + pub p_2: ::ethers::core::types::Address, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(string,bool,uint256,address)` and selector `0x935e09bf` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(string,bool,uint256,address)")] + pub struct Log247Call { + pub p_0: ::std::string::String, + pub p_1: bool, + pub p_2: ::ethers::core::types::U256, + pub p_3: ::ethers::core::types::Address, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(address,address,address,uint256)` and selector + /// `0x94250d77` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(address,address,address,uint256)")] + pub struct Log248Call { + pub p_0: ::ethers::core::types::Address, + pub p_1: ::ethers::core::types::Address, + pub p_2: ::ethers::core::types::Address, + pub p_3: ::ethers::core::types::U256, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(string,bool,address,bool)` and selector `0x958c28c6` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(string,bool,address,bool)")] + pub struct Log249Call { + pub p_0: ::std::string::String, + pub p_1: bool, + pub p_2: ::ethers::core::types::Address, + pub p_3: bool, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(bool,string,address)` and selector `0x9591b953` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(bool,string,address)")] + pub struct Log58Call { + pub p_0: bool, + pub p_1: ::std::string::String, + pub p_2: ::ethers::core::types::Address, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(string,string,address)` and selector `0x95ed0195` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(string,string,address)")] + pub struct Log59Call { + pub p_0: ::std::string::String, + pub p_1: ::std::string::String, + pub p_2: ::ethers::core::types::Address, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(bool,string,string,address)` and selector `0x97d394d8` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(bool,string,string,address)")] + pub struct Log250Call { + pub p_0: bool, + pub p_1: ::std::string::String, + pub p_2: ::std::string::String, + pub p_3: ::ethers::core::types::Address, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(uint256,uint256,bool,address)` and selector `0x9a816a83` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(uint256,uint256,bool,address)")] + pub struct Log251Call { + pub p_0: ::ethers::core::types::U256, + pub p_1: ::ethers::core::types::U256, + pub p_2: bool, + pub p_3: ::ethers::core::types::Address, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(bool,uint256,bool,address)` and selector `0x9acd3616` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(bool,uint256,bool,address)")] + pub struct Log252Call { + pub p_0: bool, + pub p_1: ::ethers::core::types::U256, + pub p_2: bool, + pub p_3: ::ethers::core::types::Address, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(address,address,uint256,bool)` and selector `0x9b4254e2` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(address,address,uint256,bool)")] + pub struct Log253Call { + pub p_0: ::ethers::core::types::Address, + pub p_1: ::ethers::core::types::Address, + pub p_2: ::ethers::core::types::U256, + pub p_3: bool, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(uint256,address,bool)` and selector `0x9b6ec042` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(uint256,address,bool)")] + pub struct Log60Call { + pub p_0: ::ethers::core::types::U256, + pub p_1: ::ethers::core::types::Address, + pub p_2: bool, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(uint256,string,address,string)` and selector `0x9c3adfa1` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(uint256,string,address,string)")] + pub struct Log254Call { + pub p_0: ::ethers::core::types::U256, + pub p_1: ::std::string::String, + pub p_2: ::ethers::core::types::Address, + pub p_3: ::std::string::String, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(address,bool,uint256)` and selector `0x9c4f99fb` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(address,bool,uint256)")] + pub struct Log61Call { + pub p_0: ::ethers::core::types::Address, + pub p_1: bool, + pub p_2: ::ethers::core::types::U256, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(uint256,address,string,address)` and selector + /// `0x9cba8fff` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(uint256,address,string,address)")] + pub struct Log255Call { + pub p_0: ::ethers::core::types::U256, + pub p_1: ::ethers::core::types::Address, + pub p_2: ::std::string::String, + pub p_3: ::ethers::core::types::Address, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(string,bool,bool,string)` and selector `0x9d22d5dd` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(string,bool,bool,string)")] + pub struct Log256Call { + pub p_0: ::std::string::String, + pub p_1: bool, + pub p_2: bool, + pub p_3: ::std::string::String, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(address,address,bool,address)` and selector `0x9f1bc36e` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(address,address,bool,address)")] + pub struct Log257Call { + pub p_0: ::ethers::core::types::Address, + pub p_1: ::ethers::core::types::Address, + pub p_2: bool, + pub p_3: ::ethers::core::types::Address, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(string,uint256,address,string)` and selector `0x9ffb2f93` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(string,uint256,address,string)")] + pub struct Log258Call { + pub p_0: ::std::string::String, + pub p_1: ::ethers::core::types::U256, + pub p_2: ::ethers::core::types::Address, + pub p_3: ::std::string::String, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(address,string,string,address)` and selector `0xa04e2f87` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(address,string,string,address)")] + pub struct Log259Call { + pub p_0: ::ethers::core::types::Address, + pub p_1: ::std::string::String, + pub p_2: ::std::string::String, + pub p_3: ::ethers::core::types::Address, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(bool,bool,address,string)` and selector `0xa0a47963` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(bool,bool,address,string)")] + pub struct Log260Call { + pub p_0: bool, + pub p_1: bool, + pub p_2: ::ethers::core::types::Address, + pub p_3: ::std::string::String, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(address,uint256,address,bool)` and selector `0xa1bcc9b3` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(address,uint256,address,bool)")] + pub struct Log261Call { + pub p_0: ::ethers::core::types::Address, + pub p_1: ::ethers::core::types::U256, + pub p_2: ::ethers::core::types::Address, + pub p_3: bool, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(uint256,bool,address,address)` and selector `0xa1ef4cbb` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(uint256,bool,address,address)")] + pub struct Log262Call { + pub p_0: ::ethers::core::types::U256, + pub p_1: bool, + pub p_2: ::ethers::core::types::Address, + pub p_3: ::ethers::core::types::Address, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(address,uint256,string)` and selector `0xa1f2e8aa` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(address,uint256,string)")] + pub struct Log62Call { + pub p_0: ::ethers::core::types::Address, + pub p_1: ::ethers::core::types::U256, + pub p_2: ::std::string::String, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(address,uint256,bool,address)` and selector `0xa31bfdcc` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(address,uint256,bool,address)")] + pub struct Log263Call { + pub p_0: ::ethers::core::types::Address, + pub p_1: ::ethers::core::types::U256, + pub p_2: bool, + pub p_3: ::ethers::core::types::Address, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(uint256,uint256,bool,string)` and selector `0xa5b4fc99` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(uint256,uint256,bool,string)")] + pub struct Log264Call { + pub p_0: ::ethers::core::types::U256, + pub p_1: ::ethers::core::types::U256, + pub p_2: bool, + pub p_3: ::std::string::String, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(bool,string,address,uint256)` and selector `0xa5cada94` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(bool,string,address,uint256)")] + pub struct Log265Call { + pub p_0: bool, + pub p_1: ::std::string::String, + pub p_2: ::ethers::core::types::Address, + pub p_3: ::ethers::core::types::U256, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(address,bool,address,bool)` and selector `0xa6f50b0f` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(address,bool,address,bool)")] + pub struct Log266Call { + pub p_0: ::ethers::core::types::Address, + pub p_1: bool, + pub p_2: ::ethers::core::types::Address, + pub p_3: bool, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(bool,address,string,string)` and selector `0xa73c1db6` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(bool,address,string,string)")] + pub struct Log267Call { + pub p_0: bool, + pub p_1: ::ethers::core::types::Address, + pub p_2: ::std::string::String, + pub p_3: ::std::string::String, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(address,bool,address,uint256)` and selector `0xa75c59de` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(address,bool,address,uint256)")] + pub struct Log268Call { + pub p_0: ::ethers::core::types::Address, + pub p_1: bool, + pub p_2: ::ethers::core::types::Address, + pub p_3: ::ethers::core::types::U256, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(string,uint256,uint256,uint256)` and selector + /// `0xa7a87853` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(string,uint256,uint256,uint256)")] + pub struct Log269Call { + pub p_0: ::std::string::String, + pub p_1: ::ethers::core::types::U256, + pub p_2: ::ethers::core::types::U256, + pub p_3: ::ethers::core::types::U256, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(string,bool,string,string)` and selector `0xa826caeb` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(string,bool,string,string)")] + pub struct Log270Call { + pub p_0: ::std::string::String, + pub p_1: bool, + pub p_2: ::std::string::String, + pub p_3: ::std::string::String, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(address,address,bool,string)` and selector `0xaa6540c8` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(address,address,bool,string)")] + pub struct Log271Call { + pub p_0: ::ethers::core::types::Address, + pub p_1: ::ethers::core::types::Address, + pub p_2: bool, + pub p_3: ::std::string::String, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(string,address,string,address)` and selector `0xaabc9a31` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(string,address,string,address)")] + pub struct Log272Call { + pub p_0: ::std::string::String, + pub p_1: ::ethers::core::types::Address, + pub p_2: ::std::string::String, + pub p_3: ::ethers::core::types::Address, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(uint256,uint256,bool,bool)` and selector `0xab085ae6` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(uint256,uint256,bool,bool)")] + pub struct Log273Call { + pub p_0: ::ethers::core::types::U256, + pub p_1: ::ethers::core::types::U256, + pub p_2: bool, + pub p_3: bool, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(string,uint256,bool,string)` and selector `0xabf73a98` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(string,uint256,bool,string)")] + pub struct Log274Call { + pub p_0: ::std::string::String, + pub p_1: ::ethers::core::types::U256, + pub p_2: bool, + pub p_3: ::std::string::String, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(uint256,bool,address,string)` and selector `0xade052c7` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(uint256,bool,address,string)")] + pub struct Log275Call { + pub p_0: ::ethers::core::types::U256, + pub p_1: bool, + pub p_2: ::ethers::core::types::Address, + pub p_3: ::std::string::String, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(uint256,string,bool,address)` and selector `0xae2ec581` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(uint256,string,bool,address)")] + pub struct Log276Call { + pub p_0: ::ethers::core::types::U256, + pub p_1: ::std::string::String, + pub p_2: bool, + pub p_3: ::ethers::core::types::Address, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(uint256,string,string,uint256)` and selector `0xb028c9bd` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(uint256,string,string,uint256)")] + pub struct Log277Call { + pub p_0: ::ethers::core::types::U256, + pub p_1: ::std::string::String, + pub p_2: ::std::string::String, + pub p_3: ::ethers::core::types::U256, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(bool,string,string)` and selector `0xb076847f` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(bool,string,string)")] + pub struct Log63Call { + pub p_0: bool, + pub p_1: ::std::string::String, + pub p_2: ::std::string::String, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(string,string,bool)` and selector `0xb0e0f9b5` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(string,string,bool)")] + pub struct Log64Call { + pub p_0: ::std::string::String, + pub p_1: ::std::string::String, + pub p_2: bool, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(uint256,string,string)` and selector `0xb115611f` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(uint256,string,string)")] + pub struct Log65Call { + pub p_0: ::ethers::core::types::U256, + pub p_1: ::std::string::String, + pub p_2: ::std::string::String, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(uint256,string,string,bool)` and selector `0xb3a6b6bd` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(uint256,string,string,bool)")] + pub struct Log278Call { + pub p_0: ::ethers::core::types::U256, + pub p_1: ::std::string::String, + pub p_2: ::std::string::String, + pub p_3: bool, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(bool,uint256,address,bool)` and selector `0xb4c314ff` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(bool,uint256,address,bool)")] + pub struct Log279Call { + pub p_0: bool, + pub p_1: ::ethers::core::types::U256, + pub p_2: ::ethers::core::types::Address, + pub p_3: bool, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(string,address,address,bool)` and selector `0xb59dbd60` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(string,address,address,bool)")] + pub struct Log280Call { + pub p_0: ::std::string::String, + pub p_1: ::ethers::core::types::Address, + pub p_2: ::ethers::core::types::Address, + pub p_3: bool, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(string,uint256)` and selector `0xb60e72cc` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(string,uint256)")] + pub struct Log18Call { + pub p_0: ::std::string::String, + pub p_1: ::ethers::core::types::U256, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(address,uint256,uint256)` and selector `0xb69bcaf6` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(address,uint256,uint256)")] + pub struct Log66Call { + pub p_0: ::ethers::core::types::Address, + pub p_1: ::ethers::core::types::U256, + pub p_2: ::ethers::core::types::U256, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(uint256,bool,bool,bool)` and selector `0xb6f577a1` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(uint256,bool,bool,bool)")] + pub struct Log281Call { + pub p_0: ::ethers::core::types::U256, + pub p_1: bool, + pub p_2: bool, + pub p_3: bool, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(uint256,string,uint256,string)` and selector `0xb7b914ca` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(uint256,string,uint256,string)")] + pub struct Log282Call { + pub p_0: ::ethers::core::types::U256, + pub p_1: ::std::string::String, + pub p_2: ::ethers::core::types::U256, + pub p_3: ::std::string::String, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(bool,bool,string,bool)` and selector `0xb857163a` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(bool,bool,string,bool)")] + pub struct Log283Call { + pub p_0: bool, + pub p_1: bool, + pub p_2: ::std::string::String, + pub p_3: bool, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(uint256,string,bool,bool)` and selector `0xba535d9c` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(uint256,string,bool,bool)")] + pub struct Log284Call { + pub p_0: ::ethers::core::types::U256, + pub p_1: ::std::string::String, + pub p_2: bool, + pub p_3: bool, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(address,string,bool,string)` and selector `0xbc0b61fe` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(address,string,bool,string)")] + pub struct Log285Call { + pub p_0: ::ethers::core::types::Address, + pub p_1: ::std::string::String, + pub p_2: bool, + pub p_3: ::std::string::String, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(uint256,address,address)` and selector `0xbcfd9be0` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(uint256,address,address)")] + pub struct Log67Call { + pub p_0: ::ethers::core::types::U256, + pub p_1: ::ethers::core::types::Address, + pub p_2: ::ethers::core::types::Address, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(address,address,uint256,uint256)` and selector + /// `0xbe553481` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(address,address,uint256,uint256)")] + pub struct Log286Call { + pub p_0: ::ethers::core::types::Address, + pub p_1: ::ethers::core::types::Address, + pub p_2: ::ethers::core::types::U256, + pub p_3: ::ethers::core::types::U256, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(bool,uint256,uint256,bool)` and selector `0xbe984353` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(bool,uint256,uint256,bool)")] + pub struct Log287Call { + pub p_0: bool, + pub p_1: ::ethers::core::types::U256, + pub p_2: ::ethers::core::types::U256, + pub p_3: bool, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(address,uint256,string,uint256)` and selector + /// `0xbf01f891` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(address,uint256,string,uint256)")] + pub struct Log288Call { + pub p_0: ::ethers::core::types::Address, + pub p_1: ::ethers::core::types::U256, + pub p_2: ::std::string::String, + pub p_3: ::ethers::core::types::U256, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(bool,bool,address,bool)` and selector `0xc0a302d8` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(bool,bool,address,bool)")] + pub struct Log289Call { + pub p_0: bool, + pub p_1: bool, + pub p_2: ::ethers::core::types::Address, + pub p_3: bool, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(bool,address,string,uint256)` and selector `0xc21f64c7` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(bool,address,string,uint256)")] + pub struct Log290Call { + pub p_0: bool, + pub p_1: ::ethers::core::types::Address, + pub p_2: ::std::string::String, + pub p_3: ::ethers::core::types::U256, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(string,string,bool,address)` and selector `0xc371c7db` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(string,string,bool,address)")] + pub struct Log291Call { + pub p_0: ::std::string::String, + pub p_1: ::std::string::String, + pub p_2: bool, + pub p_3: ::ethers::core::types::Address, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(string,string,uint256,bool)` and selector `0xc3a8a654` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(string,string,uint256,bool)")] + pub struct Log292Call { + pub p_0: ::std::string::String, + pub p_1: ::std::string::String, + pub p_2: ::ethers::core::types::U256, + pub p_3: bool, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(string,bool)` and selector `0xc3b55635` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(string,bool)")] + pub struct Log19Call { + pub p_0: ::std::string::String, + pub p_1: bool, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(bool,uint256,string)` and selector `0xc3fc3970` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(bool,uint256,string)")] + pub struct Log68Call { + pub p_0: bool, + pub p_1: ::ethers::core::types::U256, + pub p_2: ::std::string::String, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(address,bool,uint256,bool)` and selector `0xc4643e20` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(address,bool,uint256,bool)")] + pub struct Log293Call { + pub p_0: ::ethers::core::types::Address, + pub p_1: bool, + pub p_2: ::ethers::core::types::U256, + pub p_3: bool, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(uint256,uint256,uint256,bool)` and selector `0xc598d185` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(uint256,uint256,uint256,bool)")] + pub struct Log294Call { + pub p_0: ::ethers::core::types::U256, + pub p_1: ::ethers::core::types::U256, + pub p_2: ::ethers::core::types::U256, + pub p_3: bool, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(address,uint256,bool,string)` and selector `0xc5ad85f9` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(address,uint256,bool,string)")] + pub struct Log295Call { + pub p_0: ::ethers::core::types::Address, + pub p_1: ::ethers::core::types::U256, + pub p_2: bool, + pub p_3: ::std::string::String, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(string,uint256,string,uint256)` and selector `0xc67ea9d1` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(string,uint256,string,uint256)")] + pub struct Log296Call { + pub p_0: ::std::string::String, + pub p_1: ::ethers::core::types::U256, + pub p_2: ::std::string::String, + pub p_3: ::ethers::core::types::U256, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(uint256,bool,uint256,uint256)` and selector `0xc6acc7a8` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(uint256,bool,uint256,uint256)")] + pub struct Log297Call { + pub p_0: ::ethers::core::types::U256, + pub p_1: bool, + pub p_2: ::ethers::core::types::U256, + pub p_3: ::ethers::core::types::U256, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(string,address,bool)` and selector `0xc91d5ed4` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(string,address,bool)")] + pub struct Log69Call { + pub p_0: ::std::string::String, + pub p_1: ::ethers::core::types::Address, + pub p_2: bool, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(string,bool,uint256)` and selector `0xc95958d6` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(string,bool,uint256)")] + pub struct Log70Call { + pub p_0: ::std::string::String, + pub p_1: bool, + pub p_2: ::ethers::core::types::U256, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(string,uint256,uint256)` and selector `0xca47c4eb` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(string,uint256,uint256)")] + pub struct Log71Call { + pub p_0: ::std::string::String, + pub p_1: ::ethers::core::types::U256, + pub p_2: ::ethers::core::types::U256, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(string,uint256,bool)` and selector `0xca7733b1` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(string,uint256,bool)")] + pub struct Log72Call { + pub p_0: ::std::string::String, + pub p_1: ::ethers::core::types::U256, + pub p_2: bool, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(address,bool,bool,bool)` and selector `0xcac43479` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(address,bool,bool,bool)")] + pub struct Log298Call { + pub p_0: ::ethers::core::types::Address, + pub p_1: bool, + pub p_2: bool, + pub p_3: bool, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(uint256,address,string,bool)` and selector `0xcc32ab07` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(uint256,address,string,bool)")] + pub struct Log299Call { + pub p_0: ::ethers::core::types::U256, + pub p_1: ::ethers::core::types::Address, + pub p_2: ::std::string::String, + pub p_3: bool, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(address,bool,uint256,address)` and selector `0xccf790a1` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(address,bool,uint256,address)")] + pub struct Log300Call { + pub p_0: ::ethers::core::types::Address, + pub p_1: bool, + pub p_2: ::ethers::core::types::U256, + pub p_3: ::ethers::core::types::Address, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(bool,uint256,bool,bool)` and selector `0xceb5f4d7` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(bool,uint256,bool,bool)")] + pub struct Log301Call { + pub p_0: bool, + pub p_1: ::ethers::core::types::U256, + pub p_2: bool, + pub p_3: bool, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(uint256,string,bool,uint256)` and selector `0xcf009880` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(uint256,string,bool,uint256)")] + pub struct Log302Call { + pub p_0: ::ethers::core::types::U256, + pub p_1: ::std::string::String, + pub p_2: bool, + pub p_3: ::ethers::core::types::U256, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(address,string,bool)` and selector `0xcf020fb1` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(address,string,bool)")] + pub struct Log73Call { + pub p_0: ::ethers::core::types::Address, + pub p_1: ::std::string::String, + pub p_2: bool, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(address,uint256,string,bool)` and selector `0xcf18105c` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(address,uint256,string,bool)")] + pub struct Log303Call { + pub p_0: ::ethers::core::types::Address, + pub p_1: ::ethers::core::types::U256, + pub p_2: ::std::string::String, + pub p_3: bool, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(address,bool,bool,address)` and selector `0xcf394485` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(address,bool,bool,address)")] + pub struct Log304Call { + pub p_0: ::ethers::core::types::Address, + pub p_1: bool, + pub p_2: bool, + pub p_3: ::ethers::core::types::Address, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(uint256,uint256,uint256)` and selector `0xd1ed7a3c` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(uint256,uint256,uint256)")] + pub struct Log74Call { + pub p_0: ::ethers::core::types::U256, + pub p_1: ::ethers::core::types::U256, + pub p_2: ::ethers::core::types::U256, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(bool,address,address)` and selector `0xd2763667` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(bool,address,address)")] + pub struct Log75Call { + pub p_0: bool, + pub p_1: ::ethers::core::types::Address, + pub p_2: ::ethers::core::types::Address, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(uint256,string,bool,string)` and selector `0xd2d423cd` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(uint256,string,bool,string)")] + pub struct Log305Call { + pub p_0: ::ethers::core::types::U256, + pub p_1: ::std::string::String, + pub p_2: bool, + pub p_3: ::std::string::String, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(uint256,string,string,address)` and selector `0xd583c602` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(uint256,string,string,address)")] + pub struct Log306Call { + pub p_0: ::ethers::core::types::U256, + pub p_1: ::std::string::String, + pub p_2: ::std::string::String, + pub p_3: ::ethers::core::types::Address, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(bool,address,uint256,bool)` and selector `0xd6019f1c` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(bool,address,uint256,bool)")] + pub struct Log307Call { + pub p_0: bool, + pub p_1: ::ethers::core::types::Address, + pub p_2: ::ethers::core::types::U256, + pub p_3: bool, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(string,string,bool,uint256)` and selector `0xd6aefad2` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(string,string,bool,uint256)")] + pub struct Log308Call { + pub p_0: ::std::string::String, + pub p_1: ::std::string::String, + pub p_2: bool, + pub p_3: ::ethers::core::types::U256, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(bool,address,address,string)` and selector `0xd812a167` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(bool,address,address,string)")] + pub struct Log309Call { + pub p_0: bool, + pub p_1: ::ethers::core::types::Address, + pub p_2: ::ethers::core::types::Address, + pub p_3: ::std::string::String, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(address,address)` and selector `0xdaf0d4aa` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(address,address)")] + pub struct Log20Call { + pub p_0: ::ethers::core::types::Address, + pub p_1: ::ethers::core::types::Address, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(bool,string,bool)` and selector `0xdbb4c247` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(bool,string,bool)")] + pub struct Log76Call { + pub p_0: bool, + pub p_1: ::std::string::String, + pub p_2: bool, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(bool,string,bool,bool)` and selector `0xdc5e935b` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(bool,string,bool,bool)")] + pub struct Log310Call { + pub p_0: bool, + pub p_1: ::std::string::String, + pub p_2: bool, + pub p_3: bool, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(uint256,address,uint256,string)` and selector + /// `0xddb06521` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(uint256,address,uint256,string)")] + pub struct Log311Call { + pub p_0: ::ethers::core::types::U256, + pub p_1: ::ethers::core::types::Address, + pub p_2: ::ethers::core::types::U256, + pub p_3: ::std::string::String, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(uint256,bool,bool,string)` and selector `0xdddb9561` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(uint256,bool,bool,string)")] + pub struct Log312Call { + pub p_0: ::ethers::core::types::U256, + pub p_1: bool, + pub p_2: bool, + pub p_3: ::std::string::String, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(uint256,bool,uint256,string)` and selector `0xde03e774` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(uint256,bool,uint256,string)")] + pub struct Log313Call { + pub p_0: ::ethers::core::types::U256, + pub p_1: bool, + pub p_2: ::ethers::core::types::U256, + pub p_3: ::std::string::String, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(string,string,string,string)` and selector `0xde68f20a` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(string,string,string,string)")] + pub struct Log314Call { + pub p_0: ::std::string::String, + pub p_1: ::std::string::String, + pub p_2: ::std::string::String, + pub p_3: ::std::string::String, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(bool,address,string)` and selector `0xde9a9270` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(bool,address,string)")] + pub struct Log77Call { + pub p_0: bool, + pub p_1: ::ethers::core::types::Address, + pub p_2: ::std::string::String, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(address,bool,bool,string)` and selector `0xdfc4a2e8` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(address,bool,bool,string)")] + pub struct Log315Call { + pub p_0: ::ethers::core::types::Address, + pub p_1: bool, + pub p_2: bool, + pub p_3: ::std::string::String, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(string,bool,string,address)` and selector `0xe0625b29` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(string,bool,string,address)")] + pub struct Log316Call { + pub p_0: ::std::string::String, + pub p_1: bool, + pub p_2: ::std::string::String, + pub p_3: ::ethers::core::types::Address, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(string,uint256,bool,address)` and selector `0xe0e95b98` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(string,uint256,bool,address)")] + pub struct Log317Call { + pub p_0: ::std::string::String, + pub p_1: ::ethers::core::types::U256, + pub p_2: bool, + pub p_3: ::ethers::core::types::Address, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(string,address,string)` and selector `0xe0e9ad4f` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(string,address,string)")] + pub struct Log78Call { + pub p_0: ::std::string::String, + pub p_1: ::ethers::core::types::Address, + pub p_2: ::std::string::String, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(string,uint256,uint256,address)` and selector + /// `0xe21de278` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(string,uint256,uint256,address)")] + pub struct Log318Call { + pub p_0: ::std::string::String, + pub p_1: ::ethers::core::types::U256, + pub p_2: ::ethers::core::types::U256, + pub p_3: ::ethers::core::types::Address, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(string,bool,string)` and selector `0xe298f47d` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(string,bool,string)")] + pub struct Log79Call { + pub p_0: ::std::string::String, + pub p_1: bool, + pub p_2: ::std::string::String, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(bool,address,string,bool)` and selector `0xe2bfd60b` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(bool,address,string,bool)")] + pub struct Log319Call { + pub p_0: bool, + pub p_1: ::ethers::core::types::Address, + pub p_2: ::std::string::String, + pub p_3: bool, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(uint256,address,bool,bool)` and selector `0xe351140f` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(uint256,address,bool,bool)")] + pub struct Log320Call { + pub p_0: ::ethers::core::types::U256, + pub p_1: ::ethers::core::types::Address, + pub p_2: bool, + pub p_3: bool, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(bool,bool,string,uint256)` and selector `0xe3a9ca2f` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(bool,bool,string,uint256)")] + pub struct Log321Call { + pub p_0: bool, + pub p_1: bool, + pub p_2: ::std::string::String, + pub p_3: ::ethers::core::types::U256, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(string,uint256,bool,uint256)` and selector `0xe41b6f6f` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(string,uint256,bool,uint256)")] + pub struct Log322Call { + pub p_0: ::std::string::String, + pub p_1: ::ethers::core::types::U256, + pub p_2: bool, + pub p_3: ::ethers::core::types::U256, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(bool,uint256,string,bool)` and selector `0xe5e70b2b` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(bool,uint256,string,bool)")] + pub struct Log323Call { + pub p_0: bool, + pub p_1: ::ethers::core::types::U256, + pub p_2: ::std::string::String, + pub p_3: bool, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(uint256,string,address,uint256)` and selector + /// `0xe8d3018d` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(uint256,string,address,uint256)")] + pub struct Log324Call { + pub p_0: ::ethers::core::types::U256, + pub p_1: ::std::string::String, + pub p_2: ::ethers::core::types::Address, + pub p_3: ::ethers::core::types::U256, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(bool,uint256,bool)` and selector `0xe8defba9` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(bool,uint256,bool)")] + pub struct Log80Call { + pub p_0: bool, + pub p_1: ::ethers::core::types::U256, + pub p_2: bool, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(string,string,address,string)` and selector `0xeb1bff80` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(string,string,address,string)")] + pub struct Log325Call { + pub p_0: ::std::string::String, + pub p_1: ::std::string::String, + pub p_2: ::ethers::core::types::Address, + pub p_3: ::std::string::String, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(uint256,uint256,bool,uint256)` and selector `0xeb7f6fd2` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(uint256,uint256,bool,uint256)")] + pub struct Log326Call { + pub p_0: ::ethers::core::types::U256, + pub p_1: ::ethers::core::types::U256, + pub p_2: bool, + pub p_3: ::ethers::core::types::U256, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(address,bool,bool)` and selector `0xeb830c92` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(address,bool,bool)")] + pub struct Log81Call { + pub p_0: ::ethers::core::types::Address, + pub p_1: bool, + pub p_2: bool, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(uint256,bool,string,bool)` and selector `0xeb928d7f` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(uint256,bool,string,bool)")] + pub struct Log327Call { + pub p_0: ::ethers::core::types::U256, + pub p_1: bool, + pub p_2: ::std::string::String, + pub p_3: bool, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(string,address,address,address)` and selector + /// `0xed8f28f6` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(string,address,address,address)")] + pub struct Log328Call { + pub p_0: ::std::string::String, + pub p_1: ::ethers::core::types::Address, + pub p_2: ::ethers::core::types::Address, + pub p_3: ::ethers::core::types::Address, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(address,address,string,uint256)` and selector + /// `0xef1cefe7` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(address,address,string,uint256)")] + pub struct Log329Call { + pub p_0: ::ethers::core::types::Address, + pub p_1: ::ethers::core::types::Address, + pub p_2: ::std::string::String, + pub p_3: ::ethers::core::types::U256, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(uint256,bool,string,address)` and selector `0xef529018` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(uint256,bool,string,address)")] + pub struct Log330Call { + pub p_0: ::ethers::core::types::U256, + pub p_1: bool, + pub p_2: ::std::string::String, + pub p_3: ::ethers::core::types::Address, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(uint256,address,bool,address)` and selector `0xef72c513` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(uint256,address,bool,address)")] + pub struct Log331Call { + pub p_0: ::ethers::core::types::U256, + pub p_1: ::ethers::core::types::Address, + pub p_2: bool, + pub p_3: ::ethers::core::types::Address, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(address,string,address)` and selector `0xf08744e8` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(address,string,address)")] + pub struct Log82Call { + pub p_0: ::ethers::core::types::Address, + pub p_1: ::std::string::String, + pub p_2: ::ethers::core::types::Address, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(address,bool,address)` and selector `0xf11699ed` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(address,bool,address)")] + pub struct Log83Call { + pub p_0: ::ethers::core::types::Address, + pub p_1: bool, + pub p_2: ::ethers::core::types::Address, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(address,address,bool)` and selector `0xf2a66286` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(address,address,bool)")] + pub struct Log84Call { + pub p_0: ::ethers::core::types::Address, + pub p_1: ::ethers::core::types::Address, + pub p_2: bool, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(string,string,uint256,uint256)` and selector `0xf45d7d2c` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(string,string,uint256,uint256)")] + pub struct Log332Call { + pub p_0: ::std::string::String, + pub p_1: ::std::string::String, + pub p_2: ::ethers::core::types::U256, + pub p_3: ::ethers::core::types::U256, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(bool,bool,address,address)` and selector `0xf4880ea4` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(bool,bool,address,address)")] + pub struct Log333Call { + pub p_0: bool, + pub p_1: bool, + pub p_2: ::ethers::core::types::Address, + pub p_3: ::ethers::core::types::Address, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(bool,uint256,string,string)` and selector `0xf5bc2249` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(bool,uint256,string,string)")] + pub struct Log334Call { + pub p_0: bool, + pub p_1: ::ethers::core::types::U256, + pub p_2: ::std::string::String, + pub p_3: ::std::string::String, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(uint256,uint256)` and selector `0xf666715a` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(uint256,uint256)")] + pub struct Log21Call { + pub p_0: ::ethers::core::types::U256, + pub p_1: ::ethers::core::types::U256, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(address,string,address,string)` and selector `0xf7e36245` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(address,string,address,string)")] + pub struct Log335Call { + pub p_0: ::ethers::core::types::Address, + pub p_1: ::std::string::String, + pub p_2: ::ethers::core::types::Address, + pub p_3: ::std::string::String, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(address,address,address,string)` and selector + /// `0xf808da20` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(address,address,address,string)")] + pub struct Log336Call { + pub p_0: ::ethers::core::types::Address, + pub p_1: ::ethers::core::types::Address, + pub p_2: ::ethers::core::types::Address, + pub p_3: ::std::string::String, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(uint256)` and selector `0xf82c50f1` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(uint256)")] + pub struct Log4Call { + pub p_0: ::ethers::core::types::U256, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(string,address,uint256,uint256)` and selector + /// `0xf8f51b1e` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(string,address,uint256,uint256)")] + pub struct Log337Call { + pub p_0: ::std::string::String, + pub p_1: ::ethers::core::types::Address, + pub p_2: ::ethers::core::types::U256, + pub p_3: ::ethers::core::types::U256, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(bool,bool,string,address)` and selector `0xf9ad2b89` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(bool,bool,string,address)")] + pub struct Log338Call { + pub p_0: bool, + pub p_1: bool, + pub p_2: ::std::string::String, + pub p_3: ::ethers::core::types::Address, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(uint256,uint256,uint256,address)` and selector + /// `0xfa8185af` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(uint256,uint256,uint256,address)")] + pub struct Log339Call { + pub p_0: ::ethers::core::types::U256, + pub p_1: ::ethers::core::types::U256, + pub p_2: ::ethers::core::types::U256, + pub p_3: ::ethers::core::types::Address, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(address,string,string)` and selector `0xfb772265` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(address,string,string)")] + pub struct Log85Call { + pub p_0: ::ethers::core::types::Address, + pub p_1: ::std::string::String, + pub p_2: ::std::string::String, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(string,address,uint256,bool)` and selector `0xfc4845f0` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(string,address,uint256,bool)")] + pub struct Log340Call { + pub p_0: ::std::string::String, + pub p_1: ::ethers::core::types::Address, + pub p_2: ::ethers::core::types::U256, + pub p_3: bool, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(string,address,address)` and selector `0xfcec75e0` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(string,address,address)")] + pub struct Log86Call { + pub p_0: ::std::string::String, + pub p_1: ::ethers::core::types::Address, + pub p_2: ::ethers::core::types::Address, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(address,address,uint256,string)` and selector + /// `0xfdb4f990` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(address,address,uint256,string)")] + pub struct Log341Call { + pub p_0: ::ethers::core::types::Address, + pub p_1: ::ethers::core::types::Address, + pub p_2: ::ethers::core::types::U256, + pub p_3: ::std::string::String, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(bool,uint256,string,address)` and selector `0xfedd1fff` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(bool,uint256,string,address)")] + pub struct Log342Call { + pub p_0: bool, + pub p_1: ::ethers::core::types::U256, + pub p_2: ::std::string::String, + pub p_3: ::ethers::core::types::Address, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(int256)` and selector `0x2d5b6cb9` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(int256)")] + pub struct Log5Call { + pub p_0: ::ethers::core::types::I256, + } + /// Container type for all input parameters for the `log` function with + /// signature `log(string,int256)` and selector `0x3ca6268e` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "log", abi = "log(string,int256)")] + pub struct Log22Call { + pub p_0: ::std::string::String, + pub p_1: ::ethers::core::types::I256, + } + /// Container type for all input parameters for the `logAddress` function + /// with signature `logAddress(address)` and selector `0x5f91b0af` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "logAddress", abi = "logAddress(address)")] + pub struct LogAddressCall { + pub p_0: ::ethers::core::types::Address, + } + /// Container type for all input parameters for the `logBool` function with + /// signature `logBool(bool)` and selector `0xba7ab84e` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "logBool", abi = "logBool(bool)")] + pub struct LogBoolCall { + pub p_0: bool, + } + /// Container type for all input parameters for the `logBytes` function with + /// signature `logBytes(bytes)` and selector `0xe17bf956` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "logBytes", abi = "logBytes(bytes)")] + pub struct LogBytesCall { + pub p_0: ::ethers::core::types::Bytes, + } + /// Container type for all input parameters for the `logBytes1` function + /// with signature `logBytes1(bytes1)` and selector `0x6f4171c9` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "logBytes1", abi = "logBytes1(bytes1)")] + pub struct LogBytes1Call { + pub p_0: [u8; 1], + } + /// Container type for all input parameters for the `logBytes10` function + /// with signature `logBytes10(bytes10)` and selector `0x9dc2a897` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "logBytes10", abi = "logBytes10(bytes10)")] + pub struct LogBytes10Call { + pub p_0: [u8; 10], + } + /// Container type for all input parameters for the `logBytes11` function + /// with signature `logBytes11(bytes11)` and selector `0xdc08b6a7` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "logBytes11", abi = "logBytes11(bytes11)")] + pub struct LogBytes11Call { + pub p_0: [u8; 11], + } + /// Container type for all input parameters for the `logBytes12` function + /// with signature `logBytes12(bytes12)` and selector `0x7656d6c7` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "logBytes12", abi = "logBytes12(bytes12)")] + pub struct LogBytes12Call { + pub p_0: [u8; 12], + } + /// Container type for all input parameters for the `logBytes13` function + /// with signature `logBytes13(bytes13)` and selector `0x34c1d81b` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "logBytes13", abi = "logBytes13(bytes13)")] + pub struct LogBytes13Call { + pub p_0: [u8; 13], + } + /// Container type for all input parameters for the `logBytes14` function + /// with signature `logBytes14(bytes14)` and selector `0x3ceaba65` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "logBytes14", abi = "logBytes14(bytes14)")] + pub struct LogBytes14Call { + pub p_0: [u8; 14], + } + /// Container type for all input parameters for the `logBytes15` function + /// with signature `logBytes15(bytes15)` and selector `0x591a3da2` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "logBytes15", abi = "logBytes15(bytes15)")] + pub struct LogBytes15Call { + pub p_0: [u8; 15], + } + /// Container type for all input parameters for the `logBytes16` function + /// with signature `logBytes16(bytes16)` and selector `0x1f8d7312` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "logBytes16", abi = "logBytes16(bytes16)")] + pub struct LogBytes16Call { + pub p_0: [u8; 16], + } + /// Container type for all input parameters for the `logBytes17` function + /// with signature `logBytes17(bytes17)` and selector `0xf89a532f` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "logBytes17", abi = "logBytes17(bytes17)")] + pub struct LogBytes17Call { + pub p_0: [u8; 17], + } + /// Container type for all input parameters for the `logBytes18` function + /// with signature `logBytes18(bytes18)` and selector `0xd8652642` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "logBytes18", abi = "logBytes18(bytes18)")] + pub struct LogBytes18Call { + pub p_0: [u8; 18], + } + /// Container type for all input parameters for the `logBytes19` function + /// with signature `logBytes19(bytes19)` and selector `0x00f56bc9` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "logBytes19", abi = "logBytes19(bytes19)")] + pub struct LogBytes19Call { + pub p_0: [u8; 19], + } + /// Container type for all input parameters for the `logBytes2` function + /// with signature `logBytes2(bytes2)` and selector `0x9b5e943e` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "logBytes2", abi = "logBytes2(bytes2)")] + pub struct LogBytes2Call { + pub p_0: [u8; 2], + } + /// Container type for all input parameters for the `logBytes20` function + /// with signature `logBytes20(bytes20)` and selector `0xecb8567e` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "logBytes20", abi = "logBytes20(bytes20)")] + pub struct LogBytes20Call { + pub p_0: [u8; 20], + } + /// Container type for all input parameters for the `logBytes21` function + /// with signature `logBytes21(bytes21)` and selector `0x3052c08f` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "logBytes21", abi = "logBytes21(bytes21)")] + pub struct LogBytes21Call { + pub p_0: [u8; 21], + } + /// Container type for all input parameters for the `logBytes22` function + /// with signature `logBytes22(bytes22)` and selector `0x807ab434` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "logBytes22", abi = "logBytes22(bytes22)")] + pub struct LogBytes22Call { + pub p_0: [u8; 22], + } + /// Container type for all input parameters for the `logBytes23` function + /// with signature `logBytes23(bytes23)` and selector `0x4979b037` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "logBytes23", abi = "logBytes23(bytes23)")] + pub struct LogBytes23Call { + pub p_0: [u8; 23], + } + /// Container type for all input parameters for the `logBytes24` function + /// with signature `logBytes24(bytes24)` and selector `0x0977aefc` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "logBytes24", abi = "logBytes24(bytes24)")] + pub struct LogBytes24Call { + pub p_0: [u8; 24], + } + /// Container type for all input parameters for the `logBytes25` function + /// with signature `logBytes25(bytes25)` and selector `0xaea9963f` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "logBytes25", abi = "logBytes25(bytes25)")] + pub struct LogBytes25Call { + pub p_0: [u8; 25], + } + /// Container type for all input parameters for the `logBytes26` function + /// with signature `logBytes26(bytes26)` and selector `0xd3635628` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "logBytes26", abi = "logBytes26(bytes26)")] + pub struct LogBytes26Call { + pub p_0: [u8; 26], + } + /// Container type for all input parameters for the `logBytes27` function + /// with signature `logBytes27(bytes27)` and selector `0xfc372f9f` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "logBytes27", abi = "logBytes27(bytes27)")] + pub struct LogBytes27Call { + pub p_0: [u8; 27], + } + /// Container type for all input parameters for the `logBytes28` function + /// with signature `logBytes28(bytes28)` and selector `0x382f9a34` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "logBytes28", abi = "logBytes28(bytes28)")] + pub struct LogBytes28Call { + pub p_0: [u8; 28], + } + /// Container type for all input parameters for the `logBytes29` function + /// with signature `logBytes29(bytes29)` and selector `0x7a187641` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "logBytes29", abi = "logBytes29(bytes29)")] + pub struct LogBytes29Call { + pub p_0: [u8; 29], + } + /// Container type for all input parameters for the `logBytes3` function + /// with signature `logBytes3(bytes3)` and selector `0x7782fa2d` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "logBytes3", abi = "logBytes3(bytes3)")] + pub struct LogBytes3Call { + pub p_0: [u8; 3], + } + /// Container type for all input parameters for the `logBytes30` function + /// with signature `logBytes30(bytes30)` and selector `0xc4340ef6` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "logBytes30", abi = "logBytes30(bytes30)")] + pub struct LogBytes30Call { + pub p_0: [u8; 30], + } + /// Container type for all input parameters for the `logBytes31` function + /// with signature `logBytes31(bytes31)` and selector `0x81fc8648` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "logBytes31", abi = "logBytes31(bytes31)")] + pub struct LogBytes31Call { + pub p_0: [u8; 31], + } + /// Container type for all input parameters for the `logBytes32` function + /// with signature `logBytes32(bytes32)` and selector `0x2d21d6f7` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "logBytes32", abi = "logBytes32(bytes32)")] + pub struct LogBytes32Call { + pub p_0: [u8; 32], + } + /// Container type for all input parameters for the `logBytes4` function + /// with signature `logBytes4(bytes4)` and selector `0xfba3ad39` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "logBytes4", abi = "logBytes4(bytes4)")] + pub struct LogBytes4Call { + pub p_0: [u8; 4], + } + /// Container type for all input parameters for the `logBytes5` function + /// with signature `logBytes5(bytes5)` and selector `0x5583be2e` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "logBytes5", abi = "logBytes5(bytes5)")] + pub struct LogBytes5Call { + pub p_0: [u8; 5], + } + /// Container type for all input parameters for the `logBytes6` function + /// with signature `logBytes6(bytes6)` and selector `0x4942adc6` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "logBytes6", abi = "logBytes6(bytes6)")] + pub struct LogBytes6Call { + pub p_0: [u8; 6], + } + /// Container type for all input parameters for the `logBytes7` function + /// with signature `logBytes7(bytes7)` and selector `0x4574afab` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "logBytes7", abi = "logBytes7(bytes7)")] + pub struct LogBytes7Call { + pub p_0: [u8; 7], + } + /// Container type for all input parameters for the `logBytes8` function + /// with signature `logBytes8(bytes8)` and selector `0x9902e47f` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "logBytes8", abi = "logBytes8(bytes8)")] + pub struct LogBytes8Call { + pub p_0: [u8; 8], + } + /// Container type for all input parameters for the `logBytes9` function + /// with signature `logBytes9(bytes9)` and selector `0x50a138df` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "logBytes9", abi = "logBytes9(bytes9)")] + pub struct LogBytes9Call { + pub p_0: [u8; 9], + } + /// Container type for all input parameters for the `logInt` function with + /// signature `logInt(int256)` and selector `0x6525b5f5` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "logInt", abi = "logInt(int256)")] + pub struct LogIntCall { + pub p_0: ::ethers::core::types::I256, + } + /// Container type for all input parameters for the `logString` function + /// with signature `logString(string)` and selector `0x0bb563d6` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "logString", abi = "logString(string)")] + pub struct LogStringCall { + pub p_0: ::std::string::String, + } + /// Container type for all input parameters for the `logUint` function with + /// signature `logUint(uint256)` and selector `0x9905b744` + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "logUint", abi = "logUint(uint256)")] + pub struct LogUintCall { + pub p_0: ::ethers::core::types::U256, + } + /// Container type for all of the contract's call + #[derive( + serde::Serialize, + serde::Deserialize, + Clone, + ::ethers::contract::EthAbiType, + Debug, + PartialEq, + Eq, + Hash, + )] + pub enum HardhatConsoleCalls { + Log23(Log23Call), + Log87(Log87Call), + Log24(Log24Call), + Log88(Log88Call), + Log89(Log89Call), + Log90(Log90Call), + Log91(Log91Call), + Log25(Log25Call), + Log92(Log92Call), + Log93(Log93Call), + Log94(Log94Call), + Log95(Log95Call), + Log96(Log96Call), + Log26(Log26Call), + Log97(Log97Call), + Log98(Log98Call), + Log99(Log99Call), + Log100(Log100Call), + Log101(Log101Call), + Log102(Log102Call), + Log27(Log27Call), + Log28(Log28Call), + Log103(Log103Call), + Log29(Log29Call), + Log104(Log104Call), + Log105(Log105Call), + Log106(Log106Call), + Log107(Log107Call), + Log108(Log108Call), + Log109(Log109Call), + Log110(Log110Call), + Log111(Log111Call), + Log30(Log30Call), + Log31(Log31Call), + Log112(Log112Call), + Log113(Log113Call), + Log114(Log114Call), + Log115(Log115Call), + Log116(Log116Call), + Log32(Log32Call), + Log6(Log6Call), + Log117(Log117Call), + Log118(Log118Call), + Log119(Log119Call), + Log120(Log120Call), + Log33(Log33Call), + Log121(Log121Call), + Log34(Log34Call), + Log122(Log122Call), + Log35(Log35Call), + Log123(Log123Call), + Log124(Log124Call), + Log125(Log125Call), + Log126(Log126Call), + Log127(Log127Call), + Log128(Log128Call), + Log129(Log129Call), + Log36(Log36Call), + Log130(Log130Call), + Log131(Log131Call), + Log132(Log132Call), + Log7(Log7Call), + Log133(Log133Call), + Log134(Log134Call), + Log135(Log135Call), + Log136(Log136Call), + Log1(Log1Call), + Log137(Log137Call), + Log37(Log37Call), + Log138(Log138Call), + Log139(Log139Call), + Log8(Log8Call), + Log2(Log2Call), + Log140(Log140Call), + Log141(Log141Call), + Log38(Log38Call), + Log142(Log142Call), + Log143(Log143Call), + Log39(Log39Call), + Log144(Log144Call), + Log40(Log40Call), + Log145(Log145Call), + Log146(Log146Call), + Log9(Log9Call), + Log147(Log147Call), + Log148(Log148Call), + Log149(Log149Call), + Log150(Log150Call), + Log151(Log151Call), + Log152(Log152Call), + Log153(Log153Call), + Log3(Log3Call), + Log154(Log154Call), + Log155(Log155Call), + Log156(Log156Call), + Log157(Log157Call), + Log158(Log158Call), + Log159(Log159Call), + Log160(Log160Call), + Log161(Log161Call), + Log41(Log41Call), + Log162(Log162Call), + Log163(Log163Call), + Log164(Log164Call), + Log165(Log165Call), + Log10(Log10Call), + Log166(Log166Call), + Log42(Log42Call), + Log167(Log167Call), + Log43(Log43Call), + Log168(Log168Call), + Log169(Log169Call), + Log0(Log0Call), + Log170(Log170Call), + Log171(Log171Call), + Log172(Log172Call), + Log173(Log173Call), + Log44(Log44Call), + Log45(Log45Call), + Log174(Log174Call), + Log175(Log175Call), + Log46(Log46Call), + Log176(Log176Call), + Log177(Log177Call), + Log178(Log178Call), + Log47(Log47Call), + Log179(Log179Call), + Log180(Log180Call), + Log181(Log181Call), + Log182(Log182Call), + Log183(Log183Call), + Log184(Log184Call), + Log185(Log185Call), + Log186(Log186Call), + Log187(Log187Call), + Log188(Log188Call), + Log48(Log48Call), + Log189(Log189Call), + Log190(Log190Call), + Log191(Log191Call), + Log49(Log49Call), + Log192(Log192Call), + Log11(Log11Call), + Log193(Log193Call), + Log194(Log194Call), + Log195(Log195Call), + Log196(Log196Call), + Log50(Log50Call), + Log51(Log51Call), + Log197(Log197Call), + Log198(Log198Call), + Log12(Log12Call), + Log199(Log199Call), + Log200(Log200Call), + Log201(Log201Call), + Log202(Log202Call), + Log203(Log203Call), + Log204(Log204Call), + Log205(Log205Call), + Log206(Log206Call), + Log207(Log207Call), + Log208(Log208Call), + Log209(Log209Call), + Log210(Log210Call), + Log52(Log52Call), + Log211(Log211Call), + Log212(Log212Call), + Log213(Log213Call), + Log13(Log13Call), + Log14(Log14Call), + Log214(Log214Call), + Log215(Log215Call), + Log216(Log216Call), + Log53(Log53Call), + Log54(Log54Call), + Log217(Log217Call), + Log218(Log218Call), + Log219(Log219Call), + Log220(Log220Call), + Log221(Log221Call), + Log222(Log222Call), + Log223(Log223Call), + Log224(Log224Call), + Log225(Log225Call), + Log226(Log226Call), + Log227(Log227Call), + Log15(Log15Call), + Log55(Log55Call), + Log16(Log16Call), + Log228(Log228Call), + Log56(Log56Call), + Log229(Log229Call), + Log230(Log230Call), + Log231(Log231Call), + Log232(Log232Call), + Log233(Log233Call), + Log234(Log234Call), + Log235(Log235Call), + Log236(Log236Call), + Log237(Log237Call), + Log238(Log238Call), + Log239(Log239Call), + Log240(Log240Call), + Log241(Log241Call), + Log17(Log17Call), + Log242(Log242Call), + Log243(Log243Call), + Log244(Log244Call), + Log245(Log245Call), + Log246(Log246Call), + Log57(Log57Call), + Log247(Log247Call), + Log248(Log248Call), + Log249(Log249Call), + Log58(Log58Call), + Log59(Log59Call), + Log250(Log250Call), + Log251(Log251Call), + Log252(Log252Call), + Log253(Log253Call), + Log60(Log60Call), + Log254(Log254Call), + Log61(Log61Call), + Log255(Log255Call), + Log256(Log256Call), + Log257(Log257Call), + Log258(Log258Call), + Log259(Log259Call), + Log260(Log260Call), + Log261(Log261Call), + Log262(Log262Call), + Log62(Log62Call), + Log263(Log263Call), + Log264(Log264Call), + Log265(Log265Call), + Log266(Log266Call), + Log267(Log267Call), + Log268(Log268Call), + Log269(Log269Call), + Log270(Log270Call), + Log271(Log271Call), + Log272(Log272Call), + Log273(Log273Call), + Log274(Log274Call), + Log275(Log275Call), + Log276(Log276Call), + Log277(Log277Call), + Log63(Log63Call), + Log64(Log64Call), + Log65(Log65Call), + Log278(Log278Call), + Log279(Log279Call), + Log280(Log280Call), + Log18(Log18Call), + Log66(Log66Call), + Log281(Log281Call), + Log282(Log282Call), + Log283(Log283Call), + Log284(Log284Call), + Log285(Log285Call), + Log67(Log67Call), + Log286(Log286Call), + Log287(Log287Call), + Log288(Log288Call), + Log289(Log289Call), + Log290(Log290Call), + Log291(Log291Call), + Log292(Log292Call), + Log19(Log19Call), + Log68(Log68Call), + Log293(Log293Call), + Log294(Log294Call), + Log295(Log295Call), + Log296(Log296Call), + Log297(Log297Call), + Log69(Log69Call), + Log70(Log70Call), + Log71(Log71Call), + Log72(Log72Call), + Log298(Log298Call), + Log299(Log299Call), + Log300(Log300Call), + Log301(Log301Call), + Log302(Log302Call), + Log73(Log73Call), + Log303(Log303Call), + Log304(Log304Call), + Log74(Log74Call), + Log75(Log75Call), + Log305(Log305Call), + Log306(Log306Call), + Log307(Log307Call), + Log308(Log308Call), + Log309(Log309Call), + Log20(Log20Call), + Log76(Log76Call), + Log310(Log310Call), + Log311(Log311Call), + Log312(Log312Call), + Log313(Log313Call), + Log314(Log314Call), + Log77(Log77Call), + Log315(Log315Call), + Log316(Log316Call), + Log317(Log317Call), + Log78(Log78Call), + Log318(Log318Call), + Log79(Log79Call), + Log319(Log319Call), + Log320(Log320Call), + Log321(Log321Call), + Log322(Log322Call), + Log323(Log323Call), + Log324(Log324Call), + Log80(Log80Call), + Log325(Log325Call), + Log326(Log326Call), + Log81(Log81Call), + Log327(Log327Call), + Log328(Log328Call), + Log329(Log329Call), + Log330(Log330Call), + Log331(Log331Call), + Log82(Log82Call), + Log83(Log83Call), + Log84(Log84Call), + Log332(Log332Call), + Log333(Log333Call), + Log334(Log334Call), + Log21(Log21Call), + Log335(Log335Call), + Log336(Log336Call), + Log4(Log4Call), + Log337(Log337Call), + Log338(Log338Call), + Log339(Log339Call), + Log85(Log85Call), + Log340(Log340Call), + Log86(Log86Call), + Log341(Log341Call), + Log342(Log342Call), + Log5(Log5Call), + Log22(Log22Call), + LogAddress(LogAddressCall), + LogBool(LogBoolCall), + LogBytes(LogBytesCall), + LogBytes1(LogBytes1Call), + LogBytes10(LogBytes10Call), + LogBytes11(LogBytes11Call), + LogBytes12(LogBytes12Call), + LogBytes13(LogBytes13Call), + LogBytes14(LogBytes14Call), + LogBytes15(LogBytes15Call), + LogBytes16(LogBytes16Call), + LogBytes17(LogBytes17Call), + LogBytes18(LogBytes18Call), + LogBytes19(LogBytes19Call), + LogBytes2(LogBytes2Call), + LogBytes20(LogBytes20Call), + LogBytes21(LogBytes21Call), + LogBytes22(LogBytes22Call), + LogBytes23(LogBytes23Call), + LogBytes24(LogBytes24Call), + LogBytes25(LogBytes25Call), + LogBytes26(LogBytes26Call), + LogBytes27(LogBytes27Call), + LogBytes28(LogBytes28Call), + LogBytes29(LogBytes29Call), + LogBytes3(LogBytes3Call), + LogBytes30(LogBytes30Call), + LogBytes31(LogBytes31Call), + LogBytes32(LogBytes32Call), + LogBytes4(LogBytes4Call), + LogBytes5(LogBytes5Call), + LogBytes6(LogBytes6Call), + LogBytes7(LogBytes7Call), + LogBytes8(LogBytes8Call), + LogBytes9(LogBytes9Call), + LogInt(LogIntCall), + LogString(LogStringCall), + LogUint(LogUintCall), + } + impl ::ethers::core::abi::AbiDecode for HardhatConsoleCalls { + fn decode( + data: impl AsRef<[u8]>, + ) -> ::core::result::Result { + let data = data.as_ref(); + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log23(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log87(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log24(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log88(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log89(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log90(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log91(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log25(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log92(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log93(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log94(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log95(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log96(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log26(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log97(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log98(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log99(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log100(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log101(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log102(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log27(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log28(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log103(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log29(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log104(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log105(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log106(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log107(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log108(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log109(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log110(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log111(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log30(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log31(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log112(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log113(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log114(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log115(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log116(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log32(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log6(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log117(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log118(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log119(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log120(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log33(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log121(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log34(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log122(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log35(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log123(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log124(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log125(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log126(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log127(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log128(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log129(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log36(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log130(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log131(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log132(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log7(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log133(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log134(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log135(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log136(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log1(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log137(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log37(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log138(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log139(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log8(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log2(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log140(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log141(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log38(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log142(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log143(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log39(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log144(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log40(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log145(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log146(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log9(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log147(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log148(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log149(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log150(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log151(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log152(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log153(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log3(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log154(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log155(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log156(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log157(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log158(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log159(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log160(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log161(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log41(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log162(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log163(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log164(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log165(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log10(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log166(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log42(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log167(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log43(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log168(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log169(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log0(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log170(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log171(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log172(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log173(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log44(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log45(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log174(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log175(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log46(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log176(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log177(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log178(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log47(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log179(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log180(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log181(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log182(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log183(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log184(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log185(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log186(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log187(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log188(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log48(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log189(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log190(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log191(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log49(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log192(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log11(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log193(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log194(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log195(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log196(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log50(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log51(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log197(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log198(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log12(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log199(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log200(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log201(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log202(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log203(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log204(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log205(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log206(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log207(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log208(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log209(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log210(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log52(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log211(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log212(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log213(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log13(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log14(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log214(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log215(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log216(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log53(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log54(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log217(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log218(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log219(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log220(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log221(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log222(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log223(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log224(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log225(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log226(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log227(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log15(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log55(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log16(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log228(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log56(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log229(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log230(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log231(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log232(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log233(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log234(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log235(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log236(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log237(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log238(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log239(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log240(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log241(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log17(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log242(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log243(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log244(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log245(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log246(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log57(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log247(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log248(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log249(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log58(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log59(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log250(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log251(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log252(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log253(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log60(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log254(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log61(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log255(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log256(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log257(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log258(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log259(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log260(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log261(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log262(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log62(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log263(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log264(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log265(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log266(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log267(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log268(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log269(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log270(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log271(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log272(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log273(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log274(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log275(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log276(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log277(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log63(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log64(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log65(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log278(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log279(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log280(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log18(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log66(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log281(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log282(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log283(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log284(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log285(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log67(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log286(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log287(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log288(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log289(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log290(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log291(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log292(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log19(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log68(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log293(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log294(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log295(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log296(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log297(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log69(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log70(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log71(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log72(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log298(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log299(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log300(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log301(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log302(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log73(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log303(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log304(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log74(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log75(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log305(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log306(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log307(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log308(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log309(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log20(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log76(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log310(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log311(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log312(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log313(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log314(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log77(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log315(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log316(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log317(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log78(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log318(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log79(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log319(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log320(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log321(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log322(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log323(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log324(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log80(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log325(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log326(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log81(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log327(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log328(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log329(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log330(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log331(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log82(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log83(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log84(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log332(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log333(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log334(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log21(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log335(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log336(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log4(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log337(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log338(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log339(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log85(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log340(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log86(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log341(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log342(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log5(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Log22(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::LogAddress(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::LogBool(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::LogBytes(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::LogBytes1(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::LogBytes10(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::LogBytes11(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::LogBytes12(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::LogBytes13(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::LogBytes14(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::LogBytes15(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::LogBytes16(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::LogBytes17(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::LogBytes18(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::LogBytes19(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::LogBytes2(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::LogBytes20(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::LogBytes21(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::LogBytes22(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::LogBytes23(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::LogBytes24(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::LogBytes25(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::LogBytes26(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::LogBytes27(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::LogBytes28(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::LogBytes29(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::LogBytes3(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::LogBytes30(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::LogBytes31(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::LogBytes32(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::LogBytes4(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::LogBytes5(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::LogBytes6(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::LogBytes7(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::LogBytes8(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::LogBytes9(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::LogInt(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::LogString(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::LogUint(decoded)); + } + Err(::ethers::core::abi::Error::InvalidData.into()) + } + } + impl ::ethers::core::abi::AbiEncode for HardhatConsoleCalls { + fn encode(self) -> Vec { + match self { + Self::Log23(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log87(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log24(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log88(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log89(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log90(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log91(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log25(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log92(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log93(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log94(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log95(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log96(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log26(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log97(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log98(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log99(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log100(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log101(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log102(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log27(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log28(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log103(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log29(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log104(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log105(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log106(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log107(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log108(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log109(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log110(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log111(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log30(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log31(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log112(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log113(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log114(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log115(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log116(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log32(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log6(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log117(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log118(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log119(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log120(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log33(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log121(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log34(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log122(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log35(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log123(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log124(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log125(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log126(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log127(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log128(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log129(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log36(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log130(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log131(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log132(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log7(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log133(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log134(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log135(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log136(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log1(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log137(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log37(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log138(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log139(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log8(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log2(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log140(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log141(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log38(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log142(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log143(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log39(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log144(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log40(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log145(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log146(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log9(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log147(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log148(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log149(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log150(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log151(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log152(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log153(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log3(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log154(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log155(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log156(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log157(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log158(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log159(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log160(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log161(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log41(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log162(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log163(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log164(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log165(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log10(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log166(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log42(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log167(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log43(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log168(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log169(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log0(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log170(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log171(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log172(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log173(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log44(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log45(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log174(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log175(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log46(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log176(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log177(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log178(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log47(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log179(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log180(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log181(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log182(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log183(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log184(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log185(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log186(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log187(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log188(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log48(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log189(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log190(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log191(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log49(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log192(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log11(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log193(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log194(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log195(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log196(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log50(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log51(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log197(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log198(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log12(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log199(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log200(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log201(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log202(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log203(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log204(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log205(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log206(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log207(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log208(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log209(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log210(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log52(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log211(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log212(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log213(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log13(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log14(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log214(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log215(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log216(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log53(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log54(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log217(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log218(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log219(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log220(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log221(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log222(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log223(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log224(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log225(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log226(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log227(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log15(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log55(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log16(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log228(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log56(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log229(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log230(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log231(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log232(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log233(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log234(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log235(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log236(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log237(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log238(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log239(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log240(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log241(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log17(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log242(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log243(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log244(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log245(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log246(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log57(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log247(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log248(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log249(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log58(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log59(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log250(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log251(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log252(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log253(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log60(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log254(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log61(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log255(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log256(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log257(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log258(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log259(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log260(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log261(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log262(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log62(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log263(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log264(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log265(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log266(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log267(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log268(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log269(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log270(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log271(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log272(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log273(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log274(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log275(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log276(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log277(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log63(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log64(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log65(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log278(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log279(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log280(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log18(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log66(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log281(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log282(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log283(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log284(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log285(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log67(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log286(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log287(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log288(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log289(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log290(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log291(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log292(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log19(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log68(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log293(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log294(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log295(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log296(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log297(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log69(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log70(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log71(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log72(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log298(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log299(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log300(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log301(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log302(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log73(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log303(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log304(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log74(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log75(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log305(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log306(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log307(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log308(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log309(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log20(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log76(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log310(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log311(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log312(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log313(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log314(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log77(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log315(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log316(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log317(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log78(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log318(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log79(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log319(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log320(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log321(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log322(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log323(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log324(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log80(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log325(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log326(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log81(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log327(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log328(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log329(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log330(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log331(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log82(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log83(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log84(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log332(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log333(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log334(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log21(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log335(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log336(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log4(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log337(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log338(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log339(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log85(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log340(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log86(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log341(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log342(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log5(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Log22(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::LogAddress(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::LogBool(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::LogBytes(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::LogBytes1(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::LogBytes10(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::LogBytes11(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::LogBytes12(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::LogBytes13(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::LogBytes14(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::LogBytes15(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::LogBytes16(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::LogBytes17(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::LogBytes18(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::LogBytes19(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::LogBytes2(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::LogBytes20(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::LogBytes21(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::LogBytes22(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::LogBytes23(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::LogBytes24(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::LogBytes25(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::LogBytes26(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::LogBytes27(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::LogBytes28(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::LogBytes29(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::LogBytes3(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::LogBytes30(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::LogBytes31(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::LogBytes32(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::LogBytes4(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::LogBytes5(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::LogBytes6(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::LogBytes7(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::LogBytes8(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::LogBytes9(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::LogInt(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::LogString(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::LogUint(element) => ::ethers::core::abi::AbiEncode::encode(element), + } + } + } + impl ::core::fmt::Display for HardhatConsoleCalls { + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + match self { + Self::Log23(element) => ::core::fmt::Display::fmt(element, f), + Self::Log87(element) => ::core::fmt::Display::fmt(element, f), + Self::Log24(element) => ::core::fmt::Display::fmt(element, f), + Self::Log88(element) => ::core::fmt::Display::fmt(element, f), + Self::Log89(element) => ::core::fmt::Display::fmt(element, f), + Self::Log90(element) => ::core::fmt::Display::fmt(element, f), + Self::Log91(element) => ::core::fmt::Display::fmt(element, f), + Self::Log25(element) => ::core::fmt::Display::fmt(element, f), + Self::Log92(element) => ::core::fmt::Display::fmt(element, f), + Self::Log93(element) => ::core::fmt::Display::fmt(element, f), + Self::Log94(element) => ::core::fmt::Display::fmt(element, f), + Self::Log95(element) => ::core::fmt::Display::fmt(element, f), + Self::Log96(element) => ::core::fmt::Display::fmt(element, f), + Self::Log26(element) => ::core::fmt::Display::fmt(element, f), + Self::Log97(element) => ::core::fmt::Display::fmt(element, f), + Self::Log98(element) => ::core::fmt::Display::fmt(element, f), + Self::Log99(element) => ::core::fmt::Display::fmt(element, f), + Self::Log100(element) => ::core::fmt::Display::fmt(element, f), + Self::Log101(element) => ::core::fmt::Display::fmt(element, f), + Self::Log102(element) => ::core::fmt::Display::fmt(element, f), + Self::Log27(element) => ::core::fmt::Display::fmt(element, f), + Self::Log28(element) => ::core::fmt::Display::fmt(element, f), + Self::Log103(element) => ::core::fmt::Display::fmt(element, f), + Self::Log29(element) => ::core::fmt::Display::fmt(element, f), + Self::Log104(element) => ::core::fmt::Display::fmt(element, f), + Self::Log105(element) => ::core::fmt::Display::fmt(element, f), + Self::Log106(element) => ::core::fmt::Display::fmt(element, f), + Self::Log107(element) => ::core::fmt::Display::fmt(element, f), + Self::Log108(element) => ::core::fmt::Display::fmt(element, f), + Self::Log109(element) => ::core::fmt::Display::fmt(element, f), + Self::Log110(element) => ::core::fmt::Display::fmt(element, f), + Self::Log111(element) => ::core::fmt::Display::fmt(element, f), + Self::Log30(element) => ::core::fmt::Display::fmt(element, f), + Self::Log31(element) => ::core::fmt::Display::fmt(element, f), + Self::Log112(element) => ::core::fmt::Display::fmt(element, f), + Self::Log113(element) => ::core::fmt::Display::fmt(element, f), + Self::Log114(element) => ::core::fmt::Display::fmt(element, f), + Self::Log115(element) => ::core::fmt::Display::fmt(element, f), + Self::Log116(element) => ::core::fmt::Display::fmt(element, f), + Self::Log32(element) => ::core::fmt::Display::fmt(element, f), + Self::Log6(element) => ::core::fmt::Display::fmt(element, f), + Self::Log117(element) => ::core::fmt::Display::fmt(element, f), + Self::Log118(element) => ::core::fmt::Display::fmt(element, f), + Self::Log119(element) => ::core::fmt::Display::fmt(element, f), + Self::Log120(element) => ::core::fmt::Display::fmt(element, f), + Self::Log33(element) => ::core::fmt::Display::fmt(element, f), + Self::Log121(element) => ::core::fmt::Display::fmt(element, f), + Self::Log34(element) => ::core::fmt::Display::fmt(element, f), + Self::Log122(element) => ::core::fmt::Display::fmt(element, f), + Self::Log35(element) => ::core::fmt::Display::fmt(element, f), + Self::Log123(element) => ::core::fmt::Display::fmt(element, f), + Self::Log124(element) => ::core::fmt::Display::fmt(element, f), + Self::Log125(element) => ::core::fmt::Display::fmt(element, f), + Self::Log126(element) => ::core::fmt::Display::fmt(element, f), + Self::Log127(element) => ::core::fmt::Display::fmt(element, f), + Self::Log128(element) => ::core::fmt::Display::fmt(element, f), + Self::Log129(element) => ::core::fmt::Display::fmt(element, f), + Self::Log36(element) => ::core::fmt::Display::fmt(element, f), + Self::Log130(element) => ::core::fmt::Display::fmt(element, f), + Self::Log131(element) => ::core::fmt::Display::fmt(element, f), + Self::Log132(element) => ::core::fmt::Display::fmt(element, f), + Self::Log7(element) => ::core::fmt::Display::fmt(element, f), + Self::Log133(element) => ::core::fmt::Display::fmt(element, f), + Self::Log134(element) => ::core::fmt::Display::fmt(element, f), + Self::Log135(element) => ::core::fmt::Display::fmt(element, f), + Self::Log136(element) => ::core::fmt::Display::fmt(element, f), + Self::Log1(element) => ::core::fmt::Display::fmt(element, f), + Self::Log137(element) => ::core::fmt::Display::fmt(element, f), + Self::Log37(element) => ::core::fmt::Display::fmt(element, f), + Self::Log138(element) => ::core::fmt::Display::fmt(element, f), + Self::Log139(element) => ::core::fmt::Display::fmt(element, f), + Self::Log8(element) => ::core::fmt::Display::fmt(element, f), + Self::Log2(element) => ::core::fmt::Display::fmt(element, f), + Self::Log140(element) => ::core::fmt::Display::fmt(element, f), + Self::Log141(element) => ::core::fmt::Display::fmt(element, f), + Self::Log38(element) => ::core::fmt::Display::fmt(element, f), + Self::Log142(element) => ::core::fmt::Display::fmt(element, f), + Self::Log143(element) => ::core::fmt::Display::fmt(element, f), + Self::Log39(element) => ::core::fmt::Display::fmt(element, f), + Self::Log144(element) => ::core::fmt::Display::fmt(element, f), + Self::Log40(element) => ::core::fmt::Display::fmt(element, f), + Self::Log145(element) => ::core::fmt::Display::fmt(element, f), + Self::Log146(element) => ::core::fmt::Display::fmt(element, f), + Self::Log9(element) => ::core::fmt::Display::fmt(element, f), + Self::Log147(element) => ::core::fmt::Display::fmt(element, f), + Self::Log148(element) => ::core::fmt::Display::fmt(element, f), + Self::Log149(element) => ::core::fmt::Display::fmt(element, f), + Self::Log150(element) => ::core::fmt::Display::fmt(element, f), + Self::Log151(element) => ::core::fmt::Display::fmt(element, f), + Self::Log152(element) => ::core::fmt::Display::fmt(element, f), + Self::Log153(element) => ::core::fmt::Display::fmt(element, f), + Self::Log3(element) => ::core::fmt::Display::fmt(element, f), + Self::Log154(element) => ::core::fmt::Display::fmt(element, f), + Self::Log155(element) => ::core::fmt::Display::fmt(element, f), + Self::Log156(element) => ::core::fmt::Display::fmt(element, f), + Self::Log157(element) => ::core::fmt::Display::fmt(element, f), + Self::Log158(element) => ::core::fmt::Display::fmt(element, f), + Self::Log159(element) => ::core::fmt::Display::fmt(element, f), + Self::Log160(element) => ::core::fmt::Display::fmt(element, f), + Self::Log161(element) => ::core::fmt::Display::fmt(element, f), + Self::Log41(element) => ::core::fmt::Display::fmt(element, f), + Self::Log162(element) => ::core::fmt::Display::fmt(element, f), + Self::Log163(element) => ::core::fmt::Display::fmt(element, f), + Self::Log164(element) => ::core::fmt::Display::fmt(element, f), + Self::Log165(element) => ::core::fmt::Display::fmt(element, f), + Self::Log10(element) => ::core::fmt::Display::fmt(element, f), + Self::Log166(element) => ::core::fmt::Display::fmt(element, f), + Self::Log42(element) => ::core::fmt::Display::fmt(element, f), + Self::Log167(element) => ::core::fmt::Display::fmt(element, f), + Self::Log43(element) => ::core::fmt::Display::fmt(element, f), + Self::Log168(element) => ::core::fmt::Display::fmt(element, f), + Self::Log169(element) => ::core::fmt::Display::fmt(element, f), + Self::Log0(element) => ::core::fmt::Display::fmt(element, f), + Self::Log170(element) => ::core::fmt::Display::fmt(element, f), + Self::Log171(element) => ::core::fmt::Display::fmt(element, f), + Self::Log172(element) => ::core::fmt::Display::fmt(element, f), + Self::Log173(element) => ::core::fmt::Display::fmt(element, f), + Self::Log44(element) => ::core::fmt::Display::fmt(element, f), + Self::Log45(element) => ::core::fmt::Display::fmt(element, f), + Self::Log174(element) => ::core::fmt::Display::fmt(element, f), + Self::Log175(element) => ::core::fmt::Display::fmt(element, f), + Self::Log46(element) => ::core::fmt::Display::fmt(element, f), + Self::Log176(element) => ::core::fmt::Display::fmt(element, f), + Self::Log177(element) => ::core::fmt::Display::fmt(element, f), + Self::Log178(element) => ::core::fmt::Display::fmt(element, f), + Self::Log47(element) => ::core::fmt::Display::fmt(element, f), + Self::Log179(element) => ::core::fmt::Display::fmt(element, f), + Self::Log180(element) => ::core::fmt::Display::fmt(element, f), + Self::Log181(element) => ::core::fmt::Display::fmt(element, f), + Self::Log182(element) => ::core::fmt::Display::fmt(element, f), + Self::Log183(element) => ::core::fmt::Display::fmt(element, f), + Self::Log184(element) => ::core::fmt::Display::fmt(element, f), + Self::Log185(element) => ::core::fmt::Display::fmt(element, f), + Self::Log186(element) => ::core::fmt::Display::fmt(element, f), + Self::Log187(element) => ::core::fmt::Display::fmt(element, f), + Self::Log188(element) => ::core::fmt::Display::fmt(element, f), + Self::Log48(element) => ::core::fmt::Display::fmt(element, f), + Self::Log189(element) => ::core::fmt::Display::fmt(element, f), + Self::Log190(element) => ::core::fmt::Display::fmt(element, f), + Self::Log191(element) => ::core::fmt::Display::fmt(element, f), + Self::Log49(element) => ::core::fmt::Display::fmt(element, f), + Self::Log192(element) => ::core::fmt::Display::fmt(element, f), + Self::Log11(element) => ::core::fmt::Display::fmt(element, f), + Self::Log193(element) => ::core::fmt::Display::fmt(element, f), + Self::Log194(element) => ::core::fmt::Display::fmt(element, f), + Self::Log195(element) => ::core::fmt::Display::fmt(element, f), + Self::Log196(element) => ::core::fmt::Display::fmt(element, f), + Self::Log50(element) => ::core::fmt::Display::fmt(element, f), + Self::Log51(element) => ::core::fmt::Display::fmt(element, f), + Self::Log197(element) => ::core::fmt::Display::fmt(element, f), + Self::Log198(element) => ::core::fmt::Display::fmt(element, f), + Self::Log12(element) => ::core::fmt::Display::fmt(element, f), + Self::Log199(element) => ::core::fmt::Display::fmt(element, f), + Self::Log200(element) => ::core::fmt::Display::fmt(element, f), + Self::Log201(element) => ::core::fmt::Display::fmt(element, f), + Self::Log202(element) => ::core::fmt::Display::fmt(element, f), + Self::Log203(element) => ::core::fmt::Display::fmt(element, f), + Self::Log204(element) => ::core::fmt::Display::fmt(element, f), + Self::Log205(element) => ::core::fmt::Display::fmt(element, f), + Self::Log206(element) => ::core::fmt::Display::fmt(element, f), + Self::Log207(element) => ::core::fmt::Display::fmt(element, f), + Self::Log208(element) => ::core::fmt::Display::fmt(element, f), + Self::Log209(element) => ::core::fmt::Display::fmt(element, f), + Self::Log210(element) => ::core::fmt::Display::fmt(element, f), + Self::Log52(element) => ::core::fmt::Display::fmt(element, f), + Self::Log211(element) => ::core::fmt::Display::fmt(element, f), + Self::Log212(element) => ::core::fmt::Display::fmt(element, f), + Self::Log213(element) => ::core::fmt::Display::fmt(element, f), + Self::Log13(element) => ::core::fmt::Display::fmt(element, f), + Self::Log14(element) => ::core::fmt::Display::fmt(element, f), + Self::Log214(element) => ::core::fmt::Display::fmt(element, f), + Self::Log215(element) => ::core::fmt::Display::fmt(element, f), + Self::Log216(element) => ::core::fmt::Display::fmt(element, f), + Self::Log53(element) => ::core::fmt::Display::fmt(element, f), + Self::Log54(element) => ::core::fmt::Display::fmt(element, f), + Self::Log217(element) => ::core::fmt::Display::fmt(element, f), + Self::Log218(element) => ::core::fmt::Display::fmt(element, f), + Self::Log219(element) => ::core::fmt::Display::fmt(element, f), + Self::Log220(element) => ::core::fmt::Display::fmt(element, f), + Self::Log221(element) => ::core::fmt::Display::fmt(element, f), + Self::Log222(element) => ::core::fmt::Display::fmt(element, f), + Self::Log223(element) => ::core::fmt::Display::fmt(element, f), + Self::Log224(element) => ::core::fmt::Display::fmt(element, f), + Self::Log225(element) => ::core::fmt::Display::fmt(element, f), + Self::Log226(element) => ::core::fmt::Display::fmt(element, f), + Self::Log227(element) => ::core::fmt::Display::fmt(element, f), + Self::Log15(element) => ::core::fmt::Display::fmt(element, f), + Self::Log55(element) => ::core::fmt::Display::fmt(element, f), + Self::Log16(element) => ::core::fmt::Display::fmt(element, f), + Self::Log228(element) => ::core::fmt::Display::fmt(element, f), + Self::Log56(element) => ::core::fmt::Display::fmt(element, f), + Self::Log229(element) => ::core::fmt::Display::fmt(element, f), + Self::Log230(element) => ::core::fmt::Display::fmt(element, f), + Self::Log231(element) => ::core::fmt::Display::fmt(element, f), + Self::Log232(element) => ::core::fmt::Display::fmt(element, f), + Self::Log233(element) => ::core::fmt::Display::fmt(element, f), + Self::Log234(element) => ::core::fmt::Display::fmt(element, f), + Self::Log235(element) => ::core::fmt::Display::fmt(element, f), + Self::Log236(element) => ::core::fmt::Display::fmt(element, f), + Self::Log237(element) => ::core::fmt::Display::fmt(element, f), + Self::Log238(element) => ::core::fmt::Display::fmt(element, f), + Self::Log239(element) => ::core::fmt::Display::fmt(element, f), + Self::Log240(element) => ::core::fmt::Display::fmt(element, f), + Self::Log241(element) => ::core::fmt::Display::fmt(element, f), + Self::Log17(element) => ::core::fmt::Display::fmt(element, f), + Self::Log242(element) => ::core::fmt::Display::fmt(element, f), + Self::Log243(element) => ::core::fmt::Display::fmt(element, f), + Self::Log244(element) => ::core::fmt::Display::fmt(element, f), + Self::Log245(element) => ::core::fmt::Display::fmt(element, f), + Self::Log246(element) => ::core::fmt::Display::fmt(element, f), + Self::Log57(element) => ::core::fmt::Display::fmt(element, f), + Self::Log247(element) => ::core::fmt::Display::fmt(element, f), + Self::Log248(element) => ::core::fmt::Display::fmt(element, f), + Self::Log249(element) => ::core::fmt::Display::fmt(element, f), + Self::Log58(element) => ::core::fmt::Display::fmt(element, f), + Self::Log59(element) => ::core::fmt::Display::fmt(element, f), + Self::Log250(element) => ::core::fmt::Display::fmt(element, f), + Self::Log251(element) => ::core::fmt::Display::fmt(element, f), + Self::Log252(element) => ::core::fmt::Display::fmt(element, f), + Self::Log253(element) => ::core::fmt::Display::fmt(element, f), + Self::Log60(element) => ::core::fmt::Display::fmt(element, f), + Self::Log254(element) => ::core::fmt::Display::fmt(element, f), + Self::Log61(element) => ::core::fmt::Display::fmt(element, f), + Self::Log255(element) => ::core::fmt::Display::fmt(element, f), + Self::Log256(element) => ::core::fmt::Display::fmt(element, f), + Self::Log257(element) => ::core::fmt::Display::fmt(element, f), + Self::Log258(element) => ::core::fmt::Display::fmt(element, f), + Self::Log259(element) => ::core::fmt::Display::fmt(element, f), + Self::Log260(element) => ::core::fmt::Display::fmt(element, f), + Self::Log261(element) => ::core::fmt::Display::fmt(element, f), + Self::Log262(element) => ::core::fmt::Display::fmt(element, f), + Self::Log62(element) => ::core::fmt::Display::fmt(element, f), + Self::Log263(element) => ::core::fmt::Display::fmt(element, f), + Self::Log264(element) => ::core::fmt::Display::fmt(element, f), + Self::Log265(element) => ::core::fmt::Display::fmt(element, f), + Self::Log266(element) => ::core::fmt::Display::fmt(element, f), + Self::Log267(element) => ::core::fmt::Display::fmt(element, f), + Self::Log268(element) => ::core::fmt::Display::fmt(element, f), + Self::Log269(element) => ::core::fmt::Display::fmt(element, f), + Self::Log270(element) => ::core::fmt::Display::fmt(element, f), + Self::Log271(element) => ::core::fmt::Display::fmt(element, f), + Self::Log272(element) => ::core::fmt::Display::fmt(element, f), + Self::Log273(element) => ::core::fmt::Display::fmt(element, f), + Self::Log274(element) => ::core::fmt::Display::fmt(element, f), + Self::Log275(element) => ::core::fmt::Display::fmt(element, f), + Self::Log276(element) => ::core::fmt::Display::fmt(element, f), + Self::Log277(element) => ::core::fmt::Display::fmt(element, f), + Self::Log63(element) => ::core::fmt::Display::fmt(element, f), + Self::Log64(element) => ::core::fmt::Display::fmt(element, f), + Self::Log65(element) => ::core::fmt::Display::fmt(element, f), + Self::Log278(element) => ::core::fmt::Display::fmt(element, f), + Self::Log279(element) => ::core::fmt::Display::fmt(element, f), + Self::Log280(element) => ::core::fmt::Display::fmt(element, f), + Self::Log18(element) => ::core::fmt::Display::fmt(element, f), + Self::Log66(element) => ::core::fmt::Display::fmt(element, f), + Self::Log281(element) => ::core::fmt::Display::fmt(element, f), + Self::Log282(element) => ::core::fmt::Display::fmt(element, f), + Self::Log283(element) => ::core::fmt::Display::fmt(element, f), + Self::Log284(element) => ::core::fmt::Display::fmt(element, f), + Self::Log285(element) => ::core::fmt::Display::fmt(element, f), + Self::Log67(element) => ::core::fmt::Display::fmt(element, f), + Self::Log286(element) => ::core::fmt::Display::fmt(element, f), + Self::Log287(element) => ::core::fmt::Display::fmt(element, f), + Self::Log288(element) => ::core::fmt::Display::fmt(element, f), + Self::Log289(element) => ::core::fmt::Display::fmt(element, f), + Self::Log290(element) => ::core::fmt::Display::fmt(element, f), + Self::Log291(element) => ::core::fmt::Display::fmt(element, f), + Self::Log292(element) => ::core::fmt::Display::fmt(element, f), + Self::Log19(element) => ::core::fmt::Display::fmt(element, f), + Self::Log68(element) => ::core::fmt::Display::fmt(element, f), + Self::Log293(element) => ::core::fmt::Display::fmt(element, f), + Self::Log294(element) => ::core::fmt::Display::fmt(element, f), + Self::Log295(element) => ::core::fmt::Display::fmt(element, f), + Self::Log296(element) => ::core::fmt::Display::fmt(element, f), + Self::Log297(element) => ::core::fmt::Display::fmt(element, f), + Self::Log69(element) => ::core::fmt::Display::fmt(element, f), + Self::Log70(element) => ::core::fmt::Display::fmt(element, f), + Self::Log71(element) => ::core::fmt::Display::fmt(element, f), + Self::Log72(element) => ::core::fmt::Display::fmt(element, f), + Self::Log298(element) => ::core::fmt::Display::fmt(element, f), + Self::Log299(element) => ::core::fmt::Display::fmt(element, f), + Self::Log300(element) => ::core::fmt::Display::fmt(element, f), + Self::Log301(element) => ::core::fmt::Display::fmt(element, f), + Self::Log302(element) => ::core::fmt::Display::fmt(element, f), + Self::Log73(element) => ::core::fmt::Display::fmt(element, f), + Self::Log303(element) => ::core::fmt::Display::fmt(element, f), + Self::Log304(element) => ::core::fmt::Display::fmt(element, f), + Self::Log74(element) => ::core::fmt::Display::fmt(element, f), + Self::Log75(element) => ::core::fmt::Display::fmt(element, f), + Self::Log305(element) => ::core::fmt::Display::fmt(element, f), + Self::Log306(element) => ::core::fmt::Display::fmt(element, f), + Self::Log307(element) => ::core::fmt::Display::fmt(element, f), + Self::Log308(element) => ::core::fmt::Display::fmt(element, f), + Self::Log309(element) => ::core::fmt::Display::fmt(element, f), + Self::Log20(element) => ::core::fmt::Display::fmt(element, f), + Self::Log76(element) => ::core::fmt::Display::fmt(element, f), + Self::Log310(element) => ::core::fmt::Display::fmt(element, f), + Self::Log311(element) => ::core::fmt::Display::fmt(element, f), + Self::Log312(element) => ::core::fmt::Display::fmt(element, f), + Self::Log313(element) => ::core::fmt::Display::fmt(element, f), + Self::Log314(element) => ::core::fmt::Display::fmt(element, f), + Self::Log77(element) => ::core::fmt::Display::fmt(element, f), + Self::Log315(element) => ::core::fmt::Display::fmt(element, f), + Self::Log316(element) => ::core::fmt::Display::fmt(element, f), + Self::Log317(element) => ::core::fmt::Display::fmt(element, f), + Self::Log78(element) => ::core::fmt::Display::fmt(element, f), + Self::Log318(element) => ::core::fmt::Display::fmt(element, f), + Self::Log79(element) => ::core::fmt::Display::fmt(element, f), + Self::Log319(element) => ::core::fmt::Display::fmt(element, f), + Self::Log320(element) => ::core::fmt::Display::fmt(element, f), + Self::Log321(element) => ::core::fmt::Display::fmt(element, f), + Self::Log322(element) => ::core::fmt::Display::fmt(element, f), + Self::Log323(element) => ::core::fmt::Display::fmt(element, f), + Self::Log324(element) => ::core::fmt::Display::fmt(element, f), + Self::Log80(element) => ::core::fmt::Display::fmt(element, f), + Self::Log325(element) => ::core::fmt::Display::fmt(element, f), + Self::Log326(element) => ::core::fmt::Display::fmt(element, f), + Self::Log81(element) => ::core::fmt::Display::fmt(element, f), + Self::Log327(element) => ::core::fmt::Display::fmt(element, f), + Self::Log328(element) => ::core::fmt::Display::fmt(element, f), + Self::Log329(element) => ::core::fmt::Display::fmt(element, f), + Self::Log330(element) => ::core::fmt::Display::fmt(element, f), + Self::Log331(element) => ::core::fmt::Display::fmt(element, f), + Self::Log82(element) => ::core::fmt::Display::fmt(element, f), + Self::Log83(element) => ::core::fmt::Display::fmt(element, f), + Self::Log84(element) => ::core::fmt::Display::fmt(element, f), + Self::Log332(element) => ::core::fmt::Display::fmt(element, f), + Self::Log333(element) => ::core::fmt::Display::fmt(element, f), + Self::Log334(element) => ::core::fmt::Display::fmt(element, f), + Self::Log21(element) => ::core::fmt::Display::fmt(element, f), + Self::Log335(element) => ::core::fmt::Display::fmt(element, f), + Self::Log336(element) => ::core::fmt::Display::fmt(element, f), + Self::Log4(element) => ::core::fmt::Display::fmt(element, f), + Self::Log337(element) => ::core::fmt::Display::fmt(element, f), + Self::Log338(element) => ::core::fmt::Display::fmt(element, f), + Self::Log339(element) => ::core::fmt::Display::fmt(element, f), + Self::Log85(element) => ::core::fmt::Display::fmt(element, f), + Self::Log340(element) => ::core::fmt::Display::fmt(element, f), + Self::Log86(element) => ::core::fmt::Display::fmt(element, f), + Self::Log341(element) => ::core::fmt::Display::fmt(element, f), + Self::Log342(element) => ::core::fmt::Display::fmt(element, f), + Self::Log5(element) => ::core::fmt::Display::fmt(element, f), + Self::Log22(element) => ::core::fmt::Display::fmt(element, f), + Self::LogAddress(element) => ::core::fmt::Display::fmt(element, f), + Self::LogBool(element) => ::core::fmt::Display::fmt(element, f), + Self::LogBytes(element) => ::core::fmt::Display::fmt(element, f), + Self::LogBytes1(element) => ::core::fmt::Display::fmt(element, f), + Self::LogBytes10(element) => ::core::fmt::Display::fmt(element, f), + Self::LogBytes11(element) => ::core::fmt::Display::fmt(element, f), + Self::LogBytes12(element) => ::core::fmt::Display::fmt(element, f), + Self::LogBytes13(element) => ::core::fmt::Display::fmt(element, f), + Self::LogBytes14(element) => ::core::fmt::Display::fmt(element, f), + Self::LogBytes15(element) => ::core::fmt::Display::fmt(element, f), + Self::LogBytes16(element) => ::core::fmt::Display::fmt(element, f), + Self::LogBytes17(element) => ::core::fmt::Display::fmt(element, f), + Self::LogBytes18(element) => ::core::fmt::Display::fmt(element, f), + Self::LogBytes19(element) => ::core::fmt::Display::fmt(element, f), + Self::LogBytes2(element) => ::core::fmt::Display::fmt(element, f), + Self::LogBytes20(element) => ::core::fmt::Display::fmt(element, f), + Self::LogBytes21(element) => ::core::fmt::Display::fmt(element, f), + Self::LogBytes22(element) => ::core::fmt::Display::fmt(element, f), + Self::LogBytes23(element) => ::core::fmt::Display::fmt(element, f), + Self::LogBytes24(element) => ::core::fmt::Display::fmt(element, f), + Self::LogBytes25(element) => ::core::fmt::Display::fmt(element, f), + Self::LogBytes26(element) => ::core::fmt::Display::fmt(element, f), + Self::LogBytes27(element) => ::core::fmt::Display::fmt(element, f), + Self::LogBytes28(element) => ::core::fmt::Display::fmt(element, f), + Self::LogBytes29(element) => ::core::fmt::Display::fmt(element, f), + Self::LogBytes3(element) => ::core::fmt::Display::fmt(element, f), + Self::LogBytes30(element) => ::core::fmt::Display::fmt(element, f), + Self::LogBytes31(element) => ::core::fmt::Display::fmt(element, f), + Self::LogBytes32(element) => ::core::fmt::Display::fmt(element, f), + Self::LogBytes4(element) => ::core::fmt::Display::fmt(element, f), + Self::LogBytes5(element) => ::core::fmt::Display::fmt(element, f), + Self::LogBytes6(element) => ::core::fmt::Display::fmt(element, f), + Self::LogBytes7(element) => ::core::fmt::Display::fmt(element, f), + Self::LogBytes8(element) => ::core::fmt::Display::fmt(element, f), + Self::LogBytes9(element) => ::core::fmt::Display::fmt(element, f), + Self::LogInt(element) => ::core::fmt::Display::fmt(element, f), + Self::LogString(element) => ::core::fmt::Display::fmt(element, f), + Self::LogUint(element) => ::core::fmt::Display::fmt(element, f), + } + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log23Call) -> Self { + Self::Log23(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log87Call) -> Self { + Self::Log87(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log24Call) -> Self { + Self::Log24(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log88Call) -> Self { + Self::Log88(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log89Call) -> Self { + Self::Log89(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log90Call) -> Self { + Self::Log90(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log91Call) -> Self { + Self::Log91(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log25Call) -> Self { + Self::Log25(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log92Call) -> Self { + Self::Log92(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log93Call) -> Self { + Self::Log93(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log94Call) -> Self { + Self::Log94(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log95Call) -> Self { + Self::Log95(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log96Call) -> Self { + Self::Log96(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log26Call) -> Self { + Self::Log26(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log97Call) -> Self { + Self::Log97(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log98Call) -> Self { + Self::Log98(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log99Call) -> Self { + Self::Log99(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log100Call) -> Self { + Self::Log100(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log101Call) -> Self { + Self::Log101(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log102Call) -> Self { + Self::Log102(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log27Call) -> Self { + Self::Log27(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log28Call) -> Self { + Self::Log28(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log103Call) -> Self { + Self::Log103(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log29Call) -> Self { + Self::Log29(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log104Call) -> Self { + Self::Log104(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log105Call) -> Self { + Self::Log105(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log106Call) -> Self { + Self::Log106(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log107Call) -> Self { + Self::Log107(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log108Call) -> Self { + Self::Log108(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log109Call) -> Self { + Self::Log109(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log110Call) -> Self { + Self::Log110(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log111Call) -> Self { + Self::Log111(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log30Call) -> Self { + Self::Log30(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log31Call) -> Self { + Self::Log31(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log112Call) -> Self { + Self::Log112(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log113Call) -> Self { + Self::Log113(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log114Call) -> Self { + Self::Log114(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log115Call) -> Self { + Self::Log115(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log116Call) -> Self { + Self::Log116(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log32Call) -> Self { + Self::Log32(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log6Call) -> Self { + Self::Log6(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log117Call) -> Self { + Self::Log117(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log118Call) -> Self { + Self::Log118(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log119Call) -> Self { + Self::Log119(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log120Call) -> Self { + Self::Log120(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log33Call) -> Self { + Self::Log33(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log121Call) -> Self { + Self::Log121(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log34Call) -> Self { + Self::Log34(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log122Call) -> Self { + Self::Log122(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log35Call) -> Self { + Self::Log35(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log123Call) -> Self { + Self::Log123(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log124Call) -> Self { + Self::Log124(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log125Call) -> Self { + Self::Log125(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log126Call) -> Self { + Self::Log126(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log127Call) -> Self { + Self::Log127(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log128Call) -> Self { + Self::Log128(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log129Call) -> Self { + Self::Log129(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log36Call) -> Self { + Self::Log36(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log130Call) -> Self { + Self::Log130(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log131Call) -> Self { + Self::Log131(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log132Call) -> Self { + Self::Log132(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log7Call) -> Self { + Self::Log7(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log133Call) -> Self { + Self::Log133(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log134Call) -> Self { + Self::Log134(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log135Call) -> Self { + Self::Log135(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log136Call) -> Self { + Self::Log136(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log1Call) -> Self { + Self::Log1(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log137Call) -> Self { + Self::Log137(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log37Call) -> Self { + Self::Log37(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log138Call) -> Self { + Self::Log138(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log139Call) -> Self { + Self::Log139(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log8Call) -> Self { + Self::Log8(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log2Call) -> Self { + Self::Log2(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log140Call) -> Self { + Self::Log140(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log141Call) -> Self { + Self::Log141(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log38Call) -> Self { + Self::Log38(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log142Call) -> Self { + Self::Log142(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log143Call) -> Self { + Self::Log143(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log39Call) -> Self { + Self::Log39(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log144Call) -> Self { + Self::Log144(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log40Call) -> Self { + Self::Log40(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log145Call) -> Self { + Self::Log145(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log146Call) -> Self { + Self::Log146(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log9Call) -> Self { + Self::Log9(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log147Call) -> Self { + Self::Log147(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log148Call) -> Self { + Self::Log148(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log149Call) -> Self { + Self::Log149(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log150Call) -> Self { + Self::Log150(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log151Call) -> Self { + Self::Log151(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log152Call) -> Self { + Self::Log152(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log153Call) -> Self { + Self::Log153(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log3Call) -> Self { + Self::Log3(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log154Call) -> Self { + Self::Log154(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log155Call) -> Self { + Self::Log155(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log156Call) -> Self { + Self::Log156(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log157Call) -> Self { + Self::Log157(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log158Call) -> Self { + Self::Log158(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log159Call) -> Self { + Self::Log159(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log160Call) -> Self { + Self::Log160(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log161Call) -> Self { + Self::Log161(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log41Call) -> Self { + Self::Log41(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log162Call) -> Self { + Self::Log162(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log163Call) -> Self { + Self::Log163(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log164Call) -> Self { + Self::Log164(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log165Call) -> Self { + Self::Log165(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log10Call) -> Self { + Self::Log10(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log166Call) -> Self { + Self::Log166(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log42Call) -> Self { + Self::Log42(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log167Call) -> Self { + Self::Log167(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log43Call) -> Self { + Self::Log43(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log168Call) -> Self { + Self::Log168(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log169Call) -> Self { + Self::Log169(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log0Call) -> Self { + Self::Log0(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log170Call) -> Self { + Self::Log170(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log171Call) -> Self { + Self::Log171(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log172Call) -> Self { + Self::Log172(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log173Call) -> Self { + Self::Log173(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log44Call) -> Self { + Self::Log44(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log45Call) -> Self { + Self::Log45(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log174Call) -> Self { + Self::Log174(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log175Call) -> Self { + Self::Log175(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log46Call) -> Self { + Self::Log46(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log176Call) -> Self { + Self::Log176(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log177Call) -> Self { + Self::Log177(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log178Call) -> Self { + Self::Log178(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log47Call) -> Self { + Self::Log47(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log179Call) -> Self { + Self::Log179(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log180Call) -> Self { + Self::Log180(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log181Call) -> Self { + Self::Log181(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log182Call) -> Self { + Self::Log182(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log183Call) -> Self { + Self::Log183(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log184Call) -> Self { + Self::Log184(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log185Call) -> Self { + Self::Log185(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log186Call) -> Self { + Self::Log186(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log187Call) -> Self { + Self::Log187(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log188Call) -> Self { + Self::Log188(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log48Call) -> Self { + Self::Log48(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log189Call) -> Self { + Self::Log189(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log190Call) -> Self { + Self::Log190(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log191Call) -> Self { + Self::Log191(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log49Call) -> Self { + Self::Log49(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log192Call) -> Self { + Self::Log192(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log11Call) -> Self { + Self::Log11(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log193Call) -> Self { + Self::Log193(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log194Call) -> Self { + Self::Log194(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log195Call) -> Self { + Self::Log195(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log196Call) -> Self { + Self::Log196(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log50Call) -> Self { + Self::Log50(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log51Call) -> Self { + Self::Log51(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log197Call) -> Self { + Self::Log197(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log198Call) -> Self { + Self::Log198(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log12Call) -> Self { + Self::Log12(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log199Call) -> Self { + Self::Log199(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log200Call) -> Self { + Self::Log200(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log201Call) -> Self { + Self::Log201(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log202Call) -> Self { + Self::Log202(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log203Call) -> Self { + Self::Log203(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log204Call) -> Self { + Self::Log204(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log205Call) -> Self { + Self::Log205(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log206Call) -> Self { + Self::Log206(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log207Call) -> Self { + Self::Log207(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log208Call) -> Self { + Self::Log208(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log209Call) -> Self { + Self::Log209(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log210Call) -> Self { + Self::Log210(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log52Call) -> Self { + Self::Log52(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log211Call) -> Self { + Self::Log211(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log212Call) -> Self { + Self::Log212(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log213Call) -> Self { + Self::Log213(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log13Call) -> Self { + Self::Log13(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log14Call) -> Self { + Self::Log14(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log214Call) -> Self { + Self::Log214(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log215Call) -> Self { + Self::Log215(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log216Call) -> Self { + Self::Log216(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log53Call) -> Self { + Self::Log53(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log54Call) -> Self { + Self::Log54(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log217Call) -> Self { + Self::Log217(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log218Call) -> Self { + Self::Log218(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log219Call) -> Self { + Self::Log219(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log220Call) -> Self { + Self::Log220(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log221Call) -> Self { + Self::Log221(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log222Call) -> Self { + Self::Log222(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log223Call) -> Self { + Self::Log223(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log224Call) -> Self { + Self::Log224(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log225Call) -> Self { + Self::Log225(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log226Call) -> Self { + Self::Log226(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log227Call) -> Self { + Self::Log227(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log15Call) -> Self { + Self::Log15(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log55Call) -> Self { + Self::Log55(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log16Call) -> Self { + Self::Log16(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log228Call) -> Self { + Self::Log228(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log56Call) -> Self { + Self::Log56(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log229Call) -> Self { + Self::Log229(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log230Call) -> Self { + Self::Log230(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log231Call) -> Self { + Self::Log231(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log232Call) -> Self { + Self::Log232(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log233Call) -> Self { + Self::Log233(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log234Call) -> Self { + Self::Log234(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log235Call) -> Self { + Self::Log235(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log236Call) -> Self { + Self::Log236(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log237Call) -> Self { + Self::Log237(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log238Call) -> Self { + Self::Log238(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log239Call) -> Self { + Self::Log239(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log240Call) -> Self { + Self::Log240(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log241Call) -> Self { + Self::Log241(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log17Call) -> Self { + Self::Log17(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log242Call) -> Self { + Self::Log242(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log243Call) -> Self { + Self::Log243(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log244Call) -> Self { + Self::Log244(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log245Call) -> Self { + Self::Log245(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log246Call) -> Self { + Self::Log246(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log57Call) -> Self { + Self::Log57(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log247Call) -> Self { + Self::Log247(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log248Call) -> Self { + Self::Log248(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log249Call) -> Self { + Self::Log249(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log58Call) -> Self { + Self::Log58(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log59Call) -> Self { + Self::Log59(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log250Call) -> Self { + Self::Log250(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log251Call) -> Self { + Self::Log251(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log252Call) -> Self { + Self::Log252(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log253Call) -> Self { + Self::Log253(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log60Call) -> Self { + Self::Log60(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log254Call) -> Self { + Self::Log254(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log61Call) -> Self { + Self::Log61(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log255Call) -> Self { + Self::Log255(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log256Call) -> Self { + Self::Log256(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log257Call) -> Self { + Self::Log257(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log258Call) -> Self { + Self::Log258(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log259Call) -> Self { + Self::Log259(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log260Call) -> Self { + Self::Log260(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log261Call) -> Self { + Self::Log261(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log262Call) -> Self { + Self::Log262(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log62Call) -> Self { + Self::Log62(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log263Call) -> Self { + Self::Log263(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log264Call) -> Self { + Self::Log264(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log265Call) -> Self { + Self::Log265(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log266Call) -> Self { + Self::Log266(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log267Call) -> Self { + Self::Log267(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log268Call) -> Self { + Self::Log268(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log269Call) -> Self { + Self::Log269(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log270Call) -> Self { + Self::Log270(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log271Call) -> Self { + Self::Log271(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log272Call) -> Self { + Self::Log272(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log273Call) -> Self { + Self::Log273(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log274Call) -> Self { + Self::Log274(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log275Call) -> Self { + Self::Log275(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log276Call) -> Self { + Self::Log276(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log277Call) -> Self { + Self::Log277(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log63Call) -> Self { + Self::Log63(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log64Call) -> Self { + Self::Log64(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log65Call) -> Self { + Self::Log65(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log278Call) -> Self { + Self::Log278(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log279Call) -> Self { + Self::Log279(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log280Call) -> Self { + Self::Log280(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log18Call) -> Self { + Self::Log18(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log66Call) -> Self { + Self::Log66(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log281Call) -> Self { + Self::Log281(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log282Call) -> Self { + Self::Log282(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log283Call) -> Self { + Self::Log283(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log284Call) -> Self { + Self::Log284(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log285Call) -> Self { + Self::Log285(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log67Call) -> Self { + Self::Log67(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log286Call) -> Self { + Self::Log286(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log287Call) -> Self { + Self::Log287(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log288Call) -> Self { + Self::Log288(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log289Call) -> Self { + Self::Log289(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log290Call) -> Self { + Self::Log290(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log291Call) -> Self { + Self::Log291(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log292Call) -> Self { + Self::Log292(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log19Call) -> Self { + Self::Log19(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log68Call) -> Self { + Self::Log68(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log293Call) -> Self { + Self::Log293(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log294Call) -> Self { + Self::Log294(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log295Call) -> Self { + Self::Log295(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log296Call) -> Self { + Self::Log296(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log297Call) -> Self { + Self::Log297(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log69Call) -> Self { + Self::Log69(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log70Call) -> Self { + Self::Log70(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log71Call) -> Self { + Self::Log71(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log72Call) -> Self { + Self::Log72(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log298Call) -> Self { + Self::Log298(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log299Call) -> Self { + Self::Log299(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log300Call) -> Self { + Self::Log300(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log301Call) -> Self { + Self::Log301(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log302Call) -> Self { + Self::Log302(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log73Call) -> Self { + Self::Log73(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log303Call) -> Self { + Self::Log303(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log304Call) -> Self { + Self::Log304(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log74Call) -> Self { + Self::Log74(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log75Call) -> Self { + Self::Log75(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log305Call) -> Self { + Self::Log305(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log306Call) -> Self { + Self::Log306(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log307Call) -> Self { + Self::Log307(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log308Call) -> Self { + Self::Log308(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log309Call) -> Self { + Self::Log309(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log20Call) -> Self { + Self::Log20(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log76Call) -> Self { + Self::Log76(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log310Call) -> Self { + Self::Log310(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log311Call) -> Self { + Self::Log311(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log312Call) -> Self { + Self::Log312(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log313Call) -> Self { + Self::Log313(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log314Call) -> Self { + Self::Log314(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log77Call) -> Self { + Self::Log77(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log315Call) -> Self { + Self::Log315(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log316Call) -> Self { + Self::Log316(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log317Call) -> Self { + Self::Log317(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log78Call) -> Self { + Self::Log78(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log318Call) -> Self { + Self::Log318(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log79Call) -> Self { + Self::Log79(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log319Call) -> Self { + Self::Log319(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log320Call) -> Self { + Self::Log320(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log321Call) -> Self { + Self::Log321(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log322Call) -> Self { + Self::Log322(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log323Call) -> Self { + Self::Log323(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log324Call) -> Self { + Self::Log324(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log80Call) -> Self { + Self::Log80(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log325Call) -> Self { + Self::Log325(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log326Call) -> Self { + Self::Log326(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log81Call) -> Self { + Self::Log81(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log327Call) -> Self { + Self::Log327(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log328Call) -> Self { + Self::Log328(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log329Call) -> Self { + Self::Log329(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log330Call) -> Self { + Self::Log330(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log331Call) -> Self { + Self::Log331(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log82Call) -> Self { + Self::Log82(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log83Call) -> Self { + Self::Log83(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log84Call) -> Self { + Self::Log84(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log332Call) -> Self { + Self::Log332(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log333Call) -> Self { + Self::Log333(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log334Call) -> Self { + Self::Log334(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log21Call) -> Self { + Self::Log21(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log335Call) -> Self { + Self::Log335(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log336Call) -> Self { + Self::Log336(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log4Call) -> Self { + Self::Log4(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log337Call) -> Self { + Self::Log337(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log338Call) -> Self { + Self::Log338(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log339Call) -> Self { + Self::Log339(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log85Call) -> Self { + Self::Log85(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log340Call) -> Self { + Self::Log340(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log86Call) -> Self { + Self::Log86(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log341Call) -> Self { + Self::Log341(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log342Call) -> Self { + Self::Log342(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log5Call) -> Self { + Self::Log5(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: Log22Call) -> Self { + Self::Log22(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: LogAddressCall) -> Self { + Self::LogAddress(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: LogBoolCall) -> Self { + Self::LogBool(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: LogBytesCall) -> Self { + Self::LogBytes(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: LogBytes1Call) -> Self { + Self::LogBytes1(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: LogBytes10Call) -> Self { + Self::LogBytes10(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: LogBytes11Call) -> Self { + Self::LogBytes11(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: LogBytes12Call) -> Self { + Self::LogBytes12(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: LogBytes13Call) -> Self { + Self::LogBytes13(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: LogBytes14Call) -> Self { + Self::LogBytes14(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: LogBytes15Call) -> Self { + Self::LogBytes15(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: LogBytes16Call) -> Self { + Self::LogBytes16(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: LogBytes17Call) -> Self { + Self::LogBytes17(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: LogBytes18Call) -> Self { + Self::LogBytes18(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: LogBytes19Call) -> Self { + Self::LogBytes19(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: LogBytes2Call) -> Self { + Self::LogBytes2(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: LogBytes20Call) -> Self { + Self::LogBytes20(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: LogBytes21Call) -> Self { + Self::LogBytes21(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: LogBytes22Call) -> Self { + Self::LogBytes22(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: LogBytes23Call) -> Self { + Self::LogBytes23(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: LogBytes24Call) -> Self { + Self::LogBytes24(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: LogBytes25Call) -> Self { + Self::LogBytes25(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: LogBytes26Call) -> Self { + Self::LogBytes26(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: LogBytes27Call) -> Self { + Self::LogBytes27(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: LogBytes28Call) -> Self { + Self::LogBytes28(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: LogBytes29Call) -> Self { + Self::LogBytes29(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: LogBytes3Call) -> Self { + Self::LogBytes3(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: LogBytes30Call) -> Self { + Self::LogBytes30(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: LogBytes31Call) -> Self { + Self::LogBytes31(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: LogBytes32Call) -> Self { + Self::LogBytes32(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: LogBytes4Call) -> Self { + Self::LogBytes4(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: LogBytes5Call) -> Self { + Self::LogBytes5(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: LogBytes6Call) -> Self { + Self::LogBytes6(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: LogBytes7Call) -> Self { + Self::LogBytes7(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: LogBytes8Call) -> Self { + Self::LogBytes8(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: LogBytes9Call) -> Self { + Self::LogBytes9(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: LogIntCall) -> Self { + Self::LogInt(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: LogStringCall) -> Self { + Self::LogString(value) + } + } + impl ::core::convert::From for HardhatConsoleCalls { + fn from(value: LogUintCall) -> Self { + Self::LogUint(value) + } + } +} diff --git a/arbiter-core/src/console/mod.rs b/arbiter-core/src/console/mod.rs new file mode 100644 index 000000000..70dcb5552 --- /dev/null +++ b/arbiter-core/src/console/mod.rs @@ -0,0 +1,32 @@ +//! This module contains the backend for the `console2.log` Solidity function so +//! that these logs can be read in Arbiter. + +use revm_primitives::address; + +use super::*; + +const CONSOLE_ADDRESS: Address = address!("000000000000000000636F6e736F6c652e6c6f67"); + +#[allow(clippy::all)] +#[rustfmt::skip] +#[allow(missing_docs)] +pub(crate) mod abi; + +/// An inspector that collects `console2.log`s during execution. +#[derive(Debug, Clone, Default)] +pub struct ConsoleLogs(pub Vec); + +impl Inspector for ConsoleLogs { + #[inline] + fn call( + &mut self, + _context: &mut EvmContext, + call: &mut CallInputs, + _return_memory_offset: Range, + ) -> Option { + if call.contract == CONSOLE_ADDRESS { + self.0.push(call.input.clone()); + } + None + } +} diff --git a/arbiter-core/src/coprocessor.rs b/arbiter-core/src/coprocessor.rs index 42ea4f5a5..2686d60b9 100644 --- a/arbiter-core/src/coprocessor.rs +++ b/arbiter-core/src/coprocessor.rs @@ -1,46 +1,35 @@ -//! The `Coprocessor` is used to process calls and can access read-only from the -//! `Environment`'s database. The `Coprocessor` will stay up to date with the -//! latest state of the `Environment`'s database. +//! The [`Coprocessor`] is used to process calls and can access read-only from +//! the [`Environment`]'s database while staying up to date with the +//! latest state of the [`Environment`]'s database. use std::convert::Infallible; -use revm::EVM; use revm_primitives::{EVMError, ResultAndState}; -use crate::{database::ArbiterDB, environment::Environment}; +use super::*; +use crate::environment::Environment; -// TODO: I have not tested that the coprocessor actually maintains state parity -// with the environment. At the moment, it is only able to be constructed and -// can certainly act as a read-only EVM. - -/// A `Coprocessor` is used to process calls and can access read-only from the -/// `Environment`'s database. This can eventually be used for things like +/// A [`Coprocessor`] is used to process calls and can access read-only from the +/// [`Environment`]'s database. This can eventually be used for things like /// parallelized compute for agents that are not currently sending transactions -/// that need to be processed by the `Environment`, but are instead using the +/// that need to be processed by the [`Environment`], but are instead using the /// current state to make decisions. -pub struct Coprocessor { - evm: EVM, +pub struct Coprocessor<'a> { + evm: Evm<'a, (), ArbiterDB>, } -impl Coprocessor { +impl<'a> Coprocessor<'a> { /// Create a new `Coprocessor` with the given `Environment`. pub fn new(environment: &Environment) -> Self { - let db = ArbiterDB( - environment - .db - .as_ref() - .unwrap_or(&ArbiterDB::new()) - .0 - .clone(), - ); - let mut evm = EVM::new(); - evm.database(db); + let db = environment.db.clone(); + let evm = Evm::builder().with_db(db).build(); Self { evm } } + // TODO: Should probably take in a TxEnv or something. /// Used as an entrypoint to process a call with the `Coprocessor`. - pub fn transact_ref(&self) -> Result> { - self.evm.transact_ref() + pub fn transact(&mut self) -> Result> { + self.evm.transact() } } @@ -49,14 +38,13 @@ mod tests { use revm_primitives::{InvalidTransaction, U256}; use super::*; - use crate::environment::builder::EnvironmentBuilder; #[test] fn coprocessor() { - let environment = EnvironmentBuilder::new().build(); + let environment = Environment::builder().build(); let mut coprocessor = Coprocessor::new(&environment); - coprocessor.evm.env.tx.value = U256::from(100); - let outcome = coprocessor.transact_ref(); + coprocessor.evm.tx_mut().value = U256::from(100); + let outcome = coprocessor.transact(); if let Err(EVMError::Transaction(InvalidTransaction::LackOfFundForMaxFee { fee, balance, diff --git a/arbiter-core/src/data_collection.rs b/arbiter-core/src/data_collection.rs index e659b3b9a..cabe4924e 100644 --- a/arbiter-core/src/data_collection.rs +++ b/arbiter-core/src/data_collection.rs @@ -18,10 +18,7 @@ //! * `E` - Type that implements the `EthLogDecode`, `Debug`, `Serialize` //! traits, and has a static lifetime. -use std::{ - collections::BTreeMap, fmt::Debug, io::BufWriter, marker::PhantomData, mem::transmute, - sync::Arc, -}; +use std::{io::BufWriter, marker::PhantomData, mem::transmute}; use ethers::{ abi::RawLog, @@ -41,10 +38,7 @@ use serde_json::Value; use tokio::{sync::broadcast::Receiver as BroadcastReceiver, task::JoinHandle}; use super::*; -use crate::{ - environment::Broadcast, - middleware::{cast::revm_logs_to_ethers_logs, errors::RevmMiddlewareError, RevmMiddleware}, -}; +use crate::middleware::{connection::revm_logs_to_ethers_logs, ArbiterMiddleware}; pub(crate) type FilterDecoder = BTreeMap String + Send + Sync>)>; @@ -65,13 +59,24 @@ pub(crate) type FilterDecoder = pub struct EventLogger { decoder: FilterDecoder, receiver: Option>, - // shutdown_sender: Option>, output_file_type: Option, directory: Option, file_name: Option, metadata: Option, } +impl Debug for EventLogger { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + f.debug_struct("EventLogger") + .field("receiver", &self.receiver) + .field("output_file_type", &self.output_file_type) + .field("directory", &self.directory) + .field("file_name", &self.file_name) + .field("metadata", &self.metadata) + .finish() + } +} + /// `OutputFileType` is an enumeration that represents the different types of /// file formats that the `EventLogger` can output to. #[derive(Debug, Clone, Copy, Serialize)] @@ -122,13 +127,13 @@ impl EventLogger { /// The `EventLogger` instance with the added event. pub fn add, D: EthLogDecode + Debug + Serialize + 'static>( mut self, - event: Event, RevmMiddleware, D>, + event: Event, ArbiterMiddleware, D>, name: S, ) -> Self { let name = name.into(); // Grab the connection from the client and add a new event sender so that we // have a distinct channel to now receive events over - let event_transmuted: EventTransmuted, RevmMiddleware, D> = + let event_transmuted: EventTransmuted, ArbiterMiddleware, D> = unsafe { transmute(event) }; let middleware = event_transmuted.provider.clone(); let decoder = |x: &_| serde_json::to_string(&D::decode_log(x).unwrap()).unwrap(); @@ -150,14 +155,10 @@ impl EventLogger { /// not stored. pub fn add_stream( self, - event: Event, RevmMiddleware, D>, + event: Event, ArbiterMiddleware, D>, ) -> Self { let mut hasher = Sha256::new(); - hasher.update( - serde_json::to_string(&event.filter) - .map_err(RevmMiddlewareError::Json) - .unwrap(), - ); + hasher.update(serde_json::to_string(&event.filter).unwrap()); let hash = hasher.finalize(); let id = hex::encode(hash); self.add(event, id) @@ -246,7 +247,7 @@ impl EventLogger { /// /// This function will return an error if there is a problem creating the /// directories or files, or writing to the files. - pub fn run(self) -> Result, RevmMiddlewareError> { + pub fn run(self) -> Result, ArbiterCoreError> { let mut receiver = self.receiver.unwrap(); let dir = self.directory.unwrap_or("./data".into()); let file_name = self.file_name.unwrap_or("output".into()); diff --git a/arbiter-core/src/environment/fork.rs b/arbiter-core/src/database/fork.rs similarity index 82% rename from arbiter-core/src/environment/fork.rs rename to arbiter-core/src/database/fork.rs index cdcbc2210..b68813109 100644 --- a/arbiter-core/src/environment/fork.rs +++ b/arbiter-core/src/database/fork.rs @@ -4,9 +4,7 @@ //! that the [`Environment`] can be initialized with a forked database and the //! end-user still has access to the relevant metadata. -use std::{collections::HashMap, env, fs}; - -use ethers::types::Address; +use std::{env, fs}; use super::*; @@ -15,7 +13,7 @@ use super::*; #[derive(Clone, Debug, Deserialize, Serialize)] pub struct ContractMetadata { /// The address of the contract. - pub address: Address, + pub address: eAddress, /// The path to the contract artifacts. pub artifacts_path: String, @@ -27,8 +25,8 @@ pub struct ContractMetadata { /// A [`Fork`] is used to store the data that will be loaded into an /// [`Environment`] and be used in `arbiter-core`. It is a wrapper around a /// [`CacheDB`] and a [`HashMap`] of [`ContractMetadata`] so that the -/// [`Environment`] can be initialized with the data and the end-user still has -/// access to the relevant metadata. +/// [`environment::Environment`] can be initialized with the data and the +/// end-user still has access to the relevant metadata. #[derive(Clone, Debug)] pub struct Fork { /// The [`CacheDB`] that will be loaded into the [`Environment`]. @@ -38,16 +36,16 @@ pub struct Fork { /// end-user. pub contracts_meta: HashMap, /// The [`HashMap`] of [`Address`] that will be used by the end-user. - pub eoa: HashMap, + pub eoa: HashMap, } impl Fork { /// Creates a new [`Fork`] from serialized [`DiskData`] stored on disk. - pub fn from_disk(path: &str) -> Result { + pub fn from_disk(path: &str) -> Result { // Read the file let mut cwd = env::current_dir().unwrap(); cwd.push(path); - info!("Reading db from: {:?}", cwd); + print!("Reading db from: {:?}", cwd); let data = fs::read_to_string(cwd).unwrap(); // Deserialize the JSON data to your OutputData type @@ -66,8 +64,8 @@ impl Fork { // Insert storage data into the DB for (key_str, value_str) in storage_map { - let key = revm::primitives::U256::from_str_radix(&key_str, 10).unwrap(); - let value = revm::primitives::U256::from_str_radix(&value_str, 10).unwrap(); + let key = U256::from_str_radix(&key_str, 10).unwrap(); + let value = U256::from_str_radix(&value_str, 10).unwrap(); db.insert_account_storage(address, key, value).unwrap(); } @@ -98,8 +96,8 @@ pub struct DiskData { pub meta: HashMap, /// This is the raw data that will be loaded into the [`Fork`]. - pub raw: HashMap, + pub raw: HashMap, /// This is the eoa data that will be loaded into the [`Fork`]. - pub externally_owned_accounts: HashMap, + pub externally_owned_accounts: HashMap, } diff --git a/arbiter-core/src/database/inspector.rs b/arbiter-core/src/database/inspector.rs new file mode 100644 index 000000000..51f80e17f --- /dev/null +++ b/arbiter-core/src/database/inspector.rs @@ -0,0 +1,97 @@ +//! This module contains an extensible [`Inspector`] called +//! [`ArbiterInspector`]. It is currently configurable in order to allow +//! for users to set configuration to see logs generated in Solidity contracts +//! and or enforce gas payment. + +use revm::{ + inspectors::GasInspector, + interpreter::{CreateInputs, CreateOutcome, Interpreter}, +}; + +use super::*; +use crate::console::ConsoleLogs; + +/// An configurable [`Inspector`] that collects information about the +/// execution of the [`Interpreter`]. Depending on whether which or both +/// features are enabled, it collects information about the gas used by each +/// opcode and the `console2.log`s emitted during execution. It ensures gas +/// payments are made when `gas` is enabled. +#[derive(Debug, Clone)] +pub struct ArbiterInspector { + /// Whether to collect `console2.log`s. + pub console_log: Option, + + /// Whether to collect gas usage information. + pub gas: Option, +} + +impl ArbiterInspector { + /// Create a new [`ArbiterInspector`] with the given configuration. + pub fn new(console_log: bool, gas: bool) -> Self { + let console_log = if console_log { + Some(ConsoleLogs::default()) + } else { + None + }; + let gas = if gas { + Some(GasInspector::default()) + } else { + None + }; + Self { console_log, gas } + } +} + +impl Inspector for ArbiterInspector { + #[inline] + fn initialize_interp(&mut self, interp: &mut Interpreter, context: &mut EvmContext) { + if let Some(gas) = &mut self.gas { + gas.initialize_interp(interp, context); + } + } + + #[inline] + fn step_end(&mut self, interp: &mut Interpreter, context: &mut EvmContext) { + if let Some(gas) = &mut self.gas { + gas.step_end(interp, context); + } + } + + #[inline] + fn call( + &mut self, + context: &mut EvmContext, + inputs: &mut CallInputs, + return_memory_offset: Range, + ) -> Option { + if let Some(console_log) = &mut self.console_log { + console_log.call(context, inputs, return_memory_offset) + } else { + None + } + } + + #[inline] + fn call_end( + &mut self, + context: &mut EvmContext, + inputs: &CallInputs, + outcome: CallOutcome, + ) -> CallOutcome { + if let Some(gas) = &mut self.gas { + gas.call_end(context, inputs, outcome) + } else { + outcome + } + } + + #[inline] + fn create_end( + &mut self, + _context: &mut EvmContext, + _inputs: &CreateInputs, + outcome: CreateOutcome, + ) -> CreateOutcome { + outcome + } +} diff --git a/arbiter-core/src/database.rs b/arbiter-core/src/database/mod.rs similarity index 91% rename from arbiter-core/src/database.rs rename to arbiter-core/src/database/mod.rs index 423e6f428..10e9ab1ab 100644 --- a/arbiter-core/src/database.rs +++ b/arbiter-core/src/database/mod.rs @@ -1,30 +1,31 @@ -//! The `ArbiterDB` is a wrapper around a `CacheDB` that is used to provide +//! The [`ArbiterDB`] is a wrapper around a `CacheDB` that is used to provide //! access to the `Environment`'s database to multiple `Coprocessors`. //! It is also used to be able to write out the `Environment` database to a //! file. +//! +//! Further, it gives the ability to be generated from a [`fork::Fork`] so that +//! you can preload an [`environment::Environment`] with a specific state. use std::{ - collections::BTreeMap, - convert::Infallible, - fmt::Debug, fs, io::{self, Read, Write}, - sync::{Arc, RwLock}, }; use revm::{ - db::{CacheDB, EmptyDB}, - primitives::{AccountInfo, B256, U256}, - Database, DatabaseCommit, + primitives::{db::DatabaseRef, keccak256, Bytecode, B256}, + DatabaseCommit, }; -use revm_primitives::{db::DatabaseRef, keccak256, Address, Bytecode, Bytes}; -use serde::{Deserialize, Serialize}; use serde_json; -/// A `ArbiterDB` is a wrapper around a `CacheDB` that is used to provide -/// access to the `Environment`'s database to multiple `Coprocessors`. +use super::*; +pub mod fork; +pub mod inspector; + +/// A [`ArbiterDB`] is a wrapper around a [`CacheDB`] that is used to provide +/// access to the [`environment::Environment`]'s database to multiple +/// [`coprocessor::Coprocessor`]s. #[derive(Clone, Debug, Serialize, Deserialize)] -pub struct ArbiterDB(pub(crate) Arc>>); +pub struct ArbiterDB(pub Arc>>); impl ArbiterDB { /// Create a new `ArbiterDB`. @@ -227,7 +228,7 @@ mod tests { assert_eq!(account_a.info.nonce, 1234); assert_eq!(account_a.info.balance, U256::from(0xfacade)); assert_eq!(account_a.info.code, None); - assert_eq!(account_a.info.code_hash, keccak256(&[])); + assert_eq!(account_a.info.code_hash, keccak256([])); let account_b = db .load_account(address!("0000000000000000000000000000000000000001")) diff --git a/arbiter-core/src/environment/builder.rs b/arbiter-core/src/environment/builder.rs deleted file mode 100644 index 044483b1d..000000000 --- a/arbiter-core/src/environment/builder.rs +++ /dev/null @@ -1,217 +0,0 @@ -//! This module provides all the necessary structures for creating an -//! [`Environment`]. This includes the [`EnvironmentBuilder`] and -//! [`EnvironmentParameters`] structures as well as the [`BlockSettings`] and -//! [`GasSettings`] enums. - -use super::*; - -/// Parameters necessary for creating or modifying an `Environment`. -/// -/// This structure holds configuration details or other parameters that might -/// be required when instantiating or updating an `Environment`. -#[derive(Clone, Debug, Deserialize, Serialize, Default)] -pub struct EnvironmentParameters { - /// A label for the [`Environment`]. - /// Can be used to be able to organize, track progress, and - /// post-process results. - pub label: Option, - - /// The type of block that will be used to step forward the [`EVM`]. - /// This can either be a [`BlockSettings::UserControlled`] or a - /// [`BlockSettings::RandomlySampled`]. - /// The former will allow the end user to control the block number from - /// their own external API and the latter will allow the end user to set - /// a rate parameter and seed for a Poisson distribution that will be - /// used to sample the amount of transactions per block. - pub block_settings: BlockSettings, - - /// The gas settings for the [`Environment`]. - /// This can either be [`GasSettings::UserControlled`], - /// [`GasSettings::RandomlySampled`], or [`GasSettings::Constant`]. - /// The first will allow the end user to control the gas price from - /// their own external API (not yet implemented) and the second will allow - /// the end user to set a multiplier for the gas price that will be used - /// to sample the amount of transactions per block. The last will allow - /// the end user to set a constant gas price for all transactions. - /// By default, [`GasSettings::UserControlled`] begins with a gas price of - /// 0. - pub gas_settings: GasSettings, -} - -/// A builder for creating an `Environment`. -/// -/// This builder allows for the configuration of an `Environment` before it is -/// instantiated. It provides methods for setting the label, block settings, and -/// gas settings of the `Environment`. -#[derive(Clone, Debug)] -pub struct EnvironmentBuilder { - /// An optional label for the `Environment`. - /// It is also used for organizing, tracking progress, and post-processing - /// results. - pub label: Option, - - /// The type of block that will be used to step forward the [`EVM`]. - /// This can either be a [`BlockSettings::UserControlled`] or a - /// [`BlockSettings::RandomlySampled`]. - /// The former allows the end user to control the block number from - /// their own external API and the latter allows the end user to set - /// a rate parameter and seed for a Poisson distribution that will be - /// used to sample the amount of transactions per block. - pub block_settings: BlockSettings, - - /// The gas settings for the `Environment`. - /// This can either be [`GasSettings::UserControlled`], - /// [`GasSettings::RandomlySampled`], or [`GasSettings::Constant`]. - /// The first allows the end user to control the gas price from - /// their own external API (not yet implemented) and the second allows - /// the end user to set a multiplier for the gas price that will be used - /// to sample the amount of transactions per block. The last allows - /// the end user to set a constant gas price for all transactions. - /// By default, [`GasSettings::UserControlled`] begins with a gas price of - /// 0. - pub gas_settings: GasSettings, - - /// The database to be loaded into the `Environment`. - /// This can come from a [`fork::Fork`] or otherwise. - pub db: Option>, -} - -/// The `EnvironmentBuilder` is a builder pattern for creating an -/// [`Environment`]. It allows for the configuration of the [`Environment`] -/// before it is created. -impl EnvironmentBuilder { - /// Creates a new `EnvironmentBuilder` with default settings. - /// By default, the `block_settings` and `gas_settings` are set to - /// `UserControlled`. - #[allow(clippy::new_without_default)] - pub fn new() -> Self { - debug!("Initialized new environment -- all user controlled"); - Self { - label: None, - block_settings: BlockSettings::UserControlled, - gas_settings: GasSettings::UserControlled, - db: None, - } - } - - /// Sets the `block_settings` for the `EnvironmentBuilder`. - /// This determines how the block number and timestamp are controlled in the - /// [`Environment`]. - pub fn block_settings(mut self, block_settings: BlockSettings) -> Self { - debug!( - "Environment now set with: 'block_settings=={:?}", - block_settings - ); - self.block_settings = block_settings; - self - } - - /// Sets the `gas_settings` for the `EnvironmentBuilder`. - /// This determines how the gas price is controlled in the [`Environment`]. - pub fn gas_settings(mut self, gas_settings: GasSettings) -> Self { - debug!( - "Environment now set with: 'gas_settings=={:?}", - gas_settings - ); - self.gas_settings = gas_settings; - self - } - - /// Sets the `label` for the `EnvironmentBuilder`. - /// This is an optional string that can be used to identify the - /// [`Environment`]. - pub fn label(mut self, label: impl Into) -> Self { - let label = label.into(); - debug!("Environment now labeled as: {:?}", label); - self.label = Some(label); - self - } - - /// Sets the `db` for the `EnvironmentBuilder`. - /// This is an optional [`fork::Fork`] that can be loaded into the - /// [`Environment`]. - pub fn db(mut self, db: impl Into>) -> Self { - debug!("Environment initialized with an external DB"); - self.db = Some(db.into()); - self - } - - /// Builds the `Environment` from the `EnvironmentBuilder`. - /// This consumes the `EnvironmentBuilder` and returns an [`Environment`]. - pub fn build(self) -> Environment { - let parameters = EnvironmentParameters { - label: self.label, - block_settings: self.block_settings, - gas_settings: self.gas_settings, - }; - let mut env = Environment::new(parameters, self.db); - env.run(); - info!("Environment built and running!"); - env - } -} - -/// Provides a means of deciding how the block number of the [`EVM`] will be -/// chosen. -/// This can either be a [`BlockSettings::UserControlled`] or a -/// [`BlockSettings::RandomlySampled`]. -/// The former will allow the end user to control the block number from -/// their own external API and the latter will allow the end user to set -/// a rate parameter and seed for a Poisson distribution that will be -/// used to sample the amount of transactions per block. -#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)] -pub enum BlockSettings { - /// The block number will be controlled by the end user. - #[default] - UserControlled, - - /// The block number will be sampled from a Poisson distribution. - /// A seeded Poisson distribution that is sampled from in order to determine - /// the average block size. [`SeededPoisson`] is created with a seed in - /// order to have repeatable simulations. - RandomlySampled { - /// The mean of the rate at which the environment will - /// process blocks (e.g., the rate parameter in the Poisson distribution - /// used in the [`SeededPoisson`] field of an [`Environment`]). - block_rate: f64, - - /// The amount of time the block timestamp will increase for each new - /// block. - block_time: u32, - - /// A value chosen to generate randomly chosen block sizes - /// for the environment. - seed: u64, - }, -} - -/// Provides a means of deciding how the gas price of the -/// [`EVM`] will be chosen. -/// This can either be a [`GasSettings::UserControlled`], -/// [`GasSettings::RandomlySampled`], or [`GasSettings::None`]. -/// The former will allow the end user to control the gas price from -/// their own external API and the latter will allow the end user to set -/// a constant gas price. -#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)] -pub enum GasSettings { - /// The gas limit will be controlled by the end user. - /// In the future, Foundry cheatcodes will be used to control gas - /// on-the-fly. - #[default] - UserControlled, - - /// The gas price will depend on the number of transactions in the block. - /// The user *must* set the [`BlockSettings`] to - /// [`BlockSettings::RandomlySampled`]. We determine the gas price by - /// multiplying the number of transactions in the block by the - /// multiplier which represents paying higher fees for a more congested - /// network. - RandomlySampled { - /// Multiplies the number of transactions in the block to determine the - /// gas price. - multiplier: f64, - }, - - /// The gas price will be a constant value from the inner value. - Constant(u128), -} diff --git a/arbiter-core/src/environment/cheatcodes.rs b/arbiter-core/src/environment/cheatcodes.rs deleted file mode 100644 index 7967c722e..000000000 --- a/arbiter-core/src/environment/cheatcodes.rs +++ /dev/null @@ -1,85 +0,0 @@ -//! Cheatcodes are a direct way to access the underlying [`EVM`] environment -// and database. ! Use them via the `apply_cheatcode` method on a `client`. - -use revm_primitives::{AccountInfo, HashMap, U256}; - -/// Cheatcodes are a direct way to access the underlying [`EVM`] environment and -/// database. -#[derive(Clone, Debug, PartialEq, Eq, serde::Serialize, serde::Deserialize)] -pub enum Cheatcodes { - /// A `Deal` is used to increase the balance of an account in the [`EVM`]. - Deal { - /// The address of the account to increase the balance of. - address: ethers::types::Address, - - /// The amount to increase the balance of the account by. - amount: ethers::types::U256, - }, - /// Fetches the value of a storage slot of an account. - Load { - /// The address of the account to fetch the storage slot from. - account: ethers::types::Address, - /// The storage slot to fetch. - key: ethers::types::H256, - /// The block to fetch the storage slot from. - /// todo: implement storage slots at blocks. - block: Option, - }, - /// Overwrites a storage slot of an account. - /// TODO: for more complicated data types, like structs, there's more work - /// to do. - Store { - /// The address of the account to overwrite the storage slot of. - account: ethers::types::Address, - /// The storage slot to overwrite. - key: ethers::types::H256, - /// The value to overwrite the storage slot with. - value: ethers::types::H256, - }, - /// Fetches the `DbAccount` account at the given address. - Access { - /// The address of the account to fetch. - address: ethers::types::Address, - }, -} - -/// Wrapper around [`AccountState`] that can be serialized and deserialized. -#[derive(Debug, Clone, Default, Eq, PartialEq, serde::Serialize, serde::Deserialize)] -pub enum AccountStateSerializable { - /// Before Spurious Dragon hardfork there was a difference between empty and - /// not existing. And we are flagging it here. - NotExisting, - /// EVM touched this account. For newer hardfork this means it can be - /// cleared/removed from state. - Touched, - /// EVM cleared storage of this account, mostly by selfdestruct, we don't - /// ask database for storage slots and assume they are U256::ZERO - StorageCleared, - /// EVM didn't interacted with this account - #[default] - None, -} - -/// Return values of applying cheatcodes. -#[derive(Clone, Debug, PartialEq, Eq, serde::Serialize, serde::Deserialize)] -pub enum CheatcodesReturn { - /// A `Load` returns the value of a storage slot of an account. - Load { - /// The value of the storage slot. - value: revm::primitives::U256, - }, - /// A `Store` returns nothing. - Store, - /// A `Deal` returns nothing. - Deal, - /// Gets the DbAccount associated with an address. - Access { - /// Basic account information like nonce, balance, code hash, bytcode. - info: AccountInfo, - /// todo: revm must be updated with serde deserialize, then `DbAccount` - /// can be used. - account_state: AccountStateSerializable, - /// Storage slots of the account. - storage: HashMap, - }, -} diff --git a/arbiter-core/src/environment/errors.rs b/arbiter-core/src/environment/errors.rs deleted file mode 100644 index a889b4ed2..000000000 --- a/arbiter-core/src/environment/errors.rs +++ /dev/null @@ -1,93 +0,0 @@ -//! Errors that can occur when managing or interfacing with Arbiter's sandboxed -//! Ethereum environment. - -use super::*; - -/// Errors that can occur when managing or interfacing with the Ethereum -/// environment. -/// -/// ## What are we trying to catch? -/// The errors here are at a fairly low level and should be quite rare (if -/// possible). Errors that come from smart contracts (e.g., reverts or halts) -/// will not be caught here and will instead carried out into the -/// [`RevmMiddleware`]. Please bring up if you catch errors here by sending a -/// message in the [Telegram group](https://t.me/arbiter_rs) or on -/// [GitHub](https://github.com/primitivefinance/arbiter/). -#[derive(Error, Debug, Clone)] -pub enum EnvironmentError { - /// [`EnvironmentError::Execution`] is thrown when the [`EVM`] itself - /// throws an error in execution. To be clear, this is not a contract - /// revert or halt, this is likely an error in `revm`. Please report - /// this type of error. - #[error("execution error! the source error is: {0:?}")] - Execution(#[from] EVMError), - - /// [`EnvironmentError::Transaction`] is thrown when a transaction fails - /// to be processed by the [`EVM`]. This could be due to a insufficient - /// funds to pay for gas, an invalid nonce, or other reasons. This error - /// can be quite common and should be handled gracefully. - #[error("transaction error! the source error is: {0:?}")] - Transaction(InvalidTransaction), - - /// [`EnvironmentError::Account`] is thrown when there is an issue handling - /// accounts in the [`EVM`]. This could be due to an account already - /// existing or other reasons. - #[error("account error! due to: {0:?}")] - Account(String), - - /// [`EnvironmentError::Stop`] is thrown when the [`Environment`] - /// fails to stop. This error could occur due to an invalid state transition - /// or other unexpected conditions. If this error is thrown, it indicates - /// a serious issue that needs to be investigated. Please report this error! - #[error("error stopping! due to: {0:?}")] - Stop(String), - - /// [`EnvironmentError::Communication`] is thrown when a channel for - /// receiving or broadcasting fails in some way. This error could happen - /// due to a channel being closed accidentally. If this is thrown, a - /// restart of the simulation and an investigation into what caused a - /// dropped channel is necessary. - #[error("error communicating! due to: {0}")] - Communication(String), - - /// [`EnvironmentError::Broadcast`] is thrown when the - /// [`EventBroadcaster`] fails to broadcast events. This should be - /// rare (if not impossible). If this is thrown, please report this error! - #[error("error broadcasting! the source error is: {0}")] - Broadcast(#[from] crossbeam_channel::SendError), - - /// [`EnvironmentError::Conversion`] is thrown when a type fails to - /// convert into another (typically a type used in `revm` versus a type used - /// in [`ethers-rs`](https://github.com/gakonst/ethers-rs)). - /// This error should be rare (if not impossible). - /// Furthermore, after a switch to [`alloy`](https://github.com/alloy-rs) - /// this will be (hopefully) unnecessary! - #[error("conversion error! the source error is: {0}")] - Conversion(String), - - /// [`EnvironmentError::NotUserControlledGasSettings`] is thrown when the - /// [`Environment`] is not in a [`GasSettings::UserControlled`] state and - /// an attempt is made to externally change the gas price. - #[error("error in the environment! attempted to set a gas price when the `GasSettings` is not `GasSettings::UserControlled`")] - NotUserControlledGasSettings, - - /// [`EnvironmentError::NotUserControlledBlockSettings`] is thrown when - /// the [`Environment`] is in a [`BlockSettings::RandomlySampled`] state and - /// an attempt is made to externally change the block number and timestamp. - #[error("error in the environment! attempted to externally change block number and timestamp when `BlockSettings` is not `BlockSettings::UserControlled`.")] - NotUserControlledBlockSettings, - - /// [`EnvironmentError::NotRandomlySampledBlockSettings`] is thrown when - /// the [`Environment`] is **not** in a [`BlockSettings::RandomlySampled`] - /// state and an attempt is made to set the gas price via a multiplier. - /// That is, the user has chosen [`GasSettings::RandomlySampled`] without - /// [`BlockSettings::RandomlySampled`]. - #[error("error in the environment! attempted to set a gas price via a multiplier when the `BlockSettings` is not `BlockSettings::RandomlySampled`.")] - NotRandomlySampledBlockSettings, - - /// [`EnvironmentError::ShutDownReceiverError`] is thrown when a malformed - /// shutdown receiver is sent to the event broadcaster. This error could - /// occur due to an invalid shutdown receiver. - #[error("error in the environment! malformed shutdown receiver sent to event broadcaster")] - ShutDownReceiverError, -} diff --git a/arbiter-core/src/environment/instruction.rs b/arbiter-core/src/environment/instruction.rs index 0adab1954..e9e159e8f 100644 --- a/arbiter-core/src/environment/instruction.rs +++ b/arbiter-core/src/environment/instruction.rs @@ -1,3 +1,7 @@ +//! This module contains the `Instruction` and `Outcome` enums that are used to +//! communicate instructions and their outcomes between the +//! [`middleware::ArbiterMiddleware`] and the [`Environment`]. + use super::*; /// [`Instruction`]s that can be sent to the [`Environment`] via the @@ -18,10 +22,10 @@ use super::*; #[derive(Debug, Clone)] pub(crate) enum Instruction { /// An `AddAccount` is used to add a default/unfunded account to the - /// [`EVM`]. + /// [`Environment`]. AddAccount { /// The address of the account to add to the [`EVM`]. - address: ethers::types::Address, + address: eAddress, /// The sender used to to send the outcome of the account addition back /// to. @@ -29,13 +33,13 @@ pub(crate) enum Instruction { }, /// A `BlockUpdate` is used to update the block number and timestamp of the - /// [`EVM`]. + /// [`Environment`]. BlockUpdate { /// The block number to update the [`EVM`] to. - block_number: U256, + block_number: eU256, /// The block timestamp to update the [`EVM`] to. - block_timestamp: U256, + block_timestamp: eU256, /// The sender used to to send the outcome of the block update back to. outcome_sender: OutcomeSender, @@ -73,7 +77,7 @@ pub(crate) enum Instruction { /// A `SetGasPrice` is used to set the gas price of the [`EVM`]. SetGasPrice { /// The gas price to set the [`EVM`] to. - gas_price: ethers::types::U256, + gas_price: eU256, /// The sender used to to send the outcome of the gas price setting back /// to. @@ -152,10 +156,11 @@ pub(crate) enum EnvironmentData { GasPrice, /// The query is for the balance of an account given by the inner `Address`. - Balance(ethers::types::Address), + Balance(eAddress), + // TODO: Rename this to `Nonce`? /// The query is for the nonce of an account given by the inner `Address`. - TransactionCount(ethers::types::Address), + TransactionCount(eAddress), } /// [`ReceiptData`] is a structure that holds the block number, transaction @@ -164,11 +169,92 @@ pub(crate) enum EnvironmentData { pub struct ReceiptData { /// `block_number` is the number of the block in which the transaction was /// included. - pub(crate) block_number: U64, + pub block_number: U64, /// `transaction_index` is the index position of the transaction in the /// block. - pub(crate) transaction_index: U64, - /// [`cumulative_gas_per_block`] is the total amount of gas used in the + pub transaction_index: U64, + /// `cumulative_gas_per_block` is the total amount of gas used in the /// block up until and including the transaction. - pub(crate) cumulative_gas_per_block: U256, + pub cumulative_gas_per_block: eU256, +} + +/// Cheatcodes are a direct way to access the underlying [`EVM`] environment and +/// database. +#[derive(Clone, Debug, PartialEq, Eq, serde::Serialize, serde::Deserialize)] +pub enum Cheatcodes { + /// A `Deal` is used to increase the balance of an account in the [`EVM`]. + Deal { + /// The address of the account to increase the balance of. + address: eAddress, + + /// The amount to increase the balance of the account by. + amount: eU256, + }, + /// Fetches the value of a storage slot of an account. + Load { + /// The address of the account to fetch the storage slot from. + account: eAddress, + /// The storage slot to fetch. + key: H256, + /// The block to fetch the storage slot from. + /// todo: implement storage slots at blocks. + block: Option, + }, + /// Overwrites a storage slot of an account. + /// TODO: for more complicated data types, like structs, there's more work + /// to do. + Store { + /// The address of the account to overwrite the storage slot of. + account: ethers::types::Address, + /// The storage slot to overwrite. + key: ethers::types::H256, + /// The value to overwrite the storage slot with. + value: ethers::types::H256, + }, + /// Fetches the `DbAccount` account at the given address. + Access { + /// The address of the account to fetch. + address: ethers::types::Address, + }, +} + +/// Wrapper around [`AccountState`] that can be serialized and deserialized. +#[derive(Debug, Clone, Default, Eq, PartialEq, serde::Serialize, serde::Deserialize)] +pub enum AccountStateSerializable { + /// Before Spurious Dragon hardfork there was a difference between empty and + /// not existing. And we are flagging it here. + NotExisting, + /// EVM touched this account. For newer hardfork this means it can be + /// cleared/removed from state. + Touched, + /// EVM cleared storage of this account, mostly by selfdestruct, we don't + /// ask database for storage slots and assume they are U256::ZERO + StorageCleared, + /// EVM didn't interacted with this account + #[default] + None, +} + +/// Return values of applying cheatcodes. +#[derive(Clone, Debug, PartialEq, Eq, serde::Serialize, serde::Deserialize)] +pub enum CheatcodesReturn { + /// A `Load` returns the value of a storage slot of an account. + Load { + /// The value of the storage slot. + value: U256, + }, + /// A `Store` returns nothing. + Store, + /// A `Deal` returns nothing. + Deal, + /// Gets the DbAccount associated with an address. + Access { + /// Basic account information like nonce, balance, code hash, bytcode. + info: AccountInfo, + /// todo: revm must be updated with serde deserialize, then `DbAccount` + /// can be used. + account_state: AccountStateSerializable, + /// Storage slots of the account. + storage: HashMap, + }, } diff --git a/arbiter-core/src/environment/mod.rs b/arbiter-core/src/environment/mod.rs index fc9b8e311..943a9ff24 100644 --- a/arbiter-core/src/environment/mod.rs +++ b/arbiter-core/src/environment/mod.rs @@ -1,76 +1,43 @@ -//! The `environment` module provides abstractions and functionality for +//! The [`environment`] module provides abstractions and functionality for //! handling the Ethereum execution environment. This includes managing its //! state, interfacing with the EVM, and broadcasting events to subscribers. +//! Other features include the ability to control block rate and gas settings +//! and execute other database modifications from external agents. //! //! The key integration for the environment is the Rust EVM [`revm`](https://github.com/bluealloy/revm). //! This is an implementation of the EVM in Rust that we utilize for processing //! raw smart contract bytecode. //! //! Core structures: -//! - `Environment`: Represents the Ethereum execution environment, allowing for -//! its management (e.g., starting, stopping) and interfacing with agents. -//! - `EnvironmentParameters`: Parameters necessary for creating or modifying -//! an `Environment`. -//! - `BlockSettings`: Enum indicating how block numbers and timestamps are -//! moved forward. -//! - `GasSettings`: Enum indicating the type of gas settings that will be -//! used to make clients pay gas. -//! - `Instruction`: Enum indicating the type of instruction that is being sent +//! - [`Environment`]: Represents the Ethereum execution environment, allowing +//! for its management (e.g., starting, stopping) and interfacing with agents. +//! - [`EnvironmentParameters`]: Parameters necessary for creating or modifying +//! an [`Environment`]. +//! - [`Instruction`]: Enum indicating the type of instruction that is being +//! sent //! to the EVM. -//! - `Outcome`: Enum indicating the type of outcome that is being sent back -//! from the EVM. -//! - `EnvironmentError`: Enum indicating the type of error that can be thrown -//! by the EVM. -//! - `State`: Enum indicating the current state of the environment. -//! - `Socket`: Provides channels for communication between the EVM and the -//! outside world. -//! - `EventBroadcaster`: Responsible for broadcasting Ethereum logs to -//! subscribers. - -use std::{ - convert::Infallible, - fmt::Debug, - sync::{Arc, Mutex, RwLock}, - thread::{self, JoinHandle}, -}; + +use std::thread::{self, JoinHandle}; use crossbeam_channel::{bounded, unbounded, Receiver, Sender}; -use ethers::core::types::U64; +use ethers::abi::AbiDecode; use revm::{ - db::{CacheDB, EmptyDB}, - primitives::{ - AccountInfo, EVMError, ExecutionResult, HashMap, InvalidTransaction, Log, TxEnv, U256, - }, - EVM, + db::AccountState, + inspector_handle_register, + primitives::{Env, HashMap, B256}, }; -use serde::{Deserialize, Serialize}; -use thiserror::Error; -use tokio::sync::broadcast::{channel, Sender as BroadcastSender}; +use tokio::sync::broadcast::channel; use super::*; #[cfg_attr(doc, doc(hidden))] #[cfg_attr(doc, allow(unused_imports))] #[cfg(doc)] -use crate::middleware::RevmMiddleware; -use crate::{database::ArbiterDB, math::SeededPoisson}; - -pub mod cheatcodes; -use cheatcodes::*; +use crate::middleware::ArbiterMiddleware; +use crate::{console::abi::HardhatConsoleCalls, database::inspector::ArbiterInspector}; -pub(crate) mod instruction; +pub mod instruction; use instruction::*; -pub mod errors; -use errors::*; - -pub mod fork; - -pub mod builder; -use builder::*; - -#[cfg(test)] -pub(crate) mod tests; - /// Alias for the sender of the channel for transmitting transactions. pub(crate) type InstructionSender = Sender; @@ -79,48 +46,35 @@ pub(crate) type InstructionReceiver = Receiver; /// Alias for the sender of the channel for transmitting [`RevmResult`] emitted /// from transactions. -pub(crate) type OutcomeSender = Sender>; +pub(crate) type OutcomeSender = Sender>; /// Alias for the receiver of the channel for transmitting [`RevmResult`] /// emitted from transactions. -pub(crate) type OutcomeReceiver = Receiver>; +pub(crate) type OutcomeReceiver = Receiver>; /// Represents a sandboxed EVM environment. /// -/// ## Communication -/// The dominant feature is the -/// [`EVM`](https://github.com/bluealloy/revm/blob/main/crates/revm/src/evm.rs) -/// and its connections to the "outside world". -/// The Ethereum Virtual Machine -/// ([`EVM`](https://github.com/bluealloy/revm/blob/main/crates/revm/src/evm.rs)) -/// which is a stack machine that processes raw smart contract bytecode and -/// updates a local database of the worldstate of an Ethereum simulation. -/// Note, the worldstate of the simulation Ethereum environment should not be -/// confused with the [`State`] of the environment here! The [`Environment`] -/// will route transactions sent over channels to the stack machine -/// [`EVM`](https://github.com/bluealloy/revm/blob/main/crates/revm/src/evm.rs) -/// to process smart contract interactions. -/// It provides channels for sending transactions to the EVM and for -/// receiving results or broadcasting events to any subscribers via the -/// `Socket` field exposed only as `pub(crate)`. -/// -/// -/// ## Controlling Block Rate -/// The blocks for the [`Environment`] are chosen using a Poisson distribution -/// via the [`SeededPoisson`] field. The idea is that we can choose a rate -/// parameter, typically denoted by the Greek letter lambda, and set this to be -/// the expected number of transactions per block while allowing blocks to be -/// built with random size. This is useful in stepping forward the -/// [`EVM`](https://github.com/bluealloy/revm/blob/main/crates/revm/src/evm.rs) -/// and being able to move time forward for contracts that depend explicitly on -/// time. +/// ## Features +/// * [`revm::Evm`] and its connections to the "outside world" (agents) via the +/// [`Socket`] provide the [`Environment`] a means to route and execute +/// transactions. +/// * [`ArbiterDB`] is the database structure used that allows for read-only +/// sharing of execution and write-only via the main thread. This can also be a +/// database read in from disk storage via [`database::fork::Fork`]. +/// * [`ArbiterInspector`] is an that allows for the EVM to be able to display +/// logs and properly handle gas payments. +/// * [`EnvironmentParameters`] are used to set the gas limit, contract size +/// limit, and label for the [`Environment`]. +#[derive(Debug)] pub struct Environment { - /// The parameters used to define the [`Environment`]. + /// The label used to define the [`Environment`]. pub parameters: EnvironmentParameters, /// The [`EVM`] that is used as an execution environment and database for /// calls and transactions. - pub(crate) db: Option, + pub(crate) db: ArbiterDB, + + inspector: Option, /// This gives a means of letting the "outside world" connect to the /// [`Environment`] so that users (or agents) may send and receive data from @@ -130,30 +84,97 @@ pub struct Environment { /// [`JoinHandle`] for the thread in which the [`EVM`] is running. /// Used for assuring that the environment is stopped properly or for /// performing any blocking action the end user needs. - pub(crate) handle: Option>>, + pub(crate) handle: Option>>, +} + +/// Parameters to create [`Environment`]s with different settings. +#[derive(Clone, Debug, Default, Deserialize, Serialize)] +pub struct EnvironmentParameters { + /// The label used to define the [`Environment`]. + pub label: Option, + + /// The gas limit for the blocks in the [`Environment`]. + pub gas_limit: Option, + + /// The contract size limit for the [`Environment`]. + pub contract_size_limit: Option, + + /// Enables inner contract logs to be printed to the console. + pub console_logs: bool, + + /// Allows for turning off any gas payments for transactions so no inspector + /// is needed. + pub pay_gas: bool, +} + +/// A builder for creating an [`Environment`]. +/// +/// This builder allows for the configuration of an [`Environment`] before it is +/// instantiated. It provides methods for setting the label, gas limit, contract +/// size limit, and a database for the [`Environment`]. +pub struct EnvironmentBuilder { + parameters: EnvironmentParameters, + db: ArbiterDB, } -/// Allow the end user to be able to access a debug printout for the -/// [`Environment`]. Note that the [`EVM`] does not implement debug display, -/// hence the implementation by hand here. -impl Debug for Environment { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - f.debug_struct("Environment") - .field("parameters", &self.parameters) - .field("socket", &self.socket) - .field("handle", &self.handle) - .finish() +impl EnvironmentBuilder { + /// Builds and runs an [`Environment`] with the parameters set in the + /// [`EnvironmentBuilder`]. + pub fn build(self) -> Environment { + Environment::create(self.parameters, self.db).run() + } + + /// Sets the label for the [`Environment`]. + pub fn with_label(mut self, label: impl Into) -> Self { + self.parameters.label = Some(label.into()); + self + } + + /// Sets the gas limit for the [`Environment`]. + pub fn with_gas_limit(mut self, gas_limit: U256) -> Self { + self.parameters.gas_limit = Some(gas_limit); + self + } + + /// Sets the contract size limit for the [`Environment`]. + pub fn with_contract_size_limit(mut self, contract_size_limit: usize) -> Self { + self.parameters.contract_size_limit = Some(contract_size_limit); + self + } + + /// Sets the database for the [`Environment`]. This can come from a + /// [`fork::Fork`]. + pub fn with_db(mut self, db: impl Into>) -> Self { + self.db = ArbiterDB(Arc::new(RwLock::new(db.into()))); + self + } + + /// Enables inner contract logs to be printed to the console as `trace` + /// level logs prepended with "Console logs: ". + pub fn with_console_logs(mut self) -> Self { + self.parameters.console_logs = true; + self + } + + /// Turns on gas payments for transactions so that the [`EVM`] will + /// automatically pay for gas and revert if balance is not met by sender. + pub fn with_pay_gas(mut self) -> Self { + self.parameters.pay_gas = true; + self } } impl Environment { - /// Privately accessible constructor function for creating an - /// [`Environment`]. This function should be accessed by the - /// [`Manager`]. - pub(crate) fn new( - environment_parameters: EnvironmentParameters, - db: Option>, - ) -> Self { + /// Creates a new [`EnvironmentBuilder`] with default parameters that can be + /// used to build an [`Environment`]. + pub fn builder() -> EnvironmentBuilder { + EnvironmentBuilder { + parameters: EnvironmentParameters::default(), + db: ArbiterDB(Arc::new(RwLock::new(CacheDB::new(EmptyDB::new())))), + } + } + + fn create(parameters: EnvironmentParameters, db: ArbiterDB) -> Self { let (instruction_sender, instruction_receiver) = unbounded(); let (event_broadcaster, _) = channel(512); let socket = Socket { @@ -161,85 +182,60 @@ impl Environment { instruction_receiver, event_broadcaster, }; - let db = db.map(|db| ArbiterDB(Arc::new(RwLock::new(db)))); + + let inspector = if parameters.console_logs || parameters.pay_gas { + Some(ArbiterInspector::new( + parameters.console_logs, + parameters.pay_gas, + )) + } else { + Some(ArbiterInspector::new(false, false)) + }; Self { - parameters: environment_parameters, - db, socket, + inspector, + parameters, + db, handle: None, } } - /// The [`EVM`] will be - /// offloaded onto a separate thread for processing. - /// Calls, transactions, and events will enter/exit through the `Socket`. - pub(crate) fn run(&mut self) { - // Initialize the EVM used - let mut evm = EVM::new(); + /// This starts the [`Environment`] thread to process any [`Instruction`]s + /// coming through the [`Socket`]. + fn run(mut self) -> Self { + // Bring in parameters for the `Environment`. + let label = self.parameters.label.clone(); - if self.db.is_some() { - evm.database(self.db.as_ref().unwrap().clone()); - } else { - evm.database(ArbiterDB(Arc::new(RwLock::new(CacheDB::new( - EmptyDB::new(), - ))))); - }; + // Bring in the EVM db by cloning the interior Arc (lightweight). + let db = self.db.clone(); - // Choose extra large code size and gas limit - evm.env.cfg.limit_contract_code_size = Some(0x100000); - evm.env.block.gas_limit = U256::MAX; + // Bring in the EVM ENV + let mut env = Env::default(); + env.cfg.limit_contract_code_size = self.parameters.contract_size_limit; + env.block.gas_limit = self.parameters.gas_limit.unwrap_or(U256::MAX); + // Bring in the inspector + let inspector = self.inspector.take().unwrap(); - // Pull clones of the relevant data prepare to send into a new thread - let label = self.parameters.label.clone(); + // Pull communication clones to move into a new thread. let instruction_receiver = self.socket.instruction_receiver.clone(); let event_broadcaster = self.socket.event_broadcaster.clone(); - let block_type = self.parameters.block_settings.clone(); - let seeded_poisson = match block_type { - BlockSettings::RandomlySampled { - block_rate, - block_time, - seed, - } => Some(Arc::new(Mutex::new(SeededPoisson::new( - block_rate, block_time, seed, - )))), - BlockSettings::UserControlled => None, - }; - let gas_settings = self.parameters.gas_settings.clone(); - // let transaction_counts = self.transaction_counts.clone(); // Move the EVM and its socket to a new thread and retrieve this handle let handle = thread::spawn(move || { - if let GasSettings::RandomlySampled { multiplier: _ } = gas_settings { - if seeded_poisson.is_none() { - return Err(EnvironmentError::NotRandomlySampledBlockSettings); - } - } - // Get the first amount of transactions per block from the distribution and set - // the initial counter. - let mut transactions_per_block = seeded_poisson - .clone() - .map(|distribution| distribution.lock().unwrap().sample()); - match gas_settings { - GasSettings::UserControlled => { - evm.env.tx.gas_price = U256::from(0); - } - GasSettings::RandomlySampled { multiplier } => { - let gas_price = (transactions_per_block - .ok_or(EnvironmentError::NotRandomlySampledBlockSettings)? - as f64) - * multiplier; - evm.env.tx.gas_price = U256::from(gas_price as u128); - } - GasSettings::Constant(gas_price) => { - evm.env.tx.gas_price = U256::from(gas_price); - } - } - let mut transaction_index: usize = 0; - let mut cumulative_gas_per_block: U256 = U256::ZERO; - - // Loop over the reception of calls/transactions sent through the socket - // The outermost check is to find what the `Environment`'s state is in + // Create a new EVM builder + let mut evm = Evm::builder() + .with_db(db) + .with_env(Box::new(env)) + .with_external_context(inspector) + .append_handler_register(inspector_handle_register) + .build(); + + // Initialize counters that are returned on some receipts. + let mut transaction_index = U64::from(0_u64); + let mut cumulative_gas_per_block = eU256::from(0); + + // Loop over the instructions sent through the socket. while let Ok(instruction) = instruction_receiver.recv() { trace!( "Instruction {:?} received by environment labeled: {:?}", @@ -251,14 +247,13 @@ impl Environment { address, outcome_sender, } => { - let db = evm.db.as_mut().unwrap(); - let recast_address = - revm::primitives::Address::from(address.as_fixed_bytes()); + let recast_address = Address::from(address.as_fixed_bytes()); let account = revm::db::DbAccount { info: AccountInfo::default(), - account_state: revm::db::AccountState::None, + account_state: AccountState::None, storage: HashMap::new(), }; + let db = &mut evm.context.evm.db; match db .0 .write() @@ -266,17 +261,9 @@ impl Environment { .accounts .insert(recast_address, account) { - None => { - outcome_sender - .send(Ok(Outcome::AddAccountCompleted)) - .map_err(|e| EnvironmentError::Communication(e.to_string()))?; - } + None => outcome_sender.send(Ok(Outcome::AddAccountCompleted))?, Some(_) => { - outcome_sender - .send(Err(EnvironmentError::Account( - "Account already exists!".to_string(), - ))) - .map_err(|e| EnvironmentError::Communication(e.to_string()))?; + outcome_sender.send(Err(ArbiterCoreError::AccountCreationError))?; } } } @@ -285,26 +272,21 @@ impl Environment { block_timestamp, outcome_sender, } => { - if block_type != BlockSettings::UserControlled { - outcome_sender - .send(Err(EnvironmentError::NotUserControlledBlockSettings)) - .map_err(|e| EnvironmentError::Communication(e.to_string()))?; - } - // Update the block number and timestamp - evm.env.block.number = block_number; - evm.env.block.timestamp = block_timestamp; - transaction_index = 0; - cumulative_gas_per_block = U256::ZERO; - + // Return the old block data in a `ReceiptData` let receipt_data = ReceiptData { - block_number: convert_uint_to_u64(evm.env.block.number).unwrap(), - transaction_index: U64::from(0), /* replace with actual - * value */ - cumulative_gas_per_block: U256::from(0), + block_number: convert_uint_to_u64(evm.block().number).unwrap(), + transaction_index, + cumulative_gas_per_block, }; - outcome_sender - .send(Ok(Outcome::BlockUpdateCompleted(receipt_data))) - .map_err(|e| EnvironmentError::Communication(e.to_string()))?; + outcome_sender.send(Ok(Outcome::BlockUpdateCompleted(receipt_data)))?; + + // Update the block number and timestamp + evm.block_mut().number = U256::from_limbs(block_number.0); + evm.block_mut().timestamp = U256::from_limbs(block_timestamp.0); + + // Reset the counters. + transaction_index = U64::from(0); + cumulative_gas_per_block = eU256::from(0); } Instruction::Cheatcode { cheatcode, @@ -315,45 +297,27 @@ impl Environment { key, block: _, } => { - // Get the underlying database. - let db = evm.db.as_mut().unwrap(); + let db = &mut evm.context.evm.db; - // Cast the ethers-rs cheatcode arguments into revm types. - let recast_address = - revm::primitives::Address::from(account.as_fixed_bytes()); - let recast_key = revm::primitives::B256::from(key.as_fixed_bytes()); + let recast_address = Address::from(account.as_fixed_bytes()); + let recast_key = B256::from(key.as_fixed_bytes()).into(); // Get the account storage value at the key in the db. match db.0.write().unwrap().accounts.get_mut(&recast_address) { Some(account) => { // Returns zero if the account is missing. - let value: revm::primitives::U256 = match account - .storage - .get::( - &recast_key.into(), - ) { + let value: U256 = match account.storage.get::(&recast_key) + { Some(value) => *value, - None => revm::primitives::U256::ZERO, + None => U256::ZERO, }; - - // Sends the revm::primitives::U256 storage value back to the - // sender via CheatcodeReturn(revm::primitives::U256). - outcome_sender - .send(Ok(Outcome::CheatcodeReturn( - CheatcodesReturn::Load { value }, - ))) - .map_err(|e| { - EnvironmentError::Communication(e.to_string()) - })?; + outcome_sender.send(Ok(Outcome::CheatcodeReturn( + CheatcodesReturn::Load { value }, + )))?; } None => { outcome_sender - .send(Err(EnvironmentError::Account( - "Account is missing!".to_string(), - ))) - .map_err(|e| { - EnvironmentError::Communication(e.to_string()) - })?; + .send(Err(ArbiterCoreError::AccountDoesNotExistError))?; } }; } @@ -363,83 +327,59 @@ impl Environment { value, } => { // Get the underlying database - let db = evm.db.as_mut().unwrap(); + let db = &mut evm.context.evm.db; - // Cast the ethers-rs types passed in the cheatcode arguments into revm - // primitive types - let recast_address = - revm::primitives::Address::from(account.as_fixed_bytes()); - let recast_key = revm::primitives::B256::from(key.as_fixed_bytes()); - let recast_value = revm::primitives::B256::from(value.as_fixed_bytes()); + let recast_address = Address::from(account.as_fixed_bytes()); + let recast_key = B256::from(key.as_fixed_bytes()); + let recast_value = B256::from(value.as_fixed_bytes()); // Mutate the db by inserting the new key-value pair into the account's - // storage and send the successful - // CheatcodeCompleted outcome. + // storage and send the successful CheatcodeCompleted outcome. match db.0.write().unwrap().accounts.get_mut(&recast_address) { Some(account) => { account .storage .insert(recast_key.into(), recast_value.into()); - outcome_sender - .send(Ok(Outcome::CheatcodeReturn(CheatcodesReturn::Store))) - .map_err(|e| { - EnvironmentError::Communication(e.to_string()) - })?; + outcome_sender.send(Ok(Outcome::CheatcodeReturn( + CheatcodesReturn::Store, + )))?; } None => { outcome_sender - .send(Err(EnvironmentError::Account( - "Account is missing!".to_string(), - ))) - .map_err(|e| { - EnvironmentError::Communication(e.to_string()) - })?; + .send(Err(ArbiterCoreError::AccountDoesNotExistError))?; } }; } Cheatcodes::Deal { address, amount } => { - let db = evm.db.as_mut().unwrap(); - let recast_address = - revm::primitives::Address::from(address.as_fixed_bytes()); + let db = &mut evm.context.evm.db; + let recast_address = Address::from(address.as_fixed_bytes()); match db.0.write().unwrap().accounts.get_mut(&recast_address) { Some(account) => { account.info.balance += U256::from_limbs(amount.0); - outcome_sender - .send(Ok(Outcome::CheatcodeReturn(CheatcodesReturn::Deal))) - .map_err(|e| { - EnvironmentError::Communication(e.to_string()) - })?; + outcome_sender.send(Ok(Outcome::CheatcodeReturn( + CheatcodesReturn::Deal, + )))?; } None => { outcome_sender - .send(Err(EnvironmentError::Account( - "Account is missing!".to_string(), - ))) - .map_err(|e| { - EnvironmentError::Communication(e.to_string()) - })?; + .send(Err(ArbiterCoreError::AccountDoesNotExistError))?; } }; } Cheatcodes::Access { address } => { - let db = evm.db.as_mut().unwrap(); - let recast_address = - revm::primitives::Address::from(address.as_fixed_bytes()); + let db = &mut evm.context.evm.db; + let recast_address = Address::from(address.as_fixed_bytes()); match db.0.write().unwrap().accounts.get(&recast_address) { Some(account) => { let account_state = match account.account_state { - revm::db::AccountState::None => { - AccountStateSerializable::None - } - revm::db::AccountState::Touched => { - AccountStateSerializable::Touched - } - revm::db::AccountState::StorageCleared => { + AccountState::None => AccountStateSerializable::None, + AccountState::Touched => AccountStateSerializable::Touched, + AccountState::StorageCleared => { AccountStateSerializable::StorageCleared } - revm::db::AccountState::NotExisting => { + AccountState::NotExisting => { AccountStateSerializable::NotExisting } }; @@ -450,50 +390,44 @@ impl Environment { storage: account.storage.clone(), }; - outcome_sender - .send(Ok(Outcome::CheatcodeReturn(account))) - .map_err(|e| { - EnvironmentError::Communication(e.to_string()) - })?; + outcome_sender.send(Ok(Outcome::CheatcodeReturn(account)))?; } None => { outcome_sender - .send(Err(EnvironmentError::Account( - "Account is missing!".to_string(), - ))) - .map_err(|e| { - EnvironmentError::Communication(e.to_string()) - })?; + .send(Err(ArbiterCoreError::AccountDoesNotExistError))?; } } } }, - // A `Call` is not state changing and will not create events. + // A `Call` is not state changing and will not create events but will create + // console logs. Instruction::Call { tx_env, outcome_sender, } => { // Set the tx_env and prepare to process it - evm.env.tx = tx_env; + *evm.tx_mut() = tx_env; + + // TODO: Is `transact()` the function we want? + let result = evm.transact()?.result; + + if let Some(console_log) = &mut evm.context.external.console_log { + console_log.0.drain(..).for_each(|log| { + trace!( + "Console logs: {:?}", + HardhatConsoleCalls::decode(log).unwrap().to_string() + ) + }); + }; - let result = evm.transact_ref()?.result; - outcome_sender - .send(Ok(Outcome::CallCompleted(result))) - .map_err(|e| EnvironmentError::Communication(e.to_string()))?; + outcome_sender.send(Ok(Outcome::CallCompleted(result)))?; } Instruction::SetGasPrice { gas_price, outcome_sender, } => { - if GasSettings::UserControlled != gas_settings { - outcome_sender - .send(Err(EnvironmentError::NotUserControlledGasSettings)) - .map_err(|e| EnvironmentError::Communication(e.to_string()))?; - } - evm.env.tx.gas_price = U256::from_limbs(gas_price.0); - outcome_sender - .send(Ok(Outcome::SetGasPriceCompleted)) - .map_err(|e| EnvironmentError::Communication(e.to_string()))?; + evm.tx_mut().gas_price = U256::from_limbs(gas_price.0); + outcome_sender.send(Ok(Outcome::SetGasPriceCompleted))?; } // A `Transaction` is state changing and will create events. @@ -502,41 +436,31 @@ impl Environment { outcome_sender, } => { // Set the tx_env and prepare to process it - evm.env.tx = tx_env; - - let execution_result = - match evm.inspect_commit(revm::inspectors::GasInspector::default()) { - Ok(result) => result, - Err(e) => { - if let EVMError::Transaction(invalid_transaction) = e { - outcome_sender - .send(Err(EnvironmentError::Transaction( - invalid_transaction, - ))) - .map_err(|e| { - EnvironmentError::Communication(e.to_string()) - })?; - continue; - } else { - outcome_sender - .send(Err(EnvironmentError::Execution(e))) - .map_err(|e| { - EnvironmentError::Communication(e.to_string()) - })?; - continue; - } - } - }; - let block_number = convert_uint_to_u64(evm.env.block.number)?; - - // increment cumulative gas per block - cumulative_gas_per_block += U256::from(execution_result.clone().gas_used()); - - // update transaction count for sender - + *evm.tx_mut() = tx_env; + + let execution_result = match evm.transact_commit() { + Ok(result) => { + if let Some(console_log) = &mut evm.context.external.console_log { + console_log.0.drain(..).for_each(|log| { + trace!( + "Console logs: {:?}", + HardhatConsoleCalls::decode(log).unwrap().to_string() + ) + }); + }; + result + } + Err(e) => { + outcome_sender.send(Err(ArbiterCoreError::EVMError(e)))?; + continue; + } + }; + cumulative_gas_per_block += + eU256::from(execution_result.clone().gas_used()); + let block_number = convert_uint_to_u64(evm.block().number)?; let receipt_data = ReceiptData { block_number, - transaction_index: transaction_index.into(), + transaction_index, cumulative_gas_per_block, }; match event_broadcaster.send(Broadcast::Event(execution_result.logs())) { @@ -547,47 +471,12 @@ impl Environment { ) } } - outcome_sender - .send(Ok(Outcome::TransactionCompleted( - execution_result, - receipt_data, - ))) - .map_err(|e| EnvironmentError::Communication(e.to_string()))?; - transaction_index += 1; - - // Check whether we need to increment the block number given the - // amount of transactions - // that have occurred on the current block and increment - // if need be and draw a new sample from the `SeededPoisson` - // distribution. Only do so if there is a distribution in the - // first place. - if transactions_per_block.is_some_and(|x| x == transaction_index) { - transaction_index = 0; - evm.env.block.number += U256::from(1); - - // This unwrap cannot fail. - let seeded_poisson_clone = seeded_poisson.clone().unwrap(); - let mut seeded_poisson_lock = seeded_poisson_clone.lock().unwrap(); - - evm.env.block.timestamp += U256::from(seeded_poisson_lock.time_step); - transactions_per_block = loop { - let sample = Some(seeded_poisson_lock.sample()); - - if sample == Some(0) { - evm.env.block.number += U256::from(1); - continue; - } else { - break sample; - } - }; - if let GasSettings::RandomlySampled { multiplier } = gas_settings { - let gas_price = (transactions_per_block - .ok_or(EnvironmentError::NotRandomlySampledBlockSettings)? - as f64) - * multiplier; - evm.env.tx.gas_price = U256::from(gas_price as u128); - }; - } + outcome_sender.send(Ok(Outcome::TransactionCompleted( + execution_result, + receipt_data, + )))?; + + transaction_index += U64::from(1); } Instruction::Query { environment_data, @@ -595,56 +484,48 @@ impl Environment { } => { let outcome = match environment_data { EnvironmentData::BlockNumber => { - Ok(Outcome::QueryReturn(evm.env.block.number.to_string())) + Ok(Outcome::QueryReturn(evm.block().number.to_string())) } EnvironmentData::BlockTimestamp => { - Ok(Outcome::QueryReturn(evm.env.block.timestamp.to_string())) + Ok(Outcome::QueryReturn(evm.block().timestamp.to_string())) } EnvironmentData::GasPrice => { - Ok(Outcome::QueryReturn(evm.env.tx.gas_price.to_string())) + Ok(Outcome::QueryReturn(evm.tx().gas_price.to_string())) } EnvironmentData::Balance(address) => { // This unwrap should never fail. - let db = evm.db().unwrap(); + let db = &mut evm.context.evm.db; match db .0 - .write() + .read() .unwrap() .accounts - .get::( - &address.as_fixed_bytes().into(), - ) { + .get::
(&address.as_fixed_bytes().into()) + { Some(account) => { Ok(Outcome::QueryReturn(account.info.balance.to_string())) } - None => Err(EnvironmentError::Account( - "Account is missing!".to_string(), - )), + None => Err(ArbiterCoreError::AccountDoesNotExistError), } } EnvironmentData::TransactionCount(address) => { - let db = evm.db().unwrap(); + let db = &mut evm.context.evm.db; match db .0 - .write() + .read() .unwrap() .accounts - .get::( - &address.as_fixed_bytes().into(), - ) { + .get::
(&address.as_fixed_bytes().into()) + { Some(account) => { Ok(Outcome::QueryReturn(account.info.nonce.to_string())) } - None => Err(EnvironmentError::Account( - "Account is missing!".to_string(), - )), + None => Err(ArbiterCoreError::AccountDoesNotExistError), } } }; - outcome_sender - .send(outcome) - .map_err(|e| EnvironmentError::Communication(e.to_string()))?; + outcome_sender.send(outcome)?; } Instruction::Stop(outcome_sender) => { match event_broadcaster.send(Broadcast::StopSignal) { @@ -653,9 +534,8 @@ impl Environment { warn!("Stop signal was not sent to any listeners. Are there any listeners?") } } - outcome_sender - .send(Ok(Outcome::StopCompleted(evm.db.unwrap()))) - .map_err(|e| EnvironmentError::Communication(e.to_string()))?; + let (db, _) = evm.into_db_and_env_with_handler_cfg(); + outcome_sender.send(Ok(Outcome::StopCompleted(db)))?; break; } } @@ -663,35 +543,21 @@ impl Environment { Ok(()) }); self.handle = Some(handle); + self } - /// Stops the execution of the environment. - /// This cannot be recovered from! - /// - /// # Returns - /// - /// * `Ok(())` if the environment was successfully stopped or was already - /// stopped. - /// * `Err(EnvironmentError::Stop(String))` if the environment is in an - /// invalid state. - pub fn stop(mut self) -> Result, EnvironmentError> { + /// Stops the execution of the environment and returns the [`ArbiterDB`] in + /// its final state. + pub fn stop(mut self) -> Result { let (outcome_sender, outcome_receiver) = bounded(1); self.socket .instruction_sender - .send(Instruction::Stop(outcome_sender)) - .map_err(|e| { - EnvironmentError::Stop(format!( - "Stop request failed to send due to {:?}.\nIs the environment already stopped?", - e - )) - })?; - let outcome = outcome_receiver - .recv() - .map_err(|e| EnvironmentError::Communication(e.to_string()))??; + .send(Instruction::Stop(outcome_sender))?; + let outcome = outcome_receiver.recv()??; let db = match outcome { - Outcome::StopCompleted(stopped_db) => Some(stopped_db), - _ => return Err(EnvironmentError::Stop("Failed to stop environment!".into())), + Outcome::StopCompleted(stopped_db) => stopped_db, + _ => unreachable!(), }; if let Some(label) = &self.parameters.label { @@ -702,13 +568,9 @@ impl Environment { drop(self.socket.instruction_sender); self.handle .take() - .ok_or(EnvironmentError::Stop( - "failed to join the environment handle!".to_owned(), - ))? + .unwrap() .join() - .map_err(|_| { - EnvironmentError::Stop("Failed to join environment handle.".to_owned()) - })??; + .map_err(|_| ArbiterCoreError::JoinError)??; Ok(db) } } @@ -747,12 +609,51 @@ pub enum Broadcast { /// * `Ok(U64)` - The converted U64. /// Used for block number which is a U64. #[inline] -fn convert_uint_to_u64(input: U256) -> Result { +fn convert_uint_to_u64(input: U256) -> Result { let as_str = input.to_string(); match as_str.parse::() { Ok(val) => Ok(val.into()), - Err(_) => Err(EnvironmentError::Conversion( - "U256 value is too large to fit into u64".to_string(), - )), + Err(e) => Err(e)?, + } +} + +#[cfg(test)] +mod tests { + use super::*; + + pub(crate) const TEST_ENV_LABEL: &str = "test"; + const TEST_CONTRACT_SIZE_LIMIT: usize = 42069; + const TEST_GAS_LIMIT: u64 = 1_333_333_333_337; + + #[test] + fn new_with_parameters() { + let environment = Environment::builder() + .with_label(TEST_ENV_LABEL) + .with_contract_size_limit(TEST_CONTRACT_SIZE_LIMIT) + .with_gas_limit(U256::from(TEST_GAS_LIMIT)); + assert_eq!(environment.parameters.label, Some(TEST_ENV_LABEL.into())); + assert_eq!( + environment.parameters.contract_size_limit.unwrap(), + TEST_CONTRACT_SIZE_LIMIT + ); + assert_eq!( + environment.parameters.gas_limit.unwrap(), + U256::from(TEST_GAS_LIMIT) + ); + } + + #[test] + fn conversion() { + // Test with a value that fits in u64. + let input = U256::from(10000); + assert_eq!(convert_uint_to_u64(input).unwrap(), U64::from(10000)); + + // Test with a value that is exactly at the limit of u64. + let input = U256::from(u64::MAX); + assert_eq!(convert_uint_to_u64(input).unwrap(), U64::from(u64::MAX)); + + // Test with a value that exceeds the limit of u64. + let input = U256::from(u64::MAX) + U256::from(1); + assert!(convert_uint_to_u64(input).is_err()); } } diff --git a/arbiter-core/src/environment/tests.rs b/arbiter-core/src/environment/tests.rs deleted file mode 100644 index 5d494cb5e..000000000 --- a/arbiter-core/src/environment/tests.rs +++ /dev/null @@ -1,80 +0,0 @@ -use super::*; -use crate::middleware::RevmMiddleware; - -pub(crate) const TEST_ENV_LABEL: &str = "test"; - -#[test] -fn auto_start_on_build() { - let environment = EnvironmentBuilder::new().build(); - let _client = RevmMiddleware::new(&environment, Some(TEST_ENV_LABEL)).unwrap(); -} - -#[test] -fn new_with_builder() { - let environment = EnvironmentBuilder::new().build(); - assert_eq!(environment.parameters.label, None); -} -#[test] -fn new_with_builder_custom_settings() { - let environment = EnvironmentBuilder::new() - .label(TEST_ENV_LABEL) - .block_settings(BlockSettings::RandomlySampled { - block_rate: 1.0, - block_time: 12, - seed: 1, - }) - .gas_settings(GasSettings::RandomlySampled { multiplier: 1.0 }) - .build(); - assert_eq!(environment.parameters.label, Some(TEST_ENV_LABEL.into())); -} -#[test] -fn new_user_controlled() { - let params = EnvironmentParameters { - label: Some(TEST_ENV_LABEL.to_string()), - block_settings: BlockSettings::UserControlled, - gas_settings: GasSettings::UserControlled, - }; - let environment = Environment::new(params, None); - assert_eq!(environment.parameters.label, Some(TEST_ENV_LABEL.into())); -} - -#[test] -fn new_randomly_sampled() { - let block_type = BlockSettings::RandomlySampled { - block_rate: 1.0, - block_time: 12, - seed: 1, - }; - let params = EnvironmentParameters { - label: Some(TEST_ENV_LABEL.to_string()), - block_settings: block_type, - gas_settings: GasSettings::RandomlySampled { multiplier: 1.0 }, - }; - let environment = Environment::new(params, None); - assert_eq!(environment.parameters.label, Some(TEST_ENV_LABEL.into())); -} - -#[test] -fn run() { - let params = EnvironmentParameters { - label: Some(TEST_ENV_LABEL.to_string()), - block_settings: BlockSettings::UserControlled, - gas_settings: GasSettings::UserControlled, - }; - Environment::new(params, None); -} - -#[test] -fn conversion() { - // Test with a value that fits in u64. - let input = U256::from(10000); - assert_eq!(convert_uint_to_u64(input).unwrap(), U64::from(10000)); - - // Test with a value that is exactly at the limit of u64. - let input = U256::from(u64::MAX); - assert_eq!(convert_uint_to_u64(input).unwrap(), U64::from(u64::MAX)); - - // Test with a value that exceeds the limit of u64. - let input = U256::from(u64::MAX) + U256::from(1); - assert!(convert_uint_to_u64(input).is_err()); -} diff --git a/arbiter-core/src/errors.rs b/arbiter-core/src/errors.rs new file mode 100644 index 000000000..3a67728a9 --- /dev/null +++ b/arbiter-core/src/errors.rs @@ -0,0 +1,122 @@ +//! Errors that can occur when managing or interfacing with Arbiter's sandboxed +//! Ethereum environment. + +// use crossbeam_channel::SendError; +use crossbeam_channel::{RecvError, SendError}; +use ethers::{ + providers::{MiddlewareError, ProviderError}, + signers::WalletError, +}; +use revm_primitives::{EVMError, HaltReason}; +use thiserror::Error; + +use self::environment::instruction::{Instruction, Outcome}; +use super::*; + +/// The error type for `arbiter-core`. +#[derive(Error, Debug)] +pub enum ArbiterCoreError { + /// Tried to create an account that already exists. + #[error("Account already exists!")] + AccountCreationError, + + /// Tried to access an account that doesn't exist. + #[error("Account doesn't exist!")] + AccountDoesNotExistError, + + /// Tried to sign with forked EOA. + #[error("Can't sign with a forked EOA!")] + ForkedEOASignError, + + /// Failed to upgrade instruction sender in middleware. + #[error("Failed to upgrade sender to a strong reference!")] + UpgradeSenderError, + + /// Data missing when calling a transaction. + #[error("Data missing when calling a transaction!")] + MissingDataError, + + /// Invalid data used for a query request. + #[error("Invalid data used for a query request!")] + InvalidQueryError, + + /// Failed to join environment thread on stop. + #[error("Failed to join environment thread on stop!")] + JoinError, + + /// Reverted execution. + #[error("Execution failed with revert: {gas_used:?} gas used, {output:?}")] + ExecutionRevert { + /// The amount of gas used. + gas_used: u64, + /// The output bytes of the execution. + output: Vec, + }, + + /// Halted execution. + #[error("Execution failed with halt: {reason:?}, {gas_used:?} gas used")] + ExecutionHalt { + /// The halt reason. + reason: HaltReason, + /// The amount of gas used. + gas_used: u64, + }, + + /// Failed to parse integer. + #[error(transparent)] + ParseIntError(#[from] std::num::ParseIntError), + + /// Evm had a runtime error. + #[error(transparent)] + EVMError(#[from] EVMError), + + /// Provider error. + #[error(transparent)] + ProviderError(#[from] ProviderError), + + /// Wallet error. + #[error(transparent)] + WalletError(#[from] WalletError), + + /// Send error. + #[error(transparent)] + SendError( + #[from] + #[allow(private_interfaces)] + SendError, + ), + + /// Recv error. + #[error(transparent)] + RecvError(#[from] RecvError), + + /// Failed to parse integer from string. + #[error(transparent)] + FromStrRadixError(#[from] uint::FromStrRadixErr), + + /// Failed to handle json. + #[error(transparent)] + SerdeJsonError(#[from] serde_json::Error), + + /// Failed to reply to instruction. + #[error("{0}")] + ReplyError(String), +} + +impl From>> for ArbiterCoreError { + fn from(e: SendError>) -> Self { + ArbiterCoreError::ReplyError(e.to_string()) + } +} + +impl MiddlewareError for ArbiterCoreError { + type Inner = ProviderError; + + fn from_err(e: Self::Inner) -> Self { + ArbiterCoreError::from(e) + } + + fn as_inner(&self) -> Option<&Self::Inner> { + None + } +} diff --git a/arbiter-core/src/lib.rs b/arbiter-core/src/lib.rs index 04e4992a6..217cd8832 100644 --- a/arbiter-core/src/lib.rs +++ b/arbiter-core/src/lib.rs @@ -16,8 +16,6 @@ //! without associated overheads like networking latency. //! //! Key Features: -//! - **Manager Interface**: The main user entry-point that offers management of -//! different environments and agents. //! - **Environment Handling**: Detailed setup and control mechanisms for //! running the Ethereum-like blockchain environment. //! - **Middleware Implementation**: Customized middleware to reduce overhead @@ -31,13 +29,32 @@ #![warn(missing_docs)] +pub mod console; pub mod coprocessor; pub mod data_collection; pub mod database; pub mod environment; -pub mod math; +pub mod errors; pub mod middleware; -#[cfg(test)] -mod tests; +use std::{ + collections::{BTreeMap, HashMap}, + convert::Infallible, + fmt::Debug, + ops::Range, + sync::{Arc, RwLock}, +}; + +use async_trait::async_trait; +use ethers::types::{Address as eAddress, Filter, H256, U256 as eU256, U64}; +use revm::{ + db::{CacheDB, EmptyDB}, + interpreter::{CallInputs, CallOutcome}, + primitives::{AccountInfo, Address, Bytes, ExecutionResult, Log, TxEnv, U256}, + Database, Evm, EvmContext, Inspector, +}; +use serde::{Deserialize, Serialize}; +use tokio::sync::broadcast::{Receiver as BroadcastReceiver, Sender as BroadcastSender}; use tracing::{debug, error, info, trace, warn}; + +use crate::{database::ArbiterDB, environment::Broadcast, errors::ArbiterCoreError}; diff --git a/arbiter-core/src/math.rs b/arbiter-core/src/math.rs deleted file mode 100644 index 6f4908a25..000000000 --- a/arbiter-core/src/math.rs +++ /dev/null @@ -1,118 +0,0 @@ -//! `math` module provides utility functions and structures for deterministic -//! mathematical operations and conversions commonly required for smart contract -//! and blockchain operations. This includes fixed-point conversions (WAD) and -//! seeded random number generation with a Poisson distribution. -//! -//! The main feature is the [`SeededPoisson`] struct which provides seeded -//! randomness for determining block sizes in a simulation. We also re-export -//! the [`RustQuant::stochastics`] module so that the end user may retrieve -//! stochastic processes of their choosing in a simulation they build. - -#![warn(missing_docs, unsafe_code)] -use rand::{distributions::Distribution, rngs::StdRng, SeedableRng}; -use statrs::distribution::Poisson; - -/// Represents a Poisson distribution with a seeded random number generator. -/// -/// This is useful for generating deterministic random values from a Poisson -/// distribution, given the same `rate_parameter` and `seed`. -/// The Poisson distribution is used in modeling the number of events that occur -/// over a fixed amount of time. It can also be used to model queue times as -/// well. For more detail, see the -/// [Wikipedia page](https://en.wikipedia.org/wiki/Poisson_distribution). -/// You may find there that the `rate_parameter` is denoted by the Greek letter -/// lambda. -/// -/// The way we use it in `arbiter-core` is to give a random model for -/// the amount of transactions that go through a block. For instance, the larger -/// the `rate_paramater`, the more transactions we expect (on average) to fit -/// into a block. A large `rate_parameter` would represent a high-volume network -/// where lots of transactions are occurring. This could be during periods of -/// times of high market (DEX) volatility or during new NFT launches. -#[derive(Debug, Clone)] -pub struct SeededPoisson { - /// Poisson distribution. - pub distribution: Poisson, - - /// Time step for the Poisson distribution. - pub time_step: u32, - - /// Random number generator. - rng: StdRng, -} - -impl SeededPoisson { - /// Constructs a new [`SeededPoisson`] with the given `rate_parameter` - /// (average rate of events) and a seed for the random number generator. - /// - /// # Arguments - /// - /// * `rate_parameter` - The average rate of events for the Poisson - /// distribution. - /// * `seed` - The seed value for the random number generator. - /// - /// # Returns - /// - /// A new [`SeededPoisson`] instance. - /// - /// # Examples - /// - /// ``` - /// # use arbiter_core::math::SeededPoisson; - /// let poisson = SeededPoisson::new(10.0, 12, 12345); - /// ``` - pub fn new(rate_parameter: f64, time_step: u32, seed: u64) -> Self { - let distribution = Poisson::new(rate_parameter).unwrap(); - let rng = StdRng::seed_from_u64(seed); - Self { - distribution, - time_step, - rng, - } - } - - /// Samples a single value from the Poisson distribution using the seeded - /// random number generator. - /// - /// # Returns - /// - /// A random value sampled from the Poisson distribution. - /// - /// # Examples - /// - /// ``` - /// # use arbiter_core::math::SeededPoisson; - /// let mut poisson = SeededPoisson::new(10.0, 12, 12345); - /// let random_value = poisson.sample(); - /// ``` - pub fn sample(&mut self) -> usize { - self.distribution.sample(&mut self.rng) as usize - } -} - -#[cfg(test)] -mod tests { - - use super::*; - - #[test] - fn seeded_poisson() { - let mut test_dist_1 = SeededPoisson::new(10.0, 10, 321); - let mut test_dist_2 = SeededPoisson::new(10000.0, 11, 123); - let mut test_dist_3 = SeededPoisson::new(10000.0, 12, 123); - - let result_1 = test_dist_1.sample(); - let result_2 = test_dist_1.sample(); - let result_3 = test_dist_2.sample(); - let result_4 = test_dist_2.sample(); - let result_5 = test_dist_3.sample(); - let result_6 = test_dist_3.sample(); - - assert_eq!(result_1, 15); - assert_eq!(result_2, 12); - assert_eq!(result_3, 9914); - assert_eq!(result_4, 10143); - assert_eq!(result_5, result_3); - assert_eq!(result_6, result_4); - } -} diff --git a/arbiter-core/src/middleware/cast.rs b/arbiter-core/src/middleware/cast.rs deleted file mode 100644 index cd5e20bd0..000000000 --- a/arbiter-core/src/middleware/cast.rs +++ /dev/null @@ -1,53 +0,0 @@ -//! Utility functions for casting between revm and ethers-rs types. -use super::*; - -/// Converts logs from the Revm format to the Ethers format. -/// -/// This function iterates over a list of logs as they appear in the `revm` and -/// converts each log entry to the corresponding format used by the `ethers-rs` -/// library. -#[inline] -pub fn revm_logs_to_ethers_logs( - revm_logs: Vec, -) -> Vec { - let mut logs: Vec = vec![]; - for revm_log in revm_logs { - let topics = revm_log.topics.into_iter().map(recast_b256).collect(); - let log = ethers::core::types::Log { - address: ethers::core::types::H160::from(revm_log.address.into_array()), - topics, - data: ethers::core::types::Bytes::from(revm_log.data.0), - block_hash: None, - block_number: None, - transaction_hash: None, - transaction_index: None, - log_index: None, - transaction_log_index: None, - log_type: None, - removed: None, - }; - logs.push(log); - } - logs -} - -// Certainly will go away with alloy-types -/// Recast a B160 into an Address type -/// # Arguments -/// * `address` - B160 to recast. (B160) -/// # Returns -/// * `Address` - Recasted Address. -#[inline] -pub fn recast_address(address: revm::primitives::Address) -> Address { - Address::from(address.into_array()) -} - -/// Recast a B256 into an H256 type -/// # Arguments -/// * `input` - B256 to recast. (B256) -/// # Returns -/// * `H256` - Recasted H256. -#[inline] -pub fn recast_b256(input: revm::primitives::B256) -> ethers::types::H256 { - ethers::types::H256::from(input.0) -} diff --git a/arbiter-core/src/middleware/connection.rs b/arbiter-core/src/middleware/connection.rs index f4c11e95b..19e046285 100644 --- a/arbiter-core/src/middleware/connection.rs +++ b/arbiter-core/src/middleware/connection.rs @@ -1,16 +1,7 @@ //! Messengers/connections to the underlying EVM in the environment. -use std::{ - collections::HashMap, - fmt::Debug, - pin::Pin, - sync::{Arc, Weak}, -}; - -use futures_util::Stream; -use serde_json::value::RawValue; -use tokio::sync::broadcast::{Receiver as BroadcastReceiver, Sender as BroadcastSender}; - -use super::{cast::revm_logs_to_ethers_logs, *}; +use std::sync::Weak; + +use super::*; use crate::environment::{InstructionSender, OutcomeReceiver, OutcomeSender}; /// Represents a connection to the EVM contained in the corresponding @@ -221,3 +212,45 @@ pub(crate) struct FilterReceiver { /// These are filtered upon reception. pub(crate) receiver: Option>, } + +// TODO: The logs below could have the block number, transaction index, and +// maybe other fields populated. + +/// Converts logs from the Revm format to the Ethers format. +/// +/// This function iterates over a list of logs as they appear in the `revm` and +/// converts each log entry to the corresponding format used by the `ethers-rs` +/// library. +#[inline] +pub fn revm_logs_to_ethers_logs(revm_logs: Vec) -> Vec { + let mut logs: Vec = vec![]; + for revm_log in revm_logs { + let topics = revm_log.topics().iter().map(recast_b256).collect(); + let data = ethers::core::types::Bytes::from(revm_log.data.data.0); + let log = ethers::core::types::Log { + address: ethers::core::types::H160::from(revm_log.address.into_array()), + topics, + data, + block_hash: None, + block_number: None, + transaction_hash: None, + transaction_index: None, + log_index: None, + transaction_log_index: None, + log_type: None, + removed: None, + }; + logs.push(log); + } + logs +} + +/// Recast a B256 into an H256 type +/// # Arguments +/// * `input` - B256 to recast. (B256) +/// # Returns +/// * `H256` - Recasted H256. +#[inline] +pub fn recast_b256(input: &revm::primitives::B256) -> ethers::types::H256 { + ethers::types::H256::from(input.0) +} diff --git a/arbiter-core/src/middleware/errors.rs b/arbiter-core/src/middleware/errors.rs deleted file mode 100644 index bc7c1ff4e..000000000 --- a/arbiter-core/src/middleware/errors.rs +++ /dev/null @@ -1,88 +0,0 @@ -use super::*; - -/// Possible errors thrown by interacting with the revm middleware client. -/// Errors that can occur while using the [`RevmMiddleware`]. -/// These errors are likely to be more common than other errors in -/// `arbiter-core` as they can come from simple issues such as contract reverts -/// or halts. Certain errors such as [`RevmMiddlewareError::Send`], -/// [`RevmMiddlewareError::Receive`], [`RevmMiddlewareError::Conversion`], -/// [`RevmMiddlewareError::Json`], and [`RevmMiddlewareError::EventBroadcaster`] -/// are considered more worrying. If these are achieved, please feel free to -/// contact our team via the [Telegram group](https://t.me/arbiter_rs) or on -/// [GitHub](https://github.com/primitivefinance/arbiter/). -#[derive(Error, Debug)] -pub enum RevmMiddlewareError { - /// An error occurred while attempting to interact with the [`Environment`]. - #[error("an error came from the environment! due to: {0}")] - Environment(#[from] crate::environment::errors::EnvironmentError), - - /// An error occurred while attempting to interact with the provider: - /// [`Connection`]. - #[error("an error came from the provider! due to: {0}")] - Provider(#[from] ProviderError), - - /// An error occurred while attempting to send a transaction. - #[error("failed to send transaction! due to: {0}")] - Send(String), - - /// There was an issue receiving an [`ExecutionResult`], possibly from - /// another service or module. - #[error("failed to receive `ExecutionResult`! due to: {0}")] - Receive(#[from] crossbeam_channel::RecvError), - - /// There was a failure trying to obtain a lock on the [`EventBroadcaster`], - /// possibly due to concurrency issues. - #[error("failed to gain event broadcaster lock! due to: {0}")] - EventBroadcaster(String), - - /// The required data or functionality for an instruction was missing or - /// incomplete. - #[error("missing data! due to: {0}")] - MissingData(String), - - /// An error occurred during type conversion, possibly when translating - /// between domain-specific types. - #[error("failed to convert types! due to: {0}")] - Conversion(String), - - /// An error occurred while trying to serialize or deserialize JSON data. - #[error("failed to handle with JSON data! due to: {0:?}")] - Json(serde_json::Error), - - /// The execution of a transaction was reverted, indicating that the - /// transaction was not successful. - #[error("execution failed to succeed due to revert!\n gas used is: {gas_used}\n output is {output:?}")] - ExecutionRevert { - /// Provides the amount of gas used by the transaction. - gas_used: u64, - - /// Provides the output or reason why the transaction was reverted. - output: revm::primitives::Bytes, - }, - - /// The execution of a transaction halted unexpectedly. - #[error("execution failed to succeed due to halt!\n reason is: {reason:?}\n gas used is: {gas_used}")] - ExecutionHalt { - /// Provides the reason for the halt. - reason: revm::primitives::Halt, - - /// Provides the amount of gas used by the transaction. - gas_used: u64, - }, - - /// There was an error with a signature. - #[error("signature error! due to: {0}")] - Signing(String), -} - -impl MiddlewareError for RevmMiddlewareError { - type Inner = ProviderError; - - fn from_err(e: Self::Inner) -> Self { - RevmMiddlewareError::Provider(e) - } - - fn as_inner(&self) -> Option<&Self::Inner> { - None - } -} diff --git a/arbiter-core/src/middleware/mod.rs b/arbiter-core/src/middleware/mod.rs index f28718878..7e3468e23 100644 --- a/arbiter-core/src/middleware/mod.rs +++ b/arbiter-core/src/middleware/mod.rs @@ -1,23 +1,15 @@ -//! The `middleware` module provides functionality to interact with +//! The [`middleware`] module provides functionality to interact with //! Ethereum-like virtual machines. It achieves this by offering a middleware //! implementation for sending and reading transactions, as well as watching //! for events. //! //! Main components: -//! - [`RevmMiddleware`]: The core middleware implementation. -//! - [`RevmMiddlewareError`]: Error type for the middleware. +//! - [`ArbiterMiddleware`]: The core middleware implementation. //! - [`Connection`]: Handles communication with the Ethereum VM. -//! - `FilterReceiver`: Facilitates event watching based on certain filters. +//! - [`FilterReceiver`]: Facilitates event watching based on certain filters. #![warn(missing_docs)] -use std::{ - collections::HashMap, - fmt::Debug, - future::Future, - pin::Pin, - sync::{Arc, Mutex}, - time::Duration, -}; +use std::{future::Future, pin::Pin, sync::Mutex, time::Duration}; use ethers::{ abi::ethereum_types::BloomInput, @@ -29,74 +21,58 @@ use ethers::{ ProviderError, }, providers::{ - FilterKind, FilterWatcher, JsonRpcClient, Middleware, MiddlewareError, PendingTransaction, - Provider, PubsubClient, SubscriptionStream, + FilterKind, FilterWatcher, JsonRpcClient, Middleware, PendingTransaction, Provider, + PubsubClient, SubscriptionStream, }, signers::{Signer, Wallet}, types::{ transaction::{eip2718::TypedTransaction, eip712::Eip712}, - Address, BlockId, Bloom, Bytes, Filter, FilteredParams, Log, NameOrAddress, Signature, - Transaction, TransactionReceipt, U256 as eU256, U64, + Address as eAddress, BlockId, Bloom, Bytes as eBytes, FilteredParams, Log as eLog, + NameOrAddress, Signature, Transaction, TransactionReceipt, TxHash as eTxHash, }, }; use futures_timer::Delay; use futures_util::Stream; use rand::{rngs::StdRng, SeedableRng}; -use revm::primitives::{CreateScheme, Output, TransactTo, TxEnv, U256}; -use serde::{de::DeserializeOwned, Serialize}; +use revm::primitives::{CreateScheme, Output, TransactTo}; +use serde::de::DeserializeOwned; use serde_json::value::RawValue; -use thiserror::Error; use super::*; -use crate::environment::{cheatcodes::*, instruction::*, Broadcast, Environment}; - -/// Possible errors thrown by interacting with the revm middleware client. -pub mod errors; -use errors::*; - -/// Graceful handling of the [`ExecutionResult`] returned by the [`Environment`] -pub mod transaction; -use transaction::*; +use crate::environment::{instruction::*, Broadcast, Environment}; pub mod connection; use connection::*; -pub mod cast; -use cast::*; - pub mod nonce_middleware; /// A middleware structure that integrates with `revm`. /// -/// [`RevmMiddleware`] serves as a bridge between the application and `revm`'s -/// execution environment, allowing for transaction sending, call execution, and -/// other core functions. It uses a custom connection and error system tailored -/// to Revm's specific needs. +/// [`ArbiterMiddleware`] serves as a bridge between the application and +/// [`revm`]'s execution environment, allowing for transaction sending, call +/// execution, and other core functions. It uses a custom connection and error +/// system tailored to Revm's specific needs. /// -/// This allows for `revm` and the [`Environment`] built around it to be treated -/// in much the same way as a live EVM blockchain can be addressed. +/// This allows for [`revm`] and the [`Environment`] built around it to be +/// treated in much the same way as a live EVM blockchain can be addressed. /// /// # Examples /// /// Basic usage: /// ``` -/// // Get the necessary dependencies -/// // Import `Arc` if you need to create a client instance -/// use std::sync::Arc; -/// -/// use arbiter_core::{environment::builder::EnvironmentBuilder, middleware::RevmMiddleware}; +/// use arbiter_core::{environment::Environment, middleware::ArbiterMiddleware}; /// /// // Create a new environment and run it -/// let mut environment = EnvironmentBuilder::new().build(); +/// let mut environment = Environment::builder().build(); /// /// // Retrieve the environment to create a new middleware instance -/// let middleware = RevmMiddleware::new(&environment, Some("test_label")); +/// let middleware = ArbiterMiddleware::new(&environment, Some("test_label")); /// ``` /// The client can now be used for transactions with the environment. /// Use a seed like `Some("test_label")` for maintaining a /// consistent address across simulations and client labeling. Seeding is be /// useful for debugging and post-processing. #[derive(Debug)] -pub struct RevmMiddleware { +pub struct ArbiterMiddleware { provider: Provider, wallet: EOA, /// An optional label for the middleware instance @@ -104,25 +80,20 @@ pub struct RevmMiddleware { pub label: Option, } -#[async_trait::async_trait] -impl Signer for RevmMiddleware { - type Error = RevmMiddlewareError; +#[async_trait] +impl Signer for ArbiterMiddleware { + type Error = ArbiterCoreError; async fn sign_message>( &self, message: S, ) -> Result { match self.wallet { - EOA::Forked(_) => Err(RevmMiddlewareError::Signing( - "Cannot sign messages with a forked EOA!".to_string(), - )), + EOA::Forked(_) => Err(ArbiterCoreError::ForkedEOASignError), EOA::Wallet(ref wallet) => { let message = message.as_ref(); let message_hash = ethers::utils::hash_message(message); - let signature = wallet - .sign_message(message_hash) - .await - .map_err(|e| RevmMiddlewareError::Signing(format!("Signing error: {}", e)))?; + let signature = wallet.sign_message(message_hash).await?; Ok(signature) } } @@ -131,14 +102,9 @@ impl Signer for RevmMiddleware { /// Signs the transaction async fn sign_transaction(&self, message: &TypedTransaction) -> Result { match self.wallet { - EOA::Forked(_) => Err(RevmMiddlewareError::Signing( - "Cannot sign transactions with a forked EOA!".to_string(), - )), + EOA::Forked(_) => Err(ArbiterCoreError::ForkedEOASignError), EOA::Wallet(ref wallet) => { - let signature = wallet - .sign_transaction(message) - .await - .map_err(|e| RevmMiddlewareError::Signing(format!("Signing error: {}", e)))?; + let signature = wallet.sign_transaction(message).await?; Ok(signature) } } @@ -151,21 +117,16 @@ impl Signer for RevmMiddleware { payload: &T, ) -> Result { match self.wallet { - EOA::Forked(_) => Err(RevmMiddlewareError::Signing( - "Cannot sign typed data with a forked EOA!".to_string(), - )), + EOA::Forked(_) => Err(ArbiterCoreError::ForkedEOASignError), EOA::Wallet(ref wallet) => { - let signature = wallet - .sign_typed_data(payload) - .await - .map_err(|e| RevmMiddlewareError::Signing(format!("Signing error: {}", e)))?; + let signature = wallet.sign_typed_data(payload).await?; Ok(signature) } } } /// Returns the signer's Ethereum Address - fn address(&self) -> Address { + fn address(&self) -> eAddress { match &self.wallet { EOA::Forked(address) => *address, EOA::Wallet(wallet) => wallet.address(), @@ -191,7 +152,7 @@ impl Signer for RevmMiddleware { } #[async_trait::async_trait] -impl JsonRpcClient for RevmMiddleware { +impl JsonRpcClient for ArbiterMiddleware { type Error = ProviderError; async fn request( &self, @@ -203,7 +164,7 @@ impl JsonRpcClient for RevmMiddleware { } #[async_trait::async_trait] -impl PubsubClient for RevmMiddleware { +impl PubsubClient for ArbiterMiddleware { type NotificationStream = Pin> + Send>>; fn subscribe>( @@ -225,40 +186,36 @@ pub enum EOA { /// The [`Forked`] variant is used for the forked EOA, /// allowing us to treat them as mock accounts that we can still authorize /// transactions with that we would be unable to do on mainnet. - Forked(Address), + Forked(eAddress), /// The [`Wallet`] variant "real" in the sense that is has a valid private /// key from the provided seed Wallet(Wallet), } -impl RevmMiddleware { - /// Creates a new instance of `RevmMiddleware` with procedurally generated - /// signer/address if provided a seed/label and otherwise a random - /// signer if not. +impl ArbiterMiddleware { + /// Creates a new instance of `ArbiterMiddleware` with procedurally + /// generated signer/address if provided a seed/label and otherwise a + /// random signer if not. /// /// # Examples /// ``` - /// // Get the necessary dependencies - /// // Import `Arc` if you need to create a client instance - /// use std::sync::Arc; - /// - /// use arbiter_core::{environment::builder::EnvironmentBuilder, middleware::RevmMiddleware}; + /// use arbiter_core::{environment::Environment, middleware::ArbiterMiddleware}; /// /// // Create a new environment and run it - /// let mut environment = EnvironmentBuilder::new().build(); + /// let mut environment = Environment::builder().build(); /// /// // Retrieve the environment to create a new middleware instance - /// let client = RevmMiddleware::new(&environment, Some("test_label")); + /// let client = ArbiterMiddleware::new(&environment, Some("test_label")); /// /// // We can create a middleware instance without a seed by doing the following - /// let no_seed_middleware = RevmMiddleware::new(&environment, None); + /// let no_seed_middleware = ArbiterMiddleware::new(&environment, None); /// ``` /// Use a seed if you want to have a constant address across simulations as /// well as a label for a client. This can be useful for debugging. pub fn new( environment: &Environment, seed_and_label: Option<&str>, - ) -> Result, RevmMiddlewareError> { + ) -> Result, ArbiterCoreError> { let connection = Connection::from(environment); let wallet = if let Some(seed) = seed_and_label { let mut hasher = Sha256::new(); @@ -273,19 +230,16 @@ impl RevmMiddleware { connection .instruction_sender .upgrade() - .ok_or(errors::RevmMiddlewareError::Send( - "Environment is offline!".to_string(), - ))? + .ok_or(ArbiterCoreError::UpgradeSenderError)? .send(Instruction::AddAccount { address: wallet.address(), outcome_sender: connection.outcome_sender.clone(), - }) - .map_err(|e| RevmMiddlewareError::Send(e.to_string()))?; + })?; connection.outcome_receiver.recv()??; let provider = Provider::new(connection); info!( - "Created new `RevmMiddleware` instance attached to environment labeled: + "Created new `ArbiterMiddleware` instance attached to environment labeled: {:?}", environment.parameters.label ); @@ -297,11 +251,11 @@ impl RevmMiddleware { } // TODO: This needs to have the label retrieved from the fork config. - /// Creates a new instance of `RevmMiddleware` from a forked EOA. + /// Creates a new instance of `ArbiterMiddleware` from a forked EOA. pub fn new_from_forked_eoa( environment: &Environment, - forked_eoa: Address, - ) -> Result, RevmMiddlewareError> { + forked_eoa: eAddress, + ) -> Result, ArbiterCoreError> { let instruction_sender = &Arc::clone(&environment.socket.instruction_sender); let (outcome_sender, outcome_receiver) = crossbeam_channel::unbounded(); @@ -314,7 +268,7 @@ impl RevmMiddleware { }; let provider = Provider::new(connection); info!( - "Created new `RevmMiddleware` instance from a fork -- attached to environment labeled: {:?}", + "Created new `ArbiterMiddleware` instance from a fork -- attached to environment labeled: {:?}", environment.parameters.label ); Ok(Arc::new(Self { @@ -326,64 +280,45 @@ impl RevmMiddleware { /// Allows the user to update the block number and timestamp of the /// [`Environment`] to whatever they may choose at any time. - /// This can only be done when the [`Environment`] has - /// [`EnvironmentParameters`] `block_settings` field set to - /// [`BlockSettings::UserControlled`]. pub fn update_block( &self, - block_number: impl Into, - block_timestamp: impl Into, - ) -> Result { - let block_number: ethers::types::U256 = block_number.into(); - let block_timestamp: ethers::types::U256 = block_timestamp.into(); + block_number: impl Into, + block_timestamp: impl Into, + ) -> Result { let provider = self.provider().as_ref(); - if let Some(instruction_sender) = provider.instruction_sender.upgrade() { - instruction_sender - .send(Instruction::BlockUpdate { - block_number: revm_primitives::FixedBytes::<32>(block_number.into()).into(), - block_timestamp: revm_primitives::FixedBytes::<32>(block_timestamp.into()) - .into(), - outcome_sender: provider.outcome_sender.clone(), - }) - .map_err(|e| RevmMiddlewareError::Send(e.to_string()))?; - match provider.outcome_receiver.recv() { - Ok(Ok(Outcome::BlockUpdateCompleted(receipt_data))) => { - debug!("Block update applied"); - Ok(receipt_data) - } - _ => Err(RevmMiddlewareError::MissingData( - "Block did not update Successfully".to_string(), - )), - } - } else { - Err(RevmMiddlewareError::Send( - "Environment is offline!".to_string(), - )) + provider + .instruction_sender + .upgrade() + .ok_or(ArbiterCoreError::UpgradeSenderError)? + .send(Instruction::BlockUpdate { + block_number: block_number.into(), + block_timestamp: block_timestamp.into(), + outcome_sender: provider.outcome_sender.clone(), + })?; + + match provider.outcome_receiver.recv()?? { + Outcome::BlockUpdateCompleted(receipt_data) => Ok(receipt_data), + _ => unreachable!(), } } /// Returns the timestamp of the current block. - pub async fn get_block_timestamp(&self) -> Result { - if let Some(instruction_sender) = self.provider().as_ref().instruction_sender.upgrade() { - instruction_sender - .send(Instruction::Query { - environment_data: EnvironmentData::BlockTimestamp, - outcome_sender: self.provider().as_ref().outcome_sender.clone(), - }) - .map_err(|e| RevmMiddlewareError::Send(e.to_string()))?; - match self.provider().as_ref().outcome_receiver.recv()?? { - Outcome::QueryReturn(outcome) => { - ethers::types::U256::from_str_radix(outcome.as_ref(), 10) - .map_err(|e| RevmMiddlewareError::Conversion(e.to_string())) - } - _ => Err(RevmMiddlewareError::MissingData( - "Wrong variant returned via query!".to_string(), - )), + pub async fn get_block_timestamp(&self) -> Result { + let provider = self.provider().as_ref(); + provider + .instruction_sender + .upgrade() + .ok_or(ArbiterCoreError::UpgradeSenderError)? + .send(Instruction::Query { + environment_data: EnvironmentData::BlockTimestamp, + outcome_sender: provider.outcome_sender.clone(), + })?; + + match provider.outcome_receiver.recv()?? { + Outcome::QueryReturn(outcome) => { + Ok(ethers::types::U256::from_str_radix(outcome.as_ref(), 10)?) } - } else { - Err(RevmMiddlewareError::Send( - "Environment is offline!".to_string(), - )) + _ => unreachable!(), } } @@ -391,34 +326,26 @@ impl RevmMiddleware { pub async fn apply_cheatcode( &self, cheatcode: Cheatcodes, - ) -> Result { - if let Some(instruction_sender) = self.provider.as_ref().instruction_sender.upgrade() { - instruction_sender - .send(Instruction::Cheatcode { - cheatcode, - outcome_sender: self.provider().as_ref().outcome_sender.clone(), - }) - .map_err(|e| RevmMiddlewareError::Send(e.to_string()))?; - - match self.provider().as_ref().outcome_receiver.recv()?? { - Outcome::CheatcodeReturn(outcome) => { - debug!("Cheatcode applied"); - Ok(outcome) - } - _ => Err(RevmMiddlewareError::MissingData( - "Wrong variant returned via instruction outcome!".to_string(), - )), - } - } else { - Err(RevmMiddlewareError::Send( - "Environment is offline!".to_string(), - )) + ) -> Result { + let provider = self.provider.as_ref(); + provider + .instruction_sender + .upgrade() + .ok_or(ArbiterCoreError::UpgradeSenderError)? + .send(Instruction::Cheatcode { + cheatcode, + outcome_sender: provider.outcome_sender.clone(), + })?; + + match provider.outcome_receiver.recv()?? { + Outcome::CheatcodeReturn(outcome) => Ok(outcome), + _ => unreachable!(), } } /// Returns the address of the wallet/signer given to a client. - /// Matches on the [`EOA`] variant of the [`RevmMiddleware`] struct. - pub fn address(&self) -> Address { + /// Matches on the [`EOA`] variant of the [`ArbiterMiddleware`] struct. + pub fn address(&self) -> eAddress { match &self.wallet { EOA::Forked(address) => *address, EOA::Wallet(wallet) => wallet.address(), @@ -432,52 +359,47 @@ impl RevmMiddleware { pub async fn set_gas_price( &self, gas_price: ethers::types::U256, - ) -> Result<(), RevmMiddlewareError> { - if let Some(instruction_sender) = self.provider().as_ref().instruction_sender.upgrade() { - instruction_sender - .send(Instruction::SetGasPrice { - gas_price, - outcome_sender: self.provider().as_ref().outcome_sender.clone(), - }) - .map_err(|e| RevmMiddlewareError::Send(e.to_string()))?; - match self.provider().as_ref().outcome_receiver.recv()?? { - Outcome::SetGasPriceCompleted => { - debug!("Gas price set"); - Ok(()) - } - _ => Err(RevmMiddlewareError::MissingData( - "Wrong variant returned via instruction outcome!".to_string(), - )), + ) -> Result<(), ArbiterCoreError> { + let provider = self.provider.as_ref(); + provider + .instruction_sender + .upgrade() + .ok_or(ArbiterCoreError::UpgradeSenderError)? + .send(Instruction::SetGasPrice { + gas_price, + outcome_sender: provider.outcome_sender.clone(), + })?; + match provider.outcome_receiver.recv()?? { + Outcome::SetGasPriceCompleted => { + debug!("Gas price set"); + Ok(()) } - } else { - Err(RevmMiddlewareError::Send( - "Environment is offline!".to_string(), - )) + _ => unreachable!(), } } } #[async_trait::async_trait] -impl Middleware for RevmMiddleware { +impl Middleware for ArbiterMiddleware { type Provider = Connection; - type Error = RevmMiddlewareError; + type Error = ArbiterCoreError; type Inner = Provider; /// Returns a reference to the inner middleware of which there is none when - /// using [`RevmMiddleware`] so we relink to `Self` + /// using [`ArbiterMiddleware`] so we relink to `Self` fn inner(&self) -> &Self::Inner { &self.provider } /// Provides access to the associated Ethereum provider which is given by - /// the [`Provider`] for [`RevmMiddleware`]. + /// the [`Provider`] for [`ArbiterMiddleware`]. fn provider(&self) -> &Provider { &self.provider } /// Provides the default sender address for transactions, i.e., the address /// of the wallet/signer given to a client of the [`Environment`]. - fn default_sender(&self) -> Option
{ + fn default_sender(&self) -> Option { Some(self.address()) } @@ -513,9 +435,7 @@ impl Middleware for RevmMiddleware { value: U256::ZERO, data: revm_primitives::Bytes(bytes::Bytes::from( tx.data() - .ok_or(RevmMiddlewareError::MissingData( - "Data missing in transaction!".to_string(), - ))? + .ok_or(ArbiterCoreError::MissingDataError)? .to_vec(), )), chain_id: None, @@ -529,153 +449,163 @@ impl Middleware for RevmMiddleware { outcome_sender: self.provider.as_ref().outcome_sender.clone(), }; - if let Some(instruction_sender) = self.provider().as_ref().instruction_sender.upgrade() { - instruction_sender - .send(instruction) - .map_err(|e| RevmMiddlewareError::Send(e.to_string()))?; - } else { - return Err(RevmMiddlewareError::Send( - "Environment is offline!".to_string(), - )); - } + let provider = self.provider.as_ref(); + provider + .instruction_sender + .upgrade() + .ok_or(ArbiterCoreError::UpgradeSenderError)? + .send(instruction)?; - let outcome = self.provider().as_ref().outcome_receiver.recv()??; + let outcome = provider.outcome_receiver.recv()??; if let Outcome::TransactionCompleted(execution_result, receipt_data) = outcome { - let Success { - _reason: _, - _gas_used: gas_used, - _gas_refunded: _, - logs, - output, - } = unpack_execution_result(execution_result)?; - - let to: Option = match tx_env.transact_to { - TransactTo::Call(address) => Some(address.into_array().into()), - TransactTo::Create(_) => None, - }; - - // Note that this is technically not the correct construction on the tx hash - // but until we increment the nonce correctly this will do - let sender = self.address(); - let data = tx_env.clone().data; - let mut hasher = Sha256::new(); - hasher.update(sender.as_bytes()); - hasher.update(data.as_ref()); - let hash = hasher.finalize(); - - let mut block_hasher = Sha256::new(); - block_hasher.update(receipt_data.block_number.to_string().as_bytes()); - let block_hash = block_hasher.finalize(); - let block_hash = Some(ethers::types::H256::from_slice(&block_hash)); - - match output { - Output::Create(_, address) => { - let tx_receipt = TransactionReceipt { - block_hash, - block_number: Some(receipt_data.block_number), - contract_address: Some(recast_address(address.unwrap())), - logs: logs.clone(), - from: sender, - gas_used: Some(gas_used.into()), - effective_gas_price: Some(tx_env.clone().gas_price.to_be_bytes().into()), /* TODO */ - transaction_hash: ethers::types::TxHash::from_slice(&hash), - to, - cumulative_gas_used: receipt_data - .cumulative_gas_per_block - .to_be_bytes() // TODO - .into(), - status: Some(1.into()), - root: None, - logs_bloom: { - let mut bloom = Bloom::default(); - for log in &logs { - bloom.accrue(BloomInput::Raw(&log.address.0)); - for topic in log.topics.iter() { - bloom.accrue(BloomInput::Raw(topic.as_bytes())); - } - } - bloom - }, - transaction_type: match tx { - TypedTransaction::Eip2930(_) => Some(1.into()), - _ => None, - }, - transaction_index: receipt_data.transaction_index, - ..Default::default() + match execution_result { + ExecutionResult::Revert { gas_used, output } => { + return Err(ArbiterCoreError::ExecutionRevert { + gas_used, + output: output.to_vec(), + }); + } + ExecutionResult::Halt { reason, gas_used } => { + return Err(ArbiterCoreError::ExecutionHalt { reason, gas_used }); + } + ExecutionResult::Success { + output, + gas_used, + logs, + .. + } => { + let logs = revm_logs_to_ethers_logs(logs); + let to: Option = match tx_env.transact_to { + TransactTo::Call(address) => Some(address.into_array().into()), + TransactTo::Create(_) => None, }; - // TODO: I'm not sure we need to set the confirmations. - let mut pending_tx = - PendingTransaction::new(ethers::types::H256::zero(), self.provider()) + // Note that this is technically not the correct construction on the tx hash + // but until we increment the nonce correctly this will do + let sender = self.address(); + let data = tx_env.clone().data; + let mut hasher = Sha256::new(); + hasher.update(sender.as_bytes()); + hasher.update(data.as_ref()); + let hash = hasher.finalize(); + + let mut block_hasher = Sha256::new(); + block_hasher.update(receipt_data.block_number.to_string().as_bytes()); + let block_hash = block_hasher.finalize(); + let block_hash = Some(H256::from_slice(&block_hash)); + + match output { + Output::Create(_, address) => { + let tx_receipt = TransactionReceipt { + block_hash, + block_number: Some(receipt_data.block_number), + contract_address: Some(recast_address(address.unwrap())), + logs: logs.clone(), + from: sender, + gas_used: Some(gas_used.into()), + effective_gas_price: Some( + tx_env.clone().gas_price.to_be_bytes().into(), + ), + transaction_hash: eTxHash::from_slice(&hash), + to, + cumulative_gas_used: receipt_data.cumulative_gas_per_block, + status: Some(1.into()), + root: None, + logs_bloom: { + let mut bloom = Bloom::default(); + for log in &logs { + bloom.accrue(BloomInput::Raw(&log.address.0)); + for topic in log.topics.iter() { + bloom.accrue(BloomInput::Raw(topic.as_bytes())); + } + } + bloom + }, + transaction_type: match tx { + TypedTransaction::Eip2930(_) => Some(1.into()), + _ => None, + }, + transaction_index: receipt_data.transaction_index, + ..Default::default() + }; + + // TODO: I'm not sure we need to set the confirmations. + let mut pending_tx = PendingTransaction::new( + ethers::types::H256::zero(), + self.provider(), + ) .interval(Duration::ZERO) .confirmations(0); - let state_ptr: *mut PendingTxState = - &mut pending_tx as *mut _ as *mut PendingTxState; + let state_ptr: *mut PendingTxState = + &mut pending_tx as *mut _ as *mut PendingTxState; - // Modify the value (this assumes you have access to the enum variants) - unsafe { - *state_ptr = PendingTxState::CheckingReceipt(Some(tx_receipt)); - } - - Ok(pending_tx) - } - Output::Call(_) => { - let tx_receipt = TransactionReceipt { - block_hash, - block_number: Some(receipt_data.block_number), - contract_address: None, - logs: logs.clone(), - from: sender, - gas_used: Some(gas_used.into()), - effective_gas_price: Some(tx_env.clone().gas_price.to_be_bytes().into()), - transaction_hash: ethers::types::TxHash::from_slice(&hash), - to, - cumulative_gas_used: receipt_data - .cumulative_gas_per_block - .to_be_bytes() - .into(), - status: Some(1.into()), - root: None, - logs_bloom: { - let mut bloom = Bloom::default(); - for log in &logs { - bloom.accrue(BloomInput::Raw(&log.address.0)); - for topic in log.topics.iter() { - bloom.accrue(BloomInput::Raw(topic.as_bytes())); - } + // Modify the value (this assumes you have access to the enum variants) + unsafe { + *state_ptr = PendingTxState::CheckingReceipt(Some(tx_receipt)); } - bloom - }, - transaction_type: match tx { - TypedTransaction::Eip2930(_) => Some(1.into()), - _ => None, - }, - transaction_index: receipt_data.transaction_index, - ..Default::default() - }; - // TODO: Create the actual tx_hash - // TODO: I'm not sure we need to set the confirmations. - let mut pending_tx = - PendingTransaction::new(ethers::types::H256::zero(), self.provider()) + Ok(pending_tx) + } + Output::Call(_) => { + let tx_receipt = TransactionReceipt { + block_hash, + block_number: Some(receipt_data.block_number), + contract_address: None, + logs: logs.clone(), + from: sender, + gas_used: Some(gas_used.into()), + effective_gas_price: Some( + tx_env.clone().gas_price.to_be_bytes().into(), + ), + transaction_hash: eTxHash::from_slice(&hash), + to, + cumulative_gas_used: receipt_data.cumulative_gas_per_block, + status: Some(1.into()), + root: None, + logs_bloom: { + let mut bloom = Bloom::default(); + for log in &logs { + bloom.accrue(BloomInput::Raw(&log.address.0)); + for topic in log.topics.iter() { + bloom.accrue(BloomInput::Raw(topic.as_bytes())); + } + } + bloom + }, + transaction_type: match tx { + TypedTransaction::Eip2930(_) => Some(1.into()), + _ => None, + }, + transaction_index: receipt_data.transaction_index, + ..Default::default() + }; + + // TODO: Create the actual tx_hash + // TODO: I'm not sure we need to set the confirmations. + let mut pending_tx = PendingTransaction::new( + ethers::types::H256::zero(), + self.provider(), + ) .interval(Duration::ZERO) .confirmations(0); - let state_ptr: *mut PendingTxState = - &mut pending_tx as *mut _ as *mut PendingTxState; + let state_ptr: *mut PendingTxState = + &mut pending_tx as *mut _ as *mut PendingTxState; - // Modify the value (this assumes you have access to the enum variants) - unsafe { - *state_ptr = PendingTxState::CheckingReceipt(Some(tx_receipt)); - } + // Modify the value (this assumes you have access to the enum variants) + unsafe { + *state_ptr = PendingTxState::CheckingReceipt(Some(tx_receipt)); + } - Ok(pending_tx) + Ok(pending_tx) + } + } } } } else { - panic!("This should never happen!") + unreachable!() } } @@ -691,7 +621,7 @@ impl Middleware for RevmMiddleware { &self, tx: &TypedTransaction, _block: Option, - ) -> Result { + ) -> Result { trace!("Building call"); let tx = tx.clone(); @@ -711,9 +641,7 @@ impl Middleware for RevmMiddleware { value: U256::ZERO, data: revm_primitives::Bytes(bytes::Bytes::from( tx.data() - .ok_or(RevmMiddlewareError::MissingData( - "Data missing in transaction!".to_string(), - ))? + .ok_or(ArbiterCoreError::MissingDataError)? .to_vec(), )), chain_id: None, @@ -726,29 +654,32 @@ impl Middleware for RevmMiddleware { tx_env, outcome_sender: self.provider().as_ref().outcome_sender.clone(), }; - if let Some(instruction_sender) = self.provider().as_ref().instruction_sender.upgrade() { - instruction_sender - .send(instruction) - .map_err(|e| RevmMiddlewareError::Send(e.to_string()))?; - } else { - return Err(RevmMiddlewareError::Send( - "Environment is offline!".to_string(), - )); - } + self.provider() + .as_ref() + .instruction_sender + .upgrade() + .ok_or(ArbiterCoreError::UpgradeSenderError)? + .send(instruction)?; + let outcome = self.provider().as_ref().outcome_receiver.recv()??; if let Outcome::CallCompleted(execution_result) = outcome { - let output = unpack_execution_result(execution_result)?.output; - match output { - Output::Create(bytes, ..) => { - return Ok(Bytes::from(bytes.to_vec())); + match execution_result { + ExecutionResult::Revert { gas_used, output } => { + return Err(ArbiterCoreError::ExecutionRevert { + gas_used, + output: output.to_vec(), + }); } - Output::Call(bytes) => { - return Ok(Bytes::from(bytes.to_vec())); + ExecutionResult::Halt { reason, gas_used } => { + return Err(ArbiterCoreError::ExecutionHalt { reason, gas_used }); + } + ExecutionResult::Success { output, .. } => { + return Ok(eBytes::from(output.data().to_vec())); } } } else { - panic!("This should never happen!") + unreachable!() } } @@ -757,7 +688,8 @@ impl Middleware for RevmMiddleware { /// /// Currently, this method supports log filters. Other filters like /// `NewBlocks` and `PendingTransactions` are not yet implemented. - async fn new_filter(&self, filter: FilterKind<'_>) -> Result { + async fn new_filter(&self, filter: FilterKind<'_>) -> Result { + let provider = self.provider.as_ref(); let (_method, args) = match filter { FilterKind::NewBlocks => unimplemented!( "Filtering via new `FilterKind::NewBlocks` has not been implemented yet!" @@ -771,16 +703,15 @@ impl Middleware for RevmMiddleware { }; let filter = args.clone(); let mut hasher = Sha256::new(); - hasher.update(serde_json::to_string(&args).map_err(RevmMiddlewareError::Json)?); + hasher.update(serde_json::to_string(&args)?); let hash = hasher.finalize(); let id = ethers::types::U256::from(ethers::types::H256::from_slice(&hash).as_bytes()); - let event_receiver = self.provider().as_ref().event_sender.subscribe(); + let event_receiver = provider.event_sender.subscribe(); let filter_receiver = FilterReceiver { filter, receiver: Some(event_receiver), }; - self.provider() - .as_ref() + provider .filter_receivers .lock() .unwrap() @@ -796,56 +727,45 @@ impl Middleware for RevmMiddleware { async fn watch<'b>( &'b self, filter: &Filter, - ) -> Result, Self::Error> { + ) -> Result, Self::Error> { let id = self.new_filter(FilterKind::Logs(filter)).await?; Ok(FilterWatcher::new(id, self.provider()).interval(Duration::ZERO)) } async fn get_gas_price(&self) -> Result { - if let Some(instruction_sender) = self.provider().as_ref().instruction_sender.upgrade() { - instruction_sender - .send(Instruction::Query { - environment_data: EnvironmentData::GasPrice, - outcome_sender: self.provider().as_ref().outcome_sender.clone(), - }) - .map_err(|e| RevmMiddlewareError::Send(e.to_string()))?; - match self.provider().as_ref().outcome_receiver.recv()?? { - Outcome::QueryReturn(outcome) => { - ethers::types::U256::from_str_radix(outcome.as_ref(), 10) - .map_err(|e| RevmMiddlewareError::Conversion(e.to_string())) - } - _ => Err(RevmMiddlewareError::MissingData( - "Wrong variant returned via query!".to_string(), - )), + let provider = self.provider.as_ref(); + provider + .instruction_sender + .upgrade() + .ok_or(ArbiterCoreError::UpgradeSenderError)? + .send(Instruction::Query { + environment_data: EnvironmentData::GasPrice, + outcome_sender: provider.outcome_sender.clone(), + })?; + + match provider.outcome_receiver.recv()?? { + Outcome::QueryReturn(outcome) => { + Ok(ethers::types::U256::from_str_radix(outcome.as_ref(), 10)?) } - } else { - Err(RevmMiddlewareError::Send( - "Environment is offline!".to_string(), - )) + _ => unreachable!(), } } async fn get_block_number(&self) -> Result { - if let Some(instruction_sender) = self.provider().as_ref().instruction_sender.upgrade() { - instruction_sender - .send(Instruction::Query { - environment_data: EnvironmentData::BlockNumber, - outcome_sender: self.provider().as_ref().outcome_sender.clone(), - }) - .map_err(|e| RevmMiddlewareError::Send(e.to_string()))?; - match self.provider().as_ref().outcome_receiver.recv()?? { - Outcome::QueryReturn(outcome) => { - ethers::types::U64::from_str_radix(outcome.as_ref(), 10) - .map_err(|e| RevmMiddlewareError::Conversion(e.to_string())) - } - _ => Err(RevmMiddlewareError::MissingData( - "Wrong variant returned via query!".to_string(), - )), + let provider = self.provider().as_ref(); + provider + .instruction_sender + .upgrade() + .ok_or(ArbiterCoreError::UpgradeSenderError)? + .send(Instruction::Query { + environment_data: EnvironmentData::BlockNumber, + outcome_sender: provider.outcome_sender.clone(), + })?; + match provider.outcome_receiver.recv()?? { + Outcome::QueryReturn(outcome) => { + Ok(ethers::types::U64::from_str_radix(outcome.as_ref(), 10)?) } - } else { - Err(RevmMiddlewareError::Send( - "Environment is offline!".to_string(), - )) + _ => unreachable!(), } } @@ -855,42 +775,29 @@ impl Middleware for RevmMiddleware { block: Option, ) -> Result { if block.is_some() { - return Err(RevmMiddlewareError::MissingData( - "Querying balance at a specific block is not supported!".to_string(), - )); + return Err(ArbiterCoreError::InvalidQueryError); } let address: NameOrAddress = from.into(); let address = match address { - NameOrAddress::Name(_) => { - return Err(RevmMiddlewareError::MissingData( - "Querying balance via name is not supported!".to_string(), - )) - } + NameOrAddress::Name(_) => return Err(ArbiterCoreError::InvalidQueryError), NameOrAddress::Address(address) => address, }; - if let Some(instruction_sender) = self.provider().as_ref().instruction_sender.upgrade() { - instruction_sender - .send(Instruction::Query { - environment_data: EnvironmentData::Balance(ethers::types::Address::from( - address, - )), - outcome_sender: self.provider().as_ref().outcome_sender.clone(), - }) - .map_err(|e| RevmMiddlewareError::Send(e.to_string()))?; - match self.provider().as_ref().outcome_receiver.recv()?? { - Outcome::QueryReturn(outcome) => { - ethers::types::U256::from_str_radix(outcome.as_ref(), 10) - .map_err(|e| RevmMiddlewareError::Conversion(e.to_string())) - } - _ => Err(RevmMiddlewareError::MissingData( - "Wrong variant returned via query!".to_string(), - )), + let provider = self.provider.as_ref(); + provider + .instruction_sender + .upgrade() + .ok_or(ArbiterCoreError::UpgradeSenderError)? + .send(Instruction::Query { + environment_data: EnvironmentData::Balance(ethers::types::Address::from(address)), + outcome_sender: provider.outcome_sender.clone(), + })?; + + match provider.outcome_receiver.recv()?? { + Outcome::QueryReturn(outcome) => { + Ok(ethers::types::U256::from_str_radix(outcome.as_ref(), 10)?) } - } else { - Err(RevmMiddlewareError::Send( - "Environment is offline!".to_string(), - )) + _ => unreachable!(), } } @@ -902,34 +809,24 @@ impl Middleware for RevmMiddleware { ) -> Result { let address: NameOrAddress = from.into(); let address = match address { - NameOrAddress::Name(_) => { - return Err(RevmMiddlewareError::MissingData( - "Querying storage via name is not supported!".to_string(), - )) - } + NameOrAddress::Name(_) => return Err(ArbiterCoreError::MissingDataError), NameOrAddress::Address(address) => address, }; - if let Some(instruction_sender) = self.provider().as_ref().instruction_sender.upgrade() { - instruction_sender - .send(Instruction::Query { - environment_data: EnvironmentData::TransactionCount(address), - outcome_sender: self.provider().as_ref().outcome_sender.clone(), - }) - .map_err(|e| RevmMiddlewareError::Send(e.to_string()))?; - - match self.provider().as_ref().outcome_receiver.recv()?? { - Outcome::QueryReturn(outcome) => { - ethers::types::U256::from_str_radix(outcome.as_ref(), 10) - .map_err(|e| RevmMiddlewareError::Conversion(e.to_string())) - } - _ => Err(RevmMiddlewareError::MissingData( - "Wrong variant returned via query!".to_string(), - )), + let provider = self.provider.as_ref(); + provider + .instruction_sender + .upgrade() + .ok_or(ArbiterCoreError::UpgradeSenderError)? + .send(Instruction::Query { + environment_data: EnvironmentData::TransactionCount(address), + outcome_sender: provider.outcome_sender.clone(), + })?; + + match provider.outcome_receiver.recv()?? { + Outcome::QueryReturn(outcome) => { + Ok(ethers::types::U256::from_str_radix(outcome.as_ref(), 10)?) } - } else { - Err(RevmMiddlewareError::Send( - "Environment is offline!".to_string(), - )) + _ => unreachable!(), } } @@ -966,14 +863,10 @@ impl Middleware for RevmMiddleware { account: T, key: ethers::types::H256, block: Option, - ) -> Result { + ) -> Result { let address: NameOrAddress = account.into(); let address = match address { - NameOrAddress::Name(_) => { - return Err(RevmMiddlewareError::MissingData( - "Querying storage via name is not supported!".to_string(), - )) - } + NameOrAddress::Name(_) => return Err(ArbiterCoreError::InvalidQueryError), NameOrAddress::Address(address) => address, }; @@ -993,24 +886,20 @@ impl Middleware for RevmMiddleware { let value: ethers::types::H256 = ethers::types::H256::from(value.to_be_bytes()); Ok(value) } - _ => Err(RevmMiddlewareError::MissingData( - "Wrong variant returned via cheatcode!".to_string(), - )), + _ => unreachable!(), } } async fn subscribe_logs<'a>( &'a self, filter: &Filter, - ) -> Result, Self::Error> + ) -> Result, Self::Error> where ::Provider: PubsubClient, { let watcher = self.watch(filter).await?; let id = watcher.id; - let subscription: Result, RevmMiddlewareError> = - SubscriptionStream::new(id, self.provider()).map_err(RevmMiddlewareError::Provider); - subscription + Ok(SubscriptionStream::new(id, self.provider())?) } async fn subscribe( @@ -1066,3 +955,14 @@ pub enum PendingTxState<'a> { /// Future has completed and should panic if polled again Completed, } + +// Certainly will go away with alloy-types +/// Recast a B160 into an Address type +/// # Arguments +/// * `address` - B160 to recast. (B160) +/// # Returns +/// * `Address` - Recasted Address. +#[inline] +pub fn recast_address(address: Address) -> eAddress { + eAddress::from(address.into_array()) +} diff --git a/arbiter-core/src/middleware/nonce_middleware.rs b/arbiter-core/src/middleware/nonce_middleware.rs index d06a14af6..bb58072db 100644 --- a/arbiter-core/src/middleware/nonce_middleware.rs +++ b/arbiter-core/src/middleware/nonce_middleware.rs @@ -9,11 +9,7 @@ //! - [`NonceManagerError`]: Error type for the middleware. use std::sync::atomic::{AtomicBool, AtomicU64, Ordering}; -use async_trait::async_trait; -use ethers::{ - providers::{Middleware, MiddlewareError, PendingTransaction}, - types::transaction::eip2718::TypedTransaction, -}; +use ethers::providers::MiddlewareError; use thiserror::Error; use super::*; @@ -26,7 +22,7 @@ pub struct NonceManagerMiddleware { init_guard: futures_locks::Mutex<()>, initialized: AtomicBool, nonce: AtomicU64, - address: Address, + address: eAddress, } impl NonceManagerMiddleware @@ -35,7 +31,7 @@ where { /// Instantiates the nonce manager with a 0 nonce. The `address` should be /// the address which you'll be sending transactions from - pub fn new(inner: M, address: Address) -> Self { + pub fn new(inner: M, address: eAddress) -> Self { Self { inner, init_guard: Default::default(), @@ -123,7 +119,7 @@ where /// Thrown when an error happens at the Nonce Manager pub enum NonceManagerError { /// Thrown when the internal middleware errors - #[error("{0}")] + #[error(transparent)] MiddlewareError(M::Error), } diff --git a/arbiter-core/src/middleware/transaction.rs b/arbiter-core/src/middleware/transaction.rs deleted file mode 100644 index b272940bc..000000000 --- a/arbiter-core/src/middleware/transaction.rs +++ /dev/null @@ -1,55 +0,0 @@ -use revm::primitives::{ExecutionResult, Output}; - -/// Unwraps the result of the EVM execution into a more structured `Success` -/// type. -use super::cast::revm_logs_to_ethers_logs; -use super::errors::RevmMiddlewareError; - -/// Contains the result of a successful transaction execution. -#[derive(Debug)] -pub struct Success { - /// The reason for the success. - pub _reason: revm::primitives::Eval, - /// The amount of gas used by the transaction. - pub _gas_used: u64, - /// The amount of gas refunded by the transaction. - pub _gas_refunded: u64, - /// The logs generated by the transaction. - pub logs: Vec, - /// The output of the transaction. - pub output: Output, -} - -/// Unpacks the result of the EVM execution. -/// -/// This function converts the raw execution result from the EVM into a more -/// structured [`Success`] type or an error indicating the failure of the -/// execution. -pub fn unpack_execution_result( - execution_result: ExecutionResult, -) -> Result { - match execution_result { - ExecutionResult::Success { - reason, - gas_used, - gas_refunded, - logs, - output, - } => { - let logs = revm_logs_to_ethers_logs(logs); - Ok(Success { - _reason: reason, - _gas_used: gas_used, - _gas_refunded: gas_refunded, - logs, - output, - }) - } - ExecutionResult::Revert { gas_used, output } => { - Err(RevmMiddlewareError::ExecutionRevert { gas_used, output }) - } - ExecutionResult::Halt { reason, gas_used } => { - Err(RevmMiddlewareError::ExecutionHalt { reason, gas_used }) - } - } -} diff --git a/arbiter-core/src/tests/environment_integration.rs b/arbiter-core/src/tests/environment_integration.rs deleted file mode 100644 index d63b787c5..000000000 --- a/arbiter-core/src/tests/environment_integration.rs +++ /dev/null @@ -1,293 +0,0 @@ -use arbiter_bindings::bindings::{self, weth::weth}; - -use super::*; -use crate::environment::{builder::EnvironmentBuilder, fork::Fork}; - -#[tokio::test] -async fn receipt_data() { - let (_environment, client) = startup_user_controlled().unwrap(); - let arbiter_token = deploy_arbx(client.clone()).await.unwrap(); - let receipt = arbiter_token - .mint(client.default_sender().unwrap(), 1000u64.into()) - .send() - .await - .unwrap() - .await - .unwrap() - .unwrap(); - - assert!(receipt.block_number.is_some()); - let mut block_hasher = Sha256::new(); - block_hasher.update(receipt.block_number.unwrap().to_string().as_bytes()); - let block_hash = block_hasher.finalize(); - let block_hash = Some(ethers::types::H256::from_slice(&block_hash)); - assert_eq!(receipt.block_hash, block_hash); - assert_eq!(receipt.status, Some(1.into())); - - assert!(receipt.contract_address.is_none()); - assert_eq!(receipt.to, Some(arbiter_token.address())); - - assert!(receipt.gas_used.is_some()); - assert_eq!(receipt.logs.len(), 1); - assert_eq!(receipt.logs[0].topics.len(), 3); - assert_eq!(receipt.transaction_index, 1.into()); - assert_eq!(receipt.from, client.default_sender().unwrap()); - - let mut cumulative_gas = U256::from(0); - assert!(receipt.cumulative_gas_used >= cumulative_gas); - cumulative_gas += receipt.cumulative_gas_used; - - let receipt_1 = arbiter_token - .mint(client.default_sender().unwrap(), 1000u64.into()) - .send() - .await - .unwrap() - .await - .unwrap() - .unwrap(); - - // ensure gas in increasing - assert!(cumulative_gas <= receipt_1.cumulative_gas_used); -} - -// If we are using the `seed == 1`, then we will have 3, 2, 3, 0, 2... -// transactions per block. We should check these. -#[tokio::test] -async fn randomly_sampled_blocks() { - let (environment, client) = startup_randomly_sampled().unwrap(); - client - .apply_cheatcode(Cheatcodes::Deal { - address: client.address(), - amount: U256::MAX, - }) - .await - .unwrap(); - // tx_0 is the transaction that creates the token contract - let arbiter_token = deploy_arbx(client.clone()).await.unwrap(); - - let mut distribution = match environment.parameters.block_settings { - builder::BlockSettings::RandomlySampled { - block_rate, - block_time, - seed, - } => SeededPoisson::new(block_rate, block_time, seed), - _ => panic!("Expected RandomlySampled block type"), - }; - - let mut expected_txs_per_block_vec = vec![]; - for _ in 0..5 { - expected_txs_per_block_vec.push(distribution.sample()); - } - println!( - "expected_txs_per_block_vec: {:?}", - expected_txs_per_block_vec - ); - - for (index, mut expected_txs_per_block) in expected_txs_per_block_vec.into_iter().enumerate() { - println!("index: {}", index); - println!("expected_txs_per_block: {}", expected_txs_per_block); - if index == 0 { - println!("tx_0 is the transaction that creates the token contract, so we will have one less transaction in the first block loop for this test"); - expected_txs_per_block -= 1; - } - for tx_num in 0..expected_txs_per_block { - println!("tx_num: {}", tx_num); - let tx = arbiter_token - .mint(client.default_sender().unwrap(), 1337u64.into()) - .send() - .await - .unwrap() - .await - .unwrap() - .unwrap(); - let block_number = tx.block_number.unwrap(); - println!("current block number: {}", block_number); - assert_eq!(index as u64, block_number.as_u64()); - } - } -} - -#[tokio::test] -async fn user_update_block() { - let (_environment, client) = startup_user_controlled().unwrap(); - let block_number = client.get_block_number().await.unwrap(); - assert_eq!(block_number, ethers::types::U64::from(0)); - - let block_timestamp = client.get_block_timestamp().await.unwrap(); - assert_eq!(block_timestamp, ethers::types::U256::from(1)); - - let new_block_number = 69; - let new_block_timestamp = 420; - - assert!(client - .update_block(new_block_number, new_block_timestamp,) - .is_ok()); - - let block_number = client.get_block_number().await.unwrap(); - assert_eq!(block_number, new_block_number.into()); - - let block_timestamp = client.get_block_timestamp().await.unwrap(); - assert_eq!(block_timestamp, new_block_timestamp.into()); -} - -#[tokio::test] -async fn randomly_sampled_gas_price() { - let (environment, client) = startup_randomly_sampled().unwrap(); - client - .apply_cheatcode(Cheatcodes::Deal { - address: client.address(), - amount: U256::MAX, - }) - .await - .unwrap(); - // tx_0 is the transaction that creates the token contract - let arbiter_token = deploy_arbx(client.clone()).await.unwrap(); - - let mut distribution = match environment.parameters.block_settings { - builder::BlockSettings::RandomlySampled { - block_rate, - block_time, - seed, - } => SeededPoisson::new(block_rate, block_time, seed), - _ => panic!("Expected RandomlySampled block type"), - }; - let mut expected_txs_per_block_vec = vec![]; - for _ in 0..2 { - expected_txs_per_block_vec.push(distribution.sample()); - } - println!( - "expected_txs_per_block_vec: {:?}", - expected_txs_per_block_vec - ); - - for (index, mut expected_txs_per_block) in - expected_txs_per_block_vec.clone().into_iter().enumerate() - { - println!("index: {}", index); - println!("expected_txs_per_block: {}", expected_txs_per_block); - if index == 0 { - println!("tx_0 is the transaction that creates the token contract, so we will have one less transaction in the first block loop for this test"); - expected_txs_per_block -= 1; - } - for tx_num in 0..expected_txs_per_block { - let gas_price = client.get_gas_price().await.unwrap(); - println!("current gas price: {}", gas_price); - println!("tx_num: {}", tx_num); - arbiter_token - .mint(client.default_sender().unwrap(), 1337u64.into()) - .send() - .await - .unwrap() - .await - .unwrap() - .unwrap(); - let comparison_gas_price = - (expected_txs_per_block_vec[index] as f64) * TEST_GAS_MULTIPLIER; - let comparison_gas_price = U256::from(comparison_gas_price as u128); - assert_eq!(comparison_gas_price, gas_price); - } - } -} - -#[tokio::test] -async fn constant_gas_price() { - let (_manager, client) = startup_constant_gas().unwrap(); - client - .apply_cheatcode(Cheatcodes::Deal { - address: client.address(), - amount: U256::MAX, - }) - .await - .unwrap(); - // tx_0 is the transaction that creates the token contract - let arbiter_token = deploy_arbx(client.clone()).await.unwrap(); - - for _ in 0..10 { - let gas_price = client.get_gas_price().await.unwrap(); - println!("current gas price: {}", gas_price); - arbiter_token - .mint(client.default_sender().unwrap(), 1337u64.into()) - .send() - .await - .unwrap() - .await - .unwrap() - .unwrap(); - assert_eq!(gas_price, U256::from(TEST_GAS_PRICE)); - } -} - -#[tokio::test] -async fn stop_environment() { - let (environment, client) = startup_user_controlled().unwrap(); - environment.stop().unwrap(); - assert!(deploy_arbx(client).await.is_err()); -} - -#[tokio::test] -async fn fork_into_arbiter() { - let fork = Fork::from_disk("../example_fork/fork_into_test.json").unwrap(); - - // Get the environment going - let environment = EnvironmentBuilder::new().db(fork.db).build(); - - // Create a client - let client = RevmMiddleware::new(&environment, Some("name")).unwrap(); - - // Deal with the weth contract - let weth_meta = fork.contracts_meta.get("weth").unwrap(); - let weth = weth::WETH::new(weth_meta.address, client.clone()); - - let address_to_check_balance = - Address::from_str(&weth_meta.mappings.get("balanceOf").unwrap()[0]).unwrap(); - - println!("checking address: {}", address_to_check_balance); - let balance = weth - .balance_of(address_to_check_balance) - .call() - .await - .unwrap(); - assert_eq!(balance, U256::from(34890707020710109111_u128)); - - // eoa check - let eoa = fork.eoa.get("vitalik").unwrap(); - let eth_balance = client.get_balance(*eoa, None).await.unwrap(); - // Check the balance of the eoa with the load cheatcode - assert_eq!(eth_balance, U256::from(934034962177715175765_u128)); -} - -#[tokio::test] -async fn middleware_from_forked_eo() { - let fork = Fork::from_disk("../example_fork/fork_into_test.json").unwrap(); - - // Get the environment going - let environment = EnvironmentBuilder::new().db(fork.db).build(); - - let vitalik_address = fork.eoa.get("vitalik").unwrap(); - let vitalik_as_a_client = RevmMiddleware::new_from_forked_eoa(&environment, *vitalik_address); - assert!(vitalik_as_a_client.is_ok()); - let vitalik_as_a_client = vitalik_as_a_client.unwrap(); - - // test a state mutating call from the forked eoa - let weth = bindings::weth::WETH::deploy(vitalik_as_a_client.clone(), ()) - .unwrap() - .send() - .await; - assert!(weth.is_ok()); // vitalik deployed the weth contract - - // test a non mutating call from the forked eoa - let eth_balance = vitalik_as_a_client - .get_balance(*vitalik_address, None) - .await - .unwrap(); - assert_eq!(eth_balance, U256::from(934034962177715175765_u128)); -} - -#[tokio::test] -async fn env_returns_db() { - let (environment, client) = startup_user_controlled().unwrap(); - deploy_arbx(client).await.unwrap(); - let db = environment.stop().unwrap(); - assert!(db.is_some()); - assert!(!db.unwrap().0.read().unwrap().accounts.is_empty()) -} diff --git a/arbiter-core/src/tests/mod.rs b/arbiter-core/src/tests/mod.rs deleted file mode 100644 index bcecd75cb..000000000 --- a/arbiter-core/src/tests/mod.rs +++ /dev/null @@ -1,131 +0,0 @@ -#![allow(missing_docs)] - -mod contracts; -mod data_collection_integration; -mod environment_integration; -mod middleware_integration; - -use std::{str::FromStr, sync::Arc}; - -use anyhow::Result; -use arbiter_bindings::bindings::{ - arbiter_math::ArbiterMath, arbiter_token::ArbiterToken, liquid_exchange::LiquidExchange, -}; -use ethers::{ - prelude::{ - k256::sha2::{Digest, Sha256}, - EthLogDecode, Middleware, - }, - providers::ProviderError, - types::{Address, Filter, ValueOrArray, U256}, - utils::parse_ether, -}; -use futures::StreamExt; - -use crate::{ - environment::{cheatcodes::*, *}, - math::*, - middleware::*, -}; - -pub const TEST_BLOCK_RATE: f64 = 2.0; -pub const TEST_BLOCK_TIME: u32 = 12; -pub const TEST_ENV_SEED: u64 = 1; -pub const TEST_GAS_PRICE: u128 = 100; -pub const TEST_GAS_MULTIPLIER: f64 = 2.0; - -pub const TEST_ARG_NAME: &str = "ArbiterToken"; -pub const TEST_ARG_SYMBOL: &str = "ARBT"; -pub const TEST_ARG_DECIMALS: u8 = 18; - -pub const TEST_MINT_AMOUNT: u128 = 69; -pub const TEST_MINT_TO: &str = "0xf7e93cc543d97af6632c9b8864417379dba4bf15"; - -pub const TEST_APPROVAL_AMOUNT: u128 = 420; - -pub const TEST_SIGNER_SEED_AND_LABEL: &str = "test_seed_and_label"; - -pub const ARBITER_TOKEN_X_NAME: &str = "Arbiter Token X"; -pub const ARBITER_TOKEN_X_SYMBOL: &str = "ARBX"; -pub const ARBITER_TOKEN_X_DECIMALS: u8 = 18; - -pub const ARBITER_TOKEN_Y_NAME: &str = "Arbiter Token Y"; -pub const ARBITER_TOKEN_Y_SYMBOL: &str = "ARBY"; -pub const ARBITER_TOKEN_Y_DECIMALS: u8 = 18; - -pub const LIQUID_EXCHANGE_PRICE: f64 = 420.69; - -fn startup_randomly_sampled() -> Result<(Environment, Arc)> { - let env = builder::EnvironmentBuilder::new() - .block_settings(builder::BlockSettings::RandomlySampled { - block_rate: TEST_BLOCK_RATE, - block_time: TEST_BLOCK_TIME, - seed: TEST_ENV_SEED, - }) - .gas_settings(builder::GasSettings::RandomlySampled { - multiplier: TEST_GAS_MULTIPLIER, - }) - .build(); - let client = RevmMiddleware::new(&env, Some(TEST_SIGNER_SEED_AND_LABEL))?; - Ok((env, client)) -} - -fn startup_user_controlled() -> Result<(Environment, Arc)> { - let env = builder::EnvironmentBuilder::new().build(); - let client = RevmMiddleware::new(&env, Some(TEST_SIGNER_SEED_AND_LABEL))?; - Ok((env, client)) -} - -fn startup_constant_gas() -> Result<(Environment, Arc)> { - let env = builder::EnvironmentBuilder::new() - .gas_settings(builder::GasSettings::Constant(TEST_GAS_PRICE)) - .build(); - let client = RevmMiddleware::new(&env, Some(TEST_SIGNER_SEED_AND_LABEL))?; - Ok((env, client)) -} - -async fn deploy_arbx(client: Arc) -> Result> { - Ok(ArbiterToken::deploy( - client, - ( - ARBITER_TOKEN_X_NAME.to_string(), - ARBITER_TOKEN_X_SYMBOL.to_string(), - ARBITER_TOKEN_X_DECIMALS, - ), - )? - .send() - .await?) -} - -async fn deploy_arby(client: Arc) -> Result> { - Ok(ArbiterToken::deploy( - client, - ( - ARBITER_TOKEN_Y_NAME.to_string(), - ARBITER_TOKEN_Y_SYMBOL.to_string(), - ARBITER_TOKEN_Y_DECIMALS, - ), - )? - .send() - .await?) -} - -async fn deploy_liquid_exchange( - client: Arc, -) -> Result<( - ArbiterToken, - ArbiterToken, - LiquidExchange, -)> { - let arbx = deploy_arbx(client.clone()).await?; - let arby = deploy_arby(client.clone()).await?; - let price = parse_ether(LIQUID_EXCHANGE_PRICE).unwrap(); - let liquid_exchange = LiquidExchange::deploy(client, (arbx.address(), arby.address(), price))? - .send() - .await?; - Ok((arbx, arby, liquid_exchange)) -} - -async fn deploy_arbiter_math(client: Arc) -> Result> { - Ok(ArbiterMath::deploy(client, ())?.send().await?) -} diff --git a/arbiter-core/tests/common.rs b/arbiter-core/tests/common.rs new file mode 100644 index 000000000..e498aa478 --- /dev/null +++ b/arbiter-core/tests/common.rs @@ -0,0 +1,83 @@ +use std::sync::Arc; + +use anyhow::Result; +use arbiter_bindings::bindings::{ + arbiter_math::ArbiterMath, arbiter_token::ArbiterToken, liquid_exchange::LiquidExchange, +}; +use arbiter_core::{environment::Environment, middleware::ArbiterMiddleware}; +use ethers::utils::parse_ether; + +pub const TEST_ARG_NAME: &str = "ArbiterToken"; +pub const TEST_ARG_SYMBOL: &str = "ARBT"; +pub const TEST_ARG_DECIMALS: u8 = 18; + +pub const TEST_MINT_AMOUNT: u128 = 69; +pub const TEST_MINT_TO: &str = "0xf7e93cc543d97af6632c9b8864417379dba4bf15"; + +pub const TEST_APPROVAL_AMOUNT: u128 = 420; + +pub const TEST_SIGNER_SEED_AND_LABEL: &str = "test_seed_and_label"; + +pub const ARBITER_TOKEN_X_NAME: &str = "Arbiter Token X"; +pub const ARBITER_TOKEN_X_SYMBOL: &str = "ARBX"; +pub const ARBITER_TOKEN_X_DECIMALS: u8 = 18; + +pub const ARBITER_TOKEN_Y_NAME: &str = "Arbiter Token Y"; +pub const ARBITER_TOKEN_Y_SYMBOL: &str = "ARBY"; +pub const ARBITER_TOKEN_Y_DECIMALS: u8 = 18; + +pub const LIQUID_EXCHANGE_PRICE: f64 = 420.69; + +fn startup() -> Result<(Environment, Arc)> { + let env = Environment::builder().build(); + let client = ArbiterMiddleware::new(&env, Some(TEST_SIGNER_SEED_AND_LABEL))?; + Ok((env, client)) +} + +async fn deploy_arbx(client: Arc) -> Result> { + Ok(ArbiterToken::deploy( + client, + ( + ARBITER_TOKEN_X_NAME.to_string(), + ARBITER_TOKEN_X_SYMBOL.to_string(), + ARBITER_TOKEN_X_DECIMALS, + ), + )? + .send() + .await?) +} + +async fn deploy_arby(client: Arc) -> Result> { + Ok(ArbiterToken::deploy( + client, + ( + ARBITER_TOKEN_Y_NAME.to_string(), + ARBITER_TOKEN_Y_SYMBOL.to_string(), + ARBITER_TOKEN_Y_DECIMALS, + ), + )? + .send() + .await?) +} + +async fn deploy_liquid_exchange( + client: Arc, +) -> Result<( + ArbiterToken, + ArbiterToken, + LiquidExchange, +)> { + let arbx = deploy_arbx(client.clone()).await?; + let arby = deploy_arby(client.clone()).await?; + let price = parse_ether(LIQUID_EXCHANGE_PRICE).unwrap(); + let liquid_exchange = LiquidExchange::deploy(client, (arbx.address(), arby.address(), price))? + .send() + .await?; + Ok((arbx, arby, liquid_exchange)) +} + +async fn deploy_arbiter_math( + client: Arc, +) -> Result> { + Ok(ArbiterMath::deploy(client, ())?.send().await?) +} diff --git a/arbiter-core/src/tests/contracts.rs b/arbiter-core/tests/contracts.rs similarity index 86% rename from arbiter-core/src/tests/contracts.rs rename to arbiter-core/tests/contracts.rs index 660da54c1..f9ed6d290 100644 --- a/arbiter-core/src/tests/contracts.rs +++ b/arbiter-core/tests/contracts.rs @@ -1,8 +1,12 @@ -use super::*; +use std::fs::{self, File}; + +use ethers::prelude::Middleware; +use tracing_subscriber::{fmt, EnvFilter}; +include!("common.rs"); #[tokio::test] async fn arbiter_math() { - let (_manager, client) = startup_user_controlled().unwrap(); + let (_env, client) = startup().unwrap(); let arbiter_math = deploy_arbiter_math(client).await.unwrap(); // Test the cdf function @@ -112,7 +116,7 @@ async fn arbiter_math() { // relevant ERC20 functions (e.g., transfer, approve, etc.). #[tokio::test] async fn token_mint_and_balance() { - let (_manager, client) = startup_user_controlled().unwrap(); + let (_env, client) = startup().unwrap(); let arbx = deploy_arbx(client.clone()).await.unwrap(); // Mint some tokens to the client. @@ -139,7 +143,7 @@ async fn token_mint_and_balance() { #[tokio::test] async fn liquid_exchange_swap() { - let (_manager, client) = startup_user_controlled().unwrap(); + let (_env, client) = startup().unwrap(); let (arbx, arby, liquid_exchange) = deploy_liquid_exchange(client.clone()).await.unwrap(); // Mint tokens to the client then check balances. @@ -281,7 +285,7 @@ async fn liquid_exchange_swap() { #[tokio::test] async fn price_simulation_oracle() { - let (_manager, client) = startup_user_controlled().unwrap(); + let (_env, client) = startup().unwrap(); let (.., liquid_exchange) = deploy_liquid_exchange(client.clone()).await.unwrap(); let price_path = vec![ @@ -305,3 +309,35 @@ async fn price_simulation_oracle() { assert_eq!(new_price, wad_price); } } + +#[tokio::test] +async fn can_log() { + std::env::set_var("RUST_LOG", "trace"); + let file = File::create("test_logs.log").expect("Unable to create log file"); + let subscriber = fmt() + .with_env_filter(EnvFilter::from_default_env()) + .with_writer(file) + .finish(); + tracing::subscriber::set_global_default(subscriber).expect("setting default subscriber failed"); + + let env = Environment::builder().with_console_logs().build(); + let client = ArbiterMiddleware::new(&env, None).unwrap(); + let counter = arbiter_bindings::bindings::counter::Counter::deploy(client, ()) + .unwrap() + .send() + .await + .unwrap(); + + // Call the `setNumber` function to emit a console log. + counter + .set_number(ethers::types::U256::from(42)) + .send() + .await + .unwrap() + .await + .unwrap(); + + let parsed_file = fs::read_to_string("test_logs.log").expect("Unable to read log file"); + assert!(parsed_file.contains("You set the number to: , 42")); + fs::remove_file("test_logs.log").expect("Unable to remove log file"); +} diff --git a/arbiter-core/src/tests/data_collection_integration.rs b/arbiter-core/tests/data_collection_integration.rs similarity index 83% rename from arbiter-core/src/tests/data_collection_integration.rs rename to arbiter-core/tests/data_collection_integration.rs index 4bce2684a..353eb142a 100644 --- a/arbiter-core/src/tests/data_collection_integration.rs +++ b/arbiter-core/tests/data_collection_integration.rs @@ -1,12 +1,13 @@ use std::path::Path; -use serde::Serialize; - -use super::*; -use crate::{ +use arbiter_core::{ data_collection::{EventLogger, OutputFileType}, - middleware::errors::RevmMiddlewareError, + errors::ArbiterCoreError, }; +use ethers::types::U256 as eU256; +use futures::StreamExt; +use serde::Serialize; +include!("common.rs"); #[derive(Serialize, Clone)] struct MockMetadata { @@ -14,23 +15,23 @@ struct MockMetadata { } async fn generate_events( - arbx: ArbiterToken, - arby: ArbiterToken, - lex: LiquidExchange, - client: Arc, -) -> Result<(), RevmMiddlewareError> { + arbx: ArbiterToken, + arby: ArbiterToken, + lex: LiquidExchange, + client: Arc, +) -> Result<(), ArbiterCoreError> { for _ in 0..2 { - arbx.approve(client.address(), U256::from(1)) + arbx.approve(client.address(), eU256::from(1)) .send() .await .unwrap() .await?; - arby.approve(client.address(), U256::from(1)) + arby.approve(client.address(), eU256::from(1)) .send() .await .unwrap() .await?; - lex.set_price(U256::from(10u128.pow(18))) + lex.set_price(eU256::from(10u128.pow(18))) .send() .await .unwrap() @@ -42,7 +43,7 @@ async fn generate_events( #[tokio::test] async fn data_capture() { // - let (env, client) = startup_user_controlled().unwrap(); + let (env, client) = startup().unwrap(); let (arbx, arby, lex) = deploy_liquid_exchange(client.clone()).await.unwrap(); println!("Deployed contracts"); @@ -103,7 +104,7 @@ async fn data_capture() { async fn data_stream() { // std::env::set_var("RUST_LOG", "trace"); // tracing_subscriber::fmt::init(); - let (env, client) = startup_user_controlled().unwrap(); + let (env, client) = startup().unwrap(); let (arbx, arby, lex) = deploy_liquid_exchange(client.clone()).await.unwrap(); println!( "Deployed diff --git a/arbiter-core/tests/environment_integration.rs b/arbiter-core/tests/environment_integration.rs new file mode 100644 index 000000000..4e30951c2 --- /dev/null +++ b/arbiter-core/tests/environment_integration.rs @@ -0,0 +1,157 @@ +use std::str::FromStr; + +use arbiter_bindings::bindings::{self, weth::weth}; +use arbiter_core::database::fork::Fork; +use ethers::{ + prelude::{ + k256::sha2::{Digest, Sha256}, + Middleware, + }, + types::{Address, U256 as eU256}, +}; +include!("common.rs"); + +#[tokio::test] +async fn receipt_data() { + let (_environment, client) = startup().unwrap(); + let arbiter_token = deploy_arbx(client.clone()).await.unwrap(); + let receipt: ethers::types::TransactionReceipt = arbiter_token + .mint(client.default_sender().unwrap(), 1000u64.into()) + .send() + .await + .unwrap() + .await + .unwrap() + .unwrap(); + + assert!(receipt.block_number.is_some()); + let mut block_hasher = Sha256::new(); + block_hasher.update(receipt.block_number.unwrap().to_string().as_bytes()); + let block_hash = block_hasher.finalize(); + let block_hash = Some(ethers::types::H256::from_slice(&block_hash)); + assert_eq!(receipt.block_hash, block_hash); + assert_eq!(receipt.status, Some(1.into())); + + assert!(receipt.contract_address.is_none()); + assert_eq!(receipt.to, Some(arbiter_token.address())); + + assert!(receipt.gas_used.is_some()); + assert_eq!(receipt.logs.len(), 1); + assert_eq!(receipt.logs[0].topics.len(), 3); + assert_eq!(receipt.transaction_index, 1.into()); + assert_eq!(receipt.from, client.default_sender().unwrap()); + + let mut cumulative_gas = eU256::from(0); + assert!(receipt.cumulative_gas_used >= cumulative_gas); + cumulative_gas += receipt.cumulative_gas_used; + + let receipt_1 = arbiter_token + .mint(client.default_sender().unwrap(), 1000u64.into()) + .send() + .await + .unwrap() + .await + .unwrap() + .unwrap(); + + // ensure gas in increasing + assert!(cumulative_gas <= receipt_1.cumulative_gas_used); +} + +#[tokio::test] +async fn user_update_block() { + let (_environment, client) = startup().unwrap(); + let block_number = client.get_block_number().await.unwrap(); + assert_eq!(block_number, ethers::types::U64::from(0)); + + let block_timestamp = client.get_block_timestamp().await.unwrap(); + assert_eq!(block_timestamp, ethers::types::U256::from(1)); + + let new_block_number = 69; + let new_block_timestamp = 420; + + assert!(client + .update_block(new_block_number, new_block_timestamp,) + .is_ok()); + + let block_number = client.get_block_number().await.unwrap(); + assert_eq!(block_number, new_block_number.into()); + + let block_timestamp = client.get_block_timestamp().await.unwrap(); + assert_eq!(block_timestamp, new_block_timestamp.into()); +} + +#[tokio::test] +async fn stop_environment() { + let (environment, client) = startup().unwrap(); + environment.stop().unwrap(); + assert!(deploy_arbx(client).await.is_err()); +} + +#[tokio::test] +async fn fork_into_arbiter() { + let fork = Fork::from_disk("../example_fork/fork_into_test.json").unwrap(); + + // Get the environment going + let environment = Environment::builder().with_db(fork.db).build(); + + // Create a client + let client = ArbiterMiddleware::new(&environment, Some("name")).unwrap(); + + // Deal with the weth contract + let weth_meta = fork.contracts_meta.get("weth").unwrap(); + let weth = weth::WETH::new(weth_meta.address, client.clone()); + + let address_to_check_balance = + Address::from_str(&weth_meta.mappings.get("balanceOf").unwrap()[0]).unwrap(); + + println!("checking address: {}", address_to_check_balance); + let balance = weth + .balance_of(address_to_check_balance) + .call() + .await + .unwrap(); + assert_eq!(balance, eU256::from(34890707020710109111_u128)); + + // eoa check + let eoa = fork.eoa.get("vitalik").unwrap(); + let eth_balance = client.get_balance(*eoa, None).await.unwrap(); + // Check the balance of the eoa with the load cheatcode + assert_eq!(eth_balance, eU256::from(934034962177715175765_u128)); +} + +#[tokio::test] +async fn middleware_from_forked_eo() { + let fork = Fork::from_disk("../example_fork/fork_into_test.json").unwrap(); + + // Get the environment going + let environment = Environment::builder().with_db(fork.db).build(); + + let vitalik_address = fork.eoa.get("vitalik").unwrap(); + let vitalik_as_a_client = + ArbiterMiddleware::new_from_forked_eoa(&environment, *vitalik_address); + assert!(vitalik_as_a_client.is_ok()); + let vitalik_as_a_client = vitalik_as_a_client.unwrap(); + + // test a state mutating call from the forked eoa + let weth = bindings::weth::WETH::deploy(vitalik_as_a_client.clone(), ()) + .unwrap() + .send() + .await; + assert!(weth.is_ok()); // vitalik deployed the weth contract + + // test a non mutating call from the forked eoa + let eth_balance = vitalik_as_a_client + .get_balance(*vitalik_address, None) + .await + .unwrap(); + assert_eq!(eth_balance, eU256::from(934034962177715175765_u128)); +} + +#[tokio::test] +async fn env_returns_db() { + let (environment, client) = startup().unwrap(); + deploy_arbx(client).await.unwrap(); + let db = environment.stop().unwrap(); + assert!(!db.0.read().unwrap().accounts.is_empty()) +} diff --git a/arbiter-core/src/tests/middleware_integration.rs b/arbiter-core/tests/middleware_integration.rs similarity index 80% rename from arbiter-core/src/tests/middleware_integration.rs rename to arbiter-core/tests/middleware_integration.rs index 57c07d592..b5e8f683c 100644 --- a/arbiter-core/src/tests/middleware_integration.rs +++ b/arbiter-core/tests/middleware_integration.rs @@ -1,15 +1,21 @@ +use std::str::FromStr; + use arbiter_bindings::bindings::arbiter_token::ApprovalFilter; +use arbiter_core::{ + environment::instruction::{Cheatcodes, CheatcodesReturn}, + middleware::nonce_middleware::NonceManagerMiddleware, +}; use ethers::{ - types::{transaction::eip2718::TypedTransaction, Log}, - utils::parse_ether, + prelude::{EthLogDecode, Middleware}, + providers::ProviderError, + types::{transaction::eip2718::TypedTransaction, Address, Filter, Log, ValueOrArray}, }; - -use super::*; -use crate::middleware::nonce_middleware::NonceManagerMiddleware; +use futures::StreamExt; +include!("common.rs"); #[tokio::test] async fn deploy() { - let (_environment, client) = startup_user_controlled().unwrap(); + let (_environment, client) = startup().unwrap(); let arbiter_token = deploy_arbx(client).await.unwrap(); assert_eq!( arbiter_token.address(), @@ -19,7 +25,7 @@ async fn deploy() { #[tokio::test] async fn call() { - let (_environment, client) = startup_user_controlled().unwrap(); + let (_environment, client) = startup().unwrap(); let arbiter_token = deploy_arbx(client).await.unwrap(); let admin = arbiter_token.admin(); let output = admin.call().await.unwrap(); @@ -31,7 +37,7 @@ async fn call() { #[tokio::test] async fn transact() { - let (_environment, client) = startup_user_controlled().unwrap(); + let (_environment, client) = startup().unwrap(); let arbiter_token = deploy_arbx(client).await.unwrap(); let mint = arbiter_token.mint( Address::from_str(TEST_MINT_TO).unwrap(), @@ -65,7 +71,7 @@ async fn transact() { #[tokio::test] async fn filter_id() { - let (_environment, client) = startup_user_controlled().unwrap(); + let (_environment, client) = startup().unwrap(); let arbiter_token = deploy_arbx(client.clone()).await.unwrap(); let filter_watcher_1 = client.watch(&Filter::default()).await.unwrap(); let filter_watcher_2 = client @@ -77,7 +83,7 @@ async fn filter_id() { #[tokio::test] async fn filter_watcher() { - let (_environment, client) = startup_user_controlled().unwrap(); + let (_environment, client) = startup().unwrap(); let arbiter_token = deploy_arbx(client.clone()).await.unwrap(); let mut filter_watcher = client.watch(&Filter::default()).await.unwrap(); let approval = arbiter_token.approve( @@ -104,7 +110,11 @@ async fn filter_watcher() { .unwrap() ); let approval_filter_output = ApprovalFilter::decode_log(&event.into()).unwrap(); - println!("Decoded Log: {:#?}", approval_filter_output); + println!( + "Decoded +Log: {:#?}", + approval_filter_output + ); assert_eq!( approval_filter_output.owner, client.default_sender().unwrap() @@ -121,7 +131,7 @@ async fn filter_watcher() { #[tokio::test] async fn filter_address() { - let (_environment, client) = startup_user_controlled().unwrap(); + let (_environment, client) = startup().unwrap(); let arbiter_token = deploy_arbx(client.clone()).await.unwrap(); let mut default_watcher = client.watch(&Filter::default()).await.unwrap(); @@ -142,7 +152,7 @@ async fn filter_address() { assert!(!address_watcher_event.data.is_empty()); assert_eq!(default_watcher_event, address_watcher_event); - // Create a new token contract to check that the address watcher only gets + // Create a new token contract to check that the address watcher onlygets // events from the correct contract. // Check that only the default watcher gets // this event @@ -175,14 +185,14 @@ async fn filter_address() { // check that the address_watcher has not received any events tokio::select! { - _ = address_watcher.next() => panic!("Event received unexpectedly!"), - _ = tokio::time::sleep(std::time::Duration::from_secs(1)) => println!("No event captured, as expected. This test passes."), - }; + _ = address_watcher.next() => panic!("Event received unexpectedly!"), + _ = tokio::time::sleep(std::time::Duration::from_secs(1)) => + println!("No event captured, as expected. This test passes."), }; } #[tokio::test] async fn filter_topics() { - let (_environment, client) = startup_user_controlled().unwrap(); + let (_environment, client) = startup().unwrap(); let arbiter_token = deploy_arbx(client.clone()).await.unwrap(); let mut default_watcher = client.watch(&Filter::default()).await.unwrap(); @@ -214,14 +224,15 @@ async fn filter_topics() { // check that the approval_watcher has not received any events tokio::select! { - _ = approval_watcher.next() => panic!("Event received unexpectedly!"), - _ = tokio::time::sleep(std::time::Duration::from_secs(1)) => println!("No event captured, as expected. This test passes."), - }; + _ = approval_watcher.next() => panic!("Event received + unexpectedly!"), _ = + tokio::time::sleep(std::time::Duration::from_secs(1)) => println!("No event + captured, as expected. This test passes."), }; } #[tokio::test] async fn block_update_receipt() { - let (_environment, client) = startup_user_controlled().unwrap(); + let (_environment, client) = startup().unwrap(); let arbiter_token = deploy_arbx(client.clone()).await.unwrap(); let receipt = arbiter_token .mint(client.default_sender().unwrap(), 1000u64.into()) @@ -234,39 +245,41 @@ async fn block_update_receipt() { assert_eq!(receipt.block_number.unwrap(), 0u64.into()); let receipt = client.update_block(3, 100).unwrap(); - assert_eq!(receipt.block_number, 3.into()); + + // Check that we got the data from the old block + assert_eq!(receipt.block_number, 0.into()); assert_eq!( receipt.cumulative_gas_per_block, - revm::primitives::U256::ZERO + ethers::types::U256::from_str_radix("e12e4", 16).unwrap() ); - assert_eq!(receipt.transaction_index, 0.into()); + assert_eq!(receipt.transaction_index, 2.into()); } #[tokio::test] async fn get_block_number() { - let (_environment, client) = startup_user_controlled().unwrap(); + let (_environment, client) = startup().unwrap(); let block_number = client.get_block_number().await.unwrap(); assert_eq!(block_number.as_u64(), 0_u64) } #[tokio::test] async fn get_block_timestamp() { - let (_environment, client) = startup_user_controlled().unwrap(); + let (_environment, client) = startup().unwrap(); let block_timestamp = client.get_block_timestamp().await.unwrap(); assert_eq!(block_timestamp, ethers::types::U256::from(1)) } #[tokio::test] -async fn get_gas_price_user_controlled() { +async fn get_gas_price() { // User controlled should have 0 gas price initially - let (_environment, client) = startup_user_controlled().unwrap(); + let (_environment, client) = startup().unwrap(); let gas_price = client.get_gas_price().await.unwrap(); assert_eq!(gas_price, ethers::types::U256::from(0)); } #[tokio::test] async fn deal() { - let (_environment, client) = startup_user_controlled().unwrap(); + let (_environment, client) = startup().unwrap(); client .apply_cheatcode(Cheatcodes::Deal { address: client.default_sender().unwrap(), @@ -280,7 +293,7 @@ async fn deal() { #[tokio::test] async fn deal_missing_account() { - let (_environment, client) = startup_user_controlled().unwrap(); + let (_environment, client) = startup().unwrap(); client .apply_cheatcode(Cheatcodes::Deal { address: client.default_sender().unwrap(), @@ -297,7 +310,7 @@ async fn deal_missing_account() { #[tokio::test] async fn set_gas_price() { - let (_environment, client) = startup_user_controlled().unwrap(); + let (_environment, client) = startup().unwrap(); assert_eq!( client.get_gas_price().await.unwrap(), ethers::types::U256::from(0) @@ -309,7 +322,7 @@ async fn set_gas_price() { #[tokio::test] async fn get_transaction_count() { - let (_environment, client) = startup_user_controlled().unwrap(); + let (_environment, client) = startup().unwrap(); let nonce = client .get_transaction_count(client.address(), Some(0.into())) .await @@ -326,7 +339,7 @@ async fn get_transaction_count() { #[tokio::test] async fn create_nonce_middleware() { - let (_environment, client) = startup_user_controlled().unwrap(); + let (_environment, client) = startup().unwrap(); let nonce_middleware = NonceManagerMiddleware::new(client.clone(), client.address()); let nonce = nonce_middleware.initialize_nonce(None).await.unwrap(); assert_eq!(nonce, 0.into()); @@ -334,7 +347,7 @@ async fn create_nonce_middleware() { #[tokio::test] async fn next_nonce_middleware() { - let (_environment, client) = startup_user_controlled().unwrap(); + let (_environment, client) = startup().unwrap(); let nonce_middleware = NonceManagerMiddleware::new(client.clone(), client.address()); let next_nonce = nonce_middleware.next(); @@ -347,7 +360,7 @@ async fn next_nonce_middleware() { #[tokio::test] async fn with_environment_nonce_middleware() { - let (_environment, client) = startup_user_controlled().unwrap(); + let (_environment, client) = startup().unwrap(); let nonce_middleware = NonceManagerMiddleware::new(client.clone(), client.address()); let nonce = nonce_middleware.initialize_nonce(None).await.unwrap(); @@ -356,7 +369,7 @@ async fn with_environment_nonce_middleware() { #[tokio::test] async fn inner_nonce_environment() { - let (_environment, client) = startup_user_controlled().unwrap(); + let (_environment, client) = startup().unwrap(); let nonce_middleware = NonceManagerMiddleware::new(client.clone(), client.address()); let inner = nonce_middleware.inner(); @@ -365,7 +378,7 @@ async fn inner_nonce_environment() { #[tokio::test] async fn fill_transaction() { - let (_environment, client) = startup_user_controlled().unwrap(); + let (_environment, client) = startup().unwrap(); let mut tx = TypedTransaction::Eip1559(Default::default()); assert!(tx.from().is_none()); @@ -377,7 +390,7 @@ async fn fill_transaction() { #[tokio::test] async fn fill_transaction_nonce_middleware() { - let (_environment, client) = startup_user_controlled().unwrap(); + let (_environment, client) = startup().unwrap(); let nonce_middleware = NonceManagerMiddleware::new(client.clone(), client.address()); let mut tx = TypedTransaction::Eip1559(Default::default()); @@ -392,7 +405,7 @@ async fn fill_transaction_nonce_middleware() { #[tokio::test] async fn send_nonce_middleware() { - let (_environment, client) = startup_user_controlled().unwrap(); + let (_environment, client) = startup().unwrap(); let nonce_middleware = NonceManagerMiddleware::new(client.clone(), client.address()); let tx = ArbiterToken::deploy( client, @@ -420,7 +433,7 @@ async fn send_nonce_middleware() { #[tokio::test] async fn test_cheatcodes_store() { - let (_environment, client) = startup_randomly_sampled().unwrap(); + let (_environment, client) = startup().unwrap(); // Get the initial storage and assert it is zero. let storage = client .get_storage_at(client.address(), ethers::types::H256::zero(), None) @@ -451,16 +464,14 @@ async fn test_cheatcodes_store() { #[tokio::test] async fn unimplemented_middleware_instruction() { - let (_environment, client) = startup_user_controlled().unwrap(); + let (_environment, client) = startup().unwrap(); // This method is not implemented and likely never will, so it works to test - // what happens when we send an unimplemented instruction. We should get a + // what happens when we send an unimplemented instruction. We shouldget a // "this method is not yet implemented" error. let should_be_error = client.client_version().await; assert!(should_be_error.is_err()); - if let crate::middleware::errors::RevmMiddlewareError::Provider(e) = - should_be_error.unwrap_err() - { + if let arbiter_core::errors::ArbiterCoreError::ProviderError(e) = should_be_error.unwrap_err() { assert_eq!( e.to_string(), ProviderError::CustomError(format!( @@ -476,7 +487,7 @@ async fn unimplemented_middleware_instruction() { #[tokio::test] async fn pubsubclient() { - let (environment, client) = startup_user_controlled().unwrap(); + let (environment, client) = startup().unwrap(); let arbx = deploy_arbx(client.clone()).await.unwrap(); @@ -504,7 +515,7 @@ async fn pubsubclient() { #[test] fn simulation_signer() -> Result<()> { - let (_, client) = startup_user_controlled()?; + let (_, client) = startup()?; assert_eq!( client.address(), Address::from_str("0x2efdc9eecfee3a776209fcb8e9a83a6b221d74f5").unwrap() @@ -514,23 +525,22 @@ fn simulation_signer() -> Result<()> { #[test] fn multiple_signer_addresses() { - let mut environment = builder::EnvironmentBuilder::new().build(); - environment.run(); - let client_1 = RevmMiddleware::new(&environment, Some("0")).unwrap(); - let client_2 = RevmMiddleware::new(&environment, Some("1")).unwrap(); + let environment = Environment::builder().build(); + let client_1 = ArbiterMiddleware::new(&environment, Some("0")).unwrap(); + let client_2 = ArbiterMiddleware::new(&environment, Some("1")).unwrap(); assert_ne!(client_1.address(), client_2.address()); } #[test] fn signer_collision() { - let environment = builder::EnvironmentBuilder::new().build(); - RevmMiddleware::new(&environment, Some("0")).unwrap(); - assert!(RevmMiddleware::new(&environment, Some("0")).is_err()); + let environment = Environment::builder().build(); + ArbiterMiddleware::new(&environment, Some("0")).unwrap(); + assert!(ArbiterMiddleware::new(&environment, Some("0")).is_err()); } #[tokio::test] async fn access() { - let (_environment, client) = startup_user_controlled().unwrap(); + let (_environment, client) = startup().unwrap(); let arbiter_token = deploy_arbx(client.clone()).await.unwrap(); assert_eq!( arbiter_token.address(), @@ -551,20 +561,19 @@ async fn access() { let to: Address = Address::from_str(TEST_MINT_TO).unwrap(); - let bal_before = arbiter_token.balance_of(to.clone()).call().await.unwrap(); + let bal_before = arbiter_token.balance_of(to).call().await.unwrap(); assert_eq!(bal_before, 0.into()); // Mint tokens, altering total supply and balanceOf storage slots. let amount = parse_ether(44.44).unwrap(); let _m = arbiter_token - .mint(to.clone(), amount.clone()) + .mint(to, amount) .send() .await .unwrap() .await .unwrap(); - - let bal_after = arbiter_token.balance_of(to.clone()).call().await.unwrap(); + let bal_after = arbiter_token.balance_of(to).call().await.unwrap(); assert_eq!(bal_after, amount); let total_supply = arbiter_token.total_supply().call().await.unwrap(); @@ -581,16 +590,17 @@ async fn access() { println!("acc_before: {:#?}", acc_before); println!("acc_after: {:#?}", acc_after); - match acc_before { - CheatcodesReturn::Access { storage, .. } => match acc_after { - CheatcodesReturn::Access { - storage: storage_after, - .. - } => { - assert_ne!(storage.len(), storage_after.len()); - } - _ => {} - }, - _ => {} - }; + if let CheatcodesReturn::Access { + storage: storage_before, + .. + } = acc_before + { + if let CheatcodesReturn::Access { + storage: storage_after, + .. + } = acc_after + { + assert_ne!(storage_before.len(), storage_after.len()); + } + } } diff --git a/arbiter-engine/Cargo.toml b/arbiter-engine/Cargo.toml index fef73219b..ebb80572b 100644 --- a/arbiter-engine/Cargo.toml +++ b/arbiter-engine/Cargo.toml @@ -2,7 +2,10 @@ name = "arbiter-engine" version = "0.1.0" edition = "2021" -authors = ["Waylon Jepsen ", "Colin Roberts "] +authors = [ + "Waylon Jepsen ", + "Colin Roberts ", +] description = "Allowing smart contract developers to do simulation driven development via an EVM emulator" license = "Apache-2.0" keywords = ["ethereum", "evm", "emulator", "testing", "smart-contracts"] @@ -12,6 +15,7 @@ homepage = "https://github.com/primitivefinance/arbiter" repository = "https://github.com/primitivefinance/arbiter" [dependencies] +arbiter-macros.workspace = true ethers.workspace = true futures-util.workspace = true async-trait.workspace = true @@ -19,13 +23,14 @@ serde_json.workspace = true serde.workspace = true tokio.workspace = true async-stream.workspace = true -anyhow = { version = "=1.0.79" } tracing.workspace = true -tokio-stream = "0.1.14" +tokio-stream = "0.1.14" futures = "0.3.30" crossbeam-channel.workspace = true arbiter-core.workspace = true arbiter-bindings.workspace = true +thiserror.workspace = true +toml.workspace = true [dev-dependencies] arbiter-core.workspace = true diff --git a/arbiter-engine/src/agent.rs b/arbiter-engine/src/agent.rs index 9ad86c7f5..ff64bd639 100644 --- a/arbiter-engine/src/agent.rs +++ b/arbiter-engine/src/agent.rs @@ -1,138 +1,88 @@ -// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -// TODO: Notes ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -// * Maybe we just use tokio for everything (like `select`) so that we don't mix -// futures and tokio together in ways that may be weird. -// When we start running an agent, we should have their messager start producing -// events that can be used by any and all behaviors the agent has that takes in -// messages as an event. Similarly, we should have agents start up any streams -// listeners that they need so those can also produce events. Those can then be -// piped into the behaviors that need them. Can perhaps make behaviors come from -// very specific events (e.g., specific contract events). This means each -// behavior should be a consumer and perhaps the agent itself is the producer -// (or at least relayer). -// This means we should give agents some way to "start streams" that they can -// then use to produce events. -// Behaviors definitely need to be able to reference the agent's client and -// messager so that they can send messages and interact with the blockchain. -// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - //! The agent module contains the core agent abstraction for the Arbiter Engine. -use std::{fmt::Debug, pin::Pin, sync::Arc}; +use std::{fmt::Debug, sync::Arc}; -use arbiter_core::{data_collection::EventLogger, middleware::RevmMiddleware}; -use ethers::contract::{EthLogDecode, Event}; -use futures::stream::{Stream, StreamExt}; -use futures_util::future::join_all; -use serde::de::DeserializeOwned; -use tokio::{ - sync::broadcast::{channel, Receiver as BroadcastReceiver, Sender as BroadcastSender}, - task::JoinHandle, -}; +use arbiter_core::middleware::ArbiterMiddleware; +use serde::{de::DeserializeOwned, Serialize}; +use thiserror::Error; -use self::machine::MachineInstruction; -use super::*; use crate::{ - machine::{Behavior, Engine, State, StateMachine}, + machine::{Behavior, Engine, StateMachine}, messager::Messager, - world::World, }; -// TODO: For the time being, these agents are just meant to be for arbiter -// instances. We can generalize later. - /// An agent is an entity capable of processing events and producing actions. /// These are the core actors in simulations or in onchain systems. /// Agents can be connected of other agents either as a dependent, or a /// dependency. /// /// # How it works -/// The [`Agent`] works by implementing the [`StateMachine`] trait. When the -/// [`World`] that owns the [`Agent`] is asked to enter into a new state, the -/// [`World`] will ask each [`Agent`] it owns to run that state transition by -/// calling [`StateMachine::run_state`]. All of the [`Agent`]s at once will then -/// will be able to be asked to block and wait to finish their state transition -/// by calling [`StateMachine::transition`]. Ultimately, the [`Agent`] will -/// transition through the following states: -/// 1. [`State::Uninitialized`]: The [`Agent`] has been created, but has not -/// been started. -/// 2. [`State::Syncing`]: The [`Agent`] is syncing with the world. This is -/// where the [`Agent`] can be brought up to date with the latest state of the -/// world. This could be used if the world was stopped and later restarted. -/// 3. [`State::Startup`]: The [`Agent`] is starting up. This is where the -/// [`Agent`] can be initialized and setup. -/// 4. [`State::Processing`]: The [`Agent`] is processing. This is where the -/// [`Agent`] can process events and produce actions. The [`State::Processing`] -/// stage may run for a long time before all [`Agent`]s are finished processing. -/// This is the main stage of the [`Agent`] that predominantly runs automation. -/// 5. [`State::Stopped`]: The [`Agent`] is stopped. This is where the [`Agent`] -/// can be stopped and state of the [`World`] and its [`Agent`]s can be -/// offloaded and saved. +/// When the [`World`] that owns the [`Agent`] is ran, it has each [`Agent`] run +/// each of its [`Behavior`]s `startup()` methods. The [`Behavior`]s themselves +/// will return a stream of events that then let the [`Behavior`] move into the +/// `State::Processing` stage. +#[derive(Debug)] pub struct Agent { /// Identifier for this agent. /// Used for routing messages. pub id: String, - /// The status of the agent. - pub state: State, - /// The messager the agent uses to send and receive messages from other /// agents. - pub messager: Option, + pub messager: Messager, /// The client the agent uses to interact with the blockchain. - pub client: Arc, - - /// The generalized event streamer for the agent that can stream a JSON - /// `String`of any Ethereum event that can be decoded by behaviors. - pub event_streamer: Option, + pub client: Arc, /// The engines/behaviors that the agent uses to sync, startup, and process /// events. - behavior_engines: Option>>, - - /// The pipeline for yielding events from the centralized event streamer - /// (for both messages and Ethereum events) to agents. - pub(crate) distributor: (BroadcastSender, BroadcastReceiver), - - broadcast_task: Option + Send>>>>, + pub(crate) behavior_engines: Vec>, } impl Agent { - /// Produces a new agent with the given identifier. - pub fn new(id: &str, world: &World) -> Self { - let messager = world.messager.for_agent(id); - let client = RevmMiddleware::new(&world.environment, Some(id)).unwrap(); - let distributor = channel(512); - Self { + /// Creates a new [`AgentBuilder`] instance with a specified identifier. + /// + /// This method initializes an [`AgentBuilder`] with the provided `id` and + /// sets the `behavior_engines` field to `None`. The returned + /// [`AgentBuilder`] can be further configured using its methods before + /// finalizing the creation of an [`Agent`]. + /// + /// # Arguments + /// + /// * `id` - A string slice that holds the identifier for the agent being + /// built. + /// + /// # Returns + /// + /// Returns an [`AgentBuilder`] instance that can be used to configure and + /// build an [`Agent`]. + pub fn builder(id: &str) -> AgentBuilder { + AgentBuilder { id: id.to_owned(), - state: State::Uninitialized, - messager: Some(messager), - client, - event_streamer: Some(EventLogger::builder()), behavior_engines: None, - distributor, - broadcast_task: None, } } +} - /// Adds an Ethereum event to the agent's event streamer. - pub fn with_event( - mut self, - event: Event, RevmMiddleware, D>, - ) -> Self { - self.event_streamer = Some(self.event_streamer.take().unwrap().add_stream(event)); - self - } +/// [`AgentBuilder`] represents the intermediate state of agent creation before +/// it is converted into a full on [`Agent`] +pub struct AgentBuilder { + /// Identifier for this agent. + /// Used for routing messages. + pub id: String, + /// The engines/behaviors that the agent uses to sync, startup, and process + /// events. + behavior_engines: Option>>, +} - /// Adds a behavior to the agent that it will run. - pub fn with_behavior( +impl AgentBuilder { + /// Appends a behavior onto an [`AgentBuilder`]. Behaviors are initialized + /// when the agent builder is added to the [`crate::world::World`] + pub fn with_behavior( mut self, - behavior: impl Behavior + 'static, + behavior: impl Behavior + Serialize + DeserializeOwned + 'static, ) -> Self { - let event_receiver = self.distributor.0.subscribe(); - - let engine = Engine::new(behavior, event_receiver); + let engine = Engine::new(behavior); if let Some(engines) = &mut self.behavior_engines { engines.push(Box::new(engine)); } else { @@ -141,171 +91,81 @@ impl Agent { self } - pub(crate) async fn run(&mut self, instruction: MachineInstruction) { - let behavior_engines = self.behavior_engines.take().unwrap(); - let behavior_tasks = join_all(behavior_engines.into_iter().map(|mut engine| { - tokio::spawn(async move { - engine.execute(instruction).await; - engine - }) - })); - self.behavior_engines = Some( - behavior_tasks - .await - .into_iter() - .map(|res| res.unwrap()) - .collect::>(), - ); + /// Adds a state machine engine to the agent builder. + /// + /// This method allows for the addition of a custom state machine engine to + /// the agent's behavior engines. If the agent builder already has some + /// engines, the new engine is appended to the list. If no engines are + /// present, a new list is created with the provided engine as its first + /// element. + /// + /// # Parameters + /// + /// - `engine`: The state machine engine to be added to the agent builder. + /// This engine must + /// implement the `StateMachine` trait and is expected to be provided as a + /// boxed trait object to allow for dynamic dispatch. + /// + /// # Returns + /// + /// Returns the `AgentBuilder` instance to allow for method chaining. + pub(crate) fn with_engine(mut self, engine: Box) -> Self { + if let Some(engines) = &mut self.behavior_engines { + engines.push(engine); + } else { + self.behavior_engines = Some(vec![engine]); + }; + self } -} - -#[async_trait::async_trait] -impl StateMachine for Agent { - #[tracing::instrument(skip(self), fields(id = self.id))] - async fn execute(&mut self, instruction: MachineInstruction) { - match instruction { - MachineInstruction::Sync => { - debug!("Agent is syncing."); - self.state = State::Syncing; - self.run(instruction).await; - } - MachineInstruction::Start => { - debug!("Agent is starting up."); - self.run(instruction).await; - } - MachineInstruction::Process => { - debug!("Agent is processing."); - self.state = State::Processing; - let messager = self.messager.take().unwrap(); - let message_stream = messager - .stream() - .map(|msg| serde_json::to_string(&msg).unwrap_or_else(|e| e.to_string())); - let eth_event_stream = self.event_streamer.take().unwrap().stream(); - - let mut event_stream: Pin + Send + '_>> = - if let Some(event_stream) = eth_event_stream { - trace!("Merging event streams."); - // Convert the individual streams into a Vec - let all_streams = vec![ - Box::pin(message_stream) as Pin + Send>>, - Box::pin(event_stream), - ]; - // Use select_all to combine them - Box::pin(futures::stream::select_all(all_streams)) - } else { - trace!("Agent only sees message stream."); - Box::pin(message_stream) - }; - - let sender = self.distributor.0.clone(); - self.broadcast_task = Some(tokio::spawn(async move { - while let Some(event) = event_stream.next().await { - sender.send(event).unwrap(); - } - event_stream - })); - self.run(instruction).await; - } - MachineInstruction::Stop => { - unreachable!("This is never explicitly called on an agent.") - } + /// Constructs and returns a new [`Agent`] instance using the provided + /// `client` and `messager`. + /// + /// This method finalizes the building process of an [`Agent`] by taking + /// ownership of the builder, and attempting to construct an `Agent` + /// with the accumulated configurations and the provided `client` and + /// `messager`. The `client` is an [`Arc`] that represents + /// the connection to the blockchain or environment, and `messager` is a + /// communication layer for the agent. + /// + /// # Parameters + /// + /// - `client`: A shared [`Arc`] instance that provides the + /// agent with access to the blockchain or environment. + /// - `messager`: A [`Messager`] instance for the agent to communicate with + /// other agents or systems. + /// + /// # Returns + /// + /// Returns a `Result` that, on success, contains the newly created + /// [`Agent`] instance. On failure, it returns an + /// [`AgentBuildError::MissingBehaviorEngines`] error indicating that the + /// agent was attempted to be built without any behavior engines + /// configured. + /// + /// # Examples + /// + /// ```ignore + /// let agent_builder = AgentBuilder::new("agent_id"); + /// let client = Arc::new(RevmMiddleware::new(...)); + /// let messager = Messager::new(...); + /// let agent = agent_builder.build(client, messager).expect("Failed to build agent"); + /// ``` + pub fn build( + self, + client: Arc, + messager: Messager, + ) -> Result { + match self.behavior_engines { + Some(engines) => Ok(Agent { + id: self.id, + messager, + client, + behavior_engines: engines, + }), + None => Err(ArbiterEngineError::AgentBuildError( + "Missing behavior engines".to_owned(), + )), } } } - -#[cfg(test)] -mod tests { - use arbiter_bindings::bindings::arbiter_token::ArbiterToken; - use ethers::types::U256; - - use super::*; - use crate::messager::Message; - - #[tokio::test(flavor = "multi_thread", worker_threads = 4)] - async fn streaming() { - // std::env::set_var("RUST_LOG", "trace"); - // tracing_subscriber::fmt::init(); - - let world = World::new("world"); - let agent = Agent::new("agent", &world); - - let arb = ArbiterToken::deploy( - agent.client.clone(), - ("ArbiterToken".to_string(), "ARB".to_string(), 18u8), - ) - .unwrap() - .send() - .await - .unwrap(); - - let mut agent = agent.with_event(arb.events()); - let address = agent.client.address(); - - // TODO: (START BLOCK) It would be nice to get this block to be a single - // function that isn't copy and pasted from above. - let messager = agent.messager.take().unwrap(); - let message_stream = messager - .stream() - .map(|msg| serde_json::to_string(&msg).unwrap_or_else(|e| e.to_string())); - let eth_event_stream = agent.event_streamer.take().unwrap().stream(); - - let mut event_stream: Pin + Send + '_>> = - if let Some(event_stream) = eth_event_stream { - trace!("Merging event streams."); - let all_streams = vec![ - Box::pin(message_stream) as Pin + Send>>, - Box::pin(event_stream), - ]; - Box::pin(futures::stream::select_all(all_streams)) - } else { - trace!("Agent only sees message stream."); - Box::pin(message_stream) - }; - // TODO: (END BLOCK) - - let outside_messager = world.messager.join_with_id(None); - let message_task = tokio::spawn(async move { - for _ in 0..5 { - outside_messager - .send(Message { - from: "god".to_string(), - to: messager::To::All, - data: "hello".to_string(), - }) - .await; - } - }); - - let eth_event_task = tokio::spawn(async move { - for i in 0..5 { - if i == 0 { - tokio::time::sleep(std::time::Duration::from_secs(1)).await; - } - arb.approve(address, U256::from(1)) - .send() - .await - .unwrap() - .await - .unwrap(); - } - }); - - let mut idx = 0; - let print_task = tokio::spawn(async move { - while let Some(msg) = event_stream.next().await { - println!("Printing message in test: {:?}", msg); - if idx < 5 { - assert_eq!(msg, "{\"from\":\"god\",\"to\":\"All\",\"data\":\"hello\"}"); - } else { - assert_eq!(msg, "{\"ApprovalFilter\":{\"owner\":\"0xe7a46f3d9f0e9b9c02f58f95e3bcee2db54050b0\",\"spender\":\"0xe7a46f3d9f0e9b9c02f58f95e3bcee2db54050b0\",\"amount\":\"0x1\"}}"); - } - idx += 1; - if idx == 10 { - break; - } - } - }); - join_all(vec![message_task, eth_event_task, print_task]).await; - } -} diff --git a/arbiter-engine/src/errors.rs b/arbiter-engine/src/errors.rs new file mode 100644 index 000000000..8dcdce640 --- /dev/null +++ b/arbiter-engine/src/errors.rs @@ -0,0 +1,45 @@ +//! Error types for the arbiter engine. + +use thiserror::Error; + +use super::*; + +/// Errors that can occur in the arbiter engine. +#[derive(Debug, Error)] +pub enum ArbiterEngineError { + /// Error occurred with the [`Messager`]. + #[error("MessagerError: {0}")] + MessagerError(String), + + /// Error occurred with the [`crate::agent::Agent`]. + #[error("AgentBuildError: {0}")] + AgentBuildError(String), + + /// Error occurred with the [`crate::world::World`]. + #[error("WorldError: {0}")] + WorldError(String), + + /// Error occurred with the [`crate::universe::Universe`]. + #[error("UniverseError: {0}")] + UniverseError(String), + + /// Error occurred in joining a task. + #[error(transparent)] + JoinError(#[from] tokio::task::JoinError), + + /// Error occurred in sending a message. + #[error(transparent)] + SendError(#[from] tokio::sync::broadcast::error::SendError), + + /// Error occurred in deserializing json. + #[error(transparent)] + SerdeJsonError(#[from] serde_json::Error), + + /// Error occurred in reading in a file. + #[error(transparent)] + IoError(#[from] std::io::Error), + + /// Error occurred in deserializing toml. + #[error(transparent)] + TomlError(#[from] toml::de::Error), +} diff --git a/arbiter-engine/src/examples/minter/agents/mod.rs b/arbiter-engine/src/examples/minter/agents/mod.rs new file mode 100644 index 000000000..7311e5619 --- /dev/null +++ b/arbiter-engine/src/examples/minter/agents/mod.rs @@ -0,0 +1,7 @@ +use super::*; +pub(crate) mod token_admin; +pub(crate) mod token_requester; + +pub fn default_max_count() -> Option { + Some(5) +} diff --git a/arbiter-engine/src/examples/minter/agents/token_admin.rs b/arbiter-engine/src/examples/minter/agents/token_admin.rs new file mode 100644 index 000000000..5979b3752 --- /dev/null +++ b/arbiter-engine/src/examples/minter/agents/token_admin.rs @@ -0,0 +1,35 @@ +use super::*; + +#[derive(Deserialize, Serialize, Clone, Debug)] +pub(crate) struct TokenAdmin { + /// The identifier of the token admin. + pub token_data: HashMap, + #[serde(skip)] + pub tokens: Option>>, + #[serde(skip)] + pub client: Option>, + #[serde(skip)] + pub messager: Option, + #[serde(default)] + pub count: u64, + #[serde(default = "default_max_count")] + pub max_count: Option, +} + +impl TokenAdmin { + pub fn new(max_count: Option) -> Self { + Self { + token_data: HashMap::new(), + tokens: None, + client: None, + messager: None, + count: 0, + max_count, + } + } + + /// Adds a token to the token admin. + pub fn add_token(&mut self, token_data: TokenData) { + self.token_data.insert(token_data.name.clone(), token_data); + } +} diff --git a/arbiter-engine/src/examples/minter/agents/token_requester.rs b/arbiter-engine/src/examples/minter/agents/token_requester.rs new file mode 100644 index 000000000..41af65f8c --- /dev/null +++ b/arbiter-engine/src/examples/minter/agents/token_requester.rs @@ -0,0 +1,39 @@ +use super::*; + +/// The token requester is responsible for requesting tokens from the token +/// admin. This agents is purely for testing purposes as far as I can tell. +#[derive(Debug, Serialize, Deserialize, Clone)] +pub(crate) struct TokenRequester { + /// The tokens that the token requester has requested. + pub token_data: TokenData, + /// The agent ID to request tokens to. + pub request_to: String, + /// Client to have an address to receive token mint to and check balance + #[serde(skip)] + pub client: Option>, + /// The messaging layer for the token requester. + #[serde(skip)] + pub messager: Option, + #[serde(default)] + pub count: u64, + #[serde(default = "default_max_count")] + pub max_count: Option, +} + +impl TokenRequester { + pub fn new(max_count: Option) -> Self { + Self { + token_data: TokenData { + name: TOKEN_NAME.to_owned(), + symbol: TOKEN_SYMBOL.to_owned(), + decimals: TOKEN_DECIMALS, + address: None, + }, + request_to: TOKEN_ADMIN_ID.to_owned(), + client: None, + messager: None, + count: 0, + max_count, + } + } +} diff --git a/arbiter-engine/src/examples/minter/behaviors/mod.rs b/arbiter-engine/src/examples/minter/behaviors/mod.rs new file mode 100644 index 000000000..2998593ee --- /dev/null +++ b/arbiter-engine/src/examples/minter/behaviors/mod.rs @@ -0,0 +1,3 @@ +use super::*; +pub(crate) mod token_admin; +pub(crate) mod token_requester; diff --git a/arbiter-engine/src/examples/minter/behaviors/token_admin.rs b/arbiter-engine/src/examples/minter/behaviors/token_admin.rs new file mode 100644 index 000000000..0eea2a0b8 --- /dev/null +++ b/arbiter-engine/src/examples/minter/behaviors/token_admin.rs @@ -0,0 +1,107 @@ +use self::{examples::minter::agents::token_admin::TokenAdmin, machine::EventStream}; +use super::*; + +/// Used as an action to ask what tokens are available. +#[derive(Clone, Debug, Deserialize, Serialize)] +pub enum TokenAdminQuery { + /// Get the address of the token. + AddressOf(String), + + /// Mint tokens. + MintRequest(MintRequest), +} + +/// Used as an action to mint tokens. +#[derive(Clone, Debug, Deserialize, Serialize)] +pub struct MintRequest { + /// The token to mint. + pub token: String, + + /// The address to mint to. + pub mint_to: Address, + + /// The amount to mint. + pub mint_amount: u64, +} + +#[async_trait::async_trait] +impl Behavior for TokenAdmin { + #[tracing::instrument(skip(self), fields(id = messager.id.as_deref()))] + async fn startup( + &mut self, + client: Arc, + messager: Messager, + ) -> Result, ArbiterEngineError> { + self.messager = Some(messager.clone()); + self.client = Some(client.clone()); + for token_data in self.token_data.values_mut() { + let token = ArbiterToken::deploy( + client.clone(), + ( + token_data.name.clone(), + token_data.symbol.clone(), + token_data.decimals, + ), + ) + .unwrap() + .send() + .await + .unwrap(); + + token_data.address = Some(token.address()); + self.tokens + .get_or_insert_with(HashMap::new) + .insert(token_data.name.clone(), token.clone()); + } + messager.stream() + } + + #[tracing::instrument(skip(self), fields(id = + self.messager.as_ref().unwrap().id.as_deref()))] + async fn process(&mut self, event: Message) -> Result { + if self.tokens.is_none() { + error!( + "There were no tokens to deploy! You must add tokens to + the token admin before running the simulation." + ); + } + + let query: TokenAdminQuery = serde_json::from_str(&event.data).unwrap(); + trace!("Got query: {:?}", query); + let messager = self.messager.as_ref().unwrap(); + match query { + TokenAdminQuery::AddressOf(token_name) => { + trace!( + "Getting address of token with name: {:?}", + token_name.clone() + ); + let token_data = self.token_data.get(&token_name).unwrap(); + messager + .send(To::Agent(event.from.clone()), token_data.address) + .await; + } + TokenAdminQuery::MintRequest(mint_request) => { + trace!("Minting tokens: {:?}", mint_request); + let token = self + .tokens + .as_ref() + .unwrap() + .get(&mint_request.token) + .unwrap(); + token + .mint(mint_request.mint_to, U256::from(mint_request.mint_amount)) + .send() + .await + .unwrap() + .await + .unwrap(); + self.count += 1; + if self.count == self.max_count.unwrap_or(u64::MAX) { + warn!("Reached max count. Halting behavior."); + return Ok(ControlFlow::Halt); + } + } + } + Ok(ControlFlow::Continue) + } +} diff --git a/arbiter-engine/src/examples/minter/behaviors/token_requester.rs b/arbiter-engine/src/examples/minter/behaviors/token_requester.rs new file mode 100644 index 000000000..58274ed37 --- /dev/null +++ b/arbiter-engine/src/examples/minter/behaviors/token_requester.rs @@ -0,0 +1,68 @@ +use arbiter_bindings::bindings::arbiter_token::TransferFilter; +use arbiter_core::data_collection::EventLogger; +use token_admin::{MintRequest, TokenAdminQuery}; + +use self::{ + errors::ArbiterEngineError, examples::minter::agents::token_requester::TokenRequester, + machine::EventStream, +}; +use super::*; + +#[async_trait::async_trait] +impl Behavior for TokenRequester { + #[tracing::instrument(skip(self), fields(id = messager.id.as_deref()))] + async fn startup( + &mut self, + client: Arc, + mut messager: Messager, + ) -> Result, ArbiterEngineError> { + messager + .send( + To::Agent(self.request_to.clone()), + &TokenAdminQuery::AddressOf(self.token_data.name.clone()), + ) + .await; + let message = messager.get_next().await.unwrap(); + let token_address = serde_json::from_str::
(&message.data).unwrap(); + let token = ArbiterToken::new(token_address, client.clone()); + self.token_data.address = Some(token_address); + + let mint_data = TokenAdminQuery::MintRequest(MintRequest { + token: self.token_data.name.clone(), + mint_to: client.address(), + mint_amount: 1, + }); + messager + .send(To::Agent(self.request_to.clone()), mint_data) + .await; + + self.messager = Some(messager.clone()); + self.client = Some(client.clone()); + Ok(Box::pin( + EventLogger::builder() + .add_stream(token.transfer_filter()) + .stream() + .unwrap() + .map(|value| serde_json::from_str(&value).unwrap()), + )) + } + + #[tracing::instrument(skip(self), fields(id = + self.messager.as_ref().unwrap().id.as_deref()))] + async fn process(&mut self, event: TransferFilter) -> Result { + let messager = self.messager.as_ref().unwrap(); + while (self.count < self.max_count.unwrap()) { + debug!("sending message from requester"); + let mint_data = TokenAdminQuery::MintRequest(MintRequest { + token: self.token_data.name.clone(), + mint_to: self.client.as_ref().unwrap().address(), + mint_amount: 1, + }); + messager + .send(To::Agent(self.request_to.clone()), mint_data) + .await; + self.count += 1; + } + Ok(ControlFlow::Halt) + } +} diff --git a/arbiter-engine/src/examples/minter/config.toml b/arbiter-engine/src/examples/minter/config.toml new file mode 100644 index 000000000..d2beefc3b --- /dev/null +++ b/arbiter-engine/src/examples/minter/config.toml @@ -0,0 +1,10 @@ +# top level id for the `TokenAdmin` agent +[[admin]] +# named struct and arguments for initializing the `TokenAdmin` agent +TokenAdmin = { max_count = 4, token_data = { "US Dollar Coin" = { name = "US Dollar Coin", symbol = "USDC", decimals = 18 } } } + + +# top level id for the `TokenRequester` agent +[[requester]] +# named struct and arguments for initializing the `TokenRequester` agent +TokenRequester = { max_count = 4, request_to = "admin", token_data = { name = "US Dollar Coin", symbol = "USDC", decimals = 18 } } diff --git a/arbiter-engine/src/examples/minter/mod.rs b/arbiter-engine/src/examples/minter/mod.rs new file mode 100644 index 000000000..23515012b --- /dev/null +++ b/arbiter-engine/src/examples/minter/mod.rs @@ -0,0 +1,99 @@ +use super::*; +pub(crate) mod agents; +pub(crate) mod behaviors; +use std::{pin::Pin, str::FromStr, time::Duration}; + +use agents::{token_admin::TokenAdmin, token_requester::TokenRequester}; +use arbiter_core::data_collection::EventLogger; +use arbiter_macros::Behaviors; +use ethers::types::Address; +use futures_util::Stream; +use tokio::time::timeout; +use tracing::error; + +use super::*; +use crate::{ + agent::Agent, + machine::{Behavior, ControlFlow, MachineInstruction, StateMachine}, + messager::To, + world::World, +}; + +const TOKEN_ADMIN_ID: &str = "token_admin"; +const REQUESTER_ID: &str = "requester"; +const TOKEN_NAME: &str = "Arbiter Token"; +const TOKEN_SYMBOL: &str = "ARB"; +const TOKEN_DECIMALS: u8 = 18; + +#[derive(Clone, Debug, Deserialize, Serialize)] +pub(crate) struct TokenData { + pub name: String, + pub symbol: String, + pub decimals: u8, + pub address: Option
, +} + +#[tokio::test(flavor = "multi_thread", worker_threads = 4)] +async fn token_minter_simulation() { + let mut world = World::new("test_world"); + let client = ArbiterMiddleware::new(&world.environment, None).unwrap(); + + // Create the token admin agent + let token_admin = Agent::builder(TOKEN_ADMIN_ID); + let mut token_admin_behavior = TokenAdmin::new(Some(4)); + token_admin_behavior.add_token(TokenData { + name: TOKEN_NAME.to_owned(), + symbol: TOKEN_SYMBOL.to_owned(), + decimals: TOKEN_DECIMALS, + address: None, + }); + // Create the token requester agent + let token_requester = Agent::builder(REQUESTER_ID); + let mut token_requester_behavior = TokenRequester::new(Some(4)); + world.add_agent(token_requester.with_behavior(token_requester_behavior)); + + world.add_agent(token_admin.with_behavior(token_admin_behavior)); + + let arb = ArbiterToken::new( + Address::from_str("0x240a76d4c8a7dafc6286db5fa6b589e8b21fc00f").unwrap(), + client.clone(), + ); + let transfer_event = arb.transfer_filter(); + + let transfer_stream = EventLogger::builder() + .add_stream(arb.transfer_filter()) + .stream() + .unwrap(); + let mut stream = Box::pin(transfer_stream); + world.run().await; + let mut idx = 0; + + loop { + match timeout(Duration::from_secs(1), stream.next()).await { + Ok(Some(event)) => { + println!("Event received in outside world: {:?}", event); + idx += 1; + if idx == 4 { + break; + } + } + _ => { + panic!("Timeout reached. Test failed."); + } + } + } +} + +#[derive(Serialize, Deserialize, Debug, Behaviors)] +enum Behaviors { + TokenAdmin(TokenAdmin), + TokenRequester(TokenRequester), +} + +#[tokio::test(flavor = "multi_thread", worker_threads = 4)] +async fn config_test() { + let mut world = World::new("world"); + world.from_config::("src/examples/minter/config.toml"); + + world.run().await; +} diff --git a/arbiter-engine/src/examples/minter/token_minter.rs b/arbiter-engine/src/examples/minter/token_minter.rs new file mode 100644 index 000000000..e1df78e29 --- /dev/null +++ b/arbiter-engine/src/examples/minter/token_minter.rs @@ -0,0 +1,75 @@ +use std::{str::FromStr, time::Duration}; + +use agents::{token_admin::TokenAdmin, token_requester::TokenRequester}; +use arbiter_core::data_collection::EventLogger; +use arbiter_macros::Behaviors; +use ethers::types::Address; +use tokio::time::timeout; + +use super::*; +use crate::world::World; + +#[tokio::test(flavor = "multi_thread", worker_threads = 4)] +async fn token_minter_simulation() { + let mut world = World::new("test_world"); + let client = RevmMiddleware::new(&world.environment, None).unwrap(); + + // Create the token admin agent + let token_admin = Agent::builder(TOKEN_ADMIN_ID); + let mut token_admin_behavior = TokenAdmin::new(Some(4)); + token_admin_behavior.add_token(TokenData { + name: TOKEN_NAME.to_owned(), + symbol: TOKEN_SYMBOL.to_owned(), + decimals: TOKEN_DECIMALS, + address: None, + }); + // Create the token requester agent + let token_requester = Agent::builder(REQUESTER_ID); + let mut token_requester_behavior = TokenRequester::new(Some(4)); + world.add_agent(token_requester.with_behavior(token_requester_behavior)); + + world.add_agent(token_admin.with_behavior(token_admin_behavior)); + + let arb = ArbiterToken::new( + Address::from_str("0x240a76d4c8a7dafc6286db5fa6b589e8b21fc00f").unwrap(), + client.clone(), + ); + let transfer_event = arb.transfer_filter(); + + let transfer_stream = EventLogger::builder() + .add_stream(arb.transfer_filter()) + .stream() + .unwrap(); + let mut stream = Box::pin(transfer_stream); + world.run().await; + let mut idx = 0; + + loop { + match timeout(Duration::from_secs(1), stream.next()).await { + Ok(Some(event)) => { + println!("Event received in outside world: {:?}", event); + idx += 1; + if idx == 4 { + break; + } + } + _ => { + panic!("Timeout reached. Test failed."); + } + } + } +} + +#[derive(Serialize, Deserialize, Debug, Behaviors)] +enum Behaviors { + TokenAdmin(TokenAdmin), + TokenRequester(TokenRequester), +} + +#[tokio::test(flavor = "multi_thread", worker_threads = 4)] +async fn config_test() { + let mut world = World::new("world"); + world.build_with_config::("src/examples/minter/config.toml"); + + world.run().await; +} diff --git a/arbiter-engine/src/examples/mod.rs b/arbiter-engine/src/examples/mod.rs index 5ca2c05e4..ad22bf1af 100644 --- a/arbiter-engine/src/examples/mod.rs +++ b/arbiter-engine/src/examples/mod.rs @@ -1,22 +1,24 @@ #![warn(missing_docs)] #![allow(unused)] -// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -// TODO: Notes ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -// Create a BlockAdmin and a TokenAdmin. -// Potentially create an `Orchestrator`` that sends instructions to both -// BlockAdmin and TokenAdmin. -// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - //! The examples module contains example strategies. - use std::{collections::HashMap, sync::Arc}; use arbiter_bindings::bindings::arbiter_token::ArbiterToken; -use arbiter_core::middleware::RevmMiddleware; +use arbiter_core::middleware::ArbiterMiddleware; use ethers::types::{transaction::eip2718::TypedTransaction, Address, Log, U256}; use futures_util::{stream, StreamExt}; use super::*; -use crate::messager::{Message, Messager}; -mod timed_message; -mod token_minter; +use crate::{ + agent::Agent, + errors::ArbiterEngineError, + machine::{ + Behavior, ControlFlow, CreateStateMachine, Engine, EventStream, State, StateMachine, + }, + messager::{Message, Messager, To}, + world::World, +}; +#[cfg(test)] +pub(crate) mod minter; +#[cfg(test)] +pub(crate) mod timed_message; diff --git a/arbiter-engine/src/examples/timed_message.rs b/arbiter-engine/src/examples/timed_message.rs deleted file mode 100644 index 74d957482..000000000 --- a/arbiter-engine/src/examples/timed_message.rs +++ /dev/null @@ -1,254 +0,0 @@ -#[cfg(test)] - -const AGENT_ID: &str = "agent"; - -use std::time::Duration; - -use tokio::time::timeout; - -use self::machine::MachineHalt; -use super::*; -use crate::{ - agent::Agent, - machine::{Behavior, Engine, State, StateMachine}, - messager::To, - world::World, -}; - -struct TimedMessage { - delay: u64, - receive_data: String, - send_data: String, - messager: Messager, - count: u64, - max_count: Option, -} - -#[async_trait::async_trait] -impl Behavior for TimedMessage { - async fn process(&mut self, event: Message) -> Option { - trace!("Processing event."); - if event.data == self.receive_data { - trace!("Event matches message. Sending a new message."); - let message = Message { - from: self.messager.id.clone().unwrap(), - to: To::All, - data: self.send_data.clone(), - }; - self.messager.send(message).await; - self.count += 1; - } - if self.count == self.max_count.unwrap_or(u64::MAX) { - warn!("Reached max count. Halting behavior."); - return Some(MachineHalt); - } - - tokio::time::sleep(std::time::Duration::from_secs(self.delay)).await; - trace!("Processed event."); - None - } - - async fn sync(&mut self) { - trace!("Syncing state for `TimedMessage`."); - tokio::time::sleep(std::time::Duration::from_secs(self.delay)).await; - trace!("Synced state for `TimedMessage`."); - } - - async fn startup(&mut self) { - trace!("Starting up `TimedMessage`."); - tokio::time::sleep(std::time::Duration::from_secs(self.delay)).await; - trace!("Started up `TimedMessage`."); - } -} - -#[tokio::test(flavor = "multi_thread", worker_threads = 4)] -async fn echoer() { - // std::env::set_var("RUST_LOG", "trace"); - // tracing_subscriber::fmt::init(); - - let mut world = World::new("world"); - - let agent = Agent::new(AGENT_ID, &world); - let behavior = TimedMessage { - delay: 1, - receive_data: "Hello, world!".to_owned(), - send_data: "Hello, world!".to_owned(), - messager: agent - .messager - .as_ref() - .unwrap() - .join_with_id(Some(AGENT_ID.to_owned())), - count: 0, - max_count: Some(2), - }; - world.add_agent(agent.with_behavior(behavior)); - - let messager = world.messager.join_with_id(Some("god".to_owned())); - let task = world.run(); - - let message = Message { - from: "god".to_owned(), - to: To::Agent("agent".to_owned()), - data: "Hello, world!".to_owned(), - }; - messager.send(message).await; - task.await; - - let mut stream = Box::pin(messager.stream()); - let mut idx = 0; - - loop { - match timeout(Duration::from_secs(1), stream.next()).await { - Ok(Some(event)) => { - println!("Event received in outside world: {:?}", event); - idx += 1; - if idx == 2 { - break; - } - } - _ => { - panic!("Timeout reached. Test failed."); - } - } - } -} - -#[tokio::test(flavor = "multi_thread", worker_threads = 4)] -async fn ping_pong() { - // std::env::set_var("RUST_LOG", "trace"); - // tracing_subscriber::fmt::init(); - - let mut world = World::new("world"); - - let agent = Agent::new(AGENT_ID, &world); - let behavior_ping = TimedMessage { - delay: 1, - receive_data: "pong".to_owned(), - send_data: "ping".to_owned(), - messager: agent - .messager - .as_ref() - .unwrap() - .join_with_id(Some(AGENT_ID.to_owned())), - count: 0, - max_count: Some(2), - }; - let behavior_pong = TimedMessage { - delay: 1, - receive_data: "ping".to_owned(), - send_data: "pong".to_owned(), - messager: agent - .messager - .as_ref() - .unwrap() - .join_with_id(Some(AGENT_ID.to_owned())), - count: 0, - max_count: Some(2), - }; - - world.add_agent( - agent - .with_behavior(behavior_ping) - .with_behavior(behavior_pong), - ); - - let messager = world.messager.join_with_id(Some("god".to_owned())); - let task = world.run(); - - let init_message = Message { - from: "god".to_owned(), - to: To::Agent("agent".to_owned()), - data: "ping".to_owned(), - }; - messager.send(init_message).await; - - task.await; - - let mut stream = Box::pin(messager.stream()); - let mut idx = 0; - - loop { - match timeout(Duration::from_secs(1), stream.next()).await { - Ok(Some(event)) => { - println!("Event received in outside world: {:?}", event); - idx += 1; - if idx == 4 { - break; - } - } - _ => { - panic!("Timeout reached. Test failed."); - } - } - } -} - -#[tokio::test(flavor = "multi_thread", worker_threads = 4)] -async fn ping_pong_two_agent() { - // std::env::set_var("RUST_LOG", "trace"); - // tracing_subscriber::fmt::init(); - - let mut world = World::new("world"); - - let agent_ping = Agent::new("agent_ping", &world); - let behavior_ping = TimedMessage { - delay: 1, - receive_data: "pong".to_owned(), - send_data: "ping".to_owned(), - messager: agent_ping - .messager - .as_ref() - .unwrap() - .join_with_id(Some("agent_ping".to_owned())), - count: 0, - max_count: Some(2), - }; - - let agent_pong = Agent::new("agent_pong", &world); - let behavior_pong = TimedMessage { - delay: 1, - receive_data: "ping".to_owned(), - send_data: "pong".to_owned(), - messager: agent_pong - .messager - .as_ref() - .unwrap() - .join_with_id(Some("agent_pong".to_owned())), - count: 0, - max_count: Some(2), - }; - - world.add_agent(agent_ping.with_behavior(behavior_ping)); - world.add_agent(agent_pong.with_behavior(behavior_pong)); - - let messager = world.messager.join_with_id(Some("god".to_owned())); - let task = world.run(); - - let init_message = Message { - from: "god".to_owned(), - to: To::All, - data: "ping".to_owned(), - }; - - messager.send(init_message).await; - - task.await; - - let mut stream = Box::pin(messager.stream()); - let mut idx = 0; - - loop { - match timeout(Duration::from_secs(1), stream.next()).await { - Ok(Some(event)) => { - println!("Event received in outside world: {:?}", event); - idx += 1; - if idx == 5 { - break; - } - } - _ => { - panic!("Timeout reached. Test failed."); - } - } - } -} diff --git a/arbiter-engine/src/examples/timed_message/config.toml b/arbiter-engine/src/examples/timed_message/config.toml new file mode 100644 index 000000000..8ef7e5ddd --- /dev/null +++ b/arbiter-engine/src/examples/timed_message/config.toml @@ -0,0 +1,11 @@ +[[ping]] +TimedMessage = { delay = 1, send_data = "ping", receive_data = "pong", startup_message = "ping" } + +[[ping]] +TimedMessage = { delay = 1, send_data = "zam", receive_data = "zim", startup_message = "zam" } + +[[pong]] +TimedMessage = { delay = 1, send_data = "pong", receive_data = "ping" } + +[[pong]] +TimedMessage = { delay = 1, send_data = "zim", receive_data = "zam" } diff --git a/arbiter-engine/src/examples/timed_message/mod.rs b/arbiter-engine/src/examples/timed_message/mod.rs new file mode 100644 index 000000000..6413b324c --- /dev/null +++ b/arbiter-engine/src/examples/timed_message/mod.rs @@ -0,0 +1,210 @@ +use super::*; + +const AGENT_ID: &str = "agent"; + +use std::{pin::Pin, time::Duration}; + +use arbiter_macros::Behaviors; +use ethers::types::BigEndianHash; +use futures_util::Stream; +use serde::*; +use tokio::time::timeout; + +use super::*; + +fn default_max_count() -> Option { + Some(3) +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub(crate) struct TimedMessage { + delay: u64, + receive_data: String, + send_data: String, + #[serde(skip)] + messager: Option, + #[serde(default)] + count: u64, + #[serde(default = "default_max_count")] + max_count: Option, + startup_message: Option, +} + +impl TimedMessage { + pub fn new( + delay: u64, + receive_data: String, + send_data: String, + max_count: Option, + startup_message: Option, + ) -> Self { + Self { + delay, + receive_data, + send_data, + messager: None, + count: 0, + max_count, + startup_message, + } + } +} + +#[async_trait::async_trait] +impl Behavior for TimedMessage { + async fn startup( + &mut self, + _client: Arc, + messager: Messager, + ) -> Result, ArbiterEngineError> { + if let Some(startup_message) = &self.startup_message { + messager.send(To::All, startup_message).await; + } + self.messager = Some(messager.clone()); + messager.stream() + } + + async fn process(&mut self, event: Message) -> Result { + if event.data == serde_json::to_string(&self.receive_data).unwrap() { + let messager = self.messager.clone().unwrap(); + messager.send(To::All, self.send_data.clone()).await; + self.count += 1; + } + if self.count == self.max_count.unwrap_or(u64::MAX) { + return Ok(ControlFlow::Halt); + } + Ok(ControlFlow::Continue) + } +} + +#[tokio::test(flavor = "multi_thread", worker_threads = 4)] +async fn echoer() { + let mut world = World::new("world"); + + let agent = Agent::builder(AGENT_ID); + let behavior = TimedMessage::new( + 1, + "Hello, world!".to_owned(), + "Hello, world!".to_owned(), + Some(2), + Some("Hello, world!".to_owned()), + ); + world.add_agent(agent.with_behavior(behavior)); + let messager = world.messager.for_agent("outside_world"); + + world.run().await; + + let mut stream = messager.stream().unwrap(); + let mut idx = 0; + + loop { + match timeout(Duration::from_secs(1), stream.next()).await { + Ok(Some(event)) => { + println!("Event received in outside world: {:?}", event); + idx += 1; + if idx == 2 { + break; + } + } + _ => { + panic!("Timeout reached. Test failed."); + } + } + } +} + +#[tokio::test(flavor = "multi_thread", worker_threads = 4)] +async fn ping_pong() { + let mut world = World::new("world"); + + let agent = Agent::builder(AGENT_ID); + let behavior_ping = TimedMessage::new( + 1, + "pong".to_owned(), + "ping".to_owned(), + Some(2), + Some("ping".to_owned()), + ); + let behavior_pong = TimedMessage::new(1, "ping".to_owned(), "pong".to_owned(), Some(2), None); + + world.add_agent( + agent + .with_behavior(behavior_ping) + .with_behavior(behavior_pong), + ); + + let messager = world.messager.for_agent("outside_world"); + world.run().await; + + let mut stream = messager.stream().unwrap(); + let mut idx = 0; + + loop { + match timeout(Duration::from_secs(1), stream.next()).await { + Ok(Some(event)) => { + println!("Event received in outside world: {:?}", event); + idx += 1; + if idx == 4 { + break; + } + } + _ => { + panic!("Timeout reached. Test failed."); + } + } + } +} + +#[tokio::test(flavor = "multi_thread", worker_threads = 4)] +async fn ping_pong_two_agent() { + let mut world = World::new("world"); + + let agent_ping = Agent::builder("agent_ping"); + let agent_pong = Agent::builder("agent_pong"); + + let behavior_ping = TimedMessage::new( + 1, + "pong".to_owned(), + "ping".to_owned(), + Some(2), + Some("ping".to_owned()), + ); + let behavior_pong = TimedMessage::new(1, "ping".to_owned(), "pong".to_owned(), Some(2), None); + + world.add_agent(agent_ping.with_behavior(behavior_ping)); + world.add_agent(agent_pong.with_behavior(behavior_pong)); + + let messager = world.messager.for_agent("outside_world"); + world.run().await; + + let mut stream = messager.stream().unwrap(); + let mut idx = 0; + + loop { + match timeout(Duration::from_secs(1), stream.next()).await { + Ok(Some(event)) => { + println!("Event received in outside world: {:?}", event); + idx += 1; + if idx == 5 { + break; + } + } + _ => { + panic!("Timeout reached. Test failed."); + } + } + } +} + +#[derive(Serialize, Deserialize, Debug, Behaviors)] +enum Behaviors { + TimedMessage(TimedMessage), +} + +#[tokio::test(flavor = "multi_thread", worker_threads = 4)] +async fn config_test() { + let mut world = World::new("world"); + world.from_config::("src/examples/timed_message/config.toml"); + + world.run().await; +} diff --git a/arbiter-engine/src/examples/token_minter.rs b/arbiter-engine/src/examples/token_minter.rs deleted file mode 100644 index f75f7ef49..000000000 --- a/arbiter-engine/src/examples/token_minter.rs +++ /dev/null @@ -1,384 +0,0 @@ -use std::{str::FromStr, time::Duration}; - -use anyhow::Context; -use arbiter_bindings::bindings::arbiter_token; -use arbiter_core::data_collection::EventLogger; -use ethers::{ - abi::token, - types::{transaction::request, Filter}, -}; -use tokio::time::timeout; -use tracing::error; - -use self::machine::MachineHalt; -use super::*; -use crate::{ - agent::Agent, - machine::{Behavior, MachineInstruction, StateMachine}, - messager::To, - world::World, -}; - -const TOKEN_ADMIN_ID: &str = "token_admin"; -const REQUESTER_ID: &str = "requester"; -const TOKEN_NAME: &str = "Arbiter Token"; -const TOKEN_SYMBOL: &str = "ARB"; -const TOKEN_DECIMALS: u8 = 18; - -/// The token admin is responsible for handling token minting requests. -#[derive(Debug)] -pub struct TokenAdmin { - /// The identifier of the token admin. - pub token_data: HashMap, - - pub tokens: Option>>, - - // TODO: We should not have to have a client or a messager put here - // explicitly, they should come from the Agent the behavior is given to. - pub client: Arc, - pub messager: Messager, - - count: u64, - - max_count: Option, -} - -impl TokenAdmin { - pub fn new( - client: Arc, - messager: Messager, - count: u64, - max_count: Option, - ) -> Self { - Self { - token_data: HashMap::new(), - tokens: None, - client, - messager, - count, - max_count, - } - } - - /// Adds a token to the token admin. - pub fn add_token(&mut self, token_data: TokenData) { - self.token_data.insert(token_data.name.clone(), token_data); - } -} - -#[derive(Clone, Debug, Deserialize, Serialize)] -pub struct TokenData { - pub name: String, - pub symbol: String, - pub decimals: u8, - pub address: Option
, -} - -/// Used as an action to ask what tokens are available. -#[derive(Clone, Debug, Deserialize, Serialize)] -pub enum TokenAdminQuery { - /// Get the address of the token. - AddressOf(String), - - /// Mint tokens. - MintRequest(MintRequest), -} - -/// Used as an action to mint tokens. -#[derive(Clone, Debug, Deserialize, Serialize)] -pub struct MintRequest { - /// The token to mint. - pub token: String, - - /// The address to mint to. - pub mint_to: Address, - - /// The amount to mint. - pub mint_amount: u64, -} - -#[async_trait::async_trait] -impl Behavior for TokenAdmin { - #[tracing::instrument(skip(self), fields(id = -self.messager.id.as_deref()))] - async fn sync(&mut self) { - for token_data in self.token_data.values_mut() { - let token = ArbiterToken::deploy( - self.client.clone(), - ( - token_data.name.clone(), - token_data.symbol.clone(), - token_data.decimals, - ), - ) - .unwrap() - .send() - .await - .unwrap(); - token_data.address = Some(token.address()); - self.tokens - .get_or_insert_with(HashMap::new) - .insert(token_data.name.clone(), token.clone()); - debug!("Deployed token: {:?}", token); - } - } - - #[tracing::instrument(skip(self), fields(id = -self.messager.id.as_deref()))] - async fn process(&mut self, event: Message) -> Option { - if self.tokens.is_none() { - error!( - "There were no tokens to deploy! You must add tokens to -the token admin before running the simulation." - ); - } - - let query: TokenAdminQuery = serde_json::from_str(&event.data).unwrap(); - trace!("Got query: {:?}", query); - match query { - TokenAdminQuery::AddressOf(token_name) => { - trace!( - "Getting address of token with name: {:?}", - token_name.clone() - ); - let token_data = self.token_data.get(&token_name).unwrap(); - let message = Message { - from: self.messager.id.clone().unwrap(), - to: To::Agent(event.from.clone()), // Reply back to sender - data: serde_json::to_string(token_data).unwrap(), - }; - self.messager.send(message).await; - } - TokenAdminQuery::MintRequest(mint_request) => { - trace!("Minting tokens: {:?}", mint_request); - let token = self - .tokens - .as_ref() - .unwrap() - .get(&mint_request.token) - .unwrap(); - token - .mint(mint_request.mint_to, U256::from(mint_request.mint_amount)) - .send() - .await - .unwrap() - .await - .unwrap(); - self.count += 1; - if self.count == self.max_count.unwrap_or(u64::MAX) { - warn!("Reached max count. Halting behavior."); - return Some(MachineHalt); - } - } - } - None - } -} - -/// The token requester is responsible for requesting tokens from the token -/// admin. This agents is purely for testing purposes as far as I can tell. -#[derive(Debug)] -pub struct TokenRequester { - /// The tokens that the token requester has requested. - pub token_data: TokenData, - - /// The agent ID to request tokens to. - pub request_to: String, - - /// Client to have an address to receive token mint to and check balance - pub client: Arc, - - /// The messaging layer for the token requester. - pub messager: Messager, - - pub count: u64, - - pub max_count: Option, -} - -impl TokenRequester { - pub fn new( - client: Arc, - messager: Messager, - count: u64, - max_count: Option, - ) -> Self { - Self { - token_data: TokenData { - name: TOKEN_NAME.to_owned(), - symbol: TOKEN_SYMBOL.to_owned(), - decimals: TOKEN_DECIMALS, - address: None, - }, - request_to: TOKEN_ADMIN_ID.to_owned(), - client, - messager, - count, - max_count, - } - } -} - -#[async_trait::async_trait] -impl Behavior for TokenRequester { - #[tracing::instrument(skip(self), fields(id = -self.messager.id.as_deref()))] - async fn startup(&mut self) { - trace!("Requesting address of token: {:?}", self.token_data.name); - let message = Message { - from: self.messager.id.clone().unwrap(), - to: To::Agent(self.request_to.clone()), - data: serde_json::to_string(&TokenAdminQuery::AddressOf(self.token_data.name.clone())) - .unwrap(), - }; - self.messager.send(message).await; - } - - #[tracing::instrument(skip(self), fields(id = -self.messager.id.as_deref()))] - async fn process(&mut self, event: Message) -> Option { - if let Ok(token_data) = serde_json::from_str::(&event.data) { - trace!( - "Got -token data: {:?}", - token_data - ); - trace!( - "Requesting first mint of -token: {:?}", - self.token_data.name - ); - let message = Message { - from: self.messager.id.clone().unwrap(), - to: To::Agent(self.request_to.clone()), - data: serde_json::to_string(&TokenAdminQuery::MintRequest(MintRequest { - token: self.token_data.name.clone(), - mint_to: self.client.address(), - mint_amount: 1, - })) - .unwrap(), - }; - self.messager.send(message).await; - } - Some(MachineHalt) - } -} - -#[async_trait::async_trait] -impl Behavior for TokenRequester { - #[tracing::instrument(skip(self), fields(id = -self.messager.id.as_deref()))] - async fn process(&mut self, event: arbiter_token::TransferFilter) -> Option { - trace!( - "Got event for -`TokenRequester` logger: {:?}", - event - ); - std::thread::sleep(std::time::Duration::from_secs(1)); - let message = Message { - from: self.messager.id.clone().unwrap(), - to: To::Agent(self.request_to.clone()), - data: serde_json::to_string(&TokenAdminQuery::MintRequest(MintRequest { - token: self.token_data.name.clone(), - mint_to: self.client.address(), - mint_amount: 1, - })) - .unwrap(), - }; - self.messager.send(message).await; - self.count += 1; - if self.count == self.max_count.unwrap_or(u64::MAX) { - warn!("Reached max count. Halting behavior."); - return Some(MachineHalt); - } - None - } -} - -#[ignore] -#[tokio::test(flavor = "multi_thread", worker_threads = 4)] -async fn token_minter_simulation() { - // std::env::set_var("RUST_LOG", "trace"); - // tracing_subscriber::fmt::init(); - - let mut world = World::new("test_world"); - - // Create the token admin agent - let token_admin = Agent::new(TOKEN_ADMIN_ID, &world); - let mut token_admin_behavior = TokenAdmin::new( - token_admin.client.clone(), - token_admin - .messager - .as_ref() - .unwrap() - .join_with_id(Some(TOKEN_ADMIN_ID.to_owned())), - 0, - Some(4), - ); - token_admin_behavior.add_token(TokenData { - name: TOKEN_NAME.to_owned(), - symbol: TOKEN_SYMBOL.to_owned(), - decimals: TOKEN_DECIMALS, - address: None, - }); - world.add_agent(token_admin.with_behavior(token_admin_behavior)); - - // Create the token requester agent - let token_requester = Agent::new(REQUESTER_ID, &world); - let token_requester_behavior = TokenRequester::new( - token_requester.client.clone(), - token_requester - .messager - .as_ref() - .unwrap() - .join_with_id(Some(REQUESTER_ID.to_owned())), - 0, - Some(4), - ); - let arb = ArbiterToken::new( - Address::from_str("0x240a76d4c8a7dafc6286db5fa6b589e8b21fc00f").unwrap(), - token_requester.client.clone(), - ); - let transfer_event = arb.transfer_filter(); - - let token_requester_behavior_again = TokenRequester::new( - token_requester.client.clone(), - token_requester - .messager - .as_ref() - .unwrap() - .join_with_id(Some(REQUESTER_ID.to_owned())), - 0, - Some(4), - ); - world.add_agent( - token_requester - .with_behavior::(token_requester_behavior) - .with_behavior::(token_requester_behavior_again) - .with_event(transfer_event), - ); - - let transfer_stream = EventLogger::builder() - .add_stream(arb.transfer_filter()) - .stream() - .unwrap(); - let mut stream = Box::pin(transfer_stream); - let mut idx = 0; - - world.run().await; - - loop { - match timeout(Duration::from_secs(1), stream.next()).await { - Ok(Some(event)) => { - println!("Event received in outside world: {:?}", event); - idx += 1; - if idx == 4 { - break; - } - } - _ => { - panic!("Timeout reached. Test failed."); - } - } - } -} diff --git a/arbiter-engine/src/lib.rs b/arbiter-engine/src/lib.rs index 1a2869242..b304a573b 100644 --- a/arbiter-engine/src/lib.rs +++ b/arbiter-engine/src/lib.rs @@ -5,14 +5,20 @@ //! distributed fashion where each agent is running in its own process and //! communicating with other agents via a messaging layer. -use std::collections::HashMap; +use std::{collections::HashMap, fmt::Debug, sync::Arc}; -use serde::{Deserialize, Serialize}; -#[allow(unused)] +use arbiter_core::middleware::RevmMiddleware; +use futures_util::future::join_all; +use serde::{de::DeserializeOwned, Deserialize, Serialize}; +use tokio::task::{spawn, JoinError}; use tracing::{debug, trace, warn}; +use crate::{errors::ArbiterEngineError, messager::Messager}; + pub mod agent; +pub mod errors; pub mod examples; pub mod machine; pub mod messager; +pub mod universe; pub mod world; diff --git a/arbiter-engine/src/machine.rs b/arbiter-engine/src/machine.rs index c16cd623f..746fabca6 100644 --- a/arbiter-engine/src/machine.rs +++ b/arbiter-engine/src/machine.rs @@ -1,37 +1,48 @@ //! The [`StateMachine`] trait, [`Behavior`] trait, and the [`Engine`] that runs //! [`Behavior`]s. -use std::fmt::Debug; +use std::pin::Pin; -use serde::de::DeserializeOwned; -use tokio::sync::broadcast::Receiver; +use arbiter_core::middleware::ArbiterMiddleware; +use futures_util::{Stream, StreamExt}; +use tokio::task::JoinHandle; use super::*; +/// A type alias for a pinned, boxed stream of events. +/// +/// This stream is capable of handling items of any type that implements the +/// `Stream` trait, and it is both sendable across threads and synchronizable +/// between threads. +/// +/// # Type Parameters +/// +/// * `E`: The type of the items in the stream. +pub type EventStream = Pin + Send + Sync>>; + /// The instructions that can be sent to a [`StateMachine`]. -#[derive(Clone, Copy, Debug)] +#[derive(Clone, Debug)] pub enum MachineInstruction { - /// Used to make a [`StateMachine`] sync with the world. - Sync, - /// Used to make a [`StateMachine`] start up. - Start, + Start(Arc, Messager), /// Used to make a [`StateMachine`] process events. /// This will offload the process into a task that can be halted by sending - /// a [`MachineHalt`] message from the [`Messager`]. For our purposes, the - /// [`crate::world::World`] will handle this. + /// a [`ControlFlow::Halt`] message from the [`Messager`]. For our purposes, + /// the [`crate::world::World`] will handle this. Process, - - /// Used to make a [`StateMachine`] stop. Only applicable for the - /// [`crate::world::World`] currently. - Stop, } -/// The message that can be used in a [`StateMachine`] to halt its processing. -/// Optionally returned by [`Behavior::process`] to close tasks. +/// The message that is used in a [`StateMachine`] to continue or halt its +/// processing. #[derive(Clone, Copy, Debug, Serialize, Deserialize)] -pub struct MachineHalt; +pub enum ControlFlow { + /// Used to halt the processing of a [`StateMachine`]. + Halt, + + /// Used to continue on the processing of a [`StateMachine`]. + Continue, +} /// The state used by any entity implementing [`StateMachine`]. #[derive(Clone, Copy, Debug)] @@ -40,12 +51,6 @@ pub enum State { /// This is the state adopted by the entity when it is first created. Uninitialized, - /// The entity is syncing with the world. - /// This can be used to bring the entity back up to date with the latest - /// state of the world. This could be used if the world was stopped and - /// later restarted. - Syncing, - /// The entity is starting up. /// This is where the entity can engage in its specific start up activities /// that it can do given the current state of the world. @@ -56,10 +61,6 @@ pub enum State { /// This is where the entity can engage in its specific processing /// of events that can lead to actions being taken. Processing, - - /// The entity is stopped. - /// This is where state can be offloaded and saved if need be. - Stopped, } // NOTE: `async_trait::async_trait` is used throughout to make the trait object @@ -68,64 +69,136 @@ pub enum State { /// The [`Behavior`] trait is the lowest level functionality that will be used /// by a [`StateMachine`]. This constitutes what each state transition will do. #[async_trait::async_trait] -pub trait Behavior: Send + Sync + 'static { - /// Used to bring the agent back up to date with the latest state of the - /// world. This could be used if the world was stopped and later restarted. - async fn sync(&mut self) {} - +pub trait Behavior: Serialize + DeserializeOwned + Send + Sync + Debug + 'static { /// Used to start the agent. /// This is where the agent can engage in its specific start up activities /// that it can do given the current state of the world. - async fn startup(&mut self) {} + async fn startup( + &mut self, + client: Arc, + messager: Messager, + ) -> EventStream; /// Used to process events. /// This is where the agent can engage in its specific processing /// of events that can lead to actions being taken. - async fn process(&mut self, event: E) -> Option; + async fn process(&mut self, event: E) -> Result; +} +/// A trait for creating a state machine. +/// +/// This trait is intended to be implemented by types that can be converted into +/// a state machine. A state machine, in this context, is an entity capable of +/// executing a set of instructions or operations based on its current state and +/// inputs it receives. +/// +/// Implementers of this trait should provide the logic to initialize and return +/// a new instance of a state machine, encapsulated within a `Box`. This allows for dynamic dispatch to the state machine's +/// methods, enabling polymorphism where different types of state machines can +/// be used interchangeably at runtime. +/// +/// # Returns +/// +/// - `Box`: A boxed state machine object that can be +/// dynamically dispatched. +pub trait CreateStateMachine { + /// Creates and returns a new state machine instance. + /// + /// This method consumes the implementer and returns a new instance of a + /// state machine encapsulated within a `Box`. The + /// specific type of the state machine returned can vary, allowing for + /// flexibility and reuse of the state machine logic across + /// different contexts. + fn create_state_machine(self) -> Box; } - #[async_trait::async_trait] -pub(crate) trait StateMachine: Send + Sync + 'static { - async fn execute(&mut self, instruction: MachineInstruction); +/// A trait defining the capabilities of a state machine within the system. +/// +/// This trait is designed to be implemented by entities that can execute +/// instructions based on their current state and inputs they receive. The +/// execution of these instructions is asynchronous, allowing for non-blocking +/// operations within the state machine's logic. +/// +/// Implementers of this trait must be able to be sent across threads and shared +/// among threads safely, hence the `Send`, `Sync`, and `'static` bounds. They +/// should also support debugging through the `Debug` trait. +pub trait StateMachine: Send + Sync + Debug + 'static { + /// Executes a given instruction asynchronously. + /// + /// This method takes a mutable reference to self, allowing the state + /// machine to modify its state in response to the instruction. The + /// instruction to be executed is passed as an argument, encapsulating the + /// action to be performed by the state machine. + /// + /// # Parameters + /// + /// - `instruction`: The instruction that the state machine is to execute. + /// + /// # Returns + /// + /// This method does not return a value, but it may result in state changes + /// within the implementing type or the generation of further instructions + /// or events. + async fn execute(&mut self, instruction: MachineInstruction) -> Result<(), ArbiterEngineError>; } -/// The idea of the [`Engine`] is that it drives the [`Behavior`] of a -/// [`StateMachine`]-based entity (like an [`agent::Agent`]). -/// The [`Engine`] specifically wraps a [`Behavior`] and a [`Receiver`] of -/// events into a cohesive unit that can listen to events and pass them onto the -/// processor stage. Since the [`Engine`] is also a [`StateMachine`], its -/// generics can be collapsed into a `dyn` trait object so that, for example, -/// [`agent::Agent`]s can own multiple [`Behavior`]s with different event `` -/// types. -pub struct Engine +/// The `Engine` struct represents the core logic unit of a state machine-based +/// entity, such as an agent. It encapsulates a behavior and manages the flow +/// of events to and from this behavior, effectively driving the entity's +/// response to external stimuli. +/// +/// The `Engine` is generic over a behavior type `B` and an event type `E`, +/// allowing it to be used with a wide variety of behaviors and event sources. +/// It is itself a state machine, capable of executing instructions that +/// manipulate its behavior or react to events. +/// +/// # Fields +/// +/// - `behavior`: An optional behavior that the engine is currently managing. +/// This is where the engine's logic is primarily executed in response to +/// events. +pub(crate) struct Engine where B: Behavior, { - /// The behavior the [`Engine`] runs. - pub behavior: Option, + /// The behavior the `Engine` runs. + behavior: Option, /// The current state of the [`Engine`]. - pub state: State, + state: State, /// The receiver of events that the [`Engine`] will process. /// The [`State::Processing`] stage will attempt a decode of the [`String`]s /// into the event type ``. - event_receiver: Option>, + event_stream: Option>, phantom: std::marker::PhantomData, } -impl Engine +impl Debug for Engine where B: Behavior, E: DeserializeOwned + Send + Sync + 'static, +{ + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + f.debug_struct("Engine") + .field("behavior", &self.behavior) + .field("state", &self.state) + .finish() + } +} + +impl Engine +where + B: Behavior + Debug, + E: DeserializeOwned + Send + Sync + 'static, { /// Creates a new [`Engine`] with the given [`Behavior`] and [`Receiver`]. - pub(crate) fn new(behavior: B, event_receiver: Receiver) -> Self { + pub fn new(behavior: B) -> Self { Self { behavior: Some(behavior), state: State::Uninitialized, - event_receiver: Some(event_receiver), + event_stream: None, phantom: std::marker::PhantomData, } } @@ -134,65 +207,49 @@ where #[async_trait::async_trait] impl StateMachine for Engine where - B: Behavior, - E: DeserializeOwned + Send + Sync + Debug + 'static, + B: Behavior + Debug + Serialize + DeserializeOwned, + E: DeserializeOwned + Serialize + Send + Sync + Debug + 'static, { - async fn execute(&mut self, instruction: MachineInstruction) { + async fn execute(&mut self, instruction: MachineInstruction) -> Result<(), ArbiterEngineError> { + // NOTE: The unwraps here are safe because the `Behavior` in an engine is only + // accessed here and it is private. match instruction { - MachineInstruction::Sync => { - trace!("Behavior is syncing."); - self.state = State::Syncing; - let mut behavior = self.behavior.take().unwrap(); - let behavior_task = tokio::spawn(async move { - behavior.sync().await; - behavior - }); - self.behavior = Some(behavior_task.await.unwrap()); - } - MachineInstruction::Start => { - trace!("Behavior is starting up."); + MachineInstruction::Start(client, messager) => { self.state = State::Starting; let mut behavior = self.behavior.take().unwrap(); - let behavior_task = tokio::spawn(async move { - behavior.startup().await; - behavior - }); - self.behavior = Some(behavior_task.await.unwrap()); + let behavior_task: JoinHandle, B), ArbiterEngineError>> = + tokio::spawn(async move { + let id = messager.id.clone(); + let stream = behavior.startup(client, messager).await?; + debug!("startup complete for behavior {:?}", id); + Ok((stream, behavior)) + }); + let (stream, behavior) = behavior_task.await??; + self.event_stream = Some(stream); + self.behavior = Some(behavior); + self.execute(MachineInstruction::Process).await?; + Ok(()) } MachineInstruction::Process => { - trace!("Behavior is processing."); + trace!("Behavior is starting up."); let mut behavior = self.behavior.take().unwrap(); - let mut receiver = self.event_receiver.take().unwrap(); - let behavior_task = tokio::spawn(async move { - while let Ok(event) = receiver.recv().await { - let decoding_result = serde_json::from_str::(&event); - match decoding_result { - Ok(event) => { - let halt_option = behavior.process(event).await; - if halt_option.is_some() { + let mut stream = self.event_stream.take().unwrap(); + let behavior_task: JoinHandle> = + tokio::spawn(async move { + while let Some(event) = stream.next().await { + match behavior.process(event).await? { + ControlFlow::Halt => { break; } + ControlFlow::Continue => {} } - Err(_) => match serde_json::from_str::(&event) { - Ok(_) => { - warn!("Behavior received `MachineHalt` message. Breaking!"); - break; - } - Err(_) => { - trace!( - "Event received by behavior that could not be deserialized." - ); - continue; - } - }, } - } - behavior - }); - self.behavior = Some(behavior_task.await.unwrap()); - } - MachineInstruction::Stop => { - unreachable!("This is never explicitly called on an engine.") + Ok(behavior) + }); + // TODO: We don't have to store the behavior again here, we could just discard + // it. + self.behavior = Some(behavior_task.await??); + Ok(()) } } } diff --git a/arbiter-engine/src/messager.rs b/arbiter-engine/src/messager.rs index 290fd6f3f..6d95b4a00 100644 --- a/arbiter-engine/src/messager.rs +++ b/arbiter-engine/src/messager.rs @@ -1,9 +1,9 @@ //! The messager module contains the core messager layer for the Arbiter Engine. -use futures_util::Stream; use tokio::sync::broadcast::{channel, Receiver, Sender}; use super::*; +use crate::machine::EventStream; /// A message that can be sent between agents. #[derive(Clone, Debug, Deserialize, Serialize)] @@ -40,10 +40,17 @@ pub struct Messager { broadcast_receiver: Option>, } +impl Clone for Messager { + fn clone(&self) -> Self { + Self { + broadcast_sender: self.broadcast_sender.clone(), + broadcast_receiver: Some(self.broadcast_sender.subscribe()), + id: self.id.clone(), + } + } +} + impl Messager { - // TODO: Allow for modulating the capacity of the messager. - // TODO: It might be nice to have some kind of messaging header so that we can - // pipe messages to agents and pipe messages across worlds. /// Creates a new messager with the given capacity. #[allow(clippy::new_without_default)] pub fn new() -> Self { @@ -55,8 +62,8 @@ impl Messager { } } - // TODO: Okay if we do something kinda like this, then agents don't even need to - // filter the `to` field or set the `from` field. Let's give this a shot! + /// Returns a [`Messager`] interface connected to the same instance but with + /// the `id` provided. pub(crate) fn for_agent(&self, id: &str) -> Self { Self { broadcast_sender: self.broadcast_sender.clone(), @@ -65,11 +72,49 @@ impl Messager { } } + /// utility function for getting the next value from the broadcast_receiver + /// without streaming + pub async fn get_next(&mut self) -> Result { + let mut receiver = match self.broadcast_receiver.take() { + Some(receiver) => receiver, + None => { + return Err(ArbiterEngineError::MessagerError( + "Receiver has been taken! Are you already streaming on this messager?" + .to_owned(), + )) + } + }; + while let Ok(message) = receiver.recv().await { + match &message.to { + To::All => { + return Ok(message); + } + To::Agent(id) => { + if let Some(self_id) = &self.id { + if id == self_id { + return Ok(message); + } + } + continue; + } + } + } + unreachable!() + } + /// Returns a stream of messages that are either sent to [`To::All`] or to /// the agent via [`To::Agent(id)`]. - pub fn stream(mut self) -> impl Stream + Send { - let mut receiver = self.broadcast_receiver.take().unwrap(); - async_stream::stream! { + pub fn stream(mut self) -> Result, ArbiterEngineError> { + let mut receiver = match self.broadcast_receiver.take() { + Some(receiver) => receiver, + None => { + return Err(ArbiterEngineError::MessagerError( + "Receiver has been taken! Are you already streaming on this messager?" + .to_owned(), + )) + } + }; + Ok(Box::pin(async_stream::stream! { while let Ok(message) = receiver.recv().await { match &message.to { To::All => { @@ -84,22 +129,41 @@ impl Messager { } } } - } - } - - /// Returns a [`Messager`] interface connected to the same instance but with - /// the `id` provided. - pub fn join_with_id(&self, id: Option) -> Messager { - Messager { - broadcast_sender: self.broadcast_sender.clone(), - broadcast_receiver: Some(self.broadcast_sender.subscribe()), - id, - } + })) } - - /// Sends a message to the messager. - pub async fn send(&self, message: Message) { + /// Asynchronously sends a message to a specified recipient. + /// + /// This method constructs a message with the provided data and sends it to + /// the specified recipient. The recipient can either be a single agent + /// or all agents, depending on the `to` parameter. The data is + /// serialized into a JSON string before being sent. + /// + /// # Type Parameters + /// + /// - `T`: The type that can be converted into a recipient specification + /// (`To`). + /// - `S`: The type of the data being sent. Must implement `Serialize`. + /// + /// # Parameters + /// + /// - `to`: The recipient of the message. Can be an individual agent's ID or + /// a broadcast to all agents. + /// - `data`: The data to be sent in the message. This data is serialized + /// into JSON format. + pub async fn send(&self, to: To, data: S) -> Result<(), ArbiterEngineError> { trace!("Sending message via messager."); - self.broadcast_sender.send(message).unwrap(); + if let Some(id) = &self.id { + let message = Message { + from: id.clone(), + to, + data: serde_json::to_string(&data)?, + }; + self.broadcast_sender.send(message)?; + Ok(()) + } else { + Err(ArbiterEngineError::MessagerError( + "Messager has no ID! You must have an ID to send messages!".to_owned(), + )) + } } } diff --git a/arbiter-engine/src/universe.rs b/arbiter-engine/src/universe.rs new file mode 100644 index 000000000..0a9671837 --- /dev/null +++ b/arbiter-engine/src/universe.rs @@ -0,0 +1,161 @@ +//! The [`universe`] module contains the [`Universe`] struct which is the +//! primary interface for creating and running many `World`s in parallel. + +use super::*; +use crate::world::World; + +/// The [`Universe`] struct is the primary interface for creating and running +/// many `World`s in parallel. At the moment, is a wrapper around a +/// [`HashMap`] of [`World`]s, but can be extended to handle generics inside of +/// [`World`]s and crosstalk between [`World`]s. +#[derive(Debug, Default)] +pub struct Universe { + worlds: Option>, + world_tasks: Option>>, +} + +impl Universe { + /// Creates a new [`Universe`]. + pub fn new() -> Self { + Self { + worlds: Some(HashMap::new()), + world_tasks: None, + } + } + + /// Adds a [`World`] to the [`Universe`]. + pub fn add_world(&mut self, world: World) { + if let Some(worlds) = self.worlds.as_mut() { + worlds.insert(world.id.clone(), world); + } + } + + /// Runs all of the [`World`]s in the [`Universe`] in parallel. + pub async fn run_worlds(&mut self) -> Result<(), ArbiterEngineError> { + if self.is_online() { + return Err(ArbiterEngineError::UniverseError( + "Universe is already running.".to_owned(), + )); + } + let mut tasks = Vec::new(); + // NOTE: Unwrap is safe because we checked if the universe is online. + for (_, mut world) in self.worlds.take().unwrap().drain() { + tasks.push(spawn(async move { + world.run().await.unwrap(); + world + })); + } + self.world_tasks = Some(join_all(tasks.into_iter()).await); + Ok(()) + } + + /// Returns `true` if the [`Universe`] is running. + pub fn is_online(&self) -> bool { + self.world_tasks.is_some() + } +} + +#[cfg(test)] +mod tests { + use std::fs::{read_to_string, remove_file, File}; + + use tracing_subscriber::{fmt, EnvFilter}; + + use super::*; + use crate::{agent::Agent, examples::timed_message::*}; + + #[tokio::test] + async fn run_universe() { + let mut universe = Universe::new(); + let world = World::new("test"); + universe.add_world(world); + universe.run_worlds().await.unwrap(); + universe.world_tasks.unwrap().remove(0).unwrap(); + } + + #[tokio::test] + #[should_panic(expected = "Universe is already running.")] + async fn cant_run_twice() { + let mut universe = Universe::new(); + let world1 = World::new("test"); + universe.add_world(world1); + universe.run_worlds().await.unwrap(); + universe.run_worlds().await.unwrap(); + } + + #[tokio::test] + async fn run_parallel() { + std::env::set_var("RUST_LOG", "trace"); + let file = File::create("test_logs_engine.log").expect("Unable to create log file"); + + let subscriber = fmt() + .with_env_filter(EnvFilter::from_default_env()) + .with_writer(file) + .finish(); + + tracing::subscriber::set_global_default(subscriber) + .expect("setting default subscriber failed"); + + let mut world1 = World::new("test1"); + let agent1 = Agent::builder("agent1"); + let behavior1 = TimedMessage::new( + 1, + "echo".to_owned(), + "echo".to_owned(), + Some(5), + Some("echo".to_owned()), + ); + world1.add_agent(agent1.with_behavior(behavior1)); + + let mut world2 = World::new("test2"); + let agent2 = Agent::builder("agent2"); + let behavior2 = TimedMessage::new( + 1, + "echo".to_owned(), + "echo".to_owned(), + Some(5), + Some("echo".to_owned()), + ); + world2.add_agent(agent2.with_behavior(behavior2)); + + let mut universe = Universe::new(); + universe.add_world(world1); + universe.add_world(world2); + + universe.run_worlds().await.unwrap(); + + let parsed_file = read_to_string("test_logs_engine.log").expect("Unable to read log file"); + + // Define the line to check (excluding the timestamp) + let line_to_check = "Behavior is starting up."; + + // Assert that the lines appear consecutively + assert!( + lines_appear_consecutively(&parsed_file, line_to_check), + "The lines do not appear consecutively" + ); + remove_file("test_logs_engine.log").expect( + "Unable to remove log + file", + ); + } + + fn lines_appear_consecutively(file_contents: &str, line_to_check: &str) -> bool { + let mut lines = file_contents.lines(); + + while let Some(line) = lines.next() { + if line.contains(line_to_check) { + println!("Found line: {}", line); + // Check if the next line also contains the line_to_check + if let Some(next_line) = lines.next() { + if next_line.contains(line_to_check) { + println!("Found next line: {}", next_line); + return true; + } + } + } + } + + false + } +} diff --git a/arbiter-engine/src/world.rs b/arbiter-engine/src/world.rs index 13b65d3ae..b46146175 100644 --- a/arbiter-engine/src/world.rs +++ b/arbiter-engine/src/world.rs @@ -1,31 +1,16 @@ -// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -// TODO: Notes ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -// * Probably should move labels to world instead of on the environment. -// * One thing that is different about the Arbiter world is that give a bunch of -// different channels to communicate with the Environment's tx thread. This is -// different from a connection to a blockchain where you typically will just -// have a single HTTP/WS connection. What we want is some kind of way of -// having the world own a reference to a provider or something -// * Can add a messager as an interconnect and have the manager give each world -// it owns a clone of the same messager. -// * The worlds now are just going to be revm worlds. We can generalize this -// later. -// * Can we give the world an address book?? -// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - //! The world module contains the core world abstraction for the Arbiter Engine. -use arbiter_core::environment::{builder::EnvironmentBuilder, Environment}; +use std::collections::VecDeque; + +use arbiter_core::{environment::Environment, middleware::ArbiterMiddleware}; use futures_util::future::join_all; -use tokio::sync::broadcast::Sender as BroadcastSender; -use tracing::info; +use serde::de::DeserializeOwned; +use tokio::spawn; -use self::machine::{MachineHalt, MachineInstruction}; use super::*; use crate::{ - agent::Agent, - machine::{State, StateMachine}, - messager::Messager, + agent::{Agent, AgentBuilder}, + machine::{CreateStateMachine, MachineInstruction}, }; /// A world is a collection of agents that use the same type of provider, e.g., @@ -33,39 +18,19 @@ use crate::{ /// responsible for managing the agents and their state transitions. /// /// # How it works -/// The [`World`] works by implementing the [`StateMachine`] trait. When the -/// [`World`] is asked to enter into a new state, it will ask each [`Agent`] it -/// owns to run that state transition by calling [`StateMachine::run_state`]. -/// All of the [`Agent`]s at once will then be able to be asked to block and -/// wait to finish their state transition by calling -/// [`StateMachine::transition`]. Ultimately, the [`World`] will transition -/// through the following states: -/// 1. [`State::Uninitialized`]: The [`World`] has been created, but has not -/// been started. -/// 2. [`State::Syncing`]: The [`World`] is syncing with the agents. This is -/// where the [`World`] can be brought up to date with the latest state of the -/// agents. This could be used if the world was stopped and later restarted. -/// 3. [`State::Startup`]: The [`World`] is starting up. This is where the -/// [`World`] can be initialized and setup. -/// 4. [`State::Processing`]: The [`World`] is processing. This is where the -/// [`World`] can process events and produce actions. The [`State::Processing`] -/// stage may run for a long time before all [`World`]s are finished processing. -/// This is the main stage of the [`World`] that predominantly runs automation. -/// 5. [`State::Stopped`]: The [`World`] is stopped. This is where the [`World`] -/// can be stopped and state of the [`World`] and its [`Agent`]s can be -/// offloaded and saved. +/// The [`World`] holds on to a collection of [`Agent`]s and can run them all +/// concurrently when the [`run`] method is called. The [`World`] takes in +/// [`AgentBuilder`]s and when it does so, it creates [`Agent`]s that are now +/// connected to the world via a client ([`Arc`]) and a messager +/// ([`Messager`]). +#[derive(Debug)] pub struct World { /// The identifier of the world. pub id: String, - /// The state of the [`World`]. - pub state: State, - /// The agents in the world. pub agents: Option>, - agent_distributors: Option>>, - /// The environment for the world. pub environment: Environment, @@ -73,170 +38,178 @@ pub struct World { pub messager: Messager, } +use std::{fs::File, io::Read}; impl World { - /// Creates a new [World] with the given identifier and provider. + /// Creates a new [`World`] with the given identifier and provider. pub fn new(id: &str) -> Self { Self { id: id.to_owned(), - state: State::Uninitialized, agents: Some(HashMap::new()), - agent_distributors: None, - environment: EnvironmentBuilder::new().build(), + environment: Environment::builder().build(), messager: Messager::new(), } } - /// Creates a new [World] with the given identifier and provider. - pub fn new_with_env(id: &str, environment: Environment) -> Self { - Self { - id: id.to_owned(), - agents: Some(HashMap::new()), - state: State::Uninitialized, - agent_distributors: None, - environment, - messager: Messager::new(), + /// Builds and adds agents to the world from a configuration file. + /// + /// This method reads a configuration file specified by `config_path`, which + /// should be a TOML file containing the definitions of agents and their + /// behaviors. Each agent is identified by a unique string key, and + /// associated with a list of behaviors. These behaviors are + /// deserialized into instances that implement the `CreateStateMachine` + /// trait, allowing them to be converted into state machines that define + /// the agent's behavior within the world. + /// + /// # Type Parameters + /// + /// - `C`: The type of the behavior component that each agent will be + /// associated with. + /// This type must implement the `CreateStateMachine`, `Serialize`, + /// `DeserializeOwned`, and `Debug` traits. + /// + /// # Arguments + /// + /// - `config_path`: A string slice that holds the path to the configuration + /// file + /// relative to the current working directory. + /// + /// # Panics + /// + /// This method will panic if: + /// - The current working directory cannot be determined. + /// - The configuration file specified by `config_path` cannot be opened. + /// - The configuration file cannot be read into a string. + /// - The contents of the configuration file cannot be deserialized into the + /// expected + /// `HashMap>` format. + /// + /// # Examples + /// + /// Assuming a TOML file named `agents_config.toml` exists in the current + /// working directory with the following content: + /// + /// ```toml + /// [[agent1]] + /// BehaviorTypeA = { ... } , + /// [[agent1]] + /// BehaviorTypeB = { ... } + /// + /// [agent2] + /// BehaviorTypeC = { ... } + /// ``` + pub fn from_config( + &mut self, + config_path: &str, + ) -> Result<(), ArbiterEngineError> { + let cwd = std::env::current_dir()?; + let path = cwd.join(config_path); + let mut file = File::open(path)?; + + let mut contents = String::new(); + file.read_to_string(&mut contents)?; + + let agents_map: HashMap> = toml::from_str(&contents)?; + + for (agent, behaviors) in agents_map { + let mut next_agent = Agent::builder(&agent); + for behavior in behaviors { + println!("Behavior: {:?}", behavior); + let engine = behavior.create_state_machine(); + next_agent = next_agent.with_engine(engine); + } + self.add_agent(next_agent); } + Ok(()) } - /// Adds an agent to the world. - pub fn add_agent(&mut self, agent: Agent) { - let id = agent.id.clone(); - let agents = self.agents.as_mut().unwrap(); + /// Adds an agent, constructed from the provided `AgentBuilder`, to the + /// world. + /// + /// This method takes an `AgentBuilder` instance, extracts its identifier, + /// and uses it to create both a `RevmMiddleware` client and a + /// `Messager` specific to the agent. It then builds the `Agent` from + /// the `AgentBuilder` using these components. Finally, the newly + /// created `Agent` is inserted into the world's internal collection of + /// agents. + /// + /// # Panics + /// + /// This method will panic if: + /// - It fails to create a `RevmMiddleware` client for the agent. + /// - The `AgentBuilder` fails to build the `Agent`. + /// - The world's internal collection of agents is not initialized. + /// + /// # Examples + /// + /// Assuming you have an `AgentBuilder` instance named `agent_builder`: + /// + /// ```ignore + /// world.add_agent(agent_builder); + /// ``` + /// + /// This will add the agent defined by `agent_builder` to the world. + pub fn add_agent(&mut self, agent_builder: AgentBuilder) { + let id = agent_builder.id.clone(); + let client = ArbiterMiddleware::new(&self.environment, Some(&id)) + .expect("Failed to create RevmMiddleware client for agent"); + let messager = self.messager.for_agent(&id); + let agent = agent_builder + .build(client, messager) + .expect("Failed to build agent from AgentBuilder"); + let agents = self + .agents + .as_mut() + .expect("Agents collection not initialized"); agents.insert(id.to_owned(), agent); } - /// Runs the world through up to the [`State::Processing`] stage. - pub async fn run(&mut self) { - self.execute(MachineInstruction::Sync).await; - self.execute(MachineInstruction::Start).await; - self.execute(MachineInstruction::Process).await; - } - - /// Stops the world by stopping all the behaviors that each of the agents is - /// running. - pub async fn stop(&mut self) { - self.execute(MachineInstruction::Stop).await; - } -} - -// TODO: Idea, when we enter the `State::Processing`, we should pass the task -// into the struct. When we call `MachineInstruction::Stop` we should do message -// passing that will kill the tasks so that they return. This will allow us to -// do graceful shutdowns. - -// TODO: Worth explaining how the process stage is offloaded so it is -// understandable. - -// Right now what we do is we send a HALT message via the agent's distributor -// which means all behaviors should receive this now. If those behaviors all see -// this HALT message and then exit their process, then the await should finish. -// Actually we can probably not have to get the distributors up this high, but -// let's work with this for now. - -#[async_trait::async_trait] -impl StateMachine for World { - async fn execute(&mut self, instruction: MachineInstruction) { - match instruction { - MachineInstruction::Sync => { - info!("World is syncing."); - self.state = State::Syncing; - let agents = self.agents.take().unwrap(); - let agent_tasks = join_all(agents.into_values().map(|mut agent| { - tokio::spawn(async move { - agent.execute(instruction).await; - agent - }) - })); - self.agents = Some( - agent_tasks - .await - .into_iter() - .map(|res| { - let agent = res.unwrap(); - (agent.id.clone(), agent) - }) - .collect::>(), - ); + /// Executes all agents and their behaviors concurrently within the world. + /// + /// This method takes all the agents registered in the world and runs their + /// associated behaviors in parallel. Each agent's behaviors are + /// executed with their respective messaging and client context. This + /// method ensures that all agents and their behaviors are started + /// simultaneously, leveraging asynchronous execution to manage concurrent + /// operations. + /// + /// # Errors + /// + /// Returns an error if no agents are found in the world, possibly + /// indicating that the world has already been run or that no agents + /// were added prior to execution. + pub async fn run(&mut self) -> Result<(), ArbiterEngineError> { + let agents = match self.agents.take() { + Some(agents) => agents, + None => { + return Err(ArbiterEngineError::WorldError( + "No agents found. Has the world already been ran?".to_owned(), + )) } - MachineInstruction::Start => { - info!("World is starting up."); - self.state = State::Starting; - let agents = self.agents.take().unwrap(); - let agent_tasks = join_all(agents.into_values().map(|mut agent| { - tokio::spawn(async move { - agent.execute(instruction).await; - agent - }) - })); - self.agents = Some( - agent_tasks - .await - .into_iter() - .map(|res| { - let agent = res.unwrap(); - (agent.id.clone(), agent) - }) - .collect::>(), - ); + }; + let mut tasks = vec![]; + // Prepare a queue for messagers corresponding to each behavior engine. + let mut messagers = VecDeque::new(); + // Populate the messagers queue. + for (_, agent) in agents.iter() { + for _ in &agent.behavior_engines { + messagers.push_back(agent.messager.clone()); } - MachineInstruction::Process => { - info!("World is processing."); - self.state = State::Processing; - let agents = self.agents.take().unwrap(); - let mut agent_distributors = vec![]; - let agent_processors = join_all(agents.into_values().map(|mut agent| { - agent_distributors.push(agent.distributor.0.clone()); - tokio::spawn(async move { - agent.execute(instruction).await; - agent - }) - })); - self.agent_distributors = Some(agent_distributors); - self.agents = Some( - agent_processors + } + // For each agent, spawn a task for each of its behavior engines. + // Unwrap here is safe as we just built the dang thing. + for (_, mut agent) in agents { + for mut engine in agent.behavior_engines.drain(..) { + let client = agent.client.clone(); + let messager = messagers.pop_front().unwrap(); + tasks.push(spawn(async move { + engine + .execute(MachineInstruction::Start(client, messager)) .await - .into_iter() - .map(|res| { - let agent = res.unwrap(); - (agent.id.clone(), agent) - }) - .collect::>(), - ); - } - MachineInstruction::Stop => { - let halt = serde_json::to_string(&MachineHalt).unwrap(); - for tx in self.agent_distributors.take().unwrap() { - tx.send(halt.clone()).unwrap(); - } + })); } } - } -} - -#[cfg(test)] -mod tests { - use std::{str::FromStr, sync::Arc}; - - use arbiter_bindings::bindings::weth::WETH; - use ethers::{ - providers::{Middleware, Provider, Ws}, - types::Address, - }; - use futures_util::StreamExt; - - #[ignore = "This is unnecessary to run on CI currently."] - #[tokio::test] - async fn mainnet_ws() { - let ws_url = std::env::var("MAINNET_WS_URL").expect("MAINNET_WS_URL must be set"); - let ws = Ws::connect(ws_url).await.unwrap(); - let provider = Provider::new(ws); - let client = Arc::new(provider); - let weth = WETH::new( - Address::from_str("0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2").unwrap(), - client.clone(), - ); - let filter = weth.approval_filter().filter; - let mut subscription = client.subscribe_logs(&filter).await.unwrap(); - println!("next: {:?}", subscription.next().await); + // Await the completion of all tasks. + join_all(tasks).await; + Ok(()) } } diff --git a/arbiter-macros/Cargo.toml b/arbiter-macros/Cargo.toml new file mode 100644 index 000000000..8ea92a884 --- /dev/null +++ b/arbiter-macros/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "arbiter-macros" +version = "0.1.0" + +[lib] +proc-macro = true + +[dependencies] +syn.workspace = true +quote = "1.0.35" diff --git a/arbiter-macros/src/lib.rs b/arbiter-macros/src/lib.rs new file mode 100644 index 000000000..061335bfe --- /dev/null +++ b/arbiter-macros/src/lib.rs @@ -0,0 +1,49 @@ +extern crate proc_macro; +extern crate quote; +extern crate syn; + +use proc_macro::TokenStream; +use quote::quote; +use syn::{parse_macro_input, Data, DataEnum, DeriveInput, Fields}; + +#[proc_macro_derive(Behaviors)] +pub fn create_behavior_from_enum(input: TokenStream) -> TokenStream { + let input = parse_macro_input!(input as DeriveInput); + + let name = input.ident; // The name of the enum + + let enum_data = if let Data::Enum(DataEnum { variants, .. }) = input.data { + variants + } else { + // Not an enum, so panic or handle as needed + panic!("CreateBehaviorFromEnum is only defined for enums"); + }; + + let match_arms = enum_data.into_iter().map(|variant| { + let variant_name = variant.ident; + let _inner_type = if let Fields::Unnamed(fields) = variant.fields { + fields.unnamed.first().unwrap().ty.clone() + } else { + panic!("Expected unnamed fields in enum variant"); + }; + + quote! { + #name::#variant_name(inner) => { + Box::new(Engine::new(inner)) + } + } + }); + + let expanded = quote! { + + impl CreateStateMachine for #name { + fn create_state_machine(self) -> Box { + match self { + #(#match_arms,)* + } + } + } + }; + + TokenStream::from(expanded) +} diff --git a/bin/fork/mod.rs b/bin/fork/mod.rs index 9b9f51b1d..6282abf4e 100644 --- a/bin/fork/mod.rs +++ b/bin/fork/mod.rs @@ -2,7 +2,7 @@ use std::{collections::HashMap, io::Write, sync::Arc}; -use arbiter_core::environment::fork::*; +use arbiter_core::database::fork::*; use ethers::{ providers::{Http, Provider}, types::{Address, BlockId, BlockNumber, U256}, diff --git a/bin/fork/tests.rs b/bin/fork/tests.rs index 76779ff4e..05ae5bad9 100644 --- a/bin/fork/tests.rs +++ b/bin/fork/tests.rs @@ -1,4 +1,4 @@ -use arbiter_core::environment::fork::Fork; +use arbiter_core::database::fork::Fork; use super::*; diff --git a/book.toml b/book.toml index ed0a550bf..b5a2dab15 100644 --- a/book.toml +++ b/book.toml @@ -29,4 +29,4 @@ inline-delimiter = { left = "$", right = "$" } [output.linkcheck] optional = true -follow-web-links = true \ No newline at end of file +follow-web-links = false diff --git a/documentation/Cargo.toml b/documentation/Cargo.toml new file mode 100644 index 000000000..f619f258e --- /dev/null +++ b/documentation/Cargo.toml @@ -0,0 +1,15 @@ +[package] +name = "documentation" +version = "0.0.0" +edition = "2021" +build = "build.rs" + +[build-dependencies] +skeptic = "0.13.7" +tokio.workspace = true + +[dev-dependencies] +skeptic = "0.13.7" +arbiter-core.workspace = true +arbiter-bindings.workspace = true + diff --git a/documentation/build.rs b/documentation/build.rs new file mode 100644 index 000000000..104d80e54 --- /dev/null +++ b/documentation/build.rs @@ -0,0 +1,8 @@ +use skeptic::markdown_files_of_directory; + +extern crate skeptic; + +fn main() { + let markdown_files = markdown_files_of_directory("src/"); + skeptic::generate_doc_tests(&markdown_files); +} diff --git a/documentation/src/SUMMARY.md b/documentation/src/SUMMARY.md index 9c592cd4f..d0ec6eebe 100644 --- a/documentation/src/SUMMARY.md +++ b/documentation/src/SUMMARY.md @@ -1,14 +1,21 @@ # Summary - -- [Introduction](./introduction/introduction.md) -- [Getting Started / Installation](./getting_started/getting_started.md) - - [Setting up Simulations](./getting_started/setting_up_simulations.md) -- [Anomaly Detection](./introduction/anomaly_detection.md) -- [Auditing](./auditing/auditing.md) -- [Risk](./risk/risk_metrics.md) - - [Metrics](./risk/metrics.md) - -- [Contributing](./contributing/contributing.md) - - [Project Architecture](./contributing/architecture.md) - - [Vulnerability Corpus](./contributing/vulnerability_corpus.md) - - [Open source and free to use](./contributing/open_source.md) \ No newline at end of file +[Arbiter](./index.md) +- [Getting Started](./getting_started/index.md) +# Usage +- [Overview](./usage/index.md) + - [Arbiter Core](./usage/arbiter_core/index.md) + - [Environment](./usage/arbiter_core/environment.md) + - [Middleware](./usage/arbiter_core/middleware.md) + - [Arbiter Engine](./usage/arbiter_engine/index.md) + - [Behaviors](./usage/arbiter_engine/behaviors.md) + - [Agents and Engines](./usage/arbiter_engine/agents_and_engines.md) + - [Worlds and Universes](./usage/arbiter_engine/worlds_and_universes.md) + - [Configuration](./usage/arbiter_engine/configuration.md) + - [Arbiter CLI](./usage/arbiter_cli.md) + - [Arbiter Macros](./usage/arbiter_macros.md) +- [Techniques](./usage/techniques/index.md) + - [Anomaly Detection](./usage/techniques/anomaly_detection.md) + - [Measuring Risk](./usage/techniques/measuring_risk.md) +# Engagement +- [Contributing](./contributing.md) +- [Vulnerability Corpus](./vulnerability_corpus.md) \ No newline at end of file diff --git a/documentation/src/contributing.md b/documentation/src/contributing.md new file mode 100644 index 000000000..b6b1829f3 --- /dev/null +++ b/documentation/src/contributing.md @@ -0,0 +1,16 @@ +# Contributing +Feedback is the number one way you can help us improve Arbiter, and we want to hear from you! +A worthy contribution to the repo is opening an issue or a discussion on the [GitHub issues](https://github.com/primitivefinance/arbiter/issues) page. +Similarly, you can feel free to reach out to us on [Telegram](https://t.me/arbiter_rs). +Any and all questions are welcome. + +## Open Source Community +Arbiter is an open-source project and we welcome contributions from the community. +We keep track of all issues and feature requests on our [GitHub issues](https://github.com/primitivefinance/arbiter/issues) page. +Issues that are approachable for newcomers are tagged with the **good first issue**, so be on the lookout for those! + +See our [Contributing Guidelines](https://github.com/primitivefinance/arbiter/blob/main/.github/CONTRIBUTING.md) + +## Vulnerability Corpus +If you have found a vulnerability in a smart contract using Arbiter, please report it to us by opening an issue on our [GitHub issues](https://github.com/primitivefinance/arbiter/issues) page or consider adding it yourself to our [Vulnerability Corpus](./vulnerability_corpus.md). +This can help the Ethereum developer community know how to test their own smart contracts and avoid similar vulnerabilities. \ No newline at end of file diff --git a/documentation/src/contributing/architecture.md b/documentation/src/contributing/architecture.md deleted file mode 100644 index 931347cff..000000000 --- a/documentation/src/contributing/architecture.md +++ /dev/null @@ -1 +0,0 @@ -# Project Architecture diff --git a/documentation/src/contributing/contributing.md b/documentation/src/contributing/contributing.md deleted file mode 100644 index 854139a31..000000000 --- a/documentation/src/contributing/contributing.md +++ /dev/null @@ -1 +0,0 @@ -# Contributing diff --git a/documentation/src/contributing/open_source.md b/documentation/src/contributing/open_source.md deleted file mode 100644 index 2fb6a4572..000000000 --- a/documentation/src/contributing/open_source.md +++ /dev/null @@ -1 +0,0 @@ -# Open source and free to use diff --git a/documentation/src/getting_started/agents.md b/documentation/src/getting_started/agents.md deleted file mode 100644 index f865e447b..000000000 --- a/documentation/src/getting_started/agents.md +++ /dev/null @@ -1,3 +0,0 @@ -# Configuring agents - -Once your contract state is initialized you can think about iterating over your stochastic process and designing your agents to react to certain changes in the systems and contracts. For example an arbitraguer will want to react to price changes in the system. diff --git a/documentation/src/getting_started/examples.md b/documentation/src/getting_started/examples.md deleted file mode 100644 index df635b4e6..000000000 --- a/documentation/src/getting_started/examples.md +++ /dev/null @@ -1 +0,0 @@ -# Examples diff --git a/documentation/src/getting_started/getting_started.md b/documentation/src/getting_started/getting_started.md deleted file mode 100644 index 15dfcb379..000000000 --- a/documentation/src/getting_started/getting_started.md +++ /dev/null @@ -1,60 +0,0 @@ -# Getting Started - -## Prerequisites - -Before installing Arbiter, ensure that you have Rust installed. You can install and verify your Rust installation from the [official website](https://www.rust-lang.org/tools/install). - -The Arbiter CLI works alongside [Foundry](https://github.com/foundry-rs/foundry) and aims to provide a similar CLI interface of setting up and interacting with Arbiter projects. Install Foundry from the [official website](https://getfoundry.sh/). - -## Installing the Arbiter CLI - -### Install using Cargo - -Once Rust is installed, you can install Arbiter from the package registry using Cargo. To do this, just run: -```bash -cargo install arbiter -``` - -You can now run `arbiter --version` to verify your installation. - -### Building From Source -Install Git, if you haven't already. There are many online guides on how to install Git on different devices, including one from [Github](https://github.com/git-guides/install-git). - -Once you're done with the above, you can install Arbiter by cloning the repository. The local crate can then be used to install the Arbiter binary on your machine. - -```bash -git clone https://github.com/primitivefinance/arbiter.git -cargo install --path ./arbiter -``` - -You can now run `arbiter --help` to verify your installation and view the help menu. - -## Interacting with the Arbiter CLI -Arbiter provides a Foundry-like CLI experience. You can initialize new projects, generate bindings and execute simulations using the CLI. - -To create a new Arbiter project: -```bash -arbiter init your-new-project -cd your-new-project -``` - -This initializes a new Arbiter project with a template. You can generate the bindings again by running: - -```bash -arbiter bind -``` -Arbiter bind wraps `forge bind` and is configured from your cargo.toml. There are three optional fields you can add to your toml to configure arbiter bind. -```toml -[arbiter] -bindings_workspace = "simulation" # must be a valid workspace member -submodules = false # change to true if you want the submodule bindings to be generated -ignore_interfaces = false # change to true if you want to ignore interfaces contracts -``` - -The template is executable at this point and you can run it by running: - -```bash -cargo run -``` - -You can load or write your own smart contracts in the templates `contracts/` directory and begin writing your own simulations. Arbiter treats Rust smart-contract bindings as first-class citizens. The contract bindings are generated via Foundry's forge command. arbiter bind wraps forge with some convenience features that will generate all your bindings to `src/bindings` as a rust module. Foundry power-users are welcome to use forge directly. You can also manage project dependencies using git submodules via `forge install`. The [Foundry book](https://book.getfoundry.sh/reference/forge/forge-install) provides further details on managing project dependencies and other features. \ No newline at end of file diff --git a/documentation/src/auditing/auditing.md b/documentation/src/getting_started/index.md similarity index 70% rename from documentation/src/auditing/auditing.md rename to documentation/src/getting_started/index.md index 896c9d3f4..3821a5a37 100644 --- a/documentation/src/auditing/auditing.md +++ b/documentation/src/getting_started/index.md @@ -1,3 +1,15 @@ +# Getting Started +To use Arbiter, you can use the Arbiter CLI to help you manage your projects or, if you feel you don't need any of the CLI features, you can be free to use the [`arbiter-core`](https://crates.io/crates/arbiter-core), `arbiter-engine`, and [`arbiter-bindings`](https://crates.io/crates/arbiter-bindings) crates directly. +You can find more information about these crates in the [Usage](../index.md) section. +The crates (aside from `arbiter-engine` at the moment) are linked to their crates.io pages so you can add them to your project by: +```toml +[dependencies] +arbiter-core = "*" # You can specify a version here if you'd like +arbiter-bindings = "*" # You can specify a version here if you'd like +arbiter-engine = "*" # You can specify a version here if you'd like +``` + + # Auditing The current state of software auditing in the EVM is rapidly evolving. Competitive salaries are attracting top talent to firms like [Spearbit](https://spearbit.com/), [ChainSecurity](https://chainsecurity.com/), and [Trail of Bits](https://www.trailofbits.com/), while open security bounties and competitions like [Code Arena](https://code4rena.com/) are drawing in the best and brightest from around the world. Moreover, the rise of decentralized finance and the value at stake in these EVM-oriented systems have also caught the attention of a collection of black hats. @@ -7,3 +19,4 @@ As competition in auditing intensifies, auditors will likely need to specialize One such methodology is domain-specific fuzzing. Fuzzing is a testing technique that provides invalid, unexpected, or random data as input to a computer program. The program is then monitored for exceptions such as crashes, failing built-in code assertions, or potential memory leaks. Domain-specific fuzzing in the context of EVM system design involves modeling "normal" system behavior with agents and then playing with different parameters of the system to expose system fragility. With its high degree of EVM modeling granularity, Arbiter is well-suited to support and enable domain-specific fuzzing. It can accurately simulate the behavior of the EVM under a wide range of conditions and inputs, providing auditors with a powerful tool for identifying and addressing potential vulnerabilities. Moreover, Arbiter is designed to be highly performant and fast, allowing for efficient and timely auditing processes. This speed and performance make it an even more valuable tool in the rapidly evolving world of software auditing. + diff --git a/documentation/src/getting_started/setting_up_simulations.md b/documentation/src/getting_started/setting_up_simulations.md deleted file mode 100644 index 5c6692dc4..000000000 --- a/documentation/src/getting_started/setting_up_simulations.md +++ /dev/null @@ -1,13 +0,0 @@ -# Setting up Simulations - -At a high level it could be a good idea map out your simulation before you start writing it. Understand some key objectives of your simulation for example maybe you want to look for anomaly behavior and attempt to identify any critical failure points in the system. In this case you want to understand what a failure point is and how you can identify it. Another key thing to think about is what random process do you want to simulate over. Maybe you want to simulate over a random process that represents the price of a token with Geometric Brownian Motion or something more complex like a jump diffusion process, arbiter reexports rust quant and a binding for a liquid exchange that supports this. The last thing to consider is who are the agents in your simulation. Are they arbitrage bots, are they liquidity providers, are they random agents, or are they a combination of all of these. Identify key externally owned accounts and thing about what actions they can take in your simulation. - -When deisigning a simulation the first thing you need to think about is what contracts are in your simulation systems. You can start with just a one like in the template repository and add them as you continue your development. Almost all simulation design will start like this. - -## Set up Steps -- Identify key contracts -- Generate bindings for those contracts -- Deploy these contracts to the local in memory instance of revm (you can also skip this step in favor of using the forking feature) - -After you have a system deployed in your in memory revm instance you are going to want to make sure your system state is correct. This could mean making sure you contracts hold enough balance of some specific tokens. Maybe you want to mint some tokens to a specific address, or you need to do token aprovals for your contracts. - diff --git a/documentation/src/getting_started/simulation.md b/documentation/src/getting_started/simulation.md deleted file mode 100644 index 724c3484b..000000000 --- a/documentation/src/getting_started/simulation.md +++ /dev/null @@ -1 +0,0 @@ -# Setting up Simulations diff --git a/documentation/src/introduction/anomaly_detection.md b/documentation/src/index.md similarity index 58% rename from documentation/src/introduction/anomaly_detection.md rename to documentation/src/index.md index 11d469c5e..e9136b1bf 100644 --- a/documentation/src/introduction/anomaly_detection.md +++ b/documentation/src/index.md @@ -1,9 +1,48 @@ -# Anomaly Detection +# Arbiter +**Arbiter** is a framework for stateful Ethereum smart-contract simulation. +The framework features an [`ethers-rs`](https://github.com/gakonst/ethers-rs) middleware built on top of [revm](https://github.com/bluealloy/revm) which allows the end user to interact with a sandboxed `revm` instance as if it were an Ethereum node. +This provides a familiar interface for interacting with the Ethereum Virtual Machine (EVM), but with unrivaled speed. +Furthermore, Arbiter provides containment and management for simulations. For a running list of vulnerabilities found with Arbiter, please see the [Vulnerability Corpus](vulnerability_corpus.md). + +## Overview +The Arbiter workspace has three crates: +- `arbiter`: The binary crate that exposes a command line interface for initializing simulations via a templated repository and generating contract bindings needed for the simulation. +- `arbiter-core`: The lib crate that contains the core logic for the Arbiter framework including the `RevmMiddleware` discussed before, the `Environment` which envelopes simulations, and the `Manager` who controls a collection of environments. +- `arbiter-engine`: The lib crate that provides abstractions for building simulations and more. + +The purpose of Arbiter is to provide a toolset to construct arbitrary agents (defined in Rust, by smart contracts, or even other foreign function interfaces) and have these agents interact with an Ethereum-like environment of your design. +All contract bytecode is run directly using a blazing-fast EVM instance `revm` (which is used in live RPC nodes such as [`reth`](https://github.com/paradigmxyz/reth)) so that your contracts are tested in the exact same type of environment that they are deployed in. + +## Motivation +Smart contract engineers need to test their contracts against a wide array of potentially adversarial environments and contract parameters. +The static stateless testing of contracts can only take you so far. +To truly test the security of a contract, you need to test it against a wide array of dynamic environments that encompass the externalities of Ethereum mainnet. +We wanted to do just that with Arbiter. + +Both smart contract and financial engineers come together in Decentralized Finance (DeFi) to build and deploy a wide array of complex decentralized applications as well as financial strategies respectively. +For the latter, a financial engineer may want to test their strategies against thousands of market conditions, contract settings, shocks, and autonomous or random or even AI agents all while making sure their strategy isn't vulnerable to bytecode-level exploits. + +To configure such a rich simulation environment on a test or local network is also possible with Arbiter by a change in choice of middleware. +The most efficient choice for getting robust, yet quick, simulations would bypass any networking and use a low level language's implementation of the EVM. +Furthermore, we can gain control over the EVM worldstate by working directly on `revm`. +We would like the user to have a choice in how they want to simulate their contracts and Arbiter provides that choice. + +### Sim Driven Development and Strategization + +Test driven development is a popular engineering practice to write tests first, which fail, and implement logic to get the test to eventually pass. +With simulation driven development, it's possible to build "tests" that can only pass if the *incentives* actually work. For example, a sim driven test might be `is_loan_liquidated`, and a simulation must be made for a liquidator agent to do the liquidation. +This approach significantly improves the testing of economic systems and other mechanism designs, which is important in the world of networks that are mostly incentive driven. + +The same goes with developing strategies that one would like to deploy on a live Ethereum network. +One can use Arbiter to simulate their strategy with an intended goal and see if it actually works. +This is especially important in the world of DeFi where strategies are often a mix of on and offchain and are susceptible to exploits. + +### Anomaly Detection Anomaly detection in software design systems refers to identifying unusual patterns or behaviors that deviate from the expected or normal functioning of the software. These anomalies can be due to various reasons, such as bugs, performance issues, security vulnerabilities, or design flaws. Arbiter's agent-based modeling and EVM execution parity make it well suited for anomaly detection of greater systemic risk in the Ethereum ecosystem. In the context of software design, anomaly detection can be used to identify design flaws or inconsistencies in the design of the software. For example, if a particular module or component of the software behaves differently than it was intended, it could indicate a design flaw or security vulnerability. -## Agent Base Modeling +### Agent Base Modeling Agent-based simulations for anomaly detection systems involve creating a model of the system using agents, where each agent represents a component or a module of the system. These agents interact with each other and their environment, mimicking the behavior of the actual system. Agent-based simulations can be a powerful tool for anomaly detection as they can model complex systems and their interactions, making it possible to detect anomalies that other methods might miss. However, they also require a good understanding of the system being modeled and what constitutes normal behavior for that system. ### Modeling the System @@ -38,10 +77,10 @@ Insights gained from the system can be invaluable in refining and improving it. However, it's essential to be cautious about overfitting the data. Overfitting occurs when a model is excessively complex, such as having too many parameters relative to the number of observations. An overfitted model has poor predictive performance, as it overreacts to minor fluctuations in the training data. +## Developer Documentation +To see the documentation for the Arbiter crates, please visit the following: +- [`arbiter`](https://docs.rs/crate/arbiter/) +- [`arbiter-bindings`](https://docs.rs/crate/arbiter-bindings/) +- [`arbiter-core`](https://docs.rs/arbiter-core/) - - - - - - +You will also find each of these on crates.io. \ No newline at end of file diff --git a/documentation/src/introduction/introduction.md b/documentation/src/introduction/introduction.md deleted file mode 100644 index 4d32aa320..000000000 --- a/documentation/src/introduction/introduction.md +++ /dev/null @@ -1,10 +0,0 @@ -# Introduction - -Arbiter is a free an open source EVM analysis tool for complex smart contract systems. At it's core it is an in memory EVM sanbox with a set of analysis tools built on top of it. It is designed to be modular, extensible and performant. Arbiter is capable of delivering an array of stachastic analysis toold with evm execution parity. - -## Motivation -Smart contract engineers need to test their contracts against a wide array of potentially adversarial environments and contract parameters. The static stateless testing of contracts can only take you so far. To truly test the security of a contract, you need to test it against a wide array of dynamic environments that encompass the externalities of Ethereum mainnet. We wanted to do just that with Arbiter. - -Both smart contract and financial engineers come together in Decentralized Finance (DeFi) to build and deploy a wide array of complex decentralized applications as well as fincancial strategies respectively. For the latter, a financial engineer may want to test their strategies against thousands of market conditions, contract settings, shocks, and autonomous or random or even AI agents all while making sure their strategy isn't vulnerable to bytecode-level exploits. - -To configure such a rich simulation environment on a test or local network is also possible with Arbiter by a change in choice of middleware. The most efficient choice for getting robust, yet quick, simulations would bypass any networking and use a low level language's implementation of the EVM. Furthermore, we can gain control over the EVM worldstate by working directly on revm. We would like the user to have a choice in how they want to simulate their contracts and Arbiter provides that choice. \ No newline at end of file diff --git a/documentation/src/lib.rs b/documentation/src/lib.rs new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/documentation/src/lib.rs @@ -0,0 +1 @@ + diff --git a/documentation/src/risk/metrics.md b/documentation/src/risk/metrics.md deleted file mode 100644 index 241a56ad4..000000000 --- a/documentation/src/risk/metrics.md +++ /dev/null @@ -1,50 +0,0 @@ -# Metrics -Data plays a crucial role in quantifying risk and modeling systems. It provides the foundation for statistical analysis and predictive modeling, enabling us to measure and understand the behavior of systems under various conditions. We can identify patterns, trends, and correlations by analyzing data to help us predict future events or outcomes. This is particularly important in economic risk, where accurate predictions can help mitigate potential losses and optimize returns. - -The particular metrics we have been interested in (by no means exhaustive or representative of the entire field) are: - -## Arbitrage Profit -Arbitrage profit is the profit made by taking advantage of the price differences of a particular asset across different markets or platforms. In DeFi, these opportunities can arise due to inefficiencies in asset pricing. If related to a decentralized exchange, such as an automated market maker(AMM), mathematical metrics can be derived to compute the cost and revenue of these arbitrage opportunities exactly. - -There are generally two types of arbitrage opportunities in DeFi: - ->Atomic arbitrage opportunities in DeFi are transactions that are either fully executed or not executed at all. This is possible due to the atomicity of the Ethereum Virtual Machine (EVM), which ensures that all operations within a transaction are treated as a single, indivisible unit. The entire transaction is reverted if any operation fails, ensuring no partial state changes occur. This characteristic of the EVM allows for risk-free arbitrage opportunities, as the arbitrageur is not exposed to the risk of one part of the trade executing while the other does not. - ->Non-atomic arbitrage opportunities in DeFi are transactions that are partially executed. This is possible due to the lack of atomicity in the EVM, allowing partial state changes to occur. If one part of the trade fails, the other can still be executed, resulting in a partial state change. This characteristic of the EVM allows for riskier arbitrage opportunities, as the arbitrageur is exposed to the risk of one part of the trade executing while the other is not. - -Non-atomic arbitrage is much more challenging to measure and model, requiring a more complex understanding of the EVM and its execution model. However, atomic arbitrage is [easy to measure](https://explore.flashbots.net/), as it only requires a basic understanding of the EVM and its execution model. - -## Liquidity Provider Portfolio Value -Liquidity Provider Portfolio Value refers to the payoff that an LP assumes when providing liquidity to a pool[Replicating Market Makers](https://arxiv.org/abs/2103.14769)[Replicating Monotonic Payoffs Without Oracles](https://arxiv.org/abs/2111.13740). - - The has been shown to have two components path dependent and path independent components, which have been introduced in this [paper](https://arxiv.org/abs/2208.06046) as loss vs. holding(LVH) and loss vs. rebalancing (LVR), respectively. - -## Fee Growth - -Fee Growth in Automated Market Makers (AMMs) refers to the fees collected by the liquidity providers over time. These fees are generated from the trading activity in the liquidity pool and are directly proportional to the volume of trades. The more the trading activity (turnover), the higher the fees collected, leading to a growth in the fees. This fee growth can be a significant source of income for liquidity providers, in addition to the potential price appreciation of the assets in the pool. - -## Model Parameters - -## Geometric Brownian Motion (GBM) - -Geometric Brownian Motion (GBM) is a standard method to model price paths in financial markets. Two parameters characterize it: - -1. **Drift (μ)**: This represents the asset's expected return. It is the direction that we expect our asset to move in the future. - -2. **Volatility (σ)**: This represents the standard deviation of the asset's returns. It is a measure of the asset's risk or uncertainty. - -The GBM model assumes that the logarithmic returns of the asset prices are normally distributed and that the following stochastic differential equation can model them: - -$$ -dS_t = μS_t dt + σS_t dW_t -$$ - -Where: - -- $S_t$ is the asset price at time t -- $μ$ is the drift -- $σ$ is the volatility -- $W_t$ is a Wiener process - -This equation describes the change in the asset price over an infinitesimally small period. The first term on the right-hand side represents the deterministic trend (drift), and the second term represents the random fluctuation (volatility). - diff --git a/documentation/src/usage/arbiter_cli.md b/documentation/src/usage/arbiter_cli.md new file mode 100644 index 000000000..2adcb7169 --- /dev/null +++ b/documentation/src/usage/arbiter_cli.md @@ -0,0 +1,57 @@ +# Arbiter CLI +Arbiter provides a Foundry-like CLI experience. You can initialize new projects, generate bindings and execute simulations using the CLI. + +To create a new Arbiter project: +```bash +arbiter init your-new-project +cd your-new-project +``` +This initializes a new Arbiter project with a template. +You can run `arbiter init --no-git` to remove the `.git` directory from the template upon initialization. + +## Bindings + +You can load or write your own smart contracts in the `arbiter-bindings/contracts/` directory and begin writing your own simulations. +Arbiter treats Rust smart-contract bindings as first-class citizens. +The contract bindings are generated via Foundry's `forge` command. +`arbiter bind` wraps `forge` with some convenience features that will generate all your bindings to src/bindings as a rust module. +[Foundry](https://github.com/foundry-rs/foundry) power-users are welcome to use `forge` directly. +You can generate the bindings again by running: + +```bash +arbiter bind +``` +Arbiter bind wraps `forge bind` and is configured from your cargo.toml. There are three optional fields you can add to your toml to configure arbiter bind. +```toml +[arbiter] +bindings_workspace = "simulation" # must be a valid workspace member +submodules = false # change to true if you want the submodule bindings to be generated +ignore_interfaces = false # change to true if you want to ignore interfaces contracts +``` + +The template is executable at this point and you can run it by running: + +```bash +cargo run +``` + +You can load or write your own smart contracts in the templates `contracts/` directory and begin writing your own simulations. Arbiter treats Rust smart-contract bindings as first-class citizens. The contract bindings are generated via Foundry's forge command. arbiter bind wraps forge with some convenience features that will generate all your bindings to `src/bindings` as a rust module. Foundry power-users are welcome to use forge directly. You can also manage project dependencies using git submodules via `forge install`. The [Foundry book](https://book.getfoundry.sh/reference/forge/forge-install) provides further details on managing project dependencies and other features. + + +## Forking + +To fork a state of an EVM network, you must first create a fork config file. +An example is provided in the `example_fork` directory. +Essentially, you provide your storage location for the data, the network you want the block number you want, and metadata about the contracts you want to fork. + +```bash +arbiter fork +``` + +This will create a fork of the network you specified in the config file and store it in the location you specified. +It can then be loaded into an `arbiter-core` `Environment` by using the `Fork::from_disk()` method. + +Forking is done this way to make sure that all emulation done does not require a constant connection to an RPC-endpoint. + +**Optional Arguments** +You can run `arbiter fork --overwrite` to overwrite the fork if it already exists. \ No newline at end of file diff --git a/documentation/src/usage/arbiter_core/environment.md b/documentation/src/usage/arbiter_core/environment.md new file mode 100644 index 000000000..2bf23d9af --- /dev/null +++ b/documentation/src/usage/arbiter_core/environment.md @@ -0,0 +1,86 @@ +# Environment +The `Environment` owns a `revm` instance for processing EVM bytecode. +To make the `Environment` performant and flexible, it runs on its own system thread and receives all communication via `Instruction`s sent to it via a `Sender`. +The `Socket` is a struct owned by the `Environment` that manages all inward and outward communication with the `Environment`'s clients, such as the `Instruction` channel. + +## Usage +To create an `Environment`, we use a builder pattern that allows you to pre-load an `Environment` with your own database. +We can do the following to create a default `Environment`: +```rust +use arbiter_core::environment::Environment; + +fn main() { + let env = Environment::builder().build(); +} +``` +Note that the call to `.build()` will start the `Environment`'s thread and begin processing `Instruction`s. + +### Inspector Configuration +The `Environment` also supports the ability to inspect the `revm` instance's state at any point in time which can be useful for debugging and managing gas. +By default, the `Environment` will not inspect the `revm` instance's state at all (which should provide the highest speed), but you can enable these features by doing the following: +```rust +use arbiter_core::environment::Environment; + +fn main() { + let env = Environment::builder() + .with_console_logs() + .with_pay_gas() + .build(); +} +``` +The feature `with_console_logs` will print out logs generated by `console2.log` in Solidity so that you can get intermediate state of your contracts. +The feature `with_pay_gas` will pay gas for transactions which is useful for realism. + +### Fork Configuration +If you have a database that has been forked from a live network, it has likely been serialized to disk. +In which case, you can do something like this: +```rust, ignore +use arbiter_core::environment::Environment; +use arbiter_core::environment::fork::Fork; + +fn main() { + let path_to_fork = "path/to/fork"; + let fork = Fork::from_disk(path_to_fork).unwrap(); + let env = Environment::builder().with_db(fork).build(); +} +``` +This will create an `Environment` that has been forked from the database at the given path and is ready to receive `Instruction`s. + +`Environment` supports more customization for the `gas_limit` and `contract_size_limit` of the `revm` instance. +You can do the following: +```rust +use arbiter_core::environment::Environment; + +fn main() { + let env = Environment::builder() + .with_gas_limit(revm::primitives::U256::from(12_345_678)) + .with_contract_size_limit(111_111) + .build(); +} +``` + +## Instructions +`Instruction`s have been added to over time, but at the moment we allow for the following: +- `Instruction::AddAccount`: Add an account to the `Environment`'s world state. This is usually called by the `RevmMiddleware` when a new client is created. +- `Instruction::BlockUpdate`: Update the `Environment`'s block number and block timestamp. This can be handled by an external agent in a simulation, if desired. +- `Instruction::Cheatcode`: Execute one of the `Cheatcodes` on the `Environment`'s world state. +The `Cheatcodes` include: + - `Cheatcodes::Deal`: Used to set the raw ETH balance of a user. Useful when you need to pay gas fees in a transaction. + - `Cheatcodes::Load`: Gets the value of a storage slot of an account. + - `Cheatcodes::Store`: Sets the value of a storage slot of an account. + - `Cheatcodes::Access`: Gets the account at an address. +- `Instruction::Query`: Allows for querying the `Environment`'s world state and current configuration. Anything in the `EnvironmentData` enum is accessible via this instruction. + - `EnvironmentData::BlockNumber`: Gets the current block number of the `Environment`. + - `EnvironmentData::BlockTimestamp`: Gets the current block timestamp of the `Environment`. + - `EnvironmentData::GasPrice`: Gets the current gas price of the `Environment`. + - `EnvironmentData::Balance`: Gets the current ETH balance of an account. + - `EnvironmentData::TransactionCount`: Gets the current nonce of an account. +- `Instruction::Stop`: Stops the `Environment`'s thread and echos out to any listeners to shut down their event streams. This can be used when handling errors or reverts, or just when you're done with the `Environment`. +- `Instruction::Transaction`: Executes a transaction on the `Environment`'s world state. This is usually called by the `RevmMiddleware` when a client sends a ETH-call or state-changing transaction. + +The `RevmMiddleware` provides methods for sending the above instructions to an associated `Environment` so that you do not have to interact with the `Environment` directly! + +## Events +The `Environment` also emits Ethereum events and errors/reverts to clients who are set to listen to them. +To do so, we use a `tokio::sync::broadcast` channel and the `RevmMiddleware` manages subscriptions to these events. +As for errors or reverts, we are working on making the flow of handling these more graceful so that your own program or agents can decide how to handle them. diff --git a/documentation/src/usage/arbiter_core/index.md b/documentation/src/usage/arbiter_core/index.md new file mode 100644 index 000000000..3eb201dbc --- /dev/null +++ b/documentation/src/usage/arbiter_core/index.md @@ -0,0 +1,5 @@ +# Arbiter Core +The `arbiter-core` crate is the core of the Arbiter framework. +It contains the `Environment` struct which acts as an EVM sandbox and the `RevmMiddleware` which gives a convenient interface for interacting with contracts deployed into the `Environment`. +The API provided by `RevmMiddleware` is that of the `Middleware` trait in the `ethers-rs` crate, therefore it looks and feels just like you're interacting with a live network when you work with an Arbiter `Environment`. +The only notable differences are in the control you have over this `Environment` compared to something like Anvil, a testnet, or a live network. diff --git a/documentation/src/usage/arbiter_core/middleware.md b/documentation/src/usage/arbiter_core/middleware.md new file mode 100644 index 000000000..8c9209cd7 --- /dev/null +++ b/documentation/src/usage/arbiter_core/middleware.md @@ -0,0 +1,46 @@ +# Middleware +The `ArbiterMiddleware` is the main interface for interacting with an `Environment`. +We implement the `ethers-rs` `Middleware` trait so that you may work with contract bindings generated by `forge` or `arbiter bind` as if you were interacting with a live network. +Not all methods are implemented, but the relevant ones are. + +`ArbiterMiddleware` owns a `Connection` which is the client's interface to the `Environment`'s `Socket`. +This `Connection` acts much like a WebSocket connection and is used to send `Instruction`s and receive their outcome from the `Environment` as well as subscribe to events. +To make this `Connection` and `ArbiterMiddleware` flexible, we also implement (for both) the `JsonRpcClient` and `PubSubClient` traits. + +We also provide `ArbiterMiddleware` a wallet so that it can be associated to an account in the `Environment`'s world state. +The `wallet: EOA` field of `ArbiterMiddleware` is decided upon creation of the `ArbiterMiddleware` and, if the wallet is generated from calling `ArbiterMiddleware::new()`, wallet will be of `EOA::Wallet(Wallet)` which allows for `ArbiterMiddleware` to sign transactions if need be. +It is possible to create accounts from a forked database, in which case you would call `ArbiterMiddleware::new_from_forked_eoa()` and the wallet would be of `EOA::Forked(Address)`. +This type is unable to sign as it is effectively impossible to recover the signing key from an address. +Fortunately, for almost every usecase of `ArbiterMiddleware`, you will not need to sign transactions, so this distinction does not matter. + +## Usage + +To create a `ArbiterMiddleware` that is associated with an account in the `Environment`'s world state, we can do the following: +```rust +use arbiter_core::{middleware::ArbiterMiddleware, environment::Environment}; + +fn main() { + let env = Environment::builder().build(); + + // Create a client for the above `Environment` with an ID + let id = "alice"; + let alice = ArbiterMiddleware::new(&env, Some(id)); + + // Create a client without an ID + let client = ArbiterMiddleware::new(&env, None); +} +``` +These created clients can then get access to making calls and transactions to contracts deployed into the `Environment`'s world state. We can do the following: +```rust +use arbiter_core::{middleware::ArbiterMiddleware, environment::Environment}; +use arbiter_bindings::bindings::arbiter_token::ArbiterToken; + +#[tokio::main] +async fn main() { + let env = Environment::builder().build(); + let client = ArbiterMiddleware::new(&env, None).unwrap(); + + // Deploy a contract + let contract = ArbiterToken::deploy(client, ("ARBT".to_owned(), "Arbiter Token".to_owned(), 18u8)).unwrap().send().await.unwrap(); +} +``` diff --git a/documentation/src/usage/arbiter_engine/agents_and_engines.md b/documentation/src/usage/arbiter_engine/agents_and_engines.md new file mode 100644 index 000000000..e477c8ecb --- /dev/null +++ b/documentation/src/usage/arbiter_engine/agents_and_engines.md @@ -0,0 +1,58 @@ +# Agents and Engines +`Behavior`s are the heartbeat of your `Agent`s and they are wrapped by `Engine`s. +The main idea here is that you can have an `Agent` that has as many `Behavior`s as you like, and each of those behaviors may process different types of events. +This gives flexibility in how you want to design your `Agent`s and what emergent properties you want to observe. + +## Design Principles +We designed the behaviors to be flexible. It is up to you whether or not you prefer to have `Agent`s have multiple `Behavior`s or not or if you want them to have a single `Behavior` that processes all events. +For the former case, you will build `Behavior` for different types `E` and place these inside of an `Agent`. +For the latter, you will create an `enum` that wraps all the different types of events that you want to process and then implement `Behavior` on that `enum`. +The latter will also require a `stream::select` type of operation to merge all the different event streams into one, though this is not difficult to do. + +## `struct Agent` +The `Agent` struct is the primary struct that you will be working with. +It contains an ID, a client (`Arc`) that provides means to send calls and transactions to an Arbiter `Environment`, and a `Messager`. +It looks like this: +```rust, ignore +pub struct Agent { + pub id: String, + pub messager: Messager, + pub client: Arc, + pub(crate) behavior_engines: Vec>, +} +``` + +Your work will only be to define `Behavior`s and then add them to an `Agent` with the `Agent::with_behavior` method. + +The `Agent` is inactive until it is paired with a `World` and then it is ready to be run. +This is handled by creating a world (see: [Worlds and Universes](./worlds_and_universes.md)) and then adding the `Agent` to the `World` with the `World::add_agent` method. +Some of the intermediary representations are below: + +#### `struct AgentBuilder` +The `AgentBuilder` struct is a builder pattern for creating `Agent`s. +This is essentially invisible for the end-user, but it is used internally so that `Agent`s can be built in a more ergonomic way. + +#### `struct Engine` +Briefly, the `Engine` struct provides the machinery to run a `Behavior` and it is not necessary for you to handle this directly. +The purpose of this design is to encapsulate the `Behavior` and the event stream `Stream` that the `Behavior` will use for processing. +This encapsulation also allows the `Agent` to hold onto `Behavior` for various different types of `E` all at once. + +## Example +Let's create an `Agent` that has two `Behavior`s using the `Replier` behavior from before. +```rust, ignore +use arbiter_engine::agent::Agent; +use crate::Replier; + +fn setup() { + let ping_replier = Replier::new("ping", "pong", 5, None); + let pong_replier = Replier::new("pong", "ping", 5, Some("ping")); + let agent = Agent::new("my_agent") + .with_behavior(ping_replier) + .with_behavior(pong_replier); +} +``` +In this example, we have created an `Agent` with two `Replier` behaviors. +The `ping_replier` will reply to a message with "pong" and the `pong_replier` will reply to a message with "ping". +Given that the `pong_replier` has a `startup_message` of "ping", it will send a message to everyone (including the "my_agent" itself who holds the `ping_replier` behavior) when it starts up. +This will start a chain of messages that will continue in a "ping" "pong" fashion until the `max_count` is reached. +``` \ No newline at end of file diff --git a/documentation/src/usage/arbiter_engine/behaviors.md b/documentation/src/usage/arbiter_engine/behaviors.md new file mode 100644 index 000000000..ff2c0ce9b --- /dev/null +++ b/documentation/src/usage/arbiter_engine/behaviors.md @@ -0,0 +1,95 @@ +# Behaviors +The design of `arbiter-engine` is centered around the concept of `Agent`s and `Behavior`s. +At the core, we place `Behavior`s as the event-driven machinery that defines the entire simulation. +What we want is that your simulation is defined completely with how your `Agent`s behaviors are defined. +All you should be looking for is how to define your `Agent`s behaviors and what emergent properties you want to observe. + +## `trait Behavior` +To define a `Behavior`, you need to implement the `Behavior` trait on a struct of your own design. +The `Behavior` trait is defined as follows: +```rust, ignore +pub trait Behavior { + fn startup(&mut self, client: Arc, messager: Messager) -> Result, ArbiterEngineError>; + fn process(&mut self, event: E) -> Result; +} +``` +To outline the design principles here: +- `startup` is a method that initializes the `Behavior` and returns an `EventStream` that the `Behavior` will use for processing. + - This method yields a client and messager from the `Agent` that owns the `Behavior`. + In this method you should take the client and messager and store them in your struct if you will need them in the processing of events. + Note, you may not need them! +- `process` is a method that processes an event of type `E` and returns an `Option`. + - If `process` returns `Some(MachineHalt)`, then the `Behavior` will stop processing events completely. + +**Summary:** A `Behavior` is tantamount to engage the processing some events of type `E`. + +**Advice:** `Behavior`s should be limited in scope and should be a simplistic action driven from a single event. +Otherwise you risk having a `Behavior` that is too complex and difficult to understand and maintain. + +### Example +To see this in use, let's take a look at an example of a `Behavior` called `Replier` that replies to a message with a message of its own, and stops once it has replied a certain number of times. +```rust, ignore +use std::sync::Arc; +use arbiter_core::middleware::RevmMiddleware; +use arbiter_engine::{ + machine::{Behavior, ControlFlow}, + messager::{Messager, To}, + EventStream}; + +pub struct Replier { + receive_data: String, + send_data: String, + max_count: u64, + startup_message: Option, + count: u64, + messager: Option, +} + +impl Replier { + pub fn new( + receive_data: String, + send_data: String, + max_count: u64, + startup_message: Option, + ) -> Self { + Self { + receive_data, + send_data, + startup_message, + max_count, + count: 0, + messager: None, + } + } +} + +impl Behavior for Replier { + async fn startup( + &mut self, + client: Arc, + messager: Messager, + ) -> Result, ArbiterEngineError> { + if let Some(startup_message) = &self.startup_message { + messager.send(To::All, startup_message).await; + } + self.messager = Some(messager.clone()); + messager.stream() + } + + async fn process(&mut self, event: Message) -> Result { + if event.data == self.receive_data { + self.messager.unwrap().messager.send(To::All, send_data).await; + self.count += 1; + } + if self.count == self.max_count { + return Ok(ControlFlow::Halt); + } + Ok(ControlFlow::Continue) + } +} +``` +In this example, we have a `Behavior` that upon `startup` will see if there is a `startup_message` assigned and if so, send it to all `Agent`s that are listening to their `Messager`. +Then, it will store the `Messager` for sending messages later on and start a stream of incoming messages so that we have `E = Message` in this case. +Once these are completed, the `Behavior` automatically transitions into the `process`ing stage where events are popped from the `EventStream` and fed to the `process` method. + +As messages come in, if the `receive_data` matches the incoming message, then the `Behavior` will send the `send_data` to all `Agent`s listening to their `Messager` a message with data `send_data`. \ No newline at end of file diff --git a/documentation/src/usage/arbiter_engine/configuration.md b/documentation/src/usage/arbiter_engine/configuration.md new file mode 100644 index 000000000..19b5873de --- /dev/null +++ b/documentation/src/usage/arbiter_engine/configuration.md @@ -0,0 +1,66 @@ +# Configuration +To make it so you rarely have to recompile your project, you can use a configuration file to set the parameters of your simulation once your `Behavior`s have been defined. +Let's take a look at how to do this. + +## Behavior Enum +It is good practice to take your `Behavior`s and wrap them in an `enum` so that you can use them in a configuration file. +For instance, let's say you have two struct `Maker` and `Taker` that implement `Behavior` for their own `E`. +Then you can make your `enum` like this: +```rust, ignore +use arbiter_macros::Behaviors; + +#[derive(Behaviors)] +pub enum Behaviors { + Maker(Maker), + Taker(Taker), +} +``` +Notice that we used the `Behaviors` derive macro from the `arbiter_macros` crate. +This macro will generate an implementation of a `CreateStateMachine` trait for the `Behaviors` enum and ultimately save you from having to write a lot of boilerplate code. +The macro solely requires that the `Behavior`s you have implement the `Behavior` trait and that the necessary imports are in scope. + +## Configuration File +Now that you have your `enum` of `Behavior`s, you can configure your `World` and the `Agent`s inside of it from configuration file. +Since the `World` and your simulation is completely defined by the `Agent` `Behavior`s you make, all you need to do is specify your `Agent`s in the configuration file. +For example, let's say we have the `Replier` behavior from before, so we have: +```rust, ignore +#[derive(Behaviors)] +pub enum Behaviors { + Replier(Replier), +} + +pub struct Replier { + receive_data: String, + send_data: String, + max_count: u64, + startup_message: Option, + count: u64, + messager: Option, +} +``` +Then, we can specify the "ping" and "pong" `Behavior`s like this: +```toml +[[my_agent]] +Replier = { send_data = "ping", receive_data = "pong", max_count = 5, startup_message = "ping" } + +[[my_agent]] +Replier = { send_data = "pong", receive_data = "ping", max_count = 5 } +``` +If you instead wanted to specify two `Agent`s "Alice" and "Bob" each with one of the `Replier` `Behavior`s, you could do it like this: +```toml +[[alice]] +Replier = { send_data = "ping", receive_data = "pong", max_count = 5, startup_message = "ping" } + +[[bob]] +Replier = { send_data = "pong", receive_data = "ping", max_count = 5 } +``` + +## Loading the Configuration +Once you have your configuration file located at `./path/to/config.toml`, you can load it and run your simulation like this: +```rust, ignore +fn main() { + let world = World::from_config("./path/to/config.toml")?; + world.run().await; +} +``` +At the moment, we do not configure `Universe`s from a configuration file, but this is a feature that is planned for the future. \ No newline at end of file diff --git a/documentation/src/usage/arbiter_engine/index.md b/documentation/src/usage/arbiter_engine/index.md new file mode 100644 index 000000000..3f8167018 --- /dev/null +++ b/documentation/src/usage/arbiter_engine/index.md @@ -0,0 +1,27 @@ +# Arbiter Engine +`arbiter-engine` provides the machinery to build agent based / event driven simulations and should be the primary entrypoint for using Arbiter. +The goal of this crate is to abstract away the work required to set up agents, their behaviors, and the worlds they live in. +At the moment, all interaction of agents is done through the `arbiter-core` crate and is meant to be for local simulations and it is not yet generalized for the case of live network automation. + +## Hierarchy +The primary components of `arbiter-engine` are, from the bottom up: +- `Behavior`: This is an event-driven behavior that takes in some item of type `E` and can act on that. +The `Behavior` has two methods: `startup` and `process`. + - `startup` is meant to initialize the `Behavior` and any context around it. + An example could be an agent that deploys token contracts on startup. + - `process` is meant to be a stage that runs on every event that comes in. + An example could be an agent that deployed token contracts on startup, and now wants to process queries about the tokens deployed in the simulation (e.g., what their addresses are). +- `Engine` and `StateMachine`: The `Engine` is a struct that implements the `StateMachine` trait as an entrypoint to run `Behavior`s. + - `Engine` is a struct owns a `B: Behavior` and the event stream `Stream` that the `Behavior` will use for processing. + - `StateMachine` is a trait that reduces the interface to `Engine` to a single method: `execute`. + This trait allows `Agent`s to have multiple behaviors that may not use the same event type. +- `Agent` a struct that contains an ID, a client (`Arc`) that provides means to send calls and transactions to an Arbiter `Environment`, and a `Messager`. + - `Messager` is a struct that owns a `Sender` and `Receiver` for sending and receiving messages. + This is a way for `Agent`s to communicate with each other. + It can also be streamed and used for processing messages in a `Behavior`. + - `Agent` also owns a `Vec>` which is a list of `StateMachine`s that the `Agent` will run. + This is a way for `Agent`s to have multiple `Behavior`s that may not use the same event type. +- `World` is a struct that has an ID, an Arbiter `Environment`, a mapping of `Agent`s, and a `Messager`. + - The `World` is tasked with letting `Agent`s join in, and when they do so, to connect them to the `Environment` with a client and `Messager` with the `Agent`'s ID. +- `Universe` is a struct that wraps a mapping of `World`s. + - The `Universe` is tasked with letting `World`s join in and running those `World`s in parallel. diff --git a/documentation/src/usage/arbiter_engine/worlds_and_universes.md b/documentation/src/usage/arbiter_engine/worlds_and_universes.md new file mode 100644 index 000000000..1fd8f25ad --- /dev/null +++ b/documentation/src/usage/arbiter_engine/worlds_and_universes.md @@ -0,0 +1,85 @@ +# Worlds and Universes +`Universes` are the top-level struct that you will be working with in the Arbiter Engine. +They are tasked with letting `World`s join in and running those `World`s in parallel. +By no means are you required to use `Universe`s, but they will be useful for running multiple simulations at once or, in the future, they will allow for running `World`s that have different internal environments. +For instance, one could have a `World` that consists of `Agent`s acting on the Ethereum mainnet, another `World` that consists of `Agent`s acting on Optimism, and finally a `World` that has an Arbiter `Environment` as the network analogue. +Using these in tandem is a long-term goal of the Arbiter project. + +Depending on your needs, you will either use the `Universe` if you want to run multiple `World`s in parallel or you will use the `World` if you only want to run a single simulation. +The choice is yours. + +## `struct Universe` +The `Universe` struct looks like this: +```rust, ignore +pub struct Universe { + worlds: Option>, + world_tasks: Option>>, +} +``` +The `Universe` is a struct that wraps a mapping of `World`s where the key of the map is the `World`'s ID. +Also, the `Universe` manages the running of those `World`s in parallel by storing the running `World`s as tasks. +In the future, more introspection and control will be added to the `Universe` to allow for debugging and managing the running `World`s. + +The `Universe::run_worlds` currently iterates through the `World`s and starts them in concurrent tasks. + +## `struct World` +The `World` struct looks like this: +```rust, ignore +pub struct World { + pub id: String, + pub agents: Option>, + pub environment: Environment, + pub messager: Messager, +} +``` +The `World` is a struct that has an ID, an Arbiter `Environment`, a mapping of `Agent`s, and a `Messager`. +The `World` is tasked with letting `Agent`s join in, and when they do so, to connect them to the `Environment` with a client and `Messager` with the `Agent`'s ID. +Then the `World` stores the `Agent`s in a map where the key is the `Agent`'s ID. + +The main methods to use with the world is `World::add_agent` which adds an agent to the `World` and `World::run` which will engage all of the `Agent` `Behavior`s. + +In future development, the `World` will be generic over your choice of `Provider` that encapsulates the Ethereum-like execution environment you want to use (e.g., Ethereum mainnet, Optimism, or an Arbiter `Environment`). + +## Example +Let's first do a quick example where we take a `World` and add an `Agent` to it. +```rust, ignore +use arbiter_engine::{agent::Agent, world::World}; +use crate::Replier; + +fn setup_world(id: &str) -> World { + let ping_replier = Replier::new("ping", "pong", 5, None); + let pong_replier = Replier::new("pong", "ping", 5, Some("ping")); + let agent = Agent::new("my_agent") + .with_behavior(ping_replier) + .with_behavior(pong_replier); + let mut world = World::new(id); + world.add_agent(agent); +} + +async fn run() { + let world = setup_world("my_world"); + world.run().await; +} +``` +If you wanted to extend this to use a `Universe`, you would simply create a `Universe` and add the `World` to it. +```rust, ignore +use arbiter_engine::{agent::Agent, world::World}; +use crate::Replier; + +fn setup_world(id: &str) -> World { + let ping_replier = Replier::new("ping", "pong", 5, None); + let pong_replier = Replier::new("pong", "ping", 5, Some("ping")); + let agent = Agent::new("my_agent") + .with_behavior(ping_replier) + .with_behavior(pong_replier); + let mut world = World::new(id); + world.add_agent(agent); +} + +fn main() { + let mut universe = Universe::new(); + universe.add_world(setup_world("my_world")); + universe.add_world(setup_world("my_other_world")); + universe.run_worlds().await; +} +``` diff --git a/documentation/src/usage/arbiter_macros.md b/documentation/src/usage/arbiter_macros.md new file mode 100644 index 000000000..ee85cd6b2 --- /dev/null +++ b/documentation/src/usage/arbiter_macros.md @@ -0,0 +1,5 @@ +# Arbiter macros +`arbiter_macros` provides a set of macros to help with the use of `arbiter-engine` and `arbiter-core`. +At the moment, we only have one proc macro: `#[derive(Behaviors)]`. +This macro will generate an implementation of a `CreateStateMachine` trait for the `Behaviors` enum and ultimately save you from having to write a lot of boilerplate code. +See the [Configuration](./arbiter_engine/configuration.md) page for more information on how to use this macro. \ No newline at end of file diff --git a/documentation/src/usage/index.md b/documentation/src/usage/index.md new file mode 100644 index 000000000..23ac7b5ec --- /dev/null +++ b/documentation/src/usage/index.md @@ -0,0 +1,16 @@ +# Software Architecture +Arbiter is broken into a number of crates that provide different levels of abstraction for interacting with the Ethereum Virtual Machine (EVM) sandbox. + +## Arbiter Core +The `arbiter-core` crate is the core of the Arbiter. +It contains the `Environment` struct which acts as an EVM sandbox and the `RevmMiddleware` which gives a convenient interface for interacting with contracts deployed into the `Environment`. +Direct usage of `arbiter-core` will be minimized as much as possible as it is intended for developers to mostly pull from the `arbiter-engine` crate in the future. +This crate provides the interface for agents to interact with an in memory evm. + +## Arbiter Engine +The `arbiter-engine` crate is the main interface for running simulations. +It is built on top of `arbiter-core` and provides a more ergonomic interface for designing agents and running them in simulations. + +## Arbiter CLI (under construction) +The Arbiter CLI is a minimal interface for managing your Arbiter projects. +It is built on top of Foundry and aims to provide a similar CLI interface of setting up and interacting with Arbiter projects. \ No newline at end of file diff --git a/documentation/src/usage/techniques/anomaly_detection.md b/documentation/src/usage/techniques/anomaly_detection.md new file mode 100644 index 000000000..d9422bcaf --- /dev/null +++ b/documentation/src/usage/techniques/anomaly_detection.md @@ -0,0 +1,8 @@ +# Anomaly Detection + +Anomaly detection is the process of identifying unexpected items or events in data sets, which differ from the norm. +Anomaly detection is often applied on unlabeled data which is known as unsupervised anomaly detection. + +When you are building your simulation you are trying to discover unknown unknowns and carefully examine design assumptions. +This is a difficult task and it is not always clear what you are looking for. +As a result the best place to start is the design a simulation that will validate the existing design assumptions. diff --git a/documentation/src/usage/techniques/index.md b/documentation/src/usage/techniques/index.md new file mode 100644 index 000000000..b5764677f --- /dev/null +++ b/documentation/src/usage/techniques/index.md @@ -0,0 +1,8 @@ +# Techniques + +At a high level when you are designing a simulation the two things you need to think about are behaviors and one or more random variable. +A random variable is what you can perturb over the course of a simulation. +For example almost all economic models have a random variable that represents the price. +This allows you to see how the model behaves under different prices or market conditions. +Does this system handle price volatility well? +Or does it break down? \ No newline at end of file diff --git a/documentation/src/risk/risk_metrics.md b/documentation/src/usage/techniques/measuring_risk.md similarity index 50% rename from documentation/src/risk/risk_metrics.md rename to documentation/src/usage/techniques/measuring_risk.md index fc9a22207..bd4f3ecea 100644 --- a/documentation/src/risk/risk_metrics.md +++ b/documentation/src/usage/techniques/measuring_risk.md @@ -1,3 +1,4 @@ +# Measuring Risk # Quantifying Security Risk Quantitative security is a field of research that applies mathematical and statistical methods to studying cybersecurity. It aims to quantify and model security risks, vulnerabilities, and impacts providing a more objective and measurable approach to security management. Quantitative security can be used to assess the effectiveness of security controls, identify vulnerabilities, and predict the impact of security incidents. It can also be used to evaluate the effectiveness of security policies and procedures. @@ -59,3 +60,54 @@ Credit risk can be quantified using credit scoring models like the Altman Z-scor It's important to note that these are just examples, and quantifying economic risk in finance is a complex process that requires a deep understanding of financial theories and statistical models. + +# Metrics +Data plays a crucial role in quantifying risk and modeling systems. It provides the foundation for statistical analysis and predictive modeling, enabling us to measure and understand the behavior of systems under various conditions. We can identify patterns, trends, and correlations by analyzing data to help us predict future events or outcomes. This is particularly important in economic risk, where accurate predictions can help mitigate potential losses and optimize returns. + +The particular metrics we have been interested in (by no means exhaustive or representative of the entire field) are: + +## Arbitrage Profit +Arbitrage profit is the profit made by taking advantage of the price differences of a particular asset across different markets or platforms. In DeFi, these opportunities can arise due to inefficiencies in asset pricing. If related to a decentralized exchange, such as an automated market maker(AMM), mathematical metrics can be derived to compute the cost and revenue of these arbitrage opportunities exactly. + +There are generally two types of arbitrage opportunities in DeFi: + +>Atomic arbitrage opportunities in DeFi are transactions that are either fully executed or not executed at all. This is possible due to the atomicity of the Ethereum Virtual Machine (EVM), which ensures that all operations within a transaction are treated as a single, indivisible unit. The entire transaction is reverted if any operation fails, ensuring no partial state changes occur. This characteristic of the EVM allows for risk-free arbitrage opportunities, as the arbitrageur is not exposed to the risk of one part of the trade executing while the other does not. + +>Non-atomic arbitrage opportunities in DeFi are transactions that are partially executed. This is possible due to the lack of atomicity in the EVM, allowing partial state changes to occur. If one part of the trade fails, the other can still be executed, resulting in a partial state change. This characteristic of the EVM allows for riskier arbitrage opportunities, as the arbitrageur is exposed to the risk of one part of the trade executing while the other is not. + +Non-atomic arbitrage is much more challenging to measure and model, requiring a more complex understanding of the EVM and its execution model. However, atomic arbitrage is [easy to measure](https://explore.flashbots.net/), as it only requires a basic understanding of the EVM and its execution model. + +## Liquidity Provider Portfolio Value +Liquidity Provider Portfolio Value refers to the payoff that an LP assumes when providing liquidity to a pool[Replicating Market Makers](https://arxiv.org/abs/2103.14769)[Replicating Monotonic Payoffs Without Oracles](https://arxiv.org/abs/2111.13740). + + The has been shown to have two components path dependent and path independent components, which have been introduced in this [paper](https://arxiv.org/abs/2208.06046) as loss vs. holding(LVH) and loss vs. rebalancing (LVR), respectively. + +## Fee Growth + +Fee Growth in Automated Market Makers (AMMs) refers to the fees collected by the liquidity providers over time. These fees are generated from the trading activity in the liquidity pool and are directly proportional to the volume of trades. The more the trading activity (turnover), the higher the fees collected, leading to a growth in the fees. This fee growth can be a significant source of income for liquidity providers, in addition to the potential price appreciation of the assets in the pool. + +## Model Parameters + +## Geometric Brownian Motion (GBM) + +Geometric Brownian Motion (GBM) is a standard method to model price paths in financial markets. Two parameters characterize it: + +1. **Drift (μ)**: This represents the asset's expected return. It is the direction that we expect our asset to move in the future. + +2. **Volatility (σ)**: This represents the standard deviation of the asset's returns. It is a measure of the asset's risk or uncertainty. + +The GBM model assumes that the logarithmic returns of the asset prices are normally distributed and that the following stochastic differential equation can model them: + +$$ +dS_t = μS_t dt + σS_t dW_t +$$ + +Where: + +- $S_t$ is the asset price at time t +- $μ$ is the drift +- $σ$ is the volatility +- $W_t$ is a Wiener process + +This equation describes the change in the asset price over an infinitesimally small period. The first term on the right-hand side represents the deterministic trend (drift), and the second term represents the random fluctuation (volatility). + diff --git a/documentation/src/usage/techniques/stateful_testing.md b/documentation/src/usage/techniques/stateful_testing.md new file mode 100644 index 000000000..926b5c43a --- /dev/null +++ b/documentation/src/usage/techniques/stateful_testing.md @@ -0,0 +1 @@ +# Stateful Testing diff --git a/documentation/src/contributing/vulnerability_corpus.md b/documentation/src/vulnerability_corpus.md similarity index 99% rename from documentation/src/contributing/vulnerability_corpus.md rename to documentation/src/vulnerability_corpus.md index 0e61d47b9..1a95a3caa 100644 --- a/documentation/src/contributing/vulnerability_corpus.md +++ b/documentation/src/vulnerability_corpus.md @@ -2,8 +2,9 @@ Here is a running list of vulnerabilities that have been found with Arbiter. This list is not exhaustive, but it is a good starting point for understanding how to use Arbiter to find vulnerabilities. Arbiter has a unique ability to detect anomaly behavior in a production-like environment. This can be used to audit mechanism design in smart contract systems as well as detect vulnerabilities in smart contracts. -## Vulnerabilities +--- +## Vulnerabilities ### Portfolio Rebalancing: Severity - High @@ -17,6 +18,8 @@ cargo run --release ``` The bug was not caught by our [prior audits](https://github.com/primitivefinance/security) and [extensive test suit](https://github.com/primitivefinance/portfolio/tree/main/test). The simulation ran an arbitrageur against the Portfolio AMM and a stochastic price path. The bug was identified after 18,000 swaps. It turns out that that Portfolio pools can reach an edge case where the pool reaches one of the tails of its liquidity distribution and causes the invariant to jump, affecting the price of the trade. This would allow a swapper to take advantage of the mispriced funds and take funds from LPs. With arbiter we were able to run ~20000 swaps with this emulated protocol state in parallel with other parameters in <30s allowing us to discover this anomaly. +--- + ## Rating System **Low**: Includes both Non-critical (code style, clarity, syntax, versioning, off-chain monitoring (events, etc) and Low risk (e.g. assets are not at risk: state handling, function incorrect as to spec, issues with comments). diff --git a/documentation/tests/skeptic.rs b/documentation/tests/skeptic.rs new file mode 100644 index 000000000..ff46c9c01 --- /dev/null +++ b/documentation/tests/skeptic.rs @@ -0,0 +1 @@ +include!(concat!(env!("OUT_DIR"), "/skeptic-tests.rs"));