如何通过 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[] 不

【ETH钱包开发04】web3j转账ERC-20 Token

Web3JS 发送事务

如何通过 web3js 交易设置 Eth 价格

通过 web3js 向 Metamask 发送多行签名