Отправка аргумента методу контракта с помощью sendTransaction

Я использую консоль трюфеля для проверки своего контракта, но у меня не получается передать аргумент. Например, у меня есть такой метод

function sendEtherTo(address addr) public payable {
   require(addr != 0x0);
   require(msg.value > 0);
   addr.transfer(msg.value);
}

Я пытаюсь использовать sendTransaction, но не могу понять, как передать аргумент.

Этот:

 web3.eth.sendTransaction({from: web3.eth.accounts[1], to: myContract.address, data: myContract.sendEtherTo.sendTransaction(web3.eth.accounts[2]), value: web3.toWei(10, "finney")})

В результате мой testrpc вылетает с ошибкой в ​​трюфеле

Error: Invalid JSON RPC response: undefined

Я пробовал следующее, что я успешно сделал в web3

web3.eth.sendTransaction({from: web3.eth.accounts[1], to: myContract.address, data: myContract['sendEtherTo'].getData(web3.eth.accounts[2]), value: web3.toWei(10, "finney")})

но это говорит мне, что getDataэто не определено

Как вы создаете myContract? Если звонить myContract.sendEtherTo()напрямую, работает?
AFAIK sendTransaction не может вызывать метод, он может вызывать контракт. Затем этот контракт может отправить сообщение (т.е. вызвать метод) другому контракту,
@Нулик Ты не прав. Чтобы использовать sendTransaction, вам нужно закодировать вызов функции внутри поля данных.

Ответы (1)

Truffle заключает контракты в пользовательский объект, который не предоставляет getData, но мы можем использовать этот requestметод для получения параметров для sendTransaction.

const MyContract = artifacts.require('MyContract');

contract('MyContract', function(accounts) {
  it('Call with sendTransaction', async () => {
    const myContract = await MyContract.deployed();

    // We want to call foo(23) on myContract
    const data = myContract.foo.request(23);

    // Here data.params[0].data contains the parameters to the call

    const txhash = web3.eth.sendTransaction({ 
      from: accounts[0], 
      to: myContract.address, 
      value: 1, 
      data: data.params[0].data
    });
  });
});
Спасибо, сегодня вечером попробую, как это работает. Какая среда JS используется в этом примере? Я какое-то время был в стороне от мира JS.
Это модульный тест для Truffle.