拙网论坛

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 194|回复: 0

针对.NET开发者(neo-charm) 1.0 的NEO区块链架构参考模型

[复制链接]

949

主题

1001

帖子

3736

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3736
发表于 2019-3-15 13:28:08 | 显示全部楼层 |阅读模式
https://blog.csdn.net/hellojc866/article/details/79932701

针对.NET开发者(neo-charm) 1.0 的NEO区块链架构参考模型
[color=rgba(0, 0, 0, 0.3)]Michael Herman [url=]NEL新经济实验室[/url] [color=rgba(0, 0, 0, 0.3)]2018-02-28
针对.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开发者环境的关键组成部分。

[td]
标记
名字
描述
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虚拟机的关键组成部分

[td]
标记
名字
描述
命名空间/智能合约可调用的API

NEO虚拟机
虚拟机主要部件和服务
-

执行引擎
执行引擎部件
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名称空间)
参考
其它好资源



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|抱朴守拙BBS

GMT+8, 2025-5-25 23:29 , Processed in 0.225738 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表