Я получаю сообщение об ошибке 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 в папке, а не глобально, из-за того, что бета-версия и различные версии в последнее время быстро обновляются. если вы предпочитаете глобальный подход, попробуйте truffle migrate --reset --compile-all
Привет из будущего и прошлого!
Если вы находитесь в примере проекта Hardhat и настроили свой контракт Greeter.sol [возможно, для развертывания контракта ERC-721] и теперь пытаетесь запустить sample-script.js, и теперь он терпит неудачу с
причина: "слишком много аргументов: в конструкторе контракта"
Перейдите в /sample-script.js, чтобы
const greeter = await Greeter.deploy("Hello, Hardhat!");
и удалите аргумент так:
const greeter = await Greeter.deploy();
Я столкнулся с этой проблемой вчера. Похоже, это ошибка в бета-версии Truffle 4.0.0. Я откатился на последнюю стабильную версию 3.4.11, и это решило проблему.
npm uninstall -g truffle
npm install -g truffle
РЕДАКТИРОВАТЬ: проект должен быть перестроен/перераспределен:
truffle migrate --reset --compile-all
truffle migrate --reset --compile-all
. Я думаю, что файл сборки JSON должен быть восстановлен.truffle migrate --reset --compile-all
работал! Спасибо! Звонок почему- truffle compile -all
то truffle migrate --reset
не помог...К сожалению, предложенный выше ответ не сработал. Попробуйте удалить папку сборки, а затем скомпилируйте развертывание
truffle migrate --reset
У меня была такая же проблема, скомпилированный код поврежден. Он работает только в первый раз, а последующая компиляция портит сборку. Надеюсь, это поможет.
Попробуйте удалить папку сборки и запустить
truffle migrate --reset
У меня была такая же проблема, скомпилированный код был поврежден. Надеюсь это поможет.
Кочевник
--compile-all
самом деле перекомпилирует его, лол.