imtoken钱包官方网站|了解Vyper:一种新的以太坊(Ethereum)谈话
发布日期:2023-05-31 15:32    点击次数:142


对于Vyper的全面指南,这是一种新的以太坊谈话

Vyper的是一个通用的,推行性的编程谈话,编译成EVM(复仇造谣机)字节码一样,密实度。然则,Vyper旨在大规模简化历程,以便创建更易于透露的智能合约,这些合同对通盘相关方愈加透明,何况报复的进口点更少。

任何针对EVM的代码皆必须是超高效的,以最大限度地减少智能合约实施所需的气体,因为与低效代码的合同实质上需要更多的以太实施,何况可能很快变得绝顶崇高,尤其是在微处理器等用例中往复。最终的后果是Vyper看起来在逻辑上肖似于Solidity,在语法上肖似于Python,然则莫得许多面向对象的编程轨范 - 可能需要为事务编程提供新的轨范界说。

面前学习这些逻辑和语法上的互异将有助于您成为全国级的Vyper拓荒东说念主员,因为完毕2023年6月,Vyper仍处于v0.1.0-beta.1版块!

了解Vyper

0.相比Python,Vyper和Solidity

在这里,咱们先容了Vyper的高档“原因” - 为咱们分析和编写Vyper代码提供了一个要点,包括智能合约。

关键更正1:简便

Vyper不包含大宽绰表率员熟练的许多构造:类袭取,函数重载,运算符重载和递归。对于图灵完备谈话而言,这些皆不是时代上必需的,何况它们通过加多复杂性来代表安全风险。由于这种复杂性,这些结构将使得智能合约难以透露并由非专科东说念主员进行审计,如在Solidity合同中所见。

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

关键更正2:安全

用Vyper拓荒者我方的话说,Vyper“如若为了晋升安全性的策动,它会罕见不容事情或使事情变得更难。”

因此,Vyper并不是Solidity的沿路替代品,而是一种在安全性至关迫切的场所使用的优秀谈话,举例用于处理患者健康元数据的智能合约或用于散布 AI的模子渐变。

Vyper代码和语法互异

Vyper的构建尽可能与Python肖似,同期奋发完结安全性和简便性的策动,因此谈话的全体嗅觉是疏导的,尽管有许多不同之处需要宝贵。

实施文献

天然Python剧本被实施为

python file_name 。PY

,使用编译vyper剧本

vyper file_name 。vy 。

景象变量

景象变量是弥远存储在合同存储中的值,不错是任何类型,举例:

exampleStateVariable:int256 。

制图

Vyper合约最先包含的是合同存储字段imtoken钱包官方网站,举例令牌余额映射:

均衡:众人(wei_value [地址])

这是一个界说键和相应值的景象变量。

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

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

在界说balance时,给出了类型public(),然后是映射语法:最先给出wei_value的值类型,然后是方括号中的键(地址) - 肖似于Python对数组的处理。

界说

您会宝贵到Vyper在界说称呼(如balance)时使用冒号而不是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的语法实在疏导,包括:

真与假的布尔值; 不,和,或,==,和 !=运营商; <,<= ,==,!=,> =,和 >相比; 和 +,- ,*,/,**,和 %算术运算符(仅用于 int128)

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

 len(x)复返int的长度; floor(x)将极少舍入到最接近的int ; 和 ceil(x)将十进制数舍入到最近的int

还有一些新的:

sha3(x)将sha3 哈希算作字节32 复返 ; concat(x,...)联络多个输入; slice(x,start = _start,len = _len)从_start着手复返 _len的切片    

清单

Vyper中的列表使用步地_name:_ValueType [_Integer ]声明,而缔造值和复返语句的语法与Py = thon疏导。

举例:

lst:int128 [ 3 ] #define list lst = [ 1,2,3 ] #set values lst [2] = 5#通过索引缔造一个值复返lst [0]#复返1

结构

结构是您界说的类型,组变量,并使用struct.argname看望imtoken钱包官方网站,因此(有点肖似于Python辞书):

