Events
我可以使用字元串(或任何類型)列表作為事件的參數嗎?
這是我的活動。
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上編譯您的合約,然後再在您的項目上編譯。