【发布时间】:2018-11-07 01:48:27
【问题描述】:
我正在尝试调用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]
如果我的MessageBox 框中有Hello 并拨打电话
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) 在那里可能会搞砸。如果是这样,我该如何解决?
【问题讨论】:
-
对不起,我在帖子中的代码格式错误,我编辑它是正确的。我想我正在研究如何解决它。当我这样做时:
var message = [0, 0, 0]; message[0] = shoco.compress(document.getElementById("MessageBox").value)[0]; message[1] = shoco.compress(document.getElementById("MessageBox").value)[1]; message[2] = shoco.compress(document.getElementById("MessageBox").value)[2];和sendTransaction使用消息作为我的论点,它可以工作。只有当我可以使它具有可变长度之类的东西时。
标签: javascript html solidity web3 geth