Estoy tratando de desarrollar un contrato inteligente simple que envíe Ether de una dirección a otra y no puedo hacerlo funcionar.
Estoy usando Ubuntu 16.04, truffle 3.4.7, node 7.10.1 y solidity 0.4.13.
El contrato se compila y publica en un testrpc local, pero cuando intento acceder a él, parece que no funciona.
He buscado soluciones en todas partes, pero no puedo entender qué es lo que está mal, así que espero que alguien aquí pueda ayudarme :)
El código del contrato inteligente es así:
contract Transfer {
function Transfer () {
owner = msg.sender;
}
function sendEther (address dst) payable {
if(msg.value<=0) revert();
dst.transfer(msg.value);
}
}
La secuencia que sigo para desplegarlo es la siguiente:
Luego tengo un archivo html simple que incluye un archivo js que debería realizar la transferencia:
< script src="/usr/local/lib/node_modules/ethereum-console/node_modules/web3/dist/web3.min.js" >< /script >
< script src="test.js" >< /script >
< /head >
< body >
< /body >
< /html >
Y aquí está el contenido del archivo test.js:
var Web3 = require('web3');
let web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"));
var account_one = web3.eth.accounts[0]; // testrpc address
var account_two = web3.eth.accounts[9]; // testrpc address
/*
// This works fine, makes the transfer:
web3.eth.sendTransaction({from: account_two, to: account_one, value: 100000000000});
*/
// These don't work:
try
{
// First try:
obj = Transfer.deployed();
obj.sendEther(account_two, {from: account_one, to: objTransfer, value: 100000000000});
// Second try:
Transfer.deployed().then(
function(instance) {
obj = instance;
return obj.sendEther.call(account_two, {from: account_one, to: objTransfer, value: 100000000000});
}
);
} catch (e) {
document.write("< br/ >< b >Error: ");
document.write(e.message);
document.write("< /b >");
}
Por supuesto, el primer y el segundo intento son las dos cosas que he probado, no ejecuté los dos al mismo tiempo, al intentar uno de ellos, el otro está comentado.
De cualquier manera, el resultado que obtengo cuando muestro el archivo html en un navegador es:
Error: la transferencia no está definida
Obviamente, el contrato inteligente Transfer no se puede crear, pero no entiendo por qué. ¿Alguna ayuda sobre cómo puedo hacer que esto funcione?
¡Muchas gracias de antemano! :)
Debe crear una instancia de contrato en un archivo javascript utilizando su ABI y la dirección en la que se implementa como se muestra a continuación [reemplace la ABI y la dirección de su contrato]:
// Try to use as below
try {
// First try:
var abi = <your contract ABI>;
var Contract = web3.eth.contract(abi);
var contractInstance = Contract.at('<Your contract address>');
contractInstance.sendTransaction({from: account_two, to: account_one, value: 100000000000});
} catch (e) {
document.write("< br/ >< b >Error: ");
document.write(e.message);
document.write("< /b >");
}
JaVinci
JaVinci
Abhishek
JaVinci
JaVinci