针对.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开发者环境的关键组成部分。
[td] 表1. NEO开发者环境
NEO虚拟机
NEO虚拟机(NEO VM)的架构如下图所示。
图4. NEO虚拟机机构
下列图标描述了NEO虚拟机的关键组成部分
[td]标记 | | | |
| NEO虚拟机 | | |
| 执行引擎 | | |
| 当前语境 | | |
| 指令指针 | | |
| 脚本 | | |
| 执行堆栈 | | |
| 虚拟机状态 | | |
| 脚本表 | | |
| 互操作服务 | 互操作服务层用于不是基本执行引擎功能之一的所有内容(请参阅上文) | |
| 账户服务 | | |
| 资产服务 | | |
| 区块服务 | | |
| 区块链服务,区块头服务 | | NEO智能合约框架服务NEO区块链 NEO智能合约框架服务NEO区块头类 |
| 合约服务 | | |
| 运行时间服务 | | |
| 存储服务 | | |
| 验证器服务 | | |
| 区块链状态 | | |
NEO .NET命名空间
NEO .NET名称空间如下所示。
图5. NEO区块链架构参考模型(.NET名称空间)
参考
其它好资源