合約元資料
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 的正規化理解,意思是那些智慧型合約...