Wie verwende ich web3, um Geld von Wallet A zu Wallet B zu senden?

var myContract = web3.eth.contract(abi);
var Adresse = Vertragsadresse;
var vertragsdaten = meinvertrag.at(adresse);
var sender = '0xd3aaa525c087978133abb517593ea334f16abd1f';
var Empfänger = '0xff2b56315dc5372b45dfa3773c4cfd64f70c8e9c';
//transfer ist die Funktion im Vertrag, Geld von Wallet A nach B zu transferieren
var getData = vertrag_daten.transfer.getData(empfänger,betrag);
web3.eth.sendTransaction({to:receiver, from:sender, data: getData});

Quelle: So rufen Sie die Funktion meines Vertrags mit sendTransaction auf

Wenn ich den Kontostand verfolge, stellt sich heraus, dass nur der Gaspreis von Brieftasche A abgezogen wird und sonst nichts? Aber wenn ich die Metamask-Benutzeroberfläche verwende, um die Transaktionen durchzuführen, werden die Salden erfolgreich aktualisiert. Ich glaube, es gibt einen Fehler bei der Art und Weise, wie ich diese API verwende. Es wäre wirklich großartig, wenn jemand seine Erfahrungen teilen könnte.

Haben Sie versucht, die Transaktion zu debuggen? Ist der Transaktion das Gas ausgegangen? Welches Netzwerk verwenden Sie, Hauptnetz, Ropsten?
Ich habe gerade das lokale Netzwerk zum Testen mit "testrpc" auf localhost verwendet.
Überprüfen Sie einfach, ob die Transaktion nicht das gesamte Gas verbraucht. Überprüfen Sie diesen Beitrag für Details: ethereum.stackexchange.com/questions/6007/…

Antworten (4)

Sie müssen valuedas Wei-Formular an die sendTransactionMethode übergeben:

web3.sendTransaction({to:receiver, from:sender, value:web3.toWei("0.5", "ether")})

senderKonto muss entsperrt werden, damit dies erfolgreich ist.

Quelle


Um Token zu senden, müssen Sie anrufen

contract_data.transfer(receiver,amount{from:web3.eth.accounts[0]});

oder etwas in diesen Zeilen. Sie müssen nicht verwendenweb3.eth.sendTransaction

valuewird verwendet, um Ether zu senden. Aber ich denke, OP bittet um die Übertragung von Token (vielleicht erc-20).
Ich vermute, er will Ether schicken, weil er sich wundert, warum nur Gas abgezogen wird
Hey, vielen Dank. Ja, ich beabsichtige, Token zu übertragen. Und dazu muss ich die Übertragungsfunktion meines Vertrages nutzen.
Ich habe meine Lösung aktualisiert, um Token zu senden
Ihnen fehlt web3.eth.sendTransaction
//set web3 variable
const web3 = new Web3(window.ethereum);

//get all the accounts
const accounts = await web3.eth.getAccounts();

//if you're using react
this.setState({web3, accounts});

//send the tx using react
this.state.web3.eth.sendTransaction({to: contractAddress, from: this.state.accounts[0], value: ETHamount});

oder wenn Sie reagieren nicht verwenden

web3.eth.sendTransaction({to: address, from: address, value: inWei});

Eine Umrechnung von wei in eth finden Sie hier . Informationen zur Einstellung von web3-Variablen (es verwendet normalerweise Infura als Endpunkt [auch bekannt als der Anbieter]) finden Sie hier .

Wenn Sie web3.js 1.3.x verwenden , hat dies in meinem Fall funktioniert:

web3.utils.toHex(web3.utils.toWei(amount, 'ether'))

Aus irgendeinem Grund hat der folgende Befehl einen falschen Wert an Metamask gesendet.

web3.utils.toWei(amount, 'ether')

Mit Metamaske:

window.ethereum.request({
  method: 'eth_sendTransaction',
  params: [{
    to,
    from,
    value: web3.utils.toHex(web3.utils.toWei("0.5")),
  }],
})
.then(() => {
  alert("Woot!")
})
.catch((e) => {
  alert("Oops!")
})