Menu

最终的结果是Vyper看起来在逻辑上类似于Solidity,虽然区块链技术还处于初期阶段



Solidity 是由Gavin
Wood博士创建的以太坊上的主要编程语言。它是一种可用于智能合约开发的面向对象的高级编程语言,深受Python和JavaScript语言的影响。这是有意为之,这样开发人员就可以很容易地直接开始开发智能合约。Solidity是一种“图灵完备”语言,这意味着它拥有开发复杂用例的所有能力。相比之下,btc的编程语言Scrypt在设计上不是“图灵完备”的。对于智能合约来说,Solidity是最流行的编程语言,每个开发人员如果想要开始开发智能合约,都应该研究它。Vyper是以太坊团队创建的另一种编程语言,它在以太坊虚拟机(“EVM”)上运行。它的设计目的是简化智能合约的编写过程,同时使其更易于阅读。它与Solidity的关键区别是Vyper不包含一些面向对象的功能,这使得Vyper更安全,因为开发人员犯错误和引入bug的空间更小。

Vyper代码和句法差异

Vyper的构建尽可能与Python类似,同时努力实现安全性和简单性的目标,因此语言的整体感觉是相同的,尽管有许多不同需要注意。

虽然Python脚本执行为

python file_name.py

使用vyper编译脚本

vyper file_name.vy

状态变量是永久存储在合约存储中的值,可以是任何类型,例如:

exampleStateVariable:int256。

Vyper合约包含的第一件事是合约存储字段,例如代币余额映射:

balance: public(wei_value[address])

这是一个定义键和相应值的状态变量。

Vyper映射基本上是初始化的哈希表,如上所示,所以“每个可能的密钥都存在,并映射到一个字节表示全为零的值:一个类型的默认值。”

关键数据不存储在映射中,而只是存储在keccak256哈希中,以查找其值。

在定义balance时,给出了类型public(),然后是映射语法:首先给出wei_value的值类型,然后是方括号中的键,这类似于Python对数组的处理。

你会注意到Vyper在定义名称时使用冒号而不是Python的等号,尽管Python
3.6包含与变量注释相同的语法:

context = {} # empty dictionary context["a"]: 2 # annotate dictionary variable

冒号语法用于变量注释,冒号用作赋值运算符,仅指定类型注释。Vyper使用此语法进行真值赋值。

Vyper只有两种整数类型:uint256和int128,与Solidity的uint8到uint256的步长为8,而对于int8到int256则相同(这意味着int类型有64个不同的关键字)
)。

对大多数运算符而言,Vyper与Python的语法几乎相同,包括:

true and false booleans;not, and, or, ==, and != operators;<, <=, ==, !=, >=, and > comparisons;+, -, *, /, **, and % arithmetic operators (only for int128)

以及一些类似的内置函数:

 len to return the length of an int; floor to round a decimal down to nearest int; ceil to round a decimal up to the nearest int

还有一些新的:

sha3 to return the sha3 hash as bytes 32;concat to concatenate multiple inputs;slice(x, start=_start, len=_len) to return slice of _len starting at _start

Vyper中的列表使用格式_name:_ValueType [_Integer]声明,而设置值和返回语句的语法与Python相同。

例如:

lst: int128[3] # define a list lst = [1, 2, 3] # set the values lst[2] = 5 # set a value by index return lst[0] # returns 1

结构是你自己定义的类型,哪些变量组,并使用struct.argname访问,因此(有点类似于Python词典):

