Solidity ではエレガントかつ効率的に解決できないと思われる、かなり一般的な問題に遭遇しました。
任意の長い文字列の任意の長い配列を Solidity コントラクトに渡す必要があります。
私の考えでは、それは次のようなものになるはずです
function setStrings(string [] row)
しかし、それはできないようです。
この問題をどうすれば解決できますか?
ベストアンサー1
これはSolidityの制限であり、その理由は、 はstring
基本的に任意の長さのバイト配列(つまりbyte[]
)であり、string[]
2次元のバイト配列(つまりbyte[][]
)も同様であるためです。Solidity リファレンスただし、パラメータとしての 2 次元配列はまだサポートされていません。
コントラクト関数は 2 次元配列を受け入れることができますか?
これは外部呼び出しと動的配列にはまだ実装されていません。動的配列は 1 レベルしか使用できません。
この問題を解決する 1 つの方法は、すべての文字列の最大長を事前に知っている場合 (ほとんどの場合は可能です)、次のようにすることです。
function setStrings(byte[MAX_LENGTH][] row) {...}