a16z对话Move语言之父:为何Move是未来智能合约的重要方向

WB3交流加微信:WX-93588,⬅️此处为全站广告位,与正文项目无关
注册并登录App即可领取高达 60,000 元的数字货币盲盒:点击此处注册OKX

去年 a16z等一众安排力捧以Sui 为代表的 Move 公链,让 Move 言语在 Meta Diem 的废墟上大热归来;与此同时,从SuiMove 呈现那一刻起,不看好的声响也一向存在:

假如仅仅是由于 Move 言语有或许比 Solidity 或其它开讲话语更优异,咱们就必定需求一个新的智能合约言语,并乐此不疲地从头开端搭建一个新Layer1吗?

近来,a16z Crypto团队与 MystenLabs 的联合创始人兼CTO 、Move言语之父Sam Blackshear 进行了一次主题为《Programming Languages & Crypto》的播客对话,探讨了为何 Move 是未来智能合约的重要方向。

在该次播客中,a16z Crypto 与Sam Blackshear 从传统编程言语与智能合约编程之间的差异和相似之处到争辩区块链的共同束缚和机遇,展开谈论了Move言语的规划思想、面向方针和财物的编程、安全性,以及同享了办法化验证、办理和社区东西、跨渠道习惯性等论题。

首要同享内容包含:

1、编程言语与智能合约前史

从传统编程、到智能合约编程,再到Move编程。Move是最早的关于怎样规划言语以习惯类型体系、静态类型和编译时检查等问题的言语。

2、Move 智能合约的立异

EVM 过度适配了渠道的完结细节,这些完结细节是为以太坊规划的。开发者终究不得不承继以太坊做出的许多规划决议计划,包含一些让以太坊难以扩展的过错。

Move在规划时,没有将任何区块链特有的东西参与到中心言语中。源代码言语层面的立异将会相当重要,Move终究能够供给的是代码验证器和VM等级的维护,以免受其他程序员的进犯。

3、Sui Move的规划思想

Move 是一种可履行的字节码言语,用于履行用户买卖和智能合约。在Sui Move 中,验证者能够更有用地进行并行化,这使得存储、履行都变得更简略,而不必将这些东西编码到协议等级,并让用户和程序员来考虑。

4、安全性

在智能合约国际中,咱们处于一个束缚状况。咱们编写十分少数的代码,而且有必要白璧无瑕,安全性有必要是最首要要考虑的作业。Move 安全性是既要防止程序员自我脚踏,还要尽或许为他们供给正确的原语,以便他们能够防护进犯。

5、面向方针和财物

Move 被规划为一种面向方针和财物的智能合约编程言语,之所以被规划成这样,是由于大多数 Web2 面向方针的编程言语便是这样。在Sui Move中,将事物的中心点放在方针上,高度鼓励能够尽或许精确地表明细粒度拜访。Sui Move 大局存储的结构是一个从方针ID到方针ID的映射。

6、安全性对比

Move 经过结构消除了重入和智能合约编程中缺失的权限检查问题。Move中,方针一切权信息实践上存储在方针元数据中,这不是程序员能够操控的东西。Move Prover 便是为了防止言语编写智能合约的过错而规划,能够防止开发者犯许多根本的过错。

7、智能合约言语的办理

开端,Move是在FaceboOK开发的,没有实在的办理。咱们十分慎重地扩展言语。简洁性是最首要的东西,但咱们会积极地扩展它。Sam Blackshear 有一个十分详细的愿望,比方Move 被规划为一种跨渠道言语,其间一些链EDM 的根本功能仍应适用,而且掩盖了智能合约开发能手和Web2新人,极具灵活性。

8、给开发者的学习主张

阅览许多代码,这是了解言语的最佳办法。乐意同享和深化探讨,并找到那些实在喜爱和别人同享你的代码,一同构建开源社区的人们。任何能够让你的作业变得更轻松的东西,你都应该学习它的作业原理。

以下为播客全文,全文约25000字,阅览时刻约30分钟。
收拾翻译:Sui World

主持人 Sonal Chokshi 介绍

欢迎来到Web 3.0,这儿是a16z Crypto团队制作的关于建立下一代互联网的节目。我是您的主持人Sonal Chokshi。

本节目旨在为寻求了解和深化探讨加密和Web 3.0相关事物的任何人供给协助,无论是开发人员、创作者、建筑师、企业首领仍是方针制定者。咱们现在开端全新一季的节目。今日的节目首要谈论编程言语和加密钱银,既适用于现有的智能合约程序员,也适用于其他寻求进入这个范畴的开发人员。关于那些对编程言语的演化和呈现感到猎奇的人来说,这也是一个不错的挑选。

咱们今日的特别嘉宾是 MystenLabs 的联合创始人兼CTO Sam Blackshear ,该公司正在为Web 3.0的去中心化未来打下根底。Sam在编程言语方面有着资深的前史,从他的博士学位到在Facebook作业,再到创立并成为Move和开源编程言语的作者,用于构建智能合约。咱们将更多地议论这个论题。

在整个节目中,咱们还邀请到 a16z Crypto的智能合约研讨工程师 Noah,他和另一位伙伴最近为以太坊开发了名为 Helios 的轻量级客户端并赢得了具有应战性的gas优化。

咱们还邀请到 a16z Crypto 的工程师负责人Eddy Lazzarin ,在此之前,Eddy 在 Netflix 从事软件工程,在 Facebook 从事数据工程和数据科学。需求提示的是,以下内容均不构成投资、商业、法令或税务主张。

1、编程与智能合约的前史

主持人 Sonal Chokshi:咱们将从传统编程的前史开端,第一个讲话的是Noah,接着是Sam Blackshear 和 Eddy。

a16z Crypto Noah:咱们想了解编程前史怎样影响智能合约编程的前史,由于我觉得有三个东西,传统编程、智能合约编程,还有Move言语。这三件事都有它们自己的前史,对吧?

Sui CTO Sam Blackshear:没错,我喜爱这种结构。人们用言语来规划语法或让人感到开心,这是对的,但它不只仅是这些。所以我很喜爱这种大局观的结构。

a16z Crypto Eddy Lazzarin:就在这个根底上,传统编程有着过去二三十年来的各种趋势。传统编程言语现已产生了改变,有一些热门论题来来去去。从前有很长一段时刻,动态编程言语和十分宽松的类型检查是十分受欢迎的。一般以为,跳进去,忘掉类型,忘掉一切技能细节,仅仅编写代码是更符合人体工程学的办法。

Sui CTO Sam Blackshear:但最近,人们开端更深化地考虑类型体系、静态类型和编译时检查等问题,以便在程序运转之前尽或许了解程序的一切细节。这些趋势不断改变。然而,关于智能合约编程来说,由于它是如此新颖,咱们还没有看到智能合约编程中这种类型的前史,这是十分不同的。

我以为Move言语是咱们所看到的最早的关于怎样规划言语以习惯这一点(类型体系、静态类型和编译时检查等问题)的依据。我很想了解咱们期望会产生哪些改变,例如静态和动态类型等智能合约编程中或许呈现的论题?这些论题或许还没有呈现,由于现在只要一种言语,即Solidity。

主持人 Sonal Chokshi:那么,这又与转向智能合约编程有什么联系呢?再次请Sam回答?

Sui CTO Sam Blackshear:在这个智能合约空间中,跟着EVM作为智能合约言语的第一批进入者,存在着不同的趋势。人们不知道想用智能合约做什么?咱们怎样编写它们或任何这些类型的作业因而,我以为灵活性愈加重要,以测验了解需求发现运用状况的专家的类型。我感觉现在咱们现已知道了,或许至少咱们对构建块有一些了解。

智能合约的趋势是极点范畴特定的,你为财物界说模板,界说搬运财物的战略,检查拜访操控和权限。

这便是根本的,你不会用智能合约言语编写编译器或操作体系或任何这些类型的作业。因而,它们十分十分好,它们与通用编程言语比较的优势。

我以为人们低估了即便ERC-20标准产生在 EVM 能够编程的好久之后, EVM 乃至被以为是编写以太坊程序的根本构建块之一。我仅仅没有看到任何清楚明晰的依据,证明最根本的东西在此之前是清晰的。

所以你是对的,现在你能够把类型当作天经地义的作业。我以为类型和这些东西的绕过,是能够承受必定技能债款的。假如规划很小,你只想快速移动,而且代码能够扔掉,那么这种技能债款是彻底能够承受的。但风趣的是,你把它用公司或创业公司的规划来描绘,小公司在快速成长,每个人都能了解整个代码库,这种技能债款是能够容忍的。

可是,当它十分十分大时,有许多的人更改代码,他们不知道正在构建的新方针和体系的后果。将其放入类型体系中,使您以清晰、直接的办法编写代码时遇到阻碍,而不是意外地创立后来有人会撞上的玻璃围栏。

例如,就像你们谈到的,能够防止仿制,能够设置财物的最大供应量。这些束缚十分重要,无论项意图规划怎样,都需求坚持。它们是维护项意图健全和安全十分重要的束缚条件。了解这些鸿沟意味着您现在能够创立编程言语,以答应您强制履行它们。这便是我怎样看待Move言语的办法。

跟着咱们了解到需求做正确的作业所需的束缚类型,咱们现在有才能将它们包含在言语本身中。因而,我确实以为它与类型有些相似,就像你所说的那样。

