Estoy usando la consola de trufas para probar mi contrato, pero tengo problemas para pasar una discusión. Por ejemplo, tengo un método como este
function sendEtherTo(address addr) public payable {
require(addr != 0x0);
require(msg.value > 0);
addr.transfer(msg.value);
}
Estoy tratando de usar sendTransaction
pero no puedo averiguar cómo pasar el argumento.
Este:
web3.eth.sendTransaction({from: web3.eth.accounts[1], to: myContract.address, data: myContract.sendEtherTo.sendTransaction(web3.eth.accounts[2]), value: web3.toWei(10, "finney")})
Da como resultado que mi testrpc se bloquee con un error en trufa diciendo
Error: Invalid JSON RPC response: undefined
Intenté lo siguiente que hice en web3 con éxito
web3.eth.sendTransaction({from: web3.eth.accounts[1], to: myContract.address, data: myContract['sendEtherTo'].getData(web3.eth.accounts[2]), value: web3.toWei(10, "finney")})
pero esto me dice que getData
es indefinido
Truffle ajusta los contratos con un objeto personalizado que no proporciona getData
, pero podemos usar el request
método para obtener los parámetros para 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
});
});
});
ismael
myContract
? Si llamasmyContract.sendEtherTo()
directamente funciona?Nulik
ismael