struct:{ #define struct

arg1:int128,arg2:decimal

结构。arg1 =  1  #access arg1 in struct

界说瓜代

瓜代(Vyper中的条约瓜代)在Python和Vyper中以疏导的方式界说:

def  瓜代():

作念一丝事()

除了Python提供的功能除外,Vyper还包括以太网特定的守密器,举例@payable和@asser t - 前者用于使合同大约进行事务,后者用于示意布尔抒发式:

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

构造函数

构造函数解雇与Python疏导的商定,并在区块链上实例化给定的条约和参数。init启动化表率何况只实施一次。举例:

@public  def  __init __(_ name:bytes32,_decimals:uint256,_initialSupply:uint256):

自我。name = _name self 。极少= _decimals 自我。totalSupply = uint256_mul(_initialSupply,uint256_exp(convert(5,'uint256'),_ decimals))

与在Python中一样,self用于断言实例变量。上头的函数使用@public守密器进行修饰,以使其具有众人可见性,并允许外部实体调用它(与默许值相悖 - 或者不详守密器 - 这是独到的)。

守密器@constant用于守密只读取景象的瓜代,而@payable使任何瓜代皆不错通过付款来调用。

行为

您不错在索引结构中使用__log__纪录事件,如下所示:

付款:__ log __({amount:uint256,param2:indexed(address)})tot_payment:uint256 @public  def  pay():

自我。tot_payment + = msg 。价值纪录。付款(MSG 。值,味精。发送者)

写Vyper合同

面前,让咱们写一些简便的智能合约。以下代码段允许合同继承NFT(不行替代的令牌)并大约针对该令牌发送。

@public  def  safeTransferFrom(_from:address,_to:address,_tokenId:uint256):

自我。_validateTransferFrom(_from,_to,_tokenId,味精。发送方)自。_doTransfer(_from,_to,_tokenId)如若(_to 。 codesize >  0):

的returnValue:字节 [ 4 ] = raw_call(_to,' xf0xb9xe5xba ',特大= 4,气体= MSG 。气体)

断言 returnValue ==  ' xf0xb9xe5xba '

底下演示了@public守密器,界说了一个具有显式赋予类型的单个参数的函数,以及一个简便的代码体,它使用assert语句考证用户是否有权算作“使用寄托投票”表率的一部分进行投票:

#给选民投票的权力#这可能只可由主席@public def give_right_to_vote(选民:地址)调用:

断言味精。发件东说念主==  自我。主席#throw如若发件东说念主不是主席断言不是self.voters [voter] .voted#throw如若选民如故投票断言self.voters [选民] .weight == 0#throw如若选民的投票权重不是0

自我。选民[选民] 。分量=  1  自我。voter_count + =  1

在征询了语法和逻辑分袂之后,代码并不太令东说念主生畏。vyper.online提供“使用寄托投票”表率的无缺源代码,使用结构选民和提案,以及以下顺应定名的函数:

DEF  录用(ADDR:地址)- >  BOOL  DEF  directly_voted(ADDR:地址)- >  BOOL  DEF  __init__(_proposalNames:bytes32 [ 2 ])DEF  give_right_to_vote(选举东说念主:地址)DEF  forward_weight(delegate_with_weight_to_forward:地址)DEF  录用(到:地址)def  vote(提议:int128)def  winner_proposal()- > int128 def  winner_name()- > bytes32

与任何编程谈话一样,事前推敲出主要结构(在本例中为函数条约)会使编程变得愈加容易。要记着Vyper的主要分袂是衰败OOP轨范。在面前的拓荒阶段,您还无法进行外部代码调用。

允许外部代码调用的宝贵事项不错在以下拓荒提议中看到:

#外部合同A:

def  foo():constant def  bar():修改#这个合同合同B:a:一个def baz():a.foo()a.bar()

合同B号召合同A,包括A内的瓜代imtoken钱包官方网站,在最简便的例子中可能。

运行Vyper

要接续编写代码,请转到vyper.online,并在“源代码”选项卡下编写代码示例,并在准备好后单击“编译”。Vyper完结和测试实施最常用的客户端(天然在pre-alpha中)是Py-EVM,领先由Vitalik我方拓荒,允许用户在不改革中枢库的情况下添加操作码或修改现存操作码,从而完结更大的模块化和可膨胀性比典型的客户端。

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

3A。部署Vyper合同

天然Py-EVM面前处于pre-alpha景象何况可能难以启动和运行,但有两种更简便的替代瓜代不错将Vyper合同部署到众人testnet(以及奖励):

1)将从vyper.online生成的字节码粘贴到Mist或geth中