你说到类型关于程序的健全性和安全性十分重要。你们说动态类型或许适用于小型项目,但跟着项意图增长,应该运用静态类型。我有点不同意,我以为彻底静态的类型或许更适合。这或许是一个新颖的观念。它是为了程序员的健全性。我见过最可怕的作业是,当我按下我的快捷键“control k”时,它会告诉我函数签名是什么。当我写Python时,这让我感到恐惧。我看着函数签名,只看到参数的称号。我就像,你究竟想要我做什么呢?

a16z Noah:我不敢信任人们会承受那种写出代码后就永久不会再看一眼的写法。

a16z Eddy Lazzarin:他们承受的是默许假定,即他们能够在心中记住体系的要求。

a16z Noah:可是即便是100行的程序,我也觉得无法默许这一点。

Sam Blackshear :它能够运转,但它并不完美。

a16z Eddy Lazzarin:

我以为你们说的对。而且我以为这种心态现已演化了。从前,类型体系是用来维护程序员免受搭档损伤的。当你的创业公司变得太大时,它就很有用了。但现在它更像是在维护我自己。

在智能合约的环境下,它是在维护我免受进犯者的进犯。这是实在的不同之处,由于在普通程序中,你不会在进犯者受到类型体系的束缚时布置程序。进犯者能够运用其他言语编写机器代码。你只需求维护你自己的防火墙就行了。但在这儿,我编写这个很好的类型方针,它将流入进犯者的代码并坚持其完整性。类型体系有必要保证我的安全。

就像你说的那样,这是一个很棒的东西,它给你带来了不同的需求,你需求强制履行它们,比方防止仿制。这不是你在普通类型体系中需求考虑的问题,或许防止删去或保证你按某种办法运用或毁掉某个值。这些都是由于咱们正在研讨智能合约并企图为这些用例供给有含义的类型体系,因而咱们终究会将这些东西参与move中,也或许会参与未来的智能合约言语中。

主持人 Sonal Chokshi:

实践上,伙计们,让咱们更多地谈谈传统编程和智能合约编程之间的其他差异。但在咱们进一步谈论之前,你们能不能快速介绍一下智能合约程序员能够运用的言语呢?我以为咱们需求了解一下大局,由于我想了解一下现状,比方Solidity、Viper等。知道哪些内容能够让咱们更快地入门。

Sui CTO Sam Blackshear :

是的,我想根本的状况是,假如你想编写智能合约,你简直总是会运用solidity。除非你恰好在几个其他较小的生态体系之一。

假如你在Polkadot生态体系中,你会运用ink!( Sui World 注:ink!是由Parity开发的智能合约言语,用于在Rust中编写智能合约并编译为Wasm代码),它是一个现有的编程言语。假如你在StarkNet生态体系中,你运用Cairo (Sui World注:Cairo 是STARK 证明体系的其间一个编程言语)。

可是大部分状况下,假如我要给出主张,让你学习怎样编写智能合约,我会主张你学习一些Solidity,然后学习EVM。你或许还想运用Viper,仅有的缺点是Viper是较新的,或许更简略呈现缝隙。我记得几年前,在验证存款合约时,他们发现了Viper编译器中的一堆缝隙。发现这些缝隙的人现在在16z作业,他是Day June,他是一个办法验证专家。

由于Day June是办法验证专家,所以现在在a16z作业。而现实状况是,你需求学习一些内容,你需求学习一些言语。

你乃至需求深化了解EVM,假如你想成为一个实在优异的智能合约工程师,你需求了解EVM到一个荒唐的程度,以至于你能够说出每个操作的gas成本,他们能够告诉你切当的与gas成本有关的代码。这便是咱们现在日子的国际。

a16z Eddy Lazzarin:或许有一点值得一提的是,作为一名软件工程师,你总能够了解你正在运转代码的机器。有许多需求了解的关于编程环境的常识。可是在智能合约编程中,环境十分丰厚、十分杂乱。有许多上下文需求了解,这简直与言语本身无关。这便是在你周围产生的作业,周围有哪些方针,不同的代码怎样被调用。这是一件十分古怪的事。

主持人 Sonal Chokshi:那么,最挨近学习Solidity的人是懂JavaScript的人,这是真的吗?

Sui CTO Sam Blackshear :咱们都说是JavaScript,由于它运用“function”这个关键词,就像JavaScript也用到了。但不幸的是,它们并不是十分相似。

a16z Eddy Lazzarin:从语法上看,Solidity确实承继了许多JavaScript的特性。假如你眯着眼睛或心情欠好,或许会觉得相似,但实践上彻底不同。虚拟机环境差异巨大,所以共同点很少。

主持人 Sonal Chokshi:有什么相似的编程言语吗?

a16z Noah:是的,我以为没有直接相似的编程言语。假如你熟悉Was(Sui World注:WebAssembly Studio,一款在线东西,用于将C/C++ 和Rust 代码编译为WASM 格局。),并企图在一个需求高度阻隔的环境中写代码(比方Surplus),这或许是最挨近的了,这些代码要独立履行,但又需求必定程度的通信。但它依然不是很相似,思想办法彻底不同,表面上的相似或许会有风险。

a16z Eddy Lazzarin:或许相关的是编程言语前史上的一些严重过错。我不知道在区块链方面是否有一些走下了过错路途的恶劣前史。咱们是否走了一些可怕的路途?

主持人 Sonal Chokshi:这是个好问题。

Sui CTO Sam Blackshear :

这是个好问题。1977年,C言语发布,也是Standard ML发布的年份。Standard ML具有极大的影响力。现在,有OCaml言语、Rust言语都受到其极大的影响,Move言语也受到其影响。但这些思想现已存在了很长时刻。我想许多人都在考虑一个替代的未来,在那个未来中,C言语没有成为主流,而是Standard ML的思想被广泛承受,如强类型、内置安全性。

主持人 Sonal Chokshi:那么,这种计算机技能的开展趋势是什么呢?我并不是说这是一个过错,可是我以为像Standard ML 这样的言语即便在今日看起来也十分现代化。幻想一下那个另类的宇宙是一个风趣的作业,当我第一次发现时就被震撼了。

a16z Eddy Lazzarin:猎奇心作祟,为什么你以为像C言语以及相似的言语,它们如此直白、如此指令式?它们在相对较低层次上考虑计算机,作为编程言语它们并没有做许多作业,这便是我对 C言语的观念,为什么咱们走了这条路?

Sui CTO Sam Blackshear :

我以为其时的硬件束缚迫使你运用C言语,假如你想要编写高效的程序,或许推动计算机的鸿沟,我以为假如你向前推动硬件,你会挑选另一条路途。可是我以为,函数式编程很难,它在许多方面都是反直觉的。我不是说C言语不难,但我觉得它更简略入门。然后你意识到,我现已做了十分杂乱的作业,或许说很难推理,可是为时已晚。这是个好点子,函数式言语确实有更峻峭的学习曲线,可是一旦你把握了,你会意识到,我能够很好地独登时考虑我的代码,作业很好地处理了。

a16z Eddy Lazzarin:我以为假如你许多地考虑计算机是怎样在硬件层面上作业的,那么像C言语这样的言语就更直接了。但假如你对编程言语不是很了解,那么C言语就更简略入门。可是假如你十分了解编程言语,那么我以为 ML 和函数式编程这些类型的言语有更多的东西值得去探究。

Sui CTO Sam Blackshear :

这是一个大局观的答案。但我想说的是有关小规划的“计算机言语过错”的问题。

a16z Noah:所以,我对此有些犹豫,由于我一向听说函数式编程有多棒,可是我发现有点难以了解。但我一向想知道的问题是,假如函数式编程真的那么好,为什么它从未能够克服当前编程言语的网络效应呢?它的这种局势令我惊奇。

但我想弥补的一点,我以为函数式编程给咱们带来的巨大奉献是,咱们运用的一切指令式言语都是借用的。但最好的是,就像你方才说的,Rust受标准电子邮件的影响很大,但Rust根本上是一种指令式言语,对吧?但它具有一切从凝视他们而来的奇妙的仙尘。

Sui CTO Sam Blackshear :总的来说,我以为实在的问题是,从1977年开端,指令式言语的影响力太大了。然后是PRFP,正如你所说,它不是最巨大的,它有自己的巨大主意,孤登时看,每个人都有自己的问题。咱们现在只看到像 Rust 这样的实在的混血儿漂亮地嫁给他们。它真的改变了景观。

所我想提的一件事是,便是Tony Hoare 称之为节点引证的十亿美元过错。虽然他其时或许是想夸大一下,但明显这个过错带来的价值比不犯这个过错愈加昂贵。

a16z Eddy Lazzarin:不,这或许仅仅下限。

2、智能合约的立异开展

a16z Noah:我其实很猎奇你没怎样虚拟机层和编程言语层的立异,以及它们怎样影响智能合约的开展

Sui CTO Sam Blackshear :

这是个很好的问题。我以为人们没有充分考虑这些差异,比方虚拟机层和编程言语层的差异。实践上,除了EVM和新的虚拟机层,还有许多立异,比方Viper等源代码言语。这些东西在许多方面都比Solidity更好,也很风趣。

