Solidity

錯誤:Solidity 函式的參數數量無效

  • November 18, 2021

我收到Error: Invalid number of arguments to Solidity function契約建構子的錯誤,不知道為什麼。

我剛剛升級到Truffle 4.0.0 beta並使用truffle develop測試環境而不是testrpc. 這些測試過去可以通過,但現在它們給了我錯誤。

合約建構子

function MyContract(
       bytes _eventName, 
       bytes32[] _eventResultNames, 
       uint256 _eventBettingEndBlock,
       uint256 _decisionEndBlock,
       uint8 _averageBlockTime,
       uint256 _arbitrationOptionMinutes) 
       public
       payable
   {
       ...
   }

摩卡測試班

const params = {
       _eventName: "test",
       _eventResultNames: ["first", "second", "third"],
       _eventBettingEndBlock: 100,
       _decisionEndBlock: 120,
       _averageBlockTime: 10,
       _arbitrationOptionMinutes: 1440
   };
const baseReward = Utils.getBigNumberWithDecimals(10, nativeDecimals);

let myContract;

beforeEach(async function() {
       myContract = await MyContract.new(...Object.values(params), { from: creator, value: baseReward });
   });

錯誤資訊

1) Contract: MyContract New MyContract inits the MyContract with the correct values:
    Error: Invalid number of arguments to Solidity function
     at Object.InvalidNumberOfSolidityArgs (/usr/local/lib/node_modules/truffle/build/cli.bundled.js:43993:16)
     at SolidityFunction.validateArgs (/usr/local/lib/node_modules/truffle/build/cli.bundled.js:357969:22)
     at SolidityFunction.toPayload (/usr/local/lib/node_modules/truffle/build/cli.bundled.js:357985:10)
     at SolidityFunction.call (/usr/local/lib/node_modules/truffle/build/cli.bundled.js:358026:24)
     at /usr/local/lib/node_modules/truffle/build/cli.bundled.js:326504:16
     at Promise (<anonymous>)
     at /usr/local/lib/node_modules/truffle/build/cli.bundled.js:326495:18
     at <anonymous>

如何修復此錯誤?

刪除您的建構文件夾,然後執行該命令。重置命令可能對某些人有用,對我沒用,可能是 Mac 的事情。 npm run truffle migrate --reset --compile-all 我發現它在本地執行 truffle 到文件夾而不是全域時效果最好,因為 beta 和不同版本最近更新得很快。如果您更喜歡全域方法,請嘗試 truffle migrate --reset --compile-all

來自未來和過去的你好!

如果您在 Hardhat 的範例項目中並且已經自定義了 Greeter.sol 合約

$$ perhaps to deploy an ERC-721 contract $$現在正在嘗試執行 sample-script.js 並且現在失敗了

原因:‘參數太多:在契約建構子中’

進入 /sample-script.js 到

 const greeter = await Greeter.deploy("Hello, Hardhat!");

並像這樣刪除參數:

 const greeter = await Greeter.deploy();

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