用户模型是比原链在最初就需要确定的重要数据结构, 团队的选择还是聚焦在两种典型的模型系统中,Account模型和UTXO模型,和其他大多数区块链设计一样, 选择了模型就决定了协议层的重要实现,两种模型各有利弊,不同区块链针对想聚焦的场景自身会有判断。

UTXO 的起源(来自高明的中本聪)

中本聪对比特币的设计,让整个世界进入了数字货币时代。比特币起源于中本聪,UTXO出自比特币。自然,UTXO来自高明的中本聪。UTXO的优点:

  • 在版本控制方面的考虑,svn 是中心化的数据库保持一份账本,这和区块链的设计自然是相违背的,git 是去中心化的数据库,但会保存太多冗余数据,对于分布式性能肯定是要大打折扣。UTXO数据库是抛弃了历史包袱的git, 只存储了最后一个版本。简易实用。

  • UTXO 具有天然的匿名效果,一个账户所对应的未花费交易是难以发现的,如门罗币就是采用混币的方式实现隐私的。
  • 在性能方面,由于UTXO是独立的数据记录, 那么就存在极大的并行性可以提升区块链交易验证速度。

设计的易实现性 — 以太坊 弃UTXO用账户模型

以太坊黄皮书的设计者Gavin Wood 对UTXO的理解,十分深刻, 既然UTXO有这么多的优点,他为什么弃用UTXO了? 这时你应该提出个问题,以太坊的最大亮点是什么?你肯定会回答:智能合约。正是因为智能合约的考虑,Gavin Wood要基于UTXO去实现图灵完备的智能合约(功能多样性的超级电脑)是困难的。而账户模型是天然的面向对象的,对每一笔交易,都会在相对应账户上进行记录(nonce++)。为了易于管理账户,而引入了世界状态,每一笔交易都会改变这个世界状态。这和现实世界是相对应的,每一个微小的改变,都会改变这个世界。

追求更高的性能

以太坊的账户模型很容易的实现了超级电脑模型。然而,性能一直是一道难以逾越的坎。在性能方面,utxo天然的可以并行运行,而基于世界状态的以太坊难以扩展。Gavin Wood当然是认识到这一点的,但要去改变,很难。那到不如用带有函数式编程特点的rust 去重写以太坊,也算是一种折中方案。

比原链的思考

马克思哲学的否定之否定规律,事物的发展变化是螺旋式上升的。在区块链领域也是适合的,前进一步,也需要后退半步。基于UTXO模型去实现堆栈式虚拟机, 那还是会失去灵活性,用UTXO去结合以太坊EVM, 难度极大,也是不太实用的,这好比用haskell语言,去实现cpp风格的面向对象编程, 看不到有什么实际的意义。世界上没有银弹,比原链必须舍弃部分,妥协部分才能更好地适应场景。

我们在采用了比特币UTXO的易于并行运算的模型前提下,还做了针对性的改进,加了个资产号字段,使不同的资产可以在同一笔交易中处理转换,只要满足总输入等于总输出就可以。

但为了数据易于管理,易于编程, 我们引入以太坊的世界状态的概念,每一种资产都维持一个全局世界状态,该全局世界状态具有快速可查找,不可更改,简单易提供证明的特性。它的具体实现会参考以太坊的PAT树(一种扩展的基数树),比特币的merkle树,以及cosmos的IAVL树(一种不可更改的平衡二叉树)。每一种资产的所有outputs在一个全局的UTXO数据库中会有一个索引计数(每一个output的计数不能超过1,保持并行计算时,一个output最多能被一个BVM实例所使用,确保了数据一致性)。BVM是比原链实现的智能合约虚拟机模型, 每一笔交易的的执行,都会实例化一个BVM实例,只有在BVM实例中,各资产的世界状态才能在保持有效性,一致性的前提下更新状态。BVM可以并行创造多个”合约沙盒”实例, 在沙盒中合约的运行不受外界影响。

比原链创造的初衷是解决数字资产登记流转的问题, 对于公有链项目,保持简洁,保持高效,保持专注,就是保障安全, 新的扩展型UTXO模型正是基于这种场景实现的融合和改进。

