Bytom设计结构解读

一、引文

设计Bytom 数据结构,组合了许多技术点,如 patricia tree,utxo, bvm, account model,protobuf,sql,memcache 等。本文会对一些技术点做以下两点分析。

  1. Bytom 为什么要采用该技术点?
  2. Bytom 如何应用该技术点?

最后介绍综合这些技术点如何实现Bytom。

[patricial tree](http://www.allisons.org/ll/AlgDS/Tree/PATRICIA/)

二、为什么要采用PAT树?

?PAT树具有[基数树](https://en.wikipedia.org/wiki/Radix_tree) 的特点,内容可快速追踪。

?PAT树具有[merkle树](https://en.wikipedia.org/wiki/Merkle_tree) 的特点,数据可快速证明。


在分布式系统中,一致性和有效性是十分关键的点。bytom采用PAT树,其中的数据可快速证明,可以快速证明每一份状态机是否一致。内容可快速追踪,可以使bytom在每一个快照状态下,快速查找其数据,并检验数据的有效性。

Bytom 如何用PAT树?

Ethereum的PAT树是16叉基数树,分两层,第一层管理的是所有的账户,第二层管理是各账户的存储内容。

Bytom 的PAT树与Ethereum 不同?

  1. Bytom 的PAT树是二叉基数树。
  2. Bytom的PAT树是用来管理未花费的outputs。

三、UTXO

为什么要使用UTXO?

UTXO诞生于比特币,和现实世界的RMB一样,从央行诞生的那一刻起,他流转无数人的账户,但他的价值面额始终和原来一样,这样以币为中心,而不是以人为中心,资产便于监管和统计。Bytom 就是用于资产的发布和管理的,所以,UTXO的这种以资产为中心的设计模式,是很适合Bytom上面的资产管理。

怎么使用UTXO?

相比比特币的UTXO, bytom的UTXO多了三个字段

  1. assertid, 因为bytom是一个多资产发布与管理的平台,所以使用该字段来唯一确定各种资产。
  2. accountid, 这是便于各账户对utxo的索引和管理,bytom 相比bitcoin,引入了账户模型,后面会介绍。
  3. program, 拥有该utxo的账户可以用Ivy语言编写自己想要的程序放在该字段,以便在交易时,图灵完备的BVM会执行该程序。

四、BVM


BVM是在状态机的转化过程被启动运行,也就是excute(transaction)这一步骤。

为什么需要使用BVM?

bitcoin 中的非图灵完备栈式脚本语言,所表达的功能极少,很难实现一些稍微复杂的功能,如verify_spv(跨链锚定验证的功能,如btc_relay),再如简单的去实现multi_lock(M人加密,只要收集N人私钥就能解密,0 < N < M)功能。
ethereum中的evm能简单的用solidity语言编写程序实现这些功能,但EVM过于复杂,它号称超级世界计算机,对于bytom这种只对资产有兴趣的区块链是没必要的。因此bytom不如基于[Chain](https://chain.com/) 公司的能用[Ivy](https://chain.com/docs/1.2/ivy-playground/docs) 高级语言编程的CVM去做自己的扩展,灵活易用。

如何使用BVM?


用户在发送每一笔交易时,可以自己编写自己所需要的程序,等到交易打包进块时,BVM会去执行该代码,由于BVM是图灵完备的虚拟机,所以需要加入feed计价机制(feed 等同于ethereum的gas * gasprice)来解决停机问题。

五、账户模型

为什么要采用账户模型?

账户模型易于管理相关数据,是以人为中心,十分的直观。对于BVM来说,基于账户代码去执行也十分便捷。再者我们引入了资产模型,类似于账户模型,这样易于资产的监管和查询。

bytom怎么去实现账户模型?

bytom 中的账户模型也分两类,但不同于ethereum中的个人帐户和合约账户, 它是指资产账户和个人账户。
资产账户:

  1. assetid 是全局唯一的资产识别id。
  2. alias 是资产的别名,可便于记忆,如(gold, silver) 。
  3. vmversion 是为了软分叉时,做到动态过度。
  4. program 是指发布该资产时需要执行的程序。
  5. initialblockhash 是指该资产是在哪个块高度被登记。
  6. signer 管理公私钥对,以便用该资产的私钥签名,只有拥有该资产私钥的人才能发布该资产。
  7. definition 对该资产的解释说明等。

个人账户:

  1. accountid 全局唯一可识别账户id。
  2. alais 帐户名。
  3. signer, 私钥对,用于发送交易。
  4. *utxos 该账户所有的未花费交易的索引,便于快速管理该账户下资产。
  5. program, 该账户发送交易时可插入需要的程序。

综述

UTXO的物理结构,用memcache 存着。UTXO的逻辑结构则是用二叉PAT树来管理。

个人账户 根据AccountId 能够快速的索引其相关的utxo。资产账户根据AssetId能够快速的管理相关的utxo。

上图是描述bytom主要数据结构的uml图。

Bytom用PAT树来组织utxo作为世界状态树。

账户模型分两种,资产账户和个人账户,账户可以索引管理其相关的utxo。

UTXO 池会采用如memcache的内存数据库,落盘数据库会选择关系型数据库,数据会选择protobuf来序列化。

在账户做交易时,每个账户都可以从世界状态树去查找选择自己的utxo,并编写自己所需的资产程序,将其做为TxInput。

在交易打包进块时,验证节点会去实例化BVM,并执行该交易中所有TxInput中的程序。

原文地址:https://www.cnblogs.com/bytom/p/9372082.html

时间: 2024-10-13 03:42:53

Bytom设计结构解读的相关文章

IplImage 结构解读

IplImage 结构解读: typedef struct _IplImage { int nSize;                              /* IplImage大小,等于width*height  */ int ID;                                    /* 版本 (=0)*/ int nChannels;                    /* 大多数OPENCV函数支持1,2,3 或 4 个通道 */ int alphaCha

20182314《程序设计与设计结构》 第六周学习总结

20182314<程序设计与设计结构> 第六周学习总结 教材学习内容总结 第九章 多态 : 1.后绑定:很多情形下,方法调用和方法定义的绑定是在编译的时候完,但多态的引用,绑定必须到运行时才能确定.需要由调用时所指向的对象的类型来确定下来,需要由调用时所指向的对象的类型来确定要用到那个方法定义,这个延迟的提交称为后绑定. 2.通过继承实现多态:当用一个类名声明一个引用变量时,可以用它指向这个类的任何对象.另外,它还可以指向声明继承于它的任意类的任何对象. 3.接口: (1)抽象方法是一个没有实

《设计模式之禅》之——六大设计原则解读

一.单一职责原则(Single Responsibility Principle,SRP) 1. 单一职责原则定义 应该有且仅有一个原因引起类的变更. 2. 单一职责原则好处 类的复杂性降低,实现什么职责都有清晰明确的定义: 可读性提高,复杂性降低,那当然可读性提高了: 可维护性提高,可读性提高,那当然更容易维护了: 变更引起的风险降低,变更是必不可少的,如果接口的单一职责做得好,一个接口修改只对相应的实现类有影响,对其他的接口无影响,这对系统的扩展性.维护性都有非常大的帮助. 3. 单一职责适

IplImage 结构解读(转)

[cpp] view plaincopy typedef struct _IplImage { int nSize;                             /* IplImage大小 */ int ID;                                 /* 版本 (=0)*/ int nChannels;                      /* 大多数OPENCV函数支持1,2,3 或 4 个通道 */ int alphaChannel;      

20162309《程序设计与设计结构》第四次实验报告

实验名称:图的实现和应用 实验目的:学习图的相关内容,掌握图的构建方法,实现图结构,初步了解十字链表和邻接矩阵的使用方法,以及对图结构实现过程的应用.掌握图结构对最短路径的求值方法,学习带权图. 实验题目:1.用邻接矩阵实现无向图(边和顶点都要保存),实现在包含添加和删除结点的方法,添加和删除边的方法,size(),isEmpty(),广度优先迭代器,深度优先迭代器,给出伪代码,产品代码,测试代码(不少于5条测试) 2.用十字链表实现无向图(边和顶点都要保存),实现在包含添加和删除结点的方法,添

MySQL 性能优化,优化设计及设计原则解读

MySQL性能优化的目的 如何合理的设计数据库? 什么样的数据库设计才能给后期DBA优化提供基石? 数据库设计与程序设计的差异? 数据库设计早期优化 关系明确(理清表之间的关系,可以通过冗余的方式提高效率) 节省空间(根据业务经验,设置字段长短) 提高效率 数据库表开发流程 原型=>逐步完善(表的设计也是如此) 数据库种类 层级数据库(注册表) 如:Windows操作系统的核心就是一个注册表,由于配置项比较多,采用层级关系的数据存储 关系型数据库 如:MySQL 时序数据库 图数据库 如:最短路

移动端APP产品设计结构及专业术语

1. 启动图标 点击后可以启动 APP 的图标,如图分别是淘宝在不同场景下的启动图标. 2. 应用市场展示页 在应用市场中为了帮助用户在下载之前了解 APP 功能的页面叫应用市场展示页,也能够通过优秀的 UI 设计吸引用户下载. 如图中红框内分别是苏宁易购.设计本.当当网的应用市场展示页. 3. 启动页(闪屏) APP 启动后加载过程中显示的页面叫启动页,如图是微信.有道云笔记.得到的启动页.一般启动页的设计都会比较简洁,只有启动图标+solgen,或是吉祥物.一张精美图片的形式. 4. 广告页

学号20182325 《程序设计与设计结构》 第八周学习总结

学号20182325袁源 <数据结构与面向对象程序设计>第8周学习总结 教材学习内容总结 排序.算法.栈.队列 插入排序.交换排序,选择排序.基数排序.归并排序 用时间效率.空间效率.稳定性(数值相等次序不变)衡量算法. 树:由n个结点组成的有限集合 n=0为空树 非线性结构 DNS: 一对多:有且仅有一个前驱:有多个后继 每个结点都有且仅有一条通往根结点的路 度:子树数 叶:0度 可分层 遍历树 存储结构 1.双亲表示法 2.孩子表示法 3.双亲孩子表示法 2.可用链表与数组实现 教材学习中

第三章 Java的基本层序设计结构

第一章  Java程序设计概述 在网页中运行的Java程序称为 applet. 在服务器中运行的Java程序称为 servlet. 关于Java的常见误解: 其中第三点说到: 3.Java是一种非常容易学习的程序设计语言 像Java这种功能强大的语言大都不太容易学习. 首先,必须将编写玩具式程序的轻松和开发实际项目的艰难区分开来. 第二章  Java程序设计环境 Windows 或 Linux : 32位选择x86, 64位以 x64 第三章  Java的基本程序设计结构 根据Java语言规范,