Solidity
為什麼對方法參數使用 abi 編碼/解碼?為什麼不簡單地將方法簽名中的參數分開呢?
我看過原始碼,他們會將一堆參數編碼為一個
bytes
參數並將其傳遞給一個函式,這樣做的真正目的是什麼?例如:function hello(bytes memory data) public { (string memory name, uint256 age) = abi.decode(data, (string, uint)); // do something with name and age }
在上面的範例中,兩者
name
和age
都可以hello()
作為單個參數傳遞給函式data
。但是在函式內部,我仍然需要知道如何 decodedata
,這意味著我事先已經知道將傳遞給這個函式的內容。那麼,為什麼還要使用編碼/解碼而不是這樣:function hello(string name, uint256 age) public { // do something with name and age }
簡單地將方法參數中的參數分開不是比以後解碼更簡單嗎?事實上,作為與這個合約互動的客戶端,我不必費心去編碼參數;我可以輕鬆地將值傳遞給方法!
與僅分離參數相比,使用 abi 編碼/解碼有什麼好處?在什麼情況下我應該考慮使用 abi 編碼/解碼方法來分隔函式中的參數?最佳實踐應該是什麼?
我認為它只是歸結為功能的目的是什麼。如果你想要一個允許你代表該合約執行任意函式的函式(例如多重簽名),你不想限制你可以執行的輸入/函式的類型,所以你只需要一個通用的