当前位置:首页>货币平台

谈谈Mov的编程魅力

日期:2023-03-14

来源:玫瑰财经网

浏览:

    谈谈Mov的编程魅力

    Mov是一种开发时间相对较短的编程语言,但已应用于许多Wb3.0项目

    谈谈Mov的编程魅力

    CrtiK安全专家小组最近审计了支持Mov编写智能协议的新Layr 1区块链。借此机会,我们将全面概括地介绍Mov这种新的编程语言。

    因为这个内容比较专业,所以本文将讨论Mov及其两个特点:可编程资源(支持高交易率)和形式验证(有助于提高安全性)。

    在此过程中,本文展示了Mov的语法、类型系统和内存模型,并研究了工程师使用Mov时可能出现的一些常见错误。此外,我们将从技术角度审视Mov形式化验证的潜力和挑战。

    什么是MovMov是用于编写智能合同的特定领域编程语言。包括Aptos、0L和Starcoin区块链在内的最近几个热门项目都支持Mov语言。此外,Sui区块链也支援Mov语言,并命名为Sui Mov。

    Mov最初是作为Dim项目的一部分开发的,但属于Mta(最初的Facbook)的基于区块链的支付网络现在已经解体。

    Dim发布的《为什么要创建Mov》文件指出:“要成功支持Dim支付网络等支付系统,需要编程语言来编码数字资产的所有权,并为这些资产的转移创建程序。目前使用了数百种语言,其中一些语言作为基本语言包含在区块链实现中。

    Dim Ntworks可以选择WbAssmbly或通用语言,如Java字节代码、VM字节代码或传统区块链语言(如比特币脚本)。理论上,我们必须选择现有的语言。毕竟一种语言的社区、库、工具都和语言设计一样重要,这些都要建立很多年。从这个角度来看,要谨慎地创造新的语言。但是最终创建Mov是因为——Mov在一些重要方面看到了逐步改进现有替代方案的机会。”。

    Dim需要安全地支持大量交易,因此团队决定基于这些目标创建Mov。

    可编程资源Mov的主要特征之一是可编程资源的使用。资源(Rsourc)是指用户拥有的项目资产数等重要数据。在Mov中,拥有项目资产的每个帐户通常存储可以直接表示该资产的数据。这与Solidity中项目资产的表示形成鲜明对比。帐户拥有的项目资产数的映射。Solidity通常使用智能合同中的映射表来记录。

    可编程资源的利用有两个主要优点。首先,它形成了支持高交易率的智能合同编程模型。如果一个事务处理包含两个“仅交互”的帐户,则可以将该事务处理与另一个事务处理同时运行。和现实生活一样,小明在便利店结算并不影响小红的结算。Aptos区块链是一个很好的例子,它使用软件事务存储并行执行事务,并检测两个并发事务是否可能发生冲突。

    可编程资源的第二个优点是可以自动检查程序是否存在某些类型的错误。例如,资源不会自动删除或复制。这是由Mov编译器完成的。但是,智能合同代码中引入了算术或逻辑错误,这可能会导致资源中出现错误的值。

    下图来自github(https://github . com/Mov-languag/Mov)的Mov文档,显示了在Mov中组织区块链数据的方式。Mov将区块链状态称为全局存储库。

    每个区块链地址代表一个帐户,其中一些地址可能属于外部所有。与以太坊不同,所有地址都可以存储数据。在下图中,BasicCoin持有人的帐户有数据表,表示他拥有的BasicCoin数量(资源)。该图显示,地址042也具有实现BasicCoin的代码模块。

    使用Mov编写智能合同时,最好将资源存储在拥有该资源的帐户中,而不是存储在包含智能合同代码的帐户中。Mov智能协议可以实现“thrum样式”的资源映射,但与这些协议相关的事务可能不会同时执行。

    Mov的安全功能Mov包含一些功能,可帮助开发人员创建更安全的智能合同。这包括上面提到的“编译器确认资源的基本使用情况”。的功能。Mov语言基本支持形式验证,有意排除可能导致形式验证困难的语言结构。

    此外,Mov还支持泛型。「一般程式设计」(Gnric Programming)可让您在其他类型中重复使用一般程式码。

    因为让代码更加安全的一种方法是重用专家精心编写的代码,少写新代码。如Aptos Coin标准所示,许多Coin共享实现代码——可以通过通用编程在多个Coin之间共享代码。

    Mov类型系统和Rust在处理敏感数据时,跟踪谁拥有该数据并限制数据操作(如复制或删除)至关重要。

    幸运的是,开发了支持所有权的完整编程语言Rust。Mov的开发者在类型和语法方面都受到Rust思想的启发。

    此图表显示Mov中内置的原始类型。

    下图显示了由不同类型组成的Mov的结构类型。

    当涉及结构类型时,这就成为一件有趣的事情。结构类型是Mov中唯一的用户定义类型,结构类型是字段中存储的值的集合。

    在Mov中,结构为“valu”类型。结构类型valu在内存或存储上线性排列,必须明确构建对结构的引用。这与Solidity不同,在Solidity中,结构变量通常是对基础valu的引用。下图说明了这一点。

    字段可以是除引用类型之外的任何类型,结构的实例是通过打包创建的,就像在Rust中一样。

    Mov为结构类型valu实施了类似于Rust的所有权系统,每个valu都由包含该VALU的变量或字段拥有。引用没有指向的valu。

    默认情况下,结构valu只能转移给其他所有者,不能复制或删除。如果将一个结构valu转移给另一个所有者,则转移所有者无法访问该结构valu。

    创建结构类型的valu后,一次只能有一个该valu的可用复制副本。下面的代码说明了这一点。

    Mov还具有一个名为abilitis的类型属性,该属性控制给定类型的valu可以执行的操作。——是受Rust启发的。这四种能力是:

    Copy:可以克隆valu。没有复制功能的结构在使用后无法访问。

    Drop:可以删除valu。如果Valu所属的变量或字段超出范围,则valu将被删除。没有删除能力的结构必须使用,不能丢弃。明确破坏,转移到别处,转移到别处,转移到别处,转移到别处,转移到别处,转移到别处,转移到别处。不能无声地删除或丢弃。

    Stor:valu可以存储在全局存储的其他结构中。

    Ky:此类型可用作访问全局存储库的“密钥”。

    对于结构类型,abilitis在结构类型声明中声明,如下图所示。

    上面介绍了什么是Mov,以及其主要特征之一:可编程资源。

    接下来,我们来看一下Mov的另一个主要功能:正式验证,以及此功能对Mov的好处和弊端。

    深度资源一种资源是只有ky和stor能力的结构体。在Mov中,每种类型的资源只能拥有一个帐户。资源不能复制或报废,因此可以将资源与直接表示价值的项目(如coin)相匹配。

    由于帐户和资源之间的直接关联,编写一些“不良”代码也变得更加困难,例如导致意外价值损失的代码。

    但是,可能会出现与错误计算和资源相关的更微妙的逻辑错误。这就是为什么我们强烈建议审计智能合同,以加强安全性。

    区块链中全局存储的编程接口最多只能为每个限制——帐户的每个资源保留一个副本。

    程序可以使用以下操作在全局存储库中创建、读取、更新和删除资源:

    为了防止伪造资源和其他不当操作,Mov执行严格的数据封装。Mov中的代码和类型声明被分组到modul中。代码作为modul的一部分分发到帐户。

    在模块中声明结构类型后,只有在同一个模块中定义的函数才能访问该结构类型的字段或创建该结构类型的valu。Mov结构声明被视为抽象数据类型,隐藏非modul代码的内部工作方式。Modul中的函数默认为私有,只能在模块内调用。可以声明为Public,这样外部代码就可以访问它。Modul可以有frind(他们信任的其他modul),还可以声明单个非公共方法以进行frind访问。

    RfrncsRfrnc是pointr的一种类型,包含使用方法的限制。使用Pointr的语言中常见的问题之一是悬挂参照(dangling rfrncs)。也就是说,它是指重新用于其他用途或取消分配的内存或存储。

    例如,如果为向量的最后一个元素创建rfrnc,然后缩小向量,则rfrnc现在指向无效的内存或存储库。悬挂参考和其他无限制的pointr相关问题一直是大多数软件安全漏洞的原因

    谈谈Mov的编程魅力

    Mov处理rfrnc的方式与Rust处理rfrnc的方式类似。其中包括类型检查规则

    谈谈Mov的编程魅力

    ,用于确认rfrnc的生命周期不长于原始数据的生命周期。在代码中创建rfrnc时,相应的rfrnc未能获得数据所有权。相反,代码借用了读取或写入数据的功能。

    读取Mov代码时,名称中带有单词" borrow "的操作将生成rfrnc。

    Mov语言定义不包含rfrnc chcking的完整描述(“borrow chckr”),因此borrow的rfrnc不会保留太长时间。

    但是,今年发表了详细的技术论文(https://ariv.org/abs/2205.05181),该定义的两个主要规则是:

    不允许对Rfrnc使用rfrnc,rfrnc不能存储在结构中。这意味着,如果使用rfrnc参数调用函数,则可以返回rfrnc,但不能在长期数据结构中存储rfrnc。函数调用不会延长rfrnc的生命周期。

    局部变量或局部变量字段的rfrnc不能超过局部变量的范围结束。

    类Rust语法Mov具有与Rust类似的语法,在某些地区与c样式的语言略有不同。这里总结了一些重要的语法规则,以便于浏览Mov代码。

    使用Lt声明变量:

    类型注释:typ和initializr=是可选的。省略后,Mov使用类型推理来确定变量的类型。

    下图是变量声明的一些示例。

    Mov具有算术、移动操作、函数调用、分配等常规表达式,并具有流程控制的表达式,如if、whil、for、brak和continu。

    函数使用以下语法声明:

    其中id是函数的名称,paramtr-list声明参数,rturn-typ是返回类型。还有必要的注释,例如Acquirs注释。这些注释列出了函数从全局存储库访问的资源和可见性的注释。如前所述,函数可以从公共、专用或frind modul访问。

    对智能合同的安全和正确运营的正式验证非常重要,因为它往往拥有巨额资产。正式验证是确保智能合同等程序执行所需操作的最佳技术之一。

    在形式验证中,工程师编写规范,并以数学方式表达代码的预期行为。然后使用工具验证代码是否符合规范。

    我们可以把这项检查看作测试,但有一个重要的区别。这不是在特定情况下检查代码的行为,而是在所有可能的情况下检查代码的行为。

    检查通过后,工具找不到代码违反规范的用例。但这并不意味着100%的代码没有违反规范。因为工具或编译器的漏洞会导致错误。但是,这仍然比运行一系列测试用例提供更严格的规格保证。

    某些代码(特别是复杂的代码)可能无法使工具自动检查代码是否符合规范。因此,工程师可能需要为代码的一小部分添加具体规范,直到检查器成功运行为止

    谈谈Mov的编程魅力

    。工程师可能需要编写证明规则,该工具根据数学原理验证代码是否符合这些证明规则。

    因为保证智能合同的安全很重要,所以一些智能合同编程语言基本上为正式验证提供了支持。与Solidity编译器提供的SMTChckr工具一样,假设rquirs子句始终为真,并尝试证明assrt子句不会失败。

    监核视委还为正式验证技术提供综合支持。它包含用于正式验证的丰富标准语言,可以指定比Solidity的rquirs和assrt子句更复杂的属性,并有意消除可能导致正式验证出现问题的语言结构。Mov的开发环境包含一个名为“Mov Provr”的检查器。

    CrtiK是由两所常青藤联盟学校的计算机科学教授创立的。CrtiK是区块链安全领域的先驱,目前正在利用最先进的官方验证技术。创立CrtiK的两位教授都是正式验证领域的专家,他们创建了CrtiKOS——世界上第一个也是唯一一个完全经过验证的同步多核操作系统和管理计划。CrtiK致力于将格式验证技术应用于安全审计,确保智能合同的安全性。

    因此,CrtiK安全专家自然注意到Mov,这是一种集成了正式验证技术的编程语言。

    以下是doubl函数及其规范的简单示例。Doubl函数的功能是加倍计算64位无符号整数(unsignd intgr)。Spc doubl提供的doubl规范用数学方法描述了预期结果。

    标准语言是Mov的集成部分。规范由SPC块分隔。Spc block指定函数的前置条件(rquirmnts)和后置条件(nsurs)。

    前提条件必须在调用函数之前为真,函数才能正常工作。后置条件意味着函数返回时必须为真。

    SPC block还指定失败条件(aborts_if)。规范语言支持大多数通用Mov语法。它还支持指定程序行为的重要附加功能,包括forall、ists、implis等。

    以下是SPC块的示例。

    Mov Provr将规范和程序语义转换为逻辑表达式。然后将其传递给满足模型理论(SMT)解释器(如Z3和CVC5),以证明或反驳。可以在以下大大简化的图表中看到这一点。

    形式化验证有优点和弊端。

    正式验证被认为是构建可靠程序的“黄金标准”,用于NASA等许多任务关键型系统。编写系统行为的形式化规范,在逻辑上可能会表现出不一致或思维不清晰。

    但是即使是专家,格式化比较简单的系统也是困难和费时的。

    此外,在处理更复杂的程序或规范时,检查也可能受到阻碍,解决这一问题可能需要很长时间。

    CrtiK的下一句发表将进一步探讨Mov形式化验证的潜力和挑战。

    由于正式验证的复杂性,CrtiK建议,有必要的用户应寻找按照正式验证方向构建的安全机构,以进行合同审核或支持合同的正式验证。

    最后,我们希望这篇文章能为想知道Mov语言的读者提供足够的参考价值。

    Mov引入了解决可扩展性问题和提高安全性的新方法。但是,没有语言能够保证100%的安全性,可扩展或错误的代码可能会干扰Mov的内置功能。

    和Wb3.0一样,兔洞的存在永远多得数不清。

    要了解有关Mov技术特性的更多信息,请链接(https://Mov-Languag。GITHUB.IO/Mov/Introduction。HTML

    资料来源:《每日星球报》

    单击下载

    European Exchange金融投资European Exchange(也称为Eurokx)是世界领先的数字资产交易所,为全球用户提供比特币、莱特货币、以太网货币等数字资产的现货和衍生品交易服务,并使用区块链技术为全球交易者提供高级金融服务。这是一个非常古老的数字货币交易平台,平台为我们提供安全、专业的数字货币交易经验,为新手提供完整的流程指导,使其易于启动,通过客服24小时在线回复提供最佳服务。

相关文章阅读

Copyright (c) 2022 玫瑰财经网 版权所有

备案号:冀ICP备17019481号

玫瑰财经网发布此信息的目的在于传播更多信息,与本站立场无关。玫瑰财经网不保证该信息(包含但不限于文字、视频、音频、数据及图表)全部或者部分内容的准确性、真实性、完整性、有效性、及时性、原创性等。
相关信息并未经过本网站证实,不对您构成任何投资建议,据此操作,风险自担。