針對.NET開發者的NEO區塊鏈文件
宗旨
本文件旨在記錄NEO 區塊鏈平臺的(軟體)體系架構參考模型,以使.NET開發人員能夠更快速,更輕鬆地瞭解NEO平臺。
目標
- 記錄NEO區塊鏈平臺的(軟體)體系架構參考模型
- 使.NET開發人員能夠更快速,更快速輕鬆地瞭解更多有關NEO平臺的知識。
原則
- 提供可靠的檔案:及時,準確,直觀和完整
- 儘可能節省一個人的時間
驅動因素
- NEO .NET開發者社群需要具有簡明易懂的文件,以便人們能夠在儘可能短的時間內加快開發NEO智慧合約。
針對以太坊智慧合約開發者的旁註
如果您來自ETH開發背景,那麼你會習慣於將智慧合約(在將其部署到區塊鏈之後)像C ++ / C#類的例項一樣考慮,並且您可以呼叫任何合約的公共方法和欄位。
在NEO智慧合約開發中,大多數人遵循通過公共Main()函式呼叫智慧合約的模式。使用這種模式,NEO智慧合約更像.NET / C#控制檯應用程式,操作環境呼叫函式Main並將引數傳遞給函式(打比方說像命令列引數)。這將會演化,但目前這是一種常見模式。下面是一個來自neo-project/examples-csharp專案的例子:
publicstaticobject Main(string operation, params object[] args)
{
switch (operation)
{
case”query”:
return Query((string)args[0]);
case”register”:
return Register((string)args[0], (byte[])args[1]);
case”transfer”:
return Transfer((string)args[0], (byte[])args[1]);
case”delete”:
return Delete((string)args[0]);
default:
returnfalse;
}
}
注意:在NEO智慧合約中,一個類中的公共欄位不會自動可見/可呼叫,除非您專門編寫了自己的一些訪問器程式碼。
注:小心使用NEO智慧合約中的C#開關語句[TODO]。
動機
當你正在學習編寫NEO智慧合約時,你真的在學習如何程式設計NEO虛擬機器來做你想做的事情;例如,
- 進行計算
- 從區塊鏈中讀取持久資料(狀態)
- 將新資料(狀態)新增到區塊鏈
- 驗證某人的身份(反過來,確定他們對於您的智慧合約的目的和目標擁有哪些角色和許可權)
- 等等。
作為一個類比,學習程式設計NEO虛擬機器就像學習飛行一個飛行模擬器。
圖1.蘇霍伊超音速噴氣式飛機全飛行模擬器[圖片來源:Wikipedia]
複製程式碼
在飛行模擬器駕駛艙中,飛行員正在操縱控制器(腳踏板,開關和旋鈕以及控制柱),模擬器反過來接收這些刺激並導致多個子系統響應併產生您正在控制一架先進的飛機的幻覺。負責製造這些幻想的子系統包括視覺顯示器,音訊提示和音效,液壓執行器,刻度盤和其他儀器。
在NEO虛擬機器中執行的NEO智慧合約就像飛行模擬器控制的飛行員。智慧合約執行各種計算並呼叫各種虛擬機器API來完成智慧合約的目的和目標。為了響應這些API呼叫,虛擬機器正在與其各個子系統進行互動(就像飛行模擬器一樣)。在NEO虛擬機器的情況下,這些子系統包括:
- 帳戶管理
- 資產管理
- 區塊管理
- 區塊鏈管理
- 合約管理
- 區塊頭管理
- 執行時間管理
- 儲存管理
- 交易管理
- 屬性管理
- 輸入管理
- 輸出管理
- 驗證管理
…除了基本的執行引擎功能,如:
- 流量控制
- 堆疊操作(包括引數傳遞)
- 位操作
- 算術運算
- 邏輯運算
- 資料型別轉換
- 密碼操作
- 等等
作為智慧合約開發人員,你有責任瞭解和理解每個虛擬機器子系統的用途和目標,他們支援的用例以及開發一流智慧合約時使用的最佳實踐和程式設計模式。
NEO區塊鏈架構參考模式(ARM)
下圖描述了NEO區塊鏈的架構參考模型(ARM)。它由兩個主要組成部分組成:
•NEO開發者環境
•NEO虛擬機器
圖2. NEO區塊鏈架構參考模型
NEO開發者環境
下圖說明了從開發者角度來看NEO環境的架構。該圖受到了Relfos / neo-debugger-tools專案的啟發。
圖3 NEO開發者環境
下面表格描述了NEO開發者環境的關鍵組成部分。
標記 | 名字 | 描述 |
A | HelloWorld.cs | 智慧合約資源(例子) |
B | csc.exe | C#編譯器 |
C | HelloWorld.dll | 智慧合約編譯程式集 (MSIL) |
D | neon.exe | NEO轉譯器 (偵錯程式版本) |
E | HelloWorld.avm | 虛擬機器指令碼檔案 (位元組程式碼指令碼) |
F | neo-gui (開發者) | 智慧合約部署和測試工具 |
V | Visual Studio | Microsoft .NET/C# IDE |
W | neo-偵錯程式 | 互動式原始碼和位元組程式碼級偵錯程式 |
表1. NEO開發者環境
NEO虛擬機器
NEO虛擬機器(NEO VM)的架構如下圖所示。
圖4. NEO虛擬機器機構
下列圖示描述了NEO虛擬機器的關鍵組成部分
標記 | 名字 | 描述 |
NEO虛擬機器 | 虛擬機器主要部件和服務 | |
執行引擎 | 執行引擎部件 | |
當前語境 | 執行引擎當前語境 | |
指令指標 | 執行引擎當前指令指標 | |
指令碼 | 當前智慧合約指令碼正在執行 | |
執行堆疊 | 執行引擎資料堆疊 | |
虛擬機器狀態 | 虛擬機器檔期狀態(暫停,故障,中斷) | |
指令碼表 | 可呼叫指令碼的虛擬機器指令碼表 | |
互操作服務 | 互操作服務層用於不是基本執行引擎功能之一的所有內容(請參閱上文) | |
賬戶服務 | 賬戶服務 | |
資產服務 | 資產服務 | |
區塊服務 | 區塊服務 | |
區塊鏈服務,區塊頭服務 | 區塊鏈服務,區塊頭服務 | |
合約服務 | 合約服務 | |
執行時間服務 | 執行時間服務 | |
儲存服務 | 儲存服務 | |
驗證器服務 | 驗證器服務 | |
區塊鏈狀態 | 分散式賬本 |
NEO .NET名稱空間
NEO .NET名稱空間如下所示。
圖5. NEO區塊鏈架構參考模型(.NET名稱空間)
參考
- [NEONAMESPACE] NEO Project, NEO Namespace from docs.neo.org/en-us/sc/ap…
- [NEOSCAPI] NEO Project, Smart Contract API Reference from docs.neo.org/en-us/sc/ap…
- [NEONODEINTRO] NEO Project, NEO node introduction from docs.neo.org/en-us/node/…
- [NEOBUGGER] Relfos, Relfos/neo-debugger-tools from github.com/Relfos/neo-…
其它好資源
- [NEORPCSHARPCLIENT] City of Zion, Neo-RPC-SharpClient from github.com/CityOfZion/…
原文轉自NEL新經濟實驗室:mp.weixin.qq.com/s/yxrGe2elm…
進群交流:795681763