我遇到了一个很常见的字符串数组string array问题,不能很好地解决。
问题是这样我必须把任意长度的字符串传递给一个solidity智能合约。
我觉得这样就可以:
function setStrings(string [] row)
但实际上不太对。
这里有一个solidity的限制,原因是String字符串基本上是任意长度的byte array字节数组(即byte[]),因此String []是二维字节数组(即byte[][])。根据solidity的说法,二维数组作为参数还不支持。
智能合约的函数可以接受二维数组吗?
这还没有实现外部调用和动态数组——只能使用一维的动态数组。
解决这个问题的一个办法是,如果你知道所有的字符串的最大长度(在大多数情况下都有可能),那么可以这样:
function setStrings(byte[MAX_LENGTH][] row) {...}
也可以尝试将数组元素转换为字节字符串,然后将该字节串反序列化为函数内的数组。这样做比较昂贵的,如果你没有选择的话。
原文:
Solidity字符串数组问题与解决方案

在Solidity中遇到一个关于字符串数组的问题,由于字符串本质上是动态字节数组,导致二维数组作为参数不被支持。智能合约函数目前仅接受一维动态数组。解决方法包括预先确定所有字符串的最大长度来调整数组结构,或者将字符串转换为字节串再在合约内反序列化,但这会增加成本。推荐资源包含以太坊开发的相关教程。
最低0.47元/天 解锁文章
909

被折叠的 条评论
为什么被折叠?