struct: { # define the structarg1: int128, arg2: decimal} struct.arg1 = 1 #access arg1 in struct

方法(Vyper中的契约方法)在Python和Vyper中以相同的方式定义:

def method():do_something()

除了Python提供的功能之外,Vyper还包括特定于以太网的装饰器,例如@payable和@assert:前者用于使合约能够进行交易,后者用于表示布尔表达式:

注意def function_name(arg1,arg2,...,argx) -> output:syntax用于定义函数的语法。与Python不同,Vyper在->之后明确定义def行中的输出类型。

构造函数遵循与Python相同的约定,并在区块链上实例化给定的合约和参数。init初始化程序并且只执行一次。例如:

@public def __init__(_name: bytes32, _decimals: uint256, _initialSupply: uint256):self.name = _name self.decimals = _decimals self.totalSupply = uint256_mul(_initialSupply, uint256_exp(convert(5, 'uint256'), _decimals))

与在Python中一样,self用于断言实例变量。上面的函数使用@public装饰器进行修饰,以使其具有公共可见性,并允许外部实体调用它,与默认值相反这是私有的。

装饰器@constant用于装饰只读取状态的方法,而@payable使任何方法都可以通过付款来调用。

你可以在索引结构中使用__log__记录事件,如下所示:

payment: __log__({amount: uint256, param2: indexed}) tot_payment: uint256 @public def pay():self.tot_payment += msg.value log.payment(msg.value, msg.sender)

现在你已经构建了一个区块链并了解了比特币的动态,现在是时候深入研究以太坊了。你了解区块链和工作证明如何在点对点网络中实现分布式、拜占庭式的容错一致性。但是,支付网络只是你可以在这样的区块链上运行的一个应用之一。2013年,以太坊的创始人Vitalik
Buterin问道:
使用区块链来实现去中心化的计算机会怎么样?在Ethereum,你向矿工付费,让他们在这个分布式虚拟机上执行你的程序。这代表你可以使用图灵完备的编程语言(与比特币脚本不同)执行任意的计算。当然,这包括与支付相关的应用,因此Ethereum启用并催生了创新的一套超越比特币的功能。这就引出了智能合约——在虚拟机上运行的程序名称。智能合约可以根据程序的执行直接与区块链的加密货币进行交互。换句话说,你可以创建自动执行的金融合约。这是一个疯狂的想法,一旦你接受了这个编程模型,你就可以做各种想做的事情。Ethereum
催生了ico的浪潮和构建在区块链之上的开发人员。它是仅次于比特币的第二大加密货币,拥有超过10倍的下一代最流行平台的开发人员,最强大的开发团队,最成熟的工具,以及基于它的大多数ICO和项目。它还拥有最多的行业支持。如果你正在进行区块链开发,那么你将Ethereum智能合约编写代码。(即使你不是,了解这个领域的情况也是很重要的。)首先,我们对Ethereum
进行更深层次的说明:以太坊背后的理念也催生了加密经济学领域的创新浪潮。你应该深入了解DAO的思想,以及它们所暗示的所有科幻狂热梦想。好了,幻想已经够多了,让我们深入研究一下技术。以下是Preethi
Kasireddy对Ethereum yellow
paper及其内部结构的一个很好的概述。Ethereum使用的是账户模型,而不是比特币的UTXO模型——你很快就会看到为什么这样更容易编写智能合约。与任何技术一样,了解以太坊的最佳方式是构建几个小项目。Ethereum的主要编程语言是Solidity,这是一种静态类型的JavaScript-esque语言。这是一种有很多缺点的语言,它也有很多设计上的问题。一旦Viper等更强大的语言准备好投入生产,它们可能会取代Solidity,但目前Solidity是智能合约的编程通用语言。它基本上是Ethereum的JavaScript,所以你需要学习它(和它的缺陷)。首次接触Solidity语言开发时,我建议你通读所有的cryptozombie教程。这是一个令人愉快和高质量的Codecademy-esque风格的教程,会教你Solidity的基础编程。现在,你的求知欲已经被激起,是时候着手自己尝试了。Ethereum的“hello
world”可以创建一个兼容ERC-20的令牌。我建议将本指南作为指导你完成这个过程的第一个教程Remix是一个浏览器内的Solidity编辑器和编译器——它基本上是Ethereum开发的训练轮,所以我建议把剩下的练习都在Remix内完成。但是,设置一个本地区块链并了解Ethereum工具也是值得的。本教程很好地介绍了一个点到点的区块链堆栈,并解释了其中的各个部分。

C#,一种面向对象的语言,使开发人员能够在全球至少有2M开发人员的.NET
Framework上构建健壮的应用程序。C#是在2000年开发的。自成立以来,它已成为一种流行的编程语言,用于构建功能强大的跨平台代码,可在Windows,Mac,Linux和Android等多种操作系统上运行。用C#编写的区块链项目包括:

虽然区块链技术还处于初期阶段,但是这项革命性的技术已经席卷全球,在最近几年经历了前所未见的蓬勃发展。

比较Python,Vyper和Solidity

在这里,我们介绍了Vyper高级的“原因”——为我们分析和编写Vyper代码提供了一个重点,包括智能合约。

Vyper不包含大多数程序员熟悉的许多构造:类继承,函数重载,运算符重载和递归。对于图灵完备语言而言,这些都不是技术上必需的,并且它们通过增加复杂性来避免安全风险。由于这种复杂性,这些结构将使得智能合约由非专业人员进行审计时难以理解,如在Solidity合约中所见。

不常见结构是修饰符(这使得编写误导性代码变得太容易),内联汇编(这会使Ctrl+F中断)和二进制固定点(二进制固定点通常需要近似值)。

用Vyper开发者自己的话说,Vyper“如果为了提高安全性的目标,它会故意禁止一些事情或者让事情变得更难。”

因此,Vyper并不是Solidity的全部替代品,而是一种在安全性至关重要的地方使用的优秀语言,例如用于处理患者健康元数据的智能合约或用于去中心化AI的模型渐变。

如果你想学习区块链并在Blockchain
Technologies建立职业生涯,那么请查看我们分享的一些以太坊、比特币、EOS、Fabric等区块链相关的交互式在线编程实战教程:

图片 1

编写Vyper合约

现在,让我们写几个简单的智能合约。以下代码段允许合约接收NFT并能够针对该代币发送。

@public def safeTransferFrom(_from: address, _to: address, _tokenId: uint256):self._validateTransferFrom(_from, _to, _tokenId, msg.sender) self._doTransfer(_from, _to, _tokenId) if(_to.codesize > 0):returnValue: bytes[4] = raw_call(_to, 'xf0xb9xe5xba', outsize=4, gas=msg.gas)assert returnValue == 'xf0xb9xe5xba'

下面演示了@public装饰器,定义了一个具有明确给定类型的单个参数的函数,以及一个简单的代码体,使用断言语句来验证用户是否有权作为“委托投票”程序的一部分进行投票:

# Give a voter the right to vote on this ballot # This may only be called by the chairperson @public def give_right_to_vote(voter: address):assert msg.sender == self.chairperson # throw if sender is not chairperson assert not self.voters[voter].voted # throw if voter has already voted assert self.voters[voter].weight == 0 # throw if voter's voting weight isn't 0self.voters[voter].weight = 1 self.voter_count += 1

在讨论了语法和逻辑区别之后,代码并没有太令人生畏。vyper.online提供“使用委派投票”程序的完整源代码,使用结构选民和提案,以及以下恰当命名的函数:

def delegated(addr: address) -> bool def directly_voted(addr: address) -> bool def __init__(_proposalNames: bytes32[2]) def give_right_to_vote(voter: address) def forward_weight(delegate_with_weight_to_forward: address) def delegate(to: address) def vote(proposal: int128) def winning_proposal() -> int128 def winner_name() -> bytes32

与任何编程语言一样,事先规划出主要结构(在本例中为函数契约)会使编程变得更加容易。要记住Vyper的主要区别是缺乏OOP范例。在当前的开发阶段,你还无法进行外部代码调用。

允许外部代码调用的注意事项可以在以下开发建议中看到:

# 扩展合约A:def foo(): constant def bar(): modifying # This contract contract B: a: A def baz(): a.foo

要继续编写代码,请转到vyper.online,并在“源代码”选项卡下编写代码示例,并在准备好后单击“编译”。Vyper实现和测试执行最常用的客户端(虽然在pre-alpha中)是Py-EVM,最初由Vitalik自己开发,允许用户添加操作码或修改现有操作码而无需更改核心库,从而实现更大的模块化和可扩展性比典型的客户端。

要获得Py-EVM,只需使用pip install py-evm==0.2.0a16

SQL,结构化查询语言或“续集”是IBM开发的一种编程语言,用于与存储,查询和操作数据的数据库进行通信。目前估计有700万用户使用SQL。流行的数据库,如MySQL,PostgreSQL,SQL
Server,DB2,Oracle等都使用SQL来开发应用程序。包含SQL的区块链项目是:Aergo,由Blocko根据其专有的Coinstack技术开发的企业级嵌入式解决方案利用SQL智能合约。Aergo链具有基于SQL的智能合约平台,允许企业实体在商业业务环境中创建和执行高级智能合约。

图片 2

部署Vyper合约

虽然Py-EVM目前处于pre-alpha状态并且可能难以启动和运行,但有两种更简单的替代方法可以将Vyper合约部署到公共testnet