我以为,假如Move能够成为咱们期望的Web 3.0的法令标准,那么虚拟机层的立异将会是缓慢而渐进的。由于中心是固定的,咱们只会增加新的东西,而不会彻底从头规划。

可是,我以为源代码言语层面的立异将会相当重要。现在,咱们只要一种源代码言语,但它与字节码格局严密相连。可是,跟着越来越多的客户运用智能合约,并着重安全性,我能够幻想将会有许多不同的源代码言语需求测验,这是一个风趣的研讨范畴。或许你能够先写下你之前的现实,然后在程序中为你综合他们的信息,或许对束缚的主张。

或许你能够从编写你的Move从前的现实开端,然后经过组成程序为你填充程序,或提出束缚的主张。

比方,你或许在一个十分特定的游戏上下文中编写Move,这个游戏看起来像场景层次结构。或许它是用Python库编写的,可是编译成Move的字节码。或许你像 Solana 或其他渠道相同,正在考虑整合Move,但不想整合虚拟机,而是经过将Move的字节码编译为Salina的字节码格局,然后在开发者等级运用Move源代码言语。

我以为有许多不同的办法,就像JVM(Java Virtual Machine)相同。JVM是一个美妙的通用虚拟机,开端只支撑Java。但它经过了时刻的考验,而且现在你有Scala、Groovy和其他一些风趣的办法来运用这些原语来规划不同的编程体会,十分符合人们想做的作业。

所以,我有一种偏见的观念,以为Viper能够给你许多在源代码言语层面进行试验的空间。

a16z Eddy Lazzarin:你对一切替代EVM字节码言语的观念怎样?比方有FE、Iron和Viper等,这些风趣的尽力旨在为EVM构建更智能、更杂乱的言语,你对此持乐观态度吗?

Sui CTO Sam Blackshear :所以这些都是编译成EVM字节码的不同源代码言语。

a16z Eddy Lazzarin:对,编译成EVM字节码。

Sui CTO Sam Blackshear :咱们在Facebook开端规划Move时,看到其他源代码言语构建EVM的状况时,咱们研讨了Solidity和Viper,这是在咱们开端构建EVM的时分。咱们终究得出的结论是,让人们编写安全的智能合约最困难的问题是EVM的底层性质,以及怎样让类型化的值在可信鸿沟上活动,以及动态决议计划等等这些问题,这些都是EVM的特性。

假如你构建一个更好的源代码言语,你能够让开发者更难搞砸。或许他们能够进行更高档的验证,但终究,Move能够供给的,而且咱们以为很重要的是,代码验证器和VM等级的维护,以免受其他程序员的进犯。

源代码言语不能给你这个,有必要将其内置到VM中,无论你在EVM上迭代完美源代码言语多少次,我以为Solidity很棒,咱们也能够做得更好,但我以为,假如你没有这些根本的维护措施内置到VM中,你得到的成果终究会不如一些其他路径。我不是由于我以为Half很帅而感到尴尬,而是由于我以为终究状况不如其他路径那么吸引人。

我以为前期智能合约言语,特别是EVM,过度适配了渠道的完结细节,这些完结细节是为以太坊规划的,内部包含了关于买卖结构的指令,账户结构的指令,运用特定类型的密码学等等。

我以为这使得在一个不像以太坊那样的链上运用EVM变得十分困难,你终究不得不承继以太坊做出的许多规划决议计划,或许在某些状况下,还要承继一些让以太坊难以扩展的过错。

在规划Move时,咱们十分清醒地意识到不要将任何区块链特有的东西参与到中心言语中,尽或许地让它与详细的区块链无关。这样你就能够拿着Move,在一个具有张狂买卖结构的作业量证明链上运用它,这个链或许是在瑞典这样做,而另一个链在澳大利亚是这样做的。

这样,你就不必押注在某个特定的链上成为一个Move开发者。你能够将你的技能跨越各种不同的链运用,包含未来的链。咱们以为这关于一个智能合约言语的生存至关重要,由于一个言语最大的财物便是它的社区。而经过使你的技能跨渠道,而不是过度适配于一种言语,你能够扩大社区的规划,从而更好地完结成功。然后,一个大的社区是使得在东西上投入许多资金、在公共库上投入许多资金以及一切你实在需求一个言语成为大牌并取得成功的东西变得或许。

这是咱们从一开端就测验做的作业,现在看到了多个实在不同的Move链,它们在怎样整合言语方面十分不同。

a16z Eddy Lazzarin:在我看来,这是node.js底层的主题,对吧?

主持人 Sonal Chokshi:是的。a16z Eddy Lazzarin:有许多人知道JavaScript,他们想做许多作业。他们想同享各种库。现有的代码能够启动服务器端的JavaScript实例,这使得node变得有用。这意味着有各式各样的开发者或许不做后端编程,但能够开端进入并将其作为自己的范畴。

Sui CTO Sam Blackshear :我以为这个对比很好。另外,咱们想要谈谈关于编程言语办理的问题,由于Node明显有一些十分有目共睹的办理不合和割裂,每个编程言语社区都有许多有目共睹的办理不合和开展方向。我从前报道过Node,它是我最喜爱的之一。但我想保证咱们完结这个主题。还有其他要说的吗?我觉得你是咱们广播节目中的居民老死板,我很喜爱。

a16z Noah:所以我有一个反面观念,或许说我有一个很帅的主意。我一向在想,为什么没有人建立一个Move的OP Rollup,那将会十分酷,考虑到OP的Rollup人们是在以太坊上完结的,他们运用MetaMask和ECDSA签名,但好像并没有运用与咱们相同的签名格局,比方Move好像没有运用ECDSA。

Sui CTO Sam Blackshear :是的,咱们支撑以太坊的EdDSA和ECDSA签名格局。

a16z Noah:很完美,但我的观念是,你能够构建一些十分风趣的东西。可是,当我企图学习Move时,我一向在盯着甜点和艺人狗。我很困惑。

Sui CTO Sam Blackshear :确实是一个问题,对吧?当有人开端学习Move时,他们或许会很困惑:我正在学习智能合约言语,但区块链在哪里?假如你企图为两个渠道编写代码,它们之间的差异也会产生问题。所以我以为咱们仍在尽力处理的应战是,挑选一个渠道,挑选一个甜点,挑选一个Optus,深化学习它,然后你会发现你的技能和代码能够很简略地搬运到另一个渠道上。我以为这儿存在一些固有的问题,还有一些文档问题需求处理,以使这一切愈加简略。

a16z Eddy Lazzarin:或许类比一下,取决于你是否以为 SQL 是一种可移植的技能。有许多 SQL 方言。有一个反 SQL,没人实在知道它是什么,但他们能学会 SQL,假如你稍微眯眼睛,你能够运用任何数据库,或许会对特定的函数称号或特定的类型有些困惑,但大致是相同的形状。

我以为这使得 SQL 很强壮和耐用。这便是为什么它依然是数据的共通语的一部分的原因。或许这便是 Move 的未来。我以为咱们能够做得更好一些。

Sui CTO Sam Blackshear :我以为在跨渠道方面,这是一个很好的方针,十分运用程序特定。这便是正确的言语来议论表格和议论数据库。这是一个无可争议的现实,这便是为什么每个人都运用它。所以,假如 Move 能成为区块链中的 SQL,我会很快乐的。

3、智能合约编程的共同事物

主持人 Sonal Chokshi:咱们现已围绕着传统与智能合约编程、特定束缚和差异以及乃至一些 Tread 和智能合约编程之间的相似之处来回谈论了。有没有关于智能合约编程的共同事物,咱们没有涵盖?

a16z Eddy Lazzarin:在智能合约上下文中,另一个十分重要的作业是资源运用,如 Solidity 中的 Gas Metering。虽然在许多状况下,计算资源是相对丰厚的,计算成本也是十分重要的。可是在智能合约上下文之外或区块链上下文之外,这意味着它仅被触及和考虑得更少。我以为在言语中有关你耗费的资源的概念或许是智能合约编程的一个风趣的资源。

Sui CTO Sam Blackshear :这是咱们十分重视的作业,咱们在 EVM 中构建了 Gas Metering,正如你所说,这与传统编程言语十分不同。

我以为今后的趋势是 Gas Meeting 会变得越来越粗粒度,更多地防止如资源滥用之类的严重问题,而不是实在地为每个指令精打细算。

我实践上以为像 Gas Golfing(Sui World注:Gas Golfing 指的是在一系列智能合约的跳转交互中,开发者编写最节约 gas 代码的应战) 这样的东西虽然十分风趣,但实践上对编码风格和安全性都有很大的损伤。

挖苦的是,咱们之所以只知道按指令收费的模型,或许是由于假如你有一个巨大的虚拟机,运转10万条指令和运转50万条指令的差别在实践丈量运转时刻时微不足道。

所以,咱们为什么要按指令收费呢?因而,我以为咱们会看到一种趋势,便是怎样使这愈加粗粒度。

每当我看到一切这些不安全的块和Solidity代码中的许多内联汇编时,这让我想起咱们现在处于多么前期的阶段,由于这不是智能合约开发人员应该考虑的编程应战,这不是一个老练的开产生态体系的标志。但咱们正在朝着这个方向开展。我同意咱们要考虑极限状况。挑选正确的算法、挑选正确的数据结构、挑选正确的一般办法,这是大多数软件工程的状况,都是很重要的。但关于精确计算每条指令的成本的琐碎问题或许太过繁琐了。

