Ich versuche, die Methode meines Vertrags mit aufzurufen sendRawTransaction
. Ich habe eine Funktion in meinem Vertrag
updateReading(address consumerAddress,
uint32 consumerMeterId,
uint64 consumedReadingValue,
address producerAddress,
uint32 producerMeterId,
uint64 producedReadingValue)
die ich mit sendRawTransaction aufrufen möchte. Die updateReading
Funktion aktualisiert den Vertragsstatus des Vertrags. Wie kann ich diese Funktion mit aufrufen sendRawTransaction
?
Ich verwende das Truffle-Framework für die Entwicklung. Ich habe den folgenden Code in mein js geschrieben, um die Funktion mit aufzurufen sendRawTransaction
.
var privateKey = new Buffer(password,'hex')
var setData;
var contractAddress;
EnergyTrade.deployed().then(function (instance) {
contractAddress=instance.address;
setData=instance.updateReading(consumerAddress,consumerMeterId,consumedReadingValue,producerAddress,producerMeterId,producedReadingValue);
var rawTx = {
to:contractAddress,
from:consumerAddress,
data: setData
}
var tx = new Tx(rawTx);
tx.sign(privateKey);
var serializedTx = tx.serialize();
web3.eth.sendRawTransaction(serializedTx.toString('hex'), function(err, hash) {
if (!err)
console.log(hash);
});
})
Es gibt den folgenden Fehler in meiner Konsole zurück.
(node:23336) UnhandledPromiseRejectionWarning: Error: invalid type
at Object.exports.toBuffer (/home/maria/Desktop/12-Energy/node_modules/ethereumjs-util/dist/index.js:177:13)
at Transaction.setter [as data] (/home/maria/Desktop/12-Energy/node_modules/ethereumjs-util/dist/index.js:625:19)
at /home/maria/Desktop/12-Energy/node_modules/ethereumjs-util/dist/index.js:685:63
at Array.forEach (<anonymous>)
Ein weiteres Problem ist
(node:23336) UnhandledPromiseRejectionWarning: Error: invalid address
at inputAddressFormatter (/home/maria/Desktop/12-Energy/node_modules/truffle-contract/node_modules/web3/lib/web3/formatters.js:271:11)
at inputTransactionFormatter (/home/maria/Desktop/12-Energy/node_modules/truffle-contract/node_modules/web3/lib/web3/formatters.js:97:20)
at /home/maria/Desktop/12-Energy/node_modules/truffle-contract/node_modules/web3/lib/web3/method.js:89:28
at Array.map (<anonymous>)
Wie kann ich sendRawTransaction
in meinem js das Trüffel-Framework ermöglichen?
Wie die Fehlermeldung sagt, hat Truffle keine Methode, aber nach meiner Lektüre des Codes glaube ich, dass Sie über das Mitglied getData
auf das zugrunde liegende web3.js-Vertragsobjekt zugreifen können . contract
Versuchen Sie stattdessen Folgendes:
setData=instance.contract.updateReading.getData (consumerAddress,consumerMeterId,consumedReadingValue,producerAddress,producerMeterId,producedReadingValue);
Problem in Ihrem Code ist instance.updateReading()
in dieser Zeile. Web3js wird basierend auf Ihrem ursprünglichen abi als direkter Funktionsaufruf (sendTransation oder call()) behandelt. dh es wird kein Bin- oder Hex-String erstellt.
Bei der Methode getData() bin ich mir nicht sicher. Gemäß web3js können Sie encodeABI()
diese Methode verwenden, um Bytecode zurückzugeben.
Sie können einfach Ihre anhängen
setData = instance.updateReading(consumerAddress,consumerMeterId,consumedReadingValue,producerAddress,producerMeterId,producedReadingValue).encodeABI();
Weitere Informationen finden Sie unter dem folgenden Link
https://web3js.readthedocs.io/en/1.0/web3-eth-contract.html#methods-mymethod-encodeabi
https://github.com/ethereum/wiki/wiki/JavaScript-API#web3ethsendrawtransaction
encodeABI
ist die web3.js 1.0.0-Version von web3.js 0.2xx's getData
. Aber sie verwenden Truffle (das darunter web3.js 0.2xx verwendet), weshalb meine Antwort funktioniert.
Benutzer19510
getData
. Ich denke, Sie erwarten die Funktion von web3.jsgetData
, aber Sie verwenden Truffle.Crissi Mariam Robert
getData
, aber ein neues Problem wird generiert (node:23336) UnhandledPromiseRejectionWarning: Error: invalid type at Object.exports.toBuffer (/home/maria/Desktop/12-Energy/node_modules/ethereumjs-util /dist/index.js:177:13) bei Transaction.setter [als Daten] (/home/maria/Desktop/12-Energy/node_modules/ethereumjs-util/dist/index.js:625:19)Benutzer19510
Crissi Mariam Robert
Benutzer19510
Crissi Mariam Robert
Benutzer19510