Solidity

web3中呼叫地址數組返回錯誤,方法需要參數

  • March 21, 2019

我在我的契約中聲明了一個公共地址數組,但是當我呼叫它時,我收到一個錯誤,說它需要一個參數。有人可以了解這裡發生的事情嗎?

契約.sol

uint public buyIn;
address[] public playersRegistered;

index.js

// this works
console.log(await contract.methods.buyIn.call());

// this throws an error
console.log(await contract.methods.playersRegistered.call());

錯誤資訊: Unhandled Rejection (Error): The number of arguments is not matching the methods required number. You need to pass 1 arguments.

確實,solidity 為公共變數創建了 getter,但如果變數是引用變數,它不會按預期返回值。相反,您需要傳遞數組的索引以獲取特定索引的值。要獲取完整的數組元素,您需要為數組編寫 getter。讓我給你看一下這個契約:

pragma solidity ^0.5.5;
contract Test {
  uint [] public players ;
   constructor() public {
       players.push(1);
       players.push(2);
       players.push(3);
   }

   function getArray() public view returns (uint[] memory){
      return players;
   }
}

因此,當您嘗試在web3不提供的情況下呼叫公共數組變數的 getter 時,index它將引發錯誤,因為函式呼叫的參數不匹配。請參閱下面的上述契約的執行範例以了解更多資訊。

在此處輸入圖像描述

希望你得到你的答案。

引用自:https://ethereum.stackexchange.com/questions/68606