2)使用myetherwallet合约菜单在面前浏览器中部署3)(行将推出)

在未来,Vyper将与 populus 集成,允许您猖厥部署Vyper合同

为简便起见,咱们将使用选项(1)和Mist(基于geth而不是基于末端的geth的新UI)来部署合同。由于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.  你应该看到咱们刚刚部署的合同!

* 天然在“创建合同”景象,因为它莫得被挖掘和考证

论断

本指南提供了对Vyper的逻辑和语法先容,允许咱们着手编程和部署合同。把柄本指南的常识,您应该大约为Vyper过火文档的拓荒作念出孝敬,并接续通过vyper.online编码来学习。

不异,Vyper并不料味着取代Solidity,但正如一项推敲发现卓越34,000份易受报复的合同,在这个空间中对更强安全性的需求比以往任何期间皆更大,这使得Vyper成为以太坊的迫切未来

进一步阅读和蹊径图

由于Vyper仍在进行推行拓荒,官方文档和GitHub是最全面的资源,以下提供的价值:

01. Vyper的社区Gitter

02. Vyper用具和资源imtoken钱包官方网站

03. Vyper上的 “ 以太坊书”页面

04. 推敲:“大规模发现辩论,荡子和自裁合同”

05. “循序渐进指南:以太坊薄雾钱包初学”

07. 测试和部署Vyper合同

08.“ 树立你的第一个无缺的以太坊智能合约 - 教程” [扩充  符合Vyper的门径绝顶简便]

Vyper的1.0版拓荒门径侧重于接口(以及里面和外部调用的更正等),它们界说了敛迹,因此您不错与完结该接口的任何对象进行通讯。接口维持升级智能合约的替代措置决策,因此它们不是基本功能所必需的,您不错在Vyper中着手编码,尽管谈话不无缺。

版块1.0的拓荒蹊径图,从Vyper的gitter中检索和剪辑:

01.两种类型的文献:接口(每个文献一个接口)和合同(一个合同每个文献)。

02.您不错在接口文献中界说肖似ERC721Metadata的接口合同文献。

03.接口文献是与Ethereum ABI整个兼容的一双一。

04.从Solidity到Vyper接口编写一个翻译器。

该提案指出,资金“税”将在今年5月至11月之间应用。它每天可能会抽出多达112.5个BCH来为开发人员提供资金,这意味着相当于不到700万美元的资金最终将支持以比特币现金为基础的开发商。

据称,由于佩特罗得到委内瑞拉石油储备的支持,根据政府的说法,Redditor指出0.5 PTR的价值为30美元,因为一个佩特罗的价格相当于一桶原油。

05.树立通盘最终ERC接口的库,即使你必须手动制作他们。

06.Import接口文献到合同的接口。

07.接口是一种守密地址的类型。

08.接口不错袭取其他接口。

09.仔细推敲ERC-165的界面ID,并重现上头给出的例子

ERC-721这波及接口若何袭取其他接口。

10.接口不错具有可选功能。(龙套坚固。)

11.合同不错完结接口。

12.完结接口但未完结所需的接口的合同功能是一个失实。

13.完结接口但未完结可选的合同

功能既不是ERROR也不是劝诫。

14.将@public重定名为@external以匹配Solidity。

15.引入一个新的函数守密器@internal,它允许调用一个函数里面。

16.再行引入面前用于外部调用的函数调用语法(删除门径14)但它适用于里面呼唤。

17.像这么完结外部调用:外部跳转调用表 - > LOADCALLDATA unpack - >将函数参数添加到堆栈 - >调用里面函数 - >实施函数东西。

18.完结这么的里面调用:将函数参数添加到堆栈 - > 调用里面功能 - >作念功能的东西。

从咱们编写的代码中不错看出imtoken钱包官方网站,Vyper在拓荒过程中取得了很大的逾越  ,何况唯有一些主要的更新(剖释为上头的小门径)  直到1.0发布!