以太坊智慧型合約的元資料

2021-08-29 07:30:39 字數 1911 閱讀 2938

合約元資料

solidity編譯器自動生成json檔案,即合約元資料,其中包含有關當前合約的資訊。您可以使用此檔案查詢編譯器版本,使用的源,abi和natspec文件,以更安全地與合約互動並驗證其源**。

編譯器將元資料檔案的swarm雜湊附加到每個合約的位元組碼末尾(詳見下文),以便您可以以經過身份驗證的方式檢索檔案,而無需求助於集中式資料提供程式。

您必須將元資料檔案發布到swarm(或其他服務),以便其他人可以訪問它。您可以使用 生成名為的檔案的命令來建立檔案。它包含對源**的swarm引用,因此您必須上載所有原始檔和元資料檔案。solc --metadatacontractname_meta.json

元資料檔案具有以下格式。以下示例以人類可讀的方式呈現。格式正確的元資料應正確使用引號,將空格減少到最小,並對所有物件的鍵進行排序以獲得唯一的格式。此處不允許使用注釋,僅用於解釋目的。

,

//必需:編譯原始檔/源單元,鍵是檔名

sources:

, "mortal": }"}},

//必需:編譯器設定

settings:

, // solidity必需:合同或庫的檔案和名稱

//為其建立元資料。

compilationtarget: ,

libraries:

},//必需:生成有關合同的資訊。

output:

}

警告由於生成的合約的位元組碼包含元資料雜湊,因此對元資料的任何更改都會導致位元組碼的更改。這包括對檔名或路徑的更改,並且由於元資料報括所有使用的源的雜湊,因此單個空格更改會導致不同的元資料和不同的位元組碼。

注意

請注意,上面的abi定義沒有固定的順序。它可以隨編譯器版本而改變。

位元組碼資料雜湊的編碼

因為我們可能支援將來檢索元資料檔案的其他方法,所以對映儲存在 cbor編碼中。由於編碼的開頭不容易找到,因此它的長度是以雙位元組大端編碼新增的。因此,當前版本的solidity編譯器將以下內容新增到部署的位元組碼的末尾:

0xa1 0x65 『b』 『z』 『z』 『r』 『0』 0x58 0x20 <32 bytes swarm hash> 0x00 0x29

因此,為了檢索資料,可以檢查部署的位元組碼的結尾以匹配該模式,並使用swarm雜湊來檢索檔案。

注意

編譯器當前使用元資料的「swarm版本0」雜湊值,但這可能在將來發生變化,因此不要依賴此序列來開始。我們可能還會向此cbor結構新增其他資料,因此最佳選擇是使用適當的cbor解析器。0xa1 0x65 『b』 『z』 『z』 『r』 『0』

自動介面生成和natspec的用法

元資料以下列方式使用:想要與合約(例如mist或任何錢包)互動的元件從檔案的swarm雜湊中檢索合約的**,然後檢索該檔案的swarm雜湊。該檔案被json解碼為如上所述的結構。

然後,元件可以使用abi自動為合約生成基本使用者介面。

此外,錢包可以使用natspec使用者文件在使用者與合約互動時向使用者顯示確認訊息,同時請求對交易簽名的授權。

有關以太坊自然規範(natspec)的更多資訊,此處。

源**驗證的用法

為了驗證編譯,可以通過元資料檔案中的鏈結從swarm檢索源。使用指定的設定在該輸入上呼叫正確版本的編譯器(被檢查為「官方」編譯器的一部分)。將得到的位元組碼與建立事務或create操作碼資料的資料進行比較。這會自動驗證元資料,因為它的雜湊是位元組碼的一部分。過多的資料對應於建構函式輸入資料,應根據介面對其進行解碼並呈現給使用者。

智慧型合約 以太坊

智慧型合約是執行在可複製 共享的賬本上的電腦程式,可以處理資訊,接收 儲存和傳送價值。2.1 什麼是以太坊 以太坊 ethereum 是乙個分布式計算機,有許多的節點,其中的每乙個節點都會執行智慧型合約,然後把結果存在區塊鏈上。由於整個網路是分布式的,且應用就是乙個個的狀態組成,儲存了狀態就有了服務...

以太坊和智慧型合約

1 什麼是以太坊?以太坊的官方 告訴我們 以太坊是乙個執行著智慧型合約的分布式平台 應用程式完全按照程式執行,不存在故障 審查 欺詐或第三方干預的可能性 2 智慧型合約就是可以處理資金的指令碼。開發語言 solidity 整合開發工具ide remix,乙個基於瀏覽器的整合開發環境 開發框架 tru...

以太坊智慧型合約安全

智慧型合約就是自主執行的合約,其條款是用 規定的。雖然這個概念已經存在一段時間了,但至少從1996年nick szabo提出了這一概念以來,直到圖靈完備的以太坊區塊鏈來臨,智慧型合約的使用才變得普遍。對智慧型合約理念的字面解釋造成了 即法律 code is law 的正規化理解,意思是那些智慧型合約...