In early versions of the ABI encoder/EVM/Solidity, the budget for function parameters was 16 fixed-length variable or 8 variable-length variables.

The logic was simple enough - a budget of 16 slots with strings and bytes taking two slots.

Local reference type capacity has also increased from 13 to 15 memory assignments in tandem.

The old rule doesn't hold anymore. We seem to have a little more space. The following 2 examples compile and as you can see, it accommodates 11 and 15 strings, respectively.

Can someone explain the new budget rules and link to an authoritative source?

// SPDX-License-Identifier: UNLICENSED

pragma solidity 0.8.13;

contract AbiTest {
    string[] strStor;

    function callWithStrArgs(string memory one, string memory two,
        string memory three,string memory four,string memory 
        five,string memory six,string memory seven, string memory 
        eight, string memory nine, string memory ten, string memory 
        eleven) public pure {
          string memory loc = one;
          loc = two;
          loc = three;
          // and so on...      

    function localTest() public {
        string memory one = "abc";
        string memory two = "abc";
        string memory three = "abc";
        string memory four = "abc";
        string memory five = "abc";
        string memory six = "abc";
        string memory seven = "abc";
        string memory eight = "abc";
        string memory nine = "abc";
        string memory ten = "abc";
        string memory eleven = "abc";
        string memory twelve = "abc";
        string memory thirteen = "abc";
        string memory fourteen = "abc";
        string memory fifteen = "abc";

        // and so on...     


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Browse other questions tagged or ask your own question.