之前,我們為大家分享了由Quillhash撰寫的EOS開發系列教程(一):EOS上可以構建怎樣的應用程序?以及EOS開發系列教程(二):開發智能合約前需要審核的項目。

本周,我們將繼續給大家分享EOS開發技術第三部分:了解在EOS上編寫DApp的基本概念,帶大家繼續了解EOS開發。

作者 | Quillhash

翻譯 | Starteos

在瀏覽一些時下流行的DApp網站後,應用程序開發人員可能會對EOS上不斷增加的DApp和交易率感興趣,以至於會考慮是否應該學習智能合約的開發。

但是,在開始研究時,由於缺乏高質量、有深度的資源以及缺少開發智能合約的環境,令人困惑的文檔很快會讓開發人員無所適從。這使得開發人員除了投入大量時間進行研究之外別無選擇,但對於工作較忙的開發人員來說這幾乎是不可能的。

我們打算通過本系列文章使學習過程順利進行,以便公司和開發人員可以利用EOS來開發去中心化應用程序。在本文中,我們將深入介紹一些核心概念,比如開發生態系統、合約的基本結構、合約開發的各種類型和模塊(EOS CDT)以及各種研究資源的建議。

01 EOSIO架構

EOSIO提供了一個類似於操作系統的去中心化平台,該平台使用區塊鏈來維護事件和交易的分散式、無信任賬本。決定由誰創建新的塊(共識)是通過委託股權證明(DPoS)來實現的。

在DPoS中,人們需要抵押Token來獲得為BP(區塊生產者)投票的權利,BP(區塊生產者)負責將新的塊添加至區塊鏈。如果選民懷疑某BP有惡意行為,可以撤票並投票支持新的BP。DPoS在給定的時間內只有21個BP創建新的塊,比工作量證明(PoW)共識演算法的驗證次數少,因此其事務處理速度是非常快的。

EOSIO支持創建智能合約,其執行和資源消耗的方式與在操作系統上運行的應用程序類似。智能合約使用C++編寫並轉換為WebAssembly。

計算量和速度由帶寬和CPU資源負責,持久信息的存儲由RAM負責。只有在執行某些智能合約操作時才需要CPU和帶寬,這些資源可以通過抵押Token獲得。

持久性資源RAM需要根據需求預先購買。RAM通常為易失性內存,但在EOS中,它是智能合約的持久性內存。RAM的價格是波動的,它通過系統的Bancor演算法基於供需來確定。由於RAM是一種相對稀缺的資源,EOS系統正在採取措施,防止對RAM進行囤積和投機交易。

必須注意的是,這種持久性信息不存儲在區塊鏈中。區塊鏈僅用於記錄顯示智能合約持久信息發生了變化的交易和事件。

02 開發生態系統

任何類型的智能合約開發都需要本地測試節點、與本地節點通信的方式、管理錢包或密鑰的方法、設置IDE /代碼編輯器和編譯器/轉換器(將智能合約轉換為可執行格式)、強大的測試框架(為本地節點準備新狀態)以及gui工具(與公共測試網路或主網路上部署的合約進行交互)。接下來我們結合EOS對這幾點進行討論。

Nodeos是核心的EOSIO節點守護程序,可以配置插件來運行節點。Nodeos可以作為本地節點來進行開發和測試,也可以用於全節點和區塊生產。

Cleos是與本地節點守護進程交互的命令行界面,也可以配置為與遠程節點交互。Cleos用於發出管理錢包、配置節點和向智能合約發送交易事務的相關命令。

Keosd是將EOSIO密鑰安全存儲在錢包中的組件。

Eosio.cdt是合約開發工具包,它公開了各種庫和編程結構,幫助開發人員進行智能合約開發,其中編程結構提供了編程介面來處理EOS的各種組件。 Eosio.cdt包含eosio-cpp,它是負責將使用C ++編寫的合約轉換為wasm(WebAssembly)的模塊。Eosio.cdt可以生成合約的ABI,它是一個JSON文件,指定了合約支持的類型和操作。Eosio.cdt通常用於將智能合約功能與客戶端應用程序結合在一起。

EOSFactory是由Tokenika開發的基於Python的測試框架,我們發現它對於DApp的開發和測試來說非常強大。EOSFactory提供了一個簡單的基於Python的界面,可以與智能合約進行交互,並可輕鬆設置測試用的新節點實例。EOSFactory還支持在公共測試和主網上部署和管理合約。

Scatter是一個gui應用程序,可以輕鬆連接EOS網路並安全地管理資產,類似於以太坊中的Metamask。Scatter可用作所有主要平台的桌面應用程序。

由於合約是用C++編寫的,因此任何時下流行的IDE都可以用來編寫智能合約,如VS Code。管理EOS中的角色和許可權在EOS中,管理角色和許可權的本地支持在執行智能合約的訪問控制和許可權方面非常強大。每個EOS賬戶有兩個立即可用的許可權,Active和Owner許可權。Owner許可權與賬戶的「管理級別」操作有關,是「Active」許可權的上級許可權。Active許可權用於常見的操作,例如執行智能合約操作(轉賬、購買RAM等)。此外,我們也可以通過智能合約創建新的許可權。

另一個有趣的許可權是eosio.code許可權。如果我們希望eosio.code許可權以編程方式與其它合約進行通信,智能合約將使用該許可權。該許可權必須由託管智能合約的賬戶將其添加到Active許可權中才能生成。

03 EOS智能合約的基本概述

智能合約是在EOSIO節點上運行的軟體,其持久性數據存儲在節點的RAM中,操作事件在區塊鏈中存儲和同步。EOS智能合約公開了可執行的「操作」,可以執行某些合約特定的功能,但受限於調用該操作的賬戶的約束和許可權。考慮到這一點,我們可以將合約視為三個部分共同作用的組合。

第一,「函數定義」,函數定義可以指定操作的邏輯。第二,「多索引表」,多索引表可以提供連接永久性存儲(RAM)的介面。第三,「調度程序」,調度程序可以充當動作處理程序,也可以將傳入的請求映射到正在請求的操作。這三個部分是每個合約擁有的基本「骨架」。

每個合約都可以定義為繼承eosio :: contract類的一個類。定義合約狀態的各種變數可以被指定為類的私有成員。這些類的成員函數可以被指定為「操作」。EOSIO提供各種屬性,eosio-cpp使用這些屬性生成WebAssembly位元組碼以及ABI。因此,有了eosio.cdt庫提供的各種類型和數據結構,我們就能夠在EOS上編寫智能合約。EOS上的智能合約可以處理來自其它合約的通知,還可以調用其它合約的操作,但前提是這些合約已獲得必要的許可權(eosio.code許可權)。

當我們在合約上調用一個操作時會創建一個新的合約實例,該實例將在操作執行後被銷毀。因此,任何代表合約狀態的信息必須在合約開始時(在構造函數中)載入並在銷毀之前或銷毀期間(在析構函數內或被調用的操作中)保存。必須注意的是,一個賬戶只能與一個智能合約相關聯,我們可以在同一賬戶上更改或升級智能合約代碼。

在本文中,我們討論了在EOS上開發DApp的重要概念,並介紹了EOS的生態系統和體系結構。你是否已經準備好深入研究合約的技術和編碼部分並構建自己的DApp了呢?

在後面的文章中,我們將詳細分析標準的eosio.token合約,讓大家了解構建智能合約的所有細節。


推薦閱讀:
相关文章