NEO 智能合约基础知识

2018-11-06 20:36 栏目:经验之谈 来源: 查看()
智能合约是一组以数字形式定义的承诺,包括合同参与者可以履行这些承诺的协议。区块链技术为我们带来了一个分散的,不可篡改的,高度可靠的系统,智能合约可以在这个系统中发挥作用。智能合约是区块链最重要的特征之一,它们是区块链可以被称为破坏性技术的主要原因。

NEO智能合约的特点是什么?
NEO Smart Contract 2.0包括以下功能:确定性,高性能和可扩展性。合同类型包括:验证合同,功能合同和应用合同。

从性能角度来看,NEO使用轻量级NeoVM(NEO虚拟机)作为其智能合约执行环境,这种环境非常快,消耗的资源非常少,适用于智能合约等短程序。使用JIT(即时编译器)技术的热点智能合约的静态编译和缓存可以得到显着改善。 NEO虚拟机的指令集是内置的,用于提供一系列加密指令,以优化智能合约中使用的加密算法的执行效率。此外,数据操作指令直接支持数组和复杂数据结构。这些将改善NEO Smart Contract 2.0的性能。

NEO Smart Contract 2.0的可扩展性方法是通过高并发和动态分区以及低耦合设计实现的。低耦合合同程序在虚拟机(NEO虚拟机)中执行,并通过交互服务层与外部通信。因此,可以通过为交互式服务层添加API来实现对智能合约功能的大多数升级。

用什么语言写智能合约

从语言学的角度来看,NEO Smart Contract 2.0和以太坊之间的区别更直观:与以太坊的原始Solidity语言不同,NEO智能合约开发人员可以使用他们擅长的几乎任何高级语言直接开发NEO智能合约。 NEO为这些语言提供编译器和插件,用于将高级语言编译为NEO虚拟机支持的指令集。由于编译器编译MSIL(Microsoft中间语言),理论上可以直接支持.Net中的任何语言或可以转换为MSIL的语言。

目前支持的语言是:

·C#,VB.Net,F#
·Java,Kotlin
·Python

计划在未来添加的高级语言包括:

·C,C ++,GO
·JavaScript

支持多种高级语言,90%以上的开发人员可以参与NEO智能合约的开发,而无需学习新语言,甚至无需将代码从现有业务系统直接移植到区块链。这将大大增加未来区块链的整体受欢迎程度。

最后,从调试的角度来看,通常智能合约的开发过程非常困难。其中一个重要原因是以前的智能合约缺乏良好的调试和测试方法。 NEO为NeoVM级别的程序调试提供支持,使NEO Smart Contract 2.0更容易,更快捷。

触发智能合约

NEO的智能合约有两个触发因素:

·合同用户的身份验证:智能合约充当合同帐户,并在用户使用合同帐户中的资产时触发智能合约。
·手动发送事务以调用智能合约:用户发送事务(调用事务)以触发智能合约的执行。

合同可以通过上述两种方法触发。由于认证触发的合同是UTXO模型的认证过程,因此在将事务写入块之前执行。如果合同返回false或发生异常,则不会将事务写入块。

当事务被写入块时,将调用由事务调用触发的合同。此时,无论应用程序合同的返回以及是否失败,事务都已发生,并且不会影响事务中的UTXO资产状态。

NeoVM虚拟机

NeoVM是一个执行NEO智能合约代码的虚拟机。这里描述的虚拟机的概念相对较窄。它不是通过操作系统模拟物理机器。此处的虚拟机与vmware或Hyper-V不同,是针对特定语言实现的虚拟机。

例如,在Java JVM或.Net CLR中,java或.Net源代码将被编译成相关的字节码,然后在相应的虚拟机上运行。 JVM或CLR将获取并解码这些字节码。执行,结果写回等。这些步骤类似于真实物理机器上的概念。相应的二进制指令仍在物理机器上运行。物理机从内存中获取指令,通过总线将它们传输到CPU,然后解码,执行和存储结果。

虚拟机架构

NEO 智能合约基础知识

上图是NEO虚拟机(NeoVM)的系统架构图,其中虚线框中的部署是虚拟机的核心。

执行引擎

左边的绿色是虚拟机执行引擎(相当于CPU),它可以执行常用指令,如流控制,堆栈操作,位操作,算术运算,逻辑运算,加密方法等,还可以通过系统调用来调用。互操作性服务层(如下所述)进行交互。

计算堆栈

中间灰色部分是虚拟机的计算堆栈(相当于内存)。今天,有两种虚拟机实现,基于堆栈和基于寄存器。这两种实现方式各有优缺点,都具有标志性的特征。产品。基于堆栈的虚拟机,包括JVM,CPython和.Net CLR。基于寄存器,有Da高仿lvik和Lua5.0。基于堆栈的虚拟机具有计算堆栈的概念,并且虚拟机在执行实际操作时直接与评估堆栈交互。

由于默认设置是从操作数堆栈中获取数据,因此无需指定操作数。例如,x86汇编“ADD EAX,EBX”,您需要指定操作需要取操作数的位置以及存储结果的位置。但是,无需指定基于堆栈的虚拟机的指令。例如,加法运算是一个简单的“加法”,因为默认操作数存储在操作数堆栈中,并且两个数据直接从操作数堆栈中弹出。另外,默认情况下,操作的结果存储在堆栈的顶部。

互操作性服务层

右侧的蓝色部分是虚拟机的可互操作服务层(相当于外围设备)。目前,可互操作的服务层为智能控制提供API以访问区块链数据。这些API提供对块信息,交易信息,合同信息,资产信息等的访问。

除此之外,可互操作的服务层为每个合同提供持久存储区域。 NEO的每个智能合约都可选择启用私有存储区域。存储区域采用键值形式。 NEO智能合约由合同的被调用者确定,以持久存储区域的上下文而不是调用者。决定。当然,在调用者需要将自己的存储上下文传递给被调用者(即完成授权)之后,被调用者可以执行读写操作。


充电模式

NEO智能合约在部署或执行时需要支付一定的费用,分为部署成本和执行成本。

部署成本意味着开发人员向区块链部署智能合约将向区块链系统收取费用(目前为500 Gas)。

执行成本意味着每次执行智能合约都会向NEO系统支付一定的执行费用。

一些简单的智能合约

以下是一些简单的智能合约:

public static bool Main()
{   返回true;
}

合同的返回值始终为真,表明任何人都可以将资产花在合同地址中(可以理解为金钱)。

NEO钱包客户端具有删除资产的功能。删除资产时,资产实际上会发送到指定地址,该地址是上述智能合约生成的合同地址。任何人都可以将资产用于此地址。当然,此地址中的资产是其他人不想要的资产。

public static bool Main()
{   返回false;
}

合同的返还值始终为假,表明合同中没有人可以使用该资产(可以理解为烧钱或销毁资产),例如,它可以存储一些被取消公司的股份。

微信二维码
售前客服二维码

文章均源于网络收集编辑侵删

提示:仅接受技术开发咨询!

郑重申明:资讯文章为网络收集整理,官方公告以外的资讯内容与本站无关!
NFT开发,NFT交易所开发,DAPP开发 Keywords: NFT开发 NFT交易所开发 DAPP开发