  • 1)将从vyper.online生成的字节码粘贴到Mist或geth中。
  • 2)使用myetherwallet合约菜单在当前浏览器中部署。
  • 3)在未来,Vyper将与populus集成,允许你轻松部署Vyper合约。

为简单起见,我们将使用选项和Mist(基于geth的fresh用户界面而不是基于终端的geth)部署合约。由于Vyper编译为与Solidity相同的字节码,因此我们不需要任何特定于Vyper的客户端,并且可以遵循这些稍微迂回的步骤:

  • 1.转到vyper.online并在预先填写的投票“源代码”上单击“编译”。
  • 2.复制“字节码”选项卡下的所有内容。
  • 3.如果你还没有为你的操作系统安装Mist。
  • 4.允许节点下载和同步。
  • 5.在雾设置中选择“使用测试网络”。
  • 6.创建一个密码(记住它……)。
  • 7.输入合约。
  • 8.在Mist界面中选择“Contracts”。
  • 9.选择“部署新合约”。
  • 10.转到“合约字节代码”选项卡。
  • 11.粘贴你从vyper.online复制的字节码。

  • 1.选择“DEPLOY”并输入之前的密码。
  • 2.确认已部署Vyper合约。
  • 3.转到Mist中的“Wallets”选项卡。
  • 4.向下滚动到“最新交易”。
  • 5.你应该看到我们刚刚部署的合约!

