Tengo un número como cadena que paso a la función de contrato inteligente como parámetro. La función toma byte32 como parámetro.
Aquí está el código node.js para ejecutar la función de contrato:
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'
});
Aquí está el código de solidez:
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;
}
}
Ahora, cuando pongo '1234' como parámetro, obtenerlo del evento de contrato da como resultado 'M'. Pero cuando pongo cualquier otra cadena que contenga alfabetos, obtengo la cadena inicial correcta
Por lo tanto, pasar cualquier número como una cadena a la función de contrato con el tipo byte32 no se puede recuperar. ¿Hay alguna manera de obtener exactamente lo que pasé?
Para pasar byte32
el parámetro correctamente, debe usar 0x
un prefijo en el valor (por ejemplo, '0x1234')
o vea cómo convertir string
a bytes32
https://ethereum.stackexchange.com/a/23110/30889
buena vibración
bytes32
en Javascript.Apar Adhikari
buena vibración
parameter
al contrato y cómo está analizando exactamente el evento devuelto?kaki maestro del tiempo
Apar Adhikari
Apar Adhikari
buena vibración
string
abytes32
antes de enviarlo al contrato, y cómo convertir debytes32
astring
después de recibirlo del contrato.