-1

我正在尝试调用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)在里面可能会把事情搞砸。如果是这样,我该如何解决?

4

1 回答 1

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。我通过创建一个新数组并将该数组设置为等于 my 来解决此问题shoco.compress,摆脱uint8array.

于 2018-05-28T12:56:15.623 回答