Bytom设计结构解读

1、引文

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

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

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

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

2、为何要采用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叉基数树,分两层,第一层管理的是全部的帐户,第二层管理是各帐户的存储内容。加密

ethereum_pat

Bytom 的PAT树与Ethereum 不一样?spa

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

3、UTXO

为何要使用UTXO?设计

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

怎么使用UTXO?

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

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

4、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?

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

5、帐户模型

为何要采用帐户模型?

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

bytom怎么去实现帐户模型?

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

bytom_asset

  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, 该帐户发送交易时可插入须要的程序。

综述

bytom_asset_account

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

我的帐户 根据AccountId 可以快速的索引其相关的utxo。资产帐户根据AssetId可以快速的管理相关的utxo。
bytom_uml

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

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

帐户模型分两种,资产帐户和我的帐户,帐户能够索引管理其相关的utxo。

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

在帐户作交易时,每一个帐户均可以从世界状态树去查找选择本身的utxo,并编写本身所需的资产程序,将其作为TxInput。

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

相关文章
相关标签/搜索