當你作為Solidity 開發者開始編寫Ethereum 合約的時候,你會很容易接觸到一些概念,比如EVM(以太坊虛擬機,字節碼和ABI(應用程序二進制接口)),你是一個Javascript 開發者(就像我第一次學習這些名字一樣),這些名字對你來說不是一個真正的人,你可能想知道在以太坊世界和以太坊世界的理解和理解。
這篇文章會從技術的角度去了解這三個概念,以後發表這篇文章,你會知道什麼是EVM,字節碼和ABI,並且會了解如何在項目中快速生成和使用字節碼和ABI。
虛擬機和EVM
讓從以太坊虛擬機)了解,先把EVM啟動一邊,也是我們硬件VM。通俗的在機器上,與什麼不同的VM(EVM)可以上運行的軟件,但是不同的軟件是, VM物理主要是被設計來模擬硬件的。即這個軟件是使用“假裝”自己是一個硬件,就像音樂應用程序是一個虛擬機的播放系統一樣,它不是一個硬件,而是模擬了一個物理。
答案是虛擬機可以有效地擴展、管理和升級軟件運行所以來的基礎設施。要使用1000 個物理服務器的業務,你可能只需要20 個在每個物理服務器上運行50個虛擬機。甚至你可以讓一個虛擬機都運行不同的Linux操作系統,比如一個虛擬機運行Windows服務器,第二個Debian,第三個運行Gen too Linux,然後第四個運行ChromeOS!
設施的這些好處是你可以在這些虛擬機上運行多個應用程序,在同一個硬件中運行,所以這些硬件的計算資源和系統資源的使用效率更高,提升了基礎的性價比。
以太坊虛擬機(EVM)也是一種虛擬機。 EVM 的目的是創造一個去中心化的“世界計算機”,而不是高效的硬件資源。一個運行區塊網絡中的每個“節點”是一個單獨的硬件,EVM 是客戶端的節點軟件。以太坊技術規範,因為他們需要更新彼此的狀態連接,形成一個網絡。然後他們的狀態同步,以形成一個經常的巨大的數據庫。網絡中的節點需要實現對數據的同步,而數據的同步是由共識算法的實現。
EVM作為一個天才化的虛擬網絡機,可以運行一個典型的智能去合約的程序。就像其他應用一樣,我們因為編完智能合約以後會,然後被部署(部署在以太坊區塊鏈)。區塊鍊是不可篡改的,所以合約一旦部署完成,就不能修改了。以後合約部署完成,EVM就是這個合約中的代碼被執行的環境,也就是運行我們部署的智能合約的虛擬機。
但是我們非常開始使用我們人類的代碼來編寫程序的(即使在剛學習的時候,可以機器性強),這是因為需要閱讀、編輯、維護和調試軟件。但是是無法執行人類的可調用代碼的,它們只能夠識別出由其後1個代碼所發出的數據,並且是一串串並組成請求的數據流。所以在我們完成編譯器(也是一個軟件)之後,它也需要編譯器來編譯上運行。
在Solidity 中,我們編譯代碼以後,會得到兩個“神器”:字節碼和ABI。
Solidity 中的字節碼
Bytecode是一種Solidity以後,它包含了一個用於編寫其他計算機指令的譯文。 Bytecode是以每一個數字信息,字符信息和被編碼的方式。為操作碼 的操作,這些操作碼的大小都是1 比特(8 位)。這也是為什麼我們叫它“字節碼”,即長度為一個字節的操作碼。
因為每一行代碼都會被分解成一個操作碼,所以計算機會在運行代碼的時候會清楚的知道要做什麼。
在以太坊,其實被部署在區塊鏈上的就是字節碼。我們用Metamask 協議部署到的字節鏈上,並確認交易的時候,我們實際上可以將字節碼部署了。字節碼可以被拆分時成多個操作碼,但本文不會涉及。
字節碼存儲在以太坊的東西,同時它在我們與智能合約的時候,為你將固體的網絡連接在一起。有很多工具和庫(有很多工具和庫(編譯機,solc 可以用字節碼編譯)就是幫助我們執行。的方式是通過在線IDE Remix來編譯合約,然後復制ABI和字節碼。
這裡舉個小例子,怎樣生成和復製字節碼,點擊這個連接然後打開Chainlink Price Feed,可以在Remix中看到Solidity智能。點擊編譯然後就可以復製字節碼了,非常簡單!
什麼是Solidity ABI?
聽說API(應用程序編程接口,它實際上包含了很多,,和特性,可以通過API,網絡變量的端點功能與函數庫的函數服務或應用程序服務或其他功能)。 API。 API 是一個接口,可以幫助多個軟件之間進行交互。
ABI 合約中可以定義為我們的智能合約中的智能合約和應用程序。 Javascript 是一個最常用的工具,而JavaScript 也是最常用的工具,而JavaScript ),只要你有任何一種語言,就可以使用ABI,只要你有任何一種語言都可以使用。
Solidity中的ABI結構
所以ABI 就是這樣一些定義,用於尋找合同的方法,參數,數據類型來幫助我們幫助我們的日常任務,智能合約發出的事件的結構,以下是在ABI 中找到名字的方法。
- 類型: 定義了函數的類型,類型是`function`、`constructor`、`receive`或`fallback`中的一個。
- 姓名: 函數的名稱是什麼。
- 輸入: 一個包含了以下信息的對象的目錄
- 姓名: 參數名稱。
- 類型: 參數類型。
- 成分: 參數類型是元組的時候會使用到。
- 輸出: 類似輸入的物品種類。
- 狀態可變性: 標註函數狀態的字符串。值可以是`view`、`pure`、`view`、`nonpayable`、和`payable`。
個性化的錯誤和時間有很相似的數據結構,你可以在官方文檔中學習它。
ABI 可以被表示成一個類似於下面的JSON 文件
[ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "getLatestPrice", "outputs": [ { "internalType": "int256", "name": "", "type": "int256" } ], "stateMutability": "view", "type": "function" } ]
你可以再次在Remix IDE 中打開Chainlink Price Feed 合約,然後生成上面的ABI。編譯代碼,然後再獲取ABI,如下圖所示。
你從一個普通的函數類型函數輸入和其他什麼類型的函數是一個普通的函數類型,它的返回值是一個普通的函數類型,它是一個智能合約時,它需要更多的電話呼叫。當然,在會使用類似的方式上,你可以用這個工具庫來與你最終的秘密。
另外一個獲取ABI 和Bytecode 的方法:你可以通過Remix 中的“Compilation Details”獲得需要的信息,如下圖所示。庫和協議無法通過這種方式獲取ABI 和字節碼。
你已經了解EVM 是,字節碼是什麼,為什麼ABI 智能合約很重要。開發效率。
您可以關注鏈家禽機資料和私信加入者社區,有大量關於智能合約開發的學習以及關於區塊鏈的話題!