Ich habe eine Zahl als Zeichenfolge, die ich als Parameter an die intelligente Vertragsfunktion übergebe. Die Funktion nimmt byte32 als Parameter.
Hier ist der node.js-Code zum Ausführen der Vertragsfunktion:
const app = require("express")();
const config = require("./config");
const Web3 = require("web3");
const web3EndPoint = config.web3EndPoint;
const web3 = new Web3(new Web3.providers.HttpProvider(web3EndPoint));
const ethTx = require('./eth-transaction');
const abi = config.abi;
const MyContract = web3.eth.contract(abi);
const myContractInstance = MyContract.at(config.contractAddress);
txnCount = web3.eth.getTransactionCount(config.defaultAccount);
const parameter = '1234';
const data = myContractInstance.setID.getData(parameter);
myContractInstance.setID.estimateGas(parameter, (error , value) => {
if (!error) {
console.log("gasLimit" , value);
const rawTx = {
nonce: web3.toHex(txnCount) ,
gasPrice: web3.toHex(100000000000) ,
gasLimit: value ,
to: config.contractAddress ,
value: web3.toHex(0) ,
data: data ,
};
ethTx.sendRawTransaction(config.priKey , rawTx , web3 ).then((result) => {
console.log(result);
}).catch(transactionFailedErr => {
console.error(transactionFailedErr);
});
} else {
console.error(error);
}
});
myContractInstance.LogTestCase().watch((error, result) => {
console.log(web3.toUtf8(result.args._id)); // Its logs 'M'
});
Hier ist der Soliditätscode:
pragma solidity ^0.4.21;
contract test2 {
bytes32 public _id;
event LogTestCase(
bytes32 _id
);
function setID(bytes32 cId) returns (bool){
_id = cId;
emit LogTestCase(_id);
return true;
}
}
Wenn ich jetzt '1234' als Parameter einfüge, ergibt das Abrufen aus dem Vertragsereignis 'M'. Aber wenn ich eine andere Zeichenfolge mit Alphabeten einfüge, erhalte ich die richtige Anfangszeichenfolge
Das Übergeben einer beliebigen Zahl als Zeichenfolge an die Vertragsfunktion mit dem Typ byte32 kann also nicht abgerufen werden. Gibt es eine Möglichkeit, genau das zu bekommen, was ich bestanden habe?
Um byte32
den Parameter richtig zu übergeben, müssen Sie das Präfix im Wert verwenden 0x
(z. B. '0x1234').
oder schauen Sie sich an, wie Sie string
zu bytes32
https://ethereum.stackexchange.com/a/23110/30889 konvertieren
gute Stimmung
bytes32
Javascript.Apar Adhikari
gute Stimmung
parameter
an den Vertrag und wie genau analysieren Sie das zurückgegebene Ereignis?Kaki Meister der Zeit
Apar Adhikari
Apar Adhikari
gute Stimmung
string
bevorbytes32
man es an den Vertrag sendet, und wie man konvertiert,bytes32
nachdemstring
man es aus dem Vertrag erhalten hat.