I am developing ethereum and nextjs project. When project first initlaized I am getting this error:
Error: data out-of-bounds (length=3, offset=32, code=BUFFER_OVERRUN, version=abi/5.0.7)
    at Logger.makeError (/home/Documents/projects/ethereum/kickstarter/node_modules/@ethersproject/logger/lib/index.js:199:21)
    at Logger.throwError (/home/Documents/projects/ethereum/kickstarter/node_modules/@ethersproject/logger/lib/index.js:208:20)
    at Reader._peekBytes (/home/Documents/projects/ethereum/kickstarter/node_modules/@ethersproject/abi/lib/coders/abstract-coder.js:149:24)
    at Reader.readBytes (/home/Documents/projects/ethereum/kickstarter/node_modules/@ethersproject/abi/lib/coders/abstract-coder.js:161:26)
    at Reader.readValue (/home/Documents/projects/ethereum/kickstarter/node_modules/@ethersproject/abi/lib/coders/abstract-coder.js:167:48)
    at NumberCoder.decode (/home/Documents/projects/ethereum/kickstarter/node_modules/@ethersproject/abi/lib/coders/number.js:49:28)
    at /home/Documents/projects/ethereum/kickstarter/node_modules/@ethersproject/abi/lib/coders/array.js:106:31
    at Array.forEach (<anonymous>)
    at Object.unpack (/home/Documents/projects/ethereum/kickstarter/node_modules/@ethersproject/abi/lib/coders/array.js:85:12)
    at TupleCoder.decode (/home/Documents/projects/ethereum/kickstarter/node_modules/@ethersproject/abi/lib/coders/tuple.js:39:49)
    at AbiCoder.decode (/home/Documents/projects/ethereum/kickstarter/node_modules/@ethersproject/abi/lib/abi-coder.js:93:22)
    at ABICoder.decodeParametersWith (/home/Documents/projects/ethereum/kickstarter/node_modules/web3-eth-abi/lib/index.js:303:30)
    at ABICoder.decodeParameters (/home/Documents/projects/ethereum/kickstarter/node_modules/web3-eth-abi/lib/index.js:284:17)
    at Contract._decodeMethodReturn (/home/Documents/projects/ethereum/kickstarter/node_modules/web3-eth-contract/lib/index.js:469:22)
    at Method.outputFormatter (/home/Documents/projects/ethereum/kickstarter/node_modules/web3-eth-contract/lib/index.js:759:42)
    at Method.formatOutput (/home/Documents/projects/ethereum/kickstarter/node_modules/web3-core-method/lib/index.js:146:54) {
  reason: 'data out-of-bounds',
  code: 'BUFFER_OVERRUN',
  length: 3,
  offset: 32
}
I was getting inside getServerSideProps. Initially I had this
let campaigns;
try {
  // in solidity contract, this returns an array of contracts
  campaigns = await factory.methods.getDeployedCampaign().call();
 
} catch (e) {
  console.log("error in index server", e);
}
I checked the code, could not find any issue. I thought maybe the issue would be returning an array of addresses. (As far as I know, we cannot return an array of structs from solidity, but array of addresses would be fine). Nevertheless, I decided to get each campaign one by one. So I changed the contract code:
contract CampaignFactory{
  address[] public deployedCampaigns;
  uint public campaignsCount;
  
      function createCampaign(uint minimum)public{
          Campaign newCampaign=new Campaign(minimum,msg.sender);
          deployedCampaigns.push(address(newCampaign));
          campaignsCount++;
  
      }
      // return individual campaign
      function getDeployedCampaign(uint index) public view returns(address ){
          return deployedCampaigns[index];
      }
  
      function getCampaignCounts() public view returns(uint){
          return campaignsCount;
      }
  }
Then I modified the server side code properly:
export async function getServerSideProps(context) {
  let campaigns;
  let campaignsCount;
  try {
    // get the number of campaigns
    campaignsCount = await factory.methods.getCampaignCounts().call();
    campaigns = await Promise.all(
      Array(parseInt(campaignsCount))
        .fill()
        .map((element, index) => {
          return factory.methods.getDeployedCampaign(index).call();
        })
    );
    console.log("camapigns in index", campaigns);
  } catch (e) {
    console.log("error in index server", e);
  }
  return {
    props: { campaigns: campaigns || [] },
  };
}
After modification, I still get the same error. But if I refresh the page, I don't see any more errors and I get the data on UI. That makes me think that there is no issue with the contract. it must be something with interaction with javascript.
I had this same problem while working with Polygon. I had to change my rpc url from the wss to the https one. Don't know if this helps but thought I'd suggest.
Tip: Check your ABI.
In my case, my function returns a tuple with 1 uint256 and 3 strings, but in my ABI it was returning 4 strings in this tuple.
Example:
struct Contact{
        uint256 id;
        string symbol;
        string address_;
        string nickname;
    }
     function getContacts(address from, string calldata symbol, uint256 fromId, uint256 length) external view returns (Contact[] memory) {
     ...
     }
In the ABI, it was:
  {"inputs": [{"internalType": "address","name": "from","type": "address"},
                {"internalType": "string","name": "symbol","type": "string"},
                {"internalType": "uint256","name": "fromId","type": "uint256"},
                {"internalType": "uint256","name": "length","type": "uint256"}],
            "name": "getContacts",
            "outputs": [{"components": [{"internalType": "uint256","name": "id","type": "uint256"},
                        {"internalType": "string","name": "symbol","type": "string"},
                        {"internalType": "string","name": "address_","type": "string"},
                    {"internalType": "string","name": "nickname","type": "string"},
                    {"internalType": "string","name": "OTHERTHING","type": "string"}],//<-- ERROR
                    "internalType": "struct Contacts.Contact[]","name": "","type": "tuple[]"}],
            "stateMutability": "view", "type": "function"},
Check your ABI and remove some invalid values.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With