针对.NET开发者(neo-charm) 1.0 的NEO区块链架构参考模型
Posted NEL新经济实验室
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了针对.NET开发者(neo-charm) 1.0 的NEO区块链架构参考模型相关的知识,希望对你有一定的参考价值。
针对.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虚拟机的关键组成部分
标记 |
名字 |
描述 |
命名空间/智能合约可调用的API |
NEO虚拟机 |
虚拟机主要部件和服务 |
- |
|
执行引擎 |
执行引擎部件 |
NEO智能合约框架服务系统执行引擎类 |
|
当前语境 |
执行引擎当前语境 |
- |
|
指令指针 |
执行引擎当前指令指针 |
- |
|
脚本 |
当前智能合约脚本正在执行 |
|
|
执行堆栈 |
执行引擎数据堆栈 |
- |
|
虚拟机状态 |
虚拟机档期状态(暂停,故障,中断) |
- |
|
脚本表 |
可调用脚本的虚拟机脚本表 |
- |
|
互操作服务 |
互操作服务层用于不是基本执行引擎功能之一的所有内容(请参阅上文) |
- |
|
账户服务 |
账户服务 |
NEO智能合约框架服务NEO账户类 |
|
资产服务 |
资产服务 |
NEO智能合约框架服务NEO资产类 |
|
区块服务 |
区块服务 |
NEO智能合约框架服务NEO区块类 |
|
区块链服务,区块头服务 |
区块链服务,区块头服务 |
NEO智能合约框架服务NEO区块链 NEO智能合约框架服务NEO区块头类 |
|
合约服务 |
合约服务 |
NEO智能合约框架服务NEO合约类 |
|
运行时间服务 |
运行时间服务 |
NEO智能合约框架服务NEO运行时间类 |
|
存储服务 |
存储服务 |
NEO智能合约框架服务NEO存储类 |
|
验证器服务 |
验证器服务 |
NEO智能合约框架服务NEO验证器类 |
|
区块链状态 |
分布式账本 |
- |
NEO .NET命名空间
NEO .NET名称空间如下所示。
图5. NEO区块链架构参考模型(.NET名称空间)
参考
[NEONAMESPACE] NEO Project, NEO Namespace from http://docs.neo.org/en-us/sc/api/neo.html
[NEOSCAPI] NEO Project, Smart Contract API Reference from http://docs.neo.org/en-us/sc/api.html
[NEONODEINTRO] NEO Project, NEO node introduction from http://docs.neo.org/en-us/node/introduction.html
[NEOBUGGER] Relfos, Relfos/neo-debugger-tools from https://github.com/Relfos/neo-debugger-tools
其它好资源
[NEORPCSHARPCLIENT] City of Zion, Neo-RPC-SharpClient from https://github.com/CityOfZion/Neo-RPC-SharpClient/blob/master/README.md
以上是关于针对.NET开发者(neo-charm) 1.0 的NEO区块链架构参考模型的主要内容,如果未能解决你的问题,请参考以下文章
在 asp.net core 1.0 上读取一个 excel 文件
使用VS Code从零开始开发调试.NET Core 1.0