Solidity

msg.data 可以用作標識符嗎?

  • February 27, 2019

我正在查看這裡的多重簽名錢包實現,我看到 sha3( msg.data, block.number) 的用法被用作標識符。

裡面到底是什麼msg.data,為什麼它足夠獨特,可以用來製作標識符?它不只包含有關如何呼叫契約的資訊嗎?如果我用相同的參數呼叫契約,這意味著它會是一樣的嗎?

msg.data通常是ABI編碼資訊,向合約指示要呼叫的函式和參數。

如果使用相同的參數呼叫合約,使用標準工具msg.data將是相同的。但是,對於每個塊,使用block.numberas in對其進行散列sha3(msg.data, block.number)將產生完全不同的結果。

注:msg.data具有延展性。 例如,可以在msg.data不更改將在合約中呼叫的函式的情況下附加額外的尾隨零。使用標準工具(如 web3.js)不會創建額外的尾隨零,但您應該在msg.data用作標識符時檢查您的案例,以確保延展性不會導致問題或漏洞。

(在問題中的特定錢包案例中,msg.data所有者的延展性似乎只會對他們自己或其他所有者造成混淆。)

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