建议和反馈

请填写你的反馈内容

以太坊区块链技术解析-RLP编码

2019-12-02 ·2190次阅读 ·读完需要3分钟

Recursive Length Prefix, 递归长度前缀编码。在以太坊中所有的区块以及交易都需要先经过RLP编码之后才存到数据库里,是以太坊数据序列化的主要方法。主要用于编码具有嵌套结构的二进制数据,之所以是用新的数据结构,是因为它比之XML、JSON之类的序列化方法更为简洁,更适用于区块链环境下容量有限的区块;同时,它可以解决结构体的编码问题,区块链应该要求数据结构尽量单纯,对原子数据类型(比如,字符串,整数型,浮点型)的编码则交给更高层的协议,这也有利于区块链的安全。

方式:

rlp编码的对象有一个byte、string与string list三种。

一个空的string是一个item,“cat”也是一个item。包含任意个string的list(例如,["cat",["puppy","cow"],"horse",[[]],"pig",[""],"sheep"])也是一个item。

原理如下:

 1.对于byte

 如果一个字节在[0x00, 0x7f],那么这个字节的rlp编码就是本身。


2.对于string

 2.1如果是一个0-55字节的字符串str,rlp编码由prefix+str两部分表示,prefix占一个字节,内容是(0x80+字符串长度);str是字符串。由于str的长度是[0,55],所以前面的prefix取值范围就是[0x80,0xb7]。

 2.2如果是一个大于55个字节的字符串str,rlp编码由prefix+length+str三部分表示。prefix占一个字节,内容是(0xb7+length占几个字节);length是str的长度;str是字符串。举个例子,1024字节的字符串的length是0x0400,占两个字节,preifix就是0xb7+2=0xb9,最后的前缀就是0xb9 0x04 0x00。prefix取值范围是[0xb8,0xbf]。


3.对于string list:

 3.1如果string list中所有string编码后的长度总和(也叫payload)为0-55个字节,rlp编码由totalprefix+[prefix1+str1]+[prefix2+str2]...。totalprefix占一个字节,内容是(0xc0+payload长度);后面的prefix+str与上面string中的情况1一致。举个例子,RLP([“cat”,“dog”])= [ 0xc8, 0x83, 'c', 'a', 't', 0x83,

'd', 'o', 'g' ]。totalprefix范围是[0xc0,0xf7]。

 3.2如果一个list的payload的长度大于55,其RLP编码是list的item的RLP编码的串联,前面加上一个表示payload长度的字节,前面再加上一个payload长度的二进制表示的字节长度。

评论(0)问答(0)
请先登录或注册

请先登陆或注册

相关推荐

Nightfall 的系统结构、铸币实现及以太坊上通证的转移实现

摘要Nightfall 是一种零知识证明的实现, 它使用 zk-SNARKS 让同质化 ERC20 和非同质化的通证 ERC721 系列的通证进行隐私化转移,使......
BUNTOY · 2020-06-05
1333阅读 · 0赞赏 · 0问答

以太坊2.0 POS挖矿教程:手把手教你在Topaz测试网进行Staking

引言由以太坊2.0客户端构建团队之一的Prysmatic Labs发布的以太坊2.0的第一个主网配置的测试网Topaz终于在4.15正式启动了。该测试网针对的是以太坊2.0第0阶段的测试,即实现信标链......
justnow · 2020-06-05
1203阅读 · 0赞赏 · 0问答

以太坊 2.0 Staking 机制研究报告

Overview 概述信标链作为 ETH 2.0 整个规划中的最先上线的重要一环,将直接实现 PoS 功能,根据目前其 Staking 整个体系的设计,可见 ETH2.0 不同于 DPoS 这种超级验......
雨落清双 · 2020-06-05
1226阅读 · 0赞赏 · 0问答

从 MyEtherWallet 被攻击事件我们应该学到什么?

世界上著名的WEB钱包MyEtherWallet.com 遭遇了历史上首次大规模针对WEB钱包的中间人攻击,攻击时间只有2小时,总共超过价值15万美金的加密数字资产被窃取。我们相信,本次攻击只是一次试......
VeelDiana · 2020-06-04
1390阅读 · 0赞赏 · 0问答

Reddit的首次代币发行:对以太坊意味着什么?

不久前蓝狐笔记谈到Reddit基于以太坊推出其社区代币的计划,而这两天事情已经有了进展。Reddit已经开始准备发行两个子板块社区代币。目前它们正在Beta测试中,这些代币已在以太坊Rinkeby测试......
moondesign · 2020-06-02
1707阅读 · 0赞赏 · 0问答

引介 | 什么是以太坊 2.0 测试网?如何参与?

一. 什么是以太坊 2.0 测试网?所谓 “以太坊 2.0 测试网”,指的是在以太坊 2.0 正式启动以前,为测试技术标准(spec)的安全性、各客户端实现的可靠性以及客户端之间的互通性而推出的、可以......
古风 · 2020-06-02
2714阅读 · 0赞赏 · 0问答

wind

4099

LK币

23

粉丝

34

笔记

感谢"wind"

这篇精彩的笔记,目前已经帮助

  • 0
  • 2
  • 1
  • 9
  • 0
喜欢0
链客社群 加入

微博进入

商务合作>

广告投放>

公司名称:北京链客行科技有限公司

联系方式:010-67707199

ICP备案号:京ICP备18032136号

Copyright:链客区块链技术问答社区 版权所有

感谢您的提问,问题被社区永久收入以便新人查看。一定要记得采纳最佳答案哦!加油!

感谢您的善举,每一次解答会成为新人的灯塔,回答被采纳后获得20算力和相应的LK币奖励

您将赞赏给对方2LK币的奖励哦!感谢您的赞赏!

您将赞赏给对方2LK币的奖励哦!感谢您的赞赏!