Solidity

為什麼對方法參數使用 abi 編碼/解碼?為什麼不簡單地將方法簽名中的參數分開呢?

  • March 22, 2022

我看過原始碼,他們會將一堆參數編碼為一個bytes參數並將其傳遞給一個函式,這樣做的真正目的是什麼?例如:

function hello(bytes memory data) public {
 (string memory name, uint256 age) = abi.decode(data, (string, uint));
 // do something with name and age
}

在上面的範例中,兩者nameage都可以hello()作為單個參數傳遞給函式data。但是在函式內部,我仍然需要知道如何 decode data,這意味著我事先已經知道將傳遞給這個函式的內容。那麼,為什麼還要使用編碼/解碼而不是這樣:

function hello(string name, uint256 age) public {
 // do something with name and age
}

簡單地將方法參數中的參數分開不是比以後解碼更簡單嗎?事實上,作為與這個合約互動的客戶端,我不必費心去編碼參數;我可以輕鬆地將值傳遞給方法!

與僅分離參數相比,使用 abi 編碼/解碼有什麼好處?在什麼情況下我應該考慮使用 abi 編碼/解碼方法來分隔函式中的參數?最佳實踐應該是什麼?

我認為它只是歸結為功能的目的是什麼。如果你想要一個允許你代表該合約執行任意函式的函式(例如多重簽名),你不想限制你可以執行的輸入/函式的類型,所以你只需要一個通用的

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