我遇到了一個很常見的字元串數組string array問題,不能很好地解決。
問題是這樣我必須把任意長度的字元串傳遞給一個solidity智能合約。
我覺得這樣就可以:
function setStrings(string [] row)
但實際上不太對。
這裡有一個solidity的限制,原因是
String
字元串基本上是任意長度的byte array位元組數組(即
byte[]
),是以
String []
是二維位元組數組(即
byte[][]
)。根據solidity的說法,二維數組作為參數還不支援。
智能合約的函數可以接受二維數組嗎?
這還沒有實作外部調用和動态數組——隻能使用一維的動态數組。
解決這個問題的一個辦法是,如果你知道所有的字元串的最大長度(在大多數情況下都有可能),那麼可以這樣:
function setStrings(byte[MAX_LENGTH][] row) {...}
也可以嘗試将數組元素轉換為位元組字元串,然後将該位元組串反序列化為函數内的數組。這樣做比較昂貴的,如果你沒有選擇的話。
原文:
http://cw.hubwiz.com/card/c/ethereum-FAQ/1/1/3/另外推薦一些之前的教程: