首页 科技内容详情
足球免费贴士网:联博以太坊高度(www.326681.com)_谈谈Move的编程魅力

足球免费贴士网:联博以太坊高度(www.326681.com)_谈谈Move的编程魅力

分类:科技

标签: # Sân Chơi Tài Xỉu

网址:

SEO查询: 爱站网 站长工具

点击直达

足球免费贴士网www.hgbbs.vip)是国内最权威的足球赛事报道、预测平台。免费提供赛事直播,免费足球贴士,免费足球推介,免费专家贴士,免费足球推荐,最专业的足球心水网。

Move是一种相对生长时间较短的编程语言,但已经在许多Web3.0项目中获得了应用。

CertiK平安专家团队最近审计了一个支持Move编写智能合约的新型Layer 1区块链。借此时机,我们将为人人整体概述一下Move这一新型编程语言。

鉴于该内容较为专业,在这篇文章中,我们将讨论Move及其两个特征:可编程资源(有助于支持高生意率)和形式化验证(有助于提高平安性)。

在这一历程中,本文也将展示Move的语法、类型系统和内存模子,并研究工程师在使用Move时可能犯的一些常见错误。除此之外,我们也将从手艺角度审阅Move形式化验证的潜力及面临的挑战。

什么是Move?

Move是一种用于编写智能合约的特定领域编程语言。最近推出的几个热门项目均支持Move语言,包罗Aptos、0L和Starcoin区块链。另外另有Sui区块链同样支持Move语言并将其命名为Sui Move。

Move最初是作为Diem项目的一部脱离发的,但这一属于Meta(原Facebook)的基于区块链的支付网络现在已被遣散。

在Diem揭晓的《为什么要确立Move?》文档中,其指出“为了乐成支持像Diem支付网络这样的支付系统,我们需要一种可以对数字资产的所有权举行编码,并为这些资产的转移确立程序的编程语言。现在已经有数百种语言在使用,其中一些已经作为原生语言包罗到区块链的实现中。

Diem Networks本可以选择一种通用语言,如WebAssembly或Java字节码,或现有的区块链语言,如EVM字节码或比特币script。理论上,我们简直应当选择一种现有的语言,事实一种语言的社区、库、工具都和语言设计一样主要,而这些都需要多年的时间来确立。从这一角度上来说,应该郑重确立一种新语言。但最终选择确立Move是由于我们看到了一个时机——Move将可以辅助我们在几个主要方面临现有替换方案举行逐步改善。”

Diem需要平安地支持大量的生意,因此其团队决议以这些目的为基础确立Move。

可编程资源

Move的要害特征之一是它对可编程资源的使用。一个资源(Resource)直接代表着一条有价值的数据(例如一个用户所持有的项目资产数目)。在Move中,每个持有项目资产的账户中通常都存储着可以直接代表该资产的数据。这与Solidity中项目资产的示意形成了鲜明的对比,从账户到他们持有的项目资产数目的映射,Solidity通常是使用一张映射表在智能合约中举行纪录。

这种对可编程资源的行使有两个主要优势。首先,它形成了一个支持高生意率的智能合约编程模子。若是一项生意涉及两个「仅相互交互」的账户,该生意可以与其他生意并行执行。类似于现实生涯中,小明在便利店结账付款并不影响小红的结账付款。Aptos区块链就是一个很好的例子,其使用软件生意存储器来并行运行生意,并检测两个同时举行的生意是否可能发生冲突。

可编程资源的第二个优势是它们可以自动验证程序是否存在某些类型的错误:例如,资源永远不会被悄无声息地删除或复制——这是由Move编译器完成的。然则仍然有可能在智能合约代码中引入算术或逻辑错误,从而导致资源中泛起不准确的值。

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

每个区块链地址代表一个账户,其中一些可能是外部拥有的。与以太坊差其余是,所有地址都可以存储数据。在下图中,BasicCoin持有者的账户中有数据解释他们所持有的BasicCoin数目(资源)。该图显示,地址0x42还拥有一个实现BasicCoin的代码模块。

