如何通过 web3js 在solidity 中建立一个大的字符串数组
Posted
技术标签:
【中文标题】如何通过 web3js 在solidity 中建立一个大的字符串数组【英文标题】:How to build up a large string array in solidity through web3js 【发布时间】:2022-01-05 18:26:12 【问题描述】:我需要通过 web3js 建立一个大的字符串数组,有 1000 个元素。
Solidity 函数似乎不接受字符串数组作为参数。我也尝试了 abicoder 2,因为我已经读过使用它,这是可能的,但是当我执行该函数时,以太坊会恢复交易。 定义一个接受固定数量字符串的函数。似乎solidity 仅限于16 个参数,所以我需要在web3js 中执行该函数100 次,这会消耗大量的gas。有人有什么好主意吗?
【问题讨论】:
“当我执行函数时,以太坊恢复交易”你确定你不只是用完了gas吗?你为每个字节的 calldata 付费,所以如果你传入数千个字符串,你很容易超过 gas 限制。 abicoder v2 很好地支持字符串数组,包括静态和动态大小的。 【参考方案1】:Solidity 接受字符串数组作为函数参数。
pragma solidity ^0.8;
contract MyContract
function foo(string[] memory _arg) external
【讨论】:
以上是关于如何通过 web3js 在solidity 中建立一个大的字符串数组的主要内容,如果未能解决你的问题,请参考以下文章
如何将一组结构从 web3js 发送到 Solidity 合约?
Solidity & Web3js:EIP712 签名 uint256 工作签名 uint256[] 不