Skip to content

Implement pre-compile support for Storage and System functions#2619

Merged
cmichi merged 22 commits intomasterfrom
cmichi-precompile-support-sep-2
Sep 7, 2025
Merged

Implement pre-compile support for Storage and System functions#2619
cmichi merged 22 commits intomasterfrom
cmichi-precompile-support-sep-2

Conversation

@cmichi
Copy link
Collaborator

@cmichi cmichi commented Sep 5, 2025

  • Implements basic pre-compile support for the Storage pre-compile + some more functions of the System pre-compile
  • Bumps subxt to 0.44
  • Syncs with latest polkadot-sdk (but on a branch that contains my (unmerged) work on pre-compiles)
  • Removes the unstable-hostfn feature for many functions and examples

I ran into issues with our E2E tests now sometimes throwing "Priority too low" when multiple tests using the same account as as a signer are run in parallel. Couldn't figure out a proper way too fix it yet. I hotfixed it now by changing the accounts in the tests to different ones in each. That's how e.g. the changes in integration-tests/public/contract-storage/e2e_tests.rs came to be.

Relevant Polkadot SDK PRs:

I would like to refactor the Solidity stuff into its own crate or module. Would also like to add more tests for these encoding functions. In the interest of moving on quickly I've created the PR as is now though.

@cmichi cmichi marked this pull request as ready for review September 5, 2025 22:35
@github-actions
Copy link

