作者 / Blockgeeks

编译 / Aholiab

在之前的文章中,营长从特性、规则和应用的角度,向大家全面介绍了以太坊新的合约语言Vyper的内容,很多朋友表示想看Vyper编程的实例。

在今天的文章中,营长就对Vyper这门新语言做更加深入的分析,并实际展示给大家看看Vyper写成的合约到底是什么样的。

另一方面,由原以太坊联合创始人Charles Hoskinson创办的第三代加密货币Cardano也推出了自己的合约语言Plutus,这门语言随着Cardano的背书,一经推出就呼声很高,经常被认为是可以跟Vyper分庭抗礼。

那么,这两种语言,到底谁才能一统未来智能合约的江湖?

对于区块链开发者来说,保持一颗学习的心态至关重要,这不,刚学会Solidity的你,眼看这门语言就要被Vyper取代了。

之前营长分享了以太坊新编程语言Vyper的介绍,朋友们纷纷表示想看Vyper编写代码的实例。为了满足大家,今天营长就给大家看一下用Vyper编写的代码到底长啥样。

没看过的同学赶紧来补课:V神绞尽脑汁开发Vyper,Python、Solidity要失宠?十分钟,看完这份12岁儿童都能看懂的智能合约指南,你就明白了…

不过另一方面,作为Cardano的主打合约编程语言,Plutus一直被认为是Vyper的核心竞争者

那么,这两门语言到底有什么差别对于开发者来说该如何选择哪个才能代表智能合约的未来

智能合约的未来,Vyper vs. Plutus

在讲Vyper之前,我们先来看看现在以太坊的合约语言Solidity。Solidity是由Gavin Wood、Christian Reitwiessner、Alex Beregszaszi、Yoichi Hirai,以及其他一些以太坊核心开发者开发的。

这门语言在设计之初参考了很多著名的项目和编程理念,如面向对象编程、web编程、汇编等,也覆盖了大量的使用场景。然而,Soldity并不完美,用它写出来的合约在审校上非常困难,原因在于过于多变,造成代码结构十分复杂。

因此,以太坊期望用Vyper来解决这些问题,由于有以太坊的背书,Vyper一直都受到无数开发者的关注。

而另一方面,Plutus作为一个被认为是能与Vyper对标的语言,则显得有点被低估了

作为前以太坊联合创始人,Charles Hoskinson深刻理解第二代加密货币平台(以太坊)的种种弊端,如可扩展性等,因此Plutus在设计上采用了函数式编程方式,针对其前辈Haskell做了大幅升级,语法简洁,也拥有更强大的数学运算能力。

下面,就让我们一起来对比一下这两门语言吧。

毒蛇之信:Vyper

而Vyper语言的设计则正是针对Solidity的这些痛点,先来看看Vyper的官方定位:

Vyper是一门直接、简单的编程语言,对于智能合约的阅读和审计非常友好,可以帮助开发者更好地把注意力放在业务逻辑的实现上。

从这一定位就可以看出,Vyper的使用更简便、高效,尤其在代码审计上较之Solidity的提升很大。这一特性,主要归功于Vyper是基于Python的。而Python这门语言设计的初衷,就是让非技术人员都能编写合约的编程语言,语法结构十分简洁易懂。

不过,虽然Vyper很好地继承了Python简单易懂的特性,但也牺牲了很多Solidity的灵活性,因此,Vyper更适合写一些「小需求」,像写DApp这种大工程就有点捉襟见肘了。

我们不难理解以太坊之所以强推Vyper,主要有以下两点原因:

  1. 以太坊的Sharding(分片技术)及Casper FFG的应用,都是用Vyper写成的;

  2. 以太坊的核心开发者,都背书Vyper,希望它可以作为以太坊智能合约的默认语言。

除此之外,虽然继承了Python的简洁易懂,但Vyper安全方面,避免了一些状态修饰符递归调用和运算符重载造成的gasLimit向量攻击。此外,Vyper还包含大量针对算术运算的溢出检查。这样就杜绝了在合约审计过程中插入的恶意代码。

下面我们就一起来看一个由Vyper写成的智能合约,这个合约使用的是ERC-20标准。代码如下:

在上面代码中:

  • self函数用来在当前类中指定实例变量(instance variables);

  • @public@private则设定当前合约的ABI(Application Binary Interface,应用二进制接口)的能见度和曝光度,并允许外部函数(如其他合约或钱包地址)的调用。

手持函数式秘密武器的Plutus