主持人 Sonal Chokshi:咱们谈到了优化gas,类型、财物和安全性。还有哪些束缚是需求考虑的?

Sui CTO Sam Blackshear :这是一个相似于gas的线程,但我想到的详细子集是状况。这对我来说是一个大问题。当我考虑gas操作时,我喜爱进行极点的gas优化。

可是,当咱们处理持有实在资金的实践智能合约时,我的一般主张是,除非你能够费尽心思地运用略少于之前运用的状况,不然你应该做出合理的安排。那是仅有一次我会运用大型汇编块的状况,假如你能够做出一些愚笨的作业来运用更少的状况,由于这就像一个永久的资源,咱们应该将它放在仅高于履行或调用数据的位置。

a16z Eddy Lazzarin:我彻底同意这个观念,由于我以为这是根本性的昂贵的问题。假如一个渠道答应每个合约都触及任何一块状况,那么它将很难完结并行化。而像 Squeeze 以及其他一些新的区块链渠道所采用的办法是,显式地约束买卖能够拜访的状况,至少让我知道一些。这样在高层面上渠道就能够更简略地将买卖完结并行化,包含履行和一致。因而,这是一些程序员有必要考虑的问题:在拜访状况时尽或许地快,不要触及不需求的状况,这样验证者才干更有用地完结并行化,完结更多的区块空间。

a16z Noah:这是否会打开一种国际,即即便在非人物扮演的状况下,不是一切验证者都需求下载全部状况?假如你能很简略地将状况分离开来,让验证者仅服务于它能处理的业务,这是否能够完结?

Sui CTO Sam Blackshear :我以为这确实有或许完结这样的国际。这也为不同的办法开辟了一条路途。

让我回顾一下,从程序员的角度来看,能够跨不同的买卖触及整个国际是十分有价值的。可是,咱们不能过于着重这个长处,以至于有必要经过 Rollup 或许跨多个买卖来完结,由于这会下降安全性,让用户注意到。

我以为区块链的价值来自于这样的笼统:有一个账本,一切有价值的状况都在这个账本上,我能够一次性触及它们。从程序员的角度来看,这是区块链的价值所在。问题在于:怎样在暗地让作业更有用地进行?怎样让它变得愈加稀疏,使得验证者能够更有用地进行并行化?在Sui 中,一个验证者能够有多个作业人员,每个作业人员负责一部分状况。但从程序员的角度、乃至从其他验证者的角度来看,它看起来就像是一个逻辑实体,它能够完结一切作业。

这使得存储、履行都变得更简略,而不必将这些东西编码到协议等级,并让用户和程序员来考虑。

4、智能合约编程思想办法上的改变

主持人 Sonal Chokshi:咱们方才谈论了一些与智能合约编程相关的共同之处。还有哪些思想办法上的改变?咱们现已谈到了一些,像Eddie说到的,一个巨大的改变是,在编程的国际中,至少自从计算机的前期,咱们处于丰厚的国际,但在这个国际中,咱们处于束缚的国际。那是一个思想办法的比方。还有哪些思想办法的改变?特别是关于你们每个人来说,作为你们接触智能合约编程的程序员,有什么让你们感到惊奇,或许教会了你们,或许让你们对某些作业有了不同的观念?

a16z Eddy Lazzarin:或许一个有点傻的比方是,我还记得几年前我第一次学到ERC-20代币的余额不是你的账户具有的东西。你的地址没有代币余额。代替它的是,有一个代币合约,记载着哪个地址有多少余额。当你想要向或人搬运代币时,你不是发送给他们一些代币。相反,你需求到合约中进行一切这些低等级的操作,改变你的地址和他们的地址所持有的余额。你有权限操作和改变那个合约。这是一种十分反直觉的办法,在 EVM 和 Slippery 中这是第一次让我注意到的关于Move的一个风趣的思想办法改变。这是风趣的思想办法改变,由于咱们常常听到的英文单词不必定与编程模型相对应。

Sui CTO Sam Blackshear :我想要弥补一点,这与你在实践操作时有关。在正常的国际中,咱们十分重视开发人员的生产力,由于工程师的作业是编写许多代码,让这些代码只要几个过错,而且这些过错不会太严重。而在智能合约国际中,你的作业是编写十分少数的代码,而且有必要白璧无瑕。它有必要在一切或许的方面都是完美的。不然,你将失掉数亿其别人的钱。

这是一种彻底不同的思想办法的改变。花费两个月的时刻盯着1000行代码,并测验想出怎样使其更好、更重要的是,怎样使其完美,然后审核人员也要做相同的作业,判别它是否完美。

主持人 Sonal Chokshi:这是一个大的思想改变。在编程的国际里,至少自计算机的前期以来,咱们一向处于丰厚的国际,但在这个国际中,咱们处于一个束缚的国际。

a16z Eddy Lazzarin:另一个思想改变是,在ERC 20代币的国际里,你的地址没有代币余额。你不能发送代币,你有必要去拜访代币合约,在代币合约中查找地址对应的代币余额,然后经过修正地址和余额来完结代币搬运。这是一种比较反直觉的考虑办法,但在EVM和Move中,这是十分重要的思想改变。

Sui CTO Sam Blackshear :在智能合约编程中,你的作业是编写一小段代码,而且有必要是完美的,由于这个代码或许触及到数亿人的资金安全。你有必要细心审查代码,保证代码的正确性。

另外,晋级智能合约的难度比晋级移动运用或网站更高,由于在智能合约中,代码是不可变的。在智能合约编程中,你有必要考虑怎样支撑安全的晋级和信任,使其看起来更像传统生态体系。

可是智能合约编程中,你需求具有一个对抗性的思想办法,这关于来自其他范畴的人或许很陌生。这是由于在智能合约中的布置模型,你不只需求考虑你的运用的预期运用状况,还要考虑非预期的运用状况。由于在传统编程中,有办法能够躲藏自己,束缚为一个小型 API,或运用防火墙来束缚进犯者的操作等。

但智能合约的整个含义在于,你所做的能够与你从未幻想过的代码进行交互,而且能够安全地完结。因而,你需求考虑这种状况下的长处和缺点。这必定是相关于传统编程的一个思想办法的改变。

主持人 Sonal Chokshi:这是一个十分重要的问题,也是咱们谈论怎样编写智能合约和运用智能合约编程言语时应该优先考虑的问题吗?

Sui CTO Sam Blackshear :是的,必定是。这实践上是我最喜爱议论的作业。这让我十分害怕,智能合约言语规划者需求考虑的问题是安全性。这是首要焦点,乃至或许是仅有的焦点,直到咱们处理了这个问题。

我以为,智能合约安全关于更广泛的加密钱银采用来说是一种存在性威胁。我这么说的原因是,您能够看一下以太坊和solidity,以及最盛行的渠道EVM和Solidity。您能够看看编写此代码的前期程序员,他们十分高素质,实在了解底层区块链,十分重视安全。他们知道自己在做什么。我以为,他们十分认真地编写办理数亿美元和数十亿美元的代码的职责。

可是,假如您看一下任何当地的智能合约安全记载,都十分糟糕,这不是这些人的错。我以为这是一个十分困难的问题。而且我以为言语使其愈加困难。所以,假如您看看我最喜爱的网站rakt.news,您能够检查排行榜或检查价值数千万或数亿美元的这十个黑客,这些黑客十分惯常,每周或每月产生一次,详细取决于规划。同时,智能合约开发者社区十分小,只要约5000名全职 EVM程序员,这与传统开发者社区比较十分十分小。

因而,假如您信任咱们具有的人是最硬核且最重视安全的人员,但开发实践和安全记载是不可持续的,那么我以为您的结论是,没有任何办法能够使这个空间在没有使安全问题变得更糟的状况下持续增长,这或许意味着它根本不会增长,或许像那些想进入Web3的大型金融安排或公司相同,他们正在看着自己是否有必要雇用智能合约开发者?我会被黑客进犯数千万美元并感到严重。跟着时刻的推移,这种状况只会变得更糟。他们或许会坚持观望。因而,作为企图规划新智能合约言语的人,安全性有必要是您首要要考虑的作业。

主持人 Sonal Chokshi:你们其完结已在不失掉财物的布景下暗示了这一点,可是你们更详细地是什么意思呢,由于它十分重要?

Sui CTO Sam Blackshear :我所说的安全性是指咱们既要防止程序员自我脚踏,还要尽或许为他们供给正确的原语,以便他们能够防护进犯,由于智能合约是一个设置,您的代码布置在一个进犯者周围,进犯者能够直接调用您的代码,能够直接与其链接。您的代码是开源的,或许至少字节码是开源的。

这是现在咱们所见过的最具对抗性的编程环境,出错的价值也是最高的。因而,我以为假如你在谈论智能合约编程规划,那么安全性有必要一向放在首位。一旦咱们处理了安全问题,咱们能够考虑其他更具表现力的要素,但这是我的有些庸俗,但我以为十分重要的答案。

a16z Eddy Lazzarin:哪些特性能够影响安全性?有什么比方能够表现这一点呢?

