Ich versuche, einen einfachen Smart Contract zu entwickeln, der Ether von einer Adresse zur anderen sendet, und ich kann es nicht zum Laufen bringen.
Ich verwende Ubuntu 16.04, Truffle 3.4.7, Node 7.10.1 und Solidity 0.4.13.
Der Vertrag wird in einem lokalen TestrPC zusammengestellt und veröffentlicht, aber wenn ich versuche, darauf zuzugreifen, scheint es einfach nicht zu funktionieren.
Ich habe überall nach Lösungen gesucht, aber ich kann einfach nicht herausfinden, was falsch ist, also hoffe ich, dass mir hier jemand helfen kann :)
Der Smart-Contract-Code lautet wie folgt:
contract Transfer {
function Transfer () {
owner = msg.sender;
}
function sendEther (address dst) payable {
if(msg.value<=0) revert();
dst.transfer(msg.value);
}
}
Die Reihenfolge, der ich folge, um es bereitzustellen, ist wie folgt:
Dann habe ich eine einfache HTML-Datei, die eine js-Datei enthält, die die Übertragung vornehmen soll:
< 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 >
Und hier ist der Inhalt der Datei 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 >");
}
Natürlich sind erster und zweiter Versuch die beiden Dinge, die ich versucht habe, nicht beide gleichzeitig ausgeführt, wenn man einen von ihnen versucht, wird der andere kommentiert.
So oder so lautet die Ausgabe, die ich erhalte, wenn ich die HTML-Datei in einem Browser anzeige:
Fehler: Übertragung ist nicht definiert
Offensichtlich kann der Transfer Smart Contract nicht erstellt werden, aber ich verstehe einfach nicht warum. Irgendwelche Hilfe, wie ich das zum Laufen bringen kann?
Vielen Dank im Voraus! :)
Sie müssen eine Vertragsinstanz in einer Javascript-Datei erstellen, indem Sie ihre ABI und die Adresse, an der sie bereitgestellt wird, wie unten beschrieben verwenden [ersetzen Sie die ABI und die Adresse Ihres Vertrags]:
// 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