说完了Vyper,咱们再来介绍介绍本文的另一位主角Plutus。说起Plutus,可能国内的开发者不是特别熟悉,它是由Cardano推出的函数式编程语言,用来编写智能合约。

其实,Cardano推出过两种编程语言,一个是大名鼎鼎的Haskell,另一个则是Plutus。与Vyper一样,在讲Plutus之前,我们也看一下官方给这门语言下的定义:

Plutus是一门纯净的函数式编程语言,用来在Cardano上编写智能合约。其语法类似Haskell,比如在定义数据类型是,开发者可以直接调用类型名称、类型参数,以及构造函数替代(constructor alternative)列表,与Haskell一样,每个构造函数替代都有自己的类型参数。

更多关于Plutus的内容,可以参考官网:

https://cardanodocs.com/technical/plutus/introduction/

正如上面所说,Plutus是一种函数式的编程语言,要理解Plutus的精妙之处,就需要先知道什么是「函数式编程」。

目前,所有的编程语言,都可以被分为两大类:函数式编程(Functional programming)和指令式编程(Imperative programming)。

让我们先来看看「指令式编程」。

指令式编程

简单来说,指令式编程是指,开发者需要把所有计算机需要的运算步骤都写在代码里,每一步都是指令

几乎所有传统的编程语言都是命令式的编程语言,如C++、Java,甚至Solidity。因此有时我们也称指令式编程为「算法编程」(algorithmic Programming)。

举个栗,如果我们在C++上实现一个需求:5+3=?,那么代码应该是:

从上面代码中可以看出,要实现这样一个简单的运算,需要4个步骤,即:

  1. 首先声明一个整数a,为其赋值5;

  2. 再声明一个整数b,为其赋值3;

  3. 声明一个整数c;

  4. 将a与b的值相加,存储到c

因此,这样一个加法运算要花费很多步骤,每个步骤都会对整个程序的状态产生影响,每个步骤也都有自己独立的运行结果。

函数式编程

函数式编程则不然。

它是指将电脑运算视为函数的编程方式。函数编程语言最重要的基础是λ演算(lambda calculus),而且λ演算的函数可以接受函数当作输入(参数)和输出(返回值)。

和指令式编程相比,函数式编程强调函数的计算比指令的执行重要。

举个例:假如现在有一个函数f(x),我们希望用它来计算另一个函数g(x),然后再用结果与第三个函数h(x)进行运算。与指令式编程不同的是,我们不需要一行行的去运行和计算,只需要写一行代码即可

h(g(f(x)))

因此,函数式编程对解决数学类问题更友好也更安全,另外,函数式语言还可以帮助做形式化验证,即从数学的角度审计合约代码到底执行的是什么逻辑。这也是Cardano之所以使用函数式语言来写合约的原因(Haskell也是函数式语言)。

搞清楚了什么是函数式编程,让我们回到正题,接着说说Plutus这门语言

简单来说,我们可以把Plutus看做是一个升级版的Haskell,只是语法更为简洁。与其说它是为编程而生,不如说它是为数学而生。

正因为这一特性,Cardano把Plutus定位在:金融机构、电商、股票期权交易等场景。

说了这么多,让我们实际看一下用Plutus写成的合约长啥样吧,

感兴趣的话可以在这里找到合约的源文件:

https://cardanodocs.com/technical/plutus/examples/

以下Plutus代码展示了加法、乘法和阶乘运算:

从上面代码中,可以看出函数式编程比指令式编程简洁了多少,就跟算术题一样。

写在最后

「币圈一天,人间一年」,区块链的发展一天一个样,作为开发者,了解最新的趋势和技术发展至关重要。

作为以太坊和Cardano最重要的新的编程语言,我们需要有敏锐的嗅觉和不懈的努力去更新自己的知识库。

希望今天的文章能让你对Vyper和Plutus有更深的认识,喜欢就分享给好基友吧~

