天天看點

solidity中一個很常見的字元串數組string array問題

我遇到了一個很常見的字元串數組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/

另外推薦一些之前的教程:

  • python以太坊 ,主要是針對python圍繞web3.py進行區塊鍊以太坊應用開發的講解。
  • web3j ,主要是針對java和android程式員圍繞web3j庫進行區塊鍊以太坊開發的講解。
  • php以太坊 ,主要是介紹使用php進行智能合約開發互動,進行賬号建立、交易、轉賬、代币開發以及過濾器和事件等内容。
  • 以太坊開發 ,主要是介紹使用node.js、mongodb、區塊鍊、ipfs實作去中心化電商DApp實戰,适合進階。
  • 以太坊教程 ,主要介紹智能合約與dapp應用開發,适合入門。