当使用Move编写智能合约时,最好的做法是将资源存储在拥有该资源的账户中,而非包罗该智能合约代码的账户中。只管有可能在Move智能合约中实现「Ethereum气概」的资源映射,但涉及此类合约的生意可能无法并行执行。

Move的平安功效

Move包罗几个可辅助开发者确立更平安智能合约的功效。其中就包罗上文所提到的“编译器会检查资源的基本使用情形”这一功效。Move语言原生就支持形式化验证,并有意清扫了那些容易导致形式化验证难题的语言结构。

此外,Move还支持泛型。泛型编程(Generic Programming)允许通用代码在差异类型中被重复使用。

这一点很主要,由于使代码更平安的一种方式是重用那些已被专家全心编写过的代码,少编写一些新代码。就像许多Coin共享实现代码——如Aptos Coin尺度所示,通用编程允许该代码在差异Coin之间共享。

Move类型系统和Rust

在处置有价值的数据时,追踪清晰是谁拥有这些数据,并限制对这些数据的操作(如复制或删除)十分主要。

幸运的是,已经有一种开发完善的支持所有权特征的编程语言:Rust。Move的开发者在类型和语法方面都受到了Rust头脑的启发。

此图表显示了Move的内置原始类型:

此图表显示了Move的结构类型,这些是由其他类型构建的类型:

当涉及到结构类型时,事情就变得有趣了,结构类型是Move中唯一的用户界说类型,一个结构类型是一个存储在字段中的值的聚集:

在Move中,结构是一种“value”类型。结构类型的value在内存或存储中是线性排列的,对一个结构的引用必须明确地构建。这与Solidity差异,在Solidity中,结构变量通常是对底层value的引用。下图说明晰这一点:

字段可以是除引用类型之外的任何类型,结构的实例是通过打包确立的(就像在Rust中那样)。

Move为结构类型的value实现了一个类似于Rust的所有权系统,其中每个value都由包罗它的变量或字段拥有。引用并不拥有它们所指向的任何value。

默认情形下,结构value只能被转移到另一个所有者,它们不能被复制或删除。当一个结构value被转移到另一个所有者那里时,它将无法被先前的所有者接见。

在一个结构类型的value被确立后,统一时间只存在该value的一个可以使用的副本。以下代码说明晰这一点:

Move另有一个称为abilities的类型特征,它可以控制一个给定类型的value可被允许举行哪些操作——这是受到了Rust的启发。这四种能力划分是:

Copy:value可以被复制。不具备复制能力的结构在被使用后无法被接见。

Drop:value可以被删除。当一个value的所属变量或字段超出局限时,该value将被删除。不具备删除能力的结构则必须被使用,无法被抛弃。要么明确地销毁它们,要么将它们“转移”到其他地方。它们不能被无声无息地删除或抛弃。

Store:value可以存储在全局存储的其他结构中。

Key:该类型可用作「键」来对全局存储举行接见。

对于结构类型来说,abilities是在结构类型声明中声明的,如下图所示:

以上内容主要先容了Move是什么,以及其一个要害特征:可编程资源。

接下来我们先容Move的另一要害特征:形式化验证,及该特征为Move所带来的优势和坏处。

深度资源

一个资源是一个只有key和store能力的结构体。在Move中,一个账号每种类型的资源只能持有一个。资源不能被复制或抛弃,这使得资源适合直接代表价值的物品,例如coin。

账户与其资源之间的直接关联,使得编写某些「欠好的」代码也变得加倍难题,例如导致价值意外损失的代码。

然则,不准确的盘算以及与资源有关的那些更玄妙的逻辑错误照样有可能会泛起。这就是为什么我们强烈建议举行智能合约审计来增强平安保障。

区块链上全局存储的编程接口执行了一个限制——每个账户最多只能持有每个资源的一个副本。

一个程序可以使用以下操作在全局存储中确立、读取、更新和删除资源:

,

以太坊统计网

,

