Events

我可以使用字元串(或任何類型)列表作為事件的參數嗎?

  • August 21, 2019

這是我的活動。

event Transfer(address sender, address receiver, string[] denoms, uint256[] amounts);

我用 watch() 函式查看了一個 Transfer 事件,這就是結果。

{
 address: "0x33036fcbd3413f70fbdf771a646ab7457b26d5e1",
 args: {
   amounts: [10000, 10000],
   denoms: ["", ""],
   receiver: "0x905319c93683eb3203437d21900d9bdda487f65e",
   sender: "0xb85618eac4df82118512c3ff9eca48a61a858fdb"
 },
 blockHash: "0x894fa661c7cd4fde5de2d32b9fc8732c2a58e28e93d9c8280fa7ebd8c2ffed1f",
 blockNumber: 6291,
 event: "Transfer",
 logIndex: 0,
 removed: false,
 transactionHash: "0x61b9edbc223d71accb0a223a5d7b867782f464607a41693239964f03c1def4a3",
 transactionIndex: 0
}

也許……字元串列表不能用作參數。這樣對嗎?

是的你是對的。string[]不能使用字元串列表 ( )。但是,uint256[]有可能。

您看到的問題是因為 Solidity 還不支持兩級動態數組,即,string[]需要兩級動態數組(字元串本身就是一個動態數組)。

如果您仍然想使用它,您只需要在程式碼頂部添加一個額外的實驗行。

pragma experimental ABIEncoderV2;

然後在事件中,提供字元串中的值的數量

$$ $$你想通過。例如。你想傳遞2個值的字元串列表,所以寫string[2]

event Transfer(address sender, address receiver, string[2] denoms, uint256[] amounts);

然後像這樣觸發你的事件:

emit Transfer(addr_sender, add_receiver, ["str1", "str2"], amnt)

**注意:**這是一個實驗性功能,因此不建議在實時部署中使用它。

此外,請始終嘗試先在Remix上編譯您的合約,然後再在您的項目上編譯。

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