Greeter

我是否需要一份已編譯的契約才能獲得 ABI 定義?

  • February 17, 2016

為什麼我需要合約的編譯版本來獲取 ABI 定義?似乎契約地址應該足夠了。

我很困惑,因為我只是想執行一個契約,假設它是在另一台電腦上製作的。看起來首先我需要用於創建契約的整個程式碼,我認為我不會假設。(我實際上只是跟隨“歡迎者”的例子)

似乎契約地址應該足夠了。

沒錯,如果只看契約就可以得到ABI就更好了。

那麼為什麼合約編寫者除了合約地址還需要提供 ABI 呢?

一個原因是合約中的函式方法 ID 是使用散列函式計算的。 因此,一個工具查看合約字節碼並提取該合約中的函式/方法的名稱是不可行的。(該工具必須猜測函式名稱是什麼,對它們進行雜湊處理,並查看前 4 個字節是否與方法 ID 匹配——可能的函式名稱太多。)

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