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.
Sie müssen value
das Wei-Formular an die sendTransaction
Methode übergeben:
web3.sendTransaction({to:receiver, from:sender, value:web3.toWei("0.5", "ether")})
sender
Konto muss entsperrt werden, damit dies erfolgreich ist.
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
value
wird verwendet, um Ether zu senden. Aber ich denke, OP bittet um die Übertragung von Token (vielleicht erc-20).//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!")
})
Prashant Prabhakar Singh
Anshul Basia
Prashant Prabhakar Singh