String

如何在solidity中拆分字元串?

  • November 27, 2021

我正在使用 1155 令牌標準的 OpenZeppelin 預設。(https://github.com/OpenZeppelin/openzeppelin-contracts/tree/master/contracts/token/ERC1155/presets)我可以用它來鑄造代幣,並且我可以通過交易傳輸 4 個參數:

地址(接收者的)id(令牌的)數量(令牌的數量)數據(字節格式的附加數據)

我使用 id 和 data 來傳輸數據現在我遇到了一個問題,我想在數據欄位中傳輸兩個變數(以字元串格式)。首先,我必須將欄位數據從字節轉換為字元串。然後我想將數據欄位的內容分成兩個變數。一個變數有 13 個字元,另一個有 15 個字元。然後我可能必須將每個拆分分配給這兩個變數。通過發出事件,我可以在區塊鏈上傳輸兩個變數,並可以在日誌中訪問它。

請原諒,我是紮實的編碼的血腥菜鳥。有人知道我如何制定一個將字節轉換為字元串、將字元串分成兩部分然後將其分配給新變數的函式嗎?

如果是您自己將這兩個字元串打包成一個s1,那麼您可以:s2``bytes

  1. 在原始碼(在 JavaScript 中):

const data = abiCoder.encode(["string", "string"], [s1, s2]) 2. 通過data合約函式傳遞 3. 在接收端(在 Solidity 中):

(string memory s1, string memory s2) = abi.decode(data, (string, string))

這樣做可以完全避免字元串操作。

PS 請記住,data它不是供transfer函式本身使用的,而是傳輸接收方使用的(如果該接收方是合規ERC1155TokenReceiver合約的話)。

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