比原链设计思考: 扩展性UTXO模型的更多相关文章

  1. SAP接口设计的扩展性考虑

            由于现在的系统和SAP的接口出现了几次变更,因此需要对系统进行设计改造.由于系统中和SAP交互的接口不止一处,而且也是在不同的时间段进行开发,并由不同的人员来完成的,因此我在维护升级的 ...

  2. 社区观点 | 理解比原链MOV链上交换协议

    去中心化交换协议的发展 从Bitshare,Stellar到以太坊上的Etherdelta,Bancor,0x协议,去中心化交换协议也经过了好几代发展和很多模式的探索,每一代都通过前面的协议的痛点来进 ...

  3. 深入NGINX:我们如何设计它的性能和扩展性

    为了更好地理解设计,你需要了解NGINX是如何工作的.NGINX之所以能在性能上如此优越,是由于其背后的设计.许多web服务器和应用服务器使用简单的线程的(threaded).或基于流程的 (proc ...

  4. 《.NET 设计规范》第 6 章:扩展性设计

    第 6 章:扩展性设计 6.1 扩展机制 考虑用不包含任何虚成员或受保护的成员的非密封类来为框架提供扩展性.这种方法所提供的扩展性广受用户欢迎,而且它的开销也不高. 考虑将受保护的成员用于高级的定制方 ...

  5. 社区观点 | 关于比原链MOV巡查官制度的几点思考

    在ChainNode白皮书解密读书会01期活动中,比原链高级研究员刘秋杉带领大家领读「MOV:下一代去中心跨链 Layer 2 价值交换协议」白皮书,得到了很多粉丝的关注,其中gentledog的读书 ...

  6. Atitit.软件架构高扩展性and兼容性原理与概论实践attilax总结

    Atitit.软件架构高扩展性and兼容性原理与概论实践attilax总结 1. 什么是可扩展的应用程序?1 2. 松耦合(ioc)2 3. 接口的思考 2 4. 单一用途&模块化,小粒度化2 ...

  7. 浅析Facebook LibraBFT与比原链Bystack BBFT共识

    如果说什么是区块链的灵魂,那一定是共识机制. 它是区块链的根基.无论公链或是联盟链,共识机制都从基础上限制了区块链的交易处理能力和扩展性. 2019年6月18日,Facebook 发布了自己 Libr ...

  8. TCP接入层的负载均衡、高可用、扩展性架构

    一.web-server的负载均衡 互联网架构中,web-server接入一般使用nginx来做反向代理,实施负载均衡.整个架构分三层: 上游调用层,一般是browser或者APP 中间反向代理层,n ...

  9. 比原链CTO James | Go语言成为区块链主流开发语言的四点理由

    11月24日,比原链CTO James参加了Go中国举办的Gopher Meetup杭州站活动,与来自阿里.网易的技术专家带来Kubernetes.区块链.日志采集.云原生等话题的分享.James向大 ...

随机推荐

  1. maven工程的common模块jar上传至仓库并被其它模块依赖

    .parent pom和common pom 都需要添加 <distributionManagement> <repository> <id>nexus</i ...

  2. 【Linux学习二】文件系统

    环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 一.文件系统 一切皆文件Filesystem Hierarchy St ...

  3. GDB && QString

    [1]GDB && QString GDB的print命令仅能打印基本数据类型,而像QString这样的复杂类型就无能为力了! 如果调试时不能看QString的值,很让人抓狂!!!幸好 ...

  4. memcache、redis、mongoDB 如何选择?

    不同的 Nosql,其实应用的场景各有不同,所以我们应该先了解不同Nosql 之间的差别,然后分析什么才是最适合我使用的 Nosql. Nosql 介绍 Nosql 的全称是 Not Only Sql ...

  5. python3安装scrapy教程

    2.1xm1http://www.lfd.uci.edu/~gohlke/pythonlibs/#lxml3. PyOpensslhttps://pypi.python.org/pypi/pyOpen ...

  6. mybatis源码解析10---StatementHandler解析

    StatementHandler解析 接口的作用是statement处理器,位于mybatis包的org.apache.ibatis.executor.statement目录下,源码如下: packa ...

  7. php获得可靠的精准的当前时间 ( 通过授时服务器 )

    有一种情形是这样子的,比如机票业务中的订票流程,我们需要一个非常可靠的当前时间来支持,尽管大多数服务器的时间是非常准确的,我们使用time()来获取的时间是可靠的,但未免会有不确切的情况,也有的服务器 ...

  8. Radio中REG

    Auto REG/REG OFF在广播接收质量不好时,收音机首先仅调整到该广播电台当前发射的可选频率.但是,如果接收质量差到“该发射电台濒临消失”的程度,则收音机也会接收德国NDR1(北德意志广播电台 ...

  9. <转>jmeter(九)逻辑控制器

    本博客转载自:http://www.cnblogs.com/imyalost/category/846346.html 个人感觉不错,对jmeter讲解非常详细,担心以后找不到了,所以转发出来,留着慢 ...

  10. 关于spark进行实时日志解析,保存hbase与mysql

    进行地域分析 rowkey=中国_上海_201901016 value=访问次数 areaStartAmt.foreachRDD(rdd => { rdd.foreachPartition(pa ...