github-actions bot commented Sep 6, 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.592 19.568 -0.024 0% 📉
call-builder-return-value 8.926 9.074 0.148 2% 📈
combined-extension 2.559 0.866 -1.693 -65% 📉
complex-storage-structures 4.626 4.843 0.217 5% 📈
conditional-compilation 1.494 1.711 0.217 15% 📈
contract-invocation 7.975 8.192 0.217 3% 📈
contract-invocation/contract1 1.851 2.068 0.217 12% 📈
contract-invocation/contract2 1.766 1.983 0.217 12% 📈
contract-invocation/virtual_contract 4.314 4.538 0.224 5% 📈
contract-invocation/virtual_contract_ver1 1.723 1.94 0.217 13% 📈
contract-invocation/virtual_contract_ver2 1.735 1.953 0.218 13% 📈
contract-storage 6.646 7.53 0.884 13% 📈
contract-terminate 1.315 1.532 0.217 17% 📈
contract-transfer 2.875 3.289 0.414 14% 📈
cross-contract-calls 8.489 8.706 0.217 3% 📈
cross-contract-calls/other-contract 1.542 1.759 0.217 14% 📈
custom-allocator 2.996 3.214 0.218 7% 📈
custom-environment 3.249 3.379 0.13 4% 📈
debugging-strategies 4.197 4.414 0.217 5% 📈
dns 9.171 10.371 1.2 13% 📈
e2e-call-runtime 1.723 2.255 0.532 31% 📈
e2e-runtime-only-backend 2.275 2.813 0.538 24% 📈
erc1155 20.418 20.896 0.478 2% 📈
erc20 10.746 10.887 0.141 1% 📈
erc721 12.166 12.792 0.626 5% 📈
events 8.749 8.875 0.126 1% 📈
flipper 1.542 1.759 0.217 14% 📈
fuzz-testing 1.528 1.745 0.217 14% 📈
incrementer 1.28 1.28 0 0%
lang-err/call-builder 8.254 8.47 0.216 3% 📈
lang-err/call-builder-delegate 3.291 3.508 0.217 7% 📈
lang-err/constructors-return-value 2.174 2.391 0.217 10% 📈
lang-err/contract-ref 6.799 7.003 0.204 3% 📈
lang-err/integration-flipper 1.826 2.044 0.218 12% 📈
lazyvec 4.877 5.643 0.766 16% 📈
mapping 9.419 10.538 1.119 12% 📈
mother 15.763 16.35 0.587 4% 📈
multi-contract-caller 11.68 11.892 0.212 2% 📈
multi-contract-caller/accumulator 1.127 1.127 0 0%
multi-contract-caller/adder 2.944 3.161 0.217 7% 📈
multi-contract-caller/subber 2.948 3.166 0.218 7% 📈
multisig 25.897 27.374 1.477 6% 📈
own-code-hash 2.591 3.059 0.468 18% 📈
payment-channel 7.826 7.951 0.125 2% 📈
psp22-extension 7.392 2.616 -4.776 -64% 📉
rand-extension 4.223 1.844 -2.379 -55% 📉
runtime-call-contract 1.545 1.762 0.217 14% 📈
solidity-abi/events 12.458 12.061 -0.397 -2% 📉
solidity-abi/fallible-setter 2.465 2.679 0.214 9% 📈
solidity-abi/sol-cross-contract 6.458 6.674 0.216 3% 📈
solidity-abi/sol-cross-contract/other-contract-sol 2.344 2.559 0.215 9% 📈
solidity-abi/sol-encoding 2.28 2.495 0.215 9% 📈
solidity-abi/solidity-calls-flipper 8.754 8.969 0.215 2% 📈
solidity-abi/trait-dyn-cross-contract-calls 5.807 6.023 0.216 4% 📈
solidity-abi/trait-dyn-cross-contract-calls/contracts/incrementer 2.12 2.337 0.217 10% 📈
solidity-abi/trait-flipper 2.028 2.245 0.217 11% 📈
sr25519-verification 0.851 0.851 0 0%
static-buffer 2.516 2.733 0.217 9% 📈
storage-types 17.027 16.953 -0.074 0% 📉
trait-dyn-cross-contract-calls 3.738 3.955 0.217 6% 📈
trait-dyn-cross-contract-calls/contracts/incrementer 1.571 1.783 0.212 13% 📈
trait-erc20 11.079 11.227 0.148 1% 📈
trait-flipper 1.495 1.712 0.217 15% 📈
trait-incrementer 1.631 1.848 0.217 13% 📈
upgradeable-contracts/delegator 6.211 6.428 0.217 3% 📈
upgradeable-contracts/delegator/delegatee 2.629 2.846 0.217 8% 📈
upgradeable-contracts/delegator/delegatee2 2.629 2.846 0.217 8% 📈
upgradeable-contracts/set-code-hash 1.494 1.71 0.216 14% 📈
upgradeable-contracts/set-code-hash-migration 1.494 1.71 0.216 14% 📈
upgradeable-contracts/set-code-hash-migration/migration 1.657 1.875 0.218 13% 📈
upgradeable-contracts/set-code-hash-migration/updated-incrementer 1.668 1.885 0.217 13% 📈
upgradeable-contracts/set-code-hash/updated-incrementer 1.446 1.662 0.216 15% 📈
wildcard-selector 2.738 2.955 0.217 8% 📈
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 - 19592 kb : a1, 0, 19592 pr default abi - 19568 kb : a1, 0, 19568 pr sol abi - 19568 kb : a2, 0, 19568 pr all abi - 19568 kb : a3, 0, 19568 #nbsp; : a4, 0, 0 section call-builder-return-value : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 8926 kb : a1, 0, 8926 pr default abi - 9074 kb : a1, 0, 9074 pr sol abi - 0 kb : a2, 0, 0 pr all abi - 0 kb : a3, 0, 0 #nbsp; : a4, 0, 0 section combined-extension : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 2559 kb : a1, 0, 2559 pr default abi - 866 kb : a1, 0, 866 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 - 4626 kb : a1, 0, 4626 pr default abi - 4843 kb : a1, 0, 4843 pr sol abi - 7833 kb : a2, 0, 7833 pr all abi - 9464 kb : a3, 0, 9464 #nbsp; : a4, 0, 0 section conditional-compilation : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 1494 kb : a1, 0, 1494 pr default abi - 1711 kb : a1, 0, 1711 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 - 7975 kb : a1, 0, 7975 pr default abi - 8192 kb : a1, 0, 8192 pr sol abi - 11267 kb : a2, 0, 11267 pr all abi - 12599 kb : a3, 0, 12599 #nbsp; : a4, 0, 0 section contract-invocation/contract1 : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 1851 kb : a1, 0, 1851 pr default abi - 2068 kb : a1, 0, 2068 pr sol abi - 2718 kb : a2, 0, 2718 pr all abi - 3410 kb : a3, 0, 3410 #nbsp; : a4, 0, 0 section contract-invocation/contract2 : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 1766 kb : a1, 0, 1766 pr default abi - 1983 kb : a1, 0, 1983 pr sol abi - 2669 kb : a2, 0, 2669 pr all abi - 3301 kb : a3, 0, 3301 #nbsp; : a4, 0, 0 section contract-invocation/virtual_contract : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 4314 kb : a1, 0, 4314 pr default abi - 4538 kb : a1, 0, 4538 pr sol abi - 7366 kb : a2, 0, 7366 pr all abi - 6910 kb : a3, 0, 6910 #nbsp; : a4, 0, 0 section contract-invocation/virtual_contract_ver1 : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 1723 kb : a1, 0, 1723 pr default abi - 1940 kb : a1, 0, 1940 pr sol abi - 2431 kb : a2, 0, 2431 pr all abi - 2808 kb : a3, 0, 2808 #nbsp; : a4, 0, 0 section contract-invocation/virtual_contract_ver2 : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 1735 kb : a1, 0, 1735 pr default abi - 1953 kb : a1, 0, 1953 pr sol abi - 2443 kb : a2, 0, 2443 pr all abi - 2835 kb : a3, 0, 2835 #nbsp; : a4, 0, 0 section contract-storage : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 6646 kb : a1, 0, 6646 pr default abi - 7530 kb : a1, 0, 7530 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 - 1315 kb : a1, 0, 1315 pr default abi - 1532 kb : a1, 0, 1532 pr sol abi - 1499 kb : a2, 0, 1499 pr all abi - 1627 kb : a3, 0, 1627 #nbsp; : a4, 0, 0 section contract-transfer : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 2875 kb : a1, 0, 2875 pr default abi - 3289 kb : a1, 0, 3289 pr sol abi - 3274 kb : a2, 0, 3274 pr all abi - 4332 kb : a3, 0, 4332 #nbsp; : a4, 0, 0 section cross-contract-calls : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 8489 kb : a1, 0, 8489 pr default abi - 8706 kb : a1, 0, 8706 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 - 1542 kb : a1, 0, 1542 pr default abi - 1759 kb : a1, 0, 1759 pr sol abi - 2344 kb : a2, 0, 2344 pr all abi - 2768 kb : a3, 0, 2768 #nbsp; : a4, 0, 0 section custom-allocator : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 2996 kb : a1, 0, 2996 pr default abi - 3214 kb : a1, 0, 3214 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 - 3249 kb : a1, 0, 3249 pr default abi - 3379 kb : a1, 0, 3379 pr sol abi - 1717 kb : a2, 0, 1717 pr all abi - 3855 kb : a3, 0, 3855 #nbsp; : a4, 0, 0 section debugging-strategies : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 4197 kb : a1, 0, 4197 pr default abi - 4414 kb : a1, 0, 4414 pr sol abi - 5128 kb : a2, 0, 5128 pr all abi - 5805 kb : a3, 0, 5805 #nbsp; : a4, 0, 0 section dns : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 9171 kb : a1, 0, 9171 pr default abi - 10371 kb : a1, 0, 10371 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 - 1723 kb : a1, 0, 1723 pr default abi - 2255 kb : a1, 0, 2255 pr sol abi - 2874 kb : a2, 0, 2874 pr all abi - 3506 kb : a3, 0, 3506 #nbsp; : a4, 0, 0 section e2e-runtime-only-backend : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 2275 kb : a1, 0, 2275 pr default abi - 2813 kb : a1, 0, 2813 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 - 20418 kb : a1, 0, 20418 pr default abi - 20896 kb : a1, 0, 20896 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 - 10746 kb : a1, 0, 10746 pr default abi - 10887 kb : a1, 0, 10887 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 - 12166 kb : a1, 0, 12166 pr default abi - 12792 kb : a1, 0, 12792 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 - 8749 kb : a1, 0, 8749 pr default abi - 8875 kb : a1, 0, 8875 pr sol abi - 11928 kb : a2, 0, 11928 pr all abi - 18070 kb : a3, 0, 18070 #nbsp; : a4, 0, 0 section flipper : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 1542 kb : a1, 0, 1542 pr default abi - 1759 kb : a1, 0, 1759 pr sol abi - 2344 kb : a2, 0, 2344 pr all abi - 2768 kb : a3, 0, 2768 #nbsp; : a4, 0, 0 section fuzz-testing : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 1528 kb : a1, 0, 1528 pr default abi - 1745 kb : a1, 0, 1745 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 - 1280 kb : a1, 0, 1280 pr default abi - 1280 kb : a1, 0, 1280 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 - 8254 kb : a1, 0, 8254 pr default abi - 8470 kb : a1, 0, 8470 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 - 3291 kb : a1, 0, 3291 pr default abi - 3508 kb : a1, 0, 3508 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 - 2174 kb : a1, 0, 2174 pr default abi - 2391 kb : a1, 0, 2391 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 - 6799 kb : a1, 0, 6799 pr default abi - 7003 kb : a1, 0, 7003 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 - 1826 kb : a1, 0, 1826 pr default abi - 2044 kb : a1, 0, 2044 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 - 4877 kb : a1, 0, 4877 pr default abi - 5643 kb : a1, 0, 5643 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 - 9419 kb : a1, 0, 9419 pr default abi - 10538 kb : a1, 0, 10538 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 - 15763 kb : a1, 0, 15763 pr default abi - 16350 kb : a1, 0, 16350 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 - 11680 kb : a1, 0, 11680 pr default abi - 11892 kb : a1, 0, 11892 pr sol abi - 16282 kb : a2, 0, 16282 pr all abi - 0 kb : a3, 0, 0 #nbsp; : a4, 0, 0 section multi-contract-caller/accumulator : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 1127 kb : a1, 0, 1127 pr default abi - 1127 kb : a1, 0, 1127 pr sol abi - 2222 kb : a2, 0, 2222 pr all abi - 2771 kb : a3, 0, 2771 #nbsp; : a4, 0, 0 section multi-contract-caller/adder : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 2944 kb : a1, 0, 2944 pr default abi - 3161 kb : a1, 0, 3161 pr sol abi - 5058 kb : a2, 0, 5058 pr all abi - 3438 kb : a3, 0, 3438 #nbsp; : a4, 0, 0 section multi-contract-caller/subber : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 2948 kb : a1, 0, 2948 pr default abi - 3166 kb : a1, 0, 3166 pr sol abi - 5066 kb : a2, 0, 5066 pr all abi - 3457 kb : a3, 0, 3457 #nbsp; : a4, 0, 0 section multisig : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 25897 kb : a1, 0, 25897 pr default abi - 27374 kb : a1, 0, 27374 pr sol abi - 0 kb : a2, 0, 0 pr all abi - 0 kb : a3, 0, 0 #nbsp; : a4, 0, 0 section own-code-hash : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 2591 kb : a1, 0, 2591 pr default abi - 3059 kb : a1, 0, 3059 pr sol abi - 2957 kb : a2, 0, 2957 pr all abi - 3607 kb : a3, 0, 3607 #nbsp; : a4, 0, 0 section payment-channel : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 7826 kb : a1, 0, 7826 pr default abi - 7951 kb : a1, 0, 7951 pr sol abi - 0 kb : a2, 0, 0 pr all abi - 0 kb : a3, 0, 0 #nbsp; : a4, 0, 0 section psp22-extension : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 7392 kb : a1, 0, 7392 pr default abi - 2616 kb : a1, 0, 2616 pr sol abi - 0 kb : a2, 0, 0 pr all abi - 0 kb : a3, 0, 0 #nbsp; : a4, 0, 0 section rand-extension : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 4223 kb : a1, 0, 4223 pr default abi - 1844 kb : a1, 0, 1844 pr sol abi - 0 kb : a2, 0, 0 pr all abi - 0 kb : a3, 0, 0 #nbsp; : a4, 0, 0 section runtime-call-contract : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 1545 kb : a1, 0, 1545 pr default abi - 1762 kb : a1, 0, 1762 pr sol abi - 2344 kb : a2, 0, 2344 pr all abi - 2773 kb : a3, 0, 2773 #nbsp; : a4, 0, 0 section solidity-abi/events : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 12458 kb : a1, 0, 12458 pr default abi - 12061 kb : a1, 0, 12061 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 - 2465 kb : a1, 0, 2465 pr default abi - 2679 kb : a1, 0, 2679 pr sol abi - 2679 kb : a2, 0, 2679 pr all abi - 3179 kb : a3, 0, 3179 #nbsp; : a4, 0, 0 section solidity-abi/sol-cross-contract : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 6458 kb : a1, 0, 6458 pr default abi - 6674 kb : a1, 0, 6674 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 - 2344 kb : a1, 0, 2344 pr default abi - 2559 kb : a1, 0, 2559 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 - 2280 kb : a1, 0, 2280 pr default abi - 2495 kb : a1, 0, 2495 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 - 8754 kb : a1, 0, 8754 pr default abi - 8969 kb : a1, 0, 8969 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 - 5807 kb : a1, 0, 5807 pr default abi - 6023 kb : a1, 0, 6023 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 - 2120 kb : a1, 0, 2120 pr default abi - 2337 kb : a1, 0, 2337 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 - 2028 kb : a1, 0, 2028 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 - 851 kb : a1, 0, 851 pr default abi - 851 kb : a1, 0, 851 pr sol abi - 776 kb : a2, 0, 776 pr all abi - 979 kb : a3, 0, 979 #nbsp; : a4, 0, 0 section static-buffer : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 2516 kb : a1, 0, 2516 pr default abi - 2733 kb : a1, 0, 2733 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 - 17027 kb : a1, 0, 17027 pr default abi - 16953 kb : a1, 0, 16953 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 - 3738 kb : a1, 0, 3738 pr default abi - 3955 kb : a1, 0, 3955 pr sol abi - 6023 kb : a2, 0, 6023 pr all abi - 4755 kb : a3, 0, 4755 #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 - 1571 kb : a1, 0, 1571 pr default abi - 1783 kb : a1, 0, 1783 pr sol abi - 2337 kb : a2, 0, 2337 pr all abi - 2764 kb : a3, 0, 2764 #nbsp; : a4, 0, 0 section trait-erc20 : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 11079 kb : a1, 0, 11079 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 - 1495 kb : a1, 0, 1495 pr default abi - 1712 kb : a1, 0, 1712 pr sol abi - 2245 kb : a2, 0, 2245 pr all abi - 2597 kb : a3, 0, 2597 #nbsp; : a4, 0, 0 section trait-incrementer : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 1631 kb : a1, 0, 1631 pr default abi - 1848 kb : a1, 0, 1848 pr sol abi - 2501 kb : a2, 0, 2501 pr all abi - 3019 kb : a3, 0, 3019 #nbsp; : a4, 0, 0 section upgradeable-contracts/delegator : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 6211 kb : a1, 0, 6211 pr default abi - 6428 kb : a1, 0, 6428 pr sol abi - 9586 kb : a2, 0, 9586 pr all abi - 11529 kb : a3, 0, 11529 #nbsp; : a4, 0, 0 section upgradeable-contracts/delegator/delegatee : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 2629 kb : a1, 0, 2629 pr default abi - 2846 kb : a1, 0, 2846 pr sol abi - 2685 kb : a2, 0, 2685 pr all abi - 3451 kb : a3, 0, 3451 #nbsp; : a4, 0, 0 section upgradeable-contracts/delegator/delegatee2 : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 2629 kb : a1, 0, 2629 pr default abi - 2846 kb : a1, 0, 2846 pr sol abi - 2685 kb : a2, 0, 2685 pr all abi - 3451 kb : a3, 0, 3451 #nbsp; : a4, 0, 0 section upgradeable-contracts/set-code-hash : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 1494 kb : a1, 0, 1494 pr default abi - 1710 kb : a1, 0, 1710 pr sol abi - 2380 kb : a2, 0, 2380 pr all abi - 2969 kb : a3, 0, 2969 #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 - 1494 kb : a1, 0, 1494 pr default abi - 1710 kb : a1, 0, 1710 pr sol abi - 2380 kb : a2, 0, 2380 pr all abi - 2969 kb : a3, 0, 2969 #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 - 1657 kb : a1, 0, 1657 pr default abi - 1875 kb : a1, 0, 1875 pr sol abi - 2612 kb : a2, 0, 2612 pr all abi - 2580 kb : a3, 0, 2580 #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 - 1668 kb : a1, 0, 1668 pr default abi - 1885 kb : a1, 0, 1885 pr sol abi - 2930 kb : a2, 0, 2930 pr all abi - 3414 kb : a3, 0, 3414 #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 - 1446 kb : a1, 0, 1446 pr default abi - 1662 kb : a1, 0, 1662 pr sol abi - 2364 kb : a2, 0, 2364 pr all abi - 2909 kb : a3, 0, 2909 #nbsp; : a4, 0, 0 section wildcard-selector : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 2738 kb : a1, 0, 2738 pr default abi - 2955 kb : a1, 0, 2955 pr sol abi - 4752 kb : a2, 0, 4752 pr all abi - 5167 kb : a3, 0, 5167 #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.568 19.568 0 0%
complex-storage-structures 4.843 7.833 2.99 62% 📈
contract-invocation 8.192 11.267 3.075 38% 📈
contract-invocation/contract1 2.068 2.718 0.65 31% 📈
contract-invocation/contract2 1.983 2.669 0.686 35% 📈
contract-invocation/virtual_contract 4.538 7.366 2.828 62% 📈
contract-invocation/virtual_contract_ver1 1.94 2.431 0.491 25% 📈
contract-invocation/virtual_contract_ver2 1.953 2.443 0.49 25% 📈
contract-terminate 1.532 1.499 -0.033 -1% 📉
contract-transfer 3.289 3.274 -0.015 0% 📉
cross-contract-calls/other-contract 1.759 2.344 0.585 33% 📈
custom-environment 3.379 1.717 -1.662 -48% 📉
debugging-strategies 4.414 5.128 0.714 16% 📈
e2e-call-runtime 2.255 2.874 0.619 27% 📈
events 8.875 11.928 3.053 34% 📈
flipper 1.759 2.344 0.585 33% 📈
multi-contract-caller 11.892 16.282 4.39 37% 📈
multi-contract-caller/accumulator 1.127 2.222 1.095 97% 📈
multi-contract-caller/adder 3.161 5.058 1.897 60% 📈
multi-contract-caller/subber 3.166 5.066 1.9 60% 📈
own-code-hash 3.059 2.957 -0.102 -2% 📉
runtime-call-contract 1.762 2.344 0.582 33% 📈
solidity-abi/fallible-setter 2.679 2.679 0 0%
sr25519-verification 0.851 0.776 -0.075 -8% 📉
trait-dyn-cross-contract-calls 3.955 6.023 2.068 52% 📈
trait-dyn-cross-contract-calls/contracts/incrementer 1.783 2.337 0.554 31% 📈
trait-flipper 1.712 2.245 0.533 31% 📈
trait-incrementer 1.848 2.501 0.653 35% 📈
upgradeable-contracts/delegator 6.428 9.586 3.158 49% 📈
upgradeable-contracts/delegator/delegatee 2.846 2.685 -0.161 -5% 📉
upgradeable-contracts/delegator/delegatee2 2.846 2.685 -0.161 -5% 📉
upgradeable-contracts/set-code-hash 1.71 2.38 0.67 39% 📈
upgradeable-contracts/set-code-hash-migration 1.71 2.38 0.67 39% 📈
upgradeable-contracts/set-code-hash-migration/migration 1.875 2.612 0.737 39% 📈
upgradeable-contracts/set-code-hash-migration/updated-incrementer 1.885 2.93 1.045 55% 📈
upgradeable-contracts/set-code-hash/updated-incrementer 1.662 2.364 0.702 42% 📈
wildcard-selector 2.955 4.752 1.797 61% 📈
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.568 19.568 0 0%
complex-storage-structures 4.843 9.464 4.621 95% 📈
contract-invocation 8.192 12.599 4.407 54% 📈
contract-invocation/contract1 2.068 3.41 1.342 65% 📈
contract-invocation/contract2 1.983 3.301 1.318 66% 📈
contract-invocation/virtual_contract 4.538 6.91 2.372 52% 📈
contract-invocation/virtual_contract_ver1 1.94 2.808 0.868 45% 📈
contract-invocation/virtual_contract_ver2 1.953 2.835 0.882 45% 📈
contract-terminate 1.532 1.627 0.095 6% 📈
contract-transfer 3.289 4.332 1.043 32% 📈
cross-contract-calls/other-contract 1.759 2.768 1.009 57% 📈
custom-environment 3.379 3.855 0.476 14% 📈
debugging-strategies 4.414 5.805 1.391 32% 📈
e2e-call-runtime 2.255 3.506 1.251 55% 📈
events 8.875 18.07 9.195 104% 📈
flipper 1.759 2.768 1.009 57% 📈
multi-contract-caller/accumulator 1.127 2.771 1.644 146% 📈
multi-contract-caller/adder 3.161 3.438 0.277 9% 📈
multi-contract-caller/subber 3.166 3.457 0.291 9% 📈
own-code-hash 3.059 3.607 0.548 18% 📈
runtime-call-contract 1.762 2.773 1.011 57% 📈
solidity-abi/fallible-setter 2.679 3.179 0.5 19% 📈
sr25519-verification 0.851 0.979 0.128 15% 📈
trait-dyn-cross-contract-calls 3.955 4.755 0.8 20% 📈
trait-dyn-cross-contract-calls/contracts/incrementer 1.783 2.764 0.981 55% 📈
trait-flipper 1.712 2.597 0.885 52% 📈
trait-incrementer 1.848 3.019 1.171 63% 📈
upgradeable-contracts/delegator 6.428 11.529 5.101 79% 📈
upgradeable-contracts/delegator/delegatee 2.846 3.451 0.605 21% 📈
upgradeable-contracts/delegator/delegatee2 2.846 3.451 0.605 21% 📈
upgradeable-contracts/set-code-hash 1.71 2.969 1.259 74% 📈
upgradeable-contracts/set-code-hash-migration 1.71 2.969 1.259 74% 📈
upgradeable-contracts/set-code-hash-migration/migration 1.875 2.58 0.705 38% 📈
upgradeable-contracts/set-code-hash-migration/updated-incrementer 1.885 3.414 1.529 81% 📈
upgradeable-contracts/set-code-hash/updated-incrementer 1.662 2.909 1.247 75% 📈
wildcard-selector 2.955 5.167 2.212 75% 📈

Link to the run | Last update: Mon Sep 8 00:22:12 CEST 2025

Copy link
Collaborator

@davidsemakula davidsemakula left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM!

See comment and CI failure.

I would like to refactor the Solidity stuff into its own crate or module. Would also like to add more tests for these encoding functions.

For params encoding, we can do unit tests that compare against ink_primitives::sol::encode_sequence

@cmichi cmichi merged commit e104aef into master Sep 7, 2025
16 checks passed
@cmichi cmichi deleted the cmichi-precompile-support-sep-2 branch September 7, 2025 21:20
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

2 participants