单双哈希www.hx198.vip)采用波场区块链高度哈希值作为统计数据,游戏数据开源、公平、无任何作弊可能性,开放单双哈希、幸运哈希、哈希定位胆、哈希牛牛等游戏。

,

www.326681.com采用以太坊区块链高度哈希值作为统计数据,联博以太坊统计数据开源、公平、无任何作弊可能性。联博统计免费提供API接口,支持多语言接入。

,

为了阻止资源的伪造及其他欠妥操作,Move执行严酷的数据封装(encapsulation of data)。Move的代码和类型声明被分组为module。代码作为module的一部门被部署到一个账户中。

当一个结构类型在一个模块中被声明时,只有在统一模块中界说的函数可以接见该结构类型的字段或确立该结构类型的value。Move结构声明被视为抽象数据类型,对其module以外的代码隐藏其内部事情原理。module中的函数默以为私有,只能在模块内挪用。它们可以被声明为public,这使得它们可以被外部代码接见。module可以有friend,也就是他们信托的其他module,而且可以声明个体non-public方式以供friend接见。

References

Reference是pointer的一种类型,包罗对其使用方式的限制。使用pointer的语言中,一个常见问题是悬挂引用(dangling references):指向已被重新用于其他目的或被作废分配的内存或存储。

例如,若是你为一个向量的最后一个元素确立了一个reference,然后缩小了向量,则该reference现在就指向了无效的内存或存储。悬挂引用和其他与不受限制的pointer相关的问题向来是导致大多数软件平安破绽的缘故原由。

Move处置reference的方式与Rust处置reference的方式类似。它包罗类型检查规则,以确保reference的生命周期不长于原始数据的生命周期。现代码确立一个reference时,该reference并没有取得数据的所有权。相反,代码借用了读取或写入数据的能力。

在阅读Move代码时,名称中带有“borrow”一词的操作就会发生reference。

Move语言的界说中并不包罗对reference checking的完整形貌("borrow checker",它确保borrow的reference不会存留太长时间)。

