Solidity編程語言解決了編寫智能合約的不友好的問題,可是當合約編譯並部署以後,對與這些接口的訪問,對於通常的使用者來講,門檻有點高, 對普通用戶來講也是很是不友好,爲了使廣大用戶理解並方便快捷的訪問區塊鏈,以及區塊鏈上的智能合約系統,開發者必須提供操做界面和結果查看界面,來簡化用戶訪問和操做區塊鏈的方式。所以一套完整的區塊鏈DAPP,除了智能合約這些能夠查詢和改變區塊鏈狀態的代碼,還須要用戶操做界面以及鏈接用戶操做與智能合約代碼的接口。數據庫
圖1.15展現了一個DAPP的全景圖,該系統架構圖包含了從用戶經過可視化界面發起操做到以太坊狀態機發生改變的全流程。首先用戶經過Web界面或者手機APP,將操做數據發送到一個傳統的業務服務器,該業務服務器是傳統互聯網中心化的服務器,可是與傳統系統不一樣的是,該系統沒有像傳統互聯網設計那樣將數據放入中心化的數據庫存儲,而是經過一個Web 3.0接口,將數據傳送到了以太坊區公鏈。編程
圖1.15 DAPP架構圖服務器
該接口是一個JSON RPC協議,該協議有不少代碼實現。目前最流行的是運行在Web容器中的Web3.js模塊。Solidity編程語言通過編譯以後,除了交易須要的合約初始化代碼以外,還有ABI接口等描述文件,Web3.js經過這些描述文件,能夠構建與以太坊智能合約虛擬機進行通信的模塊,經過JS(全稱JavaScript,下文都簡稱JS)代碼將用戶的操做數據傳入以太坊公鏈上的合約地址,智能合約虛擬機會根據函數簽名和加載的函數參數,在虛擬機內執行編譯成EVM Code的智能合約。在第6章的DAPP案例講解中,會對Web3.js的設計有詳細的講解。網絡
若是涉及到區塊鏈數據的讀取,則虛擬機會讀取區塊鏈上的區塊數據,若是虛擬機的指令代碼會修改以太坊公鏈的狀態,那麼經過調用相關的狀態機指令,並消耗必定的GAS以後,就能夠將修改操做提交到以太坊區塊鏈公鏈網絡中,這些操做每每是以交易的方式體現。架構
當虛擬機執行結束,其對區塊鏈狀態的修改會被礦工打包,當狀態修改被全網共識,那麼虛擬機對公鏈網絡的狀態修改也相應成功,經過查詢相關的執行結果,將執行狀態返回給用戶交互系統,這樣終端用戶就能夠經過交互系統,查看DAPP操做的執行結果。編程語言
2020區塊鏈各類應用都上馬了,跟我一塊兒學《區塊鏈DAPP開發入門、代碼實現、場景應用》吧。函數