Repository: delvtech/pypechain (language: python)

Issue:
Update for underlying eth-account package update



Discussion / hints:
## [Codecov](https://app.codecov.io/gh/delvtech/pypechain/pull/109?dropdown=coverage&src=pr&el=h1&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=delvtech) Report
Attention: Patch coverage is `36.36364%` with `7 lines` in your changes are missing coverage. Please review.
> Project coverage is 67.34%. Comparing base [(`90884f2`)](https://app.codecov.io/gh/delvtech/pypechain/commit/90884f216b64e88e4df7cb7c9a1be01b129d8267?dropdown=coverage&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=delvtech) to head [(`c08a578`)](https://app.codecov.io/gh/delvtech/pypechain/pull/109?dropdown=coverage&src=pr&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=delvtech).

| [Files](https://app.codecov.io/gh/delvtech/pypechain/pull/109?dropdown=coverage&src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=delvtech) | Patch % | Lines |
|---|---|---|
| [pypechain/test/errors/types/ErrorsContract.py](https://app.codecov.io/gh/delvtech/pypechain/pull/109?src=pr&el=tree&filepath=pypechain%2Ftest%2Ferrors%2Ftypes%2FErrorsContract.py&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=delvtech#diff-cHlwZWNoYWluL3Rlc3QvZXJyb3JzL3R5cGVzL0Vycm9yc0NvbnRyYWN0LnB5) | 0.00% | [1 Missing :warning: ](https://app.codecov.io/gh/delvtech/pypechain/pull/109?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=delvtech) |
| [pypechain/test/events/types/EventsContract.py](https://app.codecov.io/gh/delvtech/pypechain/pull/109?src=pr&el=tree&filepath=pypechain%2Ftest%2Fevents%2Ftypes%2FEventsContract.py&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=delvtech#diff-cHlwZWNoYWluL3Rlc3QvZXZlbnRzL3R5cGVzL0V2ZW50c0NvbnRyYWN0LnB5) | 0.00% | [1 Missing :warning: ](https://app.codecov.io/gh/delvtech/pypechain/pull/109?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=delvtech) |
| [...est/overloading/types/OverloadedMethodsContract.py](https://app.codecov.io/gh/delvtech/pypechain/pull/109?src=pr&el=tree&filepath=pypechain%2Ftest%2Foverloading%2Ftypes%2FOverloadedMethodsContract.py&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=delvtech#diff-cHlwZWNoYWluL3Rlc3Qvb3ZlcmxvYWRpbmcvdHlwZXMvT3ZlcmxvYWRlZE1ldGhvZHNDb250cmFjdC5weQ==) | 0.00% | [1 Missing :warning: ](https://app.codecov.io/gh/delvtech/pypechain/pull/109?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=delvtech) |
| [...ain/test/return\_types/types/ReturnTypesContract.py](https://app.codecov.io/gh/delvtech/pypechain/pull/109?src=pr&el=tree&filepath=pypechain%2Ftest%2Freturn_types%2Ftypes%2FReturnTypesContract.py&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=delvtech#diff-cHlwZWNoYWluL3Rlc3QvcmV0dXJuX3R5cGVzL3R5cGVzL1JldHVyblR5cGVzQ29udHJhY3QucHk=) | 0.00% | [1 Missing :warning: ](https://app.codecov.io/gh/delvtech/pypechain/pull/109?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=delvtech) |
| [pypechain/test/structs/types/StructsAContract.py](https://app.codecov.io/gh/delvtech/pypechain/pull/109?src=pr&el=tree&filepath=pypechain%2Ftest%2Fstructs%2Ftypes%2FStructsAContract.py&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=delvtech#diff-cHlwZWNoYWluL3Rlc3Qvc3RydWN0cy90eXBlcy9TdHJ1Y3RzQUNvbnRyYWN0LnB5) | 0.00% | [1 Missing :warning: ](https://app.codecov.io/gh/delvtech/pypechain/pull/109?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=delvtech) |
| [pypechain/test/structs/types/StructsBContract.py](https://app.codecov.io/gh/delvtech/pypechain/pull/109?src=pr&el=tree&filepath=pypechain%2Ftest%2Fstructs%2Ftypes%2FStructsBContract.py&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=delvtech#diff-cHlwZWNoYWluL3Rlc3Qvc3RydWN0cy90eXBlcy9TdHJ1Y3RzQkNvbnRyYWN0LnB5) | 0.00% | [1 Missing :warning: ](https://app.codecov.io/gh/delvtech/pypechain/pull/109?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=delvtech) |
| [pypechain/test/structs/types/StructsCContract.py](https://app.codecov.io/gh/delvtech/pypechain/pull/109?src=pr&el=tree&filepath=pypechain%2Ftest%2Fstructs%2Ftypes%2FStructsCContract.py&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=delvtech#diff-cHlwZWNoYWluL3Rlc3Qvc3RydWN0cy90eXBlcy9TdHJ1Y3RzQ0NvbnRyYWN0LnB5) | 0.00% | [1 Missing :warning: ](https://app.codecov.io/gh/delvtech/pypechain/pull/109?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=delvtech) |

<details><summary>Additional details and impacted files</summary>


```diff
@@           Coverage Diff           @@
##             main     #109   +/-   ##
=======================================
  Coverage   67.34%   67.34%           
=======================================
  Files          49       49           
  Lines        2346     2346           
=======================================
  Hits         1580     1580           
  Misses        766      766           
```

| [Flag](https://app.codecov.io/gh/delvtech/pypechain/pull/109/flags?src=pr&el=flags&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=delvtech) | Coverage Δ | |
|---|---|---|
| [unittests](https://app.codecov.io/gh/delvtech/pypechain/pull/109/flags?src=pr&el=flag&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=delvtech) | `67.34% <36.36%> (ø)` | |

Flags with carried forward coverage won't be shown. [Click here](https://docs.codecov.io/docs/carryforward-flags?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=delvtech#carryforward-flags-in-the-pull-request-comment) to find out more.


</details>

[:umbrella: View full report in Codecov by Sentry](https://app.codecov.io/gh/delvtech/pypechain/pull/109?dropdown=coverage&src=pr&el=continue&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=delvtech).   
:loudspeaker: Have feedback on the report? [Share it here](https://about.codecov.io/codecov-pr-comment-feedback/?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=delvtech).


Fix patch:
diff --git a/.prettierrc b/.prettierrc
new file mode 100644
index 00000000..b809e7cc
--- /dev/null
+++ b/.prettierrc
@@ -0,0 +1,25 @@
+{
+  "plugins": [
+    "prettier-plugin-solidity",
+    "prettier-plugin-organize-imports"
+  ],
+  "overrides": [
+    {
+      "files": "*.sol",
+      "options": {
+        "printWidth": 80,
+        "tabWidth": 4,
+        "useTabs": false,
+        "singleQuote": false,
+        "bracketSpacing": true
+      }
+    },
+    {
+      "files": "*.ts",
+      "options": {
+        "printWidth": 80,
+        "tabWidth": 4
+      }
+    }
+  ]
+}
\ No newline at end of file
diff --git a/example/abis/Example.json b/example/abis/Example.json
index 23181ea0..e3796c05 100644
--- a/example/abis/Example.json
+++ b/example/abis/Example.json
@@ -450,10 +450,53 @@
           ],
           "stateMutability": "pure",
           "type": "function"
+        },
+        {
+          "inputs": [
+            {
+              "components": [
+                {
+                  "internalType": "uint256",
+                  "name": "intVal",
+                  "type": "uint256"
+                },
+                {
+                  "internalType": "string",
+                  "name": "strVal",
+                  "type": "string"
+                }
+              ],
+              "internalType": "struct Example.SimpleStruct[]",
+              "name": "inVecSimpleStruct",
+              "type": "tuple[]"
+            }
+          ],
+          "name": "vecOfStruct",
+          "outputs": [
+            {
+              "components": [
+                {
+                  "internalType": "uint256",
+                  "name": "intVal",
+                  "type": "uint256"
+                },
+                {
+                  "internalType": "string",
+                  "name": "strVal",
+                  "type": "string"
+                }
+              ],
+              "internalType": "struct Example.SimpleStruct[]",
+              "name": "vecSimpleStruct",
+              "type": "tuple[]"
+            }
+          ],
+          "stateMutability": "pure",
+          "type": "function"
         }
       ],
-      "bin": "608060405234801562000010575f80fd5b50604051620015bc380380620015bc8339818101604052810190620000369190620001d3565b805f908162000046919062000459565b50506200053d565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b620000af8262000067565b810181811067ffffffffffffffff82111715620000d157620000d062000077565b5b80604052505050565b5f620000e56200004e565b9050620000f38282620000a4565b919050565b5f67ffffffffffffffff82111562000115576200011462000077565b5b620001208262000067565b9050602081019050919050565b5f5b838110156200014c5780820151818401526020810190506200012f565b5f8484015250505050565b5f6200016d6200016784620000f8565b620000da565b9050828152602081018484840111156200018c576200018b62000063565b5b620001998482856200012d565b509392505050565b5f82601f830112620001b857620001b76200005f565b5b8151620001ca84826020860162000157565b91505092915050565b5f60208284031215620001eb57620001ea62000057565b5b5f82015167ffffffffffffffff8111156200020b576200020a6200005b565b5b6200021984828501620001a1565b91505092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806200027157607f821691505b6020821081036200028757620002866200022c565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302620002eb7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620002ae565b620002f78683620002ae565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f620003416200033b62000335846200030f565b62000318565b6200030f565b9050919050565b5f819050919050565b6200035c8362000321565b620003746200036b8262000348565b848454620002ba565b825550505050565b5f90565b6200038a6200037c565b6200039781848462000351565b505050565b5b81811015620003be57620003b25f8262000380565b6001810190506200039d565b5050565b601f8211156200040d57620003d7816200028d565b620003e2846200029f565b81016020851015620003f2578190505b6200040a62000401856200029f565b8301826200039c565b50505b505050565b5f82821c905092915050565b5f6200042f5f198460080262000412565b1980831691505092915050565b5f6200044983836200041e565b9150826002028217905092915050565b620004648262000222565b67ffffffffffffffff81111562000480576200047f62000077565b5b6200048c825462000259565b62000499828285620003c2565b5f60209050601f831160018114620004cf575f8415620004ba578287015190505b620004c685826200043c565b86555062000535565b601f198416620004df866200028d565b5f5b828110156200050857848901518255600182019150602085019450602081019050620004e1565b8683101562000528578489015162000524601f8916826200041e565b8355505b6001600288020188555050505b505050505050565b611071806200054b5f395ff3fe608060405234801561000f575f80fd5b5060043610610091575f3560e01c8063811d9aa311610064578063811d9aa31461011157806386a5a4c31461012f578063cf71512c1461015f578063d332644614610190578063e0f7c604146101c057610091565b806326da1c9e1461009557806340e27b10146100b157806353fd1043146100d057806373b10c0f146100ef575b5f80fd5b6100af60048036038101906100aa919061074d565b6101df565b005b6100b961025f565b6040516100c7929190610854565b60405180910390f35b6100d8610317565b6040516100e692919061090a565b60405180910390f35b6100f76103e6565b6040516101089594939291906109a5565b60405180910390f35b6101196104fa565b6040516101269190610a0b565b60405180910390f35b61014960048036038101906101449190610a4d565b610552565b6040516101569190610a0b565b60405180910390f35b61017960048036038101906101749190610abe565b61056b565b604051610187929190610afc565b60405180910390f35b6101aa60048036038101906101a59190610b41565b6105e8565b6040516101b79190610b88565b60405180910390f35b6101c8610601565b6040516101d692919061090a565b60405180910390f35b5f600360018360028111156101f7576101f6610ba8565b5b6102019190610c0e565b61020b9190610c6f565b60ff1660028111156102205761021f610ba8565b5b9050806040517fc13b30d40000000000000000000000000000000000000000000000000000000081526004016102569190610d55565b60405180910390fd5b6102676106c6565b61026f6106c6565b5f6040518060400160405280600181526020016040518060400160405280601081526020017f596f7520617265206e756d62657220310000000000000000000000000000000081525081525090505f6040518060400160405280600281526020016040518060400160405280601081526020017f596f7520617265206e756d626572203200000000000000000000000000000000815250815250905081819350935050509091565b61031f6106c6565b6103276106df565b5f6040518060400160405280600181526020016040518060400160405280601081526020017f596f7520617265206e756d62657220310000000000000000000000000000000081525081525090505f6040518060600160405280600281526020016040518060400160405280601081526020017f596f7520617265206e756d6265722032000000000000000000000000000000008152508152602001604051806020016040528060011515815250815250905081819350935050509091565b6103ee6106c6565b6103f66106df565b5f60605f6040518060400160405280600181526020016040518060400160405280601081526020017f596f7520617265206e756d62657220310000000000000000000000000000000081525081525094505f6040518060600160405280600281526020016040518060400160405280601081526020017f596f7520617265206e756d62657220320000000000000000000000000000000081525081526020016040518060200160405280600115158152508152509050858160015f6040518060400160405280601381526020017f52657475726e5479706573436f6e7472616374000000000000000000000000008152509095509550955095509550509091929394565b6105026106c6565b6040518060400160405280600181526020016040518060400160405280601081526020017f596f7520617265206e756d626572203100000000000000000000000000000000815250815250905090565b61055a6106c6565b8161056490610f1e565b9050919050565b5f807ffc25ee6cef1e5b8c4e7a2f8d3bbb15ca76bb693b8b5644b3b481e1831c09530b8460405161059c9190610f30565b60405180910390a17ffa3d951cbf852d2a9cc2dfc9fc6b57914afbf57597ecf432c403ed2d74124b2c836040516105d39190610f30565b60405180910390a18284915091509250929050565b6105f06106df565b816105fa90611029565b9050919050565b6106096106c6565b6106116106df565b6040518060400160405280600181526020016040518060400160405280601081526020017f596f7520617265206e756d62657220310000000000000000000000000000000081525081525091506040518060600160405280600281526020016040518060400160405280601081526020017f596f7520617265206e756d626572203200000000000000000000000000000000815250815260200160405180602001604052806001151581525081525090509091565b60405180604001604052805f8152602001606081525090565b60405180606001604052805f8152602001606081526020016106ff610705565b81525090565b60405180602001604052805f151581525090565b5f604051905090565b5f80fd5b5f80fd5b60038110610736575f80fd5b50565b5f813590506107478161072a565b92915050565b5f6020828403121561076257610761610722565b5b5f61076f84828501610739565b91505092915050565b5f819050919050565b61078a81610778565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156107c75780820151818401526020810190506107ac565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6107ec82610790565b6107f6818561079a565b93506108068185602086016107aa565b61080f816107d2565b840191505092915050565b5f604083015f83015161082f5f860182610781565b506020830151848203602086015261084782826107e2565b9150508091505092915050565b5f6040820190508181035f83015261086c818561081a565b90508181036020830152610880818461081a565b90509392505050565b5f8115159050919050565b61089d81610889565b82525050565b602082015f8201516108b75f850182610894565b50505050565b5f606083015f8301516108d25f860182610781565b50602083015184820360208601526108ea82826107e2565b91505060408301516108ff60408601826108a3565b508091505092915050565b5f6040820190508181035f830152610922818561081a565b9050818103602083015261093681846108bd565b90509392505050565b61094881610778565b82525050565b5f82825260208201905092915050565b5f61096882610790565b610972818561094e565b93506109828185602086016107aa565b61098b816107d2565b840191505092915050565b61099f81610889565b82525050565b5f60a0820190508181035f8301526109bd818861081a565b905081810360208301526109d181876108bd565b90506109e0604083018661093f565b81810360608301526109f2818561095e565b9050610a016080830184610996565b9695505050505050565b5f6020820190508181035f830152610a23818461081a565b905092915050565b5f80fd5b5f60408284031215610a4457610a43610a2b565b5b81905092915050565b5f60208284031215610a6257610a61610722565b5b5f82013567ffffffffffffffff811115610a7f57610a7e610726565b5b610a8b84828501610a2f565b91505092915050565b610a9d81610778565b8114610aa7575f80fd5b50565b5f81359050610ab881610a94565b92915050565b5f8060408385031215610ad457610ad3610722565b5b5f610ae185828601610aaa565b9250506020610af285828601610aaa565b9150509250929050565b5f604082019050610b0f5f83018561093f565b610b1c602083018461093f565b9392505050565b5f60608284031215610b3857610b37610a2b565b5b81905092915050565b5f60208284031215610b5657610b55610722565b5b5f82013567ffffffffffffffff811115610b7357610b72610726565b5b610b7f84828501610b23565b91505092915050565b5f6020820190508181035f830152610ba081846108bd565b905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b5f60ff82169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610c1882610bd5565b9150610c2383610bd5565b9250828201905060ff811115610c3c57610c3b610be1565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f610c7982610bd5565b9150610c8483610bd5565b925082610c9457610c93610c42565b5b828206905092915050565b60038110610cb057610caf610ba8565b5b50565b5f819050610cc082610c9f565b919050565b5f610ccf82610cb3565b9050919050565b610cdf81610cc5565b82525050565b7f5468616e6b20796f7520666f7220706c6179696e672c2062757420796f7520635f8201527f686f7365207468652077726f6e67206c65747465720000000000000000000000602082015250565b5f610d3f60358361094e565b9150610d4a82610ce5565b604082019050919050565b5f604082019050610d685f830184610cd6565b8181036020830152610d7981610d33565b905092915050565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b610dbb826107d2565b810181811067ffffffffffffffff82111715610dda57610dd9610d85565b5b80604052505050565b5f610dec610719565b9050610df88282610db2565b919050565b5f80fd5b5f80fd5b5f80fd5b5f67ffffffffffffffff821115610e2357610e22610d85565b5b610e2c826107d2565b9050602081019050919050565b828183375f83830152505050565b5f610e59610e5484610e09565b610de3565b905082815260208101848484011115610e7557610e74610e05565b5b610e80848285610e39565b509392505050565b5f82601f830112610e9c57610e9b610e01565b5b8135610eac848260208601610e47565b91505092915050565b5f60408284031215610eca57610ec9610d81565b5b610ed46040610de3565b90505f610ee384828501610aaa565b5f83015250602082013567ffffffffffffffff811115610f0657610f05610dfd565b5b610f1284828501610e88565b60208301525092915050565b5f610f293683610eb5565b9050919050565b5f602082019050610f435f83018461093f565b92915050565b610f5281610889565b8114610f5c575f80fd5b50565b5f81359050610f6d81610f49565b92915050565b5f60208284031215610f8857610f87610d81565b5b610f926020610de3565b90505f610fa184828501610f5f565b5f8301525092915050565b5f60608284031215610fc157610fc0610d81565b5b610fcb6060610de3565b90505f610fda84828501610aaa565b5f83015250602082013567ffffffffffffffff811115610ffd57610ffc610dfd565b5b61100984828501610e88565b602083015250604061101d84828501610f73565b60408301525092915050565b5f6110343683610fac565b905091905056fea264697066735822122072cb644782cb5404d6b2629e03389cd6529e6d20b9301e18b3bb2e96a9ba4f1364736f6c63430008170033",
-      "metadata": "{\"compiler\":{\"version\":\"0.8.23+commit.f704f362\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"enum Example.Letters\",\"name\":\"answer\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"errorMessage\",\"type\":\"string\"}],\"name\":\"WrongChoice\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"flip\",\"type\":\"uint256\"}],\"name\":\"Flip\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"flop\",\"type\":\"uint256\"}],\"name\":\"Flop\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"flip\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"flop\",\"type\":\"uint256\"}],\"name\":\"flipFlop\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_flop\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_flip\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enum Example.Letters\",\"name\":\"guess\",\"type\":\"uint8\"}],\"name\":\"guessALetter\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"mixStructsAndPrimitives\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"intVal\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"strVal\",\"type\":\"string\"}],\"internalType\":\"struct Example.SimpleStruct\",\"name\":\"simpleStruct\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"intVal\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"strVal\",\"type\":\"string\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"boolVal\",\"type\":\"bool\"}],\"internalType\":\"struct Example.InnerStruct\",\"name\":\"innerStruct\",\"type\":\"tuple\"}],\"internalType\":\"struct Example.NestedStruct\",\"name\":\"\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"bool\",\"name\":\"YesOrNo\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"namedSingleStruct\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"intVal\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"strVal\",\"type\":\"string\"}],\"internalType\":\"struct Example.SimpleStruct\",\"name\":\"struct1\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"namedTwoMixedStructs\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"intVal\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"strVal\",\"type\":\"string\"}],\"internalType\":\"struct Example.SimpleStruct\",\"name\":\"simpleStruct\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"intVal\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"strVal\",\"type\":\"string\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"boolVal\",\"type\":\"bool\"}],\"internalType\":\"struct Example.InnerStruct\",\"name\":\"innerStruct\",\"type\":\"tuple\"}],\"internalType\":\"struct Example.NestedStruct\",\"name\":\"nestedStruct\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"intVal\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"strVal\",\"type\":\"string\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"boolVal\",\"type\":\"bool\"}],\"internalType\":\"struct Example.InnerStruct\",\"name\":\"innerStruct\",\"type\":\"tuple\"}],\"internalType\":\"struct Example.NestedStruct\",\"name\":\"nestedStruct\",\"type\":\"tuple\"}],\"name\":\"singleNestedStruct\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"intVal\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"strVal\",\"type\":\"string\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"boolVal\",\"type\":\"bool\"}],\"internalType\":\"struct Example.InnerStruct\",\"name\":\"innerStruct\",\"type\":\"tuple\"}],\"internalType\":\"struct Example.NestedStruct\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"intVal\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"strVal\",\"type\":\"string\"}],\"internalType\":\"struct Example.SimpleStruct\",\"name\":\"simpleStruct\",\"type\":\"tuple\"}],\"name\":\"singleSimpleStruct\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"intVal\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"strVal\",\"type\":\"string\"}],\"internalType\":\"struct Example.SimpleStruct\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"twoMixedStructs\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"intVal\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"strVal\",\"type\":\"string\"}],\"internalType\":\"struct Example.SimpleStruct\",\"name\":\"\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"intVal\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"strVal\",\"type\":\"string\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"boolVal\",\"type\":\"bool\"}],\"internalType\":\"struct Example.InnerStruct\",\"name\":\"innerStruct\",\"type\":\"tuple\"}],\"internalType\":\"struct Example.NestedStruct\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"twoSimpleStructs\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"intVal\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"strVal\",\"type\":\"string\"}],\"internalType\":\"struct Example.SimpleStruct\",\"name\":\"\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"intVal\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"strVal\",\"type\":\"string\"}],\"internalType\":\"struct Example.SimpleStruct\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"example/contracts/Example.sol\":\"Example\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"example/contracts/Example.sol\":{\"keccak256\":\"0x338978c673dd29904bd9ef3f9b4761decbd39e25821da47c26b2175095cf0166\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://287018c5c351a74e55aead22b72943600338ea5410291c47c5a90f92abe24aef\",\"dweb:/ipfs/QmPfDBywaAoczvbS8p6gqjoZ29oBY44uffgSoQdTBvDX4u\"]}},\"version\":1}"
+      "bin": "608060405234801562000010575f80fd5b506040516200183f3803806200183f8339818101604052810190620000369190620001d3565b805f908162000046919062000459565b50506200053d565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b620000af8262000067565b810181811067ffffffffffffffff82111715620000d157620000d062000077565b5b80604052505050565b5f620000e56200004e565b9050620000f38282620000a4565b919050565b5f67ffffffffffffffff82111562000115576200011462000077565b5b620001208262000067565b9050602081019050919050565b5f5b838110156200014c5780820151818401526020810190506200012f565b5f8484015250505050565b5f6200016d6200016784620000f8565b620000da565b9050828152602081018484840111156200018c576200018b62000063565b5b620001998482856200012d565b509392505050565b5f82601f830112620001b857620001b76200005f565b5b8151620001ca84826020860162000157565b91505092915050565b5f60208284031215620001eb57620001ea62000057565b5b5f82015167ffffffffffffffff8111156200020b576200020a6200005b565b5b6200021984828501620001a1565b91505092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806200027157607f821691505b6020821081036200028757620002866200022c565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302620002eb7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620002ae565b620002f78683620002ae565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f620003416200033b62000335846200030f565b62000318565b6200030f565b9050919050565b5f819050919050565b6200035c8362000321565b620003746200036b8262000348565b848454620002ba565b825550505050565b5f90565b6200038a6200037c565b6200039781848462000351565b505050565b5b81811015620003be57620003b25f8262000380565b6001810190506200039d565b5050565b601f8211156200040d57620003d7816200028d565b620003e2846200029f565b81016020851015620003f2578190505b6200040a62000401856200029f565b8301826200039c565b50505b505050565b5f82821c905092915050565b5f6200042f5f198460080262000412565b1980831691505092915050565b5f6200044983836200041e565b9150826002028217905092915050565b620004648262000222565b67ffffffffffffffff81111562000480576200047f62000077565b5b6200048c825462000259565b62000499828285620003c2565b5f60209050601f831160018114620004cf575f8415620004ba578287015190505b620004c685826200043c565b86555062000535565b601f198416620004df866200028d565b5f5b828110156200050857848901518255600182019150602085019450602081019050620004e1565b8683101562000528578489015162000524601f8916826200041e565b8355505b6001600288020188555050505b505050505050565b6112f4806200054b5f395ff3fe608060405234801561000f575f80fd5b506004361061009c575f3560e01c806386a5a4c31161006457806386a5a4c31461013a578063c8e3a3df1461016a578063cf71512c1461019a578063d3326446146101cb578063e0f7c604146101fb5761009c565b806326da1c9e146100a057806340e27b10146100bc57806353fd1043146100db57806373b10c0f146100fa578063811d9aa31461011c575b5f80fd5b6100ba60048036038101906100b59190610792565b61021a565b005b6100c461029a565b6040516100d2929190610899565b60405180910390f35b6100e3610352565b6040516100f192919061094f565b60405180910390f35b610102610421565b6040516101139594939291906109ea565b60405180910390f35b610124610535565b6040516101319190610a50565b60405180910390f35b610154600480360381019061014f9190610a92565b61058d565b6040516101619190610a50565b60405180910390f35b610184600480360381019061017f9190610d82565b6105a6565b6040516101919190610ebe565b60405180910390f35b6101b460048036038101906101af9190610ede565b6105b0565b6040516101c2929190610f1c565b60405180910390f35b6101e560048036038101906101e09190610f61565b61062d565b6040516101f29190610fa8565b60405180910390f35b610203610646565b60405161021192919061094f565b60405180910390f35b5f6003600183600281111561023257610231610fc8565b5b61023c919061102e565b610246919061108f565b60ff16600281111561025b5761025a610fc8565b5b9050806040517fc13b30d40000000000000000000000000000000000000000000000000000000081526004016102919190611175565b60405180910390fd5b6102a261070b565b6102aa61070b565b5f6040518060400160405280600181526020016040518060400160405280601081526020017f596f7520617265206e756d62657220310000000000000000000000000000000081525081525090505f6040518060400160405280600281526020016040518060400160405280601081526020017f596f7520617265206e756d626572203200000000000000000000000000000000815250815250905081819350935050509091565b61035a61070b565b610362610724565b5f6040518060400160405280600181526020016040518060400160405280601081526020017f596f7520617265206e756d62657220310000000000000000000000000000000081525081525090505f6040518060600160405280600281526020016040518060400160405280601081526020017f596f7520617265206e756d6265722032000000000000000000000000000000008152508152602001604051806020016040528060011515815250815250905081819350935050509091565b61042961070b565b610431610724565b5f60605f6040518060400160405280600181526020016040518060400160405280601081526020017f596f7520617265206e756d62657220310000000000000000000000000000000081525081525094505f6040518060600160405280600281526020016040518060400160405280601081526020017f596f7520617265206e756d62657220320000000000000000000000000000000081525081526020016040518060200160405280600115158152508152509050858160015f6040518060400160405280601381526020017f52657475726e5479706573436f6e7472616374000000000000000000000000008152509095509550955095509550509091929394565b61053d61070b565b6040518060400160405280600181526020016040518060400160405280601081526020017f596f7520617265206e756d626572203100000000000000000000000000000000815250815250905090565b61059561070b565b8161059f906111a1565b9050919050565b6060819050919050565b5f807ffc25ee6cef1e5b8c4e7a2f8d3bbb15ca76bb693b8b5644b3b481e1831c09530b846040516105e191906111b3565b60405180910390a17ffa3d951cbf852d2a9cc2dfc9fc6b57914afbf57597ecf432c403ed2d74124b2c8360405161061891906111b3565b60405180910390a18284915091509250929050565b610635610724565b8161063f906112ac565b9050919050565b61064e61070b565b610656610724565b6040518060400160405280600181526020016040518060400160405280601081526020017f596f7520617265206e756d62657220310000000000000000000000000000000081525081525091506040518060600160405280600281526020016040518060400160405280601081526020017f596f7520617265206e756d626572203200000000000000000000000000000000815250815260200160405180602001604052806001151581525081525090509091565b60405180604001604052805f8152602001606081525090565b60405180606001604052805f81526020016060815260200161074461074a565b81525090565b60405180602001604052805f151581525090565b5f604051905090565b5f80fd5b5f80fd5b6003811061077b575f80fd5b50565b5f8135905061078c8161076f565b92915050565b5f602082840312156107a7576107a6610767565b5b5f6107b48482850161077e565b91505092915050565b5f819050919050565b6107cf816107bd565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561080c5780820151818401526020810190506107f1565b5f8484015250505050565b5f601f19601f8301169050919050565b5f610831826107d5565b61083b81856107df565b935061084b8185602086016107ef565b61085481610817565b840191505092915050565b5f604083015f8301516108745f8601826107c6565b506020830151848203602086015261088c8282610827565b9150508091505092915050565b5f6040820190508181035f8301526108b1818561085f565b905081810360208301526108c5818461085f565b90509392505050565b5f8115159050919050565b6108e2816108ce565b82525050565b602082015f8201516108fc5f8501826108d9565b50505050565b5f606083015f8301516109175f8601826107c6565b506020830151848203602086015261092f8282610827565b915050604083015161094460408601826108e8565b508091505092915050565b5f6040820190508181035f830152610967818561085f565b9050818103602083015261097b8184610902565b90509392505050565b61098d816107bd565b82525050565b5f82825260208201905092915050565b5f6109ad826107d5565b6109b78185610993565b93506109c78185602086016107ef565b6109d081610817565b840191505092915050565b6109e4816108ce565b82525050565b5f60a0820190508181035f830152610a02818861085f565b90508181036020830152610a168187610902565b9050610a256040830186610984565b8181036060830152610a3781856109a3565b9050610a4660808301846109db565b9695505050505050565b5f6020820190508181035f830152610a68818461085f565b905092915050565b5f80fd5b5f60408284031215610a8957610a88610a70565b5b81905092915050565b5f60208284031215610aa757610aa6610767565b5b5f82013567ffffffffffffffff811115610ac457610ac361076b565b5b610ad084828501610a74565b91505092915050565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b610b1382610817565b810181811067ffffffffffffffff82111715610b3257610b31610add565b5b80604052505050565b5f610b4461075e565b9050610b508282610b0a565b919050565b5f67ffffffffffffffff821115610b6f57610b6e610add565b5b602082029050602081019050919050565b5f80fd5b5f80fd5b5f80fd5b610b95816107bd565b8114610b9f575f80fd5b50565b5f81359050610bb081610b8c565b92915050565b5f80fd5b5f67ffffffffffffffff821115610bd457610bd3610add565b5b610bdd82610817565b9050602081019050919050565b828183375f83830152505050565b5f610c0a610c0584610bba565b610b3b565b905082815260208101848484011115610c2657610c25610bb6565b5b610c31848285610bea565b509392505050565b5f82601f830112610c4d57610c4c610ad9565b5b8135610c5d848260208601610bf8565b91505092915050565b5f60408284031215610c7b57610c7a610b84565b5b610c856040610b3b565b90505f610c9484828501610ba2565b5f83015250602082013567ffffffffffffffff811115610cb757610cb6610b88565b5b610cc384828501610c39565b60208301525092915050565b5f610ce1610cdc84610b55565b610b3b565b90508083825260208201905060208402830185811115610d0457610d03610b80565b5b835b81811015610d4b57803567ffffffffffffffff811115610d2957610d28610ad9565b5b808601610d368982610c66565b85526020850194505050602081019050610d06565b5050509392505050565b5f82601f830112610d6957610d68610ad9565b5b8135610d79848260208601610ccf565b91505092915050565b5f60208284031215610d9757610d96610767565b5b5f82013567ffffffffffffffff811115610db457610db361076b565b5b610dc084828501610d55565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f604083015f830151610e075f8601826107c6565b5060208301518482036020860152610e1f8282610827565b9150508091505092915050565b5f610e378383610df2565b905092915050565b5f602082019050919050565b5f610e5582610dc9565b610e5f8185610dd3565b935083602082028501610e7185610de3565b805f5b85811015610eac5784840389528151610e8d8582610e2c565b9450610e9883610e3f565b925060208a01995050600181019050610e74565b50829750879550505050505092915050565b5f6020820190508181035f830152610ed68184610e4b565b905092915050565b5f8060408385031215610ef457610ef3610767565b5b5f610f0185828601610ba2565b9250506020610f1285828601610ba2565b9150509250929050565b5f604082019050610f2f5f830185610984565b610f3c6020830184610984565b9392505050565b5f60608284031215610f5857610f57610a70565b5b81905092915050565b5f60208284031215610f7657610f75610767565b5b5f82013567ffffffffffffffff811115610f9357610f9261076b565b5b610f9f84828501610f43565b91505092915050565b5f6020820190508181035f830152610fc08184610902565b905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b5f60ff82169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61103882610ff5565b915061104383610ff5565b9250828201905060ff81111561105c5761105b611001565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61109982610ff5565b91506110a483610ff5565b9250826110b4576110b3611062565b5b828206905092915050565b600381106110d0576110cf610fc8565b5b50565b5f8190506110e0826110bf565b919050565b5f6110ef826110d3565b9050919050565b6110ff816110e5565b82525050565b7f5468616e6b20796f7520666f7220706c6179696e672c2062757420796f7520635f8201527f686f7365207468652077726f6e67206c65747465720000000000000000000000602082015250565b5f61115f603583610993565b915061116a82611105565b604082019050919050565b5f6040820190506111885f8301846110f6565b818103602083015261119981611153565b905092915050565b5f6111ac3683610c66565b9050919050565b5f6020820190506111c65f830184610984565b92915050565b6111d5816108ce565b81146111df575f80fd5b50565b5f813590506111f0816111cc565b92915050565b5f6020828403121561120b5761120a610b84565b5b6112156020610b3b565b90505f611224848285016111e2565b5f8301525092915050565b5f6060828403121561124457611243610b84565b5b61124e6060610b3b565b90505f61125d84828501610ba2565b5f83015250602082013567ffffffffffffffff8111156112805761127f610b88565b5b61128c84828501610c39565b60208301525060406112a0848285016111f6565b60408301525092915050565b5f6112b7368361122f565b905091905056fea2646970667358221220e605714c5c039d9136f9dc9fe18bada609f8e15bf9cd4bb9b27e43da64ec713a64736f6c63430008170033",
+      "metadata": "{\"compiler\":{\"version\":\"0.8.23+commit.f704f362\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"enum Example.Letters\",\"name\":\"answer\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"errorMessage\",\"type\":\"string\"}],\"name\":\"WrongChoice\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"flip\",\"type\":\"uint256\"}],\"name\":\"Flip\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"flop\",\"type\":\"uint256\"}],\"name\":\"Flop\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"flip\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"flop\",\"type\":\"uint256\"}],\"name\":\"flipFlop\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_flop\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_flip\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enum Example.Letters\",\"name\":\"guess\",\"type\":\"uint8\"}],\"name\":\"guessALetter\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"mixStructsAndPrimitives\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"intVal\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"strVal\",\"type\":\"string\"}],\"internalType\":\"struct Example.SimpleStruct\",\"name\":\"simpleStruct\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"intVal\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"strVal\",\"type\":\"string\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"boolVal\",\"type\":\"bool\"}],\"internalType\":\"struct Example.InnerStruct\",\"name\":\"innerStruct\",\"type\":\"tuple\"}],\"internalType\":\"struct Example.NestedStruct\",\"name\":\"\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"bool\",\"name\":\"YesOrNo\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"namedSingleStruct\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"intVal\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"strVal\",\"type\":\"string\"}],\"internalType\":\"struct Example.SimpleStruct\",\"name\":\"struct1\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"namedTwoMixedStructs\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"intVal\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"strVal\",\"type\":\"string\"}],\"internalType\":\"struct Example.SimpleStruct\",\"name\":\"simpleStruct\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"intVal\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"strVal\",\"type\":\"string\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"boolVal\",\"type\":\"bool\"}],\"internalType\":\"struct Example.InnerStruct\",\"name\":\"innerStruct\",\"type\":\"tuple\"}],\"internalType\":\"struct Example.NestedStruct\",\"name\":\"nestedStruct\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"intVal\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"strVal\",\"type\":\"string\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"boolVal\",\"type\":\"bool\"}],\"internalType\":\"struct Example.InnerStruct\",\"name\":\"innerStruct\",\"type\":\"tuple\"}],\"internalType\":\"struct Example.NestedStruct\",\"name\":\"nestedStruct\",\"type\":\"tuple\"}],\"name\":\"singleNestedStruct\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"intVal\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"strVal\",\"type\":\"string\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"boolVal\",\"type\":\"bool\"}],\"internalType\":\"struct Example.InnerStruct\",\"name\":\"innerStruct\",\"type\":\"tuple\"}],\"internalType\":\"struct Example.NestedStruct\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"intVal\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"strVal\",\"type\":\"string\"}],\"internalType\":\"struct Example.SimpleStruct\",\"name\":\"simpleStruct\",\"type\":\"tuple\"}],\"name\":\"singleSimpleStruct\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"intVal\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"strVal\",\"type\":\"string\"}],\"internalType\":\"struct Example.SimpleStruct\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"twoMixedStructs\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"intVal\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"strVal\",\"type\":\"string\"}],\"internalType\":\"struct Example.SimpleStruct\",\"name\":\"\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"intVal\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"strVal\",\"type\":\"string\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"boolVal\",\"type\":\"bool\"}],\"internalType\":\"struct Example.InnerStruct\",\"name\":\"innerStruct\",\"type\":\"tuple\"}],\"internalType\":\"struct Example.NestedStruct\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"twoSimpleStructs\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"intVal\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"strVal\",\"type\":\"string\"}],\"internalType\":\"struct Example.SimpleStruct\",\"name\":\"\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"intVal\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"strVal\",\"type\":\"string\"}],\"internalType\":\"struct Example.SimpleStruct\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"intVal\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"strVal\",\"type\":\"string\"}],\"internalType\":\"struct Example.SimpleStruct[]\",\"name\":\"inVecSimpleStruct\",\"type\":\"tuple[]\"}],\"name\":\"vecOfStruct\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"intVal\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"strVal\",\"type\":\"string\"}],\"internalType\":\"struct Example.SimpleStruct[]\",\"name\":\"vecSimpleStruct\",\"type\":\"tuple[]\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"example/contracts/Example.sol\":\"Example\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"example/contracts/Example.sol\":{\"keccak256\":\"0x19a87c9c3125f7cf1fb487de2ecfaefb32069917da723fa1416dc4090d742b12\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://23e2bbf44917552f0acb807e46364cd1286e86a95028071146485ebccf712de4\",\"dweb:/ipfs/QmRdDJMfrUS2gbTACczrz8DEVoCVm3gMDv7E3cwofKT4a7\"]}},\"version\":1}"
     }
   },
   "version": "0.8.23+commit.f704f362.Darwin.appleclang"
diff --git a/example/contracts/Example.sol b/example/contracts/Example.sol
index b524b4bd..83f79e08 100644
--- a/example/contracts/Example.sol
+++ b/example/contracts/Example.sol
@@ -2,13 +2,16 @@
 pragma solidity ^0.8.0;
 
 contract Example {
-
     event Flip(uint flip);
     event Flop(uint flop);
 
     string contractName;
 
-    enum Letters { A, B, C }
+    enum Letters {
+        A,
+        B,
+        C
+    }
     error WrongChoice(Letters answer, string errorMessage);
 
     struct SimpleStruct {
@@ -30,28 +33,41 @@ contract Example {
         contractName = name;
     }
 
-
     function guessALetter(Letters guess) public pure {
         Letters answer = Letters((uint8(guess) + uint8(1)) % 3);
 
-        revert WrongChoice(answer, "Thank you for playing, but you chose the wrong letter");
+        revert WrongChoice(
+            answer,
+            "Thank you for playing, but you chose the wrong letter"
+        );
     }
 
-    function flipFlop(uint flip, uint flop) public returns (uint _flop, uint _flip) {
+    function flipFlop(
+        uint flip,
+        uint flop
+    ) public returns (uint _flop, uint _flip) {
         emit Flip(flip);
         emit Flop(flop);
-        return (flop,flip);
+        return (flop, flip);
     }
 
-    function singleSimpleStruct(SimpleStruct calldata simpleStruct) public pure returns (SimpleStruct memory) {
+    function singleSimpleStruct(
+        SimpleStruct calldata simpleStruct
+    ) public pure returns (SimpleStruct memory) {
         return simpleStruct;
     }
 
-    function singleNestedStruct(NestedStruct calldata nestedStruct) public pure returns (NestedStruct memory) {
+    function singleNestedStruct(
+        NestedStruct calldata nestedStruct
+    ) public pure returns (NestedStruct memory) {
         return nestedStruct;
     }
 
-    function twoSimpleStructs() public pure returns (SimpleStruct memory, SimpleStruct memory) {
+    function twoSimpleStructs()
+        public
+        pure
+        returns (SimpleStruct memory, SimpleStruct memory)
+    {
         SimpleStruct memory simpleStruct1 = SimpleStruct({
             intVal: 1,
             strVal: "You are number 1"
@@ -65,7 +81,11 @@ contract Example {
         return (simpleStruct1, simpleStruct2);
     }
 
-    function twoMixedStructs() public pure returns (SimpleStruct memory, NestedStruct memory) {
+    function twoMixedStructs()
+        public
+        pure
+        returns (SimpleStruct memory, NestedStruct memory)
+    {
         SimpleStruct memory simpleStruct = SimpleStruct({
             intVal: 1,
             strVal: "You are number 1"
@@ -73,42 +93,60 @@ contract Example {
         NestedStruct memory nestedtStruct = NestedStruct({
             intVal: 2,
             strVal: "You are number 2",
-            innerStruct: InnerStruct({boolVal: true})
+            innerStruct: InnerStruct({ boolVal: true })
         });
 
         return (simpleStruct, nestedtStruct);
     }
 
-    function namedSingleStruct() public pure returns (SimpleStruct memory struct1) {
-        return SimpleStruct({
-            intVal: 1,
-            strVal: "You are number 1"
-        });
+    function namedSingleStruct()
+        public
+        pure
+        returns (SimpleStruct memory struct1)
+    {
+        return SimpleStruct({ intVal: 1, strVal: "You are number 1" });
     }
 
-    function namedTwoMixedStructs() public pure returns (SimpleStruct memory simpleStruct, NestedStruct memory nestedStruct) {
-        simpleStruct = SimpleStruct({
-            intVal: 1,
-            strVal: "You are number 1"
-        });
+    function namedTwoMixedStructs()
+        public
+        pure
+        returns (
+            SimpleStruct memory simpleStruct,
+            NestedStruct memory nestedStruct
+        )
+    {
+        simpleStruct = SimpleStruct({ intVal: 1, strVal: "You are number 1" });
         nestedStruct = NestedStruct({
             intVal: 2,
             strVal: "You are number 2",
-            innerStruct: InnerStruct({boolVal: true})
+            innerStruct: InnerStruct({ boolVal: true })
         });
     }
 
-    function mixStructsAndPrimitives() public pure returns (SimpleStruct memory simpleStruct, NestedStruct memory, uint, string memory _name, bool YesOrNo) {
-        simpleStruct = SimpleStruct({
-            intVal: 1,
-            strVal: "You are number 1"
-        });
+    function mixStructsAndPrimitives()
+        public
+        pure
+        returns (
+            SimpleStruct memory simpleStruct,
+            NestedStruct memory,
+            uint,
+            string memory _name,
+            bool YesOrNo
+        )
+    {
+        simpleStruct = SimpleStruct({ intVal: 1, strVal: "You are number 1" });
         NestedStruct memory nestedStruct = NestedStruct({
             intVal: 2,
             strVal: "You are number 2",
-            innerStruct: InnerStruct({boolVal: true})
+            innerStruct: InnerStruct({ boolVal: true })
         });
 
         return (simpleStruct, nestedStruct, 1, "ReturnTypesContract", false);
     }
-}
\ No newline at end of file
+
+    function vecOfStruct(
+        SimpleStruct[] memory inVecSimpleStruct
+    ) public pure returns (SimpleStruct[] memory vecSimpleStruct) {
+        return inVecSimpleStruct;
+    }
+}
diff --git a/example/types/ExampleContract.py b/example/types/ExampleContract.py
index 9a8896eb..13fbb040 100644
--- a/example/types/ExampleContract.py
+++ b/example/types/ExampleContract.py
@@ -48,7 +48,7 @@
 from web3.types import ABI, ABIFunction, BlockIdentifier, CallOverride, EventData, TxParams
 
 from .ExampleTypes import InnerStruct, NestedStruct, SimpleStruct
-from .utilities import dataclass_to_tuple, get_abi_input_types, rename_returned_types
+from .utilities import dataclass_to_tuple, get_abi_input_types, rename_returned_types, try_bytecode_hexbytes
 
 structs = {
     "SimpleStruct": SimpleStruct,
@@ -328,6 +328,33 @@ def call(
         return self.ReturnValues(*rename_returned_types(structs, return_types, raw_values))
 
 
+class ExampleVecOfStructContractFunction(ContractFunction):
+    """ContractFunction for the vecOfStruct method."""
+
+    def __call__(self, inVecSimpleStruct: list[SimpleStruct]) -> ExampleVecOfStructContractFunction:  # type: ignore
+        clone = super().__call__(dataclass_to_tuple(inVecSimpleStruct))
+        self.kwargs = clone.kwargs
+        self.args = clone.args
+        return self
+
+    def call(
+        self,
+        transaction: TxParams | None = None,
+        block_identifier: BlockIdentifier = "latest",
+        state_override: CallOverride | None = None,
+        ccip_read_enabled: bool | None = None,
+    ) -> list[SimpleStruct]:
+        """returns list[SimpleStruct]."""
+        # Define the expected return types from the smart contract call
+
+        return_types = list[SimpleStruct]
+
+        # Call the function
+
+        raw_values = super().call(transaction, block_identifier, state_override, ccip_read_enabled)
+        return cast(list[SimpleStruct], rename_returned_types(structs, return_types, raw_values))
+
+
 class ExampleContractFunctions(ContractFunctions):
     """ContractFunctions for the Example contract."""
 
@@ -349,6 +376,8 @@ class ExampleContractFunctions(ContractFunctions):
 
     twoSimpleStructs: ExampleTwoSimpleStructsContractFunction
 
+    vecOfStruct: ExampleVecOfStructContractFunction
+
     def __init__(
         self,
         abi: ABI,
@@ -429,6 +458,14 @@ def __init__(
             decode_tuples=decode_tuples,
             function_identifier="twoSimpleStructs",
         )
+        self.vecOfStruct = ExampleVecOfStructContractFunction.factory(
+            "vecOfStruct",
+            w3=w3,
+            contract_abi=abi,
+            address=address,
+            decode_tuples=decode_tuples,
+            function_identifier="vecOfStruct",
+        )
 
 
 class ExampleFlipContractEvent(ContractEvent):
@@ -936,11 +973,38 @@ def decode_custom_error(self, data: str) -> tuple[Any, ...]:
             "stateMutability": "pure",
             "type": "function",
         },
+        {
+            "inputs": [
+                {
+                    "components": [
+                        {"internalType": "uint256", "name": "intVal", "type": "uint256"},
+                        {"internalType": "string", "name": "strVal", "type": "string"},
+                    ],
+                    "internalType": "struct Example.SimpleStruct[]",
+                    "name": "inVecSimpleStruct",
+                    "type": "tuple[]",
+                }
+            ],
+            "name": "vecOfStruct",
+            "outputs": [
+                {
+                    "components": [
+                        {"internalType": "uint256", "name": "intVal", "type": "uint256"},
+                        {"internalType": "string", "name": "strVal", "type": "string"},
+                    ],
+                    "internalType": "struct Example.SimpleStruct[]",
+                    "name": "vecSimpleStruct",
+                    "type": "tuple[]",
+                }
+            ],
+            "stateMutability": "pure",
+            "type": "function",
+        },
     ],
 )
 # pylint: disable=line-too-long
 example_bytecode = HexStr(
-    "0x608060405234801562000010575f80fd5b50604051620015bc380380620015bc8339818101604052810190620000369190620001d3565b805f908162000046919062000459565b50506200053d565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b620000af8262000067565b810181811067ffffffffffffffff82111715620000d157620000d062000077565b5b80604052505050565b5f620000e56200004e565b9050620000f38282620000a4565b919050565b5f67ffffffffffffffff82111562000115576200011462000077565b5b620001208262000067565b9050602081019050919050565b5f5b838110156200014c5780820151818401526020810190506200012f565b5f8484015250505050565b5f6200016d6200016784620000f8565b620000da565b9050828152602081018484840111156200018c576200018b62000063565b5b620001998482856200012d565b509392505050565b5f82601f830112620001b857620001b76200005f565b5b8151620001ca84826020860162000157565b91505092915050565b5f60208284031215620001eb57620001ea62000057565b5b5f82015167ffffffffffffffff8111156200020b576200020a6200005b565b5b6200021984828501620001a1565b91505092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806200027157607f821691505b6020821081036200028757620002866200022c565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302620002eb7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620002ae565b620002f78683620002ae565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f620003416200033b62000335846200030f565b62000318565b6200030f565b9050919050565b5f819050919050565b6200035c8362000321565b620003746200036b8262000348565b848454620002ba565b825550505050565b5f90565b6200038a6200037c565b6200039781848462000351565b505050565b5b81811015620003be57620003b25f8262000380565b6001810190506200039d565b5050565b601f8211156200040d57620003d7816200028d565b620003e2846200029f565b81016020851015620003f2578190505b6200040a62000401856200029f565b8301826200039c565b50505b505050565b5f82821c905092915050565b5f6200042f5f198460080262000412565b1980831691505092915050565b5f6200044983836200041e565b9150826002028217905092915050565b620004648262000222565b67ffffffffffffffff81111562000480576200047f62000077565b5b6200048c825462000259565b62000499828285620003c2565b5f60209050601f831160018114620004cf575f8415620004ba578287015190505b620004c685826200043c565b86555062000535565b601f198416620004df866200028d565b5f5b828110156200050857848901518255600182019150602085019450602081019050620004e1565b8683101562000528578489015162000524601f8916826200041e565b8355505b6001600288020188555050505b505050505050565b611071806200054b5f395ff3fe608060405234801561000f575f80fd5b5060043610610091575f3560e01c8063811d9aa311610064578063811d9aa31461011157806386a5a4c31461012f578063cf71512c1461015f578063d332644614610190578063e0f7c604146101c057610091565b806326da1c9e1461009557806340e27b10146100b157806353fd1043146100d057806373b10c0f146100ef575b5f80fd5b6100af60048036038101906100aa919061074d565b6101df565b005b6100b961025f565b6040516100c7929190610854565b60405180910390f35b6100d8610317565b6040516100e692919061090a565b60405180910390f35b6100f76103e6565b6040516101089594939291906109a5565b60405180910390f35b6101196104fa565b6040516101269190610a0b565b60405180910390f35b61014960048036038101906101449190610a4d565b610552565b6040516101569190610a0b565b60405180910390f35b61017960048036038101906101749190610abe565b61056b565b604051610187929190610afc565b60405180910390f35b6101aa60048036038101906101a59190610b41565b6105e8565b6040516101b79190610b88565b60405180910390f35b6101c8610601565b6040516101d692919061090a565b60405180910390f35b5f600360018360028111156101f7576101f6610ba8565b5b6102019190610c0e565b61020b9190610c6f565b60ff1660028111156102205761021f610ba8565b5b9050806040517fc13b30d40000000000000000000000000000000000000000000000000000000081526004016102569190610d55565b60405180910390fd5b6102676106c6565b61026f6106c6565b5f6040518060400160405280600181526020016040518060400160405280601081526020017f596f7520617265206e756d62657220310000000000000000000000000000000081525081525090505f6040518060400160405280600281526020016040518060400160405280601081526020017f596f7520617265206e756d626572203200000000000000000000000000000000815250815250905081819350935050509091565b61031f6106c6565b6103276106df565b5f6040518060400160405280600181526020016040518060400160405280601081526020017f596f7520617265206e756d62657220310000000000000000000000000000000081525081525090505f6040518060600160405280600281526020016040518060400160405280601081526020017f596f7520617265206e756d6265722032000000000000000000000000000000008152508152602001604051806020016040528060011515815250815250905081819350935050509091565b6103ee6106c6565b6103f66106df565b5f60605f6040518060400160405280600181526020016040518060400160405280601081526020017f596f7520617265206e756d62657220310000000000000000000000000000000081525081525094505f6040518060600160405280600281526020016040518060400160405280601081526020017f596f7520617265206e756d62657220320000000000000000000000000000000081525081526020016040518060200160405280600115158152508152509050858160015f6040518060400160405280601381526020017f52657475726e5479706573436f6e7472616374000000000000000000000000008152509095509550955095509550509091929394565b6105026106c6565b6040518060400160405280600181526020016040518060400160405280601081526020017f596f7520617265206e756d626572203100000000000000000000000000000000815250815250905090565b61055a6106c6565b8161056490610f1e565b9050919050565b5f807ffc25ee6cef1e5b8c4e7a2f8d3bbb15ca76bb693b8b5644b3b481e1831c09530b8460405161059c9190610f30565b60405180910390a17ffa3d951cbf852d2a9cc2dfc9fc6b57914afbf57597ecf432c403ed2d74124b2c836040516105d39190610f30565b60405180910390a18284915091509250929050565b6105f06106df565b816105fa90611029565b9050919050565b6106096106c6565b6106116106df565b6040518060400160405280600181526020016040518060400160405280601081526020017f596f7520617265206e756d62657220310000000000000000000000000000000081525081525091506040518060600160405280600281526020016040518060400160405280601081526020017f596f7520617265206e756d626572203200000000000000000000000000000000815250815260200160405180602001604052806001151581525081525090509091565b60405180604001604052805f8152602001606081525090565b60405180606001604052805f8152602001606081526020016106ff610705565b81525090565b60405180602001604052805f151581525090565b5f604051905090565b5f80fd5b5f80fd5b60038110610736575f80fd5b50565b5f813590506107478161072a565b92915050565b5f6020828403121561076257610761610722565b5b5f61076f84828501610739565b91505092915050565b5f819050919050565b61078a81610778565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156107c75780820151818401526020810190506107ac565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6107ec82610790565b6107f6818561079a565b93506108068185602086016107aa565b61080f816107d2565b840191505092915050565b5f604083015f83015161082f5f860182610781565b506020830151848203602086015261084782826107e2565b9150508091505092915050565b5f6040820190508181035f83015261086c818561081a565b90508181036020830152610880818461081a565b90509392505050565b5f8115159050919050565b61089d81610889565b82525050565b602082015f8201516108b75f850182610894565b50505050565b5f606083015f8301516108d25f860182610781565b50602083015184820360208601526108ea82826107e2565b91505060408301516108ff60408601826108a3565b508091505092915050565b5f6040820190508181035f830152610922818561081a565b9050818103602083015261093681846108bd565b90509392505050565b61094881610778565b82525050565b5f82825260208201905092915050565b5f61096882610790565b610972818561094e565b93506109828185602086016107aa565b61098b816107d2565b840191505092915050565b61099f81610889565b82525050565b5f60a0820190508181035f8301526109bd818861081a565b905081810360208301526109d181876108bd565b90506109e0604083018661093f565b81810360608301526109f2818561095e565b9050610a016080830184610996565b9695505050505050565b5f6020820190508181035f830152610a23818461081a565b905092915050565b5f80fd5b5f60408284031215610a4457610a43610a2b565b5b81905092915050565b5f60208284031215610a6257610a61610722565b5b5f82013567ffffffffffffffff811115610a7f57610a7e610726565b5b610a8b84828501610a2f565b91505092915050565b610a9d81610778565b8114610aa7575f80fd5b50565b5f81359050610ab881610a94565b92915050565b5f8060408385031215610ad457610ad3610722565b5b5f610ae185828601610aaa565b9250506020610af285828601610aaa565b9150509250929050565b5f604082019050610b0f5f83018561093f565b610b1c602083018461093f565b9392505050565b5f60608284031215610b3857610b37610a2b565b5b81905092915050565b5f60208284031215610b5657610b55610722565b5b5f82013567ffffffffffffffff811115610b7357610b72610726565b5b610b7f84828501610b23565b91505092915050565b5f6020820190508181035f830152610ba081846108bd565b905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b5f60ff82169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610c1882610bd5565b9150610c2383610bd5565b9250828201905060ff811115610c3c57610c3b610be1565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f610c7982610bd5565b9150610c8483610bd5565b925082610c9457610c93610c42565b5b828206905092915050565b60038110610cb057610caf610ba8565b5b50565b5f819050610cc082610c9f565b919050565b5f610ccf82610cb3565b9050919050565b610cdf81610cc5565b82525050565b7f5468616e6b20796f7520666f7220706c6179696e672c2062757420796f7520635f8201527f686f7365207468652077726f6e67206c65747465720000000000000000000000602082015250565b5f610d3f60358361094e565b9150610d4a82610ce5565b604082019050919050565b5f604082019050610d685f830184610cd6565b8181036020830152610d7981610d33565b905092915050565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b610dbb826107d2565b810181811067ffffffffffffffff82111715610dda57610dd9610d85565b5b80604052505050565b5f610dec610719565b9050610df88282610db2565b919050565b5f80fd5b5f80fd5b5f80fd5b5f67ffffffffffffffff821115610e2357610e22610d85565b5b610e2c826107d2565b9050602081019050919050565b828183375f83830152505050565b5f610e59610e5484610e09565b610de3565b905082815260208101848484011115610e7557610e74610e05565b5b610e80848285610e39565b509392505050565b5f82601f830112610e9c57610e9b610e01565b5b8135610eac848260208601610e47565b91505092915050565b5f60408284031215610eca57610ec9610d81565b5b610ed46040610de3565b90505f610ee384828501610aaa565b5f83015250602082013567ffffffffffffffff811115610f0657610f05610dfd565b5b610f1284828501610e88565b60208301525092915050565b5f610f293683610eb5565b9050919050565b5f602082019050610f435f83018461093f565b92915050565b610f5281610889565b8114610f5c575f80fd5b50565b5f81359050610f6d81610f49565b92915050565b5f60208284031215610f8857610f87610d81565b5b610f926020610de3565b90505f610fa184828501610f5f565b5f8301525092915050565b5f60608284031215610fc157610fc0610d81565b5b610fcb6060610de3565b90505f610fda84828501610aaa565b5f83015250602082013567ffffffffffffffff811115610ffd57610ffc610dfd565b5b61100984828501610e88565b602083015250604061101d84828501610f73565b60408301525092915050565b5f6110343683610fac565b905091905056fea264697066735822122072cb644782cb5404d6b2629e03389cd6529e6d20b9301e18b3bb2e96a9ba4f1364736f6c63430008170033"
+    "0x608060405234801562000010575f80fd5b506040516200183f3803806200183f8339818101604052810190620000369190620001d3565b805f908162000046919062000459565b50506200053d565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b620000af8262000067565b810181811067ffffffffffffffff82111715620000d157620000d062000077565b5b80604052505050565b5f620000e56200004e565b9050620000f38282620000a4565b919050565b5f67ffffffffffffffff82111562000115576200011462000077565b5b620001208262000067565b9050602081019050919050565b5f5b838110156200014c5780820151818401526020810190506200012f565b5f8484015250505050565b5f6200016d6200016784620000f8565b620000da565b9050828152602081018484840111156200018c576200018b62000063565b5b620001998482856200012d565b509392505050565b5f82601f830112620001b857620001b76200005f565b5b8151620001ca84826020860162000157565b91505092915050565b5f60208284031215620001eb57620001ea62000057565b5b5f82015167ffffffffffffffff8111156200020b576200020a6200005b565b5b6200021984828501620001a1565b91505092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806200027157607f821691505b6020821081036200028757620002866200022c565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302620002eb7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620002ae565b620002f78683620002ae565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f620003416200033b62000335846200030f565b62000318565b6200030f565b9050919050565b5f819050919050565b6200035c8362000321565b620003746200036b8262000348565b848454620002ba565b825550505050565b5f90565b6200038a6200037c565b6200039781848462000351565b505050565b5b81811015620003be57620003b25f8262000380565b6001810190506200039d565b5050565b601f8211156200040d57620003d7816200028d565b620003e2846200029f565b81016020851015620003f2578190505b6200040a62000401856200029f565b8301826200039c565b50505b505050565b5f82821c905092915050565b5f6200042f5f198460080262000412565b1980831691505092915050565b5f6200044983836200041e565b9150826002028217905092915050565b620004648262000222565b67ffffffffffffffff81111562000480576200047f62000077565b5b6200048c825462000259565b62000499828285620003c2565b5f60209050601f831160018114620004cf575f8415620004ba578287015190505b620004c685826200043c565b86555062000535565b601f198416620004df866200028d565b5f5b828110156200050857848901518255600182019150602085019450602081019050620004e1565b8683101562000528578489015162000524601f8916826200041e565b8355505b6001600288020188555050505b505050505050565b6112f4806200054b5f395ff3fe608060405234801561000f575f80fd5b506004361061009c575f3560e01c806386a5a4c31161006457806386a5a4c31461013a578063c8e3a3df1461016a578063cf71512c1461019a578063d3326446146101cb578063e0f7c604146101fb5761009c565b806326da1c9e146100a057806340e27b10146100bc57806353fd1043146100db57806373b10c0f146100fa578063811d9aa31461011c575b5f80fd5b6100ba60048036038101906100b59190610792565b61021a565b005b6100c461029a565b6040516100d2929190610899565b60405180910390f35b6100e3610352565b6040516100f192919061094f565b60405180910390f35b610102610421565b6040516101139594939291906109ea565b60405180910390f35b610124610535565b6040516101319190610a50565b60405180910390f35b610154600480360381019061014f9190610a92565b61058d565b6040516101619190610a50565b60405180910390f35b610184600480360381019061017f9190610d82565b6105a6565b6040516101919190610ebe565b60405180910390f35b6101b460048036038101906101af9190610ede565b6105b0565b6040516101c2929190610f1c565b60405180910390f35b6101e560048036038101906101e09190610f61565b61062d565b6040516101f29190610fa8565b60405180910390f35b610203610646565b60405161021192919061094f565b60405180910390f35b5f6003600183600281111561023257610231610fc8565b5b61023c919061102e565b610246919061108f565b60ff16600281111561025b5761025a610fc8565b5b9050806040517fc13b30d40000000000000000000000000000000000000000000000000000000081526004016102919190611175565b60405180910390fd5b6102a261070b565b6102aa61070b565b5f6040518060400160405280600181526020016040518060400160405280601081526020017f596f7520617265206e756d62657220310000000000000000000000000000000081525081525090505f6040518060400160405280600281526020016040518060400160405280601081526020017f596f7520617265206e756d626572203200000000000000000000000000000000815250815250905081819350935050509091565b61035a61070b565b610362610724565b5f6040518060400160405280600181526020016040518060400160405280601081526020017f596f7520617265206e756d62657220310000000000000000000000000000000081525081525090505f6040518060600160405280600281526020016040518060400160405280601081526020017f596f7520617265206e756d6265722032000000000000000000000000000000008152508152602001604051806020016040528060011515815250815250905081819350935050509091565b61042961070b565b610431610724565b5f60605f6040518060400160405280600181526020016040518060400160405280601081526020017f596f7520617265206e756d62657220310000000000000000000000000000000081525081525094505f6040518060600160405280600281526020016040518060400160405280601081526020017f596f7520617265206e756d62657220320000000000000000000000000000000081525081526020016040518060200160405280600115158152508152509050858160015f6040518060400160405280601381526020017f52657475726e5479706573436f6e7472616374000000000000000000000000008152509095509550955095509550509091929394565b61053d61070b565b6040518060400160405280600181526020016040518060400160405280601081526020017f596f7520617265206e756d626572203100000000000000000000000000000000815250815250905090565b61059561070b565b8161059f906111a1565b9050919050565b6060819050919050565b5f807ffc25ee6cef1e5b8c4e7a2f8d3bbb15ca76bb693b8b5644b3b481e1831c09530b846040516105e191906111b3565b60405180910390a17ffa3d951cbf852d2a9cc2dfc9fc6b57914afbf57597ecf432c403ed2d74124b2c8360405161061891906111b3565b60405180910390a18284915091509250929050565b610635610724565b8161063f906112ac565b9050919050565b61064e61070b565b610656610724565b6040518060400160405280600181526020016040518060400160405280601081526020017f596f7520617265206e756d62657220310000000000000000000000000000000081525081525091506040518060600160405280600281526020016040518060400160405280601081526020017f596f7520617265206e756d626572203200000000000000000000000000000000815250815260200160405180602001604052806001151581525081525090509091565b60405180604001604052805f8152602001606081525090565b60405180606001604052805f81526020016060815260200161074461074a565b81525090565b60405180602001604052805f151581525090565b5f604051905090565b5f80fd5b5f80fd5b6003811061077b575f80fd5b50565b5f8135905061078c8161076f565b92915050565b5f602082840312156107a7576107a6610767565b5b5f6107b48482850161077e565b91505092915050565b5f819050919050565b6107cf816107bd565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561080c5780820151818401526020810190506107f1565b5f8484015250505050565b5f601f19601f8301169050919050565b5f610831826107d5565b61083b81856107df565b935061084b8185602086016107ef565b61085481610817565b840191505092915050565b5f604083015f8301516108745f8601826107c6565b506020830151848203602086015261088c8282610827565b9150508091505092915050565b5f6040820190508181035f8301526108b1818561085f565b905081810360208301526108c5818461085f565b90509392505050565b5f8115159050919050565b6108e2816108ce565b82525050565b602082015f8201516108fc5f8501826108d9565b50505050565b5f606083015f8301516109175f8601826107c6565b506020830151848203602086015261092f8282610827565b915050604083015161094460408601826108e8565b508091505092915050565b5f6040820190508181035f830152610967818561085f565b9050818103602083015261097b8184610902565b90509392505050565b61098d816107bd565b82525050565b5f82825260208201905092915050565b5f6109ad826107d5565b6109b78185610993565b93506109c78185602086016107ef565b6109d081610817565b840191505092915050565b6109e4816108ce565b82525050565b5f60a0820190508181035f830152610a02818861085f565b90508181036020830152610a168187610902565b9050610a256040830186610984565b8181036060830152610a3781856109a3565b9050610a4660808301846109db565b9695505050505050565b5f6020820190508181035f830152610a68818461085f565b905092915050565b5f80fd5b5f60408284031215610a8957610a88610a70565b5b81905092915050565b5f60208284031215610aa757610aa6610767565b5b5f82013567ffffffffffffffff811115610ac457610ac361076b565b5b610ad084828501610a74565b91505092915050565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b610b1382610817565b810181811067ffffffffffffffff82111715610b3257610b31610add565b5b80604052505050565b5f610b4461075e565b9050610b508282610b0a565b919050565b5f67ffffffffffffffff821115610b6f57610b6e610add565b5b602082029050602081019050919050565b5f80fd5b5f80fd5b5f80fd5b610b95816107bd565b8114610b9f575f80fd5b50565b5f81359050610bb081610b8c565b92915050565b5f80fd5b5f67ffffffffffffffff821115610bd457610bd3610add565b5b610bdd82610817565b9050602081019050919050565b828183375f83830152505050565b5f610c0a610c0584610bba565b610b3b565b905082815260208101848484011115610c2657610c25610bb6565b5b610c31848285610bea565b509392505050565b5f82601f830112610c4d57610c4c610ad9565b5b8135610c5d848260208601610bf8565b91505092915050565b5f60408284031215610c7b57610c7a610b84565b5b610c856040610b3b565b90505f610c9484828501610ba2565b5f83015250602082013567ffffffffffffffff811115610cb757610cb6610b88565b5b610cc384828501610c39565b60208301525092915050565b5f610ce1610cdc84610b55565b610b3b565b90508083825260208201905060208402830185811115610d0457610d03610b80565b5b835b81811015610d4b57803567ffffffffffffffff811115610d2957610d28610ad9565b5b808601610d368982610c66565b85526020850194505050602081019050610d06565b5050509392505050565b5f82601f830112610d6957610d68610ad9565b5b8135610d79848260208601610ccf565b91505092915050565b5f60208284031215610d9757610d96610767565b5b5f82013567ffffffffffffffff811115610db457610db361076b565b5b610dc084828501610d55565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f604083015f830151610e075f8601826107c6565b5060208301518482036020860152610e1f8282610827565b9150508091505092915050565b5f610e378383610df2565b905092915050565b5f602082019050919050565b5f610e5582610dc9565b610e5f8185610dd3565b935083602082028501610e7185610de3565b805f5b85811015610eac5784840389528151610e8d8582610e2c565b9450610e9883610e3f565b925060208a01995050600181019050610e74565b50829750879550505050505092915050565b5f6020820190508181035f830152610ed68184610e4b565b905092915050565b5f8060408385031215610ef457610ef3610767565b5b5f610f0185828601610ba2565b9250506020610f1285828601610ba2565b9150509250929050565b5f604082019050610f2f5f830185610984565b610f3c6020830184610984565b9392505050565b5f60608284031215610f5857610f57610a70565b5b81905092915050565b5f60208284031215610f7657610f75610767565b5b5f82013567ffffffffffffffff811115610f9357610f9261076b565b5b610f9f84828501610f43565b91505092915050565b5f6020820190508181035f830152610fc08184610902565b905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b5f60ff82169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61103882610ff5565b915061104383610ff5565b9250828201905060ff81111561105c5761105b611001565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61109982610ff5565b91506110a483610ff5565b9250826110b4576110b3611062565b5b828206905092915050565b600381106110d0576110cf610fc8565b5b50565b5f8190506110e0826110bf565b919050565b5f6110ef826110d3565b9050919050565b6110ff816110e5565b82525050565b7f5468616e6b20796f7520666f7220706c6179696e672c2062757420796f7520635f8201527f686f7365207468652077726f6e67206c65747465720000000000000000000000602082015250565b5f61115f603583610993565b915061116a82611105565b604082019050919050565b5f6040820190506111885f8301846110f6565b818103602083015261119981611153565b905092915050565b5f6111ac3683610c66565b9050919050565b5f6020820190506111c65f830184610984565b92915050565b6111d5816108ce565b81146111df575f80fd5b50565b5f813590506111f0816111cc565b92915050565b5f6020828403121561120b5761120a610b84565b5b6112156020610b3b565b90505f611224848285016111e2565b5f8301525092915050565b5f6060828403121561124457611243610b84565b5b61124e6060610b3b565b90505f61125d84828501610ba2565b5f83015250602082013567ffffffffffffffff8111156112805761127f610b88565b5b61128c84828501610c39565b60208301525060406112a0848285016111f6565b60408301525092915050565b5f6112b7368361122f565b905091905056fea2646970667358221220e605714c5c039d9136f9dc9fe18bada609f8e15bf9cd4bb9b27e43da64ec713a64736f6c63430008170033"
 )
 
 
@@ -948,7 +1012,7 @@ class ExampleContract(Contract):
     """A web3.py Contract class for the Example contract."""
 
     abi: ABI = example_abi
-    bytecode: bytes = HexBytes(example_bytecode)
+    bytecode: bytes | None = try_bytecode_hexbytes(example_bytecode, "example")
 
     def __init__(self, address: ChecksumAddress | None = None) -> None:
         try:
diff --git a/example/types/utilities.py b/example/types/utilities.py
index 00b87d9d..6f8f57c0 100644
--- a/example/types/utilities.py
+++ b/example/types/utilities.py
@@ -6,9 +6,10 @@
 from __future__ import annotations
 
 from dataclasses import fields, is_dataclass
-from typing import Any, Tuple, TypeVar, cast
+from typing import Any, Iterable, Tuple, TypeVar, cast, get_args
 
 from eth_utils.abi import collapse_if_tuple
+from hexbytes import HexBytes
 from web3.types import ABIFunction
 
 T = TypeVar("T")
@@ -23,6 +24,8 @@ def tuple_to_dataclass(cls: type[T], structs: dict[str, Any], tuple_data: Any |
     ----------
     cls: type[T]
         The dataclass type to which the tuple data is to be converted.
+    structs: dict[str, Any]
+        Mapping from a struct name (key) to the run-time type definition (value).
     tuple_data: Any | Tuple[Any, ...]
         A tuple (or nested tuple) of values to convert into a dataclass instance.
 
@@ -102,13 +105,35 @@ def rename_returned_types(
             raw_values = (raw_values,)
 
         # Convert the tuple to the dataclass instance using the utility function
-        converted_values = tuple(
-            tuple_to_dataclass(return_type, structs, value) for return_type, value in zip(return_types, raw_values)
-        )
+        converted_values = []
+        for return_type, value in zip(return_types, raw_values):
+            if type(return_type) == type(list[Any]):  # pylint: disable=unidiomatic-typecheck
+                raise NotImplementedError("Multiple return values of type list[...] is not supported.")
+            converted_values.append(tuple_to_dataclass(return_type, structs, value))
+        converted_values = tuple(converted_values)
 
         return converted_values
 
-    # cover case of single return value
+    # cover case of single return type
+    # single return type is a list of SomeType, aka `list[SomeType]`
+    if type(return_types) == type(list[Any]):  # pylint: disable=unidiomatic-typecheck
+        inner_types = get_args(return_types)
+        # make sure there is only one inner type
+        if len(inner_types) != 1:
+            raise NotImplementedError("Only a single inner type in list[...] is supported")
+        inner_type = inner_types[0]
+        # make sure the type is not also a list
+        if type(inner_type) == type(list[Any]):  # pylint: disable=unidiomatic-typecheck
+            raise NotImplementedError("Type list[list[...]] is not supported.")
+        # type narrowing
+        assert isinstance(raw_values, Iterable)
+        # loop over inner values & convert those to dataclasses
+        converted_value = []
+        for value in raw_values:
+            converted_value.append(tuple_to_dataclass(inner_type, structs, value))
+        return tuple(converted_value)
+
+    # single return type is a standard type or dataclass
     converted_value = tuple_to_dataclass(return_types, structs, raw_values)
     return converted_value
 
@@ -134,3 +159,28 @@ def get_abi_input_types(abi: ABIFunction) -> list[str]:
     if "inputs" not in abi and (abi.get("type") == "fallback" or abi.get("type") == "receive"):
         return []
     return [collapse_if_tuple(cast(dict[str, Any], arg)) for arg in abi.get("inputs", [])]
+
+
+def try_bytecode_hexbytes(in_bytecode: Any, contract_name: str | None = None) -> HexBytes | None:
+    """Attempts to convert bytecode input to HexBytes. Returns None if it fails.
+
+    Parameters
+    ----------
+    in_bytecode : Any
+        The bytecode to attempt to convert to HexBytes
+    contract_name : str | None, optional
+        The name of the contract being deployed. Used for better warning printing.
+
+    Returns
+    -------
+    HexBytes | None
+        The HexBytes if it succeeds, otherwise None
+    """
+    try:
+        return HexBytes(in_bytecode)
+    except Exception as e:  # pylint: disable=broad-except
+        if contract_name is None:
+            print(f"Warning: failed to convert bytecode to HexBytes: {e}")
+        else:
+            print(f"Warning: failed to convert bytecode for {contract_name} to HexBytes: {e}")
+        return None
diff --git a/pypechain/main.py b/pypechain/main.py
index 5cc25939..17a31333 100644
--- a/pypechain/main.py
+++ b/pypechain/main.py
@@ -1,4 +1,4 @@
-"""Script to generate typed web3.py classes for solidity contracts."""
+"""Script to generate typed web3.py classes for Solidity contracts."""
 
 from __future__ import annotations
 
@@ -30,7 +30,7 @@ def main(argv: Sequence[str] | None = None) -> None:
 def pypechain(
     abi_file_path: str, output_dir: str = "pypechain_types", line_length: int = 120, apply_formatting: bool = True
 ):
-    """Generates class files for a given abi.
+    """Generate class files for a given abi.
 
     Parameters
     ----------
@@ -43,11 +43,6 @@ def pypechain(
     apply_formatting : bool, optional
         If True, autoflake, isort and black will be applied to the file in that order, by default True.
     """
-
-    # TODO: move to end of main() so that files aren't cleared if something breaks during script
-    # execution. Create/clear the output directory
-    setup_directory(output_dir)
-
     # List to store all JSON ABI files to be processed
     json_files_to_process: list[Path] = []
 
@@ -59,29 +54,30 @@ def pypechain(
         # Otherwise, add the single file to the list
         json_files_to_process.append(Path(abi_file_path))
 
-    # parse the files and gather AbiInfos.
+    # Parse the files and gather AbiInfos
     abi_infos: list[AbiInfo] = []
     for json_file in json_files_to_process:
         infos = load_abi_infos_from_file(json_file)
         abi_infos.extend(infos)
 
-    file_names: list[str] = []
+    # Create/clear the output directory
+    setup_directory(output_dir)
 
     # Now process all gathered files
-    file_names = render_files(abi_infos, output_dir, line_length, apply_formatting)
+    file_names: list[str] = render_files(abi_infos, output_dir, line_length, apply_formatting)
 
     # Render the __init__.py file
     render_init_file(output_dir, file_names, line_length)
 
-    # Copy utilities.py to the output_dir
     # Get the path to `utilities.py` (assuming it's in the same directory as your script)
     utilities_path = Path(__file__).parent / "templates/utilities.py"
+
     # Copy the file to the output directory
     copy2(utilities_path, output_dir)
 
 
 def gather_json_files(directory: str) -> list:
-    """Gathers all JSON files in the specified directory and its subdirectories."""
+    """Gather all JSON files in the specified directory and its subdirectories."""
     return list(Path(directory).rglob("*.json"))
 
 
@@ -106,7 +102,7 @@ class Args(NamedTuple):
 
 
 def namespace_to_args(namespace: argparse.Namespace) -> Args:
-    """Converts argprase.Namespace to Args."""
+    """Convert argprase.Namespace to Args."""
     return Args(
         abi_file_path=namespace.abi_file_path,
         output_dir=namespace.output_dir,
@@ -116,7 +112,7 @@ def namespace_to_args(namespace: argparse.Namespace) -> Args:
 
 
 def parse_arguments(argv: Sequence[str] | None = None) -> Args:
-    """Parses input arguments"""
+    """Parse input arguments."""
     parser = argparse.ArgumentParser(description="Generates class files for a given abi.")
     parser.add_argument(
         "abi_file_path",
diff --git a/pypechain/templates/utilities.py b/pypechain/templates/utilities.py
index 0072e85a..6f8f57c0 100644
--- a/pypechain/templates/utilities.py
+++ b/pypechain/templates/utilities.py
@@ -6,7 +6,7 @@
 from __future__ import annotations
 
 from dataclasses import fields, is_dataclass
-from typing import Any, Tuple, TypeVar, cast
+from typing import Any, Iterable, Tuple, TypeVar, cast, get_args
 
 from eth_utils.abi import collapse_if_tuple
 from hexbytes import HexBytes
@@ -24,6 +24,8 @@ def tuple_to_dataclass(cls: type[T], structs: dict[str, Any], tuple_data: Any |
     ----------
     cls: type[T]
         The dataclass type to which the tuple data is to be converted.
+    structs: dict[str, Any]
+        Mapping from a struct name (key) to the run-time type definition (value).
     tuple_data: Any | Tuple[Any, ...]
         A tuple (or nested tuple) of values to convert into a dataclass instance.
 
@@ -103,13 +105,35 @@ def rename_returned_types(
             raw_values = (raw_values,)
 
         # Convert the tuple to the dataclass instance using the utility function
-        converted_values = tuple(
-            tuple_to_dataclass(return_type, structs, value) for return_type, value in zip(return_types, raw_values)
-        )
+        converted_values = []
+        for return_type, value in zip(return_types, raw_values):
+            if type(return_type) == type(list[Any]):  # pylint: disable=unidiomatic-typecheck
+                raise NotImplementedError("Multiple return values of type list[...] is not supported.")
+            converted_values.append(tuple_to_dataclass(return_type, structs, value))
+        converted_values = tuple(converted_values)
 
         return converted_values
 
-    # cover case of single return value
+    # cover case of single return type
+    # single return type is a list of SomeType, aka `list[SomeType]`
+    if type(return_types) == type(list[Any]):  # pylint: disable=unidiomatic-typecheck
+        inner_types = get_args(return_types)
+        # make sure there is only one inner type
+        if len(inner_types) != 1:
+            raise NotImplementedError("Only a single inner type in list[...] is supported")
+        inner_type = inner_types[0]
+        # make sure the type is not also a list
+        if type(inner_type) == type(list[Any]):  # pylint: disable=unidiomatic-typecheck
+            raise NotImplementedError("Type list[list[...]] is not supported.")
+        # type narrowing
+        assert isinstance(raw_values, Iterable)
+        # loop over inner values & convert those to dataclasses
+        converted_value = []
+        for value in raw_values:
+            converted_value.append(tuple_to_dataclass(inner_type, structs, value))
+        return tuple(converted_value)
+
+    # single return type is a standard type or dataclass
     converted_value = tuple_to_dataclass(return_types, structs, raw_values)
     return converted_value
 
diff --git a/pypechain/utilities/abi.py b/pypechain/utilities/abi.py
index a6515177..972a74a0 100644
--- a/pypechain/utilities/abi.py
+++ b/pypechain/utilities/abi.py
@@ -319,29 +319,32 @@ def get_structs(
         components = param.get("components")
         internal_type = cast(str, param.get("internalType", ""))
 
-        # if we find a struct, we'll add it to the dict of StructInfo's
+        # If we find a struct, we'll add it to the dict of StructInfo's
         if is_struct(internal_type) and components:
             struct_name = get_struct_name(param)
             struct_file_name = get_struct_contract_name(param)
             struct_values: list[StructValue] = []
 
-            # walk over the components of the struct
+            # Walk over the components of the struct
             for component in components:
                 component_internal_type = cast(str, component.get("internalType", ""))
 
-                # do recursion if nested struct
+                # Do recursion if nested struct
                 contract_name: str | None = None
                 if is_struct(component_internal_type):
-                    get_structs([component], structs)
+                    structs = get_structs([component], structs)
                     contract_name = get_struct_contract_name(component)
 
-                component_name = get_param_name(component)
+                # Get the component name and type
+                component_name = get_param_name(component)  # strip [] if it is an array
                 component_type = (
-                    get_struct_name(component) if is_struct(component_internal_type) else component.get("type", "")
+                    get_struct_type(component) if is_struct(component_internal_type) else component.get("type", "")
                 )
                 python_type = solidity_to_python_type(
                     component_type, custom_types=[struct.name for struct in structs.values()]
                 )
+
+                # Collect information
                 struct_values.append(
                     StructValue(
                         name=component_name,
@@ -352,7 +355,7 @@ def get_structs(
                     )
                 )
 
-            # lastly, add the struct to the dict
+            # Add the struct to the dict
             structs[f"{struct_file_name}.{struct_name}"] = StructInfo(
                 name=struct_name, contract_name=struct_file_name, values=struct_values
             )
@@ -541,7 +544,7 @@ def get_struct_name(
 
     Parameters
     ----------
-    param : ABIFunctionParams | ABIFunctionComponents
+    param_or_component: ABIFunctionParams | ABIFunctionComponents
 
 
     Returns
@@ -550,10 +553,34 @@ def get_struct_name(
         The name of the item.
     """
     internal_type = cast(str, param_or_component.get("internalType", ""))
-    struct_name = internal_type.split(".")[1]
+    struct_name = internal_type.split(".")[1].rstrip("[]")
     return capitalize_first_letter_only(struct_name)
 
 
+def get_struct_type(
+    param_or_component: ABIFunctionParams | ABIFunctionComponents,
+) -> str:
+    """Returns the type of the given struct.
+
+    This works the same as `get_struct_name`, except that we account for arrays by
+    wrapping the name in `list[...]`.
+
+    Parameters
+    ----------
+    param_or_component: ABIFunctionParams | ABIFunctionComponents
+
+    Returns
+    -------
+    str
+        The type of the item.
+    """
+    internal_type = cast(str, param_or_component.get("internalType", ""))
+    struct_full_name = internal_type.split(".")[1]
+    if struct_full_name[-2:] == "[]":  # ends with [] indicates an array
+        return "list[" + get_struct_name(param_or_component) + "]"
+    return get_struct_name(param_or_component)
+
+
 def get_struct_contract_name(
     param_or_component: ABIFunctionParams | ABIFunctionComponents,
 ) -> str:
@@ -606,8 +633,7 @@ def get_param_name(
     str
         The name of the item.
     """
-
-    return param_or_component.get("name", "").lstrip("_")
+    return param_or_component.get("name", "").lstrip("_").rstrip("[]")
 
 
 @dataclass
@@ -888,12 +914,12 @@ def _get_param_types(function: ABIFunction, parameters_type: Literal["inputs", "
     return stringified_function_parameters
 
 
-def get_param_type(param: ABIFunctionParams):
+def get_param_type(param: ABIFunctionParams | ABIFunctionComponents):
     """Gets the associated python type, including generated dataclasses"""
     internal_type = cast(str, param.get("internalType", ""))
     # if we find a struct, we'll add it to the dict of StructInfo's
     if is_struct(internal_type):
-        python_type = get_struct_name(param)
+        python_type = get_struct_type(param)
     else:
         python_type = solidity_to_python_type(param.get("type", "unknown"))
     return python_type
diff --git a/pypechain/utilities/conversion.py b/pypechain/utilities/conversion.py
index 1e44976e..e9d02129 100644
--- a/pypechain/utilities/conversion.py
+++ b/pypechain/utilities/conversion.py
@@ -17,7 +17,7 @@ def tuple_to_dataclass(cls: type[T], tuple_data: Any | Tuple[Any, ...]) -> T:
     ----------
     cls: type[T]
         The dataclass type to which the tuple data is to be converted.
-    tuple_data: Any | Typle[Any, ...]
+    tuple_data: Any | Tuple[Any, ...]
         A tuple (or nested tuple) of values to convert into a dataclass instance.
 
     Returns
diff --git a/pypechain/utilities/types.py b/pypechain/utilities/types.py
index 324d223f..c3981a1d 100644
--- a/pypechain/utilities/types.py
+++ b/pypechain/utilities/types.py
@@ -34,7 +34,7 @@ class EventData(TypedDict):
 
 # pylint: disable=dangerous-default-value
 def solidity_to_python_type(solidity_type: str, custom_types: list[str] = []) -> str:
-    """Returns the stringfied python type for the gien solidity type.
+    """Returns the stringified Python type for the given Solidity type.
 
     Parameters
     ----------
@@ -159,11 +159,17 @@ def solidity_to_python_type(solidity_type: str, custom_types: list[str] = []) ->
     # tuple
     if solidity_type == "tuple":
         return "tuple"
+    if solidity_type == "tuple[]":
+        return "list[tuple]"
 
+    # custom types
     if solidity_type in custom_types:
+        if solidity_type[-2:] == "[]":
+            return "list[" + solidity_type[:-2] + "]"
         return solidity_type
+
     # If the Solidity type isn't recognized, make a warning.  This can happen when an internal type
-    # is expeected for an input parameter or returned in an output.
+    # is expected for an input parameter or returned in an output.
     logging.warning("Unknown Solidity type: %s", solidity_type)
 
     return solidity_type
diff --git a/pyproject.toml b/pyproject.toml
index e9284e9f..c32a50e6 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -54,3 +54,7 @@ max-line-length = "120"
 [tool.black]
 line-length = "120"
 force-exclude = "(snapshots|venv)"
+
+[tool.isort]
+line_length = 120
+profile = "black"
\ No newline at end of file


Test patch:
diff --git a/conftest.py b/conftest.py
index 5f961a9e..0d6e8f1b 100644
--- a/conftest.py
+++ b/conftest.py
@@ -1,4 +1,4 @@
-"""Test fixture for deploying local anvil chain."""
+"""Pypechain test fixtures."""
 
 from __future__ import annotations
 
@@ -82,7 +82,7 @@ def local_chain() -> Iterator[str]:
 
 @pytest.fixture(scope="session")
 def w3_init(local_chain: str) -> Web3:
-    """gets a Web3 instance connected to the local chain.
+    """Get a Web3 instance connected to the local chain.
 
     Parameters
     ----------
@@ -102,7 +102,7 @@ def w3_init(local_chain: str) -> Web3:
 
 @pytest.fixture(scope="function")
 def w3(w3_init: Web3) -> Iterator[Web3]:
-    """resets the anvil instance at the function level so each test gets a fresh chain.
+    """Reset the anvil instance at the function level so each test gets a fresh chain.
 
     Parameters
     ----------
@@ -155,9 +155,9 @@ def initialize_web3_with_http_provider(
 
 @pytest.fixture(scope="class")
 def process_contracts(request):
-    """Generates abis for all contracts and pypechain types from those abis."""
+    """Generate ABIs for all contracts and pypechain types from those abis."""
 
-    # don't regenerate files in CI, it can cause things to break in weird ways.
+    # Don't regenerate files in CI, it can cause things to break in weird ways.
     if os.environ.get("IN_CI"):
         return
 
@@ -189,5 +189,5 @@ def process_contracts(request):
                 with open(output_file, "w", encoding="utf-8") as file:
                     json.dump(data, file, ensure_ascii=False, indent=2)
 
-    # # Run the pypechain module after processing all contracts
+    # Run the pypechain module after processing all contracts
     pypechain(f"{test_dir}/abis", f"{test_dir}/types")
diff --git a/pypechain/test/deployment/abis/ConstructorWithArgs.json b/pypechain/test/deployment/abis/ConstructorWithArgs.json
index 464a32d0..df3021e3 100644
--- a/pypechain/test/deployment/abis/ConstructorWithArgs.json
+++ b/pypechain/test/deployment/abis/ConstructorWithArgs.json
@@ -40,8 +40,8 @@
           "type": "function"
         }
       ],
-      "bin": "608060405234801562000010575f80fd5b5060405162000b9038038062000b908339818101604052810190620000369190620001d3565b805f908162000046919062000459565b50506200053d565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b620000af8262000067565b810181811067ffffffffffffffff82111715620000d157620000d062000077565b5b80604052505050565b5f620000e56200004e565b9050620000f38282620000a4565b919050565b5f67ffffffffffffffff82111562000115576200011462000077565b5b620001208262000067565b9050602081019050919050565b5f5b838110156200014c5780820151818401526020810190506200012f565b5f8484015250505050565b5f6200016d6200016784620000f8565b620000da565b9050828152602081018484840111156200018c576200018b62000063565b5b620001998482856200012d565b509392505050565b5f82601f830112620001b857620001b76200005f565b5b8151620001ca84826020860162000157565b91505092915050565b5f60208284031215620001eb57620001ea62000057565b5b5f82015167ffffffffffffffff8111156200020b576200020a6200005b565b5b6200021984828501620001a1565b91505092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806200027157607f821691505b6020821081036200028757620002866200022c565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302620002eb7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620002ae565b620002f78683620002ae565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f620003416200033b62000335846200030f565b62000318565b6200030f565b9050919050565b5f819050919050565b6200035c8362000321565b620003746200036b8262000348565b848454620002ba565b825550505050565b5f90565b6200038a6200037c565b6200039781848462000351565b505050565b5b81811015620003be57620003b25f8262000380565b6001810190506200039d565b5050565b601f8211156200040d57620003d7816200028d565b620003e2846200029f565b81016020851015620003f2578190505b6200040a62000401856200029f565b8301826200039c565b50505b505050565b5f82821c905092915050565b5f6200042f5f198460080262000412565b1980831691505092915050565b5f6200044983836200041e565b9150826002028217905092915050565b620004648262000222565b67ffffffffffffffff81111562000480576200047f62000077565b5b6200048c825462000259565b62000499828285620003c2565b5f60209050601f831160018114620004cf575f8415620004ba578287015190505b620004c685826200043c565b86555062000535565b601f198416620004df866200028d565b5f5b828110156200050857848901518255600182019150602085019450602081019050620004e1565b8683101562000528578489015162000524601f8916826200041e565b8355505b6001600288020188555050505b505050505050565b610645806200054b5f395ff3fe608060405234801561000f575f80fd5b5060043610610034575f3560e01c806306fdde0314610038578063c47f002714610056575b5f80fd5b610040610072565b60405161004d9190610199565b60405180910390f35b610070600480360381019061006b91906102f6565b6100fd565b005b5f805461007e9061036a565b80601f01602080910402602001604051908101604052809291908181526020018280546100aa9061036a565b80156100f55780601f106100cc576101008083540402835291602001916100f5565b820191905f5260205f20905b8154815290600101906020018083116100d857829003601f168201915b505050505081565b805f908161010b9190610540565b5050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561014657808201518184015260208101905061012b565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61016b8261010f565b6101758185610119565b9350610185818560208601610129565b61018e81610151565b840191505092915050565b5f6020820190508181035f8301526101b18184610161565b905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61020882610151565b810181811067ffffffffffffffff82111715610227576102266101d2565b5b80604052505050565b5f6102396101b9565b905061024582826101ff565b919050565b5f67ffffffffffffffff821115610264576102636101d2565b5b61026d82610151565b9050602081019050919050565b828183375f83830152505050565b5f61029a6102958461024a565b610230565b9050828152602081018484840111156102b6576102b56101ce565b5b6102c184828561027a565b509392505050565b5f82601f8301126102dd576102dc6101ca565b5b81356102ed848260208601610288565b91505092915050565b5f6020828403121561030b5761030a6101c2565b5b5f82013567ffffffffffffffff811115610328576103276101c6565b5b610334848285016102c9565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061038157607f821691505b6020821081036103945761039361033d565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026103f67fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826103bb565b61040086836103bb565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f61044461043f61043a84610418565b610421565b610418565b9050919050565b5f819050919050565b61045d8361042a565b6104716104698261044b565b8484546103c7565b825550505050565b5f90565b610485610479565b610490818484610454565b505050565b5b818110156104b3576104a85f8261047d565b600181019050610496565b5050565b601f8211156104f8576104c98161039a565b6104d2846103ac565b810160208510156104e1578190505b6104f56104ed856103ac565b830182610495565b50505b505050565b5f82821c905092915050565b5f6105185f19846008026104fd565b1980831691505092915050565b5f6105308383610509565b9150826002028217905092915050565b6105498261010f565b67ffffffffffffffff811115610562576105616101d2565b5b61056c825461036a565b6105778282856104b7565b5f60209050601f8311600181146105a8575f8415610596578287015190505b6105a08582610525565b865550610607565b601f1984166105b68661039a565b5f5b828110156105dd578489015182556001820191506020850194506020810190506105b8565b868310156105fa57848901516105f6601f891682610509565b8355505b6001600288020188555050505b50505050505056fea2646970667358221220f8b8631bedf027c6e70b77a9d47c1c9e199924ecc2c864348c766705064dd33864736f6c63430008170033",
-      "metadata": "{\"compiler\":{\"version\":\"0.8.23+commit.f704f362\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"}],\"name\":\"setName\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"pypechain/test/deployment/contracts/ConstructorWithArgs.sol\":\"ConstructorWithArgs\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"pypechain/test/deployment/contracts/ConstructorWithArgs.sol\":{\"keccak256\":\"0x7ced18c0ce28b46385356725f3ff74255c86acc3d81d21ea8fb435485e3fe402\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c0bcaedf09568434a5a2c0a82e3e675da0f5dad2c3798630e56be4ff4d1429d5\",\"dweb:/ipfs/QmYwsZvRVryhJ4SV85ixr652KChgT5ALxk3ejQPkySpHrZ\"]}},\"version\":1}"
+      "bin": "608060405234801562000010575f80fd5b5060405162000b9038038062000b908339818101604052810190620000369190620001d3565b805f908162000046919062000459565b50506200053d565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b620000af8262000067565b810181811067ffffffffffffffff82111715620000d157620000d062000077565b5b80604052505050565b5f620000e56200004e565b9050620000f38282620000a4565b919050565b5f67ffffffffffffffff82111562000115576200011462000077565b5b620001208262000067565b9050602081019050919050565b5f5b838110156200014c5780820151818401526020810190506200012f565b5f8484015250505050565b5f6200016d6200016784620000f8565b620000da565b9050828152602081018484840111156200018c576200018b62000063565b5b620001998482856200012d565b509392505050565b5f82601f830112620001b857620001b76200005f565b5b8151620001ca84826020860162000157565b91505092915050565b5f60208284031215620001eb57620001ea62000057565b5b5f82015167ffffffffffffffff8111156200020b576200020a6200005b565b5b6200021984828501620001a1565b91505092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806200027157607f821691505b6020821081036200028757620002866200022c565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302620002eb7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620002ae565b620002f78683620002ae565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f620003416200033b62000335846200030f565b62000318565b6200030f565b9050919050565b5f819050919050565b6200035c8362000321565b620003746200036b8262000348565b848454620002ba565b825550505050565b5f90565b6200038a6200037c565b6200039781848462000351565b505050565b5b81811015620003be57620003b25f8262000380565b6001810190506200039d565b5050565b601f8211156200040d57620003d7816200028d565b620003e2846200029f565b81016020851015620003f2578190505b6200040a62000401856200029f565b8301826200039c565b50505b505050565b5f82821c905092915050565b5f6200042f5f198460080262000412565b1980831691505092915050565b5f6200044983836200041e565b9150826002028217905092915050565b620004648262000222565b67ffffffffffffffff81111562000480576200047f62000077565b5b6200048c825462000259565b62000499828285620003c2565b5f60209050601f831160018114620004cf575f8415620004ba578287015190505b620004c685826200043c565b86555062000535565b601f198416620004df866200028d565b5f5b828110156200050857848901518255600182019150602085019450602081019050620004e1565b8683101562000528578489015162000524601f8916826200041e565b8355505b6001600288020188555050505b505050505050565b610645806200054b5f395ff3fe608060405234801561000f575f80fd5b5060043610610034575f3560e01c806306fdde0314610038578063c47f002714610056575b5f80fd5b610040610072565b60405161004d9190610199565b60405180910390f35b610070600480360381019061006b91906102f6565b6100fd565b005b5f805461007e9061036a565b80601f01602080910402602001604051908101604052809291908181526020018280546100aa9061036a565b80156100f55780601f106100cc576101008083540402835291602001916100f5565b820191905f5260205f20905b8154815290600101906020018083116100d857829003601f168201915b505050505081565b805f908161010b9190610540565b5050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561014657808201518184015260208101905061012b565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61016b8261010f565b6101758185610119565b9350610185818560208601610129565b61018e81610151565b840191505092915050565b5f6020820190508181035f8301526101b18184610161565b905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61020882610151565b810181811067ffffffffffffffff82111715610227576102266101d2565b5b80604052505050565b5f6102396101b9565b905061024582826101ff565b919050565b5f67ffffffffffffffff821115610264576102636101d2565b5b61026d82610151565b9050602081019050919050565b828183375f83830152505050565b5f61029a6102958461024a565b610230565b9050828152602081018484840111156102b6576102b56101ce565b5b6102c184828561027a565b509392505050565b5f82601f8301126102dd576102dc6101ca565b5b81356102ed848260208601610288565b91505092915050565b5f6020828403121561030b5761030a6101c2565b5b5f82013567ffffffffffffffff811115610328576103276101c6565b5b610334848285016102c9565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061038157607f821691505b6020821081036103945761039361033d565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026103f67fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826103bb565b61040086836103bb565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f61044461043f61043a84610418565b610421565b610418565b9050919050565b5f819050919050565b61045d8361042a565b6104716104698261044b565b8484546103c7565b825550505050565b5f90565b610485610479565b610490818484610454565b505050565b5b818110156104b3576104a85f8261047d565b600181019050610496565b5050565b601f8211156104f8576104c98161039a565b6104d2846103ac565b810160208510156104e1578190505b6104f56104ed856103ac565b830182610495565b50505b505050565b5f82821c905092915050565b5f6105185f19846008026104fd565b1980831691505092915050565b5f6105308383610509565b9150826002028217905092915050565b6105498261010f565b67ffffffffffffffff811115610562576105616101d2565b5b61056c825461036a565b6105778282856104b7565b5f60209050601f8311600181146105a8575f8415610596578287015190505b6105a08582610525565b865550610607565b601f1984166105b68661039a565b5f5b828110156105dd578489015182556001820191506020850194506020810190506105b8565b868310156105fa57848901516105f6601f891682610509565b8355505b6001600288020188555050505b50505050505056fea26469706673582212203e37f92b68827db766a4e600bab4296eda8355c57b9a016e16f7bb38134f381164736f6c63430008170033",
+      "metadata": "{\"compiler\":{\"version\":\"0.8.23+commit.f704f362\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"}],\"name\":\"setName\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"pypechain/test/deployment/contracts/ConstructorWithArgs.sol\":\"ConstructorWithArgs\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"pypechain/test/deployment/contracts/ConstructorWithArgs.sol\":{\"keccak256\":\"0x6dc584b7f30f5e9df516b10319aeab2ba66141987a6688b4bd763e7174ff2394\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a89074ec964566bb301c162873fed339652af9f185d9e8f219aef6e8734a297a\",\"dweb:/ipfs/QmcpX3ke3SpZ66sZ4BKVsW4CHZt61QLmngrehb82E6K3vX\"]}},\"version\":1}"
     }
   },
   "version": "0.8.23+commit.f704f362.Darwin.appleclang"
diff --git a/pypechain/test/deployment/abis/ConstructorWithStructArgs.json b/pypechain/test/deployment/abis/ConstructorWithStructArgs.json
index 6385ff06..7e938f30 100644
--- a/pypechain/test/deployment/abis/ConstructorWithStructArgs.json
+++ b/pypechain/test/deployment/abis/ConstructorWithStructArgs.json
@@ -77,8 +77,8 @@
           "type": "function"
         }
       ],
-      "bin": "60806040525f60025f6101000a81548160ff02191690831515021790555034801562000029575f80fd5b5060405162000de638038062000de683398181016040528101906200004f919062000374565b805f01515f9081620000629190620005fa565b5080602001515f0151600190816200007b9190620005fa565b5080602001516020015160025f6101000a81548160ff02191690831515021790555050620006de565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6200010182620000b9565b810181811067ffffffffffffffff82111715620001235762000122620000c9565b5b80604052505050565b5f62000137620000a4565b9050620001458282620000f6565b919050565b5f80fd5b5f80fd5b5f80fd5b5f67ffffffffffffffff821115620001735762000172620000c9565b5b6200017e82620000b9565b9050602081019050919050565b5f5b83811015620001aa5780820151818401526020810190506200018d565b5f8484015250505050565b5f620001cb620001c58462000156565b6200012c565b905082815260208101848484011115620001ea57620001e962000152565b5b620001f78482856200018b565b509392505050565b5f82601f8301126200021657620002156200014e565b5b815162000228848260208601620001b5565b91505092915050565b5f8115159050919050565b620002478162000231565b811462000252575f80fd5b50565b5f8151905062000265816200023c565b92915050565b5f60408284031215620002835762000282620000b5565b5b6200028f60406200012c565b90505f82015167ffffffffffffffff811115620002b157620002b06200014a565b5b620002bf84828501620001ff565b5f830152506020620002d48482850162000255565b60208301525092915050565b5f60408284031215620002f857620002f7620000b5565b5b6200030460406200012c565b90505f82015167ffffffffffffffff8111156200032657620003256200014a565b5b6200033484828501620001ff565b5f83015250602082015167ffffffffffffffff8111156200035a57620003596200014a565b5b62000368848285016200026b565b60208301525092915050565b5f602082840312156200038c576200038b620000ad565b5b5f82015167ffffffffffffffff811115620003ac57620003ab620000b1565b5b620003ba84828501620002e0565b91505092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806200041257607f821691505b602082108103620004285762000427620003cd565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026200048c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200044f565b6200049886836200044f565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f620004e2620004dc620004d684620004b0565b620004b9565b620004b0565b9050919050565b5f819050919050565b620004fd83620004c2565b620005156200050c82620004e9565b8484546200045b565b825550505050565b5f90565b6200052b6200051d565b62000538818484620004f2565b505050565b5b818110156200055f57620005535f8262000521565b6001810190506200053e565b5050565b601f821115620005ae5762000578816200042e565b620005838462000440565b8101602085101562000593578190505b620005ab620005a28562000440565b8301826200053d565b50505b505050565b5f82821c905092915050565b5f620005d05f1984600802620005b3565b1980831691505092915050565b5f620005ea8383620005bf565b9150826002028217905092915050565b6200060582620003c3565b67ffffffffffffffff811115620006215762000620620000c9565b5b6200062d8254620003fa565b6200063a82828562000563565b5f60209050601f83116001811462000670575f84156200065b578287015190505b620006678582620005dd565b865550620006d6565b601f19841662000680866200042e565b5f5b82811015620006a95784890151825560018201915060208501945060208101905062000682565b86831015620006c95784890151620006c5601f891682620005bf565b8355505b6001600288020188555050505b505050505050565b6106fa80620006ec5f395ff3fe608060405234801561000f575f80fd5b506004361061003f575f3560e01c806306fdde0314610043578063c47f002714610061578063c55e90fe1461007d575b5f80fd5b61004b61009b565b604051610058919061024e565b60405180910390f35b61007b600480360381019061007691906103ab565b610126565b005b610085610138565b604051610092919061024e565b60405180910390f35b5f80546100a79061041f565b80601f01602080910402602001604051908101604052809291908181526020018280546100d39061041f565b801561011e5780601f106100f55761010080835404028352916020019161011e565b820191905f5260205f20905b81548152906001019060200180831161010157829003601f168201915b505050505081565b805f908161013491906105f5565b5050565b600180546101459061041f565b80601f01602080910402602001604051908101604052809291908181526020018280546101719061041f565b80156101bc5780601f10610193576101008083540402835291602001916101bc565b820191905f5260205f20905b81548152906001019060200180831161019f57829003601f168201915b505050505081565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156101fb5780820151818401526020810190506101e0565b5f8484015250505050565b5f601f19601f8301169050919050565b5f610220826101c4565b61022a81856101ce565b935061023a8185602086016101de565b61024381610206565b840191505092915050565b5f6020820190508181035f8301526102668184610216565b905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6102bd82610206565b810181811067ffffffffffffffff821117156102dc576102db610287565b5b80604052505050565b5f6102ee61026e565b90506102fa82826102b4565b919050565b5f67ffffffffffffffff82111561031957610318610287565b5b61032282610206565b9050602081019050919050565b828183375f83830152505050565b5f61034f61034a846102ff565b6102e5565b90508281526020810184848401111561036b5761036a610283565b5b61037684828561032f565b509392505050565b5f82601f8301126103925761039161027f565b5b81356103a284826020860161033d565b91505092915050565b5f602082840312156103c0576103bf610277565b5b5f82013567ffffffffffffffff8111156103dd576103dc61027b565b5b6103e98482850161037e565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061043657607f821691505b602082108103610449576104486103f2565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026104ab7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610470565b6104b58683610470565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f6104f96104f46104ef846104cd565b6104d6565b6104cd565b9050919050565b5f819050919050565b610512836104df565b61052661051e82610500565b84845461047c565b825550505050565b5f90565b61053a61052e565b610545818484610509565b505050565b5b818110156105685761055d5f82610532565b60018101905061054b565b5050565b601f8211156105ad5761057e8161044f565b61058784610461565b81016020851015610596578190505b6105aa6105a285610461565b83018261054a565b50505b505050565b5f82821c905092915050565b5f6105cd5f19846008026105b2565b1980831691505092915050565b5f6105e583836105be565b9150826002028217905092915050565b6105fe826101c4565b67ffffffffffffffff81111561061757610616610287565b5b610621825461041f565b61062c82828561056c565b5f60209050601f83116001811461065d575f841561064b578287015190505b61065585826105da565b8655506106bc565b601f19841661066b8661044f565b5f5b828110156106925784890151825560018201915060208501945060208101905061066d565b868310156106af57848901516106ab601f8916826105be565b8355505b6001600288020188555050505b50505050505056fea264697066735822122040dfe563f0448bd3b11ad7007fa7d74af796bb4705e61d909bf339aebd6b747b64736f6c63430008170033",
-      "metadata": "{\"compiler\":{\"version\":\"0.8.23+commit.f704f362\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"thing\",\"type\":\"string\"},{\"internalType\":\"bool\",\"name\":\"yesOrNo\",\"type\":\"bool\"}],\"internalType\":\"struct ConstructorWithStructArgs.Items\",\"name\":\"items\",\"type\":\"tuple\"}],\"internalType\":\"struct ConstructorWithStructArgs.Config\",\"name\":\"config\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"}],\"name\":\"setName\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"thing\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"pypechain/test/deployment/contracts/ConstructorWithStructArgs.sol\":\"ConstructorWithStructArgs\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"pypechain/test/deployment/contracts/ConstructorWithStructArgs.sol\":{\"keccak256\":\"0x0adab9bee89828db228caafa4c4072c310ff97d047f2fe0a95e59f30ee30ecf6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c74c4faa44a15a5099a9d99fdba80c8768be6fb79ab60f0bafcd669758bbc2a1\",\"dweb:/ipfs/QmcuC7sVeCymwbNrCZHYyveNTjuoj8vHsUV5YC45hAmCvf\"]}},\"version\":1}"
+      "bin": "60806040525f60025f6101000a81548160ff02191690831515021790555034801562000029575f80fd5b5060405162000de638038062000de683398181016040528101906200004f919062000374565b805f01515f9081620000629190620005fa565b5080602001515f0151600190816200007b9190620005fa565b5080602001516020015160025f6101000a81548160ff02191690831515021790555050620006de565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6200010182620000b9565b810181811067ffffffffffffffff82111715620001235762000122620000c9565b5b80604052505050565b5f62000137620000a4565b9050620001458282620000f6565b919050565b5f80fd5b5f80fd5b5f80fd5b5f67ffffffffffffffff821115620001735762000172620000c9565b5b6200017e82620000b9565b9050602081019050919050565b5f5b83811015620001aa5780820151818401526020810190506200018d565b5f8484015250505050565b5f620001cb620001c58462000156565b6200012c565b905082815260208101848484011115620001ea57620001e962000152565b5b620001f78482856200018b565b509392505050565b5f82601f8301126200021657620002156200014e565b5b815162000228848260208601620001b5565b91505092915050565b5f8115159050919050565b620002478162000231565b811462000252575f80fd5b50565b5f8151905062000265816200023c565b92915050565b5f60408284031215620002835762000282620000b5565b5b6200028f60406200012c565b90505f82015167ffffffffffffffff811115620002b157620002b06200014a565b5b620002bf84828501620001ff565b5f830152506020620002d48482850162000255565b60208301525092915050565b5f60408284031215620002f857620002f7620000b5565b5b6200030460406200012c565b90505f82015167ffffffffffffffff8111156200032657620003256200014a565b5b6200033484828501620001ff565b5f83015250602082015167ffffffffffffffff8111156200035a57620003596200014a565b5b62000368848285016200026b565b60208301525092915050565b5f602082840312156200038c576200038b620000ad565b5b5f82015167ffffffffffffffff811115620003ac57620003ab620000b1565b5b620003ba84828501620002e0565b91505092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806200041257607f821691505b602082108103620004285762000427620003cd565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026200048c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200044f565b6200049886836200044f565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f620004e2620004dc620004d684620004b0565b620004b9565b620004b0565b9050919050565b5f819050919050565b620004fd83620004c2565b620005156200050c82620004e9565b8484546200045b565b825550505050565b5f90565b6200052b6200051d565b62000538818484620004f2565b505050565b5b818110156200055f57620005535f8262000521565b6001810190506200053e565b5050565b601f821115620005ae5762000578816200042e565b620005838462000440565b8101602085101562000593578190505b620005ab620005a28562000440565b8301826200053d565b50505b505050565b5f82821c905092915050565b5f620005d05f1984600802620005b3565b1980831691505092915050565b5f620005ea8383620005bf565b9150826002028217905092915050565b6200060582620003c3565b67ffffffffffffffff811115620006215762000620620000c9565b5b6200062d8254620003fa565b6200063a82828562000563565b5f60209050601f83116001811462000670575f84156200065b578287015190505b620006678582620005dd565b865550620006d6565b601f19841662000680866200042e565b5f5b82811015620006a95784890151825560018201915060208501945060208101905062000682565b86831015620006c95784890151620006c5601f891682620005bf565b8355505b6001600288020188555050505b505050505050565b6106fa80620006ec5f395ff3fe608060405234801561000f575f80fd5b506004361061003f575f3560e01c806306fdde0314610043578063c47f002714610061578063c55e90fe1461007d575b5f80fd5b61004b61009b565b604051610058919061024e565b60405180910390f35b61007b600480360381019061007691906103ab565b610126565b005b610085610138565b604051610092919061024e565b60405180910390f35b5f80546100a79061041f565b80601f01602080910402602001604051908101604052809291908181526020018280546100d39061041f565b801561011e5780601f106100f55761010080835404028352916020019161011e565b820191905f5260205f20905b81548152906001019060200180831161010157829003601f168201915b505050505081565b805f908161013491906105f5565b5050565b600180546101459061041f565b80601f01602080910402602001604051908101604052809291908181526020018280546101719061041f565b80156101bc5780601f10610193576101008083540402835291602001916101bc565b820191905f5260205f20905b81548152906001019060200180831161019f57829003601f168201915b505050505081565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156101fb5780820151818401526020810190506101e0565b5f8484015250505050565b5f601f19601f8301169050919050565b5f610220826101c4565b61022a81856101ce565b935061023a8185602086016101de565b61024381610206565b840191505092915050565b5f6020820190508181035f8301526102668184610216565b905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6102bd82610206565b810181811067ffffffffffffffff821117156102dc576102db610287565b5b80604052505050565b5f6102ee61026e565b90506102fa82826102b4565b919050565b5f67ffffffffffffffff82111561031957610318610287565b5b61032282610206565b9050602081019050919050565b828183375f83830152505050565b5f61034f61034a846102ff565b6102e5565b90508281526020810184848401111561036b5761036a610283565b5b61037684828561032f565b509392505050565b5f82601f8301126103925761039161027f565b5b81356103a284826020860161033d565b91505092915050565b5f602082840312156103c0576103bf610277565b5b5f82013567ffffffffffffffff8111156103dd576103dc61027b565b5b6103e98482850161037e565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061043657607f821691505b602082108103610449576104486103f2565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026104ab7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610470565b6104b58683610470565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f6104f96104f46104ef846104cd565b6104d6565b6104cd565b9050919050565b5f819050919050565b610512836104df565b61052661051e82610500565b84845461047c565b825550505050565b5f90565b61053a61052e565b610545818484610509565b505050565b5b818110156105685761055d5f82610532565b60018101905061054b565b5050565b601f8211156105ad5761057e8161044f565b61058784610461565b81016020851015610596578190505b6105aa6105a285610461565b83018261054a565b50505b505050565b5f82821c905092915050565b5f6105cd5f19846008026105b2565b1980831691505092915050565b5f6105e583836105be565b9150826002028217905092915050565b6105fe826101c4565b67ffffffffffffffff81111561061757610616610287565b5b610621825461041f565b61062c82828561056c565b5f60209050601f83116001811461065d575f841561064b578287015190505b61065585826105da565b8655506106bc565b601f19841661066b8661044f565b5f5b828110156106925784890151825560018201915060208501945060208101905061066d565b868310156106af57848901516106ab601f8916826105be565b8355505b6001600288020188555050505b50505050505056fea26469706673582212208f91e818e90fa22286475276422cae0309f56e78fd9145102fe0b311f33cb01064736f6c63430008170033",
+      "metadata": "{\"compiler\":{\"version\":\"0.8.23+commit.f704f362\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"thing\",\"type\":\"string\"},{\"internalType\":\"bool\",\"name\":\"yesOrNo\",\"type\":\"bool\"}],\"internalType\":\"struct ConstructorWithStructArgs.Items\",\"name\":\"items\",\"type\":\"tuple\"}],\"internalType\":\"struct ConstructorWithStructArgs.Config\",\"name\":\"config\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"}],\"name\":\"setName\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"thing\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"pypechain/test/deployment/contracts/ConstructorWithStructArgs.sol\":\"ConstructorWithStructArgs\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"pypechain/test/deployment/contracts/ConstructorWithStructArgs.sol\":{\"keccak256\":\"0xf4cc669add30f1d595304fab087dfa3288be7d19386d06e6701f43d4bee3b163\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://06be5bb6c869f7672035a8e3a4f0fd5f43041d8c201c84e890b5f4f2277e581b\",\"dweb:/ipfs/QmS9btSJcFhyMmaKoBPZ48YqWogcSxRRA5JoDRtFhTP3xM\"]}},\"version\":1}"
     }
   },
   "version": "0.8.23+commit.f704f362.Darwin.appleclang"
diff --git a/pypechain/test/deployment/abis/NoConstructor.json b/pypechain/test/deployment/abis/NoConstructor.json
index 68decd79..dd5807c5 100644
--- a/pypechain/test/deployment/abis/NoConstructor.json
+++ b/pypechain/test/deployment/abis/NoConstructor.json
@@ -29,8 +29,8 @@
           "type": "function"
         }
       ],
-      "bin": "60806040526040518060400160405280600781526020017f64656661756c74000000000000000000000000000000000000000000000000008152505f9081620000499190620002c1565b5034801562000056575f80fd5b50620003a5565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680620000d957607f821691505b602082108103620000ef57620000ee62000094565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302620001537fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000116565b6200015f868362000116565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f620001a9620001a36200019d8462000177565b62000180565b62000177565b9050919050565b5f819050919050565b620001c48362000189565b620001dc620001d382620001b0565b84845462000122565b825550505050565b5f90565b620001f2620001e4565b620001ff818484620001b9565b505050565b5b8181101562000226576200021a5f82620001e8565b60018101905062000205565b5050565b601f82111562000275576200023f81620000f5565b6200024a8462000107565b810160208510156200025a578190505b62000272620002698562000107565b83018262000204565b50505b505050565b5f82821c905092915050565b5f620002975f19846008026200027a565b1980831691505092915050565b5f620002b1838362000286565b9150826002028217905092915050565b620002cc826200005d565b67ffffffffffffffff811115620002e857620002e762000067565b5b620002f48254620000c1565b620003018282856200022a565b5f60209050601f83116001811462000337575f841562000322578287015190505b6200032e8582620002a4565b8655506200039d565b601f1984166200034786620000f5565b5f5b82811015620003705784890151825560018201915060208501945060208101905062000349565b868310156200039057848901516200038c601f89168262000286565b8355505b6001600288020188555050505b505050505050565b61064580620003b35f395ff3fe608060405234801561000f575f80fd5b5060043610610034575f3560e01c806306fdde0314610038578063c47f002714610056575b5f80fd5b610040610072565b60405161004d9190610199565b60405180910390f35b610070600480360381019061006b91906102f6565b6100fd565b005b5f805461007e9061036a565b80601f01602080910402602001604051908101604052809291908181526020018280546100aa9061036a565b80156100f55780601f106100cc576101008083540402835291602001916100f5565b820191905f5260205f20905b8154815290600101906020018083116100d857829003601f168201915b505050505081565b805f908161010b9190610540565b5050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561014657808201518184015260208101905061012b565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61016b8261010f565b6101758185610119565b9350610185818560208601610129565b61018e81610151565b840191505092915050565b5f6020820190508181035f8301526101b18184610161565b905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61020882610151565b810181811067ffffffffffffffff82111715610227576102266101d2565b5b80604052505050565b5f6102396101b9565b905061024582826101ff565b919050565b5f67ffffffffffffffff821115610264576102636101d2565b5b61026d82610151565b9050602081019050919050565b828183375f83830152505050565b5f61029a6102958461024a565b610230565b9050828152602081018484840111156102b6576102b56101ce565b5b6102c184828561027a565b509392505050565b5f82601f8301126102dd576102dc6101ca565b5b81356102ed848260208601610288565b91505092915050565b5f6020828403121561030b5761030a6101c2565b5b5f82013567ffffffffffffffff811115610328576103276101c6565b5b610334848285016102c9565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061038157607f821691505b6020821081036103945761039361033d565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026103f67fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826103bb565b61040086836103bb565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f61044461043f61043a84610418565b610421565b610418565b9050919050565b5f819050919050565b61045d8361042a565b6104716104698261044b565b8484546103c7565b825550505050565b5f90565b610485610479565b610490818484610454565b505050565b5b818110156104b3576104a85f8261047d565b600181019050610496565b5050565b601f8211156104f8576104c98161039a565b6104d2846103ac565b810160208510156104e1578190505b6104f56104ed856103ac565b830182610495565b50505b505050565b5f82821c905092915050565b5f6105185f19846008026104fd565b1980831691505092915050565b5f6105308383610509565b9150826002028217905092915050565b6105498261010f565b67ffffffffffffffff811115610562576105616101d2565b5b61056c825461036a565b6105778282856104b7565b5f60209050601f8311600181146105a8575f8415610596578287015190505b6105a08582610525565b865550610607565b601f1984166105b68661039a565b5f5b828110156105dd578489015182556001820191506020850194506020810190506105b8565b868310156105fa57848901516105f6601f891682610509565b8355505b6001600288020188555050505b50505050505056fea2646970667358221220cfadd75e51d8fff115b0836c319f8f4b0eaaf4a241fd5e01f4c7967d1978025164736f6c63430008170033",
-      "metadata": "{\"compiler\":{\"version\":\"0.8.23+commit.f704f362\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"}],\"name\":\"setName\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"pypechain/test/deployment/contracts/NoConstructor.sol\":\"NoConstructor\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"pypechain/test/deployment/contracts/NoConstructor.sol\":{\"keccak256\":\"0x8c77894689dd8c6eab1aa224b9472e0e6cbf35bdaa5303874a0f20114058dee4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://827bbbbb21ff1e1aabd359a6e5fb5f27659025b6722ad46529ffce91df429162\",\"dweb:/ipfs/QmaVTPr6KrQ6ttUsPoNqmNcykhgV8h5V8gprNjfP3Xw2cf\"]}},\"version\":1}"
+      "bin": "60806040526040518060400160405280600781526020017f64656661756c74000000000000000000000000000000000000000000000000008152505f9081620000499190620002c1565b5034801562000056575f80fd5b50620003a5565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680620000d957607f821691505b602082108103620000ef57620000ee62000094565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302620001537fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000116565b6200015f868362000116565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f620001a9620001a36200019d8462000177565b62000180565b62000177565b9050919050565b5f819050919050565b620001c48362000189565b620001dc620001d382620001b0565b84845462000122565b825550505050565b5f90565b620001f2620001e4565b620001ff818484620001b9565b505050565b5b8181101562000226576200021a5f82620001e8565b60018101905062000205565b5050565b601f82111562000275576200023f81620000f5565b6200024a8462000107565b810160208510156200025a578190505b62000272620002698562000107565b83018262000204565b50505b505050565b5f82821c905092915050565b5f620002975f19846008026200027a565b1980831691505092915050565b5f620002b1838362000286565b9150826002028217905092915050565b620002cc826200005d565b67ffffffffffffffff811115620002e857620002e762000067565b5b620002f48254620000c1565b620003018282856200022a565b5f60209050601f83116001811462000337575f841562000322578287015190505b6200032e8582620002a4565b8655506200039d565b601f1984166200034786620000f5565b5f5b82811015620003705784890151825560018201915060208501945060208101905062000349565b868310156200039057848901516200038c601f89168262000286565b8355505b6001600288020188555050505b505050505050565b61064580620003b35f395ff3fe608060405234801561000f575f80fd5b5060043610610034575f3560e01c806306fdde0314610038578063c47f002714610056575b5f80fd5b610040610072565b60405161004d9190610199565b60405180910390f35b610070600480360381019061006b91906102f6565b6100fd565b005b5f805461007e9061036a565b80601f01602080910402602001604051908101604052809291908181526020018280546100aa9061036a565b80156100f55780601f106100cc576101008083540402835291602001916100f5565b820191905f5260205f20905b8154815290600101906020018083116100d857829003601f168201915b505050505081565b805f908161010b9190610540565b5050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561014657808201518184015260208101905061012b565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61016b8261010f565b6101758185610119565b9350610185818560208601610129565b61018e81610151565b840191505092915050565b5f6020820190508181035f8301526101b18184610161565b905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61020882610151565b810181811067ffffffffffffffff82111715610227576102266101d2565b5b80604052505050565b5f6102396101b9565b905061024582826101ff565b919050565b5f67ffffffffffffffff821115610264576102636101d2565b5b61026d82610151565b9050602081019050919050565b828183375f83830152505050565b5f61029a6102958461024a565b610230565b9050828152602081018484840111156102b6576102b56101ce565b5b6102c184828561027a565b509392505050565b5f82601f8301126102dd576102dc6101ca565b5b81356102ed848260208601610288565b91505092915050565b5f6020828403121561030b5761030a6101c2565b5b5f82013567ffffffffffffffff811115610328576103276101c6565b5b610334848285016102c9565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061038157607f821691505b6020821081036103945761039361033d565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026103f67fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826103bb565b61040086836103bb565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f61044461043f61043a84610418565b610421565b610418565b9050919050565b5f819050919050565b61045d8361042a565b6104716104698261044b565b8484546103c7565b825550505050565b5f90565b610485610479565b610490818484610454565b505050565b5b818110156104b3576104a85f8261047d565b600181019050610496565b5050565b601f8211156104f8576104c98161039a565b6104d2846103ac565b810160208510156104e1578190505b6104f56104ed856103ac565b830182610495565b50505b505050565b5f82821c905092915050565b5f6105185f19846008026104fd565b1980831691505092915050565b5f6105308383610509565b9150826002028217905092915050565b6105498261010f565b67ffffffffffffffff811115610562576105616101d2565b5b61056c825461036a565b6105778282856104b7565b5f60209050601f8311600181146105a8575f8415610596578287015190505b6105a08582610525565b865550610607565b601f1984166105b68661039a565b5f5b828110156105dd578489015182556001820191506020850194506020810190506105b8565b868310156105fa57848901516105f6601f891682610509565b8355505b6001600288020188555050505b50505050505056fea2646970667358221220aedb8785bd4b8f4cca5cacdac95ba221992b4f1f1a01b64a1d941bc8ef25de7664736f6c63430008170033",
+      "metadata": "{\"compiler\":{\"version\":\"0.8.23+commit.f704f362\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"}],\"name\":\"setName\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"pypechain/test/deployment/contracts/NoConstructor.sol\":\"NoConstructor\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"pypechain/test/deployment/contracts/NoConstructor.sol\":{\"keccak256\":\"0xbc4c65fd3c8027af0383cb2af4278f34695fbab49963dbb03fe9cde1115d98d3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d429bbec94f0cb4b74df0984aabf760cb98f938b477a8c3fcacaf7efde85b919\",\"dweb:/ipfs/Qmda6fU1yPcK7wgafA6YBww7F5R9nFZ3Pqfa8tnLJ7EUyn\"]}},\"version\":1}"
     }
   },
   "version": "0.8.23+commit.f704f362.Darwin.appleclang"
diff --git a/pypechain/test/deployment/contracts/ConstructorWithArgs.sol b/pypechain/test/deployment/contracts/ConstructorWithArgs.sol
index ccf6b826..bd728461 100644
--- a/pypechain/test/deployment/contracts/ConstructorWithArgs.sol
+++ b/pypechain/test/deployment/contracts/ConstructorWithArgs.sol
@@ -11,4 +11,4 @@ contract ConstructorWithArgs {
     function setName(string memory _name) public {
         name = _name;
     }
-}
\ No newline at end of file
+}
diff --git a/pypechain/test/deployment/contracts/ConstructorWithStructArgs.sol b/pypechain/test/deployment/contracts/ConstructorWithStructArgs.sol
index bbef3f67..9cd3348a 100644
--- a/pypechain/test/deployment/contracts/ConstructorWithStructArgs.sol
+++ b/pypechain/test/deployment/contracts/ConstructorWithStructArgs.sol
@@ -25,4 +25,4 @@ contract ConstructorWithStructArgs {
     function setName(string memory _name) public {
         name = _name;
     }
-}
\ No newline at end of file
+}
diff --git a/pypechain/test/deployment/contracts/NoConstructor.sol b/pypechain/test/deployment/contracts/NoConstructor.sol
index 87850b5d..6dcaa76a 100644
--- a/pypechain/test/deployment/contracts/NoConstructor.sol
+++ b/pypechain/test/deployment/contracts/NoConstructor.sol
@@ -7,4 +7,4 @@ contract NoConstructor {
     function setName(string memory _name) public {
         name = _name;
     }
-}
\ No newline at end of file
+}
diff --git a/pypechain/test/deployment/types/ConstructorNoArgsContract.py b/pypechain/test/deployment/types/ConstructorNoArgsContract.py
index a5d118ad..cd34d45d 100644
--- a/pypechain/test/deployment/types/ConstructorNoArgsContract.py
+++ b/pypechain/test/deployment/types/ConstructorNoArgsContract.py
@@ -30,14 +30,13 @@
 
 from eth_account.signers.local import LocalAccount
 from eth_typing import ChecksumAddress, HexStr
-from hexbytes import HexBytes
 from typing_extensions import Self
 from web3 import Web3
 from web3.contract.contract import Contract, ContractConstructor, ContractFunction, ContractFunctions
 from web3.exceptions import FallbackNotFound
 from web3.types import ABI, BlockIdentifier, CallOverride, TxParams
 
-from .utilities import dataclass_to_tuple, rename_returned_types
+from .utilities import dataclass_to_tuple, rename_returned_types, try_bytecode_hexbytes
 
 structs = {}
 
@@ -154,7 +153,7 @@ class ConstructorNoArgsContract(Contract):
     """A web3.py Contract class for the ConstructorNoArgs contract."""
 
     abi: ABI = constructornoargs_abi
-    bytecode: bytes = HexBytes(constructornoargs_bytecode)
+    bytecode: bytes | None = try_bytecode_hexbytes(constructornoargs_bytecode, "constructornoargs")
 
     def __init__(self, address: ChecksumAddress | None = None) -> None:
         try:
diff --git a/pypechain/test/deployment/types/ConstructorWithArgsContract.py b/pypechain/test/deployment/types/ConstructorWithArgsContract.py
index 4002fc44..82aa0e25 100644
--- a/pypechain/test/deployment/types/ConstructorWithArgsContract.py
+++ b/pypechain/test/deployment/types/ConstructorWithArgsContract.py
@@ -30,14 +30,13 @@
 
 from eth_account.signers.local import LocalAccount
 from eth_typing import ChecksumAddress, HexStr
-from hexbytes import HexBytes
 from typing_extensions import Self
 from web3 import Web3
 from web3.contract.contract import Contract, ContractConstructor, ContractFunction, ContractFunctions
 from web3.exceptions import FallbackNotFound
 from web3.types import ABI, BlockIdentifier, CallOverride, TxParams
 
-from .utilities import dataclass_to_tuple, rename_returned_types
+from .utilities import dataclass_to_tuple, rename_returned_types, try_bytecode_hexbytes
 
 structs = {}
 
@@ -150,7 +149,7 @@ def __init__(
 )
 # pylint: disable=line-too-long
 constructorwithargs_bytecode = HexStr(
-    "0x608060405234801562000010575f80fd5b5060405162000b9038038062000b908339818101604052810190620000369190620001d3565b805f908162000046919062000459565b50506200053d565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b620000af8262000067565b810181811067ffffffffffffffff82111715620000d157620000d062000077565b5b80604052505050565b5f620000e56200004e565b9050620000f38282620000a4565b919050565b5f67ffffffffffffffff82111562000115576200011462000077565b5b620001208262000067565b9050602081019050919050565b5f5b838110156200014c5780820151818401526020810190506200012f565b5f8484015250505050565b5f6200016d6200016784620000f8565b620000da565b9050828152602081018484840111156200018c576200018b62000063565b5b620001998482856200012d565b509392505050565b5f82601f830112620001b857620001b76200005f565b5b8151620001ca84826020860162000157565b91505092915050565b5f60208284031215620001eb57620001ea62000057565b5b5f82015167ffffffffffffffff8111156200020b576200020a6200005b565b5b6200021984828501620001a1565b91505092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806200027157607f821691505b6020821081036200028757620002866200022c565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302620002eb7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620002ae565b620002f78683620002ae565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f620003416200033b62000335846200030f565b62000318565b6200030f565b9050919050565b5f819050919050565b6200035c8362000321565b620003746200036b8262000348565b848454620002ba565b825550505050565b5f90565b6200038a6200037c565b6200039781848462000351565b505050565b5b81811015620003be57620003b25f8262000380565b6001810190506200039d565b5050565b601f8211156200040d57620003d7816200028d565b620003e2846200029f565b81016020851015620003f2578190505b6200040a62000401856200029f565b8301826200039c565b50505b505050565b5f82821c905092915050565b5f6200042f5f198460080262000412565b1980831691505092915050565b5f6200044983836200041e565b9150826002028217905092915050565b620004648262000222565b67ffffffffffffffff81111562000480576200047f62000077565b5b6200048c825462000259565b62000499828285620003c2565b5f60209050601f831160018114620004cf575f8415620004ba578287015190505b620004c685826200043c565b86555062000535565b601f198416620004df866200028d565b5f5b828110156200050857848901518255600182019150602085019450602081019050620004e1565b8683101562000528578489015162000524601f8916826200041e565b8355505b6001600288020188555050505b505050505050565b610645806200054b5f395ff3fe608060405234801561000f575f80fd5b5060043610610034575f3560e01c806306fdde0314610038578063c47f002714610056575b5f80fd5b610040610072565b60405161004d9190610199565b60405180910390f35b610070600480360381019061006b91906102f6565b6100fd565b005b5f805461007e9061036a565b80601f01602080910402602001604051908101604052809291908181526020018280546100aa9061036a565b80156100f55780601f106100cc576101008083540402835291602001916100f5565b820191905f5260205f20905b8154815290600101906020018083116100d857829003601f168201915b505050505081565b805f908161010b9190610540565b5050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561014657808201518184015260208101905061012b565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61016b8261010f565b6101758185610119565b9350610185818560208601610129565b61018e81610151565b840191505092915050565b5f6020820190508181035f8301526101b18184610161565b905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61020882610151565b810181811067ffffffffffffffff82111715610227576102266101d2565b5b80604052505050565b5f6102396101b9565b905061024582826101ff565b919050565b5f67ffffffffffffffff821115610264576102636101d2565b5b61026d82610151565b9050602081019050919050565b828183375f83830152505050565b5f61029a6102958461024a565b610230565b9050828152602081018484840111156102b6576102b56101ce565b5b6102c184828561027a565b509392505050565b5f82601f8301126102dd576102dc6101ca565b5b81356102ed848260208601610288565b91505092915050565b5f6020828403121561030b5761030a6101c2565b5b5f82013567ffffffffffffffff811115610328576103276101c6565b5b610334848285016102c9565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061038157607f821691505b6020821081036103945761039361033d565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026103f67fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826103bb565b61040086836103bb565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f61044461043f61043a84610418565b610421565b610418565b9050919050565b5f819050919050565b61045d8361042a565b6104716104698261044b565b8484546103c7565b825550505050565b5f90565b610485610479565b610490818484610454565b505050565b5b818110156104b3576104a85f8261047d565b600181019050610496565b5050565b601f8211156104f8576104c98161039a565b6104d2846103ac565b810160208510156104e1578190505b6104f56104ed856103ac565b830182610495565b50505b505050565b5f82821c905092915050565b5f6105185f19846008026104fd565b1980831691505092915050565b5f6105308383610509565b9150826002028217905092915050565b6105498261010f565b67ffffffffffffffff811115610562576105616101d2565b5b61056c825461036a565b6105778282856104b7565b5f60209050601f8311600181146105a8575f8415610596578287015190505b6105a08582610525565b865550610607565b601f1984166105b68661039a565b5f5b828110156105dd578489015182556001820191506020850194506020810190506105b8565b868310156105fa57848901516105f6601f891682610509565b8355505b6001600288020188555050505b50505050505056fea2646970667358221220f8b8631bedf027c6e70b77a9d47c1c9e199924ecc2c864348c766705064dd33864736f6c63430008170033"
+    "0x608060405234801562000010575f80fd5b5060405162000b9038038062000b908339818101604052810190620000369190620001d3565b805f908162000046919062000459565b50506200053d565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b620000af8262000067565b810181811067ffffffffffffffff82111715620000d157620000d062000077565b5b80604052505050565b5f620000e56200004e565b9050620000f38282620000a4565b919050565b5f67ffffffffffffffff82111562000115576200011462000077565b5b620001208262000067565b9050602081019050919050565b5f5b838110156200014c5780820151818401526020810190506200012f565b5f8484015250505050565b5f6200016d6200016784620000f8565b620000da565b9050828152602081018484840111156200018c576200018b62000063565b5b620001998482856200012d565b509392505050565b5f82601f830112620001b857620001b76200005f565b5b8151620001ca84826020860162000157565b91505092915050565b5f60208284031215620001eb57620001ea62000057565b5b5f82015167ffffffffffffffff8111156200020b576200020a6200005b565b5b6200021984828501620001a1565b91505092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806200027157607f821691505b6020821081036200028757620002866200022c565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302620002eb7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620002ae565b620002f78683620002ae565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f620003416200033b62000335846200030f565b62000318565b6200030f565b9050919050565b5f819050919050565b6200035c8362000321565b620003746200036b8262000348565b848454620002ba565b825550505050565b5f90565b6200038a6200037c565b6200039781848462000351565b505050565b5b81811015620003be57620003b25f8262000380565b6001810190506200039d565b5050565b601f8211156200040d57620003d7816200028d565b620003e2846200029f565b81016020851015620003f2578190505b6200040a62000401856200029f565b8301826200039c565b50505b505050565b5f82821c905092915050565b5f6200042f5f198460080262000412565b1980831691505092915050565b5f6200044983836200041e565b9150826002028217905092915050565b620004648262000222565b67ffffffffffffffff81111562000480576200047f62000077565b5b6200048c825462000259565b62000499828285620003c2565b5f60209050601f831160018114620004cf575f8415620004ba578287015190505b620004c685826200043c565b86555062000535565b601f198416620004df866200028d565b5f5b828110156200050857848901518255600182019150602085019450602081019050620004e1565b8683101562000528578489015162000524601f8916826200041e565b8355505b6001600288020188555050505b505050505050565b610645806200054b5f395ff3fe608060405234801561000f575f80fd5b5060043610610034575f3560e01c806306fdde0314610038578063c47f002714610056575b5f80fd5b610040610072565b60405161004d9190610199565b60405180910390f35b610070600480360381019061006b91906102f6565b6100fd565b005b5f805461007e9061036a565b80601f01602080910402602001604051908101604052809291908181526020018280546100aa9061036a565b80156100f55780601f106100cc576101008083540402835291602001916100f5565b820191905f5260205f20905b8154815290600101906020018083116100d857829003601f168201915b505050505081565b805f908161010b9190610540565b5050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561014657808201518184015260208101905061012b565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61016b8261010f565b6101758185610119565b9350610185818560208601610129565b61018e81610151565b840191505092915050565b5f6020820190508181035f8301526101b18184610161565b905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61020882610151565b810181811067ffffffffffffffff82111715610227576102266101d2565b5b80604052505050565b5f6102396101b9565b905061024582826101ff565b919050565b5f67ffffffffffffffff821115610264576102636101d2565b5b61026d82610151565b9050602081019050919050565b828183375f83830152505050565b5f61029a6102958461024a565b610230565b9050828152602081018484840111156102b6576102b56101ce565b5b6102c184828561027a565b509392505050565b5f82601f8301126102dd576102dc6101ca565b5b81356102ed848260208601610288565b91505092915050565b5f6020828403121561030b5761030a6101c2565b5b5f82013567ffffffffffffffff811115610328576103276101c6565b5b610334848285016102c9565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061038157607f821691505b6020821081036103945761039361033d565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026103f67fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826103bb565b61040086836103bb565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f61044461043f61043a84610418565b610421565b610418565b9050919050565b5f819050919050565b61045d8361042a565b6104716104698261044b565b8484546103c7565b825550505050565b5f90565b610485610479565b610490818484610454565b505050565b5b818110156104b3576104a85f8261047d565b600181019050610496565b5050565b601f8211156104f8576104c98161039a565b6104d2846103ac565b810160208510156104e1578190505b6104f56104ed856103ac565b830182610495565b50505b505050565b5f82821c905092915050565b5f6105185f19846008026104fd565b1980831691505092915050565b5f6105308383610509565b9150826002028217905092915050565b6105498261010f565b67ffffffffffffffff811115610562576105616101d2565b5b61056c825461036a565b6105778282856104b7565b5f60209050601f8311600181146105a8575f8415610596578287015190505b6105a08582610525565b865550610607565b601f1984166105b68661039a565b5f5b828110156105dd578489015182556001820191506020850194506020810190506105b8565b868310156105fa57848901516105f6601f891682610509565b8355505b6001600288020188555050505b50505050505056fea26469706673582212203e37f92b68827db766a4e600bab4296eda8355c57b9a016e16f7bb38134f381164736f6c63430008170033"
 )
 
 
@@ -158,7 +157,7 @@ class ConstructorWithArgsContract(Contract):
     """A web3.py Contract class for the ConstructorWithArgs contract."""
 
     abi: ABI = constructorwithargs_abi
-    bytecode: bytes = HexBytes(constructorwithargs_bytecode)
+    bytecode: bytes | None = try_bytecode_hexbytes(constructorwithargs_bytecode, "constructorwithargs")
 
     def __init__(self, address: ChecksumAddress | None = None) -> None:
         try:
diff --git a/pypechain/test/deployment/types/ConstructorWithStructArgsContract.py b/pypechain/test/deployment/types/ConstructorWithStructArgsContract.py
index dafb203a..daebd9ff 100644
--- a/pypechain/test/deployment/types/ConstructorWithStructArgsContract.py
+++ b/pypechain/test/deployment/types/ConstructorWithStructArgsContract.py
@@ -30,7 +30,6 @@
 
 from eth_account.signers.local import LocalAccount
 from eth_typing import ChecksumAddress, HexStr
-from hexbytes import HexBytes
 from typing_extensions import Self
 from web3 import Web3
 from web3.contract.contract import Contract, ContractConstructor, ContractFunction, ContractFunctions
@@ -38,7 +37,7 @@
 from web3.types import ABI, BlockIdentifier, CallOverride, TxParams
 
 from .ConstructorWithStructArgsTypes import Config, Items
-from .utilities import dataclass_to_tuple, rename_returned_types
+from .utilities import dataclass_to_tuple, rename_returned_types, try_bytecode_hexbytes
 
 structs = {
     "Items": Items,
@@ -216,7 +215,7 @@ def __init__(
 )
 # pylint: disable=line-too-long
 constructorwithstructargs_bytecode = HexStr(
-    "0x60806040525f60025f6101000a81548160ff02191690831515021790555034801562000029575f80fd5b5060405162000de638038062000de683398181016040528101906200004f919062000374565b805f01515f9081620000629190620005fa565b5080602001515f0151600190816200007b9190620005fa565b5080602001516020015160025f6101000a81548160ff02191690831515021790555050620006de565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6200010182620000b9565b810181811067ffffffffffffffff82111715620001235762000122620000c9565b5b80604052505050565b5f62000137620000a4565b9050620001458282620000f6565b919050565b5f80fd5b5f80fd5b5f80fd5b5f67ffffffffffffffff821115620001735762000172620000c9565b5b6200017e82620000b9565b9050602081019050919050565b5f5b83811015620001aa5780820151818401526020810190506200018d565b5f8484015250505050565b5f620001cb620001c58462000156565b6200012c565b905082815260208101848484011115620001ea57620001e962000152565b5b620001f78482856200018b565b509392505050565b5f82601f8301126200021657620002156200014e565b5b815162000228848260208601620001b5565b91505092915050565b5f8115159050919050565b620002478162000231565b811462000252575f80fd5b50565b5f8151905062000265816200023c565b92915050565b5f60408284031215620002835762000282620000b5565b5b6200028f60406200012c565b90505f82015167ffffffffffffffff811115620002b157620002b06200014a565b5b620002bf84828501620001ff565b5f830152506020620002d48482850162000255565b60208301525092915050565b5f60408284031215620002f857620002f7620000b5565b5b6200030460406200012c565b90505f82015167ffffffffffffffff8111156200032657620003256200014a565b5b6200033484828501620001ff565b5f83015250602082015167ffffffffffffffff8111156200035a57620003596200014a565b5b62000368848285016200026b565b60208301525092915050565b5f602082840312156200038c576200038b620000ad565b5b5f82015167ffffffffffffffff811115620003ac57620003ab620000b1565b5b620003ba84828501620002e0565b91505092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806200041257607f821691505b602082108103620004285762000427620003cd565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026200048c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200044f565b6200049886836200044f565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f620004e2620004dc620004d684620004b0565b620004b9565b620004b0565b9050919050565b5f819050919050565b620004fd83620004c2565b620005156200050c82620004e9565b8484546200045b565b825550505050565b5f90565b6200052b6200051d565b62000538818484620004f2565b505050565b5b818110156200055f57620005535f8262000521565b6001810190506200053e565b5050565b601f821115620005ae5762000578816200042e565b620005838462000440565b8101602085101562000593578190505b620005ab620005a28562000440565b8301826200053d565b50505b505050565b5f82821c905092915050565b5f620005d05f1984600802620005b3565b1980831691505092915050565b5f620005ea8383620005bf565b9150826002028217905092915050565b6200060582620003c3565b67ffffffffffffffff811115620006215762000620620000c9565b5b6200062d8254620003fa565b6200063a82828562000563565b5f60209050601f83116001811462000670575f84156200065b578287015190505b620006678582620005dd565b865550620006d6565b601f19841662000680866200042e565b5f5b82811015620006a95784890151825560018201915060208501945060208101905062000682565b86831015620006c95784890151620006c5601f891682620005bf565b8355505b6001600288020188555050505b505050505050565b6106fa80620006ec5f395ff3fe608060405234801561000f575f80fd5b506004361061003f575f3560e01c806306fdde0314610043578063c47f002714610061578063c55e90fe1461007d575b5f80fd5b61004b61009b565b604051610058919061024e565b60405180910390f35b61007b600480360381019061007691906103ab565b610126565b005b610085610138565b604051610092919061024e565b60405180910390f35b5f80546100a79061041f565b80601f01602080910402602001604051908101604052809291908181526020018280546100d39061041f565b801561011e5780601f106100f55761010080835404028352916020019161011e565b820191905f5260205f20905b81548152906001019060200180831161010157829003601f168201915b505050505081565b805f908161013491906105f5565b5050565b600180546101459061041f565b80601f01602080910402602001604051908101604052809291908181526020018280546101719061041f565b80156101bc5780601f10610193576101008083540402835291602001916101bc565b820191905f5260205f20905b81548152906001019060200180831161019f57829003601f168201915b505050505081565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156101fb5780820151818401526020810190506101e0565b5f8484015250505050565b5f601f19601f8301169050919050565b5f610220826101c4565b61022a81856101ce565b935061023a8185602086016101de565b61024381610206565b840191505092915050565b5f6020820190508181035f8301526102668184610216565b905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6102bd82610206565b810181811067ffffffffffffffff821117156102dc576102db610287565b5b80604052505050565b5f6102ee61026e565b90506102fa82826102b4565b919050565b5f67ffffffffffffffff82111561031957610318610287565b5b61032282610206565b9050602081019050919050565b828183375f83830152505050565b5f61034f61034a846102ff565b6102e5565b90508281526020810184848401111561036b5761036a610283565b5b61037684828561032f565b509392505050565b5f82601f8301126103925761039161027f565b5b81356103a284826020860161033d565b91505092915050565b5f602082840312156103c0576103bf610277565b5b5f82013567ffffffffffffffff8111156103dd576103dc61027b565b5b6103e98482850161037e565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061043657607f821691505b602082108103610449576104486103f2565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026104ab7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610470565b6104b58683610470565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f6104f96104f46104ef846104cd565b6104d6565b6104cd565b9050919050565b5f819050919050565b610512836104df565b61052661051e82610500565b84845461047c565b825550505050565b5f90565b61053a61052e565b610545818484610509565b505050565b5b818110156105685761055d5f82610532565b60018101905061054b565b5050565b601f8211156105ad5761057e8161044f565b61058784610461565b81016020851015610596578190505b6105aa6105a285610461565b83018261054a565b50505b505050565b5f82821c905092915050565b5f6105cd5f19846008026105b2565b1980831691505092915050565b5f6105e583836105be565b9150826002028217905092915050565b6105fe826101c4565b67ffffffffffffffff81111561061757610616610287565b5b610621825461041f565b61062c82828561056c565b5f60209050601f83116001811461065d575f841561064b578287015190505b61065585826105da565b8655506106bc565b601f19841661066b8661044f565b5f5b828110156106925784890151825560018201915060208501945060208101905061066d565b868310156106af57848901516106ab601f8916826105be565b8355505b6001600288020188555050505b50505050505056fea264697066735822122040dfe563f0448bd3b11ad7007fa7d74af796bb4705e61d909bf339aebd6b747b64736f6c63430008170033"
+    "0x60806040525f60025f6101000a81548160ff02191690831515021790555034801562000029575f80fd5b5060405162000de638038062000de683398181016040528101906200004f919062000374565b805f01515f9081620000629190620005fa565b5080602001515f0151600190816200007b9190620005fa565b5080602001516020015160025f6101000a81548160ff02191690831515021790555050620006de565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6200010182620000b9565b810181811067ffffffffffffffff82111715620001235762000122620000c9565b5b80604052505050565b5f62000137620000a4565b9050620001458282620000f6565b919050565b5f80fd5b5f80fd5b5f80fd5b5f67ffffffffffffffff821115620001735762000172620000c9565b5b6200017e82620000b9565b9050602081019050919050565b5f5b83811015620001aa5780820151818401526020810190506200018d565b5f8484015250505050565b5f620001cb620001c58462000156565b6200012c565b905082815260208101848484011115620001ea57620001e962000152565b5b620001f78482856200018b565b509392505050565b5f82601f8301126200021657620002156200014e565b5b815162000228848260208601620001b5565b91505092915050565b5f8115159050919050565b620002478162000231565b811462000252575f80fd5b50565b5f8151905062000265816200023c565b92915050565b5f60408284031215620002835762000282620000b5565b5b6200028f60406200012c565b90505f82015167ffffffffffffffff811115620002b157620002b06200014a565b5b620002bf84828501620001ff565b5f830152506020620002d48482850162000255565b60208301525092915050565b5f60408284031215620002f857620002f7620000b5565b5b6200030460406200012c565b90505f82015167ffffffffffffffff8111156200032657620003256200014a565b5b6200033484828501620001ff565b5f83015250602082015167ffffffffffffffff8111156200035a57620003596200014a565b5b62000368848285016200026b565b60208301525092915050565b5f602082840312156200038c576200038b620000ad565b5b5f82015167ffffffffffffffff811115620003ac57620003ab620000b1565b5b620003ba84828501620002e0565b91505092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806200041257607f821691505b602082108103620004285762000427620003cd565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026200048c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200044f565b6200049886836200044f565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f620004e2620004dc620004d684620004b0565b620004b9565b620004b0565b9050919050565b5f819050919050565b620004fd83620004c2565b620005156200050c82620004e9565b8484546200045b565b825550505050565b5f90565b6200052b6200051d565b62000538818484620004f2565b505050565b5b818110156200055f57620005535f8262000521565b6001810190506200053e565b5050565b601f821115620005ae5762000578816200042e565b620005838462000440565b8101602085101562000593578190505b620005ab620005a28562000440565b8301826200053d565b50505b505050565b5f82821c905092915050565b5f620005d05f1984600802620005b3565b1980831691505092915050565b5f620005ea8383620005bf565b9150826002028217905092915050565b6200060582620003c3565b67ffffffffffffffff811115620006215762000620620000c9565b5b6200062d8254620003fa565b6200063a82828562000563565b5f60209050601f83116001811462000670575f84156200065b578287015190505b620006678582620005dd565b865550620006d6565b601f19841662000680866200042e565b5f5b82811015620006a95784890151825560018201915060208501945060208101905062000682565b86831015620006c95784890151620006c5601f891682620005bf565b8355505b6001600288020188555050505b505050505050565b6106fa80620006ec5f395ff3fe608060405234801561000f575f80fd5b506004361061003f575f3560e01c806306fdde0314610043578063c47f002714610061578063c55e90fe1461007d575b5f80fd5b61004b61009b565b604051610058919061024e565b60405180910390f35b61007b600480360381019061007691906103ab565b610126565b005b610085610138565b604051610092919061024e565b60405180910390f35b5f80546100a79061041f565b80601f01602080910402602001604051908101604052809291908181526020018280546100d39061041f565b801561011e5780601f106100f55761010080835404028352916020019161011e565b820191905f5260205f20905b81548152906001019060200180831161010157829003601f168201915b505050505081565b805f908161013491906105f5565b5050565b600180546101459061041f565b80601f01602080910402602001604051908101604052809291908181526020018280546101719061041f565b80156101bc5780601f10610193576101008083540402835291602001916101bc565b820191905f5260205f20905b81548152906001019060200180831161019f57829003601f168201915b505050505081565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156101fb5780820151818401526020810190506101e0565b5f8484015250505050565b5f601f19601f8301169050919050565b5f610220826101c4565b61022a81856101ce565b935061023a8185602086016101de565b61024381610206565b840191505092915050565b5f6020820190508181035f8301526102668184610216565b905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6102bd82610206565b810181811067ffffffffffffffff821117156102dc576102db610287565b5b80604052505050565b5f6102ee61026e565b90506102fa82826102b4565b919050565b5f67ffffffffffffffff82111561031957610318610287565b5b61032282610206565b9050602081019050919050565b828183375f83830152505050565b5f61034f61034a846102ff565b6102e5565b90508281526020810184848401111561036b5761036a610283565b5b61037684828561032f565b509392505050565b5f82601f8301126103925761039161027f565b5b81356103a284826020860161033d565b91505092915050565b5f602082840312156103c0576103bf610277565b5b5f82013567ffffffffffffffff8111156103dd576103dc61027b565b5b6103e98482850161037e565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061043657607f821691505b602082108103610449576104486103f2565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026104ab7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610470565b6104b58683610470565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f6104f96104f46104ef846104cd565b6104d6565b6104cd565b9050919050565b5f819050919050565b610512836104df565b61052661051e82610500565b84845461047c565b825550505050565b5f90565b61053a61052e565b610545818484610509565b505050565b5b818110156105685761055d5f82610532565b60018101905061054b565b5050565b601f8211156105ad5761057e8161044f565b61058784610461565b81016020851015610596578190505b6105aa6105a285610461565b83018261054a565b50505b505050565b5f82821c905092915050565b5f6105cd5f19846008026105b2565b1980831691505092915050565b5f6105e583836105be565b9150826002028217905092915050565b6105fe826101c4565b67ffffffffffffffff81111561061757610616610287565b5b610621825461041f565b61062c82828561056c565b5f60209050601f83116001811461065d575f841561064b578287015190505b61065585826105da565b8655506106bc565b601f19841661066b8661044f565b5f5b828110156106925784890151825560018201915060208501945060208101905061066d565b868310156106af57848901516106ab601f8916826105be565b8355505b6001600288020188555050505b50505050505056fea26469706673582212208f91e818e90fa22286475276422cae0309f56e78fd9145102fe0b311f33cb01064736f6c63430008170033"
 )
 
 
@@ -224,7 +223,7 @@ class ConstructorWithStructArgsContract(Contract):
     """A web3.py Contract class for the ConstructorWithStructArgs contract."""
 
     abi: ABI = constructorwithstructargs_abi
-    bytecode: bytes = HexBytes(constructorwithstructargs_bytecode)
+    bytecode: bytes | None = try_bytecode_hexbytes(constructorwithstructargs_bytecode, "constructorwithstructargs")
 
     def __init__(self, address: ChecksumAddress | None = None) -> None:
         try:
diff --git a/pypechain/test/deployment/types/NoConstructorContract.py b/pypechain/test/deployment/types/NoConstructorContract.py
index a0b147c3..11a4fe8f 100644
--- a/pypechain/test/deployment/types/NoConstructorContract.py
+++ b/pypechain/test/deployment/types/NoConstructorContract.py
@@ -30,14 +30,13 @@
 
 from eth_account.signers.local import LocalAccount
 from eth_typing import ChecksumAddress, HexStr
-from hexbytes import HexBytes
 from typing_extensions import Self
 from web3 import Web3
 from web3.contract.contract import Contract, ContractConstructor, ContractFunction, ContractFunctions
 from web3.exceptions import FallbackNotFound
 from web3.types import ABI, BlockIdentifier, CallOverride, TxParams
 
-from .utilities import dataclass_to_tuple, rename_returned_types
+from .utilities import dataclass_to_tuple, rename_returned_types, try_bytecode_hexbytes
 
 structs = {}
 
@@ -145,7 +144,7 @@ def __init__(
 )
 # pylint: disable=line-too-long
 noconstructor_bytecode = HexStr(
-    "0x60806040526040518060400160405280600781526020017f64656661756c74000000000000000000000000000000000000000000000000008152505f9081620000499190620002c1565b5034801562000056575f80fd5b50620003a5565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680620000d957607f821691505b602082108103620000ef57620000ee62000094565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302620001537fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000116565b6200015f868362000116565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f620001a9620001a36200019d8462000177565b62000180565b62000177565b9050919050565b5f819050919050565b620001c48362000189565b620001dc620001d382620001b0565b84845462000122565b825550505050565b5f90565b620001f2620001e4565b620001ff818484620001b9565b505050565b5b8181101562000226576200021a5f82620001e8565b60018101905062000205565b5050565b601f82111562000275576200023f81620000f5565b6200024a8462000107565b810160208510156200025a578190505b62000272620002698562000107565b83018262000204565b50505b505050565b5f82821c905092915050565b5f620002975f19846008026200027a565b1980831691505092915050565b5f620002b1838362000286565b9150826002028217905092915050565b620002cc826200005d565b67ffffffffffffffff811115620002e857620002e762000067565b5b620002f48254620000c1565b620003018282856200022a565b5f60209050601f83116001811462000337575f841562000322578287015190505b6200032e8582620002a4565b8655506200039d565b601f1984166200034786620000f5565b5f5b82811015620003705784890151825560018201915060208501945060208101905062000349565b868310156200039057848901516200038c601f89168262000286565b8355505b6001600288020188555050505b505050505050565b61064580620003b35f395ff3fe608060405234801561000f575f80fd5b5060043610610034575f3560e01c806306fdde0314610038578063c47f002714610056575b5f80fd5b610040610072565b60405161004d9190610199565b60405180910390f35b610070600480360381019061006b91906102f6565b6100fd565b005b5f805461007e9061036a565b80601f01602080910402602001604051908101604052809291908181526020018280546100aa9061036a565b80156100f55780601f106100cc576101008083540402835291602001916100f5565b820191905f5260205f20905b8154815290600101906020018083116100d857829003601f168201915b505050505081565b805f908161010b9190610540565b5050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561014657808201518184015260208101905061012b565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61016b8261010f565b6101758185610119565b9350610185818560208601610129565b61018e81610151565b840191505092915050565b5f6020820190508181035f8301526101b18184610161565b905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61020882610151565b810181811067ffffffffffffffff82111715610227576102266101d2565b5b80604052505050565b5f6102396101b9565b905061024582826101ff565b919050565b5f67ffffffffffffffff821115610264576102636101d2565b5b61026d82610151565b9050602081019050919050565b828183375f83830152505050565b5f61029a6102958461024a565b610230565b9050828152602081018484840111156102b6576102b56101ce565b5b6102c184828561027a565b509392505050565b5f82601f8301126102dd576102dc6101ca565b5b81356102ed848260208601610288565b91505092915050565b5f6020828403121561030b5761030a6101c2565b5b5f82013567ffffffffffffffff811115610328576103276101c6565b5b610334848285016102c9565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061038157607f821691505b6020821081036103945761039361033d565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026103f67fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826103bb565b61040086836103bb565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f61044461043f61043a84610418565b610421565b610418565b9050919050565b5f819050919050565b61045d8361042a565b6104716104698261044b565b8484546103c7565b825550505050565b5f90565b610485610479565b610490818484610454565b505050565b5b818110156104b3576104a85f8261047d565b600181019050610496565b5050565b601f8211156104f8576104c98161039a565b6104d2846103ac565b810160208510156104e1578190505b6104f56104ed856103ac565b830182610495565b50505b505050565b5f82821c905092915050565b5f6105185f19846008026104fd565b1980831691505092915050565b5f6105308383610509565b9150826002028217905092915050565b6105498261010f565b67ffffffffffffffff811115610562576105616101d2565b5b61056c825461036a565b6105778282856104b7565b5f60209050601f8311600181146105a8575f8415610596578287015190505b6105a08582610525565b865550610607565b601f1984166105b68661039a565b5f5b828110156105dd578489015182556001820191506020850194506020810190506105b8565b868310156105fa57848901516105f6601f891682610509565b8355505b6001600288020188555050505b50505050505056fea2646970667358221220cfadd75e51d8fff115b0836c319f8f4b0eaaf4a241fd5e01f4c7967d1978025164736f6c63430008170033"
+    "0x60806040526040518060400160405280600781526020017f64656661756c74000000000000000000000000000000000000000000000000008152505f9081620000499190620002c1565b5034801562000056575f80fd5b50620003a5565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680620000d957607f821691505b602082108103620000ef57620000ee62000094565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302620001537fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000116565b6200015f868362000116565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f620001a9620001a36200019d8462000177565b62000180565b62000177565b9050919050565b5f819050919050565b620001c48362000189565b620001dc620001d382620001b0565b84845462000122565b825550505050565b5f90565b620001f2620001e4565b620001ff818484620001b9565b505050565b5b8181101562000226576200021a5f82620001e8565b60018101905062000205565b5050565b601f82111562000275576200023f81620000f5565b6200024a8462000107565b810160208510156200025a578190505b62000272620002698562000107565b83018262000204565b50505b505050565b5f82821c905092915050565b5f620002975f19846008026200027a565b1980831691505092915050565b5f620002b1838362000286565b9150826002028217905092915050565b620002cc826200005d565b67ffffffffffffffff811115620002e857620002e762000067565b5b620002f48254620000c1565b620003018282856200022a565b5f60209050601f83116001811462000337575f841562000322578287015190505b6200032e8582620002a4565b8655506200039d565b601f1984166200034786620000f5565b5f5b82811015620003705784890151825560018201915060208501945060208101905062000349565b868310156200039057848901516200038c601f89168262000286565b8355505b6001600288020188555050505b505050505050565b61064580620003b35f395ff3fe608060405234801561000f575f80fd5b5060043610610034575f3560e01c806306fdde0314610038578063c47f002714610056575b5f80fd5b610040610072565b60405161004d9190610199565b60405180910390f35b610070600480360381019061006b91906102f6565b6100fd565b005b5f805461007e9061036a565b80601f01602080910402602001604051908101604052809291908181526020018280546100aa9061036a565b80156100f55780601f106100cc576101008083540402835291602001916100f5565b820191905f5260205f20905b8154815290600101906020018083116100d857829003601f168201915b505050505081565b805f908161010b9190610540565b5050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561014657808201518184015260208101905061012b565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61016b8261010f565b6101758185610119565b9350610185818560208601610129565b61018e81610151565b840191505092915050565b5f6020820190508181035f8301526101b18184610161565b905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61020882610151565b810181811067ffffffffffffffff82111715610227576102266101d2565b5b80604052505050565b5f6102396101b9565b905061024582826101ff565b919050565b5f67ffffffffffffffff821115610264576102636101d2565b5b61026d82610151565b9050602081019050919050565b828183375f83830152505050565b5f61029a6102958461024a565b610230565b9050828152602081018484840111156102b6576102b56101ce565b5b6102c184828561027a565b509392505050565b5f82601f8301126102dd576102dc6101ca565b5b81356102ed848260208601610288565b91505092915050565b5f6020828403121561030b5761030a6101c2565b5b5f82013567ffffffffffffffff811115610328576103276101c6565b5b610334848285016102c9565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061038157607f821691505b6020821081036103945761039361033d565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026103f67fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826103bb565b61040086836103bb565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f61044461043f61043a84610418565b610421565b610418565b9050919050565b5f819050919050565b61045d8361042a565b6104716104698261044b565b8484546103c7565b825550505050565b5f90565b610485610479565b610490818484610454565b505050565b5b818110156104b3576104a85f8261047d565b600181019050610496565b5050565b601f8211156104f8576104c98161039a565b6104d2846103ac565b810160208510156104e1578190505b6104f56104ed856103ac565b830182610495565b50505b505050565b5f82821c905092915050565b5f6105185f19846008026104fd565b1980831691505092915050565b5f6105308383610509565b9150826002028217905092915050565b6105498261010f565b67ffffffffffffffff811115610562576105616101d2565b5b61056c825461036a565b6105778282856104b7565b5f60209050601f8311600181146105a8575f8415610596578287015190505b6105a08582610525565b865550610607565b601f1984166105b68661039a565b5f5b828110156105dd578489015182556001820191506020850194506020810190506105b8565b868310156105fa57848901516105f6601f891682610509565b8355505b6001600288020188555050505b50505050505056fea2646970667358221220aedb8785bd4b8f4cca5cacdac95ba221992b4f1f1a01b64a1d941bc8ef25de7664736f6c63430008170033"
 )
 
 
@@ -153,7 +152,7 @@ class NoConstructorContract(Contract):
     """A web3.py Contract class for the NoConstructor contract."""
 
     abi: ABI = noconstructor_abi
-    bytecode: bytes = HexBytes(noconstructor_bytecode)
+    bytecode: bytes | None = try_bytecode_hexbytes(noconstructor_bytecode, "noconstructor")
 
     def __init__(self, address: ChecksumAddress | None = None) -> None:
         try:
diff --git a/pypechain/test/deployment/types/utilities.py b/pypechain/test/deployment/types/utilities.py
index 00b87d9d..6f8f57c0 100644
--- a/pypechain/test/deployment/types/utilities.py
+++ b/pypechain/test/deployment/types/utilities.py
@@ -6,9 +6,10 @@
 from __future__ import annotations
 
 from dataclasses import fields, is_dataclass
-from typing import Any, Tuple, TypeVar, cast
+from typing import Any, Iterable, Tuple, TypeVar, cast, get_args
 
 from eth_utils.abi import collapse_if_tuple
+from hexbytes import HexBytes
 from web3.types import ABIFunction
 
 T = TypeVar("T")
@@ -23,6 +24,8 @@ def tuple_to_dataclass(cls: type[T], structs: dict[str, Any], tuple_data: Any |
     ----------
     cls: type[T]
         The dataclass type to which the tuple data is to be converted.
+    structs: dict[str, Any]
+        Mapping from a struct name (key) to the run-time type definition (value).
     tuple_data: Any | Tuple[Any, ...]
         A tuple (or nested tuple) of values to convert into a dataclass instance.
 
@@ -102,13 +105,35 @@ def rename_returned_types(
             raw_values = (raw_values,)
 
         # Convert the tuple to the dataclass instance using the utility function
-        converted_values = tuple(
-            tuple_to_dataclass(return_type, structs, value) for return_type, value in zip(return_types, raw_values)
-        )
+        converted_values = []
+        for return_type, value in zip(return_types, raw_values):
+            if type(return_type) == type(list[Any]):  # pylint: disable=unidiomatic-typecheck
+                raise NotImplementedError("Multiple return values of type list[...] is not supported.")
+            converted_values.append(tuple_to_dataclass(return_type, structs, value))
+        converted_values = tuple(converted_values)
 
         return converted_values
 
-    # cover case of single return value
+    # cover case of single return type
+    # single return type is a list of SomeType, aka `list[SomeType]`
+    if type(return_types) == type(list[Any]):  # pylint: disable=unidiomatic-typecheck
+        inner_types = get_args(return_types)
+        # make sure there is only one inner type
+        if len(inner_types) != 1:
+            raise NotImplementedError("Only a single inner type in list[...] is supported")
+        inner_type = inner_types[0]
+        # make sure the type is not also a list
+        if type(inner_type) == type(list[Any]):  # pylint: disable=unidiomatic-typecheck
+            raise NotImplementedError("Type list[list[...]] is not supported.")
+        # type narrowing
+        assert isinstance(raw_values, Iterable)
+        # loop over inner values & convert those to dataclasses
+        converted_value = []
+        for value in raw_values:
+            converted_value.append(tuple_to_dataclass(inner_type, structs, value))
+        return tuple(converted_value)
+
+    # single return type is a standard type or dataclass
     converted_value = tuple_to_dataclass(return_types, structs, raw_values)
     return converted_value
 
@@ -134,3 +159,28 @@ def get_abi_input_types(abi: ABIFunction) -> list[str]:
     if "inputs" not in abi and (abi.get("type") == "fallback" or abi.get("type") == "receive"):
         return []
     return [collapse_if_tuple(cast(dict[str, Any], arg)) for arg in abi.get("inputs", [])]
+
+
+def try_bytecode_hexbytes(in_bytecode: Any, contract_name: str | None = None) -> HexBytes | None:
+    """Attempts to convert bytecode input to HexBytes. Returns None if it fails.
+
+    Parameters
+    ----------
+    in_bytecode : Any
+        The bytecode to attempt to convert to HexBytes
+    contract_name : str | None, optional
+        The name of the contract being deployed. Used for better warning printing.
+
+    Returns
+    -------
+    HexBytes | None
+        The HexBytes if it succeeds, otherwise None
+    """
+    try:
+        return HexBytes(in_bytecode)
+    except Exception as e:  # pylint: disable=broad-except
+        if contract_name is None:
+            print(f"Warning: failed to convert bytecode to HexBytes: {e}")
+        else:
+            print(f"Warning: failed to convert bytecode for {contract_name} to HexBytes: {e}")
+        return None
diff --git a/pypechain/test/errors/abis/Errors.json b/pypechain/test/errors/abis/Errors.json
index 843e83d6..df5ba35c 100644
--- a/pypechain/test/errors/abis/Errors.json
+++ b/pypechain/test/errors/abis/Errors.json
@@ -93,8 +93,8 @@
           "type": "function"
         }
       ],
-      "bin": "608060405234801561000f575f80fd5b506104328061001d5f395ff3fe608060405234801561000f575f80fd5b506004361061003f575f3560e01c806349cbdbf514610043578063a13e7b711461004d578063dc785aeb14610057575b5f80fd5b61004b610061565b005b6100556100ca565b005b61005f6100fc565b005b5f6040518060800160405280600181526020016002815260200160038152602001600481525090505f815f6040517f09b8b9890000000000000000000000000000000000000000000000000000000081526004016100c193929190610234565b60405180910390fd5b6040517fbe0c211000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f60ff6040517f01e3e2f60000000000000000000000000000000000000000000000000000000081526004016101339291906103c2565b60405180910390fd5b5f8115159050919050565b6101508161013c565b82525050565b5f819050919050565b61016881610156565b82525050565b608082015f8201516101825f85018261015f565b506020820151610195602085018261015f565b5060408201516101a8604085018261015f565b5060608201516101bb606085018261015f565b50505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b600481106101ff576101fe6101c1565b5b50565b5f81905061020f826101ee565b919050565b5f61021e82610202565b9050919050565b61022e81610214565b82525050565b5f60c0820190506102475f830186610147565b610254602083018561016e565b61026160a0830184610225565b949350505050565b5f82825260208201905092915050565b7f492077696c6c206e6f7420706c6564676520616c6c656769616e636520746f205f8201527f426172742e20492077696c6c206e6f7420706c6564676520616c6c656769616e60208201527f636520746f20426172742e20492077696c6c206e6f7420706c6564676520616c60408201527f6c656769616e636520746f20426172742e000000000000000000000000000000606082015250565b5f61031f607183610269565b915061032a82610279565b608082019050919050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61035e82610335565b9050919050565b61036e81610354565b82525050565b5f819050919050565b5f60ff82169050919050565b5f819050919050565b5f6103ac6103a76103a284610374565b610389565b61037d565b9050919050565b6103bc81610392565b82525050565b5f6060820190508181035f8301526103d981610313565b90506103e86020830185610365565b6103f560408301846103b3565b939250505056fea2646970667358221220d2ccb335b1907f8c97ee5b43958fd13ff523a48524e48710094939c1728f158b64736f6c63430008170033",
-      "metadata": "{\"compiler\":{\"version\":\"0.8.23+commit.f704f362\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"One\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"trueOrFalse\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"bart\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lisa\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"homer\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"marge\",\"type\":\"uint256\"}],\"internalType\":\"struct Errors.Ages\",\"name\":\"theSimpsons\",\"type\":\"tuple\"},{\"internalType\":\"enum Errors.Simpsons\",\"name\":\"who\",\"type\":\"uint8\"}],\"name\":\"Three\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"message\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"who\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"value\",\"type\":\"uint8\"}],\"name\":\"Two\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"revertWithErrorOne\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"revertWithErrorThree\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"revertWithErrorTwo\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"pypechain/test/errors/contracts/Errors.sol\":\"Errors\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"pypechain/test/errors/contracts/Errors.sol\":{\"keccak256\":\"0x577eaff061dd738d75c5280b9531655f1e99924f76ac490784a4006b25cc30b4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2b39a1bdaffc240ce98baf5c4dc4fd5648e11959727d63e0f986db3b44508355\",\"dweb:/ipfs/QmXLqkC5db1zwf7zmwYQyRAWJgRyV69LDcsQC2cQjLF9fJ\"]}},\"version\":1}"
+      "bin": "608060405234801561000f575f80fd5b506104328061001d5f395ff3fe608060405234801561000f575f80fd5b506004361061003f575f3560e01c806349cbdbf514610043578063a13e7b711461004d578063dc785aeb14610057575b5f80fd5b61004b610061565b005b6100556100ca565b005b61005f6100fc565b005b5f6040518060800160405280600181526020016002815260200160038152602001600481525090505f815f6040517f09b8b9890000000000000000000000000000000000000000000000000000000081526004016100c193929190610234565b60405180910390fd5b6040517fbe0c211000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f60ff6040517f01e3e2f60000000000000000000000000000000000000000000000000000000081526004016101339291906103c2565b60405180910390fd5b5f8115159050919050565b6101508161013c565b82525050565b5f819050919050565b61016881610156565b82525050565b608082015f8201516101825f85018261015f565b506020820151610195602085018261015f565b5060408201516101a8604085018261015f565b5060608201516101bb606085018261015f565b50505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b600481106101ff576101fe6101c1565b5b50565b5f81905061020f826101ee565b919050565b5f61021e82610202565b9050919050565b61022e81610214565b82525050565b5f60c0820190506102475f830186610147565b610254602083018561016e565b61026160a0830184610225565b949350505050565b5f82825260208201905092915050565b7f492077696c6c206e6f7420706c6564676520616c6c656769616e636520746f205f8201527f426172742e20492077696c6c206e6f7420706c6564676520616c6c656769616e60208201527f636520746f20426172742e20492077696c6c206e6f7420706c6564676520616c60408201527f6c656769616e636520746f20426172742e000000000000000000000000000000606082015250565b5f61031f607183610269565b915061032a82610279565b608082019050919050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61035e82610335565b9050919050565b61036e81610354565b82525050565b5f819050919050565b5f60ff82169050919050565b5f819050919050565b5f6103ac6103a76103a284610374565b610389565b61037d565b9050919050565b6103bc81610392565b82525050565b5f6060820190508181035f8301526103d981610313565b90506103e86020830185610365565b6103f560408301846103b3565b939250505056fea2646970667358221220da2f21d893273a47e6194375eb60793b77ecfed19f9f9ac9024565a552b1c5bf64736f6c63430008170033",
+      "metadata": "{\"compiler\":{\"version\":\"0.8.23+commit.f704f362\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"One\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"trueOrFalse\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"bart\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lisa\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"homer\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"marge\",\"type\":\"uint256\"}],\"internalType\":\"struct Errors.Ages\",\"name\":\"theSimpsons\",\"type\":\"tuple\"},{\"internalType\":\"enum Errors.Simpsons\",\"name\":\"who\",\"type\":\"uint8\"}],\"name\":\"Three\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"message\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"who\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"value\",\"type\":\"uint8\"}],\"name\":\"Two\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"revertWithErrorOne\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"revertWithErrorThree\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"revertWithErrorTwo\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"pypechain/test/errors/contracts/Errors.sol\":\"Errors\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"pypechain/test/errors/contracts/Errors.sol\":{\"keccak256\":\"0x030ad57df8b425fc245b26c9bd4952510bb616e861bb199357d2a2881e52844d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://69c5d52eea1d469d61ae3e30c829780b11f4339c96dc8fe210bd01e4d4cfed7c\",\"dweb:/ipfs/QmdMs9nZGHh9vw1o5xAsJrhoUCqcPzBDyYarAHmsoA6mNk\"]}},\"version\":1}"
     }
   },
   "version": "0.8.23+commit.f704f362.Darwin.appleclang"
diff --git a/pypechain/test/errors/contracts/Errors.sol b/pypechain/test/errors/contracts/Errors.sol
index 93debf54..fb96f046 100644
--- a/pypechain/test/errors/contracts/Errors.sol
+++ b/pypechain/test/errors/contracts/Errors.sol
@@ -9,7 +9,12 @@ contract Errors {
         uint256 marge;
     }
 
-    enum Simpsons { BART, LISA, HOMER, MARGE }
+    enum Simpsons {
+        BART,
+        LISA,
+        HOMER,
+        MARGE
+    }
 
     error One();
     error Two(string message, address who, uint8 value);
@@ -20,7 +25,11 @@ contract Errors {
     }
 
     function revertWithErrorTwo() public pure {
-        revert Two("I will not pledge allegiance to Bart. I will not pledge allegiance to Bart. I will not pledge allegiance to Bart.", address(0), 255);
+        revert Two(
+            "I will not pledge allegiance to Bart. I will not pledge allegiance to Bart. I will not pledge allegiance to Bart.",
+            address(0),
+            255
+        );
     }
 
     function revertWithErrorThree() public pure {
diff --git a/pypechain/test/errors/types/ErrorsContract.py b/pypechain/test/errors/types/ErrorsContract.py
index 9eed7f91..2ceb81ec 100644
--- a/pypechain/test/errors/types/ErrorsContract.py
+++ b/pypechain/test/errors/types/ErrorsContract.py
@@ -39,7 +39,7 @@
 from web3.exceptions import FallbackNotFound
 from web3.types import ABI, ABIFunction, BlockIdentifier, CallOverride, TxParams
 
-from .utilities import get_abi_input_types
+from .utilities import get_abi_input_types, try_bytecode_hexbytes
 
 structs = {}
 
@@ -371,7 +371,7 @@ def decode_custom_error(self, data: str) -> tuple[Any, ...]:
 )
 # pylint: disable=line-too-long
 errors_bytecode = HexStr(
-    "0x608060405234801561000f575f80fd5b506104328061001d5f395ff3fe608060405234801561000f575f80fd5b506004361061003f575f3560e01c806349cbdbf514610043578063a13e7b711461004d578063dc785aeb14610057575b5f80fd5b61004b610061565b005b6100556100ca565b005b61005f6100fc565b005b5f6040518060800160405280600181526020016002815260200160038152602001600481525090505f815f6040517f09b8b9890000000000000000000000000000000000000000000000000000000081526004016100c193929190610234565b60405180910390fd5b6040517fbe0c211000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f60ff6040517f01e3e2f60000000000000000000000000000000000000000000000000000000081526004016101339291906103c2565b60405180910390fd5b5f8115159050919050565b6101508161013c565b82525050565b5f819050919050565b61016881610156565b82525050565b608082015f8201516101825f85018261015f565b506020820151610195602085018261015f565b5060408201516101a8604085018261015f565b5060608201516101bb606085018261015f565b50505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b600481106101ff576101fe6101c1565b5b50565b5f81905061020f826101ee565b919050565b5f61021e82610202565b9050919050565b61022e81610214565b82525050565b5f60c0820190506102475f830186610147565b610254602083018561016e565b61026160a0830184610225565b949350505050565b5f82825260208201905092915050565b7f492077696c6c206e6f7420706c6564676520616c6c656769616e636520746f205f8201527f426172742e20492077696c6c206e6f7420706c6564676520616c6c656769616e60208201527f636520746f20426172742e20492077696c6c206e6f7420706c6564676520616c60408201527f6c656769616e636520746f20426172742e000000000000000000000000000000606082015250565b5f61031f607183610269565b915061032a82610279565b608082019050919050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61035e82610335565b9050919050565b61036e81610354565b82525050565b5f819050919050565b5f60ff82169050919050565b5f819050919050565b5f6103ac6103a76103a284610374565b610389565b61037d565b9050919050565b6103bc81610392565b82525050565b5f6060820190508181035f8301526103d981610313565b90506103e86020830185610365565b6103f560408301846103b3565b939250505056fea2646970667358221220d2ccb335b1907f8c97ee5b43958fd13ff523a48524e48710094939c1728f158b64736f6c63430008170033"
+    "0x608060405234801561000f575f80fd5b506104328061001d5f395ff3fe608060405234801561000f575f80fd5b506004361061003f575f3560e01c806349cbdbf514610043578063a13e7b711461004d578063dc785aeb14610057575b5f80fd5b61004b610061565b005b6100556100ca565b005b61005f6100fc565b005b5f6040518060800160405280600181526020016002815260200160038152602001600481525090505f815f6040517f09b8b9890000000000000000000000000000000000000000000000000000000081526004016100c193929190610234565b60405180910390fd5b6040517fbe0c211000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f60ff6040517f01e3e2f60000000000000000000000000000000000000000000000000000000081526004016101339291906103c2565b60405180910390fd5b5f8115159050919050565b6101508161013c565b82525050565b5f819050919050565b61016881610156565b82525050565b608082015f8201516101825f85018261015f565b506020820151610195602085018261015f565b5060408201516101a8604085018261015f565b5060608201516101bb606085018261015f565b50505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b600481106101ff576101fe6101c1565b5b50565b5f81905061020f826101ee565b919050565b5f61021e82610202565b9050919050565b61022e81610214565b82525050565b5f60c0820190506102475f830186610147565b610254602083018561016e565b61026160a0830184610225565b949350505050565b5f82825260208201905092915050565b7f492077696c6c206e6f7420706c6564676520616c6c656769616e636520746f205f8201527f426172742e20492077696c6c206e6f7420706c6564676520616c6c656769616e60208201527f636520746f20426172742e20492077696c6c206e6f7420706c6564676520616c60408201527f6c656769616e636520746f20426172742e000000000000000000000000000000606082015250565b5f61031f607183610269565b915061032a82610279565b608082019050919050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61035e82610335565b9050919050565b61036e81610354565b82525050565b5f819050919050565b5f60ff82169050919050565b5f819050919050565b5f6103ac6103a76103a284610374565b610389565b61037d565b9050919050565b6103bc81610392565b82525050565b5f6060820190508181035f8301526103d981610313565b90506103e86020830185610365565b6103f560408301846103b3565b939250505056fea2646970667358221220da2f21d893273a47e6194375eb60793b77ecfed19f9f9ac9024565a552b1c5bf64736f6c63430008170033"
 )
 
 
@@ -379,7 +379,7 @@ class ErrorsContract(Contract):
     """A web3.py Contract class for the Errors contract."""
 
     abi: ABI = errors_abi
-    bytecode: bytes = HexBytes(errors_bytecode)
+    bytecode: bytes | None = try_bytecode_hexbytes(errors_bytecode, "errors")
 
     def __init__(self, address: ChecksumAddress | None = None) -> None:
         try:
diff --git a/pypechain/test/errors/types/utilities.py b/pypechain/test/errors/types/utilities.py
index 00b87d9d..6f8f57c0 100644
--- a/pypechain/test/errors/types/utilities.py
+++ b/pypechain/test/errors/types/utilities.py
@@ -6,9 +6,10 @@
 from __future__ import annotations
 
 from dataclasses import fields, is_dataclass
-from typing import Any, Tuple, TypeVar, cast
+from typing import Any, Iterable, Tuple, TypeVar, cast, get_args
 
 from eth_utils.abi import collapse_if_tuple
+from hexbytes import HexBytes
 from web3.types import ABIFunction
 
 T = TypeVar("T")
@@ -23,6 +24,8 @@ def tuple_to_dataclass(cls: type[T], structs: dict[str, Any], tuple_data: Any |
     ----------
     cls: type[T]
         The dataclass type to which the tuple data is to be converted.
+    structs: dict[str, Any]
+        Mapping from a struct name (key) to the run-time type definition (value).
     tuple_data: Any | Tuple[Any, ...]
         A tuple (or nested tuple) of values to convert into a dataclass instance.
 
@@ -102,13 +105,35 @@ def rename_returned_types(
             raw_values = (raw_values,)
 
         # Convert the tuple to the dataclass instance using the utility function
-        converted_values = tuple(
-            tuple_to_dataclass(return_type, structs, value) for return_type, value in zip(return_types, raw_values)
-        )
+        converted_values = []
+        for return_type, value in zip(return_types, raw_values):
+            if type(return_type) == type(list[Any]):  # pylint: disable=unidiomatic-typecheck
+                raise NotImplementedError("Multiple return values of type list[...] is not supported.")
+            converted_values.append(tuple_to_dataclass(return_type, structs, value))
+        converted_values = tuple(converted_values)
 
         return converted_values
 
-    # cover case of single return value
+    # cover case of single return type
+    # single return type is a list of SomeType, aka `list[SomeType]`
+    if type(return_types) == type(list[Any]):  # pylint: disable=unidiomatic-typecheck
+        inner_types = get_args(return_types)
+        # make sure there is only one inner type
+        if len(inner_types) != 1:
+            raise NotImplementedError("Only a single inner type in list[...] is supported")
+        inner_type = inner_types[0]
+        # make sure the type is not also a list
+        if type(inner_type) == type(list[Any]):  # pylint: disable=unidiomatic-typecheck
+            raise NotImplementedError("Type list[list[...]] is not supported.")
+        # type narrowing
+        assert isinstance(raw_values, Iterable)
+        # loop over inner values & convert those to dataclasses
+        converted_value = []
+        for value in raw_values:
+            converted_value.append(tuple_to_dataclass(inner_type, structs, value))
+        return tuple(converted_value)
+
+    # single return type is a standard type or dataclass
     converted_value = tuple_to_dataclass(return_types, structs, raw_values)
     return converted_value
 
@@ -134,3 +159,28 @@ def get_abi_input_types(abi: ABIFunction) -> list[str]:
     if "inputs" not in abi and (abi.get("type") == "fallback" or abi.get("type") == "receive"):
         return []
     return [collapse_if_tuple(cast(dict[str, Any], arg)) for arg in abi.get("inputs", [])]
+
+
+def try_bytecode_hexbytes(in_bytecode: Any, contract_name: str | None = None) -> HexBytes | None:
+    """Attempts to convert bytecode input to HexBytes. Returns None if it fails.
+
+    Parameters
+    ----------
+    in_bytecode : Any
+        The bytecode to attempt to convert to HexBytes
+    contract_name : str | None, optional
+        The name of the contract being deployed. Used for better warning printing.
+
+    Returns
+    -------
+    HexBytes | None
+        The HexBytes if it succeeds, otherwise None
+    """
+    try:
+        return HexBytes(in_bytecode)
+    except Exception as e:  # pylint: disable=broad-except
+        if contract_name is None:
+            print(f"Warning: failed to convert bytecode to HexBytes: {e}")
+        else:
+            print(f"Warning: failed to convert bytecode for {contract_name} to HexBytes: {e}")
+        return None
diff --git a/pypechain/test/events/types/EventsContract.py b/pypechain/test/events/types/EventsContract.py
index 15da2813..3bca2aa5 100644
--- a/pypechain/test/events/types/EventsContract.py
+++ b/pypechain/test/events/types/EventsContract.py
@@ -45,7 +45,7 @@
 from web3.exceptions import FallbackNotFound
 from web3.types import ABI, BlockIdentifier, CallOverride, EventData, TxParams
 
-from .utilities import dataclass_to_tuple, rename_returned_types
+from .utilities import dataclass_to_tuple, rename_returned_types, try_bytecode_hexbytes
 
 structs = {}
 
@@ -395,7 +395,7 @@ class EventsContract(Contract):
     """A web3.py Contract class for the Events contract."""
 
     abi: ABI = events_abi
-    bytecode: bytes = HexBytes(events_bytecode)
+    bytecode: bytes | None = try_bytecode_hexbytes(events_bytecode, "events")
 
     def __init__(self, address: ChecksumAddress | None = None) -> None:
         try:
diff --git a/pypechain/test/events/types/utilities.py b/pypechain/test/events/types/utilities.py
index 00b87d9d..6f8f57c0 100644
--- a/pypechain/test/events/types/utilities.py
+++ b/pypechain/test/events/types/utilities.py
@@ -6,9 +6,10 @@
 from __future__ import annotations
 
 from dataclasses import fields, is_dataclass
-from typing import Any, Tuple, TypeVar, cast
+from typing import Any, Iterable, Tuple, TypeVar, cast, get_args
 
 from eth_utils.abi import collapse_if_tuple
+from hexbytes import HexBytes
 from web3.types import ABIFunction
 
 T = TypeVar("T")
@@ -23,6 +24,8 @@ def tuple_to_dataclass(cls: type[T], structs: dict[str, Any], tuple_data: Any |
     ----------
     cls: type[T]
         The dataclass type to which the tuple data is to be converted.
+    structs: dict[str, Any]
+        Mapping from a struct name (key) to the run-time type definition (value).
     tuple_data: Any | Tuple[Any, ...]
         A tuple (or nested tuple) of values to convert into a dataclass instance.
 
@@ -102,13 +105,35 @@ def rename_returned_types(
             raw_values = (raw_values,)
 
         # Convert the tuple to the dataclass instance using the utility function
-        converted_values = tuple(
-            tuple_to_dataclass(return_type, structs, value) for return_type, value in zip(return_types, raw_values)
-        )
+        converted_values = []
+        for return_type, value in zip(return_types, raw_values):
+            if type(return_type) == type(list[Any]):  # pylint: disable=unidiomatic-typecheck
+                raise NotImplementedError("Multiple return values of type list[...] is not supported.")
+            converted_values.append(tuple_to_dataclass(return_type, structs, value))
+        converted_values = tuple(converted_values)
 
         return converted_values
 
-    # cover case of single return value
+    # cover case of single return type
+    # single return type is a list of SomeType, aka `list[SomeType]`
+    if type(return_types) == type(list[Any]):  # pylint: disable=unidiomatic-typecheck
+        inner_types = get_args(return_types)
+        # make sure there is only one inner type
+        if len(inner_types) != 1:
+            raise NotImplementedError("Only a single inner type in list[...] is supported")
+        inner_type = inner_types[0]
+        # make sure the type is not also a list
+        if type(inner_type) == type(list[Any]):  # pylint: disable=unidiomatic-typecheck
+            raise NotImplementedError("Type list[list[...]] is not supported.")
+        # type narrowing
+        assert isinstance(raw_values, Iterable)
+        # loop over inner values & convert those to dataclasses
+        converted_value = []
+        for value in raw_values:
+            converted_value.append(tuple_to_dataclass(inner_type, structs, value))
+        return tuple(converted_value)
+
+    # single return type is a standard type or dataclass
     converted_value = tuple_to_dataclass(return_types, structs, raw_values)
     return converted_value
 
@@ -134,3 +159,28 @@ def get_abi_input_types(abi: ABIFunction) -> list[str]:
     if "inputs" not in abi and (abi.get("type") == "fallback" or abi.get("type") == "receive"):
         return []
     return [collapse_if_tuple(cast(dict[str, Any], arg)) for arg in abi.get("inputs", [])]
+
+
+def try_bytecode_hexbytes(in_bytecode: Any, contract_name: str | None = None) -> HexBytes | None:
+    """Attempts to convert bytecode input to HexBytes. Returns None if it fails.
+
+    Parameters
+    ----------
+    in_bytecode : Any
+        The bytecode to attempt to convert to HexBytes
+    contract_name : str | None, optional
+        The name of the contract being deployed. Used for better warning printing.
+
+    Returns
+    -------
+    HexBytes | None
+        The HexBytes if it succeeds, otherwise None
+    """
+    try:
+        return HexBytes(in_bytecode)
+    except Exception as e:  # pylint: disable=broad-except
+        if contract_name is None:
+            print(f"Warning: failed to convert bytecode to HexBytes: {e}")
+        else:
+            print(f"Warning: failed to convert bytecode for {contract_name} to HexBytes: {e}")
+        return None
diff --git a/pypechain/test/overloading/types/OverloadedMethodsContract.py b/pypechain/test/overloading/types/OverloadedMethodsContract.py
index 500330e0..13b74b43 100644
--- a/pypechain/test/overloading/types/OverloadedMethodsContract.py
+++ b/pypechain/test/overloading/types/OverloadedMethodsContract.py
@@ -30,14 +30,13 @@
 
 from eth_account.signers.local import LocalAccount
 from eth_typing import ChecksumAddress, HexStr
-from hexbytes import HexBytes
 from typing_extensions import Self
 from web3 import Web3
 from web3.contract.contract import Contract, ContractConstructor, ContractFunction, ContractFunctions
 from web3.exceptions import FallbackNotFound
 from web3.types import ABI, BlockIdentifier, CallOverride, TxParams
 
-from .utilities import dataclass_to_tuple, rename_returned_types
+from .utilities import dataclass_to_tuple, rename_returned_types, try_bytecode_hexbytes
 
 structs = {}
 
@@ -253,7 +252,7 @@ class OverloadedMethodsContract(Contract):
     """A web3.py Contract class for the OverloadedMethods contract."""
 
     abi: ABI = overloadedmethods_abi
-    bytecode: bytes = HexBytes(overloadedmethods_bytecode)
+    bytecode: bytes | None = try_bytecode_hexbytes(overloadedmethods_bytecode, "overloadedmethods")
 
     def __init__(self, address: ChecksumAddress | None = None) -> None:
         try:
diff --git a/pypechain/test/overloading/types/utilities.py b/pypechain/test/overloading/types/utilities.py
index 00b87d9d..6f8f57c0 100644
--- a/pypechain/test/overloading/types/utilities.py
+++ b/pypechain/test/overloading/types/utilities.py
@@ -6,9 +6,10 @@
 from __future__ import annotations
 
 from dataclasses import fields, is_dataclass
-from typing import Any, Tuple, TypeVar, cast
+from typing import Any, Iterable, Tuple, TypeVar, cast, get_args
 
 from eth_utils.abi import collapse_if_tuple
+from hexbytes import HexBytes
 from web3.types import ABIFunction
 
 T = TypeVar("T")
@@ -23,6 +24,8 @@ def tuple_to_dataclass(cls: type[T], structs: dict[str, Any], tuple_data: Any |
     ----------
     cls: type[T]
         The dataclass type to which the tuple data is to be converted.
+    structs: dict[str, Any]
+        Mapping from a struct name (key) to the run-time type definition (value).
     tuple_data: Any | Tuple[Any, ...]
         A tuple (or nested tuple) of values to convert into a dataclass instance.
 
@@ -102,13 +105,35 @@ def rename_returned_types(
             raw_values = (raw_values,)
 
         # Convert the tuple to the dataclass instance using the utility function
-        converted_values = tuple(
-            tuple_to_dataclass(return_type, structs, value) for return_type, value in zip(return_types, raw_values)
-        )
+        converted_values = []
+        for return_type, value in zip(return_types, raw_values):
+            if type(return_type) == type(list[Any]):  # pylint: disable=unidiomatic-typecheck
+                raise NotImplementedError("Multiple return values of type list[...] is not supported.")
+            converted_values.append(tuple_to_dataclass(return_type, structs, value))
+        converted_values = tuple(converted_values)
 
         return converted_values
 
-    # cover case of single return value
+    # cover case of single return type
+    # single return type is a list of SomeType, aka `list[SomeType]`
+    if type(return_types) == type(list[Any]):  # pylint: disable=unidiomatic-typecheck
+        inner_types = get_args(return_types)
+        # make sure there is only one inner type
+        if len(inner_types) != 1:
+            raise NotImplementedError("Only a single inner type in list[...] is supported")
+        inner_type = inner_types[0]
+        # make sure the type is not also a list
+        if type(inner_type) == type(list[Any]):  # pylint: disable=unidiomatic-typecheck
+            raise NotImplementedError("Type list[list[...]] is not supported.")
+        # type narrowing
+        assert isinstance(raw_values, Iterable)
+        # loop over inner values & convert those to dataclasses
+        converted_value = []
+        for value in raw_values:
+            converted_value.append(tuple_to_dataclass(inner_type, structs, value))
+        return tuple(converted_value)
+
+    # single return type is a standard type or dataclass
     converted_value = tuple_to_dataclass(return_types, structs, raw_values)
     return converted_value
 
@@ -134,3 +159,28 @@ def get_abi_input_types(abi: ABIFunction) -> list[str]:
     if "inputs" not in abi and (abi.get("type") == "fallback" or abi.get("type") == "receive"):
         return []
     return [collapse_if_tuple(cast(dict[str, Any], arg)) for arg in abi.get("inputs", [])]
+
+
+def try_bytecode_hexbytes(in_bytecode: Any, contract_name: str | None = None) -> HexBytes | None:
+    """Attempts to convert bytecode input to HexBytes. Returns None if it fails.
+
+    Parameters
+    ----------
+    in_bytecode : Any
+        The bytecode to attempt to convert to HexBytes
+    contract_name : str | None, optional
+        The name of the contract being deployed. Used for better warning printing.
+
+    Returns
+    -------
+    HexBytes | None
+        The HexBytes if it succeeds, otherwise None
+    """
+    try:
+        return HexBytes(in_bytecode)
+    except Exception as e:  # pylint: disable=broad-except
+        if contract_name is None:
+            print(f"Warning: failed to convert bytecode to HexBytes: {e}")
+        else:
+            print(f"Warning: failed to convert bytecode for {contract_name} to HexBytes: {e}")
+        return None
diff --git a/pypechain/test/return_types/abis/ReturnTypes.json b/pypechain/test/return_types/abis/ReturnTypes.json
index 0e9aa751..80dba1d0 100644
--- a/pypechain/test/return_types/abis/ReturnTypes.json
+++ b/pypechain/test/return_types/abis/ReturnTypes.json
@@ -283,6 +283,43 @@
           "stateMutability": "pure",
           "type": "function"
         },
+        {
+          "inputs": [],
+          "name": "singleNestedStructArray",
+          "outputs": [
+            {
+              "components": [
+                {
+                  "internalType": "uint256",
+                  "name": "intVal",
+                  "type": "uint256"
+                },
+                {
+                  "internalType": "string",
+                  "name": "strVal",
+                  "type": "string"
+                },
+                {
+                  "components": [
+                    {
+                      "internalType": "bool",
+                      "name": "boolVal",
+                      "type": "bool"
+                    }
+                  ],
+                  "internalType": "struct ReturnTypes.InnerStruct",
+                  "name": "innerStruct",
+                  "type": "tuple"
+                }
+              ],
+              "internalType": "struct ReturnTypes.NestedStruct[]",
+              "name": "",
+              "type": "tuple[]"
+            }
+          ],
+          "stateMutability": "pure",
+          "type": "function"
+        },
         {
           "inputs": [],
           "name": "singleSimpleStruct",
@@ -405,8 +442,8 @@
           "type": "function"
         }
       ],
-      "bin": "608060405234801561000f575f80fd5b50610d428061001d5f395ff3fe608060405234801561000f575f80fd5b50600436106100a7575f3560e01c806373b10c0f1161006f57806373b10c0f14610167578063811d9aa314610189578063879896af146101a7578063c567c2f3146101d8578063d6c1a03e146101f6578063e0f7c60414610227576100a7565b8063389e9102146100ab57806340e27b10146100db57806353fd1043146100fa5780636456bc7914610119578063730fe90e14610137575b5f80fd5b6100c560048036038101906100c09190610798565b610246565b6040516100d291906107d2565b60405180910390f35b6100e361024f565b6040516100f19291906108be565b60405180910390f35b610102610307565b604051610110929190610974565b60405180910390f35b6101216103d6565b60405161012e91906109a9565b60405180910390f35b610151600480360381019061014c91906109c9565b61042e565b60405161015e91906107d2565b60405180910390f35b61016f610443565b604051610180959493929190610a5e565b60405180910390f35b610191610557565b60405161019e91906109a9565b60405180910390f35b6101c160048036038101906101bc9190610bf0565b6105af565b6040516101cf929190610c37565b60405180910390f35b6101e06105be565b6040516101ed9190610c65565b60405180910390f35b610210600480360381019061020b91906109c9565b61062d565b60405161021e929190610c85565b60405180910390f35b61022f61063c565b60405161023d929190610974565b60405180910390f35b5f819050919050565b610257610701565b61025f610701565b5f6040518060400160405280600181526020016040518060400160405280601081526020017f596f7520617265206e756d62657220310000000000000000000000000000000081525081525090505f6040518060400160405280600281526020016040518060400160405280601081526020017f596f7520617265206e756d626572203200000000000000000000000000000000815250815250905081819350935050509091565b61030f610701565b61031761071a565b5f6040518060400160405280600181526020016040518060400160405280601081526020017f596f7520617265206e756d62657220310000000000000000000000000000000081525081525090505f6040518060600160405280600281526020016040518060400160405280601081526020017f596f7520617265206e756d6265722032000000000000000000000000000000008152508152602001604051806020016040528060011515815250815250905081819350935050509091565b6103de610701565b6040518060400160405280600181526020016040518060400160405280601081526020017f596f7520617265206e756d626572203100000000000000000000000000000000815250815250905090565b5f818361043b9190610cd9565b905092915050565b61044b610701565b61045361071a565b5f60605f6040518060400160405280600181526020016040518060400160405280601081526020017f596f7520617265206e756d62657220310000000000000000000000000000000081525081525094505f6040518060600160405280600281526020016040518060400160405280601081526020017f596f7520617265206e756d62657220320000000000000000000000000000000081525081526020016040518060200160405280600115158152508152509050858160015f6040518060400160405280601381526020017f52657475726e5479706573436f6e7472616374000000000000000000000000008152509095509550955095509550509091929394565b61055f610701565b6040518060400160405280600181526020016040518060400160405280601081526020017f596f7520617265206e756d626572203100000000000000000000000000000000815250815250905090565b60605f82600291509150915091565b6105c661071a565b6040518060600160405280600181526020016040518060400160405280601081526020017f596f7520617265206e756d6265722031000000000000000000000000000000008152508152602001604051806020016040528060011515815250815250905090565b5f808284915091509250929050565b610644610701565b61064c61071a565b6040518060400160405280600181526020016040518060400160405280601081526020017f596f7520617265206e756d62657220310000000000000000000000000000000081525081525091506040518060600160405280600281526020016040518060400160405280601081526020017f596f7520617265206e756d626572203200000000000000000000000000000000815250815260200160405180602001604052806001151581525081525090509091565b60405180604001604052805f8152602001606081525090565b60405180606001604052805f81526020016060815260200161073a610740565b81525090565b60405180602001604052805f151581525090565b5f604051905090565b5f80fd5b5f80fd5b5f819050919050565b61077781610765565b8114610781575f80fd5b50565b5f813590506107928161076e565b92915050565b5f602082840312156107ad576107ac61075d565b5b5f6107ba84828501610784565b91505092915050565b6107cc81610765565b82525050565b5f6020820190506107e55f8301846107c3565b92915050565b6107f481610765565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015610831578082015181840152602081019050610816565b5f8484015250505050565b5f601f19601f8301169050919050565b5f610856826107fa565b6108608185610804565b9350610870818560208601610814565b6108798161083c565b840191505092915050565b5f604083015f8301516108995f8601826107eb565b50602083015184820360208601526108b1828261084c565b9150508091505092915050565b5f6040820190508181035f8301526108d68185610884565b905081810360208301526108ea8184610884565b90509392505050565b5f8115159050919050565b610907816108f3565b82525050565b602082015f8201516109215f8501826108fe565b50505050565b5f606083015f83015161093c5f8601826107eb565b5060208301518482036020860152610954828261084c565b9150506040830151610969604086018261090d565b508091505092915050565b5f6040820190508181035f83015261098c8185610884565b905081810360208301526109a08184610927565b90509392505050565b5f6020820190508181035f8301526109c18184610884565b905092915050565b5f80604083850312156109df576109de61075d565b5b5f6109ec85828601610784565b92505060206109fd85828601610784565b9150509250929050565b5f82825260208201905092915050565b5f610a21826107fa565b610a2b8185610a07565b9350610a3b818560208601610814565b610a448161083c565b840191505092915050565b610a58816108f3565b82525050565b5f60a0820190508181035f830152610a768188610884565b90508181036020830152610a8a8187610927565b9050610a9960408301866107c3565b8181036060830152610aab8185610a17565b9050610aba6080830184610a4f565b9695505050505050565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b610b028261083c565b810181811067ffffffffffffffff82111715610b2157610b20610acc565b5b80604052505050565b5f610b33610754565b9050610b3f8282610af9565b919050565b5f67ffffffffffffffff821115610b5e57610b5d610acc565b5b610b678261083c565b9050602081019050919050565b828183375f83830152505050565b5f610b94610b8f84610b44565b610b2a565b905082815260208101848484011115610bb057610baf610ac8565b5b610bbb848285610b74565b509392505050565b5f82601f830112610bd757610bd6610ac4565b5b8135610be7848260208601610b82565b91505092915050565b5f60208284031215610c0557610c0461075d565b5b5f82013567ffffffffffffffff811115610c2257610c21610761565b5b610c2e84828501610bc3565b91505092915050565b5f6040820190508181035f830152610c4f8185610a17565b9050610c5e60208301846107c3565b9392505050565b5f6020820190508181035f830152610c7d8184610927565b905092915050565b5f604082019050610c985f8301856107c3565b610ca560208301846107c3565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610ce382610765565b9150610cee83610765565b9250828201905080821115610d0657610d05610cac565b5b9291505056fea2646970667358221220e3889d05f9a166b91391574ab82b4dac305987a0962eb279cd01f524cb7ded2464736f6c63430008170033",
-      "metadata": "{\"compiler\":{\"version\":\"0.8.23+commit.f704f362\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"mixStructsAndPrimitives\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"intVal\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"strVal\",\"type\":\"string\"}],\"internalType\":\"struct ReturnTypes.SimpleStruct\",\"name\":\"simpleStruct\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"intVal\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"strVal\",\"type\":\"string\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"boolVal\",\"type\":\"bool\"}],\"internalType\":\"struct ReturnTypes.InnerStruct\",\"name\":\"innerStruct\",\"type\":\"tuple\"}],\"internalType\":\"struct ReturnTypes.NestedStruct\",\"name\":\"\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"bool\",\"name\":\"YesOrNo\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"namedSingleStruct\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"intVal\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"strVal\",\"type\":\"string\"}],\"internalType\":\"struct ReturnTypes.SimpleStruct\",\"name\":\"struct1\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"}],\"name\":\"namedSingleValue\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"added\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"namedTwoMixedStructs\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"intVal\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"strVal\",\"type\":\"string\"}],\"internalType\":\"struct ReturnTypes.SimpleStruct\",\"name\":\"simpleStruct\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"intVal\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"strVal\",\"type\":\"string\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"boolVal\",\"type\":\"bool\"}],\"internalType\":\"struct ReturnTypes.InnerStruct\",\"name\":\"innerStruct\",\"type\":\"tuple\"}],\"internalType\":\"struct ReturnTypes.NestedStruct\",\"name\":\"nestedStruct\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"}],\"name\":\"namedTwoValues\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"flip\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"flop\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"noNameSingleValue\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"s\",\"type\":\"string\"}],\"name\":\"noNameTwoValues\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"singleNestedStruct\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"intVal\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"strVal\",\"type\":\"string\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"boolVal\",\"type\":\"bool\"}],\"internalType\":\"struct ReturnTypes.InnerStruct\",\"name\":\"innerStruct\",\"type\":\"tuple\"}],\"internalType\":\"struct ReturnTypes.NestedStruct\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"singleSimpleStruct\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"intVal\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"strVal\",\"type\":\"string\"}],\"internalType\":\"struct ReturnTypes.SimpleStruct\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"twoMixedStructs\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"intVal\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"strVal\",\"type\":\"string\"}],\"internalType\":\"struct ReturnTypes.SimpleStruct\",\"name\":\"\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"intVal\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"strVal\",\"type\":\"string\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"boolVal\",\"type\":\"bool\"}],\"internalType\":\"struct ReturnTypes.InnerStruct\",\"name\":\"innerStruct\",\"type\":\"tuple\"}],\"internalType\":\"struct ReturnTypes.NestedStruct\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"twoSimpleStructs\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"intVal\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"strVal\",\"type\":\"string\"}],\"internalType\":\"struct ReturnTypes.SimpleStruct\",\"name\":\"\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"intVal\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"strVal\",\"type\":\"string\"}],\"internalType\":\"struct ReturnTypes.SimpleStruct\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"pypechain/test/return_types/contracts/ReturnTypes.sol\":\"ReturnTypes\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"pypechain/test/return_types/contracts/ReturnTypes.sol\":{\"keccak256\":\"0x5f9fb98c950dc8c4bbe4b6ef27070715ce7f71f668b7400c4e16bdecfb3587fe\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://679c58a51707afb45173e1174da356d3ffdac1dd09312515c3e456d8e09150b5\",\"dweb:/ipfs/QmYpAVUhzX4J4RW7kbwv3SBdHBT3y52WYZCnvk5NLsjANY\"]}},\"version\":1}"
+      "bin": "608060405234801561000f575f80fd5b506110228061001d5f395ff3fe608060405234801561000f575f80fd5b50600436106100b2575f3560e01c8063811d9aa31161006f578063811d9aa314610194578063879896af146101b2578063c567c2f3146101e3578063d6c1a03e14610201578063e0f7c60414610232578063fa1fac8f14610251576100b2565b8063389e9102146100b657806340e27b10146100e657806353fd1043146101055780636456bc7914610124578063730fe90e1461014257806373b10c0f14610172575b5f80fd5b6100d060048036038101906100cb9190610923565b61026f565b6040516100dd919061095d565b60405180910390f35b6100ee610278565b6040516100fc929190610a49565b60405180910390f35b61010d610330565b60405161011b929190610aff565b60405180910390f35b61012c6103ff565b6040516101399190610b34565b60405180910390f35b61015c60048036038101906101579190610b54565b610457565b604051610169919061095d565b60405180910390f35b61017a61046c565b60405161018b959493929190610be9565b60405180910390f35b61019c610580565b6040516101a99190610b34565b60405180910390f35b6101cc60048036038101906101c79190610d7b565b6105d8565b6040516101da929190610dc2565b60405180910390f35b6101eb6105e7565b6040516101f89190610df0565b60405180910390f35b61021b60048036038101906102169190610b54565b610656565b604051610229929190610e10565b60405180910390f35b61023a610665565b604051610248929190610aff565b60405180910390f35b61025961072a565b6040516102669190610f3f565b60405180910390f35b5f819050919050565b61028061088c565b61028861088c565b5f6040518060400160405280600181526020016040518060400160405280601081526020017f596f7520617265206e756d62657220310000000000000000000000000000000081525081525090505f6040518060400160405280600281526020016040518060400160405280601081526020017f596f7520617265206e756d626572203200000000000000000000000000000000815250815250905081819350935050509091565b61033861088c565b6103406108a5565b5f6040518060400160405280600181526020016040518060400160405280601081526020017f596f7520617265206e756d62657220310000000000000000000000000000000081525081525090505f6040518060600160405280600281526020016040518060400160405280601081526020017f596f7520617265206e756d6265722032000000000000000000000000000000008152508152602001604051806020016040528060011515815250815250905081819350935050509091565b61040761088c565b6040518060400160405280600181526020016040518060400160405280601081526020017f596f7520617265206e756d626572203100000000000000000000000000000000815250815250905090565b5f81836104649190610f8c565b905092915050565b61047461088c565b61047c6108a5565b5f60605f6040518060400160405280600181526020016040518060400160405280601081526020017f596f7520617265206e756d62657220310000000000000000000000000000000081525081525094505f6040518060600160405280600281526020016040518060400160405280601081526020017f596f7520617265206e756d62657220320000000000000000000000000000000081525081526020016040518060200160405280600115158152508152509050858160015f6040518060400160405280601381526020017f52657475726e5479706573436f6e7472616374000000000000000000000000008152509095509550955095509550509091929394565b61058861088c565b6040518060400160405280600181526020016040518060400160405280601081526020017f596f7520617265206e756d626572203100000000000000000000000000000000815250815250905090565b60605f82600291509150915091565b6105ef6108a5565b6040518060600160405280600181526020016040518060400160405280601081526020017f596f7520617265206e756d6265722031000000000000000000000000000000008152508152602001604051806020016040528060011515815250815250905090565b5f808284915091509250929050565b61066d61088c565b6106756108a5565b6040518060400160405280600181526020016040518060400160405280601081526020017f596f7520617265206e756d62657220310000000000000000000000000000000081525081525091506040518060600160405280600281526020016040518060400160405280601081526020017f596f7520617265206e756d626572203200000000000000000000000000000000815250815260200160405180602001604052806001151581525081525090509091565b60605f600267ffffffffffffffff81111561074857610747610c57565b5b60405190808252806020026020018201604052801561078157816020015b61076e6108a5565b8152602001906001900390816107665790505b5090506040518060600160405280600181526020016040518060400160405280601081526020017f596f7520617265206e756d6265722031000000000000000000000000000000008152508152602001604051806020016040528060011515815250815250815f815181106107f9576107f8610fbf565b5b60200260200101819052506040518060600160405280600281526020016040518060400160405280601081526020017f596f7520617265206e756d62657220320000000000000000000000000000000081525081526020016040518060200160405280600115158152508152508160018151811061087a57610879610fbf565b5b60200260200101819052508091505090565b60405180604001604052805f8152602001606081525090565b60405180606001604052805f8152602001606081526020016108c56108cb565b81525090565b60405180602001604052805f151581525090565b5f604051905090565b5f80fd5b5f80fd5b5f819050919050565b610902816108f0565b811461090c575f80fd5b50565b5f8135905061091d816108f9565b92915050565b5f60208284031215610938576109376108e8565b5b5f6109458482850161090f565b91505092915050565b610957816108f0565b82525050565b5f6020820190506109705f83018461094e565b92915050565b61097f816108f0565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156109bc5780820151818401526020810190506109a1565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6109e182610985565b6109eb818561098f565b93506109fb81856020860161099f565b610a04816109c7565b840191505092915050565b5f604083015f830151610a245f860182610976565b5060208301518482036020860152610a3c82826109d7565b9150508091505092915050565b5f6040820190508181035f830152610a618185610a0f565b90508181036020830152610a758184610a0f565b90509392505050565b5f8115159050919050565b610a9281610a7e565b82525050565b602082015f820151610aac5f850182610a89565b50505050565b5f606083015f830151610ac75f860182610976565b5060208301518482036020860152610adf82826109d7565b9150506040830151610af46040860182610a98565b508091505092915050565b5f6040820190508181035f830152610b178185610a0f565b90508181036020830152610b2b8184610ab2565b90509392505050565b5f6020820190508181035f830152610b4c8184610a0f565b905092915050565b5f8060408385031215610b6a57610b696108e8565b5b5f610b778582860161090f565b9250506020610b888582860161090f565b9150509250929050565b5f82825260208201905092915050565b5f610bac82610985565b610bb68185610b92565b9350610bc681856020860161099f565b610bcf816109c7565b840191505092915050565b610be381610a7e565b82525050565b5f60a0820190508181035f830152610c018188610a0f565b90508181036020830152610c158187610ab2565b9050610c24604083018661094e565b8181036060830152610c368185610ba2565b9050610c456080830184610bda565b9695505050505050565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b610c8d826109c7565b810181811067ffffffffffffffff82111715610cac57610cab610c57565b5b80604052505050565b5f610cbe6108df565b9050610cca8282610c84565b919050565b5f67ffffffffffffffff821115610ce957610ce8610c57565b5b610cf2826109c7565b9050602081019050919050565b828183375f83830152505050565b5f610d1f610d1a84610ccf565b610cb5565b905082815260208101848484011115610d3b57610d3a610c53565b5b610d46848285610cff565b509392505050565b5f82601f830112610d6257610d61610c4f565b5b8135610d72848260208601610d0d565b91505092915050565b5f60208284031215610d9057610d8f6108e8565b5b5f82013567ffffffffffffffff811115610dad57610dac6108ec565b5b610db984828501610d4e565b91505092915050565b5f6040820190508181035f830152610dda8185610ba2565b9050610de9602083018461094e565b9392505050565b5f6020820190508181035f830152610e088184610ab2565b905092915050565b5f604082019050610e235f83018561094e565b610e30602083018461094e565b9392505050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f606083015f830151610e755f860182610976565b5060208301518482036020860152610e8d82826109d7565b9150506040830151610ea26040860182610a98565b508091505092915050565b5f610eb88383610e60565b905092915050565b5f602082019050919050565b5f610ed682610e37565b610ee08185610e41565b935083602082028501610ef285610e51565b805f5b85811015610f2d5784840389528151610f0e8582610ead565b9450610f1983610ec0565b925060208a01995050600181019050610ef5565b50829750879550505050505092915050565b5f6020820190508181035f830152610f578184610ecc565b905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610f96826108f0565b9150610fa1836108f0565b9250828201905080821115610fb957610fb8610f5f565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffdfea26469706673582212201073f1e3b57139bd7e41b1d49f803a4937972503b2fbf518ee39e85c8b65807864736f6c63430008170033",
+      "metadata": "{\"compiler\":{\"version\":\"0.8.23+commit.f704f362\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"mixStructsAndPrimitives\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"intVal\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"strVal\",\"type\":\"string\"}],\"internalType\":\"struct ReturnTypes.SimpleStruct\",\"name\":\"simpleStruct\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"intVal\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"strVal\",\"type\":\"string\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"boolVal\",\"type\":\"bool\"}],\"internalType\":\"struct ReturnTypes.InnerStruct\",\"name\":\"innerStruct\",\"type\":\"tuple\"}],\"internalType\":\"struct ReturnTypes.NestedStruct\",\"name\":\"\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"bool\",\"name\":\"YesOrNo\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"namedSingleStruct\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"intVal\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"strVal\",\"type\":\"string\"}],\"internalType\":\"struct ReturnTypes.SimpleStruct\",\"name\":\"struct1\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"}],\"name\":\"namedSingleValue\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"added\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"namedTwoMixedStructs\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"intVal\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"strVal\",\"type\":\"string\"}],\"internalType\":\"struct ReturnTypes.SimpleStruct\",\"name\":\"simpleStruct\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"intVal\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"strVal\",\"type\":\"string\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"boolVal\",\"type\":\"bool\"}],\"internalType\":\"struct ReturnTypes.InnerStruct\",\"name\":\"innerStruct\",\"type\":\"tuple\"}],\"internalType\":\"struct ReturnTypes.NestedStruct\",\"name\":\"nestedStruct\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"}],\"name\":\"namedTwoValues\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"flip\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"flop\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"noNameSingleValue\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"s\",\"type\":\"string\"}],\"name\":\"noNameTwoValues\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"singleNestedStruct\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"intVal\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"strVal\",\"type\":\"string\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"boolVal\",\"type\":\"bool\"}],\"internalType\":\"struct ReturnTypes.InnerStruct\",\"name\":\"innerStruct\",\"type\":\"tuple\"}],\"internalType\":\"struct ReturnTypes.NestedStruct\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"singleNestedStructArray\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"intVal\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"strVal\",\"type\":\"string\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"boolVal\",\"type\":\"bool\"}],\"internalType\":\"struct ReturnTypes.InnerStruct\",\"name\":\"innerStruct\",\"type\":\"tuple\"}],\"internalType\":\"struct ReturnTypes.NestedStruct[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"singleSimpleStruct\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"intVal\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"strVal\",\"type\":\"string\"}],\"internalType\":\"struct ReturnTypes.SimpleStruct\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"twoMixedStructs\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"intVal\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"strVal\",\"type\":\"string\"}],\"internalType\":\"struct ReturnTypes.SimpleStruct\",\"name\":\"\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"intVal\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"strVal\",\"type\":\"string\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"boolVal\",\"type\":\"bool\"}],\"internalType\":\"struct ReturnTypes.InnerStruct\",\"name\":\"innerStruct\",\"type\":\"tuple\"}],\"internalType\":\"struct ReturnTypes.NestedStruct\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"twoSimpleStructs\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"intVal\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"strVal\",\"type\":\"string\"}],\"internalType\":\"struct ReturnTypes.SimpleStruct\",\"name\":\"\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"intVal\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"strVal\",\"type\":\"string\"}],\"internalType\":\"struct ReturnTypes.SimpleStruct\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"pypechain/test/return_types/contracts/ReturnTypes.sol\":\"ReturnTypes\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"pypechain/test/return_types/contracts/ReturnTypes.sol\":{\"keccak256\":\"0xe41ca63ebf97a6e1f19ccedb3971cee50ec41849ac62c6c7437ec2a1876abcf4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eeec87adabe62c3a66dcff7366cc43a932ce5cccd099eb45fb768adf9315bc35\",\"dweb:/ipfs/QmcBLEJ2Gt9jEqFreHE98hv7RUwbmHttcKbvBRNiZFWAzj\"]}},\"version\":1}"
     }
   },
   "version": "0.8.23+commit.f704f362.Darwin.appleclang"
diff --git a/pypechain/test/return_types/contracts/ReturnTypes.sol b/pypechain/test/return_types/contracts/ReturnTypes.sol
index b23fb683..bb5e50f5 100644
--- a/pypechain/test/return_types/contracts/ReturnTypes.sol
+++ b/pypechain/test/return_types/contracts/ReturnTypes.sol
@@ -2,7 +2,6 @@
 pragma solidity ^0.8.0;
 
 contract ReturnTypes {
-
     struct SimpleStruct {
         uint intVal;
         string strVal;
@@ -22,7 +21,9 @@ contract ReturnTypes {
         return x;
     }
 
-    function noNameTwoValues(string memory s) public pure returns (string memory, uint) {
+    function noNameTwoValues(
+        string memory s
+    ) public pure returns (string memory, uint) {
         return (s, 2);
     }
 
@@ -30,26 +31,31 @@ contract ReturnTypes {
         return x + y;
     }
 
-    function namedTwoValues(uint x, uint y) public pure returns (uint flip, uint flop) {
-        return (y,x);
+    function namedTwoValues(
+        uint x,
+        uint y
+    ) public pure returns (uint flip, uint flop) {
+        return (y, x);
     }
 
     function singleSimpleStruct() public pure returns (SimpleStruct memory) {
-        return SimpleStruct({
-            intVal: 1,
-            strVal: "You are number 1"
-        });
+        return SimpleStruct({ intVal: 1, strVal: "You are number 1" });
     }
 
     function singleNestedStruct() public pure returns (NestedStruct memory) {
-        return NestedStruct({
-            intVal: 1,
-            strVal: "You are number 1",
-            innerStruct: InnerStruct({boolVal: true})
-        });
+        return
+            NestedStruct({
+                intVal: 1,
+                strVal: "You are number 1",
+                innerStruct: InnerStruct({ boolVal: true })
+            });
     }
 
-    function twoSimpleStructs() public pure returns (SimpleStruct memory, SimpleStruct memory) {
+    function twoSimpleStructs()
+        public
+        pure
+        returns (SimpleStruct memory, SimpleStruct memory)
+    {
         SimpleStruct memory simpleStruct1 = SimpleStruct({
             intVal: 1,
             strVal: "You are number 1"
@@ -63,7 +69,11 @@ contract ReturnTypes {
         return (simpleStruct1, simpleStruct2);
     }
 
-    function twoMixedStructs() public pure returns (SimpleStruct memory, NestedStruct memory) {
+    function twoMixedStructs()
+        public
+        pure
+        returns (SimpleStruct memory, NestedStruct memory)
+    {
         SimpleStruct memory simpleStruct = SimpleStruct({
             intVal: 1,
             strVal: "You are number 1"
@@ -71,42 +81,73 @@ contract ReturnTypes {
         NestedStruct memory nestedtStruct = NestedStruct({
             intVal: 2,
             strVal: "You are number 2",
-            innerStruct: InnerStruct({boolVal: true})
+            innerStruct: InnerStruct({ boolVal: true })
         });
 
         return (simpleStruct, nestedtStruct);
     }
 
-    function namedSingleStruct() public pure returns (SimpleStruct memory struct1) {
-        return SimpleStruct({
-            intVal: 1,
-            strVal: "You are number 1"
-        });
+    function namedSingleStruct()
+        public
+        pure
+        returns (SimpleStruct memory struct1)
+    {
+        return SimpleStruct({ intVal: 1, strVal: "You are number 1" });
     }
 
-    function namedTwoMixedStructs() public pure returns (SimpleStruct memory simpleStruct, NestedStruct memory nestedStruct) {
-        simpleStruct = SimpleStruct({
-            intVal: 1,
-            strVal: "You are number 1"
-        });
+    function namedTwoMixedStructs()
+        public
+        pure
+        returns (
+            SimpleStruct memory simpleStruct,
+            NestedStruct memory nestedStruct
+        )
+    {
+        simpleStruct = SimpleStruct({ intVal: 1, strVal: "You are number 1" });
         nestedStruct = NestedStruct({
             intVal: 2,
             strVal: "You are number 2",
-            innerStruct: InnerStruct({boolVal: true})
+            innerStruct: InnerStruct({ boolVal: true })
         });
     }
 
-    function mixStructsAndPrimitives() public pure returns (SimpleStruct memory simpleStruct, NestedStruct memory, uint, string memory name, bool YesOrNo) {
-        simpleStruct = SimpleStruct({
-            intVal: 1,
-            strVal: "You are number 1"
-        });
+    function mixStructsAndPrimitives()
+        public
+        pure
+        returns (
+            SimpleStruct memory simpleStruct,
+            NestedStruct memory,
+            uint,
+            string memory name,
+            bool YesOrNo
+        )
+    {
+        simpleStruct = SimpleStruct({ intVal: 1, strVal: "You are number 1" });
         NestedStruct memory nestedStruct = NestedStruct({
             intVal: 2,
             strVal: "You are number 2",
-            innerStruct: InnerStruct({boolVal: true})
+            innerStruct: InnerStruct({ boolVal: true })
         });
 
         return (simpleStruct, nestedStruct, 1, "ReturnTypesContract", false);
     }
-}
\ No newline at end of file
+
+    function singleNestedStructArray()
+        public
+        pure
+        returns (NestedStruct[] memory)
+    {
+        NestedStruct[] memory out = new NestedStruct[](2);
+        out[0] = NestedStruct({
+            intVal: 1,
+            strVal: "You are number 1",
+            innerStruct: InnerStruct({ boolVal: true })
+        });
+        out[1] = NestedStruct({
+            intVal: 2,
+            strVal: "You are number 2",
+            innerStruct: InnerStruct({ boolVal: true })
+        });
+        return out;
+    }
+}
diff --git a/pypechain/test/return_types/test_returntypes.py b/pypechain/test/return_types/test_returntypes.py
index 56a2ed1f..a49ecfbe 100644
--- a/pypechain/test/return_types/test_returntypes.py
+++ b/pypechain/test/return_types/test_returntypes.py
@@ -106,3 +106,15 @@ def test_mix_structs_and_primitives(self, deployed_contract: ReturnTypesContract
             "ReturnTypesContract",
             False,
         )
+
+    def test_list_of_dataclass(self, deployed_contract: ReturnTypesContract):
+        """Tests a function that returns list[Struct]."""
+        func = deployed_contract.functions.singleNestedStructArray()
+
+        result = func.call()
+
+        assert len(result) == 2
+        assert isinstance(result[0], NestedStruct)
+        assert isinstance(result[1], NestedStruct)
+        assert result[0] == NestedStruct(1, "You are number 1", InnerStruct(True))
+        assert result[1] == NestedStruct(2, "You are number 2", InnerStruct(True))
diff --git a/pypechain/test/return_types/types/ReturnTypesContract.py b/pypechain/test/return_types/types/ReturnTypesContract.py
index e0ca0cdb..5acb646d 100644
--- a/pypechain/test/return_types/types/ReturnTypesContract.py
+++ b/pypechain/test/return_types/types/ReturnTypesContract.py
@@ -30,7 +30,6 @@
 
 from eth_account.signers.local import LocalAccount
 from eth_typing import ChecksumAddress, HexStr
-from hexbytes import HexBytes
 from typing_extensions import Self
 from web3 import Web3
 from web3.contract.contract import Contract, ContractConstructor, ContractFunction, ContractFunctions
@@ -38,7 +37,7 @@
 from web3.types import ABI, BlockIdentifier, CallOverride, TxParams
 
 from .ReturnTypesTypes import InnerStruct, NestedStruct, SimpleStruct
-from .utilities import dataclass_to_tuple, rename_returned_types
+from .utilities import dataclass_to_tuple, rename_returned_types, try_bytecode_hexbytes
 
 structs = {
     "SimpleStruct": SimpleStruct,
@@ -290,6 +289,33 @@ def call(
         return cast(NestedStruct, rename_returned_types(structs, return_types, raw_values))
 
 
+class ReturnTypesSingleNestedStructArrayContractFunction(ContractFunction):
+    """ContractFunction for the singleNestedStructArray method."""
+
+    def __call__(self) -> ReturnTypesSingleNestedStructArrayContractFunction:  # type: ignore
+        clone = super().__call__()
+        self.kwargs = clone.kwargs
+        self.args = clone.args
+        return self
+
+    def call(
+        self,
+        transaction: TxParams | None = None,
+        block_identifier: BlockIdentifier = "latest",
+        state_override: CallOverride | None = None,
+        ccip_read_enabled: bool | None = None,
+    ) -> list[NestedStruct]:
+        """returns list[NestedStruct]."""
+        # Define the expected return types from the smart contract call
+
+        return_types = list[NestedStruct]
+
+        # Call the function
+
+        raw_values = super().call(transaction, block_identifier, state_override, ccip_read_enabled)
+        return cast(list[NestedStruct], rename_returned_types(structs, return_types, raw_values))
+
+
 class ReturnTypesSingleSimpleStructContractFunction(ContractFunction):
     """ContractFunction for the singleSimpleStruct method."""
 
@@ -402,6 +428,8 @@ class ReturnTypesContractFunctions(ContractFunctions):
 
     singleNestedStruct: ReturnTypesSingleNestedStructContractFunction
 
+    singleNestedStructArray: ReturnTypesSingleNestedStructArrayContractFunction
+
     singleSimpleStruct: ReturnTypesSingleSimpleStructContractFunction
 
     twoMixedStructs: ReturnTypesTwoMixedStructsContractFunction
@@ -480,6 +508,14 @@ def __init__(
             decode_tuples=decode_tuples,
             function_identifier="singleNestedStruct",
         )
+        self.singleNestedStructArray = ReturnTypesSingleNestedStructArrayContractFunction.factory(
+            "singleNestedStructArray",
+            w3=w3,
+            contract_abi=abi,
+            address=address,
+            decode_tuples=decode_tuples,
+            function_identifier="singleNestedStructArray",
+        )
         self.singleSimpleStruct = ReturnTypesSingleSimpleStructContractFunction.factory(
             "singleSimpleStruct",
             w3=w3,
@@ -656,6 +692,29 @@ def __init__(
             "stateMutability": "pure",
             "type": "function",
         },
+        {
+            "inputs": [],
+            "name": "singleNestedStructArray",
+            "outputs": [
+                {
+                    "components": [
+                        {"internalType": "uint256", "name": "intVal", "type": "uint256"},
+                        {"internalType": "string", "name": "strVal", "type": "string"},
+                        {
+                            "components": [{"internalType": "bool", "name": "boolVal", "type": "bool"}],
+                            "internalType": "struct ReturnTypes.InnerStruct",
+                            "name": "innerStruct",
+                            "type": "tuple",
+                        },
+                    ],
+                    "internalType": "struct ReturnTypes.NestedStruct[]",
+                    "name": "",
+                    "type": "tuple[]",
+                }
+            ],
+            "stateMutability": "pure",
+            "type": "function",
+        },
         {
             "inputs": [],
             "name": "singleSimpleStruct",
@@ -735,7 +794,7 @@ def __init__(
 )
 # pylint: disable=line-too-long
 returntypes_bytecode = HexStr(
-    "0x608060405234801561000f575f80fd5b50610d428061001d5f395ff3fe608060405234801561000f575f80fd5b50600436106100a7575f3560e01c806373b10c0f1161006f57806373b10c0f14610167578063811d9aa314610189578063879896af146101a7578063c567c2f3146101d8578063d6c1a03e146101f6578063e0f7c60414610227576100a7565b8063389e9102146100ab57806340e27b10146100db57806353fd1043146100fa5780636456bc7914610119578063730fe90e14610137575b5f80fd5b6100c560048036038101906100c09190610798565b610246565b6040516100d291906107d2565b60405180910390f35b6100e361024f565b6040516100f19291906108be565b60405180910390f35b610102610307565b604051610110929190610974565b60405180910390f35b6101216103d6565b60405161012e91906109a9565b60405180910390f35b610151600480360381019061014c91906109c9565b61042e565b60405161015e91906107d2565b60405180910390f35b61016f610443565b604051610180959493929190610a5e565b60405180910390f35b610191610557565b60405161019e91906109a9565b60405180910390f35b6101c160048036038101906101bc9190610bf0565b6105af565b6040516101cf929190610c37565b60405180910390f35b6101e06105be565b6040516101ed9190610c65565b60405180910390f35b610210600480360381019061020b91906109c9565b61062d565b60405161021e929190610c85565b60405180910390f35b61022f61063c565b60405161023d929190610974565b60405180910390f35b5f819050919050565b610257610701565b61025f610701565b5f6040518060400160405280600181526020016040518060400160405280601081526020017f596f7520617265206e756d62657220310000000000000000000000000000000081525081525090505f6040518060400160405280600281526020016040518060400160405280601081526020017f596f7520617265206e756d626572203200000000000000000000000000000000815250815250905081819350935050509091565b61030f610701565b61031761071a565b5f6040518060400160405280600181526020016040518060400160405280601081526020017f596f7520617265206e756d62657220310000000000000000000000000000000081525081525090505f6040518060600160405280600281526020016040518060400160405280601081526020017f596f7520617265206e756d6265722032000000000000000000000000000000008152508152602001604051806020016040528060011515815250815250905081819350935050509091565b6103de610701565b6040518060400160405280600181526020016040518060400160405280601081526020017f596f7520617265206e756d626572203100000000000000000000000000000000815250815250905090565b5f818361043b9190610cd9565b905092915050565b61044b610701565b61045361071a565b5f60605f6040518060400160405280600181526020016040518060400160405280601081526020017f596f7520617265206e756d62657220310000000000000000000000000000000081525081525094505f6040518060600160405280600281526020016040518060400160405280601081526020017f596f7520617265206e756d62657220320000000000000000000000000000000081525081526020016040518060200160405280600115158152508152509050858160015f6040518060400160405280601381526020017f52657475726e5479706573436f6e7472616374000000000000000000000000008152509095509550955095509550509091929394565b61055f610701565b6040518060400160405280600181526020016040518060400160405280601081526020017f596f7520617265206e756d626572203100000000000000000000000000000000815250815250905090565b60605f82600291509150915091565b6105c661071a565b6040518060600160405280600181526020016040518060400160405280601081526020017f596f7520617265206e756d6265722031000000000000000000000000000000008152508152602001604051806020016040528060011515815250815250905090565b5f808284915091509250929050565b610644610701565b61064c61071a565b6040518060400160405280600181526020016040518060400160405280601081526020017f596f7520617265206e756d62657220310000000000000000000000000000000081525081525091506040518060600160405280600281526020016040518060400160405280601081526020017f596f7520617265206e756d626572203200000000000000000000000000000000815250815260200160405180602001604052806001151581525081525090509091565b60405180604001604052805f8152602001606081525090565b60405180606001604052805f81526020016060815260200161073a610740565b81525090565b60405180602001604052805f151581525090565b5f604051905090565b5f80fd5b5f80fd5b5f819050919050565b61077781610765565b8114610781575f80fd5b50565b5f813590506107928161076e565b92915050565b5f602082840312156107ad576107ac61075d565b5b5f6107ba84828501610784565b91505092915050565b6107cc81610765565b82525050565b5f6020820190506107e55f8301846107c3565b92915050565b6107f481610765565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015610831578082015181840152602081019050610816565b5f8484015250505050565b5f601f19601f8301169050919050565b5f610856826107fa565b6108608185610804565b9350610870818560208601610814565b6108798161083c565b840191505092915050565b5f604083015f8301516108995f8601826107eb565b50602083015184820360208601526108b1828261084c565b9150508091505092915050565b5f6040820190508181035f8301526108d68185610884565b905081810360208301526108ea8184610884565b90509392505050565b5f8115159050919050565b610907816108f3565b82525050565b602082015f8201516109215f8501826108fe565b50505050565b5f606083015f83015161093c5f8601826107eb565b5060208301518482036020860152610954828261084c565b9150506040830151610969604086018261090d565b508091505092915050565b5f6040820190508181035f83015261098c8185610884565b905081810360208301526109a08184610927565b90509392505050565b5f6020820190508181035f8301526109c18184610884565b905092915050565b5f80604083850312156109df576109de61075d565b5b5f6109ec85828601610784565b92505060206109fd85828601610784565b9150509250929050565b5f82825260208201905092915050565b5f610a21826107fa565b610a2b8185610a07565b9350610a3b818560208601610814565b610a448161083c565b840191505092915050565b610a58816108f3565b82525050565b5f60a0820190508181035f830152610a768188610884565b90508181036020830152610a8a8187610927565b9050610a9960408301866107c3565b8181036060830152610aab8185610a17565b9050610aba6080830184610a4f565b9695505050505050565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b610b028261083c565b810181811067ffffffffffffffff82111715610b2157610b20610acc565b5b80604052505050565b5f610b33610754565b9050610b3f8282610af9565b919050565b5f67ffffffffffffffff821115610b5e57610b5d610acc565b5b610b678261083c565b9050602081019050919050565b828183375f83830152505050565b5f610b94610b8f84610b44565b610b2a565b905082815260208101848484011115610bb057610baf610ac8565b5b610bbb848285610b74565b509392505050565b5f82601f830112610bd757610bd6610ac4565b5b8135610be7848260208601610b82565b91505092915050565b5f60208284031215610c0557610c0461075d565b5b5f82013567ffffffffffffffff811115610c2257610c21610761565b5b610c2e84828501610bc3565b91505092915050565b5f6040820190508181035f830152610c4f8185610a17565b9050610c5e60208301846107c3565b9392505050565b5f6020820190508181035f830152610c7d8184610927565b905092915050565b5f604082019050610c985f8301856107c3565b610ca560208301846107c3565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610ce382610765565b9150610cee83610765565b9250828201905080821115610d0657610d05610cac565b5b9291505056fea2646970667358221220e3889d05f9a166b91391574ab82b4dac305987a0962eb279cd01f524cb7ded2464736f6c63430008170033"
+    "0x608060405234801561000f575f80fd5b506110228061001d5f395ff3fe608060405234801561000f575f80fd5b50600436106100b2575f3560e01c8063811d9aa31161006f578063811d9aa314610194578063879896af146101b2578063c567c2f3146101e3578063d6c1a03e14610201578063e0f7c60414610232578063fa1fac8f14610251576100b2565b8063389e9102146100b657806340e27b10146100e657806353fd1043146101055780636456bc7914610124578063730fe90e1461014257806373b10c0f14610172575b5f80fd5b6100d060048036038101906100cb9190610923565b61026f565b6040516100dd919061095d565b60405180910390f35b6100ee610278565b6040516100fc929190610a49565b60405180910390f35b61010d610330565b60405161011b929190610aff565b60405180910390f35b61012c6103ff565b6040516101399190610b34565b60405180910390f35b61015c60048036038101906101579190610b54565b610457565b604051610169919061095d565b60405180910390f35b61017a61046c565b60405161018b959493929190610be9565b60405180910390f35b61019c610580565b6040516101a99190610b34565b60405180910390f35b6101cc60048036038101906101c79190610d7b565b6105d8565b6040516101da929190610dc2565b60405180910390f35b6101eb6105e7565b6040516101f89190610df0565b60405180910390f35b61021b60048036038101906102169190610b54565b610656565b604051610229929190610e10565b60405180910390f35b61023a610665565b604051610248929190610aff565b60405180910390f35b61025961072a565b6040516102669190610f3f565b60405180910390f35b5f819050919050565b61028061088c565b61028861088c565b5f6040518060400160405280600181526020016040518060400160405280601081526020017f596f7520617265206e756d62657220310000000000000000000000000000000081525081525090505f6040518060400160405280600281526020016040518060400160405280601081526020017f596f7520617265206e756d626572203200000000000000000000000000000000815250815250905081819350935050509091565b61033861088c565b6103406108a5565b5f6040518060400160405280600181526020016040518060400160405280601081526020017f596f7520617265206e756d62657220310000000000000000000000000000000081525081525090505f6040518060600160405280600281526020016040518060400160405280601081526020017f596f7520617265206e756d6265722032000000000000000000000000000000008152508152602001604051806020016040528060011515815250815250905081819350935050509091565b61040761088c565b6040518060400160405280600181526020016040518060400160405280601081526020017f596f7520617265206e756d626572203100000000000000000000000000000000815250815250905090565b5f81836104649190610f8c565b905092915050565b61047461088c565b61047c6108a5565b5f60605f6040518060400160405280600181526020016040518060400160405280601081526020017f596f7520617265206e756d62657220310000000000000000000000000000000081525081525094505f6040518060600160405280600281526020016040518060400160405280601081526020017f596f7520617265206e756d62657220320000000000000000000000000000000081525081526020016040518060200160405280600115158152508152509050858160015f6040518060400160405280601381526020017f52657475726e5479706573436f6e7472616374000000000000000000000000008152509095509550955095509550509091929394565b61058861088c565b6040518060400160405280600181526020016040518060400160405280601081526020017f596f7520617265206e756d626572203100000000000000000000000000000000815250815250905090565b60605f82600291509150915091565b6105ef6108a5565b6040518060600160405280600181526020016040518060400160405280601081526020017f596f7520617265206e756d6265722031000000000000000000000000000000008152508152602001604051806020016040528060011515815250815250905090565b5f808284915091509250929050565b61066d61088c565b6106756108a5565b6040518060400160405280600181526020016040518060400160405280601081526020017f596f7520617265206e756d62657220310000000000000000000000000000000081525081525091506040518060600160405280600281526020016040518060400160405280601081526020017f596f7520617265206e756d626572203200000000000000000000000000000000815250815260200160405180602001604052806001151581525081525090509091565b60605f600267ffffffffffffffff81111561074857610747610c57565b5b60405190808252806020026020018201604052801561078157816020015b61076e6108a5565b8152602001906001900390816107665790505b5090506040518060600160405280600181526020016040518060400160405280601081526020017f596f7520617265206e756d6265722031000000000000000000000000000000008152508152602001604051806020016040528060011515815250815250815f815181106107f9576107f8610fbf565b5b60200260200101819052506040518060600160405280600281526020016040518060400160405280601081526020017f596f7520617265206e756d62657220320000000000000000000000000000000081525081526020016040518060200160405280600115158152508152508160018151811061087a57610879610fbf565b5b60200260200101819052508091505090565b60405180604001604052805f8152602001606081525090565b60405180606001604052805f8152602001606081526020016108c56108cb565b81525090565b60405180602001604052805f151581525090565b5f604051905090565b5f80fd5b5f80fd5b5f819050919050565b610902816108f0565b811461090c575f80fd5b50565b5f8135905061091d816108f9565b92915050565b5f60208284031215610938576109376108e8565b5b5f6109458482850161090f565b91505092915050565b610957816108f0565b82525050565b5f6020820190506109705f83018461094e565b92915050565b61097f816108f0565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156109bc5780820151818401526020810190506109a1565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6109e182610985565b6109eb818561098f565b93506109fb81856020860161099f565b610a04816109c7565b840191505092915050565b5f604083015f830151610a245f860182610976565b5060208301518482036020860152610a3c82826109d7565b9150508091505092915050565b5f6040820190508181035f830152610a618185610a0f565b90508181036020830152610a758184610a0f565b90509392505050565b5f8115159050919050565b610a9281610a7e565b82525050565b602082015f820151610aac5f850182610a89565b50505050565b5f606083015f830151610ac75f860182610976565b5060208301518482036020860152610adf82826109d7565b9150506040830151610af46040860182610a98565b508091505092915050565b5f6040820190508181035f830152610b178185610a0f565b90508181036020830152610b2b8184610ab2565b90509392505050565b5f6020820190508181035f830152610b4c8184610a0f565b905092915050565b5f8060408385031215610b6a57610b696108e8565b5b5f610b778582860161090f565b9250506020610b888582860161090f565b9150509250929050565b5f82825260208201905092915050565b5f610bac82610985565b610bb68185610b92565b9350610bc681856020860161099f565b610bcf816109c7565b840191505092915050565b610be381610a7e565b82525050565b5f60a0820190508181035f830152610c018188610a0f565b90508181036020830152610c158187610ab2565b9050610c24604083018661094e565b8181036060830152610c368185610ba2565b9050610c456080830184610bda565b9695505050505050565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b610c8d826109c7565b810181811067ffffffffffffffff82111715610cac57610cab610c57565b5b80604052505050565b5f610cbe6108df565b9050610cca8282610c84565b919050565b5f67ffffffffffffffff821115610ce957610ce8610c57565b5b610cf2826109c7565b9050602081019050919050565b828183375f83830152505050565b5f610d1f610d1a84610ccf565b610cb5565b905082815260208101848484011115610d3b57610d3a610c53565b5b610d46848285610cff565b509392505050565b5f82601f830112610d6257610d61610c4f565b5b8135610d72848260208601610d0d565b91505092915050565b5f60208284031215610d9057610d8f6108e8565b5b5f82013567ffffffffffffffff811115610dad57610dac6108ec565b5b610db984828501610d4e565b91505092915050565b5f6040820190508181035f830152610dda8185610ba2565b9050610de9602083018461094e565b9392505050565b5f6020820190508181035f830152610e088184610ab2565b905092915050565b5f604082019050610e235f83018561094e565b610e30602083018461094e565b9392505050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f606083015f830151610e755f860182610976565b5060208301518482036020860152610e8d82826109d7565b9150506040830151610ea26040860182610a98565b508091505092915050565b5f610eb88383610e60565b905092915050565b5f602082019050919050565b5f610ed682610e37565b610ee08185610e41565b935083602082028501610ef285610e51565b805f5b85811015610f2d5784840389528151610f0e8582610ead565b9450610f1983610ec0565b925060208a01995050600181019050610ef5565b50829750879550505050505092915050565b5f6020820190508181035f830152610f578184610ecc565b905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610f96826108f0565b9150610fa1836108f0565b9250828201905080821115610fb957610fb8610f5f565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffdfea26469706673582212201073f1e3b57139bd7e41b1d49f803a4937972503b2fbf518ee39e85c8b65807864736f6c63430008170033"
 )
 
 
@@ -743,7 +802,7 @@ class ReturnTypesContract(Contract):
     """A web3.py Contract class for the ReturnTypes contract."""
 
     abi: ABI = returntypes_abi
-    bytecode: bytes = HexBytes(returntypes_bytecode)
+    bytecode: bytes | None = try_bytecode_hexbytes(returntypes_bytecode, "returntypes")
 
     def __init__(self, address: ChecksumAddress | None = None) -> None:
         try:
diff --git a/pypechain/test/return_types/types/utilities.py b/pypechain/test/return_types/types/utilities.py
index 00b87d9d..6f8f57c0 100644
--- a/pypechain/test/return_types/types/utilities.py
+++ b/pypechain/test/return_types/types/utilities.py
@@ -6,9 +6,10 @@
 from __future__ import annotations
 
 from dataclasses import fields, is_dataclass
-from typing import Any, Tuple, TypeVar, cast
+from typing import Any, Iterable, Tuple, TypeVar, cast, get_args
 
 from eth_utils.abi import collapse_if_tuple
+from hexbytes import HexBytes
 from web3.types import ABIFunction
 
 T = TypeVar("T")
@@ -23,6 +24,8 @@ def tuple_to_dataclass(cls: type[T], structs: dict[str, Any], tuple_data: Any |
     ----------
     cls: type[T]
         The dataclass type to which the tuple data is to be converted.
+    structs: dict[str, Any]
+        Mapping from a struct name (key) to the run-time type definition (value).
     tuple_data: Any | Tuple[Any, ...]
         A tuple (or nested tuple) of values to convert into a dataclass instance.
 
@@ -102,13 +105,35 @@ def rename_returned_types(
             raw_values = (raw_values,)
 
         # Convert the tuple to the dataclass instance using the utility function
-        converted_values = tuple(
-            tuple_to_dataclass(return_type, structs, value) for return_type, value in zip(return_types, raw_values)
-        )
+        converted_values = []
+        for return_type, value in zip(return_types, raw_values):
+            if type(return_type) == type(list[Any]):  # pylint: disable=unidiomatic-typecheck
+                raise NotImplementedError("Multiple return values of type list[...] is not supported.")
+            converted_values.append(tuple_to_dataclass(return_type, structs, value))
+        converted_values = tuple(converted_values)
 
         return converted_values
 
-    # cover case of single return value
+    # cover case of single return type
+    # single return type is a list of SomeType, aka `list[SomeType]`
+    if type(return_types) == type(list[Any]):  # pylint: disable=unidiomatic-typecheck
+        inner_types = get_args(return_types)
+        # make sure there is only one inner type
+        if len(inner_types) != 1:
+            raise NotImplementedError("Only a single inner type in list[...] is supported")
+        inner_type = inner_types[0]
+        # make sure the type is not also a list
+        if type(inner_type) == type(list[Any]):  # pylint: disable=unidiomatic-typecheck
+            raise NotImplementedError("Type list[list[...]] is not supported.")
+        # type narrowing
+        assert isinstance(raw_values, Iterable)
+        # loop over inner values & convert those to dataclasses
+        converted_value = []
+        for value in raw_values:
+            converted_value.append(tuple_to_dataclass(inner_type, structs, value))
+        return tuple(converted_value)
+
+    # single return type is a standard type or dataclass
     converted_value = tuple_to_dataclass(return_types, structs, raw_values)
     return converted_value
 
@@ -134,3 +159,28 @@ def get_abi_input_types(abi: ABIFunction) -> list[str]:
     if "inputs" not in abi and (abi.get("type") == "fallback" or abi.get("type") == "receive"):
         return []
     return [collapse_if_tuple(cast(dict[str, Any], arg)) for arg in abi.get("inputs", [])]
+
+
+def try_bytecode_hexbytes(in_bytecode: Any, contract_name: str | None = None) -> HexBytes | None:
+    """Attempts to convert bytecode input to HexBytes. Returns None if it fails.
+
+    Parameters
+    ----------
+    in_bytecode : Any
+        The bytecode to attempt to convert to HexBytes
+    contract_name : str | None, optional
+        The name of the contract being deployed. Used for better warning printing.
+
+    Returns
+    -------
+    HexBytes | None
+        The HexBytes if it succeeds, otherwise None
+    """
+    try:
+        return HexBytes(in_bytecode)
+    except Exception as e:  # pylint: disable=broad-except
+        if contract_name is None:
+            print(f"Warning: failed to convert bytecode to HexBytes: {e}")
+        else:
+            print(f"Warning: failed to convert bytecode for {contract_name} to HexBytes: {e}")
+        return None
diff --git a/pypechain/test/structs/README.md b/pypechain/test/structs/README.md
index 186f4276..d9a88a0d 100644
--- a/pypechain/test/structs/README.md
+++ b/pypechain/test/structs/README.md
@@ -1,4 +1,4 @@
-## Generate ABIs
+# Generate ABIs
 
 Install [`solc`](https://docs.soliditylang.org/en/latest/installing-solidity.html).
 
@@ -6,6 +6,8 @@ If pytest fails to run while editing tests, you'll need to recompile the contrac
 this directory run:
 
 ```bash
-rm abis/Structs.json
-solc contracts/Structs.sol --combined-json abi,bin,metadata >> abis/Structs.json
+solc contracts/IStructs.sol --combined-json abi,bin,metadata > abis/IStructs.json
+solc contracts/StructsA.sol --combined-json abi,bin,metadata > abis/StructsA.json
+solc contracts/StructsB.sol --combined-json abi,bin,metadata > abis/StructsB.json
+solc contracts/StructsC.sol --combined-json abi,bin,metadata > abis/StructsC.json
 ```
diff --git a/pypechain/test/structs/abis/IStructs.json b/pypechain/test/structs/abis/IStructs.json
index 74669f16..c7a63b84 100644
--- a/pypechain/test/structs/abis/IStructs.json
+++ b/pypechain/test/structs/abis/IStructs.json
@@ -3,7 +3,7 @@
     "pypechain/test/structs/contracts/IStructs.sol:IStructs": {
       "abi": [],
       "bin": "",
-      "metadata": "{\"compiler\":{\"version\":\"0.8.23+commit.f704f362\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"pypechain/test/structs/contracts/IStructs.sol\":\"IStructs\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"pypechain/test/structs/contracts/IStructs.sol\":{\"keccak256\":\"0xb8fcef7985e0751b13a0f54d1825f3cfc441e16b825b7bc662f0aafd6f3448a9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://32c4f2f59180124e2029364e308de18c18824c7ea2b53706736a30b4cb8f3f68\",\"dweb:/ipfs/QmSxWkn9MLa9s9rmBPGwzj6qfRtErHuMFuj6eP3WJW1jiR\"]}},\"version\":1}"
+      "metadata": "{\"compiler\":{\"version\":\"0.8.23+commit.f704f362\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"pypechain/test/structs/contracts/IStructs.sol\":\"IStructs\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"pypechain/test/structs/contracts/IStructs.sol\":{\"keccak256\":\"0xc007fcb8b79a776755256f2eff53653e10f375dafe9b28e19eb2a7aad88b2808\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ebd717b9d6ac40db7802a2593a9ae7e1b20dfa5d35f425aeef0d752c2e84fc7e\",\"dweb:/ipfs/QmY2KJvXZKiB6fkZHPojH69NaLQXhporkTGTtE4MSX5Em5\"]}},\"version\":1}"
     }
   },
   "version": "0.8.23+commit.f704f362.Darwin.appleclang"
diff --git a/pypechain/test/structs/abis/StructsA.json b/pypechain/test/structs/abis/StructsA.json
index 83f5fd44..d8a5cb5b 100644
--- a/pypechain/test/structs/abis/StructsA.json
+++ b/pypechain/test/structs/abis/StructsA.json
@@ -3,7 +3,7 @@
     "pypechain/test/structs/contracts/IStructs.sol:IStructs": {
       "abi": [],
       "bin": "",
-      "metadata": "{\"compiler\":{\"version\":\"0.8.23+commit.f704f362\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"pypechain/test/structs/contracts/IStructs.sol\":\"IStructs\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"pypechain/test/structs/contracts/IStructs.sol\":{\"keccak256\":\"0xb8fcef7985e0751b13a0f54d1825f3cfc441e16b825b7bc662f0aafd6f3448a9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://32c4f2f59180124e2029364e308de18c18824c7ea2b53706736a30b4cb8f3f68\",\"dweb:/ipfs/QmSxWkn9MLa9s9rmBPGwzj6qfRtErHuMFuj6eP3WJW1jiR\"]}},\"version\":1}"
+      "metadata": "{\"compiler\":{\"version\":\"0.8.23+commit.f704f362\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"pypechain/test/structs/contracts/IStructs.sol\":\"IStructs\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"pypechain/test/structs/contracts/IStructs.sol\":{\"keccak256\":\"0xc007fcb8b79a776755256f2eff53653e10f375dafe9b28e19eb2a7aad88b2808\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ebd717b9d6ac40db7802a2593a9ae7e1b20dfa5d35f425aeef0d752c2e84fc7e\",\"dweb:/ipfs/QmY2KJvXZKiB6fkZHPojH69NaLQXhporkTGTtE4MSX5Em5\"]}},\"version\":1}"
     },
     "pypechain/test/structs/contracts/StructsA.sol:StructsA": {
       "abi": [
@@ -95,8 +95,8 @@
           "type": "function"
         }
       ],
-      "bin": "608060405234801561000f575f80fd5b506104558061001d5f395ff3fe608060405234801561000f575f80fd5b506004361061003f575f3560e01c806311ba731f146100435780636456bc7914610061578063c567c2f31461007f575b5f80fd5b61004b61009d565b6040516100589190610304565b60405180910390f35b6100696100f5565b604051610076919061035e565b60405180910390f35b61008761014d565b60405161009491906103ff565b60405180910390f35b6100a56101bc565b6040518060400160405280600181526020016040518060400160405280601081526020017f596f7520617265206e756d626572203100000000000000000000000000000000815250815250905090565b6100fd6101d5565b6040518060400160405280600181526020016040518060400160405280601081526020017f596f7520617265206e756d626572203100000000000000000000000000000000815250815250905090565b6101556101ee565b6040518060600160405280600181526020016040518060400160405280601081526020017f596f7520617265206e756d6265722031000000000000000000000000000000008152508152602001604051806020016040528060011515815250815250905090565b60405180604001604052805f8152602001606081525090565b60405180604001604052805f8152602001606081525090565b60405180606001604052805f81526020016060815260200161020e610214565b81525090565b60405180602001604052805f151581525090565b5f819050919050565b61023a81610228565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561027757808201518184015260208101905061025c565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61029c82610240565b6102a6818561024a565b93506102b681856020860161025a565b6102bf81610282565b840191505092915050565b5f604083015f8301516102df5f860182610231565b50602083015184820360208601526102f78282610292565b9150508091505092915050565b5f6020820190508181035f83015261031c81846102ca565b905092915050565b5f604083015f8301516103395f860182610231565b50602083015184820360208601526103518282610292565b9150508091505092915050565b5f6020820190508181035f8301526103768184610324565b905092915050565b5f8115159050919050565b6103928161037e565b82525050565b602082015f8201516103ac5f850182610389565b50505050565b5f606083015f8301516103c75f860182610231565b50602083015184820360208601526103df8282610292565b91505060408301516103f46040860182610398565b508091505092915050565b5f6020820190508181035f83015261041781846103b2565b90509291505056fea264697066735822122083246da06bca51bffc4bf245d9e0f6c1c617d3e52709030d0f1f175dbc881b5a64736f6c63430008170033",
-      "metadata": "{\"compiler\":{\"version\":\"0.8.23+commit.f704f362\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"singleNestedStruct\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"intVal\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"strVal\",\"type\":\"string\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"boolVal\",\"type\":\"bool\"}],\"internalType\":\"struct IStructs.InnerStruct\",\"name\":\"innerStruct\",\"type\":\"tuple\"}],\"internalType\":\"struct IStructs.NestedStruct\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"singleSimpleStruct\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"intVal\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"strVal\",\"type\":\"string\"}],\"internalType\":\"struct IStructs.SimpleStruct\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"structA\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"intVal\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"strVal\",\"type\":\"string\"}],\"internalType\":\"struct StructsA.AStruct\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"pypechain/test/structs/contracts/StructsA.sol\":\"StructsA\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"pypechain/test/structs/contracts/IStructs.sol\":{\"keccak256\":\"0xb8fcef7985e0751b13a0f54d1825f3cfc441e16b825b7bc662f0aafd6f3448a9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://32c4f2f59180124e2029364e308de18c18824c7ea2b53706736a30b4cb8f3f68\",\"dweb:/ipfs/QmSxWkn9MLa9s9rmBPGwzj6qfRtErHuMFuj6eP3WJW1jiR\"]},\"pypechain/test/structs/contracts/StructsA.sol\":{\"keccak256\":\"0x9d2e2cbb0bf6bdd619849081e6cc05f17a342ccf1e25789448de586b0fa288bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://dd6336eb2b8ab147a7945ab23994dfd21c7355c6664bc150f889764df50effd3\",\"dweb:/ipfs/QmZsXTbGmcHiKVhHnmE8kHomPVNHeJTtTSBo9pQJEyBB3v\"]}},\"version\":1}"
+      "bin": "608060405234801561000f575f80fd5b506104558061001d5f395ff3fe608060405234801561000f575f80fd5b506004361061003f575f3560e01c806311ba731f146100435780636456bc7914610061578063c567c2f31461007f575b5f80fd5b61004b61009d565b6040516100589190610304565b60405180910390f35b6100696100f5565b604051610076919061035e565b60405180910390f35b61008761014d565b60405161009491906103ff565b60405180910390f35b6100a56101bc565b6040518060400160405280600181526020016040518060400160405280601081526020017f596f7520617265206e756d626572203100000000000000000000000000000000815250815250905090565b6100fd6101d5565b6040518060400160405280600181526020016040518060400160405280601081526020017f596f7520617265206e756d626572203100000000000000000000000000000000815250815250905090565b6101556101ee565b6040518060600160405280600181526020016040518060400160405280601081526020017f596f7520617265206e756d6265722031000000000000000000000000000000008152508152602001604051806020016040528060011515815250815250905090565b60405180604001604052805f8152602001606081525090565b60405180604001604052805f8152602001606081525090565b60405180606001604052805f81526020016060815260200161020e610214565b81525090565b60405180602001604052805f151581525090565b5f819050919050565b61023a81610228565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561027757808201518184015260208101905061025c565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61029c82610240565b6102a6818561024a565b93506102b681856020860161025a565b6102bf81610282565b840191505092915050565b5f604083015f8301516102df5f860182610231565b50602083015184820360208601526102f78282610292565b9150508091505092915050565b5f6020820190508181035f83015261031c81846102ca565b905092915050565b5f604083015f8301516103395f860182610231565b50602083015184820360208601526103518282610292565b9150508091505092915050565b5f6020820190508181035f8301526103768184610324565b905092915050565b5f8115159050919050565b6103928161037e565b82525050565b602082015f8201516103ac5f850182610389565b50505050565b5f606083015f8301516103c75f860182610231565b50602083015184820360208601526103df8282610292565b91505060408301516103f46040860182610398565b508091505092915050565b5f6020820190508181035f83015261041781846103b2565b90509291505056fea2646970667358221220a15c6d8167c125a327fdf2203a61e80b4eb9bf7b1b303817bb771333d8b10fd564736f6c63430008170033",
+      "metadata": "{\"compiler\":{\"version\":\"0.8.23+commit.f704f362\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"singleNestedStruct\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"intVal\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"strVal\",\"type\":\"string\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"boolVal\",\"type\":\"bool\"}],\"internalType\":\"struct IStructs.InnerStruct\",\"name\":\"innerStruct\",\"type\":\"tuple\"}],\"internalType\":\"struct IStructs.NestedStruct\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"singleSimpleStruct\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"intVal\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"strVal\",\"type\":\"string\"}],\"internalType\":\"struct IStructs.SimpleStruct\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"structA\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"intVal\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"strVal\",\"type\":\"string\"}],\"internalType\":\"struct StructsA.AStruct\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"pypechain/test/structs/contracts/StructsA.sol\":\"StructsA\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"pypechain/test/structs/contracts/IStructs.sol\":{\"keccak256\":\"0xc007fcb8b79a776755256f2eff53653e10f375dafe9b28e19eb2a7aad88b2808\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ebd717b9d6ac40db7802a2593a9ae7e1b20dfa5d35f425aeef0d752c2e84fc7e\",\"dweb:/ipfs/QmY2KJvXZKiB6fkZHPojH69NaLQXhporkTGTtE4MSX5Em5\"]},\"pypechain/test/structs/contracts/StructsA.sol\":{\"keccak256\":\"0x832bce695d4ff82a5bfb85589cf94b11a68b4a61ac2845c3e4ecc7246b42f706\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f8ee6f323c98e04a5b1117b2cf444674a1886c6a751326db0cf6819df5faea43\",\"dweb:/ipfs/QmP8Z8bd14MdxVpNZbgbBRoXTxviestCJy5PNyeS8PDwz3\"]}},\"version\":1}"
     }
   },
   "version": "0.8.23+commit.f704f362.Darwin.appleclang"
diff --git a/pypechain/test/structs/abis/StructsB.json b/pypechain/test/structs/abis/StructsB.json
index 62528d1c..86e79b73 100644
--- a/pypechain/test/structs/abis/StructsB.json
+++ b/pypechain/test/structs/abis/StructsB.json
@@ -3,7 +3,7 @@
     "pypechain/test/structs/contracts/IStructs.sol:IStructs": {
       "abi": [],
       "bin": "",
-      "metadata": "{\"compiler\":{\"version\":\"0.8.23+commit.f704f362\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"pypechain/test/structs/contracts/IStructs.sol\":\"IStructs\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"pypechain/test/structs/contracts/IStructs.sol\":{\"keccak256\":\"0xb8fcef7985e0751b13a0f54d1825f3cfc441e16b825b7bc662f0aafd6f3448a9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://32c4f2f59180124e2029364e308de18c18824c7ea2b53706736a30b4cb8f3f68\",\"dweb:/ipfs/QmSxWkn9MLa9s9rmBPGwzj6qfRtErHuMFuj6eP3WJW1jiR\"]}},\"version\":1}"
+      "metadata": "{\"compiler\":{\"version\":\"0.8.23+commit.f704f362\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"pypechain/test/structs/contracts/IStructs.sol\":\"IStructs\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"pypechain/test/structs/contracts/IStructs.sol\":{\"keccak256\":\"0xc007fcb8b79a776755256f2eff53653e10f375dafe9b28e19eb2a7aad88b2808\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ebd717b9d6ac40db7802a2593a9ae7e1b20dfa5d35f425aeef0d752c2e84fc7e\",\"dweb:/ipfs/QmY2KJvXZKiB6fkZHPojH69NaLQXhporkTGTtE4MSX5Em5\"]}},\"version\":1}"
     },
     "pypechain/test/structs/contracts/StructsB.sol:StructsB": {
       "abi": [
@@ -52,8 +52,8 @@
           "type": "function"
         }
       ],
-      "bin": "608060405234801561000f575f80fd5b506102b38061001d5f395ff3fe608060405234801561000f575f80fd5b5060043610610034575f3560e01c8063389e9102146100385780636456bc7914610068575b5f80fd5b610052600480360381019061004d9190610137565b610086565b60405161005f9190610171565b60405180910390f35b61007061008f565b60405161007d919061025d565b60405180910390f35b5f819050919050565b6100976100e7565b6040518060400160405280600181526020016040518060400160405280601081526020017f596f7520617265206e756d626572203100000000000000000000000000000000815250815250905090565b60405180604001604052805f8152602001606081525090565b5f80fd5b5f819050919050565b61011681610104565b8114610120575f80fd5b50565b5f813590506101318161010d565b92915050565b5f6020828403121561014c5761014b610100565b5b5f61015984828501610123565b91505092915050565b61016b81610104565b82525050565b5f6020820190506101845f830184610162565b92915050565b61019381610104565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156101d05780820151818401526020810190506101b5565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6101f582610199565b6101ff81856101a3565b935061020f8185602086016101b3565b610218816101db565b840191505092915050565b5f604083015f8301516102385f86018261018a565b506020830151848203602086015261025082826101eb565b9150508091505092915050565b5f6020820190508181035f8301526102758184610223565b90509291505056fea264697066735822122083fc34c74e95902d047bd636648dd476b82838e3cf5193bf769c9272dee0c39064736f6c63430008170033",
-      "metadata": "{\"compiler\":{\"version\":\"0.8.23+commit.f704f362\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"noNameSingleValue\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"singleSimpleStruct\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"intVal\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"strVal\",\"type\":\"string\"}],\"internalType\":\"struct IStructs.SimpleStruct\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"pypechain/test/structs/contracts/StructsB.sol\":\"StructsB\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"pypechain/test/structs/contracts/IStructs.sol\":{\"keccak256\":\"0xb8fcef7985e0751b13a0f54d1825f3cfc441e16b825b7bc662f0aafd6f3448a9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://32c4f2f59180124e2029364e308de18c18824c7ea2b53706736a30b4cb8f3f68\",\"dweb:/ipfs/QmSxWkn9MLa9s9rmBPGwzj6qfRtErHuMFuj6eP3WJW1jiR\"]},\"pypechain/test/structs/contracts/StructsB.sol\":{\"keccak256\":\"0x48b4e44304f812fb04a209373cc72e5f0adab54da7fb465c2d3139430780432f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b75967d7e9793cf548400f2c80f256cd4a39bea8076778c8efe5b2a513877f05\",\"dweb:/ipfs/QmRoNAyWqjA2uWpLsu24ZWnTBrGLxwnqqk2xc7Zqrtg9Va\"]}},\"version\":1}"
+      "bin": "608060405234801561000f575f80fd5b506102b38061001d5f395ff3fe608060405234801561000f575f80fd5b5060043610610034575f3560e01c8063389e9102146100385780636456bc7914610068575b5f80fd5b610052600480360381019061004d9190610137565b610086565b60405161005f9190610171565b60405180910390f35b61007061008f565b60405161007d919061025d565b60405180910390f35b5f819050919050565b6100976100e7565b6040518060400160405280600181526020016040518060400160405280601081526020017f596f7520617265206e756d626572203100000000000000000000000000000000815250815250905090565b60405180604001604052805f8152602001606081525090565b5f80fd5b5f819050919050565b61011681610104565b8114610120575f80fd5b50565b5f813590506101318161010d565b92915050565b5f6020828403121561014c5761014b610100565b5b5f61015984828501610123565b91505092915050565b61016b81610104565b82525050565b5f6020820190506101845f830184610162565b92915050565b61019381610104565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156101d05780820151818401526020810190506101b5565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6101f582610199565b6101ff81856101a3565b935061020f8185602086016101b3565b610218816101db565b840191505092915050565b5f604083015f8301516102385f86018261018a565b506020830151848203602086015261025082826101eb565b9150508091505092915050565b5f6020820190508181035f8301526102758184610223565b90509291505056fea2646970667358221220352d075827d41fbea731eb01becf07d37fe207c4d0380dc5e6cc1d12d810ec4864736f6c63430008170033",
+      "metadata": "{\"compiler\":{\"version\":\"0.8.23+commit.f704f362\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"noNameSingleValue\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"singleSimpleStruct\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"intVal\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"strVal\",\"type\":\"string\"}],\"internalType\":\"struct IStructs.SimpleStruct\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"pypechain/test/structs/contracts/StructsB.sol\":\"StructsB\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"pypechain/test/structs/contracts/IStructs.sol\":{\"keccak256\":\"0xc007fcb8b79a776755256f2eff53653e10f375dafe9b28e19eb2a7aad88b2808\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ebd717b9d6ac40db7802a2593a9ae7e1b20dfa5d35f425aeef0d752c2e84fc7e\",\"dweb:/ipfs/QmY2KJvXZKiB6fkZHPojH69NaLQXhporkTGTtE4MSX5Em5\"]},\"pypechain/test/structs/contracts/StructsB.sol\":{\"keccak256\":\"0x4113e5c11d741085bccb517ed14130ebcdd5320705e17c18498e561ca8732be3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3b38b8fc0fe17a1a9c800d8c24cef0a77b16e77c3fe8f902daeb59af6ce497bb\",\"dweb:/ipfs/QmU8zV64u5mwtLZtgN2AV19KT6NXy1FsjiPxB41x8dwKww\"]}},\"version\":1}"
     }
   },
   "version": "0.8.23+commit.f704f362.Darwin.appleclang"
diff --git a/pypechain/test/structs/abis/StructsC.json b/pypechain/test/structs/abis/StructsC.json
index 6aef5735..83222f04 100644
--- a/pypechain/test/structs/abis/StructsC.json
+++ b/pypechain/test/structs/abis/StructsC.json
@@ -3,7 +3,7 @@
     "pypechain/test/structs/contracts/IStructs.sol:IStructs": {
       "abi": [],
       "bin": "",
-      "metadata": "{\"compiler\":{\"version\":\"0.8.23+commit.f704f362\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"pypechain/test/structs/contracts/IStructs.sol\":\"IStructs\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"pypechain/test/structs/contracts/IStructs.sol\":{\"keccak256\":\"0xb8fcef7985e0751b13a0f54d1825f3cfc441e16b825b7bc662f0aafd6f3448a9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://32c4f2f59180124e2029364e308de18c18824c7ea2b53706736a30b4cb8f3f68\",\"dweb:/ipfs/QmSxWkn9MLa9s9rmBPGwzj6qfRtErHuMFuj6eP3WJW1jiR\"]}},\"version\":1}"
+      "metadata": "{\"compiler\":{\"version\":\"0.8.23+commit.f704f362\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"pypechain/test/structs/contracts/IStructs.sol\":\"IStructs\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"pypechain/test/structs/contracts/IStructs.sol\":{\"keccak256\":\"0xc007fcb8b79a776755256f2eff53653e10f375dafe9b28e19eb2a7aad88b2808\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ebd717b9d6ac40db7802a2593a9ae7e1b20dfa5d35f425aeef0d752c2e84fc7e\",\"dweb:/ipfs/QmY2KJvXZKiB6fkZHPojH69NaLQXhporkTGTtE4MSX5Em5\"]}},\"version\":1}"
     },
     "pypechain/test/structs/contracts/StructsC.sol:StructsC": {
       "abi": [
@@ -69,8 +69,8 @@
           "type": "function"
         }
       ],
-      "bin": "608060405234801561000f575f80fd5b506102668061001d5f395ff3fe608060405234801561000f575f80fd5b5060043610610034575f3560e01c80638012d82614610038578063fc0db1de14610056575b5f80fd5b610040610074565b60405161004d9190610198565b60405180910390f35b61005e6100a0565b60405161006b9190610217565b60405180910390f35b61007c6100d9565b604051806020016040528060405180602001604052805f1515815250815250905090565b6100a86100f2565b6040518060200160405280604051806020016040528060405180602001604052806001815250815250815250905090565b60405180602001604052806100ec61010b565b81525090565b604051806020016040528061010561011f565b81525090565b60405180602001604052805f151581525090565b6040518060200160405280610132610138565b81525090565b60405180602001604052805f81525090565b5f8115159050919050565b61015e8161014a565b82525050565b602082015f8201516101785f850182610155565b50505050565b602082015f8201516101925f850182610164565b50505050565b5f6020820190506101ab5f83018461017e565b92915050565b5f819050919050565b6101c3816101b1565b82525050565b602082015f8201516101dd5f8501826101ba565b50505050565b602082015f8201516101f75f8501826101c9565b50505050565b602082015f8201516102115f8501826101e3565b50505050565b5f60208201905061022a5f8301846101fd565b9291505056fea264697066735822122089f306237bbcaea04a1ee36f6612e404d2f6c694143dc292e96232c5c33ee04264736f6c63430008170033",
-      "metadata": "{\"compiler\":{\"version\":\"0.8.23+commit.f704f362\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"allStructsInternal\",\"outputs\":[{\"components\":[{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"innerVal\",\"type\":\"uint256\"}],\"internalType\":\"struct StructsC.InnyStruct\",\"name\":\"inner\",\"type\":\"tuple\"}],\"internalType\":\"struct StructsC.NestedStruct\",\"name\":\"nested\",\"type\":\"tuple\"}],\"internalType\":\"struct StructsC.OuterStruct\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"innerStructIsExternal\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"boolVal\",\"type\":\"bool\"}],\"internalType\":\"struct IStructs.InnerStruct\",\"name\":\"inner\",\"type\":\"tuple\"}],\"internalType\":\"struct StructsC.CStruct\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"pypechain/test/structs/contracts/StructsC.sol\":\"StructsC\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"pypechain/test/structs/contracts/IStructs.sol\":{\"keccak256\":\"0xb8fcef7985e0751b13a0f54d1825f3cfc441e16b825b7bc662f0aafd6f3448a9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://32c4f2f59180124e2029364e308de18c18824c7ea2b53706736a30b4cb8f3f68\",\"dweb:/ipfs/QmSxWkn9MLa9s9rmBPGwzj6qfRtErHuMFuj6eP3WJW1jiR\"]},\"pypechain/test/structs/contracts/StructsC.sol\":{\"keccak256\":\"0x35668001edb3f19b87b11c8738d01eb51762cbdd10399dc8658ac3eeda9a2865\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ae78611b865cbd41163475e8e1995f60a280956c725d4ae0751103c0e3ce1d96\",\"dweb:/ipfs/QmQv1B5cBovEzT2GqRhh2vVmSoJEuZ2psePsi8XiiGNm1A\"]}},\"version\":1}"
+      "bin": "608060405234801561000f575f80fd5b506102668061001d5f395ff3fe608060405234801561000f575f80fd5b5060043610610034575f3560e01c80638012d82614610038578063fc0db1de14610056575b5f80fd5b610040610074565b60405161004d9190610198565b60405180910390f35b61005e6100a0565b60405161006b9190610217565b60405180910390f35b61007c6100d9565b604051806020016040528060405180602001604052805f1515815250815250905090565b6100a86100f2565b6040518060200160405280604051806020016040528060405180602001604052806001815250815250815250905090565b60405180602001604052806100ec61010b565b81525090565b604051806020016040528061010561011f565b81525090565b60405180602001604052805f151581525090565b6040518060200160405280610132610138565b81525090565b60405180602001604052805f81525090565b5f8115159050919050565b61015e8161014a565b82525050565b602082015f8201516101785f850182610155565b50505050565b602082015f8201516101925f850182610164565b50505050565b5f6020820190506101ab5f83018461017e565b92915050565b5f819050919050565b6101c3816101b1565b82525050565b602082015f8201516101dd5f8501826101ba565b50505050565b602082015f8201516101f75f8501826101c9565b50505050565b602082015f8201516102115f8501826101e3565b50505050565b5f60208201905061022a5f8301846101fd565b9291505056fea2646970667358221220e217d698fbee3ea477990d0e8d80f2f12de2a00be6853d6609e834810c01f4de64736f6c63430008170033",
+      "metadata": "{\"compiler\":{\"version\":\"0.8.23+commit.f704f362\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"allStructsInternal\",\"outputs\":[{\"components\":[{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"innerVal\",\"type\":\"uint256\"}],\"internalType\":\"struct StructsC.InnyStruct\",\"name\":\"inner\",\"type\":\"tuple\"}],\"internalType\":\"struct StructsC.NestedStruct\",\"name\":\"nested\",\"type\":\"tuple\"}],\"internalType\":\"struct StructsC.OuterStruct\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"innerStructIsExternal\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"boolVal\",\"type\":\"bool\"}],\"internalType\":\"struct IStructs.InnerStruct\",\"name\":\"inner\",\"type\":\"tuple\"}],\"internalType\":\"struct StructsC.CStruct\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"pypechain/test/structs/contracts/StructsC.sol\":\"StructsC\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"pypechain/test/structs/contracts/IStructs.sol\":{\"keccak256\":\"0xc007fcb8b79a776755256f2eff53653e10f375dafe9b28e19eb2a7aad88b2808\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ebd717b9d6ac40db7802a2593a9ae7e1b20dfa5d35f425aeef0d752c2e84fc7e\",\"dweb:/ipfs/QmY2KJvXZKiB6fkZHPojH69NaLQXhporkTGTtE4MSX5Em5\"]},\"pypechain/test/structs/contracts/StructsC.sol\":{\"keccak256\":\"0xbf6a10f3af066f279fc7addda493e4b61e98e9dfa0592c3bb10d207196f54efc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1ba888b8bd5efc76d7b208ffa0a3ca1848f9b6a29edb2a422b31e83fcd3f0cd7\",\"dweb:/ipfs/QmdBVMYryHGWkmhG89WRgZsHtk6Dj9mHC5ofP43zVgcS4t\"]}},\"version\":1}"
     }
   },
   "version": "0.8.23+commit.f704f362.Darwin.appleclang"
diff --git a/pypechain/test/structs/contracts/IStructs.sol b/pypechain/test/structs/contracts/IStructs.sol
index 3bdb5c14..8e5b40ee 100644
--- a/pypechain/test/structs/contracts/IStructs.sol
+++ b/pypechain/test/structs/contracts/IStructs.sol
@@ -2,7 +2,6 @@
 pragma solidity ^0.8.0;
 
 interface IStructs {
-
     struct SimpleStruct {
         uint intVal;
         string strVal;
@@ -17,4 +16,4 @@ interface IStructs {
         string strVal;
         InnerStruct innerStruct;
     }
-}
\ No newline at end of file
+}
diff --git a/pypechain/test/structs/contracts/StructsA.sol b/pypechain/test/structs/contracts/StructsA.sol
index 7d9c0e8c..d94bc17e 100644
--- a/pypechain/test/structs/contracts/StructsA.sol
+++ b/pypechain/test/structs/contracts/StructsA.sol
@@ -4,28 +4,33 @@ pragma solidity ^0.8.0;
 import { IStructs } from "./IStructs.sol";
 
 contract StructsA {
-
     struct AStruct {
         uint intVal;
         string strVal;
     }
 
     function structA() public pure returns (AStruct memory) {
-        return AStruct({ intVal: 1, strVal: "You are number 1"});
+        return AStruct({ intVal: 1, strVal: "You are number 1" });
     }
 
-    function singleSimpleStruct() public pure returns (IStructs.SimpleStruct memory) {
-        return IStructs.SimpleStruct({
-            intVal: 1,
-            strVal: "You are number 1"
-        });
+    function singleSimpleStruct()
+        public
+        pure
+        returns (IStructs.SimpleStruct memory)
+    {
+        return IStructs.SimpleStruct({ intVal: 1, strVal: "You are number 1" });
     }
 
-    function singleNestedStruct() public pure returns (IStructs.NestedStruct memory) {
-        return IStructs.NestedStruct({
-            intVal: 1,
-            strVal: "You are number 1",
-            innerStruct: IStructs.InnerStruct({boolVal: true})
-        });
+    function singleNestedStruct()
+        public
+        pure
+        returns (IStructs.NestedStruct memory)
+    {
+        return
+            IStructs.NestedStruct({
+                intVal: 1,
+                strVal: "You are number 1",
+                innerStruct: IStructs.InnerStruct({ boolVal: true })
+            });
     }
-}
\ No newline at end of file
+}
diff --git a/pypechain/test/structs/contracts/StructsB.sol b/pypechain/test/structs/contracts/StructsB.sol
index 6c67f7fb..bfd60268 100644
--- a/pypechain/test/structs/contracts/StructsB.sol
+++ b/pypechain/test/structs/contracts/StructsB.sol
@@ -4,15 +4,15 @@ pragma solidity ^0.8.0;
 import { IStructs } from "./IStructs.sol";
 
 contract StructsB {
-
     function noNameSingleValue(uint x) public pure returns (uint) {
         return x;
     }
 
-    function singleSimpleStruct() public pure returns (IStructs.SimpleStruct memory) {
-        return IStructs.SimpleStruct({
-            intVal: 1,
-            strVal: "You are number 1"
-        });
+    function singleSimpleStruct()
+        public
+        pure
+        returns (IStructs.SimpleStruct memory)
+    {
+        return IStructs.SimpleStruct({ intVal: 1, strVal: "You are number 1" });
     }
-}
\ No newline at end of file
+}
diff --git a/pypechain/test/structs/contracts/StructsC.sol b/pypechain/test/structs/contracts/StructsC.sol
index d4d40b5c..0d6d2bb5 100644
--- a/pypechain/test/structs/contracts/StructsC.sol
+++ b/pypechain/test/structs/contracts/StructsC.sol
@@ -4,7 +4,6 @@ pragma solidity ^0.8.0;
 import { IStructs } from "./IStructs.sol";
 
 contract StructsC {
-
     struct CStruct {
         IStructs.InnerStruct inner;
     }
@@ -27,20 +26,13 @@ contract StructsC {
     }
 
     function allStructsInternal() public pure returns (OuterStruct memory) {
-        return OuterStruct({
-            nested: NestedStruct({
-                inner: InnyStruct({
-                    innerVal: 1
-                })
-            })
-        });
+        return
+            OuterStruct({
+                nested: NestedStruct({ inner: InnyStruct({ innerVal: 1 }) })
+            });
     }
 
     function innerStructIsExternal() public pure returns (CStruct memory) {
-        return CStruct({
-            inner: IStructs.InnerStruct({
-                boolVal: false
-            })
-        });
+        return CStruct({ inner: IStructs.InnerStruct({ boolVal: false }) });
     }
-}
\ No newline at end of file
+}
diff --git a/pypechain/test/structs/test_structs.py b/pypechain/test/structs/test_structs.py
index b69fed06..fb7a5800 100644
--- a/pypechain/test/structs/test_structs.py
+++ b/pypechain/test/structs/test_structs.py
@@ -51,4 +51,4 @@ def test_correct_files_exit(self):
 
         failed_tests = [full_path for exists, full_path in results if not exists]
 
-        assert len(failed_tests) == 0, f"Several files doen't exist: {failed_tests=}"
+        assert len(failed_tests) == 0, f"Several files don't exist: {failed_tests=}"
diff --git a/pypechain/test/structs/types/StructsAContract.py b/pypechain/test/structs/types/StructsAContract.py
index 16abd532..077156c1 100644
--- a/pypechain/test/structs/types/StructsAContract.py
+++ b/pypechain/test/structs/types/StructsAContract.py
@@ -30,7 +30,6 @@
 
 from eth_account.signers.local import LocalAccount
 from eth_typing import ChecksumAddress, HexStr
-from hexbytes import HexBytes
 from typing_extensions import Self
 from web3 import Web3
 from web3.contract.contract import Contract, ContractConstructor, ContractFunction, ContractFunctions
@@ -39,7 +38,7 @@
 
 from .IStructsTypes import InnerStruct, NestedStruct, SimpleStruct
 from .StructsATypes import AStruct
-from .utilities import rename_returned_types
+from .utilities import rename_returned_types, try_bytecode_hexbytes
 
 structs = {
     "InnerStruct": InnerStruct,
@@ -237,7 +236,7 @@ def __init__(
 )
 # pylint: disable=line-too-long
 structsa_bytecode = HexStr(
-    "0x608060405234801561000f575f80fd5b506104558061001d5f395ff3fe608060405234801561000f575f80fd5b506004361061003f575f3560e01c806311ba731f146100435780636456bc7914610061578063c567c2f31461007f575b5f80fd5b61004b61009d565b6040516100589190610304565b60405180910390f35b6100696100f5565b604051610076919061035e565b60405180910390f35b61008761014d565b60405161009491906103ff565b60405180910390f35b6100a56101bc565b6040518060400160405280600181526020016040518060400160405280601081526020017f596f7520617265206e756d626572203100000000000000000000000000000000815250815250905090565b6100fd6101d5565b6040518060400160405280600181526020016040518060400160405280601081526020017f596f7520617265206e756d626572203100000000000000000000000000000000815250815250905090565b6101556101ee565b6040518060600160405280600181526020016040518060400160405280601081526020017f596f7520617265206e756d6265722031000000000000000000000000000000008152508152602001604051806020016040528060011515815250815250905090565b60405180604001604052805f8152602001606081525090565b60405180604001604052805f8152602001606081525090565b60405180606001604052805f81526020016060815260200161020e610214565b81525090565b60405180602001604052805f151581525090565b5f819050919050565b61023a81610228565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561027757808201518184015260208101905061025c565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61029c82610240565b6102a6818561024a565b93506102b681856020860161025a565b6102bf81610282565b840191505092915050565b5f604083015f8301516102df5f860182610231565b50602083015184820360208601526102f78282610292565b9150508091505092915050565b5f6020820190508181035f83015261031c81846102ca565b905092915050565b5f604083015f8301516103395f860182610231565b50602083015184820360208601526103518282610292565b9150508091505092915050565b5f6020820190508181035f8301526103768184610324565b905092915050565b5f8115159050919050565b6103928161037e565b82525050565b602082015f8201516103ac5f850182610389565b50505050565b5f606083015f8301516103c75f860182610231565b50602083015184820360208601526103df8282610292565b91505060408301516103f46040860182610398565b508091505092915050565b5f6020820190508181035f83015261041781846103b2565b90509291505056fea264697066735822122083246da06bca51bffc4bf245d9e0f6c1c617d3e52709030d0f1f175dbc881b5a64736f6c63430008170033"
+    "0x608060405234801561000f575f80fd5b506104558061001d5f395ff3fe608060405234801561000f575f80fd5b506004361061003f575f3560e01c806311ba731f146100435780636456bc7914610061578063c567c2f31461007f575b5f80fd5b61004b61009d565b6040516100589190610304565b60405180910390f35b6100696100f5565b604051610076919061035e565b60405180910390f35b61008761014d565b60405161009491906103ff565b60405180910390f35b6100a56101bc565b6040518060400160405280600181526020016040518060400160405280601081526020017f596f7520617265206e756d626572203100000000000000000000000000000000815250815250905090565b6100fd6101d5565b6040518060400160405280600181526020016040518060400160405280601081526020017f596f7520617265206e756d626572203100000000000000000000000000000000815250815250905090565b6101556101ee565b6040518060600160405280600181526020016040518060400160405280601081526020017f596f7520617265206e756d6265722031000000000000000000000000000000008152508152602001604051806020016040528060011515815250815250905090565b60405180604001604052805f8152602001606081525090565b60405180604001604052805f8152602001606081525090565b60405180606001604052805f81526020016060815260200161020e610214565b81525090565b60405180602001604052805f151581525090565b5f819050919050565b61023a81610228565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561027757808201518184015260208101905061025c565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61029c82610240565b6102a6818561024a565b93506102b681856020860161025a565b6102bf81610282565b840191505092915050565b5f604083015f8301516102df5f860182610231565b50602083015184820360208601526102f78282610292565b9150508091505092915050565b5f6020820190508181035f83015261031c81846102ca565b905092915050565b5f604083015f8301516103395f860182610231565b50602083015184820360208601526103518282610292565b9150508091505092915050565b5f6020820190508181035f8301526103768184610324565b905092915050565b5f8115159050919050565b6103928161037e565b82525050565b602082015f8201516103ac5f850182610389565b50505050565b5f606083015f8301516103c75f860182610231565b50602083015184820360208601526103df8282610292565b91505060408301516103f46040860182610398565b508091505092915050565b5f6020820190508181035f83015261041781846103b2565b90509291505056fea2646970667358221220a15c6d8167c125a327fdf2203a61e80b4eb9bf7b1b303817bb771333d8b10fd564736f6c63430008170033"
 )
 
 
@@ -245,7 +244,7 @@ class StructsAContract(Contract):
     """A web3.py Contract class for the StructsA contract."""
 
     abi: ABI = structsa_abi
-    bytecode: bytes = HexBytes(structsa_bytecode)
+    bytecode: bytes | None = try_bytecode_hexbytes(structsa_bytecode, "structsa")
 
     def __init__(self, address: ChecksumAddress | None = None) -> None:
         try:
diff --git a/pypechain/test/structs/types/StructsBContract.py b/pypechain/test/structs/types/StructsBContract.py
index d3f3e00e..d131230f 100644
--- a/pypechain/test/structs/types/StructsBContract.py
+++ b/pypechain/test/structs/types/StructsBContract.py
@@ -30,7 +30,6 @@
 
 from eth_account.signers.local import LocalAccount
 from eth_typing import ChecksumAddress, HexStr
-from hexbytes import HexBytes
 from typing_extensions import Self
 from web3 import Web3
 from web3.contract.contract import Contract, ContractConstructor, ContractFunction, ContractFunctions
@@ -38,7 +37,7 @@
 from web3.types import ABI, BlockIdentifier, CallOverride, TxParams
 
 from .IStructsTypes import SimpleStruct
-from .utilities import dataclass_to_tuple, rename_returned_types
+from .utilities import dataclass_to_tuple, rename_returned_types, try_bytecode_hexbytes
 
 structs = {
     "SimpleStruct": SimpleStruct,
@@ -163,7 +162,7 @@ def __init__(
 )
 # pylint: disable=line-too-long
 structsb_bytecode = HexStr(
-    "0x608060405234801561000f575f80fd5b506102b38061001d5f395ff3fe608060405234801561000f575f80fd5b5060043610610034575f3560e01c8063389e9102146100385780636456bc7914610068575b5f80fd5b610052600480360381019061004d9190610137565b610086565b60405161005f9190610171565b60405180910390f35b61007061008f565b60405161007d919061025d565b60405180910390f35b5f819050919050565b6100976100e7565b6040518060400160405280600181526020016040518060400160405280601081526020017f596f7520617265206e756d626572203100000000000000000000000000000000815250815250905090565b60405180604001604052805f8152602001606081525090565b5f80fd5b5f819050919050565b61011681610104565b8114610120575f80fd5b50565b5f813590506101318161010d565b92915050565b5f6020828403121561014c5761014b610100565b5b5f61015984828501610123565b91505092915050565b61016b81610104565b82525050565b5f6020820190506101845f830184610162565b92915050565b61019381610104565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156101d05780820151818401526020810190506101b5565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6101f582610199565b6101ff81856101a3565b935061020f8185602086016101b3565b610218816101db565b840191505092915050565b5f604083015f8301516102385f86018261018a565b506020830151848203602086015261025082826101eb565b9150508091505092915050565b5f6020820190508181035f8301526102758184610223565b90509291505056fea264697066735822122083fc34c74e95902d047bd636648dd476b82838e3cf5193bf769c9272dee0c39064736f6c63430008170033"
+    "0x608060405234801561000f575f80fd5b506102b38061001d5f395ff3fe608060405234801561000f575f80fd5b5060043610610034575f3560e01c8063389e9102146100385780636456bc7914610068575b5f80fd5b610052600480360381019061004d9190610137565b610086565b60405161005f9190610171565b60405180910390f35b61007061008f565b60405161007d919061025d565b60405180910390f35b5f819050919050565b6100976100e7565b6040518060400160405280600181526020016040518060400160405280601081526020017f596f7520617265206e756d626572203100000000000000000000000000000000815250815250905090565b60405180604001604052805f8152602001606081525090565b5f80fd5b5f819050919050565b61011681610104565b8114610120575f80fd5b50565b5f813590506101318161010d565b92915050565b5f6020828403121561014c5761014b610100565b5b5f61015984828501610123565b91505092915050565b61016b81610104565b82525050565b5f6020820190506101845f830184610162565b92915050565b61019381610104565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156101d05780820151818401526020810190506101b5565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6101f582610199565b6101ff81856101a3565b935061020f8185602086016101b3565b610218816101db565b840191505092915050565b5f604083015f8301516102385f86018261018a565b506020830151848203602086015261025082826101eb565b9150508091505092915050565b5f6020820190508181035f8301526102758184610223565b90509291505056fea2646970667358221220352d075827d41fbea731eb01becf07d37fe207c4d0380dc5e6cc1d12d810ec4864736f6c63430008170033"
 )
 
 
@@ -171,7 +170,7 @@ class StructsBContract(Contract):
     """A web3.py Contract class for the StructsB contract."""
 
     abi: ABI = structsb_abi
-    bytecode: bytes = HexBytes(structsb_bytecode)
+    bytecode: bytes | None = try_bytecode_hexbytes(structsb_bytecode, "structsb")
 
     def __init__(self, address: ChecksumAddress | None = None) -> None:
         try:
diff --git a/pypechain/test/structs/types/StructsCContract.py b/pypechain/test/structs/types/StructsCContract.py
index 9624e52f..8b39c2c8 100644
--- a/pypechain/test/structs/types/StructsCContract.py
+++ b/pypechain/test/structs/types/StructsCContract.py
@@ -30,7 +30,6 @@
 
 from eth_account.signers.local import LocalAccount
 from eth_typing import ChecksumAddress, HexStr
-from hexbytes import HexBytes
 from typing_extensions import Self
 from web3 import Web3
 from web3.contract.contract import Contract, ContractConstructor, ContractFunction, ContractFunctions
@@ -39,7 +38,7 @@
 
 from .IStructsTypes import InnerStruct
 from .StructsCTypes import CStruct, InnyStruct, NestedStruct, OuterStruct
-from .utilities import rename_returned_types
+from .utilities import rename_returned_types, try_bytecode_hexbytes
 
 structs = {
     "InnyStruct": InnyStruct,
@@ -193,7 +192,7 @@ def __init__(
 )
 # pylint: disable=line-too-long
 structsc_bytecode = HexStr(
-    "0x608060405234801561000f575f80fd5b506102668061001d5f395ff3fe608060405234801561000f575f80fd5b5060043610610034575f3560e01c80638012d82614610038578063fc0db1de14610056575b5f80fd5b610040610074565b60405161004d9190610198565b60405180910390f35b61005e6100a0565b60405161006b9190610217565b60405180910390f35b61007c6100d9565b604051806020016040528060405180602001604052805f1515815250815250905090565b6100a86100f2565b6040518060200160405280604051806020016040528060405180602001604052806001815250815250815250905090565b60405180602001604052806100ec61010b565b81525090565b604051806020016040528061010561011f565b81525090565b60405180602001604052805f151581525090565b6040518060200160405280610132610138565b81525090565b60405180602001604052805f81525090565b5f8115159050919050565b61015e8161014a565b82525050565b602082015f8201516101785f850182610155565b50505050565b602082015f8201516101925f850182610164565b50505050565b5f6020820190506101ab5f83018461017e565b92915050565b5f819050919050565b6101c3816101b1565b82525050565b602082015f8201516101dd5f8501826101ba565b50505050565b602082015f8201516101f75f8501826101c9565b50505050565b602082015f8201516102115f8501826101e3565b50505050565b5f60208201905061022a5f8301846101fd565b9291505056fea264697066735822122089f306237bbcaea04a1ee36f6612e404d2f6c694143dc292e96232c5c33ee04264736f6c63430008170033"
+    "0x608060405234801561000f575f80fd5b506102668061001d5f395ff3fe608060405234801561000f575f80fd5b5060043610610034575f3560e01c80638012d82614610038578063fc0db1de14610056575b5f80fd5b610040610074565b60405161004d9190610198565b60405180910390f35b61005e6100a0565b60405161006b9190610217565b60405180910390f35b61007c6100d9565b604051806020016040528060405180602001604052805f1515815250815250905090565b6100a86100f2565b6040518060200160405280604051806020016040528060405180602001604052806001815250815250815250905090565b60405180602001604052806100ec61010b565b81525090565b604051806020016040528061010561011f565b81525090565b60405180602001604052805f151581525090565b6040518060200160405280610132610138565b81525090565b60405180602001604052805f81525090565b5f8115159050919050565b61015e8161014a565b82525050565b602082015f8201516101785f850182610155565b50505050565b602082015f8201516101925f850182610164565b50505050565b5f6020820190506101ab5f83018461017e565b92915050565b5f819050919050565b6101c3816101b1565b82525050565b602082015f8201516101dd5f8501826101ba565b50505050565b602082015f8201516101f75f8501826101c9565b50505050565b602082015f8201516102115f8501826101e3565b50505050565b5f60208201905061022a5f8301846101fd565b9291505056fea2646970667358221220e217d698fbee3ea477990d0e8d80f2f12de2a00be6853d6609e834810c01f4de64736f6c63430008170033"
 )
 
 
@@ -201,7 +200,7 @@ class StructsCContract(Contract):
     """A web3.py Contract class for the StructsC contract."""
 
     abi: ABI = structsc_abi
-    bytecode: bytes = HexBytes(structsc_bytecode)
+    bytecode: bytes | None = try_bytecode_hexbytes(structsc_bytecode, "structsc")
 
     def __init__(self, address: ChecksumAddress | None = None) -> None:
         try:
diff --git a/pypechain/test/structs/types/utilities.py b/pypechain/test/structs/types/utilities.py
index 00b87d9d..6f8f57c0 100644
--- a/pypechain/test/structs/types/utilities.py
+++ b/pypechain/test/structs/types/utilities.py
@@ -6,9 +6,10 @@
 from __future__ import annotations
 
 from dataclasses import fields, is_dataclass
-from typing import Any, Tuple, TypeVar, cast
+from typing import Any, Iterable, Tuple, TypeVar, cast, get_args
 
 from eth_utils.abi import collapse_if_tuple
+from hexbytes import HexBytes
 from web3.types import ABIFunction
 
 T = TypeVar("T")
@@ -23,6 +24,8 @@ def tuple_to_dataclass(cls: type[T], structs: dict[str, Any], tuple_data: Any |
     ----------
     cls: type[T]
         The dataclass type to which the tuple data is to be converted.
+    structs: dict[str, Any]
+        Mapping from a struct name (key) to the run-time type definition (value).
     tuple_data: Any | Tuple[Any, ...]
         A tuple (or nested tuple) of values to convert into a dataclass instance.
 
@@ -102,13 +105,35 @@ def rename_returned_types(
             raw_values = (raw_values,)
 
         # Convert the tuple to the dataclass instance using the utility function
-        converted_values = tuple(
-            tuple_to_dataclass(return_type, structs, value) for return_type, value in zip(return_types, raw_values)
-        )
+        converted_values = []
+        for return_type, value in zip(return_types, raw_values):
+            if type(return_type) == type(list[Any]):  # pylint: disable=unidiomatic-typecheck
+                raise NotImplementedError("Multiple return values of type list[...] is not supported.")
+            converted_values.append(tuple_to_dataclass(return_type, structs, value))
+        converted_values = tuple(converted_values)
 
         return converted_values
 
-    # cover case of single return value
+    # cover case of single return type
+    # single return type is a list of SomeType, aka `list[SomeType]`
+    if type(return_types) == type(list[Any]):  # pylint: disable=unidiomatic-typecheck
+        inner_types = get_args(return_types)
+        # make sure there is only one inner type
+        if len(inner_types) != 1:
+            raise NotImplementedError("Only a single inner type in list[...] is supported")
+        inner_type = inner_types[0]
+        # make sure the type is not also a list
+        if type(inner_type) == type(list[Any]):  # pylint: disable=unidiomatic-typecheck
+            raise NotImplementedError("Type list[list[...]] is not supported.")
+        # type narrowing
+        assert isinstance(raw_values, Iterable)
+        # loop over inner values & convert those to dataclasses
+        converted_value = []
+        for value in raw_values:
+            converted_value.append(tuple_to_dataclass(inner_type, structs, value))
+        return tuple(converted_value)
+
+    # single return type is a standard type or dataclass
     converted_value = tuple_to_dataclass(return_types, structs, raw_values)
     return converted_value
 
@@ -134,3 +159,28 @@ def get_abi_input_types(abi: ABIFunction) -> list[str]:
     if "inputs" not in abi and (abi.get("type") == "fallback" or abi.get("type") == "receive"):
         return []
     return [collapse_if_tuple(cast(dict[str, Any], arg)) for arg in abi.get("inputs", [])]
+
+
+def try_bytecode_hexbytes(in_bytecode: Any, contract_name: str | None = None) -> HexBytes | None:
+    """Attempts to convert bytecode input to HexBytes. Returns None if it fails.
+
+    Parameters
+    ----------
+    in_bytecode : Any
+        The bytecode to attempt to convert to HexBytes
+    contract_name : str | None, optional
+        The name of the contract being deployed. Used for better warning printing.
+
+    Returns
+    -------
+    HexBytes | None
+        The HexBytes if it succeeds, otherwise None
+    """
+    try:
+        return HexBytes(in_bytecode)
+    except Exception as e:  # pylint: disable=broad-except
+        if contract_name is None:
+            print(f"Warning: failed to convert bytecode to HexBytes: {e}")
+        else:
+            print(f"Warning: failed to convert bytecode for {contract_name} to HexBytes: {e}")
+        return None