不外,今年有一份详细的手艺论文被揭晓(https://arxiv.org/abs/2205.05181),该界说中的两个要害规则是:

① 不允许对reference的reference,而且reference不能存储在结构中。这意味着,当一个函数被挪用并带有一个reference参数时,只管它可以返回reference,但也不能将reference存储在一个耐久存在的数据结构中。一个函数挪用并不会延伸reference的生命周期。

② 对局部变量或局部变量字段的reference不能跨越局部变量的作用域的终点。

类Rust语法

Move有一种类似于Rust的语法,在某些地方与C气概的语言有些差异。在此,我们总结了一些主要的语律例则,以便更轻松地浏览Move代码。

使用let声明变量:

类型注释:type和initializer=e是可选的。当它们被省略时,Move使用类型推理来确定变量的类型。

下图是一些变量声明的例子:

Move有典型的表达式,用于算术、移位操作、函数挪用、赋值等,用于流程控制的有if、while、for、break和continue等表达式。

函数是使用以下语法声明的:

其中id是函数的名称,parameter-list声明参数,return-type是返回类型。另有一些需要的注释,如acquires注释。这些注释列出了函数从全局存储中接见的资源,另有关于可见性的注解。如前所述,函数可以是公共的、私有的,或者可以被friend module接见。

形式化验证

智能合约平安和准确地运行至关主要,由于其往往持有巨额的资产。形式化验证是确保一个程序(如智能合约)执行其预期操作的最佳手艺之一。

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

我们可以将这种检查视为测试,但这其中有一个要害的区别:它不是检查代码在某些特定情形下的行为,而是检查代码在所有可能情形下的行为。

若是检查通过,则说明该工具找不到代码违反规范的用例。不外这并不意味着代码100%不存在违反规范的情形,由于工具或编译器的破绽照样有可能导致错误的发生。但这依旧使得其比运行一组测试用例提供了更严酷的规范保证。

对于一些代码,稀奇是庞大的代码,工具可能无法自动检查代码是否相符规范。因此工程师也许需要为一小部门的代码添加详细化的规范,直到检查器能够乐成运行为止。工程师甚至可能需要写证实规则,然后该工具会凭证数学原理检查代码是否相符这些证实规则。

由于确保智能合约的平安是至关主要的,一些智能合约编程语言会原生就提供对形式化验证的支持。就像Solidity编译器提供的SMTChecker工具,它假设requires子句始终为真,然后试图证实assert子句永远不会失败。

Move也对形式化验证手艺举行了集成支持。它含有厚实的用于形式化验证的规范语言,能够规范比Solidity的requires和assert子句更庞大的属性,而且有目的地删除了会对形式化验证造成问题的语言结构。Move的开发环境中就包罗一个名为“Move Prover”的检查器。

CertiK由两位常春藤盟校的盘算机科学教授所确立。作为区块链平安领域的先驱,CertiK运用的正是现在最先进的形式化验证手艺。开办CertiK的两位教授均是形式化验证方面的专家,并确立了CertiKOS——天下上第一个也是唯逐一个完全被验证的并发式多核操作系统和治理程序。CertiK致力于通过将形式化验证手艺应用于平安审计以确保智能合约的平安。

因此,CertiK平安专家自然而然地就注重到了Move这一集成了形式化验证手艺的编程语言。

下方是一个double函数及其规范的简朴示例。double函数的功效是将一个64位无符号整数(unsigned integer)举行翻倍盘算。由spec double给出的double 规范从数学上形貌了预期的效果。

规范语言是Move的一个集成部门。规范被星散成spec block。spec block指定了函数的前置条件(requirements)和后置条件(ensures)。

前置条件需要在函数被挪用之前必须为真,以便该函数能够正常运行。尔后置条件则是指当函数返回时必须为真。

此外,spec block还指定了失败条件(aborts_if)。规范语言支持大多数通例Move语法。它还支持用于指定程序行为的主要附加功效,包罗forall、exists和implies。

下方是spec block的示例:

Move Prover将规范和程序语义转换为了逻辑表达式。然后将它们转达给可知足性模理论(SMT)求解器,例如Z3和CVC5,以证实或反驳。以下大幅简化的图表说明晰这一点:

形式化验证有其优势也有坏处。

形式化验证被以为是构建可靠程序的“黄金尺度”,并被用于许多如NASA这样的要害义务系统。编写系统行为的形式化规范可以露出出逻辑上的纷歧致或头脑的不清晰。

然而纵然是对于专家来说,将相对简朴的系统举行形式化规范也是难题且耗时的。

除此之外,在处置更庞大的程序或规范时,审查员也会遇到阻碍,而且可能会需要极长的时间来将其解决。

在CertiK接下来宣布的文章中,我们将更深入地探讨Move形式化验证的潜力和其所面临的挑战。

由于形式化验证的庞大性,CertiK在此建议若有需求的用户应当寻找一个在形式化验证偏向有所建树的平安机构来举行合约审计或是协助对合约的形式化验证。

写在最后

我们希望这篇文章可为想要领会Move语言的读者提供足够的参考价值。

Move确实引入了新的方式来解决可扩展性问题以及提高平安性。然而,没有一种语言可以100%保证平安,非可扩展的或不准确的代码仍有时机滋扰Move的内置功效。

犹如Web3.0,兔子洞的存在是永远数之不尽的。

若是你想领会关于Move手艺特点的更多信息,那么建议复制链接(https://move-language.github.io/move/introduction.html)至浏览器接见这些值得参考的开发职员文档,并连续关注我们对Move Prover(一个用Move编写的智能合约的形式化验证工具)举行的手艺深入研究。

泉源:星球日报

查看更多,

Cách chơi game(www.84vng.com):Cách chơi game(www.84vng.com) cổng Chơi tài xỉu uy tín nhất việt nam。Cách chơi game(www.84vng.com)game tài Xỉu Cách chơi game online công bằng nhất,Cách chơi game(www.84vng.com)cổng game không thể dự đoán can thiệp,mở thưởng bằng blockchain ,đảm bảo kết quả công bằng.

 当前暂无评论,快来抢沙发吧~

发布评论