处于“创建合约”状态,因为它没有被挖掘和验证。

Golang,一种开源通用编程语言,松散地基于C编程语言的语法,Golang易于开发人员学习,也可供测试人员理解。目前,联盟网络使用的Golang语言估计有800,000多名开发人员

图片 3

Vyper是一种全新的以太坊开发语言,主要用于商用区块链,对区块链开发者来说可以提高安全性。

Stratis是一个由Microsoft支持的区块链即服务提供商,允许企业构建自己的私有区块链系统。NEO是用C#编写的,但它也支持各种编程语言,如Javascript,Java,Python和Go。

——结构化查询语言(Structured Query
Language)或“Sequel”,是IBM开发的一种编程语言,用于与存储、查询和处理数据的数据库进行沟通。如今SQL约拥有700万名开发者。MySQL、PostgreSQL、SQL
Server、DB2、Oracle等主流数据库都使用SQL来开发应用程序。使用SQL的区块链项目有:

任何针对EVM的代码都必须是超高效的,以最大限度地减少智能合约执行所需的gas,因为与低效代码的合约实际上需要更多的以太执行,并且可能很快变得非常昂贵,特别是在微处理器等用例中交易。最终的结果是Vyper看起来在逻辑上类似于Solidity,在语法上类似于Python,但没有很多面向对象编程范例——可能需要一个新的范式定义用于交易编程。

以下是不同语言和项目的简要概述,这些语言和项目利用它们作为对那些希望深入了解该行业的人们的基本理解和基础。

HyperLedger Fabric ——大部分链代码(用HyperLedger
Fabrics构建的智能合约)都是用Golang编写的。他们还为区块链应用开发提供了一个Java
SDK。

现在学习这些逻辑和语法上的差异将有助于你成为世界级的Vyper开发人员,因为截至2018年6月,Vyper仍处于v0.1.0-beta.1版本!

C++,一种通用编程语言,估计有440万开发人员,它最大的优势在于能够扩展资源密集型应用程序并使其能够顺利运行,从而使其成为一种非常流行的3D游戏编程语言。使用C
++的区块链项目包括:

图片 4

结论

本指南提供了对Vyper的逻辑和语法介绍,允许我们开始编程和部署合约。根据本指南的知识,你应该能够为Vyper及其文档的开发做出贡献,并继续通过vyper.online编码来学习。

同样,Vyper并不是要取代Solidity,但是正如一项研究发现超过34,000份易受攻击的合约,在对更强安全性的需求比以往任何时候都更大,这使得Vyper成为以太坊的重要未来。