Sui CTO Sam Blackshear :我以为最重要的是封装,详细来说,是封装的各个子特性。当您编写代码时,您无法猜测进犯者会测验什么,因而需求能够在没有预见到进犯者会做什么的状况下进行推理。所以,您需求一个强壮的类型体系,不只在源代码等级,而且在字节码等级都需求,这样您在编写源代码时取得的保证将在您将代码发布到区块链上、其别人依靠它并与它进行交互时持续坚持。咱们观察到,在其他范畴中盛行的某些特性在智能合约编程中本质上是不适合的,比方动态分配。

在传统的编程中,像接口和动态分配这样的东西是关键的笼统机制,是无处不在的。您能够界说一个接口,然后其别人运用不同的逻辑重写该接口,然后您能够针对该接口进行编程,一切都十分好。可是咱们有一个幽默的说法:“在代码是法令的国际里,接口是违法行为。”

a16z Noah:这是个玩笑话,让咱们停下来一分钟。在代码是法令的国际里,接口是违法行为。

主持人 Sonal Chokshi:在您持续之前,您能否再解释一下这句话?我不想太快地越过它。

Sui CTO Sam Blackshear :是的,彻底正确。这儿的主意是,接口不界说行为,它界说了预期行为。比方,当你阅览接口的标准、参数称号乃至类型时,它告诉你想要完结什么。可是并不能保证它就必定会产生。

所以,假如你编写的代码是用来维护某些东西的,但实践上你留下了一个空白支票供进犯者、其别人填写。这在契约法中好像是一种违法。这是一个未清晰规定的合同。我十分喜爱这个特性,它在传统的编程言语中很受欢迎。但咱们以为,在智能合约中,这导致了许多不同的问题。例如,从头进入需求动态调度。例如,假如您取消了动态调度,则根本没有从头进入。像以太坊中的毒药代币这样的作业产生了,由于您重写了搬运函数,而每个人都知道直观地说,它仅仅用来搬运资金,或许不会做其他任何作业。但现在你让它做一些超出预期的作业,比方盗取金钱。这便是一个特性的比方,假如将其删去,那么对代码进行推理并进行恰当的封装就变得愈加简略了,由于每次看到一个调用点时,您都知道它将切当地做什么,您不必忧虑其别人今后会做出令您惊奇的作业。

a16z Eddy Lazzarin:切当地说,我以为这个类比就像假如你界说一个关于椅子的接口,它有四条腿和一个座位,你描绘的是它的详细层面,而不是行为层面,你没有描绘或许是隐含或默许的关于椅子的其他作业,比方它具有某种结构完整性,它有特定的材料,它是以某种办法放置的。

a16z Eddy Lazzarin:或许被规避,这意味着接口仅仅一组恣意的描绘,不能捕捉您想要强制履行的安全束缚。

a16z Noah:这正是界说。

a16z Eddy Lazzarin:在过错的层面界说事物。我很猎奇。

Sui CTO Sam Blackshear :可是,您怎样在接口之外很好地进行模块化?假如接口是一种违法,我或许是一个罪犯,由于我的最喜爱构建杂乱的智能合约的办法之一是喜爱有不同的合约,具有不同的意图。

而且,特别是在十分杂乱的体系中,您有一个根据模块的根底,其间模块遵守某种接口,然后首要合同能够知道怎样调用不同的模块。

这些模块一般经过办理办法取得许可,怎样取得超级表达的即插即用的模块性?没有标准化接口?怎样取得承继?

a16z Eddy Lazzarin:这些与接口有关的一切作业都喜爱吗?

Sui CTO Sam Blackshear :这正是要问的正确问题。他们能够整天对立这一点,可是怎样供给一些使您编写有用代码的东西?就像假如不答应您走出房子之类的作业相同,没有违法。可是咱们做到这一点的办法是,接口和承继并不是仅有的办法,我倾向于以组合为考虑办法。咱们供给了几种组合原语,不需求动态调度程序接口。

其间之一是泛型。咱们有运转时遗传,看起来很像您所具有的。Clr(Sui World注:common language runtime,公共言语运转库)让我给出一个十分详细的比方,不然这很快就会变得笼统。

像您的ERC-20之类的东西,这明显是一项根本重要的加密标准。假如您的渠道,您的言语无法做到这一点,那么它将没有什么用处。在像 Move 这样的言语中,您界说了一个称为t的类型点,其间t是一个泛型类型参数,然后完结了coin的函数,例如有一个函数用于将2个点连接在一同。这适用于一切coin类型。这不是某个人想要掩盖的东西。您界说拆分。

当你想让或人定制代币的行为时,运用所谓的才能方法,例如关于代币,你或许想要定制的一件作业是总供应量是多少,或许更根本的是它的方针是什么?你能够这样表达:好的,你有类型为“t”的点结构体,然后有不同的t的实例化,例如美元、英镑或其他的钱银类型。关于你想要定制的东西,你在才能层面上供给它,创立一个代币的函数。你说,这是我的代币的类型参数,然后它会给你一个叫做“资金宝库才能”的东西。然后有其他的逻辑保证只要持有t的宝库才能的人才干铸造和毁掉t类型的代币。你能够拿到这个宝库才能,将它锁定在一个不同的合约中,强制履行总供应量的束缚。你能够将它放在某个当地,比方说只在周二谈论,但不在周四谈论。你倒置了操控流,这就答应你进行恣意的组合。这是一个技巧的比方,但这个技巧能够在简直一切当地运用,假如你想要让行为以某种办法作业,你需求硬编码。这听起来欠好,但你完结特定的两种办法,然后你为你想答应的东西界说这些才能。

a16z Eddy Lazzarin:你以为才能是你能够增加到一个看起来像是传统程序员的接口的束缚吗?

Sui CTO Sam Blackshear :是的,我以为大多数这些接口方法能够十分直接地变体。这有点难以编译,可是你能够说,这是这个接口想要做的作业的等效才能方法。

主持人 Sonal Chokshi:顺便问一下,Sam,你觉得这样满意吗?请随意表明贰言,有点冲突感是好事。

Sui CTO Sam Blackshear :我觉得这样还算满意,由于我以为假如你能够有具有内在才能的模块或许结构体,而这些模块能够被喂入具有十分预界说行为的模块中,你终究能够得到彻底相同的行为,就像模块能够做到的那样。模块承受笼统的结构体,那个结构体在那个模块中被界说,然后这个结构体里边有一个内在的才能。这实践上十分好用,由于你能够得到十分好的权限款式注册表,它们简直自然地从这儿产生,就像什么叫做DS-Off注册表便是这样,是吧?

a16z Noah:彻底正确。这些才能是能够扩展表明你被答应做的作业。因而这有许多其他的优点。比方说,你想知道我的账户能做什么,你看看我有哪些才能就行了。然后,你能够做程序剖析,看看假如我有一个宝库才能,那么我能够调用哪些函数,还有其他一些相似的东西。

5、面向方针和面向财物的编程

a16z Eddy Lazzarin:所以我或许有点提早谈到证冥具,可是这些才能对类型体系可见吗?在对程序进行静态剖析的时分,这些才能在程序的哪个时分是可见的?假如我写了一些特定实例化的代码,其间有才能,那么在我运转它之前,能够很早地发现我违反了才能吗?

a16z Noah:是的,这些才能是对类型体系可见的,而且在程序的静态剖析阶段就可见了。假如我写了一个具有才能的特定实例化的类型的代码,那么十分早就能够发现我是否违反了才能,不需求在虚拟机上运转它。

Sui CTO Sam Blackshear :让我简略回答一下这个问题,然后再供给一些布景信息,它们对编译器可见,而且是类型体系的一部分。这是咱们十分重要的一个运用点。但我想稍微讲一下Move可移动性体系中的结构体,以及它怎样卷入到相似于审计的才能等级中。假如这不会分散注意力的话。

在Move中,你有结构体类型和相似于其他言语的结构体,它们能够有字段,可所以根本类型的字段,也可所以其他结构体。而愈加风趣,或许愈加不同的是,这些结构体具有才能。假如你熟悉Rust,那么才能有点像符号买卖。它们声明晰你在结构体上答应进行的内置操作。

相同重要的是,假如你没有才能,你就不能做那些作业。比较简略的一个才能是十分重要的,那便是仿制的才能。假如你有一个代币类型或许非同质化代币之类的东西,在计算机中,它仅仅一些比特,但你不期望答应别人随意仿制这个东西。

在Move中,假如你没有声明你的结构体具有仿制的才能,那么你就不能运用咱们相当于“man copy”的操作。

所以像整数和字符串这样的东西都有仿制。但假如你不想让你的类型具有仿制的才能,那么你就不给它。然后还有其他的才能,比方丢掉,这被称为drop才能。这就触及到了风趣的线性类型的东西,假如你想要丢掉某些东西,比方把它放到作用域之外,或许掩盖掉它,那么你就给它drop才能。但假如你不给drop,那么消除它的仅有办法便是界说该类型的模块所期望的任何战略。

公共言语运转库(common language runtime,CLR)举个详细的比方,假如你想为你的代币坚持一个总供应量,你就不给你的代币drop才能。然后除了在声明它的模块中界说的burn函数,没有其他办法能够脱节它,这个函数能够更新总供应量。这些都是你能够运用的技巧。还有几个与存储有关的才能,比方它是否能够存储在大局存储中,我不会详细叙述,由于它们对这个问题不太相关。但根本上,才能现已融入到审计程序中,审计程序了解类型体系,知道怎样运用类型体系来处理问题。假如我编写一个阐明,说只要一个这样的东西,那么审计程序能够运用这个来证明这个特点。因而,才能和类型体系的保证是相得益彰的。

