Метод контракта недопустимое количество аргументов

Я только начал играть с Truffle and Solidity и написал свой первый базовый контракт. Я также написал тест, но он продолжает терпеть неудачу, давая мне следующее сообщение:

Error: Invalid number of arguments to Solidity function

Теперь проблема кажется довольно простой, я не выдвигаю нужное количество аргументов ... За исключением того, насколько я могу судить.

Это мой соответствующий код контракта:

pragma solidity ^0.4.18;

contract FundEth {

    mapping (uint => Project) _projects;

    struct Project {
        uint id;
        uint targetWei;
        uint targetBlock;
        uint balanceWei;
        string name;
        string description;
        bool payedOut;
    }

    function fund(uint projectId) public payable
    {
        _projects[projectId].balanceWei += msg.value;
    }

    function create(uint targetWei, uint blocks, string name, string description)
        public
        returns (uint)
    {
        Project memory p = Project({
            id: ++_indexCounter,
            targetWei: targetWei,
            targetBlock: block.number + blocks,
            balanceWei: 0,
            name: name,
            description: description,
            payedOut: false
        });

        _projects[p.id] = p;

        return p.id;
    }

    function getProjectName(uint projectId)
        public
        view
        returns (string)
    {
        return "FOO";
    }

    function getProjectBalance(uint projectId)
        public
        view
        returns (uint)
    {
        return 10000000;
    }

    ...
}

А это мой тестовый код:

const FundEth = artifacts.require("./FundEth.sol");

contract('FundEth', accounts => {
    var _id;
    var _fundEth;

    it("should create a project", () => {
        return FundEth.deployed()
            .then(fundEth => {
                _fundEth = fundEth;
                return fundEth.create(1000000000000000000 /* 1 Eth */ , 5, "FOO", "We want to fund this for testing.")
            }).then(id => {
                _id = id;
                return _fundEth.getProjectName.call(_id)
            }).then(name => {
                assert.equal(name, "FOO", "Has not created a valid project.");
            });
    });

    it("should fund a project", () => {

        return FundEth.deployed()
            .then(fundEth => {
                assert.notEqual(_id, 0);
                _fundEth = fundEth;
                _fundEth.fund.sendTransaction(_id, { from: accounts[0], value: 10000000 }); << SEEMS TO FAIL HERE.
            }).then(() => {
                return _fundEth.getProjectBalance.call(_id);;
            }).then(balance => {
                assert.equal(balance, 10000000, "Balance of test project was not 1 ether.");
            });
    });
});

Я знаю, что контракт сейчас не очень полезен, но не понимаю, почему он терпит неудачу. Полная ошибка:

1) Contract: FundEth
   should fund a project:
 Uncaught Error: Invalid number of arguments to Solidity function
  at Object.InvalidNumberOfSolidityArgs (/usr/local/lib/node_modules/truffle/build/webpack:/~/web3/lib/web3/errors.js:25:1)
  at SolidityFunction.validateArgs (/usr/local/lib/node_modules/truffle/build/webpack:/~/web3/lib/web3/function.js:74:1)
  at SolidityFunction.toPayload (/usr/local/lib/node_modules/truffle/build/webpack:/~/web3/lib/web3/function.js:90:1)
  at SolidityFunction.sendTransaction (/usr/local/lib/node_modules/truffle/build/webpack:/~/web3/lib/web3/function.js:163:1)
  at /usr/local/lib/node_modules/truffle/build/webpack:/~/truffle-contract/contract.js:135:1
  at new Promise (<anonymous>)
  at /usr/local/lib/node_modules/truffle/build/webpack:/~/truffle-contract/contract.js:126:1
  at <anonymous>
  at process._tickCallback (internal/process/next_tick.js:118:7)
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
394
1

Ответы 1

Изменение строки на

return _fundEth.fund(_id, { from: accounts[0], value: 10000000 });

похоже, решает проблему. Однако мне также нужно было удалить утверждение перед вызовом, чтобы иметь рабочий тест.

Другие вопросы по теме