Я пытаюсь разработать простой смарт-контракт, который отправляет эфир с одного адреса на другой, и я не могу заставить его работать.
Я использую Ubuntu 16.04, truffle 3.4.7, node 7.10.1 и Solidity 0.4.13.
Контракт компилируется и публикуется в локальном testrpc, но когда я пытаюсь получить к нему доступ, он просто не работает.
Я искал решения везде, но я просто не могу понять, что не так, поэтому я надеюсь, что кто-нибудь здесь может мне помочь :)
Код смарт-контракта выглядит следующим образом:
contract Transfer {
function Transfer () {
owner = msg.sender;
}
function sendEther (address dst) payable {
if(msg.value<=0) revert();
dst.transfer(msg.value);
}
}
Последовательность, которой я следую, чтобы развернуть ее, следующая:
Затем у меня есть простой файл html, который включает файл js, который должен выполнить передачу:
< 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 >
А вот содержимое файла 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 >");
}
Конечно, первая и вторая попытки - это две вещи, которые я пробовал, не выполняя обе одновременно, при попытке одной из них другая комментируется.
В любом случае, вывод, который я получаю, когда отображаю html-файл в браузере:
Ошибка: передача не определена
Очевидно, что смарт-контракт Transfer не может быть создан, но я просто не понимаю, почему. Любая помощь в том, как я могу сделать эту работу?
Огромное спасибо заранее! :)
Вам нужно создать экземпляр контракта в файле javascript, используя его ABI и адрес, по которому он развернут, как показано ниже [замените ABI и адрес вашего контракта]:
// 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 >");
}
ЯВинчи
ЯВинчи
Абхишек
ЯВинчи
ЯВинчи