У меня есть число в виде строки, которую я передаю функции смарт-контракта в качестве параметра. Функция принимает byte32 в качестве параметра.
Вот код node.js для выполнения функции контракта:
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'
});
Вот код солидности:
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;
}
}
Теперь, когда я помещаю «1234» в качестве параметра, извлечение его из события контракта приводит к «M». Но когда я помещаю любую другую строку, содержащую алфавиты, я получаю правильную начальную строку
Таким образом, передача любого числа в виде строки функции контракта с типом byte32 не может быть получена. Есть ли способ получить именно то, что я прошел?
Чтобы byte32
правильно передать параметр, вам нужно использовать 0x
префикс в значении (например, «0x1234»).
или посмотрите, как конвертировать string
в bytes32
https://ethereum.stackexchange.com/a/23110/30889
хорошая вибрация
bytes32
Javascript.Апар Адхикари
хорошая вибрация
parameter
в контракт и как именно вы анализируете возвращаемое событие?Каки Мастер Времени
Апар Адхикари
Апар Адхикари
хорошая вибрация
string
вbytes32
перед отправкой в контракт, и как конвертировать изbytes32
вstring
после получения из контракта.