Я использую Truffle версии 2.1 и пытаюсь отправить тестовый эфир на свой контракт с помощью Testrpc. Я запускаю testrpc -u 0 -u 1
И счета показывают баланс 993516321999997083360 wei Я пытаюсь отправить эфир в функцию, которая содержит модификатор payable и возвращает true (без внутреннего кода), и она возвращается с переходом VM.
function fund() payable returns (bool) {
return true;
}
А это трюфельный javascript, вызывающий функцию
var projectBeingFunded = Project.at(projectToFund);
return projectBeingFunded.fund({from: account, amount:amountToGive});
}).then(function(txHash) {
waitForTransaction();
return web3.eth.getTransactionReceipt(txHash);
}).then(function(receipt) {
console.log("transaction receipt");
console.log(receipt.valueOf());
setStatus("Project successfully funded");
}).catch(function(e) {
console.log(e);
setStatus("Project funding didn't work");
Вы отправляете аргумент под названием сумма, а не платеж в эфире.
return projectBeingFunded.fund({from: account, amount:amountToGive});
Это было бы почти уместно, если бы функция контракта гласила:
function fund(uint amount) returns(bool) {}
На самом деле будет:
return projectBeingFunded.fund(amountToGive, {from: account});
Но на самом деле он говорит, что никаких аргументов не ожидается, и ожидается ETH :
function fund() payable returns (bool) { ...
Неожиданный аргумент - ПРЫЖОК. Итак, попробуйте следующее:
return projectBeingFunded.fund({from: account, value: amountToGive});
Где amountToGive — это uint в Wei, и у отправителя есть столько денег, как я предполагаю.
Надеюсь, поможет.
Роб Хитченс
бтернер
function fund() payable returns (bool)
из другого контракта в Solidity?