RLP(Recursive Length Prefix):

递归长度前缀编码,是一种用长度作为前缀标明编码对象中元素个数的编码方法。

它是以太坊序列化所采用的编码方式,RLP主要用于以太坊中数据的网络传输和持久化存储。

JSON编码

type Student struct{Name string `json:"name"`Sex string `json:"sex"`
}
s := Student{Name:"icattlecoder",Sex:"male"}
bs,_ := json.Marsal(&s)
print(string(bs))
// {"name":"icattlecoder","sex":"male"}

变量s序列化的结果是{"name":"icattlecoder","sex":"male"},字符串长度35,实际有效数据是icattlecoder 和male,共计16个字节,我们可以看到JSON的序列化时引入了太多的冗余信息

RLP编码

type Student struct{Name stringSex string
}
s := Student{Name:"icattlecoder",Sex:"male"}
buff := bytes.Buffer{}
rpl.Encode(&buff, &s)
print(buff.Bytes())
// [210 140 105 99 97 116 116 108 101 99 111 100 101 114 132 109 97 108 101]

如下图所示,RLP编码的开头即是此编码中的对象个数(Object num)。

在个数后,是相应个数的对象(Object)。

递归地,每个对象,也是RLP编码,其格式也与下图相同。

需要特别注意的是,在RLP编码中。每个Object的字节大小是不固定的,Object num只表示Object的个数,不表示Object的字节长度。

RLP通过一种长度前缀与递归结合的方式,理论上可编码任意个数的对象。

下图是一个区块的RLP编码,在对区块进行编码时,先递归至最底层,对多个sealer进行编码,多个sealer被编码并加上长度前缀后,编码成为一串RLP编码(sealerList),此编码又作为一个对象,被编入上层的一串RLP编码(blockHeader)中。此后层层递归,最后编码成为区块的RLP编码。

由于RLP编码是递归的,在编码前,无法获知编码后的长度。

RLP编码定义与规则

https://segmentfault.com/a/1190000011763339

区块链 什么是RLP编码相关推荐

  1. Ethereum为什么选择RLP编码

    RLP 有很多问题, 但适合区块链 又一个序列化编码 RLP("递归前缀编码")编码是在以太坊中使用的主要序列化格式,并在所有地方都使用-用于区块,交易,账户状态数据和有线协议消息 ...

  2. 区块链革命 - 第1篇 假如需要变革 - 第2章 区块链经济七大设计原则

    第2章 引导未来:区块链经济七大设计原则 我们现在对区块链的设计原则是建立在对现有互联网的批判.反思之上的,这些原则可能并不是真正的"原则",那现在让们回顾并总结这些原则 计算与通 ...

  3. A survey on challenges and progresses in blockchain technologies区块链综述

    目录 摘要 Introuduction 2.关键技术 2.1 分布式账本 2.2 密码学 2.4.智能合约 2.5 基准 3.挑战和最先进的进步 3.1 性能关注区块链 3.2 安全问题 3.3.性能 ...

  4. 视频教程-项目实战:支持以太坊的MySQL管理系统视频课程-区块链

    项目实战:支持以太坊的MySQL管理系统视频课程 东北大学计算机专业硕士研究生,欧瑞科技创始人&CEO,曾任国内著名软件公司项目经理,畅销书作者,企业IT内训讲师,CSDN学院专家讲师,制作视 ...

  5. 视频教程-区块链技术原理精讲-区块链

    区块链技术原理精讲 5年JAVA/Go研发工程师经验.目前作为公司技术负责人从事区块链架构设计.研发工作. 熟悉分布式系统/区块链.云计算/虚拟化技术.敏捷开发等领域技术,开源软件爱好者. 荆帅帅 ¥ ...

  6. 视频教程-区块链基础:共识算法-区块链

    区块链基础:共识算法 多年互联网从业经验: 有丰富的的企业网站.手游.APP开发经验: 曾担任上海益盟软件技术股份有限公司项目经理及产品经理: 参与项目有益盟私募工厂.睿妙影音家庭物联网设备.手游东方 ...

  7. 视频教程-区块链算法—共识算法-区块链

    区块链算法-共识算法 工科硕士,持有高校计算机教师资格证书,从事计算机科学少儿分级体系课程的教研与教学工作,先后开设计算思维.Scratch.Python等少儿编程课等. Gardener ¥498. ...

  8. 视频教程-全球区块链应用落地的100个案例解读-区块链

    全球区块链应用落地的100个案例解读 卡内基梅隆大学计算机科学硕士,清华大学计算机科学学士.
现任续科天下首席技术官,负责分布式账本技术总体架构的研发,
领导面向多个大型金融集团的分布式账本平台方案的 ...

  9. 区块链应用技术教学大纲

    课程名称:区块链应用技术 课程编码: 课程学分:2学分 课程学时:32学时 实验学时: 适用专业:全校学生 <区块链应用技术> Application Technology of Bloc ...

  10. 视频教程-区块链项目:基于以太坊开发拍卖系统DApp教程(含资料)-区块链

    区块链项目:基于以太坊开发拍卖系统DApp教程(含资料) 张长志技术全才.擅长领域:区块链.大数据.Java等.10余年软件研发及企业培训经验,曾为多家大型企业提供企业内训如中石化,中国联通,中国移动 ...

最新文章

  1. java int 0.5_java int转float精度缺失原因?
  2. 十个经典Java 集合面试题!
  3. airpods删除别人的配对_怎么不让别人连我的airpods
  4. 小游戏一键跳转小程序任意页面
  5. LeetCode 776. Split BST
  6. BZOJ5219[Lydsy2017省队十连测] 最长路径
  7. linux库文件编译的makefile
  8. 数据库入口和密码:维普、万方和cnki(转)
  9. VMware 15 安装 macOS High Sierra 10.13 图文教程
  10. 智能车常用的上下位机:匿名上位机 V7,TFMiniPlus 激光雷达测距
  11. cadence 旋转快捷键_CADENCE快捷键归纳
  12. C++ 11字符数组/字符串/数字转换/字符串拼接
  13. 微信公众号开发 - 事件处理和回复消息
  14. Driller源码阅读笔记(二)
  15. JAVA-SUST实验一 JSP技术及JSP语法基础
  16. 文旅夜游为城市高质量发展提供新动力
  17. HTML5 Canvas 初吻
  18. Python如何一行代码自动发邮件
  19. 优化Symbian模拟器
  20. matlab归一化函数,以及还原归一化。

热门文章

  1. iOS 6 SDK: 在应用内展示App Store
  2. 大学生必看的一分钟——俞洪敏语录
  3. 多语言可视化编辑webControl 2.0版
  4. thymeleaf之菜单树
  5. 【JavaAndroid开源库代码剖析】のandroid-smart-image-view
  6. 创业日记:进入电子商务领域,需未雨绸缪,更要步步谨慎
  7. (10)数据结构-后缀表达式实现
  8. 数据预处理和数据特征工程
  9. CentOs上docker安装nginx、tomcat、redis
  10. 《SpringBoot实战》笔记3