Skip to content

Improve abstractions for Solidity ABI encoding Result types#2635

Merged
davidsemakula merged 6 commits intomasterfrom
semakula/abi-encode-improvements
Sep 14, 2025
Merged

Improve abstractions for Solidity ABI encoding Result types#2635
davidsemakula merged 6 commits intomasterfrom
semakula/abi-encode-improvements

Conversation

@davidsemakula
Copy link
Collaborator

@davidsemakula davidsemakula commented Sep 13, 2025

Summary

Follow up to #2543

  • [y] y/n | Does it introduce breaking changes?
  • [n] y/n | Is it dependent on a specific version of cargo-contract or pallet-revive?

Description

#2543 introduced a SolResultDecode trait to "describe how to decode Solidity ABI encoded data into an arbitrary Rust type depending on whether the data is for a normal/successful return or a revert".

However, in that PR no complementary SolResultEncode trait was introduced, instead SolEncode was implemented for Result<T, E> where T: SolEncode and E: SolErrorEncode. That SolEncode implementation for Result<T, E> is misleading because it gives the appearance of composability when the actual implementation is not actually composable (i.e. Solidity ABI encoding for Result types is only supported for Result types in the return position of ink! messages and constructors, not in compositions of arbitrarily complex types - see details).

This PR introduces the complementary SolResultEncode trait, and removes the misleading implementation of SolEncode for Result<T, E> such that:

  • SolResultEncode is generically implemented for all T: SolEncode
  • SolResultEncode is also implemented for Result<T, E> where T: SolEncode and E: SolErrorDecode

Checklist before requesting a review

  • I have added an entry to CHANGELOG.md
  • I have commented on my code, particularly in hard-to-understand areas
  • I have added tests that prove my fix is effective or that my feature works
  • Any dependent changes have been merged and published in downstream modules
@davidsemakula davidsemakula force-pushed the semakula/abi-encode-improvements branch from 54fa467 to a8ebcbc Compare September 13, 2025 18:53
@github-actions
Copy link

github-actions bot commented Sep 13, 2025

🦑 📈 ink! Example Contracts ‒ Changes Report 📉 🦑

