我是以太坊/固体/solidity/web3.js。我正在尝试使用web3.js web.eth.sendsendtransaction()方法,以便在私人链上部署的合同中运行函数。
我尝试执行的功能是:
contract Matematicas{
uint256 ultimaSuma;
uint256 ultimaMultiplicacion;
uint256 contador;
uint256 factorA;
uint256 factorB;
uint256 sumandoA;
uint256 sumandoB;
bytes datosMensaje;...
function multiplica(uint256 a, uint256 b) public{
datosMensaje=msg.data;
factorA=a;
factorB=b;
ultimaMultiplicacion=(a*b);
}
...
}
我从薄雾浏览器runnig调用乘数以下JavaScript代码:
var contracAddress="0xXXXXXXXX";
var contractABI=[{"constant":false,"inputs":[{"name":"a","type":"uint256"},{"name":"b","type":"uint256"}],"name":"multiplica","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},...];
var functionABI=$.grep(contractABITercero,function(metodo,index){ return metodo.name=='multiplica';});
functionABI=abiDelaFuncion[0];
var abiByteCode= web3.eth.abi.encodeFunctionCall(functionABI,[document.getElementById('firstNumber').value,document.getElementById('secondNumber').value]);
var transactionObject={from:"0xxxxxxxxxx",to:contractAddress,data:abiByteCode, gas:10000000};
web3.eth.sendTransaction(transactionObject, function(error,hash){......});
如果我设置了firstnumber = 1000和secendnumber = 2000,则abibytecodes恰好是:
0x38e836df00000000000000000000000000000000000000000000000000000000000003e800000000000000000000000000000000000000000000000000000000000007d0
0x38e836df是FUCTION签名的SHA,这是正确的;
03E8是1000的十六进制(第一名)右
07d0是2000年的十六进制(第二名)OK
但存储在块链中的数据为:
datosMensaje: 0x38e836df0000000000000000000000000000000000000000000000000000000000**9e0**3e80000000000000000000000000000000000000000000000000000000000**9e0**7d0
factorA:
8520680 (0x8203E8)
factorB:
8521680 (0x8207D0)
我在做什么错?
我在Windows 10 64位桌面上使用Geth 1.7.3和Mist 0.9.2。
P.S。我知道还有其他方法可以调用合同功能,例如通过New Web3.ETH.Contract(Contractabi,ContractAddress)实例化合同,但我正在考虑一个需要使用SendTransaction()方法
这是由于Remix IDE在"调试"选项卡中显示值的错误。如果我使用Web3.js Ver 1.0方法getStorageat(地址,键)从区块链中恢复数据。