(Solidity + JS)Uncaught Error:Solidity函数的参数数量无效

时间:2018-05-28 12:46:34

标签: javascript html solidity web3 geth

我正在尝试调用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)在那里可能会弄乱它。如果是这样,我该如何解决?

1 个答案:

答案 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