⚠️ The ink! master is ahead of your branch, this might skew the comparison data below. ⚠️
These are the results when building the integration-tests/* contracts from this branch and comparing them to ink! master:

Show overview

Using the ABI denoted in the contract manifest.

Contract Upstream Size (kB) PR Size (kB) Diff (kB) Diff (%) Change
all-abi/events 19.85 19.85 0 0%
call-builder-return-value 9.163 9.163 0 0%
complex-storage-structures 4.858 4.858 0 0%
conditional-compilation 1.727 1.727 0 0%
contract-invocation 8.211 8.211 0 0%
contract-invocation/contract1 2.081 2.081 0 0%
contract-invocation/contract2 1.996 1.996 0 0%
contract-invocation/virtual_contract 4.544 4.544 0 0%
contract-invocation/virtual_contract_ver1 1.954 1.954 0 0%
contract-invocation/virtual_contract_ver2 1.966 1.966 0 0%
contract-storage 7.63 7.63 0 0%
contract-terminate 1.551 1.551 0 0%
contract-transfer 2.738 2.738 0 0%
cross-contract-calls 8.719 8.719 0 0%
cross-contract-calls/other-contract 1.775 1.775 0 0%
custom-allocator 3.275 3.275 0 0%
custom-environment 3.394 3.394 0 0%
debugging-strategies 4.445 4.445 0 0%
dns 10.423 10.423 0 0%
e2e-call-runtime 1.563 1.563 0 0%
e2e-runtime-only-backend 2.202 2.202 0 0%
erc1155 21.018 21.018 0 0%
erc20 10.899 10.899 0 0%
erc721 12.861 12.861 0 0%
events 8.873 8.873 0 0%
flipper 1.775 1.775 0 0%
fuzz-testing 1.762 1.762 0 0%
incrementer 1.288 1.288 0 0%
lang-err/call-builder 8.478 8.478 0 0%
lang-err/call-builder-delegate 3.518 3.518 0 0%
lang-err/constructors-return-value 2.442 2.442 0 0%
lang-err/contract-ref 7.02 7.02 0 0%
lang-err/integration-flipper 2.059 2.059 0 0%
lazyvec 5.714 5.714 0 0%
mapping 10.658 10.658 0 0%
mother 16.46 16.46 0 0%
multi-contract-caller 11.917 11.917 0 0%
multi-contract-caller/accumulator 1.134 1.134 0 0%
multi-contract-caller/adder 3.169 3.169 0 0%
multi-contract-caller/subber 3.173 3.173 0 0%
multisig 27.502 27.502 0 0%
overflow-safety 1.311 1.311 0 0%
own-code-hash 3.065 3.065 0 0%
payment-channel 7.995 7.995 0 0%
solidity-abi/events 12.246 12.246 0 0%
solidity-abi/fallible-setter 2.972 2.972 0 0%
solidity-abi/sol-cross-contract 6.677 6.677 0 0%
solidity-abi/sol-cross-contract/other-contract-sol 2.574 2.574 0 0%
solidity-abi/sol-encoding 2.51 2.51 0 0%
solidity-abi/solidity-calls-flipper 8.965 8.965 0 0%
solidity-abi/trait-dyn-cross-contract-calls 6.037 6.037 0 0%
solidity-abi/trait-dyn-cross-contract-calls/contracts/incrementer 2.353 2.353 0 0%
solidity-abi/trait-flipper 2.245 2.245 0 0%
sr25519-verification 0.853 0.853 0 0%
static-buffer 2.76 2.76 0 0%
storage-types 16.816 16.816 0 0%
system-precompile 10.658 10.658 0 0%
trait-dyn-cross-contract-calls 3.96 3.96 0 0%
trait-dyn-cross-contract-calls/contracts/incrementer 1.799 1.799 0 0%
trait-erc20 11.227 11.227 0 0%
trait-flipper 1.728 1.728 0 0%
trait-incrementer 1.87 1.87 0 0%
upgradeable-contracts/delegator 6.452 6.452 0 0%
upgradeable-contracts/delegator/delegatee 2.849 2.849 0 0%
upgradeable-contracts/delegator/delegatee2 2.849 2.849 0 0%
upgradeable-contracts/set-code-hash 1.723 1.723 0 0%
upgradeable-contracts/set-code-hash-migration 1.723 1.723 0 0%
upgradeable-contracts/set-code-hash-migration/migration 1.877 1.877 0 0%
upgradeable-contracts/set-code-hash-migration/updated-incrementer 1.901 1.901 0 0%
upgradeable-contracts/set-code-hash/updated-incrementer 1.675 1.675 0 0%
wildcard-selector 2.952 2.952 0 0%
Show diagram
gantt dateFormat x axisFormat x section all-abi/events : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 19850 kb : a1, 0, 19850 pr default abi - 19850 kb : a1, 0, 19850 pr sol abi - 19850 kb : a2, 0, 19850 pr all abi - 19850 kb : a3, 0, 19850 #nbsp; : a4, 0, 0 section call-builder-return-value : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 9163 kb : a1, 0, 9163 pr default abi - 9163 kb : a1, 0, 9163 pr sol abi - 0 kb : a2, 0, 0 pr all abi - 0 kb : a3, 0, 0 #nbsp; : a4, 0, 0 section complex-storage-structures : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 4858 kb : a1, 0, 4858 pr default abi - 4858 kb : a1, 0, 4858 pr sol abi - 7851 kb : a2, 0, 7851 pr all abi - 9493 kb : a3, 0, 9493 #nbsp; : a4, 0, 0 section conditional-compilation : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 1727 kb : a1, 0, 1727 pr default abi - 1727 kb : a1, 0, 1727 pr sol abi - 0 kb : a2, 0, 0 pr all abi - 0 kb : a3, 0, 0 #nbsp; : a4, 0, 0 section contract-invocation : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 8211 kb : a1, 0, 8211 pr default abi - 8211 kb : a1, 0, 8211 pr sol abi - 11267 kb : a2, 0, 11267 pr all abi - 12616 kb : a3, 0, 12616 #nbsp; : a4, 0, 0 section contract-invocation/contract1 : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 2081 kb : a1, 0, 2081 pr default abi - 2081 kb : a1, 0, 2081 pr sol abi - 2719 kb : a2, 0, 2719 pr all abi - 3425 kb : a3, 0, 3425 #nbsp; : a4, 0, 0 section contract-invocation/contract2 : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 1996 kb : a1, 0, 1996 pr default abi - 1996 kb : a1, 0, 1996 pr sol abi - 2671 kb : a2, 0, 2671 pr all abi - 3317 kb : a3, 0, 3317 #nbsp; : a4, 0, 0 section contract-invocation/virtual_contract : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 4544 kb : a1, 0, 4544 pr default abi - 4544 kb : a1, 0, 4544 pr sol abi - 7367 kb : a2, 0, 7367 pr all abi - 6919 kb : a3, 0, 6919 #nbsp; : a4, 0, 0 section contract-invocation/virtual_contract_ver1 : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 1954 kb : a1, 0, 1954 pr default abi - 1954 kb : a1, 0, 1954 pr sol abi - 2431 kb : a2, 0, 2431 pr all abi - 2821 kb : a3, 0, 2821 #nbsp; : a4, 0, 0 section contract-invocation/virtual_contract_ver2 : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 1966 kb : a1, 0, 1966 pr default abi - 1966 kb : a1, 0, 1966 pr sol abi - 2443 kb : a2, 0, 2443 pr all abi - 2848 kb : a3, 0, 2848 #nbsp; : a4, 0, 0 section contract-storage : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 7630 kb : a1, 0, 7630 pr default abi - 7630 kb : a1, 0, 7630 pr sol abi - 0 kb : a2, 0, 0 pr all abi - 0 kb : a3, 0, 0 #nbsp; : a4, 0, 0 section contract-terminate : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 1551 kb : a1, 0, 1551 pr default abi - 1551 kb : a1, 0, 1551 pr sol abi - 1517 kb : a2, 0, 1517 pr all abi - 1646 kb : a3, 0, 1646 #nbsp; : a4, 0, 0 section contract-transfer : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 2738 kb : a1, 0, 2738 pr default abi - 2738 kb : a1, 0, 2738 pr sol abi - 0 kb : a2, 0, 0 pr all abi - 3120 kb : a3, 0, 3120 #nbsp; : a4, 0, 0 section cross-contract-calls : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 8719 kb : a1, 0, 8719 pr default abi - 8719 kb : a1, 0, 8719 pr sol abi - 0 kb : a2, 0, 0 pr all abi - 0 kb : a3, 0, 0 #nbsp; : a4, 0, 0 section cross-contract-calls/other-contract : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 1775 kb : a1, 0, 1775 pr default abi - 1775 kb : a1, 0, 1775 pr sol abi - 2358 kb : a2, 0, 2358 pr all abi - 2797 kb : a3, 0, 2797 #nbsp; : a4, 0, 0 section custom-allocator : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 3275 kb : a1, 0, 3275 pr default abi - 3275 kb : a1, 0, 3275 pr sol abi - 0 kb : a2, 0, 0 pr all abi - 0 kb : a3, 0, 0 #nbsp; : a4, 0, 0 section custom-environment : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 3394 kb : a1, 0, 3394 pr default abi - 3394 kb : a1, 0, 3394 pr sol abi - 1738 kb : a2, 0, 1738 pr all abi - 3845 kb : a3, 0, 3845 #nbsp; : a4, 0, 0 section debugging-strategies : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 4445 kb : a1, 0, 4445 pr default abi - 4445 kb : a1, 0, 4445 pr sol abi - 5143 kb : a2, 0, 5143 pr all abi - 5829 kb : a3, 0, 5829 #nbsp; : a4, 0, 0 section dns : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 10423 kb : a1, 0, 10423 pr default abi - 10423 kb : a1, 0, 10423 pr sol abi - 0 kb : a2, 0, 0 pr all abi - 0 kb : a3, 0, 0 #nbsp; : a4, 0, 0 section e2e-call-runtime : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 1563 kb : a1, 0, 1563 pr default abi - 1563 kb : a1, 0, 1563 pr sol abi - 1905 kb : a2, 0, 1905 pr all abi - 2365 kb : a3, 0, 2365 #nbsp; : a4, 0, 0 section e2e-runtime-only-backend : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 2202 kb : a1, 0, 2202 pr default abi - 2202 kb : a1, 0, 2202 pr sol abi - 0 kb : a2, 0, 0 pr all abi - 0 kb : a3, 0, 0 #nbsp; : a4, 0, 0 section erc1155 : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 21018 kb : a1, 0, 21018 pr default abi - 21018 kb : a1, 0, 21018 pr sol abi - 0 kb : a2, 0, 0 pr all abi - 0 kb : a3, 0, 0 #nbsp; : a4, 0, 0 section erc20 : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 10899 kb : a1, 0, 10899 pr default abi - 10899 kb : a1, 0, 10899 pr sol abi - 0 kb : a2, 0, 0 pr all abi - 0 kb : a3, 0, 0 #nbsp; : a4, 0, 0 section erc721 : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 12861 kb : a1, 0, 12861 pr default abi - 12861 kb : a1, 0, 12861 pr sol abi - 0 kb : a2, 0, 0 pr all abi - 0 kb : a3, 0, 0 #nbsp; : a4, 0, 0 section events : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 8873 kb : a1, 0, 8873 pr default abi - 8873 kb : a1, 0, 8873 pr sol abi - 12911 kb : a2, 0, 12911 pr all abi - 19183 kb : a3, 0, 19183 #nbsp; : a4, 0, 0 section flipper : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 1775 kb : a1, 0, 1775 pr default abi - 1775 kb : a1, 0, 1775 pr sol abi - 2358 kb : a2, 0, 2358 pr all abi - 2797 kb : a3, 0, 2797 #nbsp; : a4, 0, 0 section fuzz-testing : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 1762 kb : a1, 0, 1762 pr default abi - 1762 kb : a1, 0, 1762 pr sol abi - 0 kb : a2, 0, 0 pr all abi - 0 kb : a3, 0, 0 #nbsp; : a4, 0, 0 section incrementer : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 1288 kb : a1, 0, 1288 pr default abi - 1288 kb : a1, 0, 1288 pr sol abi - 0 kb : a2, 0, 0 pr all abi - 0 kb : a3, 0, 0 #nbsp; : a4, 0, 0 section lang-err/call-builder : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 8478 kb : a1, 0, 8478 pr default abi - 8478 kb : a1, 0, 8478 pr sol abi - 0 kb : a2, 0, 0 pr all abi - 0 kb : a3, 0, 0 #nbsp; : a4, 0, 0 section lang-err/call-builder-delegate : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 3518 kb : a1, 0, 3518 pr default abi - 3518 kb : a1, 0, 3518 pr sol abi - 0 kb : a2, 0, 0 pr all abi - 0 kb : a3, 0, 0 #nbsp; : a4, 0, 0 section lang-err/constructors-return-value : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 2442 kb : a1, 0, 2442 pr default abi - 2442 kb : a1, 0, 2442 pr sol abi - 0 kb : a2, 0, 0 pr all abi - 0 kb : a3, 0, 0 #nbsp; : a4, 0, 0 section lang-err/contract-ref : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 7020 kb : a1, 0, 7020 pr default abi - 7020 kb : a1, 0, 7020 pr sol abi - 0 kb : a2, 0, 0 pr all abi - 0 kb : a3, 0, 0 #nbsp; : a4, 0, 0 section lang-err/integration-flipper : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 2059 kb : a1, 0, 2059 pr default abi - 2059 kb : a1, 0, 2059 pr sol abi - 0 kb : a2, 0, 0 pr all abi - 0 kb : a3, 0, 0 #nbsp; : a4, 0, 0 section lazyvec : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 5714 kb : a1, 0, 5714 pr default abi - 5714 kb : a1, 0, 5714 pr sol abi - 0 kb : a2, 0, 0 pr all abi - 0 kb : a3, 0, 0 #nbsp; : a4, 0, 0 section mapping : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 10658 kb : a1, 0, 10658 pr default abi - 10658 kb : a1, 0, 10658 pr sol abi - 0 kb : a2, 0, 0 pr all abi - 0 kb : a3, 0, 0 #nbsp; : a4, 0, 0 section mother : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 16460 kb : a1, 0, 16460 pr default abi - 16460 kb : a1, 0, 16460 pr sol abi - 0 kb : a2, 0, 0 pr all abi - 0 kb : a3, 0, 0 #nbsp; : a4, 0, 0 section multi-contract-caller : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 11917 kb : a1, 0, 11917 pr default abi - 11917 kb : a1, 0, 11917 pr sol abi - 16283 kb : a2, 0, 16283 pr all abi - 13130 kb : a3, 0, 13130 #nbsp; : a4, 0, 0 section multi-contract-caller/accumulator : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 1134 kb : a1, 0, 1134 pr default abi - 1134 kb : a1, 0, 1134 pr sol abi - 2236 kb : a2, 0, 2236 pr all abi - 2794 kb : a3, 0, 2794 #nbsp; : a4, 0, 0 section multi-contract-caller/adder : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 3169 kb : a1, 0, 3169 pr default abi - 3169 kb : a1, 0, 3169 pr sol abi - 5063 kb : a2, 0, 5063 pr all abi - 3444 kb : a3, 0, 3444 #nbsp; : a4, 0, 0 section multi-contract-caller/subber : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 3173 kb : a1, 0, 3173 pr default abi - 3173 kb : a1, 0, 3173 pr sol abi - 5066 kb : a2, 0, 5066 pr all abi - 3455 kb : a3, 0, 3455 #nbsp; : a4, 0, 0 section multisig : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 27502 kb : a1, 0, 27502 pr default abi - 27502 kb : a1, 0, 27502 pr sol abi - 0 kb : a2, 0, 0 pr all abi - 0 kb : a3, 0, 0 #nbsp; : a4, 0, 0 section overflow-safety : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 1311 kb : a1, 0, 1311 pr default abi - 1311 kb : a1, 0, 1311 pr sol abi - 2619 kb : a2, 0, 2619 pr all abi - 3112 kb : a3, 0, 3112 #nbsp; : a4, 0, 0 section own-code-hash : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 3065 kb : a1, 0, 3065 pr default abi - 3065 kb : a1, 0, 3065 pr sol abi - 2973 kb : a2, 0, 2973 pr all abi - 3619 kb : a3, 0, 3619 #nbsp; : a4, 0, 0 section payment-channel : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 7995 kb : a1, 0, 7995 pr default abi - 7995 kb : a1, 0, 7995 pr sol abi - 0 kb : a2, 0, 0 pr all abi - 0 kb : a3, 0, 0 #nbsp; : a4, 0, 0 section solidity-abi/events : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 12246 kb : a1, 0, 12246 pr default abi - 12246 kb : a1, 0, 12246 pr sol abi - 0 kb : a2, 0, 0 pr all abi - 0 kb : a3, 0, 0 #nbsp; : a4, 0, 0 section solidity-abi/fallible-setter : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 2972 kb : a1, 0, 2972 pr default abi - 2972 kb : a1, 0, 2972 pr sol abi - 2972 kb : a2, 0, 2972 pr all abi - 3514 kb : a3, 0, 3514 #nbsp; : a4, 0, 0 section solidity-abi/sol-cross-contract : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 6677 kb : a1, 0, 6677 pr default abi - 6677 kb : a1, 0, 6677 pr sol abi - 0 kb : a2, 0, 0 pr all abi - 0 kb : a3, 0, 0 #nbsp; : a4, 0, 0 section solidity-abi/sol-cross-contract/other-contract-sol : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 2574 kb : a1, 0, 2574 pr default abi - 2574 kb : a1, 0, 2574 pr sol abi - 0 kb : a2, 0, 0 pr all abi - 0 kb : a3, 0, 0 #nbsp; : a4, 0, 0 section solidity-abi/sol-encoding : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 2510 kb : a1, 0, 2510 pr default abi - 2510 kb : a1, 0, 2510 pr sol abi - 0 kb : a2, 0, 0 pr all abi - 0 kb : a3, 0, 0 #nbsp; : a4, 0, 0 section solidity-abi/solidity-calls-flipper : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 8965 kb : a1, 0, 8965 pr default abi - 8965 kb : a1, 0, 8965 pr sol abi - 0 kb : a2, 0, 0 pr all abi - 0 kb : a3, 0, 0 #nbsp; : a4, 0, 0 section solidity-abi/trait-dyn-cross-contract-calls : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 6037 kb : a1, 0, 6037 pr default abi - 6037 kb : a1, 0, 6037 pr sol abi - 0 kb : a2, 0, 0 pr all abi - 0 kb : a3, 0, 0 #nbsp; : a4, 0, 0 section solidity-abi/trait-dyn-cross-contract-calls/contracts/incrementer : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 2353 kb : a1, 0, 2353 pr default abi - 2353 kb : a1, 0, 2353 pr sol abi - 0 kb : a2, 0, 0 pr all abi - 0 kb : a3, 0, 0 #nbsp; : a4, 0, 0 section solidity-abi/trait-flipper : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 2245 kb : a1, 0, 2245 pr default abi - 2245 kb : a1, 0, 2245 pr sol abi - 0 kb : a2, 0, 0 pr all abi - 0 kb : a3, 0, 0 #nbsp; : a4, 0, 0 section sr25519-verification : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 853 kb : a1, 0, 853 pr default abi - 853 kb : a1, 0, 853 pr sol abi - 777 kb : a2, 0, 777 pr all abi - 980 kb : a3, 0, 980 #nbsp; : a4, 0, 0 section static-buffer : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 2760 kb : a1, 0, 2760 pr default abi - 2760 kb : a1, 0, 2760 pr sol abi - 0 kb : a2, 0, 0 pr all abi - 0 kb : a3, 0, 0 #nbsp; : a4, 0, 0 section storage-types : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 16816 kb : a1, 0, 16816 pr default abi - 16816 kb : a1, 0, 16816 pr sol abi - 0 kb : a2, 0, 0 pr all abi - 0 kb : a3, 0, 0 #nbsp; : a4, 0, 0 section system-precompile : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 10658 kb : a1, 0, 10658 pr default abi - 10658 kb : a1, 0, 10658 pr sol abi - 0 kb : a2, 0, 0 pr all abi - 0 kb : a3, 0, 0 #nbsp; : a4, 0, 0 section trait-dyn-cross-contract-calls : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 3960 kb : a1, 0, 3960 pr default abi - 3960 kb : a1, 0, 3960 pr sol abi - 6037 kb : a2, 0, 6037 pr all abi - 4769 kb : a3, 0, 4769 #nbsp; : a4, 0, 0 section trait-dyn-cross-contract-calls/contracts/incrementer : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 1799 kb : a1, 0, 1799 pr default abi - 1799 kb : a1, 0, 1799 pr sol abi - 2353 kb : a2, 0, 2353 pr all abi - 2794 kb : a3, 0, 2794 #nbsp; : a4, 0, 0 section trait-erc20 : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 11227 kb : a1, 0, 11227 pr default abi - 11227 kb : a1, 0, 11227 pr sol abi - 0 kb : a2, 0, 0 pr all abi - 0 kb : a3, 0, 0 #nbsp; : a4, 0, 0 section trait-flipper : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 1728 kb : a1, 0, 1728 pr default abi - 1728 kb : a1, 0, 1728 pr sol abi - 2245 kb : a2, 0, 2245 pr all abi - 2611 kb : a3, 0, 2611 #nbsp; : a4, 0, 0 section trait-incrementer : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 1870 kb : a1, 0, 1870 pr default abi - 1870 kb : a1, 0, 1870 pr sol abi - 2522 kb : a2, 0, 2522 pr all abi - 3048 kb : a3, 0, 3048 #nbsp; : a4, 0, 0 section upgradeable-contracts/delegator : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 6452 kb : a1, 0, 6452 pr default abi - 6452 kb : a1, 0, 6452 pr sol abi - 9624 kb : a2, 0, 9624 pr all abi - 11588 kb : a3, 0, 11588 #nbsp; : a4, 0, 0 section upgradeable-contracts/delegator/delegatee : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 2849 kb : a1, 0, 2849 pr default abi - 2849 kb : a1, 0, 2849 pr sol abi - 2698 kb : a2, 0, 2698 pr all abi - 3464 kb : a3, 0, 3464 #nbsp; : a4, 0, 0 section upgradeable-contracts/delegator/delegatee2 : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 2849 kb : a1, 0, 2849 pr default abi - 2849 kb : a1, 0, 2849 pr sol abi - 2700 kb : a2, 0, 2700 pr all abi - 3466 kb : a3, 0, 3466 #nbsp; : a4, 0, 0 section upgradeable-contracts/set-code-hash : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 1723 kb : a1, 0, 1723 pr default abi - 1723 kb : a1, 0, 1723 pr sol abi - 2397 kb : a2, 0, 2397 pr all abi - 2999 kb : a3, 0, 2999 #nbsp; : a4, 0, 0 section upgradeable-contracts/set-code-hash-migration : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 1723 kb : a1, 0, 1723 pr default abi - 1723 kb : a1, 0, 1723 pr sol abi - 2397 kb : a2, 0, 2397 pr all abi - 2999 kb : a3, 0, 2999 #nbsp; : a4, 0, 0 section upgradeable-contracts/set-code-hash-migration/migration : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 1877 kb : a1, 0, 1877 pr default abi - 1877 kb : a1, 0, 1877 pr sol abi - 2616 kb : a2, 0, 2616 pr all abi - 2584 kb : a3, 0, 2584 #nbsp; : a4, 0, 0 section upgradeable-contracts/set-code-hash-migration/updated-incrementer : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 1901 kb : a1, 0, 1901 pr default abi - 1901 kb : a1, 0, 1901 pr sol abi - 2946 kb : a2, 0, 2946 pr all abi - 3443 kb : a3, 0, 3443 #nbsp; : a4, 0, 0 section upgradeable-contracts/set-code-hash/updated-incrementer : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 1675 kb : a1, 0, 1675 pr default abi - 1675 kb : a1, 0, 1675 pr sol abi - 2381 kb : a2, 0, 2381 pr all abi - 2938 kb : a3, 0, 2938 #nbsp; : a4, 0, 0 section wildcard-selector : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 2952 kb : a1, 0, 2952 pr default abi - 2952 kb : a1, 0, 2952 pr sol abi - 0 kb : a2, 0, 0 pr all abi - 5222 kb : a3, 0, 5222 #nbsp; : a4, 0, 0 
Loading
Show contract sizes: ink! vs Solidity ABI

The following table shows how the contract sizes on this branch change when choosing the Solidity ABI instead of the ink! ABI.

Contract Upstream Size (kB) PR Size (kB) Diff (kB) Diff (%) Change
all-abi/events 19.85 19.85 0 0%
complex-storage-structures 4.858 7.851 2.993 62% 📈
contract-invocation 8.211 11.267 3.056 37% 📈
contract-invocation/contract1 2.081 2.719 0.638 31% 📈
contract-invocation/contract2 1.996 2.671 0.675 34% 📈
contract-invocation/virtual_contract 4.544 7.367 2.823 62% 📈
contract-invocation/virtual_contract_ver1 1.954 2.431 0.477 24% 📈
contract-invocation/virtual_contract_ver2 1.966 2.443 0.477 24% 📈
contract-terminate 1.551 1.517 -0.034 -1% 📉
cross-contract-calls/other-contract 1.775 2.358 0.583 33% 📈
custom-environment 3.394 1.738 -1.656 -48% 📉
debugging-strategies 4.445 5.143 0.698 16% 📈
e2e-call-runtime 1.563 1.905 0.342 22% 📈
events 8.873 12.911 4.038 46% 📈
flipper 1.775 2.358 0.583 33% 📈
multi-contract-caller 11.917 16.283 4.366 37% 📈
multi-contract-caller/accumulator 1.134 2.236 1.102 97% 📈
multi-contract-caller/adder 3.169 5.063 1.894 60% 📈
multi-contract-caller/subber 3.173 5.066 1.893 60% 📈
overflow-safety 1.311 2.619 1.308 100% 📈
own-code-hash 3.065 2.973 -0.092 -2% 📉
solidity-abi/fallible-setter 2.972 2.972 0 0%
sr25519-verification 0.853 0.777 -0.076 -8% 📉
trait-dyn-cross-contract-calls 3.96 6.037 2.077 52% 📈
trait-dyn-cross-contract-calls/contracts/incrementer 1.799 2.353 0.554 31% 📈
trait-flipper 1.728 2.245 0.517 30% 📈
trait-incrementer 1.87 2.522 0.652 35% 📈
upgradeable-contracts/delegator 6.452 9.624 3.172 49% 📈
upgradeable-contracts/delegator/delegatee 2.849 2.698 -0.151 -4% 📉
upgradeable-contracts/delegator/delegatee2 2.849 2.7 -0.149 -4% 📉
upgradeable-contracts/set-code-hash 1.723 2.397 0.674 39% 📈
upgradeable-contracts/set-code-hash-migration 1.723 2.397 0.674 39% 📈
upgradeable-contracts/set-code-hash-migration/migration 1.877 2.616 0.739 39% 📈
upgradeable-contracts/set-code-hash-migration/updated-incrementer 1.901 2.946 1.045 55% 📈
upgradeable-contracts/set-code-hash/updated-incrementer 1.675 2.381 0.706 42% 📈
Show contract sizes: ink! vs all ABI

The following table shows how the contract sizes on this branch change when choosing the all ABI instead of the ink! ABI.

Contract Upstream Size (kB) PR Size (kB) Diff (kB) Diff (%) Change
all-abi/events 19.85 19.85 0 0%
complex-storage-structures 4.858 9.493 4.635 95% 📈
contract-invocation 8.211 12.616 4.405 54% 📈
contract-invocation/contract1 2.081 3.425 1.344 65% 📈
contract-invocation/contract2 1.996 3.317 1.321 66% 📈
contract-invocation/virtual_contract 4.544 6.919 2.375 52% 📈
contract-invocation/virtual_contract_ver1 1.954 2.821 0.867 44% 📈
contract-invocation/virtual_contract_ver2 1.966 2.848 0.882 45% 📈
contract-terminate 1.551 1.646 0.095 6% 📈
contract-transfer 2.738 3.12 0.382 14% 📈
cross-contract-calls/other-contract 1.775 2.797 1.022 58% 📈
custom-environment 3.394 3.845 0.451 13% 📈
debugging-strategies 4.445 5.829 1.384 31% 📈
e2e-call-runtime 1.563 2.365 0.802 51% 📈
events 8.873 19.183 10.31 116% 📈
flipper 1.775 2.797 1.022 58% 📈
multi-contract-caller 11.917 13.13 1.213 10% 📈
multi-contract-caller/accumulator 1.134 2.794 1.66 146% 📈
multi-contract-caller/adder 3.169 3.444 0.275 9% 📈
multi-contract-caller/subber 3.173 3.455 0.282 9% 📈
overflow-safety 1.311 3.112 1.801 137% 📈
own-code-hash 3.065 3.619 0.554 18% 📈
solidity-abi/fallible-setter 2.972 3.514 0.542 18% 📈
sr25519-verification 0.853 0.98 0.127 15% 📈
trait-dyn-cross-contract-calls 3.96 4.769 0.809 20% 📈
trait-dyn-cross-contract-calls/contracts/incrementer 1.799 2.794 0.995 55% 📈
trait-flipper 1.728 2.611 0.883 51% 📈
trait-incrementer 1.87 3.048 1.178 63% 📈
upgradeable-contracts/delegator 6.452 11.588 5.136 80% 📈
upgradeable-contracts/delegator/delegatee 2.849 3.464 0.615 22% 📈
upgradeable-contracts/delegator/delegatee2 2.849 3.466 0.617 22% 📈
upgradeable-contracts/set-code-hash 1.723 2.999 1.276 74% 📈
upgradeable-contracts/set-code-hash-migration 1.723 2.999 1.276 74% 📈
upgradeable-contracts/set-code-hash-migration/migration 1.877 2.584 0.707 38% 📈
upgradeable-contracts/set-code-hash-migration/updated-incrementer 1.901 3.443 1.542 81% 📈
upgradeable-contracts/set-code-hash/updated-incrementer 1.675 2.938 1.263 75% 📈
wildcard-selector 2.952 5.222 2.27 77% 📈

Link to the run | Last update: Sun Sep 14 23:12:58 CEST 2025

@davidsemakula davidsemakula force-pushed the semakula/abi-encode-improvements branch from a8ebcbc to b591d1a Compare September 14, 2025 07:58
@davidsemakula davidsemakula changed the title Improvements for Result and ArgumentList encoding abstractions Improve Result encoding abstractions Sep 14, 2025
@davidsemakula davidsemakula force-pushed the semakula/abi-encode-improvements branch from b591d1a to aa788d2 Compare September 14, 2025 13:47
@davidsemakula davidsemakula changed the title Improve Result encoding abstractions Improve abstractions for Solidity ABI encoding Result types Sep 14, 2025
@davidsemakula davidsemakula force-pushed the semakula/abi-encode-improvements branch from aa788d2 to 15c5378 Compare September 14, 2025 14:31
@davidsemakula davidsemakula marked this pull request as ready for review September 14, 2025 14:47
@davidsemakula davidsemakula force-pushed the semakula/abi-encode-improvements branch from 7c6cdc0 to 2442c9e Compare September 14, 2025 20:01
@davidsemakula davidsemakula merged commit 104d183 into master Sep 14, 2025
13 checks passed
@davidsemakula davidsemakula deleted the semakula/abi-encode-improvements branch September 14, 2025 20:02
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

2 participants