专栏名称: 巴比特资讯
区块链/数字货币/比特币中文资讯,创立于2011年,200多位专栏作入驻平台,国内最大区块链资讯原创基地(公众号【原创】认证),我们为以下合作伙伴供稿:火币、OKCoin、BTC.com、BTCC、币看、BTC123、比特时代、挖币网
目录
相关文章推荐
巴比特资讯  ·  今日突发!OpenAI ... ·  5 天前  
巴比特资讯  ·  大模型热潮,会是一场泡沫吗? ·  5 天前  
巴比特资讯  ·  突破数据墙!27岁华裔MIT辍学创业8年,年 ... ·  4 天前  
巴比特资讯  ·  奥特曼否认拿股权!但OpenAI投资人硬要塞 ... ·  4 天前  
巴比特资讯  ·  17岁高中生做AI ... ·  6 天前  
51好读  ›  专栏  ›  巴比特资讯

Bytom设计结构解读

巴比特资讯  · 公众号  · 比特币  · 2017-07-01 19:14

正文


巴比特

服务于区块链创新者



一、引文


设计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中的程序。



作者:比原链Gavin

稿源:巴比特资讯(http://www.8btc.com/bytom-design)

文章为作者独立观点,不代表巴比特立场。 转载请注明作者和来源。


回复以下关键词查阅相关区块链资料

回复 区块链报告 免费下载 《37份国内证券行业发布的区块链研究报告》

回复 工信部 免费下载 《中国区块链技术和应用发展白皮书》

回复 超级账本 免费下载《超级账本Hyperledger白皮书》

回复 比特币白皮书,免费下载《比特币:一种点对点的电子现金系统》

回复 以太坊,免费下载《以太坊白皮书》

回复 侧链 免费下载《侧链白皮书:用楔入式侧链实现区块链的创新》

回复 欧洲央行 免费下载《欧洲央行分布式账本技术报告》

回复 高盛 免费下载 《高盛区块链报告:区块链 从理论走向实践》

回复 闪电网络 查看《详解最近大热的闪电网络、雷电网络和CORDA到底是什么》

回复 闪电网络白皮书 免费下载《比特币闪电网络白皮书:可扩展的 off-chain 即时支付》

回复 麦肯锡 免费下载《麦肯锡区块链报告:银行业游戏规则的颠覆者》

回复 IBM  免费下载《IBM 区块链热点技术与应用》

回复 毕马威 免费下载《毕马威区块链研究报告:价值互联的不变协议 》

回复 金融科技 免费下载《中国领先金融科技50强》


我是币圈最牛的公众号