a16z Noah:当你说到drop时,我就想谈谈我最喜爱的东西。你能不能谈一下热马铃薯方法是什么?假如还有其他相似的酷东西,它是我最喜爱的古怪作业之一,是从Move中产生的。

Sui CTO Sam Blackshear :这确实是一个古怪的东西。这与才能十分密切相关。一般在编程言语中,你关于何时能够消除你的值没有太多的操控,或许你有一个析构函数来阐明你的值何时会消失。可是有时析构函数的保证比较弱,或许你不能简略地说相似于“你不能删去我的类型”。这听起来像是一个古怪的束缚,但它实践上十分有力,特别是在没有动态分配的状况下。

我先举一个热马铃薯的比方,然后咱们能够深化了解闪电贷之类的东西。假如你在以太坊上进行闪电贷,这是一个标准,你能够重载它,根本上你公开一个回调函数,就像一个闪电贷合约,你给我钱,我的回调函数然后取回钱之类的,而在Move中,你这样做的办法是有人去闪电贷合约,他们说,“嘿,给我53块,但他们也给你所谓的热马铃薯方针。

热马铃薯方针是一个结构体,它没有才能。它没有仿制,所以你不能仿制它。它没有大局存储的才能,你不能像将它放在一个合约中相同将其藏起来。它也没有drop才能,所以你无法将其丢掉。因而,仅有的脱节它的办法是将它传回闪电贷合约。让你传回它的闪电贷合约的代码,强制你还款。假如你不还,它的程序将在运转时失利,乃至不会经过类型检查。因而,这是运用风趣的才能操控你的值的损坏,作为一个程序员,能够在任何时分强加恣意的不变量,以决议何时能够毁掉这些方针。这些看起来很像API调用方法十分清晰。另一个十分明显的比方是,假如你想要强制或人在调用unlock之后调用lock,但在两者之间能够做任何想做的作业,你也能够用这种办法完结。

a16z Eddy Lazzarin:当我第一次听到“烫手山芋”方法时,我想到了像“mute texas”这样的锁的风趣用途,这些锁仅出于人体工程学意图,运用了类型体系,以强制特定方针的运用办法,简直是商业逻辑等级的要求。我以为这是十分聪明的,感觉十分现代化,是编程言语中人体工程学的高质量运用办法,而这种办法在传统的编程言语中乃至还不是很常见,但在智能合约环境中明显十分有价值,由于在这儿有更多的逻辑要求,要考虑或许触及的价值和安全性。

Sui CTO Sam Blackshear :在咱们谈论任何详细的比方之前,您能否快速概述一下咱们的方针体系的高档概述?方针是什么,谁具有它们?方针怎样具有其他方针,模块怎样与它们一同作业?

a16z Noah:是的,彻底正确。这是关于Move言语的一个方言,特别是Sui Move。这个东西的根底是大局存储的不同结构,而不是咱们从前运用的原始Move方言的大局存储计划。原始的Move大局存储计划十分相似于以太坊运用的公司模型。

在Sui Move中,咱们期望将事物的中心点放在方针上,高度鼓励能够尽或许精确地表明细粒度拜访。这有助于你做许多作业,咱们不会在这个播客上详细介绍,比方更有用地处理业务,告诉钱包用户业务将要做什么等等。

所以在Sui Move中,大局存储的结构是一个从方针ID到方针ID的映射。然后方针仅仅具有一个称为键(key)的才能的Move结构。它说:“嘿,我能够作为键。”它能够呈现在大局方针池中。然后每个方针有必要具有一个大局仅有的ID。然后你能够为你的模块编写入口点函数,它们能够直接将方针作为输入。假如你在写一个业务,这个WeRunTime就会有方针ID。假如你写的是业务,WeRunTime就能够运用这些ID来将ID解析为方针,并将其插入函数中。

这种面向方针和面向财物的编程体会十分棒。它比咱们在原始Move版别中的做法直接得多。你还说到了父方针和子方针以及方针层次结构。这十分有用,但你依然期望能够像表明大型集合这样的东西

比方,我正在构建一个相似于DNS的注册表,我期望稀有百万个条目。咱们有一个方针巨细束缚,一个方针可所以几兆字节,但不能更大。可是假如你有像DNS这样的东西,它应该是恣意大的。咱们表明它的办法是运用父子方针联系,咱们根本上有一种办法将一个方针视为异构映射。然后你能够增加具有动态挑选字段的键。这在某种程度上十分相似于JavaScript。咱们能够说,这个方针有一个映射在里边,然后我能够在这个映射里放一些东西。或许你能够说,当我界说这个方针时,它有十个字段,但我实践上想在后来增加一个新字段,我将晋级我的合同。我想在事后增加一个新字段。

咱们表明它的办法是运用这些父方针和子方针联系,每个子方针都与一个键值相关联,可所以恣意的Move值,例如字符串或u64,或任何你想要的其他值。

a16z Noah:是的,与父方针的概念有关,我以为让它实在成为我的“灵光一闪”的作业实践上是几个月前我花时刻深化研讨 Sui Move,并从写一个只要一个方针的程序一向到从头完结了大部分Uniswap V2风格的卡牌组合。我做的一个小项目实在让我意识到具有方针的方针是如此有价值。这个项目只要三个方针,锁、金子和一个空的阻碍物。有一个很根本的模块,你能够幻想它能够创立由钥匙方针具有的金子。然后仅有的取出金子的办法是有一个函数,它需求锁和钥匙,并明显毁掉锁,把金子给你,然后毁掉你的钥匙。这种办法十分风趣,经过这种办法,你能够描绘方针之间的联系,并以十分细粒度的办法描绘权限。

Sui CTO Sam Blackshear :这也正是咱们所考虑的。我喜爱你描绘三个不同方针的嵌套办法,由于这种办法在深化到更深层次时变得愈加强壮。这使得作为程序员更简略结构化,以保证我能够到达第二层,然后能够触及第三层,但我不能直接从第一层到达第三层。我以为这也使得关于从智能合约空间之外的程序员来说更简略了解,比方这些人十分熟悉编写方针树、DOM方针树,假如你是游戏程序员,一切都是场景层次结构,其间有一个人物,他们有一个库存,然后库存里或许有一些小东西。你能够十分直接地在Move中编码这些内容,然后类型体系答应你以十分直接和安全的办法设置这种拜访操控。我以为这是一种十分实践的编程体会,它实在反映了关于现实国际的直觉,或许怎样描绘某些东西,然后直接转化为相关的代码。

6、Move 与 Solidity 的安全性对比

主持人 Sonal Chokshi:顺便说一下,在来到 Wired 杂志之前,我从前在施乐公园呆了6天,这让我想起了一点关于面向方针编程的前史。你方才说的超级风趣,由于他们发明晰 Smalltalk,这是许多今日面向方针结构的前期前身。无论怎样,有没有其他的论题想谈论?

a16z Noah:我只要一个普遍性的问题,但实践上,有没有在 EVM 国际中产生的黑客作业等等,你以为假如运用 Move,由于类型体系的原因,这些作业就不会产生在第一次。

Sui CTO Sam Blackshear :在 EVM 国际中,咱们现已说到了动态分配和重入,Move 经过结构消除了重入,任何与重入相关的问题都会消失,我以为人们做得很好。现在,我以为它防止了反应和检查。

a16z Eddy Lazzarin:可是你能解释一下,为什么 Move 会让这些问题不或许产生吗?

Sui CTO Sam Blackshear :重入,对吧?产生了什么?你写了一些代码,调用了某个函数。问题在于,有人供给了一个你开端没有预料到的函数完结。为了完结这一点,函数调用有必要是动态的。它有必要调用代码,这根本上是由调用者供给的函数指针,或许是进犯者。假如你没有任何动态函数调用,假如你总是知道一个函数调用的方针,那么这根本就不或许产生,就像你调用的任何东西,你或许不知道代码做了什么,可是你知道它是什么,你能够测验它,你能够验证它,一切的东西都在那里。所以从根本上说,别人不或许供给让你的模块行为变得出乎你意料的代码,由于这仅仅一个静态的函数调用。太酷了。

a16z Eddy Lazzarin:因而,这就消除了可重入进犯,这在Solidity开发中一向是一个永恒的问题。

Sui CTO Sam Blackshear :是的,我以为Move根本上消除了智能合约编程中缺失的权限检查问题。有许多时分你在写一些代码时需求显式地传递一切的账户,而且你有必要说,我是否有权做这件事。你写了一个简略的代码,可是却忘掉了检查发送者是否是某个人,或许是否这个人能够拜访它。我以为这些问题常常产生。

所以在Move中,方针一切权信息实践上存储在方针元数据中。这不是程序员能够操控的东西。

当你检查这些方针时,它们会说:“我由这个地址具有”,或许“我由这个其他方针具有”,或许“我是同享方针”或许“我是不可变方针”。程序员不能忘掉检查它的一切者,由于运转时会在履行传入这个Sui 方针的代码之前进行检查。运转时会说:“我看到了这个买卖中心,我看到了他们想要运用的一切方针。我正在检查他们是否实践具有这些方针,或许它们具有一个能够中转具有它们的方针,以便他们有权运用它们。

