Solidity
web3中呼叫地址數組返回錯誤,方法需要參數
我在我的契約中聲明了一個公共地址數組,但是當我呼叫它時,我收到一個錯誤,說它需要一個參數。有人可以了解這裡發生的事情嗎?
契約.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
它將引發錯誤,因為函式呼叫的參數不匹配。請參閱下面的上述契約的執行範例以了解更多資訊。希望你得到你的答案。