本篇文章给大家谈谈以太坊的各种协议,以及以太坊最新协议对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
是一种旨在以信息化方式传播、验证或执行合同的计算机协议。
网络中的每个节点(电脑)都用来运行以太坊虚拟机(EthereumVirtualMachine,EVM)。可以把EVM想象成是一个操作系统,它能够理解并且执行用以太坊上特定的编程语言编写的软件。由EVM所执行的软件或者应用就叫作“智能合约”。
智能合约允许在没有第三方的情况下进行可信交易,这些交易可追踪且不可逆转。这是因为一个合约写好以后,就无法再被编辑或者修改。因此,你可以保证无论合约的内容是什么,它都会无条件执行。智能合约提供的是一种优于传统合同方法的安全,并减少与合同相关的其他交易成本。要在以太坊系统上运行智能合约,你需要付费。但是,并不是使用美元、英镑等常规货币进行支付。而是使用以太坊燃料—gas。

在以太坊中,采用了一种名为Recursive Length Prefix(RLP)的方法对交易、账号、合约等基础的数据结构进行序列化处理,从而实现对链上数据的网络传输和持久化存储。RLP作为最为底层的编码方法,其重要性是不言而喻。因此,网上介绍RLP的文章也不少,但是由于RLP是二进制编码,又涉及到嵌套结构,造成编码过程的可读性较差,在学习中过程中,也一直没有找到完整的、易于理解的说明,总是绕在各种规则之中,且不能"自拔",着实有点无奈。所以,在本文中,采用图形化的解释和举例的方法,帮助大家理解RLP嵌套等特点、编解码过程等。
和其他的序列化协议不同,RLP只支持两种数据类型:
1)byte数组,可以是二进制数组,当然也可以是字符串;
2)byte数组的数组,也就是列表。并支持列表内的嵌套。
对于其他的数据类型,RLP都不支持,需要用户自己先转化为数组和列表的类型。
从RLP的命名中就可以看出两个关键字:一个是递归Recursive和前缀Prefix。首先,关于递归,也就是嵌套结构,结构上非常接近“树”,在Ethereum WiKi中,更是直接地采用树的items来进行命名,叶子节点(leaf tress)来存储“byte数组”,嵌套的节点就是一个树的分叉(branching trees)。
比如,需要是对如下对象进行RLP的编码,该对象中包含一个字符数组的列表、一个单个字符的字符数组、一个空字符数组。
[cat],[dog], [0xbf], []
将该对象展开为树的结构,就如下图。其中[0xbf]和[]属于字符数组。[cat], [dog]属于列表,可以嵌套展开,再根据各个节点,进行编码。然后,对于不同长度的数组和列表,编码的方法略有不同,这个也就是Length Prefix相关的内容,和“编码过程”相关的内容,在第二节进行详细地说明。
关于为什么以太坊需要单独设计一种序列化协议,目前还没有找到官方的描述。但与其他序列化方法相比,RLP协议具有一些直接的优点,比如:
1)在以太坊中,最小货币单位为1 Wei,并且1 ETH = 10^18 Wei,所以在编码中,需要考虑对很大的整数类型的序列化,在RLP中采用去除前导零(leading zero)的大端big-endian方式,可以有效处理大整数;
2)使用了灵活的长度前缀来表示数据的实际长度,并且使用递归的方式能编码相当大的数据;
3)为了实现在链上节点的“共识Consensus”,防止出现数据的不一致,以太坊中并不支持浮点数类型,所以一般的序列化协议也不适用。
编码的过程就是将嵌套结构(nested sequence)的树形结构,添加长度前缀(Length Prefix)后,转化为顺序结构(flat sequence)的过程。添加长度前缀的目的,就是在反序列化时,可以根据长度前缀(Length Prefix),将(flat sequence)重构出树的结构(nested sequence)。
关于前缀的生成规则,《Ethereum Yellow Paper》[2]给出了非常形式化的数学符号描述,漂亮是非常漂亮,可惜不是人类的语言,非常难于理解和表达。网上大部分文章的写法也是引用了Yellow Paper中的5个文字形式上的描述,把原文和翻译一并给出如下:
将上面这个“长度”Length Prefix的编码规则,通过“决策树”可以图形化的表达如下图。
首先,根据编码的类型,进行分类,分为“字节数组”和“列表”两类;第二,根据不同的长度,编码的长度前缀不同。若待编码对象的长度小于56,就是把长度和“前缀字符”进行求和,占用一个字节。反之,待编码对象的长度大于56,其前缀需要多个字节,第一个字节,求出“长度”所占的字节数,再加上“前缀字符”,比如:长度为56,占用1字节。然后对“长度”进行编码,其实也是一个嵌套的过程。
还是以上文中的例子,该编码对象,已经完成了“树的构建”,然后根据“长度前缀”的原则,对树的各个项目进行长度前缀的计算。
[cat],[dog], [0xbf], []
-对于[cat],[dog]属于嵌套数组,需要对内部各项非常进行长度编码的计算
`对于[cat],属于字符数组,且长度为3,其对应的长度为0x80+3 = 0x83
`对于[dog],属于字符数组,且长度为3,其对应的长度为0x80+3 = 0x83
`[cat],[dog]整体上,其长度前缀为0xc0 + 2(新增的两个子项的长度所占用的字节)+6(待编码字符的长度)=0xC8
- 对于[0xbf], 属于字符数组,且长度为1,其对应的长度为0x80+1 = 0x81
- 对于[dog],属于字符数组,且长度为3,其对应的长度为0x80+3 = 0x83
- 对于[],属于字符数组,且长度为0,其对应的长度为0x80+0=0x80
总体上,增加的“长度编码”的字节数为6,加上原来的长度为10,所以整个对象的长度前缀为0xC0+16d=0xD0。所以最后的编码结果为:
D0 C8 83636174 83646F67 81B7 83646F67 80
解码过程将在 《以太坊解读——Recursive Length Prefix协议图解(下)》 一文中,给出图形化的解读说明。
FT即同质化代币,同质化以太坊的各种协议的加密货币构成以太坊的各种协议了目前市场上大部分的代币。
FT以这样的方式配置的数字资产——即每个代币(或代币的碎片)与下一个代币等同。
可替代性是法定货币中的一个特征。例如,一张20美元的钞票可以兑换成任何其以太坊的各种协议他20美元的钞票,甚至可以兑换成零头。即使不是绝对的20美元钞票,它也可以是5美元钞票的倍数,甚至更少,总之总量等于20美元。
NFT即非同质化代币,非同质化代币通常是指开发者在以太坊平台上根据 ERC-721 标准/协议所发行的代币。用来描述一种独特的数字资产,它的所有权是在区块链上可以进行溯源的。
NFT 是唯一的、不可拆分的 token,所有的艺术品,不管是图书文字、音乐或是影像…等各种形式,甚至是数字化的收藏品与线上游戏都可以通过 NFT 的特殊认证方式来验证其独特与稀有价值。
因此NFT 与传统经济体系中的收藏品相比具有不同的特征以太坊的各种协议:
官方说明文档地址:
ERC20标准以太坊上的一个代币协议,所有基于以太坊开发的代币合约都遵守这个协议。
账户A有1000个ETH,想允许B账户随意调用100个ETH。
官方说明文档:
ERC-721兼容以太坊的各种协议了ERC-20的一些特性,与ERC-20的主要区别是定义了token的owner, 即每个token都详细记录它历史的拥有者,以及定义了token的Metadata, 即元数据。ERC-721还需要实现ERC165中的接口。
Metadata用于定义单个代币的唯一特征,为一个特定的代币ID提供描述性信息 。以加密猫为例,每只加密猫都有不同的颜色、形状、名称等。
• tokenId :在合约内唯一的 NFT ID,在NFT的生命周期中不可改变(要实现全链唯一的必须用(contractAddr, tokenId)组成的元组)
• name :名称,类似于ERC-20的名称
• symbol :符号,类似于ERC-20的符号
• uri :指向外部信息的链接,一般是一个JSON,而在JSON中有进一步更加具体的信息
如有不对,烦请指出,感谢~
关于以太坊的各种协议和以太坊最新协议的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
评论