咱们要求程序员进行的许多权限检查终究都在We Run Time中产生,这些检查是不或许忘掉的。我以为这十分重要,由于最难维护的是程序员没有告诉你的标准。这些标准很简略被忘掉,运用静态剖析或其他办法很难捕捉到它们,由于你总是需求一些人来确定哪些标准很重要。

主持人 Sonal Chokshi:顺便说一句,在远期或近期的长期规划方面,当人们以这种办法更多地协作时,企业规划会产生什么,我以为这将十分风趣,由于它明显是分布式的,不只仅是一个公司,有时人们会协作。但我的意思是,当你考虑现在的老旧办法,你有像开发人员和一切这些最佳实践和一切这些办法。然后你有这些十分不同的思想办法来做作业,咱们还没有彻底在这个国际中将一切这些正式化,这还为时过早,但我十分猎奇这种作业会是什么姿态。

a16z Noah:现在EVM的东西很好用,那么Move的东西怎样样呢?还需求进行哪些严重改变吗?

Sui CTO Sam Blackshear :我以为咱们的东西还处于很前期的阶段。咱们正在开发一个包办理器,能够跨链运用,像Create.io或npm相同。Move的模型体系十分适合这种作业,咱们正在尽力完结这个方针。这个包办理器能够让开发者轻松同享他们的代码,这在Solidity中很难做到,由于在Solidity中,只能经过仿制粘贴的办法来同享代码。

咱们还在开端的时分就专注于正确性东西的研制,咱们有许多这样的东西,但我以为咱们还有许多作业要做,使它们更易用。咱们有一个单元测验结构,咱们能够直接在Move中编写测验。咱们也开发了Move prover,用来辅佐咱们做办法化验证。

Move Prover 的重要性

主持人 Sonal Chokshi:能否简略谈一下办法化验证以及为什么Move Prover很重要?

Sui CTO Sam Blackshear :办法化验证很具有应战性,一般需求专家或许博士来运用。咱们正在尽力将它推广到每一个日常开发者,而不需求专业常识。

现在还不清楚这个方针能否完结,但咱们看到了一些很有前途的项目。比方,最近有人将一个智能合约的一切标准提交到了一张文件中,之后只需求为新函数写标准,这就使得办法化验证变得十分简略。不过,办法化验证还有许多需求改进的当地,包含提高易用性和功能强壮程度。

还有像fuzzer这样的东西,虽然不如办法化验证好用,但关于一些重要的正确性检查十分有协助,特别是当你需求写一些十分杂乱的代码时。咱们也有一些学术界的库在研制这些东西。除此之外,咱们也正在研讨怎样让编写程序变得更简略,比方支撑更多集成开发环境、程序组成和人工智能等。

主持人 Sonal Chokshi:怎样运用Move Prover?假如我想试试它怎样办?

Sui CTO Sam Blackshear :首要你需求拿到你现已测验过的程序。验证不是测验的弥补。然后你能够编写一些很难测验或很难检查的内容。这或许是一些简略的函数前后条件。比方说,假如我的函数输入满意这个条件,那么输出应该满意那个条件。你还能够编写数据不变量,比方你有一个计数器,你想证明它总是在增加,你能够编写一个标准,将其附加到计数器结构中,以检查它是否建立。

然后它会检查一切的函数,并保证这些标准都建立。还有更高档的用法,比方大局存储和变量。你或许想说,这个方针一向只要一个,或许这个方针有两个,然后有三个。以及这个方针的字段和那个方针的字段之间的联系。这些标准很大程度上取决于运用程序。

Move言语能够防止许多根本的过错,但关于你作为程序员来说,总会有一些特定于你的运用程序的正确性条件。标准言语使编写这些条件变得简略,能够在编写代码之后或某些状况下乃至在编写代码之前编写它们,并保证它们在一切或许的程序履行和一切或许的函数调用中都建立。

因而,现在,标准言语与编译器集成,因而您能够在任何这些方法下提取它并测验运用它。它还与构建体系集成。您只需求履行move build -prove,它就会检查这些标准。

a16z Noah:酷!Prover能了解Sui 方针模型和Sui买卖体系吗?比方,我能否证明关于跨买卖的一些或许修正大局状况的内容?

Sui CTO Sam Blackshear :它还没有彻底了解,但它并不需求彻底了解。例如,假如你想证明计数器一向在增加,这是一个Sui方针,可是它不需求彻底了解Sui就能够证明。即便在中心Move的prover中,它也实在考虑方针和大局存储的层面,而不是像买卖这样的概念。因而,今日它确实只能考虑函数和业务的层面,这也能够正常作业。但我想咱们将来或许会在Sui方面做更多的作业,特别是关于父子联系和异构方针映射。

编程言语的办理

主持人 Sonal Chokshi:

咱们能够谈谈编程言语的办理吗?编程言语的演进有着悠久的前史,可是在区块链和加密钱银的布景下,办理论题明显愈加重要,由于有许多其他方面需求考虑,如分权、开源、分布式社区、令牌和经济学财物等,这有时作为鼓励计划的一部分参与其间。

a16z Eddy Lazzarin:特别是由于它们是开源的,能在许多不同的上下文中运用,它们被视为公共物品,但它们不同,需求规划和细节的重视。编程言语应该怎样开展?今日有许多编程言语好像都有不同的办理办法,如我所想到的前两个是C++委员会和WG21委员会,还有一些十分杂乱的称号。

然后像Python,Guido是它的生命之恩人,具有 benevolent dictator for life。那么,您以为什么是现代化的编程言语办理办法?特别是在加密钱银范畴,这是一种共同的状况,由于这些编程言语或许与层一相连,这是一种依靠于编程言语的不同类型的东西,它是一种公共物品,可是它有利益相关者,它有许多的本钱附加值,有许多价值正在传递。或许有一些编程言语的办理方法更适合区块链。我对考虑编程言语应该怎样办理或更好地说,移动怎样开展,考虑到一切巨大的利益相关者和规划言语维护其安全性质的重要性十分感兴趣。

Sui CTO Sam Blackshear :嗯,我不会以为我的见地适用于其他编程言语。但关于Move来说,我有一个十分详细的观念,便是这种跨渠道的愿望。Move 被规划为一种跨渠道言语,其间一些链EDM 的根本功能仍应适用,而且掩盖了智能合约开发能手和Web2新人,极具灵活性。

除了对程序员和渠道规划者的优点外,办理是另一个原因,简直一切区块链言语中的有争议的决议,例如:咱们应该增加这个束缚吗?或许咱们应该支撑这种签名计划吗?或许咱们是否应该具有这个库?咱们企图将其设置在适配器层,即构建在言语办法之上的渠道,而中心言语十分简洁。简洁性是咱们言语的关键规划原则之一,十分不依靠于区块链。

因而,假如咱们要与社区的利益相关者进行争辩,它不会像“咱们应该增加gas束缚”这样的问题。而是像“咱们应该具有电子邮件”这样的问题,这是一个更朴实的规划问题,能够受到来自一个或多个Move渠道的问题或用例的影响,但不太或许朝着对某个利益相关者有利而对其别人晦气的方向开展。到现在为止,这种方法一向运作得很好,但咱们还需求看看未来会产生什么。

根本上,Move言语的办理办法是,开端,Move是在Facebook开发的,没有实在的办理。它仅仅咱们运用它的办法,虽然咱们有这些规划原则。

现在,团队分散了一些,咱们有许多来自不同安排的成员。有些人在咱们这儿,有些人在其它当地。有一些来自学术界、安全社区的第三方奉献者,还有一些Move链的星际币等其他安排。咱们每个星期四都会开会。

咱们会谈论Move的规划问题,咱们十分慎重地扩展言语。简洁性是首要的东西,但咱们会积极地扩展它。

比方,增加这个东西会使在Move之上的这些层次的试验更简略进行。一旦咱们看到这些试验的成果,或许每个人好像都在做相同的作业,那么咱们就会将其移到中心言语中。因而,咱们对办理的答案是:尽或许防止办理,经过让有争议的作业产生在Move之上的层次,以及将简洁性作为中心原则之一,使咱们在仅当每个程序员都需求某个东西时,才增加新的内容。

主持人 Sonal Chokshi:你们作为程序员,关于另一面的作业,比方Noah,你们真的在乎吗?比方说你挑选运用什么东西,怎样参与?你们在意社区或许编程言语的办理吗?仍是只在乎你们获取所需的东西?

a16z Noah:我以为在必定程度上是有联系的,比方你想运用一个被许多人运用的言语,这样你就能够得到更多的奉献者,对吧?你也想要一个不会被扔掉的言语,对吧?那些应该是首要的考虑要素。

可是,我并不在意Python是由独裁统治仍是委员会办理,只要能够达到方针就好。虽然我以为许多人不在意,可是有许多争论表明由委员会办理现已损坏了许多编程言语,我想。

主持人 Sonal Chokshi:是啊,我一向觉得很风趣。

Sui CTO Sam Blackshear :我以为这很重要。我有一些技能上的想象,比方跨渠道的程序和资源,以及这些东西应该有的大致主意。可是这是一个社区项目。许多奉献者为规划的许多方面做出了奉献,我并不是Move或任何其他东西的独裁者。可是,我以为我的人物是策展人,保证每个人都在同一页面,并保证在主意涌现时,咱们根据这些原则进行评估,这些主意能够来自任何人。

