我正在尝试调用solidity函数并且出错。这就是我创建合同的方式:
var EthProjContract = web3.eth.contract(my abi);
var EthProj = EthProjContract.at('0xcce478FDeF9F1DF933e31B1eeA48561e0095628A');
我正在调用我的函数:
EthProj.setMessage.sendTransaction(shoco.compress(document.getElementById("MessageBox").value), {from: document.getElementById("add").value})
并收到此错误:
Uncaught Error: Invalid number of arguments to Solidity function
如果你想知道什么是shoco.compress,它会将我的字符串压缩成uint8arrays。例如,
shoco.compress("Hello")
返回Uint8Array(3) [72, 193, 77]
如果我Hello
框中有MessageBox
并致电
EthProj.setMessage.sendTransaction(shoco.compress(document.getElementById("MessageBox").value), {from: document.getElementById("add").value})
我收到错误。但是,当我打电话时
EthProj.setMessage.sendTransaction([72, 193, 77], {from: document.getElementById("add").value})
它完美无缺。这意味着它无法获取我的文字。那可能是什么?所有我能想到的可能是Uint8Array(3)
在那里可能会弄乱它。如果是这样,我该如何解决?
答案 0 :(得分:0)
修正了我的错误。 我就是这样做的。
var message = [0, 0, 0];
for(var i = 0; i < shoco.compress(document.getElementById("MessageBox").value).length; i++) {
message.length = shoco.compress(document.getElementById("MessageBox").value).length;
message[i] = shoco.compress(document.getElementById("MessageBox").value)[i];
}
我发现它无效,因为它在uint8array
的回复中说shoco.compress
。我通过创建一个新数组并将该数组设置为等于shoco.compress
来解决这个问题,摆脱了uint8array
。