Contract-Invocation

如何解碼對 Songbird 網路的呼叫?

  • November 4, 2021

例如:我是一個多重簽名者。我想解碼用於呼叫特定智能合約的呼叫數據。

智能合約範例:0x02f0826ef6aD107Cfc861152B32B52fD11BaB9ED (WNat) 我想解碼此通話數據:0x2e1a7d4d00000000000000000000000000000000000000000000000000158e4609

有沒有辦法解碼此呼叫以查看交易詳細資訊。

另一個例子:如果我想解碼一個預簽名的交易。以確保它具有正確的值。

要解碼 Songbird 網路上的呼叫,您可以使用此工具:https ://decoder.aflabs.si/ 。

它使用songbird explorer從合約地址獲取合約ABI,然後解碼函式呼叫及其參數。在您的範例中,它按預期工作:

解碼合約呼叫

只是添加到前面的答案來幫助人們理解如何解釋編碼。

通話數據由兩部分組成:

  1. 函式選擇器(前 4 個字節)
  2. 參數(前 4 個字節之後的所有內容)

函式選擇器是函式簽名雜湊的 keccack-256 的前 4 個字節:

功能:withdraw(uint256 _amount)簽名是withdraw(uint256)

keccack256withdraw(uint256)是:

2e1a7d4d13322e7b96f9a57413e1525c250fb7a9021cf91d1540d5b69f16a49f

前 4 個字節是:2e1a7d4d匹配您的呼叫數據的前 4 個字節。

接下來,我們從簽名中知道該函式接受一個 uint256 類型的參數(即 32 個字節)。

此參數在呼叫數據中編碼為:000000000000000000000000000000000000000000000001158e460913d00000

將此十六進製表示形式轉換為小數,我們得到:

20000000000000000000

因此我們可以得出結論,calldata 以20000000000000000000作為參數的數量為目標的withdraw 函式。

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