You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决调用Solidity函数时的「Uncaught Error: Invalid number of arguments」错误

解决Solidity函数调用时Uint8Array参数导致的「参数数量错误」问题

这问题我之前踩过坑,核心原因就是你用的旧版web3.js对Uint8Array类型的处理逻辑和普通数组不一样——它会把Uint8Array的每一个元素当成单独的参数传给Solidity函数,这就直接和你合约里函数定义的参数数量不匹配,自然触发了Uncaught Error: Invalid number of arguments to Solidity function错误。

快速解决方法:把Uint8Array转换成普通JavaScript数组

你只需要在传入参数前,把shoco.compress返回的Uint8Array转成普通数组就行,有两种简单的方式:

方式1:使用Array.from()转换

修改你的调用代码如下:

EthProj.setMessage.sendTransaction(
  Array.from(shoco.compress(document.getElementById("MessageBox").value)),
  {from: document.getElementById("add").value}
)

方式2:使用扩展运算符[...]转换

这种写法更简洁:

EthProj.setMessage.sendTransaction(
  [...shoco.compress(document.getElementById("MessageBox").value)],
  {from: document.getElementById("add").value}
)

为什么这样能解决问题?

你的Solidity函数应该是定义了类似bytes或者uint8[]的单个参数,普通JavaScript数组会被web3.js正确识别为一个完整的参数传递给合约;而Uint8Array作为TypedArray,旧版web3.js没有做特殊处理,会把它拆解成多个独立的数值参数,导致参数数量和函数定义不符,进而报错。

内容的提问来源于stack exchange,提问作者Cal W

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:33:44