======================================================================

分享一些以太坊、EOS、比特币等区块链相关的交互式在线编程实战教程:

  • java以太坊开发教程,主要是针对java和android程序员进行区块链以太坊开发的web3j详解。
  • python以太坊,主要是针对python工程师使用web3.py进行区块链以太坊开发的详解。
  • php以太坊,主要是介绍使用php进行智能合约开发交互,进行账号创建、交易、转账、代币开发以及过滤器和交易等内容。
  • 以太坊入门教程,主要介绍智能合约与dapp应用开发,适合入门。
  • 以太坊开发进阶教程,主要是介绍使用node.js、mongodb、区块链、ipfs实现去中心化电商DApp实战,适合进阶。
  • C#以太坊,主要讲解如何使用C#开发基于.Net的以太坊应用,包括账户管理、状态与交易、智能合约开发与交互、过滤器和交易等。
  • EOS教程,本课程帮助你快速入门EOS区块链去中心化应用的开发,内容涵盖EOS工具链、账户与钱包、发行代币、智能合约开发与部署、使用代码与智能合约交互等核心知识点,最后综合运用各知识点完成一个便签DApp的开发。
  • java比特币开发教程,本课程面向初学者,内容即涵盖比特币的核心概念,例如区块链存储、去中心化共识机制、密钥与脚本、交易与UTXO等,同时也详细讲解如何在Java代码中集成比特币支持功能,例如创建地址、管理钱包、构造裸交易等,是Java工程师不可多得的比特币开发学习课程。
  • php比特币开发教程,本课程面向初学者,内容即涵盖比特币的核心概念,例如区块链存储、去中心化共识机制、密钥与脚本、交易与UTXO等,同时也详细讲解如何在Php代码中集成比特币支持功能,例如创建地址、管理钱包、构造裸交易等,是Php工程师不可多得的比特币开发学习课程。
  • tendermint区块链开发详解,本课程适合希望使用tendermint进行区块链开发的工程师,课程内容即包括tendermint应用开发模型中的核心概念,例如ABCI接口、默克尔树、多版本状态库等,也包括代币发行等丰富的实操代码,是go语言工程师快速入门区块链开发的最佳选择。

汇智网原创翻译,转载请标明出处。这里是原文了解新的以太坊开发语言Vyper

EOS,C++是EOS的主要编程语言,因为它可以灵活地在区块链上运行大量应用程序。EOS还支持任何编译成WebAssembly(WASM)的语言。bitcoin,比特币核心的网络是用C++编程的。

这股淘金热可能会让部分开发者好奇他们是否拥有进入这个行业的实力,以及这个新行业中哪种编程语言最受欢迎。几乎所有受欢迎的编程语言在区块链行业中都有用到,但是开发者必须考虑自己要进行哪种类型的开发,因为不同的编程语言适用于不同的区块链项目和应用。

Vyper是一种通用的实验性编程语言,可编译为EVM字节码,Solidity也是如此。但是,Vyper旨在大规模简化流程,以便创建更易于理解的智能合约,这些合约对所有相关方更加透明,并且被攻击的点更少。

我们目前正处于一个新兴的区块链开发行业中。区块链技术处于初期阶段,然而这种颠覆性技术已经成功地风靡全球,并且最近经历了一场与众不同的繁荣。由于许多资金充足的项目现在急于建立区块链网络并在其上部署分散的应用程序,因此缺乏能力强大的区块链开发人员。随着数十亿人进入这一领域,区块链开发商的薪酬和需求不断升级,项目互相竞标,以吸引留在市场上的最佳区块链人才。这种淘金热可能让一些开发人员怀疑他们是否具备了进入这个行业所需要的东西,特别是在这个新行业中最受追捧的编程语言。几乎所有流行的编程语言都在区块链行业中使用,但是开发人员必须考虑他们希望采用何种类型的开发,因为不同的语言用于某些区块链项目和应用程序。

如果您对区块链行业感兴趣,但愿这篇文章让您基本了解了从哪里开始以及什么需要深入研究。毋庸置疑,随着技术的进步和现实应用的出现,这个行业将在未来十几年内迎来爆炸式的发展。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

相关文章

网站地图xml地图