Solidity

如何在solidity中連接字元串?

  • March 31, 2022

我正在嘗試將兩個字元串連接起來。

我嘗試了+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 編碼。

引用自:https://ethereum.stackexchange.com/questions/729