关于区块链的几个小问题

区块链杂谈

Posted by Nino Lau on October 26, 2018

关于区块链的几个小问题

1. 为什么要有 StateRoot

在区块链的每个区块中,都有一个Merkle Tree 🌲,StateRoot是指Merkle Tree 🌲的根节点哈希值存在每一个区块的头部。StateRoot 方便节点间状态的互相验证,保证在交易的每个区块(每时每刻),所有节点的状态是一致的。

区块体内就是包含着大量的交易,每个交易本身有都有自己的哈希值来唯一标识自己(用于确认交易块的数据完整)。Merkle Tree是泛化的Hash List(Hash List可以看作一种特殊的Merkle Tree,即树高为2的多叉Merkle Tree)。Merkle Tree 🌲的原理是:在叶子节点,区块中的交易有相应地哈希和它对应;把相邻的两个哈希合并成一个字符串,然后运算这个字符串的哈希,得到一个”子哈希“(叶子节点是单数,单身哈希直接得到子哈希);以此类推,形成一棵Merkle Tree 🌲,根节点称为 Merkle Root(StateRoot)。

矿工 ⚒️们获得 Merkle Tree 🌲的StateRoot就可以判断区块是否损坏或者虚假。Merkle Tree 🌲可以直接下载并立即验其中一个分支。考虑到每个区块中有很多交易,这种方法无疑大大降低了纠错成本。

2. nonce 有什么用

Nonce 是 Number-Once 的简写,在密码学中 Nonce 是一个只被使用一次的任意或非重复的随机数值。打开以太坊浏览器,发现每个区块链中都有一个 nonce,每笔交易也有一个 nonce。

区块中的 nonce

交易中的 nonce

1)在区块中:nonce是为了证明工作量的无意义的值,这是采矿的本质,这个值将决定采矿的难度。

2)在交易中:nonce 是发送者发送交易的计数,用来区别同一用户发送不同交易的标记。nonce 可以用来确认交易顺序防止用户双花(Double Spending);撤销 pending 中的交易(pending等待交易被确定的状态,如果 Gas Price 不高,pending会比较长);确定生成合约的地址

3. Hyperledger fabric VS composer

Hyperledger Fabric是一个区块链框架实现,是Linux基金会托管的Hyperledger项目之一。Hyperledger Composer是一组用于构建区块链业务网络的协作工具,它使业务所有者和开发人员创建智能契约和区块链应用程序来解决业务问题变得简单和快速。

Hyperledger Fabric

在比特币(传统的区块链)系统中,要求每一位同行执行每一笔交易,维护总账并达成一致,不能支持私人交易和保密合同。Hyperledger Fabric 将系统中的角色分为背书人(endorser)、提交者(committer)和批准者(consenter), 保证模块化、可伸缩的和安全的工业区块链解决方案。

Hyperledger Composer

Hyperledger Composer 使区块链应用程序与现有业务系统集成更加容易,快速开发用例并部署区块链解决方案。Composer允许您对业务网络进行建模,并将现有系统和数据与区块链应用程序集成。

Composer 通过一些脚本语言,来定义需要的内容(参与方,CA,资产,交易等),然后打包成 .bna 文件直接部署到 Fabric 私有链网络上,并实现了 Fabric 原本需要自己实现的区块链读写操作等。

Comparison

参考】对比Fabric,Composer 包括其他几个主要特性和提升:

  1. Composer 的业务网络通过 composer-rest-server 自动公开为 OpenAPI。 composer-rest-server 使用 passport.js 来支持可插入的终端用户身份验证方案;
  2. Composer 包含一种声明式访问控制语言,允许开发人员定义哪些参与者可以访问哪些资产以及在何种情况下可以访问哪些资产;
  3. Composer ACLs 大大减少了业务逻辑中所需的过程访问控制检查量;
  4. 使用 Composer Node-RED 节点可将 Composer 与物联网,分析,仪表板等集成。

参考】当然用 Go 直接写 Fabric API 也有很多好处:

  1. 遵循Fabric API 功能中最新的演进;
  2. 更好的原始性能;
  3. 类型安全;
  4. 业务逻辑和模型的单一语言;
  5. 可合并第三方 C 和 Go 库。

联盟链的智能合约与中心化账本的区别

中心化账本是中心化的,由授信第三方机构单点维持的记账工具。囿于其中心化的性质,账本的安全性和隐私性掌握在第三方机构的手中。

智能合约是去中心化的,由很多个节点共同维持的一种计算机协议,旨在通过数字技术促进、验证或执行合同的谈判或履行。智能合约允许在没有第三方的情况下进行可信的交易,这些交易是可追踪和不可逆转的,防止了隐私泄漏和单点失误。

智能合约是技术系统中最关键的部分。合同中的漏洞可能被恶意行为者利用,导致被盗的、通常不可恢复的资金或者无意执行代码,可能导致数百万美元的财产损失。任何部署智能合同的公司不仅要对投资者、客户和合作伙伴负责,还要对整个社区负责,以确保他们的智能合同是安全的。