Solidity
如何在solidity中連接字元串?
我正在嘗試將兩個字元串連接起來。
我嘗試了
+
or.
但沒有一個選項有效。目前還沒有太多關於字元串連接的文件。甚至可能嗎?如果沒有,我可以將變數插入字元串嗎?
針對低氣體消耗進行了優化
乙太坊社區已經實現了一些ABI 編碼功能,這些功能可以在本地訪問,而無需呼叫另一個合約。這是您可以使用 ABI 編碼將字元串附加到另一個字元串的方法:
function append(string a, string b, string c, string d, string e) internal pure returns (string) { return string(abi.encodePacked(a, b, c, d, e)); }
為了展示,我呼叫了這兩個函式,這個函式和前面提出的oraclizeAPI 合約中使用的函式,與 5x 參數“字元串”重新混合,並比較了 ABI 編碼小於 2/3 的氣體消耗其他解決方案的消耗和執行成本僅為 1/7 左右:
初步解決方案:
Transaction cost: 45380
Execution cost: 19436
ABI 編碼:
Transaction cost: 28650
Execution cost: 2706
公平地說,ABI 編碼出現的時間並不長,早期提出的解決方案也能完成這項工作。我自己已經使用 oraclizeAPI 中的 strConcat 函式有一段時間了。然而,特別是如果你需要這個函式被另一個智能合約呼叫,或者在內部被一個改變合約狀態的函式呼叫,為了成本效益,你絕對應該使用 ABI 編碼。