作者简介: Ultrain 资深技术专家 Raymond, 前摩托罗拉高级软件开发工程师, 曾于近期发现 EOS 底层可导致 EOS 全网宕机隐患的致命安全漏洞, 并将问题及修复方法提交至 EOS, 获其官方致谢.
自比特币诞生起, 区块链技术发展至今十年有余, 不断吸引资本与技术的关注并保持热情不退, 大量资金与技术研发的持续投入推动着该技术的快速发展与演进, 尤其是随着近几年区块链技术的落地生根, 区块链成为继互联网之后重大技术变革的商业期望正开始逐步实现.
正如互联网在各行业的应用与融合, 人们相信区块链技术的去中心化, 账本的不可篡改等特性亦可对传统行业产生颠覆性革命, 区块链从业者开始探寻传统行业与区块链技术的结合, 从而产生了跨境结算, 供应链金融, 数字资产确权, 版权存证, 商品溯源等落地应用.
本文将尝试从区块链技术本质, 技术架构, 发展方向三个角度对区块链技术进行剖析, 揭开区块链技术的神秘面纱, 探索真正能够给传统行业带来价值的商业落地场景.
区块链技术本质
区块链不是万能的, 只有理解了区块链技术的本质, 才能去伪存真, 发掘适合区块链技术优势的应用场景, 真正为传统行业创造新的商业价值. 区块链的技术本质, 其最核心的有如下三点:
图 1 区块链技术本质
1) 去中心化平台带来的天然信任
区块链技术与生俱来的天然信任, 既不是各种共识算法赋予的, 也不是只能增加不能修改的公共账本技术带来的, 而是来自于平台不受任何单一主体控制, 人人可随时参与随时退出的特质. 分布式存储, 点对点网络以及各种共识协议等软件技术, 都是为了使去中心化的平台能正常运行. 平台运行结果由平台参与者达成共识形成. 同样, 对这个平台的修改更新, 也要求平台参与者达成共识. 套用 "流浪地球" 的一句台词, 在区块链时代, 共识是比钻石还珍贵的东西.
区块链的天然信任还依赖于其所运行软件的开源特性, 任何人都可以检查源代码, 编译运行成为平台的一个节点, 参与平台的运行. 去中心化软件技术带不来天然信任, 信任来自于这个开源的运行平台不受任何一方控制, 任何一方不能随意修改系统运行结果, 不能随意修改软件功能.
Ultrain 超脑信任计算联合创始人 & CEO 郭睿曾经在讲解 Ultrain 经济模型的直播中举过阿里巴巴平台打假的例子: 阿里巴巴每年投入巨额资金进行打假, 但公众仍旧可以想象打假只是走过场, 象征性做个别案例, 然后利用假货获取更大的利益. 阿里巴巴没有办法自证清白, 本质原因就是阿里巴巴的运行平台是他们自己控制的, 系统数据是他们自己提供的; 单一实体运营的中心化的平台没有办法具有去中心化平台与生俱来的天然信任机制.
2) 原生的通证机制
比特币为什么会成功? 从技术上说, 比特币所用到的技术包括点对点网络, 各种加密算法等都不是新技术, 在它之前也有很多电子货币 / 加密货币的失败尝试, 很显然技术不是其成功的本质原因. 比特币的成功可以归因于其良好的经济激励机制设计 -- 区块链的原生通证机制. 其作用可分为两方面, 一方面通证机制可以为区块链系统引入经济博弈, 保证系统的良性运转; 另一方面, 也将区块链打造成了价值分配转移的最佳载体, 使其被认为是与信息互联网相对应的价值互联网. 高晓松一次在清华大学的分享中曾经以区块链通证机制对音乐行业的改造为例, 描述了通证将音乐的权益无限细分, 从而引入更多参与方, 形成各种新的商业机会的场景.
业界也有专业的通证经济研究学派, 从实现数字资产的通证化, 到现实世界资产通证化, 再到公司的激励组织形式变革, 给通证经济构建理论支撑, 描绘了区块链与各行各业结合后丰富的应用前景.
这里有必要对联盟链做一下特别说明: 联盟链没有通证机制, 它是许可机制, 节点入网需审核批准, 使用链外的激励机制而不需要设计复杂的经济激励模型. 联盟链节点数量有限, 相当于多中心化系统.
3) 智能合约使能信任计算
比特币初始定位于点对点的电子货币系统, 只支持比较弱的脚本处理能力, 局限于金融业务逻辑. 以太坊开始支持智能合约, 使区块链平台能运行图灵完备的程序语言, 从而可以实现价值平滑转移, 支持复杂业务逻辑, 提供信任计算能力, 开启了区块链的新时代. 智能合约使能了众多商业场景, 从游戏, 溯源, 存证, 能源交易到供应链金融等领域, 都有比较广泛的应用. 这些应用场景或利用区块链赋予的天然信任机制, 或利用区块链的通证机制, 创造了新的商业模式, 带来了新的商业价值.
目前区块链的处理性能与中心化系统还有差距, 智能合约的编写也很容易引入安全漏洞, 一定程度限制了智能合约的应用. 但这些都是新技术发展的必经阶段, 业界也在努力解决这些问题, 更多的落地场景也逐步涌现, 推动区块链产业一步步走向繁荣.
区块链的技术架构
区块链领域涉及的技术比较广泛, 业界已经有很多的文章讲述相关的加密技术, 共识算法等具体知识, 结合众多的开源项目, 对技术人员来说可以很方便地切入该领域. 本节尝试从整体架构层面, 描述各个模块相对关系, 帮助大家建立一个整体认识.
图 2 区块链技术架构
存储层:
区块链平台运行所产生的区块数据, 状态数据等需要存储到文件系统和数据库系统中. 区块数据存储了具体的交易信息, 其中需要利用默克尔树, 非对称加密等技术实现信息摘要与签名, 保证数据的完整性和一致性. 状态数据一般存储到数据库中, 也称之为世界状态, 其中会包括系统运行参数, 已注册帐号以及用户的智能合约字节码以及合约中存储的业务数据等信息.
区块链运行平台可以理解为一个分布式的状态机: 所有节点从同一个创世状态开始, 依次运行达成共识的区块内的交易, 驱动各个节点的世界状态按照相同操作序列 (增加, 删除, 修改) 不断变化, 实现所有节点在执行完相同编号区块后, 世界状态完全一致. 一个新节点加入网络, 如果是作为一个全量节点, 就需要从网络中其他节点同步所有历史区块信息, 验证区块的正确性, 并依次执行区块内保存的交易重构出世界状态, 直到与网络上其他节点区块高度一致时, 才完成了同步, 可以与其他节点一起继续进行新区块的共识挖矿.
网络层:
点对点网络主要功能包括实现网络拓扑, 交互共识协议信息以及广播 / 接收交易和区块信息等. 一个新的节点依赖与种子节点的交互, 实现网络邻居节点自动发现与组网, 形成去中心化网络拓扑. 不同的共识协议, 会有不同的协议相关网络数据包, 完成共识过程. 网络中的大部分数据报文, 是交易和区块数据包. 一个节点接收到用户交易时, 会广播到网络中并尽量传播到各个节点. 一个节点生产出来的区块, 也要求尽快传播到各个节点. 比特币初始设计区块大小 1MB, 出块时间间隔 10 分钟, 就是为使各个节点尽可能接收到其他节点广播的区块, 减少分叉区块的产生.
在区块生成时间间隔一定的前提下, 一个区块中包含的交易越多, 系统的处理性能就越高. 但一个区块能够包含多少交易, 一方面取决于节点 CPU 的处理性能, 另一方面取决节点的网络带宽. 一个区块内包含的交易执行总时长有限, CPU 处理性能越高, 能包含的交易就越多; 网络带宽的吞吐能力也是限制区块大小的一个因素, 网络层需要尽量在下一个区块生产前将当前区块广播至全网, 因此节点的网络带宽越高, 区块的大小就可以越大, 能包含的交易就越多. 这里所说的节点的 CPU 处理能力和网络带宽, 要考虑全网所有节点, 实际上受限于性能最差的节点.
共识层:
区块链的共识, 就是利用一定协议机制使所有节点对接下来要生产出的区块达成一致 (即区块内应该包括哪些交易). 我们可以想象成一个投票场景, 每人都可以提出自己的建议, 并且争取拉到足够多的投票. 投票权的分配要能够抵抗女巫攻击, 就是说不能使单一主体控制大量选票. 在现实世界, 我们可以按照选民身份赋予每个人投票权; 在数字化世界的中心化系统中, 我们利用注册机制(包括手机号, 验证码, 手持身份证照片, 活体检测等技术手段) 提高单一主体获得大量选票的门槛; 在去中心化的区块链领域, 没有了身份识别机制, 采取包括工作量证明 PoW, 权益证明 PoS, 委托权益证明 DPoS, 各种 PoX(PoET,PoA 等)以及 VRF 类算法等方法分配投票权.
PoW 要求节点找到一个数值使区块哈希值符合要求, 在寻找该数值过程, 节点需要投入大量算力. 节点找到了满足要求的数值, 就获得了投票权, 并同时提出了自己建议的区块(PoW 不需要投票环节, 先获得投票权的节点提议的区块为共识区块);PoS/DPoS 利用节点抵押的代币权益结合其他因素分配投票权, 并结合 BFT 投票确认环节, 选择共识区块; VRF 类算法则依赖密码学, 数学随机数等技术分配投票权, 经过 BFT 投票确认选择共识区块.
智能合约层:
各个公链采用不同的编程语言进行智能合约编写, 比如以太坊的 Solidity,EOS 的 C++,Ultrain 的 typescript 等. 智能合约编译为字节码, 并打包进交易信息上链进行存储. 各个节点接收到区块后, 提取其中包含的交易信息, 将字节码加载到虚拟机运行, 运行结果反应到世界状态中. 上链的字节码与开源的智能合约, 可以进行一致性校验, 从而保证节点实际运行的字节码与开源代码所显示业务逻辑一致, 提供公开透明的信任能力, 使能需要信任计算的商业场景. 需要指出的是, 目前出于安全角度考虑, 将智能合约完全开源后会极大降低黑客攻击门槛, 真正开源智能合约的项目并不多.
共识层一般称为 Layer 1, 智能合约层称为 Layer 2(因此存储层和网络层可以认为是 Layer0). 有很多项目在 Layer 2 智能合约层进行创新, 比如闪电网络, 去中心化交易所, 跨链机制等.
应用层:
各个公链的商业生态建设可以类比为谷歌的 Android 生态建设: 公链项目方类似谷歌角色, 提供软件平台; 矿机生产商类似手机硬件生产厂商, 提供软件运行硬件平台; 公链上层的丰富应用, 也称之为 DAPP, 类似 Android 的平台丰富的 App. 公链项目方将软件平台研发出来, 还需要提供开发工具, 举办活动等来吸引开发者为公链开发 DAPP, 打造一个繁荣的生态. 现在运行在公链上的 DAPP 以游戏, 溯源, 交易所等为主. 游戏利用区块链的公开透明机制, 可以将核心业务逻辑运行在区块链平台以示公平; 溯源等应用则主要是将相关流转信息记录在区块链平台, 利用其不可篡改特性, 供用户进行全生命周期历史信息查询, 比如有货高端运动球鞋交易信息在 Ultrain 公链上的溯源应用. 公链上运行的 DAPP 质量好坏, 数量多寡, 也是该公链是否健康发展的一个重要指标.
需要指出的是, 区块链技术架构的分层只是方便理解而进行的逻辑层面划分, 大部分项目还是紧耦合的单体软件形式. 随着区块链技术的发展, 已经有项目开始支持模块化开发, 比如支持更换网络模块, 共识模块等.
区块链的技术发展方向
区块链在资本和技术的推动下迅速发展, 落地场景越来越多, 已经开始切实为传统商业带来价值. 但区块链技术本身还有性能低下, 隐私保护不足, 安全问题频出, 缺乏有效治理手段等问题. 本节尝试描述区块链技术的几个重点发展方向.
1) 可扩展性提升
比特币的性能约为 3~7TPS, 以太坊约为 7~15TPS, 而中心化系统比如信用卡平台 2KTPS, 业界标杆淘宝的双十一处理能力约为 30W TPS. 许多公链项目努力提升区块链可扩展性, 主要包括如下思路:
共识机制:
比特币的工作量证明机制, 为保证区块的网络传播时间, 区块大小限定为 1M, 并调整哈希计算难度, 控制出块时间间隔保持在 10 分钟左右, 造成其性能比较低. 以太坊的 GHOST 协议利用叔块的工作量证明, 提高了出块率, 一定程度提高了处理性能. EOS 的 DPOS 则牺牲去中心化程度, 21 个得票最高的超级节点按照顺序出块, 每 0.5 秒生成一个区块, 每个节点连续出 12 块, 提高了出块效率. Ultrain 采用的共识机制兼顾去中心化与出块效率, 每轮利用数学随机数算法选择出块节点, 投票节点, 出块节点提议的区块得到大多数投票节点的认可, 即可生成区块.
DAG 结构:
比特币每次只选择一个区块延长主链, 为减少分叉区块限定了出块频率, 一些项目采用 DAG 结构, 实现可扩展性提升. 比如 Conflux 项目改变每次只选择一个有效区块的方案, 利用 DAG 结构将非主链有效区块按照 EPOCH 概念维护起来, 首先确定所有有效区块的顺序, 再确定区块内交易的顺序, 提高了处理性能.
分片分组:
目前区块链系统中每个节点存储全网状态, 处理全网的交易, 处理性能受限于网络中性能最差的节点. 分片分组就是按照一定规则将节点进行分组, 整个系统分成若干个相对独立的分片, 单个分片只处理部分交易甚至只存储部分状态, 多个分片并行处理, 提高系统的处理性能. 但分组分片后会带来安全性下降, 跨片交易处理复杂等问题: 比如网络有 1000 个节点, 发动 51% 攻击需要控制 510 个节点; 但是分为 10 个分片之后, 单个分片只需要控制 51 个节点即可发动攻击. Zilliqa 基于 PoW 结果随机分配节点到不同分片, 防止单个分片做作恶者控制; Ultrain 按照一定策略将全网节点随机调度到不同分片, 利用世界状态实现节点快速启动, 既保证了系统的安全性, 又提高了系统处理性能; Monoxide 则提出连弩挖矿概念提高单个分片的有效算力抵抗攻击. 跨片交易发生时, 片与片之间按照同步或者异步方式协助执行分片交易, 会增加通讯成本, 极限情况甚至会使系统性能低于分片之前. Zilliqa 交易类型将交易分片分配, Monoxide 则将交易中的原子操作分成多个, 通过异步消息传递完成交易接力执行.
侧链跨链:
侧链通过将部分操作转移到侧链以解决主链的性能瓶颈, 比如 Plasma 区块链, 其为树状结构, 每个分支为一条子链, 子链区块头的哈希值提交到根链, 根链只需要处理子链的少量提交, 使根链交易负荷有效降低. 跨链概念则更广泛一些, 链与链之间实现资产, 状态等跨链转移交换, 比如跨链项目 Cosmos, 其网络由 Hub / 枢纽与 Zone / 分区两部分组成, 分区之间通过枢纽进行交易, 并可以将交易转移至链下进行从而减轻链上交易处理压力.
层二方案:
前面介绍的性能提升手段一般称之为 Layer 1 解决方案, 还有一大类为 Layer 2 方案, 即在智能合约层利用一定机制实现链下执行交易, 仅在必要时候才将交易广播到网络中, 实现吞吐量的提升. 比如比特币上最近比较火热的闪电网络, 其主要思想是建立双向支付通道, 利用哈希时间锁定和哈希密钥锁定, 让双方在通道内反复任意多次交易, 最后通道关闭时再将初始和最终余额信息广播到比特币区块链.
2) 系统安全
区块链因为其价值网络的特殊性(攻击成功可以很快变现), 颇受黑客青睐, 安全事件频发. 按照慢雾科技统计, 仅 ETH 和 EOS 累计历史攻击数字货币损失额就高达 40 亿美元. 一个公链项目工程复杂度极高, 需要考虑各个层面的安全问题, 比如矿机层面涉及的主机系统安全, 暴露端口安全, 密钥存储安全, 网络拓扑规划, 最优系统配置等; 共识算法层面需防范相关的 51% 攻击, 无利害攻击, 长程攻击等; 智能合约层面的安全则更是重中之重. 一方面智能合约语言最佳实践不完善, 另一方面 DAPP 开发项目方经验不足, 代码实现互相借鉴, 黑客发现的一个漏洞可以攻击很多 DAPP. 智能合约中随机数生成也是一个重灾区, 项目方使用的随机数算法有漏洞, 黑客可以提前预测其数值, 稳定获取收益.
公链项目方需提升公链软件本身安全性, 并需提供矿机部署安全配置建议, 智能合约开发最佳实践等指导信息; 公链项目方也可以提供安全相关合约中间件给开发者使用, 比如 Ultrain 提供了随机数生成中间件, 可以帮助 DAPP 项目方有效抵御随机数相关攻击. 此外, 目前也有一些专注于区块链安全的公司, 提供代码安全审计, 形式化证明等服务为区块链的安全保驾护航.
3) 隐私保护
比特币构建了一个去中心化平台, 去除了对第三方的信任依赖, 但需要将所有的交易广播到网络上, 通过所有节点达成共识来保证系统的安全性. 攻击者通过分析特定地址的交易特征并结合一些实际信息, 就有可能得出交易地址与实际人的对应关系, 从而给使用者的隐私带来极大隐患. 另外也有一些业务场景要求将区块链的链上数据进行加密, 不允许公开访问, 比如企业间的具体交易数据, 病人的隐私数据等. 利用密码学技术, 实现不泄漏数据本身即可进行某些数据运算, 使对方完成数据的完整性与真实性的校验, 相关技术有多方信任计算, 同态证明, 零知识证明等. 随着区块链技术发展普及, 商业落地场景中隐私保护需求会越来越多. 隐私保护方面, Ultrain 公链已经提供零知识证明中间件供开发者使用.
4) 现实世界数据通道
区块链世界利用去中心化运行平台带来天然信任, 但是该信任只局限于链内数据. 许多商业场景的落地, 都需要智能合约与链外数据进行交互. 如何实现数据上链环节的信任机制, 成功连接现实世界与区块链世界, 这就需要用到预言机技术. 预言机是现实世界与区块链世界的桥梁, 是为区块链世界提供数据的中介. 但预言机只是作为数据源与区块链之间的安全可信的数据通道, 只保证数据不被篡改, 无法保证数据源的正确性. 用户可以获取多个数据源的数据, 在应用层对这些数据进行聚合, 得到最终的结果. 预言机的实现包括中心化方式, 如以太坊上运行的 Oraclize, 数据是由 Oraclize 公司架设的服务器提供; 去中心化方式, 如近期与 Ultrain 达成战略合作的 DOS Network. 预言机通过安全的数据通路和多信息源对比技术, 一定会促进越来越多的应用场景落地, 在区块链生态中的发展扮演越来越重要的角色.
区块链技术仍在迅速发展, 相关生态建设也在各方努力下不断向前推进, 区块链技术商业落地应用不断涌现, 对区块链技术能否成为新一代商业基础设施, 我们充满期待.
来源: http://www.tuicool.com/articles/EvuYvun