以太坊联合创始人发明了新语言叫板Vyper,主链之后语言将引领新一轮大战?...相关推荐

  1. 以太坊联合创始人Gavin Wood在Neutrino北京布道区块链3.0

    以太坊联合创始人 Gavin Wood 12月6日晚,北京的冬天异常寒冷,然而在Neutrino北京却挤满了从安徽.杭州.上海.山东等地远道而来的社区铁粉们,只因这是Web3 基金会亚洲巡讲中国唯一的 ...

  2. 避不过裁员大潮,有钱任性也独木难支!以太坊联合创始人Joe Lubin的分布式梦,要破了吗?

    Joe Lubin 不仅是以太坊联合创始人.区块链风险投资公司 Consensys 创始人,他也是一个「有钱且任性」的亿万富翁.但你绝对不会想到,5年前的他,还在为帮助牙买加模特成功「混入音乐界」忙得 ...

  3. 主链 100 强榜单出炉, XRP 竟与比特币比肩; 以太坊每周产生 1248 种新代币 | 数据周榜...

    责编 | Aholiab 出品 | CSDN.amberdata.io.区块链大本营(blockchain_camp) 常言道:链圈一天,人间一年. 加密领域的情况每时每刻都在不停的变化,每时每刻都有 ...

  4. 挪动以太坊:比特币现金的新功能使其成为智能合约竞争者

    华尔街技术专家对比特币现金智能合约和以太坊智能合约的看法 ​​ 智能合约.它被称为Blockchain 2.0.(Blockchain 1.0是现金)它拥有一个新世界的全部承诺,一个新的数字前沿.在一 ...

  5. 瑞士巴塞尔大学授予以太坊联合创始人Vitalik Buterin荣誉博士学位

    点击上方"蓝色字"可关注我们! 暴走时评:11月30日,根据官网信息显示,巴塞尔大学授予以太坊(ETH)联合创始人Vitalik Buterin荣誉博士学位.巴塞尔大学是瑞士最古老 ...

  6. 以太坊Geth通过私钥导入新地址到钱包步骤(3种方法)

    一: 通过Geth客户端导入私钥: Open TextEdit Paste key into TextEdit without any extra characters or quotations S ...

  7. 王峰十问Nervos联合创始人王宁宁:缘何“中国最懂以太坊的人”要走中国公链的自主创新之路?...

    本文旨在传递更多市场信息,不构成任何投资建议. 文 | 王峰十问 出品 | 火星财经APP(ID:hxcj24h) 11月7日晚8点,王峰十问第36期"惊蛰:中国公链如何实现自主创新&quo ...

  8. 以太坊人来人往:已有7位创始成员离开

    作者:易小点 来源:深链Deepchain 在不发生意外的前提下,预计离以太坊网络升级还剩不到10个小时--之前,以太坊已经放了三次鸽子. 以太坊发展分为四个阶段,前沿.家园.大都会与宁静.君士坦丁堡 ...

  9. 以太坊编程涉及那些开发语言?

    智能合约编程语言 Solidity Solidity是第一批的描述智能合约的语言.当前是最流行的语言,因此也有最多的例子,文档,和教程.你应该学习这个,除非你有要学习其它的理由. 你可以使用基于浏览器 ...

最新文章

  1. 【NOIP2016】愤怒的小鸟
  2. 怎样获取网站的域名_搭建一个网站,通常的6大步骤你知道吗?
  3. 经典卷积神经网络--AlexNet的详解
  4. 张红英模型matlab,京师微课 | 北京市特级教师张红英:化学学科核心素养培养课例...
  5. python右键没有idle编辑了_Python文件右键找不到IDLE打开项解决办法
  6. C++课程设计详解-12306的模拟实现
  7. NodeMCU学习(三) : 进入网络世界
  8. Windows Live Writer 在win2003 的安装方法
  9. asp.net core利用DI实现自定义用户系统,脱离ControllerBase.User
  10. java hexits,[Java]浅谈Java的异常体系
  11. char* 与 LPCTSTR转换
  12. 握几次手就能拿下 HTTPS
  13. VB在菜单上增加图标
  14. python获取路径下所有文件_Python 之 glob读取路径下所有文件夹或文件方法
  15. 【bzoj1614】[Usaco2007 Jan]Telephone Lines架设电话线 二分+SPFA
  16. CodeForces - 816A Karen and Morning 解题
  17. 尔雅课堂 美学原理课后练习题库
  18. c语言逻辑运算符组合,C语言的逻辑运算符
  19. jQuery ajax 文件下载
  20. Elasticsearch面试专题总结

热门文章

  1. python取百位数个位数_使用Python把数值形式的金额变成人类可读形式
  2. C#控制台程序生成文件分析
  3. java 线程包_Java 多线程——工具包
  4. django html5 关系,Django REST FrameWork中文教程5:关系和超链接API
  5. python之numpy基础_Python知识普及:Numpy基础操作
  6. 指针,指针:分装一个函数,实现两个数的交换。 指向固定的区域
  7. 什么从什么写短句_结婚纪念日发朋友圈说说 致自己结婚纪念日短句 一句话经典...
  8. Python判断 子集
  9. 12. Leetcode 350. 两个数组的交集 II (数组-分离双指针)
  10. mac安装opencv