可是最重要的是咱们有共同的愿景。每种言语都略有不同。我以为它们固有地反映了它们的用途、创立者和社区的个性等等要素。所以必定不会有一种适用于一切的规则。

主持人 Sonal Chokshi:对,彻底没问题,这很有道理。

Sam怎样进入Move的

所以在咱们完毕前的最终几个问题里,我忽然意识到咱们从来没有听过Sam怎样来到Move的。我首要感兴趣的不只仅是由于我想听你的故事,我信任它很棒,但我更感兴趣的是你是怎样经过考虑去处理问题的。所以你能快速同享一下这个进程吗?当然能够。

Sui CTO Sam Blackshear :我开端作为一名编程言语研讨员来进行职业生涯。我从事静态剖析和程序验证的作业,这意味着我花了许多时刻看实在的程序,寻找缝隙,并测验弄清楚程序员常常犯的过错类型是什么,以及导致这些过错的原因是什么。是言语的根本问题使得某些类型的过错过于简略?是他们运用的结构的问题?仍是仅仅是有关人类心理学,使得某些类型的过错比其他过错更简略被发现?

根本上,在我的博士期间,我花了许多时刻研讨实在的程序,查找缝隙,然后构建这些东西,企图在不运转代码的状况下检查代码并测验在之前捕捉这些过错。而这种作业在一般状况下是无法处理的。你在进行静态剖析时,总是在与停机问题作斗争,但在实践中,你能够无限地挨近完美的成果,而不是在理论中得出平均成果。所以我花了许多时刻做这件事,看了一切经典类型的缝隙,如空引证、缓冲区溢出、安全问题等等。我真的很享受这个作业,可是很难找到这些比方和许多人实在关怀的数据集。

可是在我博士的最终阶段,我在Facebook实习。这是在2013年到2014年左右,他们正在从Web国际向移动国际过渡,而且发现当我将缝隙发布到移动运用中时,它会在那里存在两周,而在Web中,我能够立即修正它。当我参与后,Android上的割裂问题是形成问题最严重的问题,由于这会导致无法修正的缝隙。他们在静态剖析技能上进行了许多投资。他们从我的范畴收购了一个研讨小组,我有时机与他们一同作业,并持续我实在喜爱的作业。可是,与其

完毕于单个程序的缝隙修正,我开端考虑怎样规划一种言语来使这种缝隙更难以产生。我对言语规划和程序安全方面的兴趣越来越大,开端产生一些关于怎样构建更安全的言语的主意。后来,我在2018年参与了Libra项目,这是一个构建根据区块链的全球支付网络的项目,我被征用为编程言语方面的专家。这个项目需求一个新的编程言语,因而我开端着手构建Move言语,并运用我之前的经历来处理一些言语规划上的应战,例如怎样保证Move智能合约的安全性和正确性。

主持人 Sonal Chokshi:所以Libra 也被重命名为diem,这是今日许多人或许知道的。还有一个快速的提示,你的博士论文的实践主题是什么?

Sui CTO Sam Blackshear :我的博士论文首要研讨方针导向的静态剖析。一般,在进行静态剖析时,你会检查整个程序并构建有关程序的现实数据库,然后经过获取该现实数据库来查找缝隙。这种办法很有用,但关于十分大的程序而言,不太简略扩展,由于你有必要检查整个程序并做一切作业。而你或许有一个十分详细的问题,只重视程序中的一个特定部分。例如,假如你正在运转剖析器,而且在CI中陈述缝隙,你真的想要陈述在该pull request中产生的缝隙。对程序中的其余部分不是很关怀。

在我的博士论文中,我研讨了方针导向的静态剖析。这意味着我期望静态剖析的效率能够跟着我关怀的特定特点的杂乱性而扩展,而不是跟着输入程序的巨细而扩展。假如这个特点十分简略,只需求进行简略的推理就能够确定其安全性或缝隙性,我期望它十分快。或许假如这需求检查整个程序进行推理,则相应地会更慢。这是一件有用的作业,由于静态剖析的一个首要问题便是十分慢,特别是当你在运转像巨大的几百万行程序时。我在这个静态剖析子范畴中研讨了一个新的理论,称为笼统解释,旨在使笼统解释更具方针导向性和特点导向性,从而提高效率和精度。

主持人 Sonal Chokshi:十分风趣。你说到你在布景中也对心理学很感兴趣,当你规划你的博士研讨以及现在的作业时,你能够快速介绍一下程序员的心理学吗?由于你没有满意我的猎奇心。

Sui CTO Sam Blackshear :当我在2018年来到Libra时,咱们根本上需求在Libra中建立智能合约,你需求想出这意味着什么。你不能在真空中进行推理,就像言语根本上是问题处理东西相同。所以我看了许多Solidity和智能合约代码。我想知道程序员用这些东西做什么?言语在哪里协助了他们?在哪里阻碍了他们?这个问题的首要结论是根本上一切这些程序都在企图做同一件事。

他们企图议论财物,企图搬运它们,企图界说它们。可是代码编写的办法总是如此直接。这就像一种粗犷的规划练习,你企图议论这件事,可是没有词汇来表达它。这便是心理学的元素,我能够阅览程序并考虑,这个人在想什么?在他们的头脑中,相关于他们实践编写的代码?这个翻译层中的阻碍是什么?言语怎样经过供给正确的笼统来协助他们?这些问题没有客观的答案。这就像我也是程序员,我会怎样编写这段代码?或许我会发现什么直观而什么困惑?

所以根本上,决议创立Move而不是在EVM上构建或运用现有言语是由于,正如咱们之前所说,这种智能合约需求与其他任何东西都十分不同,运用现有言语没有所需的笼统或特征是没有含义的。

假如你在EVM中运用Solidity之类的东西,这是这个范畴的第一次测验。因而,它没有合理地猜测出人们将要测验做什么。所以我以为咱们有一切这些第二移动者的优势。咱们了解人们想做什么,什么作用好,什么作用欠好。咱们应该运用这一点来打造一个新的言语。压服人们需求构建一个新的编程言语是一个风趣的旅程,咱们能够在另一个时刻谈论,可是有人告诉你你应该说不。许多人对Facebook是否有这种测验的愿景持有合理的怀疑态度。

主持人 Sonal Chokshi:风趣的是,感觉这简直是你能够回应的仅有当地,而且乃至更好的是,你们现在能够将其带离Facebook并持续前进。实践上,关于它的诞生和开展来说,这简直是理想的条件。现实上,这关于它们两者都是一个很好的时机。

Sui CTO Sam Blackshear :彻底是意外之喜。

主持人 Sonal Chokshi:那就很好了解了。

给智能合约编程言语开发者的主张

最终一个小问题,假如你们有一个主张想要给那些想要了解智能合约编程言语或现已在这个范畴的人,假如你们能够用两秒钟的时刻给一个主张,你们会说什么?

Sui CTO Sam Blackshear :阅览许多代码,了解代码的意图以及底层代码实践上是怎样做到这一点,它做得好和欠好在哪里。

主持人 Sonal Chokshi:为什么?简略地说?

Sui CTO Sam Blackshear :我以为这是了解言语的最佳办法,它是一个很笼统的东西。

可是,假如你从某个东西开端,仅仅企图弄清楚怎样做到这一点,我以为这是一条更详细的道路,也很简略从中进行归纳。好的。

主持人 Sonal Chokshi:艾迪,你有什么主张吗?

a16z Eddy Lazzarin:这是个好问题。我彻底同意Sam说的。我还想弥补一点,由于咱们还处在前期阶段,人们都喜爱同享一些风趣的东西,比方在区块链上编程有多么张狂。有许多人十分乐意同享,乐意深化探讨。每次我在任何一个大型的社交群或许任何一个论坛上有问题的时分,人们总是乐于和我同享。所以我会主张咱们找到那些你实在喜爱和别人同享你的代码,一同构建开源社区的人们。

a16z Noah:我的主张是,假如你有任何作业流程中常常运用的东西,无论是编译器、测验东西仍是其他任何能够让你的作业变得更轻松的东西,你都应该学习它的作业原理。而且,每当你发现一个bug,就去修正它。成为开源软件的好办理员。

主持人 Sonal Chokshi:你们说得十分好。再次感谢Sam、Noah和Eddie参与本期Web3@ACM的节目。十分感谢你们。

不管怎样,祝你们有美好的一天,再见。感谢您收听 Web3 与 A16Z,您能够在咱们的网站 a16z.com/cryptopod 中找到展现音频的音频剪辑、文字稿和更多资源。

此时快讯

【ZkSync Era预计将在一年后发布Token】金色财经报道,ZkSync Era发布最初不会有代币,因为网络目前在很大程度上仍然是中心化的。由于处于alpha阶段,Matter Labs可以任意升级网络的代码。此外,该公司仍然控制着网络运行的两个核心组件:sequencer和prover。 
根据CEO Gluchowski的介绍,如果想要实现sequencer去中心化化,就需要代币。而他估计,sequencer将在在大约一年的时间内实现去中心化,换言之ZkSync Era将在一年后发币。(The Block)
版权声明:本文收集于互联网,如有侵权请联系站长删除。
转载请注明:a16z对话Move语言之父:为何Move是未来智能合约的重要方向 | 币百度

相关文章