test: assets precompile integration test#2686
Conversation
| let mut constructor = | ||
| asset_hub_precompile::AssetHubPrecompileRef::new(asset_id); | ||
| | ||
| let contract = client | ||
| .instantiate("assets_precompile", &ink_e2e::alice(), &mut constructor) | ||
| .value(1_000_000_000_000u128) // Transfer native tokens to contract | ||
| .submit() | ||
| .await | ||
| .expect("instantiate failed"); | ||
| | ||
| let call_builder = | ||
| contract.call_builder::<asset_hub_precompile::AssetHubPrecompile>(); | ||
| let asset_id_call = call_builder.asset_id(); | ||
| let result = client | ||
| .call(&ink_e2e::alice(), &asset_id_call) | ||
| .dry_run() | ||
| .await?; |
There was a problem hiding this comment.
In a future PR I would also like to simplify this, so much code for deploying and calling a contract, must be able to make easier.
| // Show error case with transferring too many tokens. | ||
| let transfer = call_builder.transfer(bob_address, ink::U256::from(1_000_000)); | ||
| let result = client.call(&ink_e2e::alice(), &transfer).submit().await?; | ||
| assert_eq!(result.extract_error(), Some("BalanceLow".to_string())); |
There was a problem hiding this comment.
I found out that much better error is obtained from the calltrace in stead of the data. This is a function I quickly made that extracts the calltrace error.
🦑 📈 ink! Example Contracts ‒ Changes Report 📉 🦑These are the results when building the Show overviewUsing the ABI denoted in the contract manifest.
Show diagramgantt dateFormat x axisFormat x section ./integration-tests/all-abi/events : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 18412 kb : a1, 0, 18412 pr default abi - 18397 kb : a1, 0, 18397 pr sol abi - 18397 kb : a2, 0, 18397 pr all abi - 18397 kb : a3, 0, 18397 #nbsp; : a4, 0, 0 section ./integration-tests/internal/builtin-precompiles : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 4491 kb : a1, 0, 4491 pr default abi - 4491 kb : a1, 0, 4491 pr sol abi - 6083 kb : a2, 0, 6083 pr all abi - 7445 kb : a3, 0, 7445 #nbsp; : a4, 0, 0 section ./integration-tests/internal/call-builder-return-value : a5, 0, 0 v5 default abi - 8924 kb : a1, 0, 8924 master default abi - 9161 kb : a1, 0, 9161 pr default abi - 9161 kb : a1, 0, 9161 pr sol abi - 0 kb : a2, 0, 0 pr all abi - 0 kb : a3, 0, 0 #nbsp; : a4, 0, 0 section ./integration-tests/internal/data-hostfns : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 1147 kb : a1, 0, 1147 pr default abi - 1146 kb : a1, 0, 1146 pr sol abi - 1253 kb : a2, 0, 1253 pr all abi - 1613 kb : a3, 0, 1613 #nbsp; : a4, 0, 0 section ./integration-tests/internal/e2e-runtime-only-backend : a5, 0, 0 v5 default abi - 1925 kb : a1, 0, 1925 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 ./integration-tests/internal/gas-hostfns : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 1197 kb : a1, 0, 1197 pr default abi - 1197 kb : a1, 0, 1197 pr sol abi - 1307 kb : a2, 0, 1307 pr all abi - 1758 kb : a3, 0, 1758 #nbsp; : a4, 0, 0 section ./integration-tests/internal/lang-err/call-builder : a5, 0, 0 v5 default abi - 2612 kb : a1, 0, 2612 master default abi - 8192 kb : a1, 0, 8192 pr default abi - 8193 kb : a1, 0, 8193 pr sol abi - 0 kb : a2, 0, 0 pr all abi - 0 kb : a3, 0, 0 #nbsp; : a4, 0, 0 section ./integration-tests/internal/lang-err/call-builder-delegate : a5, 0, 0 v5 default abi - 2612 kb : a1, 0, 2612 master default abi - 3600 kb : a1, 0, 3600 pr default abi - 3600 kb : a1, 0, 3600 pr sol abi - 0 kb : a2, 0, 0 pr all abi - 0 kb : a3, 0, 0 #nbsp; : a4, 0, 0 section ./integration-tests/internal/lang-err/constructors-return-value : a5, 0, 0 v5 default abi - 2011 kb : a1, 0, 2011 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 ./integration-tests/internal/lang-err/contract-ref : a5, 0, 0 v5 default abi - 5087 kb : a1, 0, 5087 master default abi - 6732 kb : a1, 0, 6732 pr default abi - 6732 kb : a1, 0, 6732 pr sol abi - 0 kb : a2, 0, 0 pr all abi - 0 kb : a3, 0, 0 #nbsp; : a4, 0, 0 section ./integration-tests/internal/lang-err/integration-flipper : a5, 0, 0 v5 default abi - 1910 kb : a1, 0, 1910 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 ./integration-tests/internal/mapping : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 10627 kb : a1, 0, 10627 pr default abi - 10628 kb : a1, 0, 10628 pr sol abi - 0 kb : a2, 0, 0 pr all abi - 0 kb : a3, 0, 0 #nbsp; : a4, 0, 0 section ./integration-tests/internal/misc-hostfns : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 2203 kb : a1, 0, 2203 pr default abi - 2204 kb : a1, 0, 2204 pr sol abi - 2129 kb : a2, 0, 2129 pr all abi - 2333 kb : a3, 0, 2333 #nbsp; : a4, 0, 0 section ./integration-tests/internal/mother : a5, 0, 0 v5 default abi - 12681 kb : a1, 0, 12681 master default abi - 15034 kb : a1, 0, 15034 pr default abi - 15034 kb : a1, 0, 15034 pr sol abi - 0 kb : a2, 0, 0 pr all abi - 0 kb : a3, 0, 0 #nbsp; : a4, 0, 0 section ./integration-tests/internal/overflow-safety : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 1310 kb : a1, 0, 1310 pr default abi - 1310 kb : a1, 0, 1310 pr sol abi - 2173 kb : a2, 0, 2173 pr all abi - 2671 kb : a3, 0, 2671 #nbsp; : a4, 0, 0 section ./integration-tests/internal/own-code-hash : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 3373 kb : a1, 0, 3373 pr default abi - 3373 kb : a1, 0, 3373 pr sol abi - 2951 kb : a2, 0, 2951 pr all abi - 4056 kb : a3, 0, 4056 #nbsp; : a4, 0, 0 section ./integration-tests/internal/sr25519-verification : a5, 0, 0 v5 default abi - 1082 kb : a1, 0, 1082 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 ./integration-tests/internal/static-buffer : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 3003 kb : a1, 0, 3003 pr default abi - 3003 kb : a1, 0, 3003 pr sol abi - 0 kb : a2, 0, 0 pr all abi - 0 kb : a3, 0, 0 #nbsp; : a4, 0, 0 section ./integration-tests/internal/storage-types : a5, 0, 0 v5 default abi - 11369 kb : a1, 0, 11369 master default abi - 16779 kb : a1, 0, 16779 pr default abi - 16780 kb : a1, 0, 16780 pr sol abi - 0 kb : a2, 0, 0 pr all abi - 0 kb : a3, 0, 0 #nbsp; : a4, 0, 0 section ./integration-tests/internal/system-precompile : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 2314 kb : a1, 0, 2314 pr default abi - 2314 kb : a1, 0, 2314 pr sol abi - 2243 kb : a2, 0, 2243 pr all abi - 2770 kb : a3, 0, 2770 #nbsp; : a4, 0, 0 section ./integration-tests/public/bytes : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 4847 kb : a1, 0, 4847 pr default abi - 4847 kb : a1, 0, 4847 pr sol abi - 4847 kb : a2, 0, 4847 pr all abi - 7535 kb : a3, 0, 7535 #nbsp; : a4, 0, 0 section ./integration-tests/public/complex-storage-structures : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 4857 kb : a1, 0, 4857 pr default abi - 4858 kb : a1, 0, 4858 pr sol abi - 7500 kb : a2, 0, 7500 pr all abi - 9141 kb : a3, 0, 9141 #nbsp; : a4, 0, 0 section ./integration-tests/public/conditional-compilation : a5, 0, 0 v5 default abi - 1460 kb : a1, 0, 1460 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 ./integration-tests/public/contract-invocation : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 7952 kb : a1, 0, 7952 pr default abi - 7952 kb : a1, 0, 7952 pr sol abi - 8741 kb : a2, 0, 8741 pr all abi - 11825 kb : a3, 0, 11825 #nbsp; : a4, 0, 0 section ./integration-tests/public/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 - 2138 kb : a2, 0, 2138 pr all abi - 2892 kb : a3, 0, 2892 #nbsp; : a4, 0, 0 section ./integration-tests/public/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 - 2102 kb : a2, 0, 2102 pr all abi - 2782 kb : a3, 0, 2782 #nbsp; : a4, 0, 0 section ./integration-tests/public/contract-invocation/virtual_contract : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 4406 kb : a1, 0, 4406 pr default abi - 4406 kb : a1, 0, 4406 pr sol abi - 5539 kb : a2, 0, 5539 pr all abi - 6443 kb : a3, 0, 6443 #nbsp; : a4, 0, 0 section ./integration-tests/public/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 - 2127 kb : a2, 0, 2127 pr all abi - 2521 kb : a3, 0, 2521 #nbsp; : a4, 0, 0 section ./integration-tests/public/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 - 2139 kb : a2, 0, 2139 pr all abi - 2547 kb : a3, 0, 2547 #nbsp; : a4, 0, 0 section ./integration-tests/public/contract-storage : a5, 0, 0 v5 default abi - 7459 kb : a1, 0, 7459 master default abi - 7624 kb : a1, 0, 7624 pr default abi - 7624 kb : a1, 0, 7624 pr sol abi - 0 kb : a2, 0, 0 pr all abi - 0 kb : a3, 0, 0 #nbsp; : a4, 0, 0 section ./integration-tests/public/contract-terminate : a5, 0, 0 v5 default abi - 1314 kb : a1, 0, 1314 master default abi - 1928 kb : a1, 0, 1928 pr default abi - 1928 kb : a1, 0, 1928 pr sol abi - 2012 kb : a2, 0, 2012 pr all abi - 2328 kb : a3, 0, 2328 #nbsp; : a4, 0, 0 section ./integration-tests/public/contract-transfer : a5, 0, 0 v5 default abi - 1520 kb : a1, 0, 1520 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 ./integration-tests/public/contract-xcm : a5, 0, 0 v5 default abi - 18805 kb : a1, 0, 18805 master default abi - 28631 kb : a1, 0, 28631 pr default abi - 28630 kb : a1, 0, 28630 pr sol abi - 0 kb : a2, 0, 0 pr all abi - 0 kb : a3, 0, 0 #nbsp; : a4, 0, 0 section ./integration-tests/public/cross-contract-calls : a5, 0, 0 v5 default abi - 7471 kb : a1, 0, 7471 master default abi - 8457 kb : a1, 0, 8457 pr default abi - 8457 kb : a1, 0, 8457 pr sol abi - 0 kb : a2, 0, 0 pr all abi - 0 kb : a3, 0, 0 #nbsp; : a4, 0, 0 section ./integration-tests/public/cross-contract-calls/other-contract : a5, 0, 0 v5 default abi - 1591 kb : a1, 0, 1591 master default abi - 1775 kb : a1, 0, 1775 pr default abi - 1775 kb : a1, 0, 1775 pr sol abi - 1550 kb : a2, 0, 1550 pr all abi - 2361 kb : a3, 0, 2361 #nbsp; : a4, 0, 0 section ./integration-tests/public/custom-allocator : a5, 0, 0 v5 default abi - 7993 kb : a1, 0, 7993 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 ./integration-tests/public/custom-environment : a5, 0, 0 v5 default abi - 2062 kb : a1, 0, 2062 master default abi - 2726 kb : a1, 0, 2726 pr default abi - 2726 kb : a1, 0, 2726 pr sol abi - 1738 kb : a2, 0, 1738 pr all abi - 3167 kb : a3, 0, 3167 #nbsp; : a4, 0, 0 section ./integration-tests/public/debugging-strategies : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 4429 kb : a1, 0, 4429 pr default abi - 4427 kb : a1, 0, 4427 pr sol abi - 4200 kb : a2, 0, 4200 pr all abi - 5290 kb : a3, 0, 5290 #nbsp; : a4, 0, 0 section ./integration-tests/public/dns : a5, 0, 0 v5 default abi - 7142 kb : a1, 0, 7142 master default abi - 10126 kb : a1, 0, 10126 pr default abi - 10126 kb : a1, 0, 10126 pr sol abi - 10407 kb : a2, 0, 10407 pr all abi - 14248 kb : a3, 0, 14248 #nbsp; : a4, 0, 0 section ./integration-tests/public/e2e-call-runtime : a5, 0, 0 v5 default abi - 1182 kb : a1, 0, 1182 master default abi - 1563 kb : a1, 0, 1563 pr default abi - 1563 kb : a1, 0, 1563 pr sol abi - 1436 kb : a2, 0, 1436 pr all abi - 2049 kb : a3, 0, 2049 #nbsp; : a4, 0, 0 section ./integration-tests/public/erc1155 : a5, 0, 0 v5 default abi - 14566 kb : a1, 0, 14566 master default abi - 20782 kb : a1, 0, 20782 pr default abi - 20782 kb : a1, 0, 20782 pr sol abi - 0 kb : a2, 0, 0 pr all abi - 35551 kb : a3, 0, 35551 #nbsp; : a4, 0, 0 section ./integration-tests/public/erc20 : a5, 0, 0 v5 default abi - 6993 kb : a1, 0, 6993 master default abi - 10459 kb : a1, 0, 10459 pr default abi - 10457 kb : a1, 0, 10457 pr sol abi - 12478 kb : a2, 0, 12478 pr all abi - 17293 kb : a3, 0, 17293 #nbsp; : a4, 0, 0 section ./integration-tests/public/erc721 : a5, 0, 0 v5 default abi - 9754 kb : a1, 0, 9754 master default abi - 12038 kb : a1, 0, 12038 pr default abi - 12038 kb : a1, 0, 12038 pr sol abi - 15002 kb : a2, 0, 15002 pr all abi - 20632 kb : a3, 0, 20632 #nbsp; : a4, 0, 0 section ./integration-tests/public/events : a5, 0, 0 v5 default abi - 4955 kb : a1, 0, 4955 master default abi - 8455 kb : a1, 0, 8455 pr default abi - 8458 kb : a1, 0, 8458 pr sol abi - 12532 kb : a2, 0, 12532 pr all abi - 17686 kb : a3, 0, 17686 #nbsp; : a4, 0, 0 section ./integration-tests/public/fallible-setter : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 2632 kb : a1, 0, 2632 pr default abi - 2631 kb : a1, 0, 2631 pr sol abi - 2631 kb : a2, 0, 2631 pr all abi - 3172 kb : a3, 0, 3172 #nbsp; : a4, 0, 0 section ./integration-tests/public/flipper : a5, 0, 0 v5 default abi - 1701 kb : a1, 0, 1701 master default abi - 1775 kb : a1, 0, 1775 pr default abi - 1775 kb : a1, 0, 1775 pr sol abi - 1550 kb : a2, 0, 1550 pr all abi - 2361 kb : a3, 0, 2361 #nbsp; : a4, 0, 0 section ./integration-tests/public/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 ./integration-tests/public/incrementer : a5, 0, 0 v5 default abi - 1538 kb : a1, 0, 1538 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 ./integration-tests/public/lazyvec : a5, 0, 0 v5 default abi - 5103 kb : a1, 0, 5103 master default abi - 5725 kb : a1, 0, 5725 pr default abi - 5725 kb : a1, 0, 5725 pr sol abi - 0 kb : a2, 0, 0 pr all abi - 0 kb : a3, 0, 0 #nbsp; : a4, 0, 0 section ./integration-tests/public/multi-contract-caller : a5, 0, 0 v5 default abi - 6420 kb : a1, 0, 6420 master default abi - 11766 kb : a1, 0, 11766 pr default abi - 11768 kb : a1, 0, 11768 pr sol abi - 13757 kb : a2, 0, 13757 pr all abi - 12820 kb : a3, 0, 12820 #nbsp; : a4, 0, 0 section ./integration-tests/public/multi-contract-caller/accumulator : a5, 0, 0 v5 default abi - 1363 kb : a1, 0, 1363 master default abi - 1134 kb : a1, 0, 1134 pr default abi - 1134 kb : a1, 0, 1134 pr sol abi - 1455 kb : a2, 0, 1455 pr all abi - 2013 kb : a3, 0, 2013 #nbsp; : a4, 0, 0 section ./integration-tests/public/multi-contract-caller/adder : a5, 0, 0 v5 default abi - 1733 kb : a1, 0, 1733 master default abi - 3089 kb : a1, 0, 3089 pr default abi - 3090 kb : a1, 0, 3090 pr sol abi - 3202 kb : a2, 0, 3202 pr all abi - 3367 kb : a3, 0, 3367 #nbsp; : a4, 0, 0 section ./integration-tests/public/multi-contract-caller/subber : a5, 0, 0 v5 default abi - 1751 kb : a1, 0, 1751 master default abi - 3093 kb : a1, 0, 3093 pr default abi - 3094 kb : a1, 0, 3094 pr sol abi - 3208 kb : a2, 0, 3208 pr all abi - 3380 kb : a3, 0, 3380 #nbsp; : a4, 0, 0 section ./integration-tests/public/multisig : a5, 0, 0 v5 default abi - 21135 kb : a1, 0, 21135 master default abi - 27548 kb : a1, 0, 27548 pr default abi - 27547 kb : a1, 0, 27547 pr sol abi - 0 kb : a2, 0, 0 pr all abi - 0 kb : a3, 0, 0 #nbsp; : a4, 0, 0 section ./integration-tests/public/payment-channel : a5, 0, 0 v5 default abi - 5720 kb : a1, 0, 5720 master default abi - 7530 kb : a1, 0, 7530 pr default abi - 7530 kb : a1, 0, 7530 pr sol abi - 11440 kb : a2, 0, 11440 pr all abi - 14945 kb : a3, 0, 14945 #nbsp; : a4, 0, 0 section ./integration-tests/public/precompile-demo : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 6627 kb : a1, 0, 6627 pr default abi - 6627 kb : a1, 0, 6627 pr sol abi - 8316 kb : a2, 0, 8316 pr all abi - 9579 kb : a3, 0, 9579 #nbsp; : a4, 0, 0 section ./integration-tests/public/runtime-call-contract : a5, 0, 0 v5 default abi - 1592 kb : a1, 0, 1592 master default abi - 1778 kb : a1, 0, 1778 pr default abi - 1778 kb : a1, 0, 1778 pr sol abi - 1550 kb : a2, 0, 1550 pr all abi - 2366 kb : a3, 0, 2366 #nbsp; : a4, 0, 0 section ./integration-tests/public/trait-dyn-cross-contract-calls : a5, 0, 0 v5 default abi - 2808 kb : a1, 0, 2808 master default abi - 3953 kb : a1, 0, 3953 pr default abi - 3953 kb : a1, 0, 3953 pr sol abi - 5672 kb : a2, 0, 5672 pr all abi - 4380 kb : a3, 0, 4380 #nbsp; : a4, 0, 0 section ./integration-tests/public/trait-dyn-cross-contract-calls/contracts/incrementer : a5, 0, 0 v5 default abi - 1571 kb : a1, 0, 1571 master default abi - 1799 kb : a1, 0, 1799 pr default abi - 1799 kb : a1, 0, 1799 pr sol abi - 1651 kb : a2, 0, 1651 pr all abi - 2448 kb : a3, 0, 2448 #nbsp; : a4, 0, 0 section ./integration-tests/public/trait-erc20 : a5, 0, 0 v5 default abi - 7286 kb : a1, 0, 7286 master default abi - 10858 kb : a1, 0, 10858 pr default abi - 10855 kb : a1, 0, 10855 pr sol abi - 12574 kb : a2, 0, 12574 pr all abi - 17585 kb : a3, 0, 17585 #nbsp; : a4, 0, 0 section ./integration-tests/public/trait-flipper : a5, 0, 0 v5 default abi - 1460 kb : a1, 0, 1460 master default abi - 1728 kb : a1, 0, 1728 pr default abi - 1728 kb : a1, 0, 1728 pr sol abi - 1389 kb : a2, 0, 1389 pr all abi - 2128 kb : a3, 0, 2128 #nbsp; : a4, 0, 0 section ./integration-tests/public/trait-incrementer : a5, 0, 0 v5 default abi - 1630 kb : a1, 0, 1630 master default abi - 1870 kb : a1, 0, 1870 pr default abi - 1870 kb : a1, 0, 1870 pr sol abi - 1820 kb : a2, 0, 1820 pr all abi - 2702 kb : a3, 0, 2702 #nbsp; : a4, 0, 0 section ./integration-tests/public/upgradeable-contracts/delegator : a5, 0, 0 v5 default abi - 3869 kb : a1, 0, 3869 master default abi - 6487 kb : a1, 0, 6487 pr default abi - 6487 kb : a1, 0, 6487 pr sol abi - 9015 kb : a2, 0, 9015 pr all abi - 10942 kb : a3, 0, 10942 #nbsp; : a4, 0, 0 section ./integration-tests/public/upgradeable-contracts/delegator/delegatee : a5, 0, 0 v5 default abi - 1652 kb : a1, 0, 1652 master default abi - 2996 kb : a1, 0, 2996 pr default abi - 2996 kb : a1, 0, 2996 pr sol abi - 2491 kb : a2, 0, 2491 pr all abi - 3285 kb : a3, 0, 3285 #nbsp; : a4, 0, 0 section ./integration-tests/public/upgradeable-contracts/delegator/delegatee2 : a5, 0, 0 v5 default abi - 1652 kb : a1, 0, 1652 master default abi - 2996 kb : a1, 0, 2996 pr default abi - 2996 kb : a1, 0, 2996 pr sol abi - 2491 kb : a2, 0, 2491 pr all abi - 3285 kb : a3, 0, 3285 #nbsp; : a4, 0, 0 section ./integration-tests/public/upgradeable-contracts/set-code-hash : a5, 0, 0 v5 default abi - 1740 kb : a1, 0, 1740 master default abi - 1723 kb : a1, 0, 1723 pr default abi - 1723 kb : a1, 0, 1723 pr sol abi - 2035 kb : a2, 0, 2035 pr all abi - 2642 kb : a3, 0, 2642 #nbsp; : a4, 0, 0 section ./integration-tests/public/upgradeable-contracts/set-code-hash-migration : a5, 0, 0 v5 default abi - 1740 kb : a1, 0, 1740 master default abi - 1723 kb : a1, 0, 1723 pr default abi - 1723 kb : a1, 0, 1723 pr sol abi - 2035 kb : a2, 0, 2035 pr all abi - 2642 kb : a3, 0, 2642 #nbsp; : a4, 0, 0 section ./integration-tests/public/upgradeable-contracts/set-code-hash-migration/migration : a5, 0, 0 v5 default abi - 1302 kb : a1, 0, 1302 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 ./integration-tests/public/upgradeable-contracts/set-code-hash-migration/updated-incrementer : a5, 0, 0 v5 default abi - 1930 kb : a1, 0, 1930 master default abi - 1901 kb : a1, 0, 1901 pr default abi - 1901 kb : a1, 0, 1901 pr sol abi - 2600 kb : a2, 0, 2600 pr all abi - 3098 kb : a3, 0, 3098 #nbsp; : a4, 0, 0 section ./integration-tests/public/upgradeable-contracts/set-code-hash/updated-incrementer : a5, 0, 0 v5 default abi - 1717 kb : a1, 0, 1717 master default abi - 1675 kb : a1, 0, 1675 pr default abi - 1675 kb : a1, 0, 1675 pr sol abi - 2024 kb : a2, 0, 2024 pr all abi - 2581 kb : a3, 0, 2581 #nbsp; : a4, 0, 0 section ./integration-tests/public/wildcard-selector : a5, 0, 0 v5 default abi - 3234 kb : a1, 0, 3234 master default abi - 2948 kb : a1, 0, 2948 pr default abi - 2948 kb : a1, 0, 2948 pr sol abi - 0 kb : a2, 0, 0 pr all abi - 5211 kb : a3, 0, 5211 #nbsp; : a4, 0, 0 section ./integration-tests/solidity-abi/events : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 11801 kb : a1, 0, 11801 pr default abi - 11815 kb : a1, 0, 11815 pr sol abi - 0 kb : a2, 0, 0 pr all abi - 0 kb : a3, 0, 0 #nbsp; : a4, 0, 0 section ./integration-tests/solidity-abi/sol-cross-contract : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 4492 kb : a1, 0, 4492 pr default abi - 4492 kb : a1, 0, 4492 pr sol abi - 0 kb : a2, 0, 0 pr all abi - 0 kb : a3, 0, 0 #nbsp; : a4, 0, 0 section ./integration-tests/solidity-abi/sol-cross-contract/other-contract-sol : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 2138 kb : a1, 0, 2138 pr default abi - 2138 kb : a1, 0, 2138 pr sol abi - 0 kb : a2, 0, 0 pr all abi - 0 kb : a3, 0, 0 #nbsp; : a4, 0, 0 section ./integration-tests/solidity-abi/sol-encoding : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 2063 kb : a1, 0, 2063 pr default abi - 2063 kb : a1, 0, 2063 pr sol abi - 0 kb : a2, 0, 0 pr all abi - 0 kb : a3, 0, 0 #nbsp; : a4, 0, 0 section ./integration-tests/solidity-abi/solidity-calls-flipper : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 7074 kb : a1, 0, 7074 pr default abi - 7074 kb : a1, 0, 7074 pr sol abi - 0 kb : a2, 0, 0 pr all abi - 0 kb : a3, 0, 0 #nbsp; : a4, 0, 0 section ./integration-tests/solidity-abi/trait-dyn-cross-contract-calls : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 5672 kb : a1, 0, 5672 pr default abi - 5672 kb : a1, 0, 5672 pr sol abi - 0 kb : a2, 0, 0 pr all abi - 0 kb : a3, 0, 0 #nbsp; : a4, 0, 0 section ./integration-tests/solidity-abi/trait-dyn-cross-contract-calls/contracts/incrementer : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 1651 kb : a1, 0, 1651 pr default abi - 1651 kb : a1, 0, 1651 pr sol abi - 0 kb : a2, 0, 0 pr all abi - 0 kb : a3, 0, 0 #nbsp; : a4, 0, 0 section ./integration-tests/solidity-abi/trait-flipper : a5, 0, 0 v5 default abi - 0 kb : a1, 0, 0 master default abi - 1389 kb : a1, 0, 1389 pr default abi - 1389 kb : a1, 0, 1389 pr sol abi - 0 kb : a2, 0, 0 pr all abi - 0 kb : a3, 0, 0 #nbsp; : a4, 0, 0 Show contract sizes: ink! vs Solidity ABIThe following table shows how the contract sizes on this branch change when choosing the Solidity ABI instead of the ink! ABI.
Show contract sizes: ink! vs all ABIThe following table shows how the contract sizes on this branch change when choosing the all ABI instead of the ink! ABI.
Link to the run | Last update: Tue Nov 11 19:01:21 CET 2025 |
a25004b to 465351d Compare | /// Get a mutable reference to the underlying sandbox. | ||
| /// | ||
| /// This allows direct access to all sandbox methods and traits, making it easy to | ||
| /// interact with runtime pallets like `pallet-assets`: | ||
| pub fn sandbox(&mut self) -> &mut S { | ||
| &mut self.sandbox | ||
| } |
There was a problem hiding this comment.
This was an easy solution to get access to the apis.
If we want the e2e framework to use for both backends, node or runtime, without any code change (pretty cool) then this needs a closer look, but for now this is the easiest.
| | ||
| sandbox.dry_run(|sandbox| { | ||
| sandbox.mint_into(&actor, 100).unwrap(); | ||
| crate::api::balance_api::BalanceAPI::mint_into(sandbox, &actor, 100).unwrap(); |
There was a problem hiding this comment.
The problem is that the assets apis and balance apis are sometimes the same, see this case for example, not sure whether I should therefore change the assets api to e.g. mint_asset_into
5f3d05e to d4851b5 Compare There was a problem hiding this comment.
Pull Request Overview
This PR adds integration testing support for contracts interacting with ERC-20 precompiles by introducing a new ink_precompiles crate and enhancing the sandbox testing framework. The implementation includes a comprehensive integration test demonstrating contract-precompile interactions using the runtime-only testing approach.
Key changes:
- New
ink_precompilescrate providing ERC-20 precompile interface definitions - Enhanced
DefaultSandboxwithpallet-assetsand precompile support - New sandbox helper macros (
assert_ok!,assert_noop!,assert_last_event!) and APIs for asset management - Integration test contract demonstrating precompile usage patterns
Reviewed Changes
Copilot reviewed 21 out of 22 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
| integration-tests/public/assets-precompile/lib.rs | New integration test contract demonstrating ERC-20 precompile interactions with comprehensive e2e tests |
| integration-tests/public/assets-precompile/README.md | Documentation for the assets precompile integration example |
| integration-tests/public/assets-precompile/Cargo.toml | Cargo configuration for the new integration test |
| crates/precompiles/src/lib.rs | Core precompile address calculation utilities |
| crates/precompiles/src/erc20.rs | ERC-20 precompile trait definition and factory function |
| crates/precompiles/Cargo.toml | Cargo configuration for the new precompiles crate |
| crates/sandbox/src/macros.rs | New assertion macros and runtime macro updates for assets support |
| crates/sandbox/src/lib.rs | IntoAccountId trait and public error type exports |
| crates/sandbox/src/error.rs | New unified E2EError type for sandbox testing |
| crates/sandbox/src/client.rs | Event tracking, contract event extraction, and sandbox accessor additions |
| crates/sandbox/src/api/assets_api.rs | Complete AssetsAPI trait implementation for pallet-assets interactions |
| crates/sandbox/src/api.rs | Export of new AssetsAPI |
| crates/sandbox/Cargo.toml | Dependencies for pallet-assets and precompiles |
| crates/e2e/src/lib.rs | IntoAddress trait for address conversions |
| crates/e2e/src/contract_results.rs | Error extraction from contract call traces |
| crates/ink/macro/src/contract_ref.rs | Public visibility for generated contract ref types |
| integration-tests/public/runtime-call-contract/Cargo.toml | Added e2e-tests feature flag |
| Cargo.toml | Workspace member and dependency for precompiles crate |
| CHANGELOG.md | Changelog entry for the new feature |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
e3f973a to f695d19 Compare 2cf5b16 to 47d6015 Compare crates/precompiles/src/erc20.rs Outdated
| }; | ||
| | ||
| /// ERC-20 Assets precompile index. | ||
| pub const PRECOMPILE_INDEX: u16 = 0x0120; |
There was a problem hiding this comment.
I believe we can't make this assumption here, as the address is dependent on how the chain configures it. Do you agree?
I.e. here for Westend:
type Precompiles = ( ERC20<Self, InlineIdConfig<0x120>, TrustBackedAssetsInstance>, ERC20<Self, InlineIdConfig<0x320>, PoolAssetsInstance>, XcmPrecompile<Self>, );There was a problem hiding this comment.
What do you think about a design along the lines of trait Erc20<Address> and a ink::TrustBacked/ink::PoolAssets?
Then devs would have to pass Erc20<ink::TrustBacked>.
35f5f9e to 8edeb01 Compare
cmichi left a comment
There was a problem hiding this comment.
I'm approving and merging the PR now in light of time pressure before the sub0 hackathon.
It needs some follow-ups though! Notably for:
The ink_precompile crate is standalone at the moment, developers wanting to use it need to actively depend on it. This causes a number of issues, as there might be a version mismatch with the ink dependency used. In ink! <4 we had standalone crates for a lot of stuff and it caused all kinds of friction for the devx.
Hence, the ink_precompiles crate should be moved to the umbrella ink crate and reexported there (ink::precompiles).
Another thing to do is that the integration-tests/ need to be updated for using the newly introduced functionality from this PR (assert_ok!, IntoAddress, etc.).
Description
This PR adds an integration test, with using the runtime only feature, for testing a contract that interacts with the erc20 precompile (which is added in the newly created ink precompile crate). The DefaultSandbox's runtime has been provided with the assets pallet and the precompile to allow devs to test their contract interacting with the precompile.
In addition, here and there some functions have been added to improve the developer experience in the e2e & sandbox crates. This is still ongoing.
Once new apis are approved I can make a separate PR updating the other integration tests / ink-examples.
Checklist before requesting a review
CHANGELOG.md