banner
leaf

leaf

It is better to manage the army than to manage the people. And the enemy.
follow
substack
tg_channel

智能合约初探:概念与演变

前言 ¶#

自 2009 年比特币开启区块链时代以来,近 10 年里,随着技术与生态的发展,基于区块链的分布式应用(dapp)呈现出井喷的趋势,而支撑着 dapp 的底层技术就是 “区块链 + 智能合约”。 智能合约与区块链的结合,普遍被认为是区块链世界中一次里程碑式的升级。第一个结合了区块链与智能合约技术的平台–以太坊的诞生,被认为是开启了” 区块链 2.0” 时代。

什么是智能合约 ¶#

1996 年,Nick Szabo 在文章《Smart Contracts: Building Blocks For Digital Markets》中提出了智能合约的概念。 所谓 “合约”,就是条文、合同一类的东西,里面记录了发生的条件与对应执行的条款,以支持确权等操作;所谓” 智能”,就意味着自动化、可编程。
所以,智能合约就是可编程的合同,也可以理解为一段自动执行的条文合同,在计算机中,就是一段自动执行的程序片段。它更易于合约保存,并且由确定的算法运行,给定输入,就得到对应的输出,极大保障了合约的执行力。 以自动售货机做类比,可以帮助我们更好地理解智能合约的核心特征。 当使用者选择好要购买的货物并完成支付,出货逻辑就会被触发,用户就能得到想要的货物,而这个过程不需要人工介入,节省了售卖货物的人力成本。如果要破坏这个合约,就得物理破坏售卖机。像 POS 刷卡机、EDI(电子数据交换)等,也可作此种类比。

智能合约与区块链 ¶#

智能合约在上世纪被提出,而区块链 2009 年才诞生,就定义而言,智能合约与区块链关系不大。 那为什么在这 10 年中,智能合约与区块链却产生了如此紧密的关联?因为区块链可以保证智能合约的不可篡改,不仅合约内容不可篡改,每次调用记录亦不可篡改。 智能合约产生价值的最基本前提是有一个强有力的底层介质用于储存,让其不可被物理破坏。
然而,智能合约的本体是一份代码,非常容易被篡改,如何为其提供强力的存储介质就成了问题。这正好是区块链擅长解决的 —— 通过比特币的实践,证明了区块链可以在分布式环境下让电子记录不可被篡改。 与此同时,智能合约也在反哺着区块链,它极大地扩展了区块链的业务场景。
与智能合约结合后,区块链不再服务于单一的货币支付,可以延申到生活中的方方面面。丰富的应用场景也对区块链的能力产生了新的挑战。

区块链 2.0:以太坊的诞生 ¶#

2009 年诞生的比特币,运用区块链等技术来保证生态,开创了区块链 1.0 时代。 用户可以通过脚本代码来定制一些内容,例如如何解锁一笔资金。这些脚本代码会随着交易一起保存,从而享有不可篡改的特质,并且是确定性的。所以从某种角度来说,这些脚本也可看作智能合约。可是它们并不好用。 首先,这些脚本代码不是图灵完备的,这限制了实现的功能;其次,开发门槛较高,编写复杂逻辑的体验会很差,好比用 JVM 字节码来写程序。
2013 年,一个青年 V 神提出了以太坊,其核心是通过世界状态对区块链数据进行更新和验证。以太坊与比特币最大的不同在于可通过智能合约执行复杂的逻辑操作。 在以太坊上,智能合约的语言是 Solidity,它是图灵完备且较为上层的语言,极大地扩展了智能合约的能力范畴,降低了智能合约编写难度。 正因为此,以太坊的诞生,也标志着区块链 2.0 时代开启。随后,智能合约技术逐步渗透了溯源、存证、供应链等多个业务场景。

智能合约的现状与前景 ¶#

从编程角度而言,智能合约就是一段代码。相比常规代码,智能合约具有许多差别与限制,例如:

  • 单线程执行
  • 代码执行会消耗资源,不能超出资源限制
  • 目前难以获取链外数据,例如取得天气信息、比赛结果等
  • 其他限制,如 TPS
    这些特点使得目前智能合约生态以链上资源的治理为核心。就像以太坊上各式各样的 ERC 标准与治理方案;EOS 上有各种资源模型,比如 CPU、RAM、兼经济模型、Rex、Bancor 协议等。 显然,就目前的生态而言,智能合约对现实世界的影响力有限。 但事物总是在发展的。目前,已有许多致力于突破这些限制的研究,典型的有 Oracle(谕言机,但常被称为预言机),它允许智能合约和链外进行交互,这样就能大大提高智能合约的使用场景,彷佛一台电脑通上了网;再比如那些突破链自身性能瓶颈的尝试,例如支付通道、跨链、plasma、rollup,它们都从不同角度打破安全与性能的枷锁。 毋庸置疑,智能合约将扮演着越来越重要的角色,将来随着以太坊 2.0 的落地,也许会开启新一个区块链时代。

智能合约技术 ¶#

以太坊采用了 Solidity 作为智能合约语言,Solidity 是一门为实现智能合约而创建的高级编程语言,能在允许以太坊程序的节点上运行。该语言吸收了 C++、JavaScript 的一些特性,例如它是静态类型语言,支持继承、库等。 除了 Solidity,每个平台的智能合约技术也有所不同,接下来将从公有链、联盟链作为切入,介绍其他平台所采用的技术。
公有链 ¶
首先,不妨先认识三大公链的智能合约技术。

图片

比特币系统#

比特币是在 2009 年由中本聪发明的一个数字货币,主要是为了反抗中心化的银行体系,因为其精巧的系统设计和安全性,价值也在迅速提升。同时,因为它并不与真实世界的身份绑定,具备强大的匿名性,也被用于非法交易、洗钱、勒索等恶意行为,引起了一些争议。
作为一个去中心化的区块链系统,所有人都可以访问,也可以在本地维护一个节点参与到比特币网络中,下文也会应用 Bitcoin Core 客户端在本地维护一个节点。

图片
节点分为全节点和轻节点两种,早期所有的节点都是全节点,但随着数据量越来越大,运行在手机或平板等设备上的比特币客户端不需要存储整个区块链的信息,称为 Simplified Payment Verification (SPV) 节点,也叫轻节点。
Bitcoin Core 客户端就是一个全节点,下文也会具体讲述。全节点一直在线,维护着完整的区块链信息;因为其内存里维护着完整的 UTXO 集合,所以通过验证整个区块链的区块和交易信息(从创世区块到最新区块)来验证交易的合法性;也会决定哪些交易会被打包到区块中;验证交易即挖矿,可以决定沿着哪条链继续挖,在出现等长的分叉时,也会选择哪一个分叉;同时监听别的矿工挖出来的区块,验证合法性。
轻节点不需要一直在线,也不需要保留整个区块链(数据量庞大),只需要保留每个区块的块头;且只需要保存与自己有关的区块,而不需要保存链上全部交易;因为并没有保存全部信息,无法验证大多数交易的合法性和网上发布的新区块的正确性,只能检验与自己有关的区块;可以通过 Merkle Proof 验证一笔交易存在,但不能确认一笔交易不存在;可以验证挖矿的难度,因为保存在块头中。
下面通过一个示例来讲解一下全节点和轻节点的交易验证方式。
假如要验证一个位于 block 300,000 的交易 T,全节点会查验全部 300,000 个区块(直到创世区块),建立一个完整 UTXO 的数据库来确保这个交易没有被花费;而轻节点则会通过 Merkle Path 来链接所有和交易 T 相关的区块,然后等待 300,001 至 300,006 个区块来进行确认,从而验证交易的合法性。

区块链结构#

区块链是由顺序链接起来的区块组成的一种数据结构,可以存于单文件或者数据库中,Bitcoin Client 使用 Google 的 LevelDB 数据库存储数据。每一个区块都指向前一个区块,任何一个区块进行了修改的话,其所有后面的区块都会受到影响,所以想要篡改一个区块的话需要同时篡改之后的所有区块,这需要大量的算力,往往成本大于收益,因此极大地保障了安全性。
区块链结构包含区块 Block Size (4 bytes)、Block Header、Transaction Counter (1-9 bytes) 和 Transaction 几个核心组成部分。
区块链的块头大小为 80 bytes,存储着 Version (4 bytes)、Previous Block Hash (32 bytes)、Merkle Tree Root (32 bytes)、Timestamp (4 bytes)、Difficulty Target (4 bytes) 和 Nonce (4 bytes)。
每一个区块的哈希值通过对区块头进行两次哈希运算,即 SHA256 (SHA256 (Block Header)),并不存在区块链结构中,而是由每个节点接收到区块后计算得到,是独一无二的;此外,Block Height 也可以作为区块的标识符。

Merkle Tree#

Merkle Tree 默克尔树是区块链中很重要的一个数据结构,主要通过哈希算法来验证较大数据集(也是通过双重哈希的方式 SHA256 (SHA256 (Block Header))),结构如下图所示:

图片
通过 Merkle Tree 的方式可以很快地验证一个交易存在于某个区块中(算法复杂度为 LogN),例如,如果要验证一个交易 K 存在于区块中,只需要访问很少的节点

图片
因为比特币网络中存在大量交易,这种方式能够极大提高效率,如下图所示:

图片
因为轻节点(例如手机上的比特币钱包)不保存整个区块链数据,通过 Merkle Tree 结构可以很方便地查找交易,轻节点会构造一个 Bloom filter 布隆过滤器来得到与自身相关的交易:

  1. 首先,初始化布隆过滤器为空值,获取钱包中的所有地址,创建一个检索模式来匹配与这个交易输出相关的地址,将检索模式加入布隆过滤器;
  2. 然后布隆过滤器被发送至各个节点(通过 filterload 消息);
  3. 节点收到后会发送一个包含符合条件的区块头和符合交易的 Merkle Path 的 merkleblock 消息和一个包含过滤结果的 tx 消息。
    过程中,轻节点会使用 Merkle Path 来链接交易与区块,并通过区块头来组成区块链,从而能够验证交易存在于区块链中。
    使用布隆过滤器会返回符合筛选条件的结果,也会存在着一些误报,因此返回了很多不相关的结果,也能够在轻节点向其他节点请求相关地址时保护了隐私性。
    比特币网络 #
    比特币系统运行在一个 P2P 点对点网络上,节点之间是平等的,没有身份、权限的区别;没有中心化的服务器,网络也没有层级区分。
    每个节点都要维护一个等待上链的交易的集合,每个区块大小为 1M,因此需要几秒才能够穿到大多数的节点。假设一个节点监听到了 A->B 的交易,会将其写入集合,如果同时又发现了一个 A->C 的双花攻击,则不会再写入,而如果监听到同样一笔 A->B 的交易或者同一个币来源的 A->C 的交易,则会将该集合中 A->B 的交易删除。
    比特币共识协议 #
    比特币作为一个人人都可以参与的开发系统,需要解决恶意节点的威胁,解决思路为工作量证明机制,也就是算力投票机制,当产生一笔新交易,广播新的数据记录,全网执行共识算法,即矿工挖矿来验证记录,即求解随机数,率先解出难题的矿工获得记账权,产生新区块,然后对外广播新区块,其他节点验证通过后加至主链。
    钱包 #
    作为一个数字货币系统,比特币有自己的钱包系统,主要由私钥、公钥和钱包地址三个部分组成。
    生成钱包地址的过程如下:
  4. 采用 ECDSA (Elliptic Curve Digital Signature Algorithm) 椭圆曲线算法,利用私钥生成对应的公钥
  5. 公钥很长且难以输入和记忆,因此再通过 SHA256 和 RIPEMD160 算法得到一个公钥哈希值
  6. 最后再用 Base58Check 进行处理,得到一个可读性较强的钱包地址
    交易过程 #
    有了钱包(和资产)后,就可以开始交易了。我们来通过一个典型的比特币交易来理解这一流程:
    A 和 B 都拥有一个比特币钱包地址(可以用 Bitcoin Client 生成,原理如上),假设 A 要给 B 转账 5 个 BTC,A 需要得到 B 的钱包地址,然后用自己的私钥对 A->B 转账 5 个 BTC 这笔交易签名(因为 A 的私钥仅有自己知道,所以拥有私钥则是拥有钱包资产的归属权);然后发布这笔交易,在比特币系统中发起交易需要支付小额矿工费作为交易手续费;矿工会开始验证这笔交易的合法性,得到六个确认后交易就可以被比特币账本所接受,整个验证过程大约 10 分钟。
    矿工为什么要消耗大量算力来验证交易呢?
    矿工在验证过程中可以得到出块奖励和矿工费,出块奖励会四年递减,因此,后期主要激励是矿工费。
    为什么验证要 10 分钟呢?
    比特币其实并不是绝对安全的,新交易容易受到一些恶意攻击,而通过控制挖矿难度把验证过程控制在 10 分钟左右则可以很大程度上阻止恶意攻击,这只是一种概率上的保证。
    比特币系统中怎么避免双重花费呢?
    比特币采用了一种叫 UTXO (Unspent Transaction Outputs) 的概念,当一个用户收到一笔 BTC 交易时,会计入 UTXO 中。
    在这个示例中,A 想要给 B 转账 5 个 BTC,A 的这 5 个 BTC 可能来自于两个 UTXO (2 BTC + 3 BTC),因此 A 在转账给 B 时,矿工需要检验的是这两笔 UTXO 在这笔交易之前有没有被花掉,如果检测已经被花费了,则交易不合法。
    下图很好地阐释了多笔交易的流向和 UTXO 的相关概念

图片
此外,UTXO 有一个很重要的特性,不可分割,假如 A 有 20 个 BTC,他想转账 5 个 BTC 给 B,那交易会先将 20 个 BTC 作为输入,然后产生两个输出,一个向 B 转账 5 个 BTC,一个返还给 A 剩下的 15 个 BTC,因此,A 又拥有了一笔价值为 15 BTC 的 UTXO;如果单个 UTXO 不够支付,则可以组合多个形成输入,但总额一定要大于交易额。
矿工怎么验证交易发起者有足够的余额呢?
这个问题看起来很简单,第一反应是像支付宝这样查询一下余额是否足够就可以。但比特币是一种基于交易的账本模式,并没有帐户概念,因此并不能直接查询余额,要想知道一个帐户的剩余资产,则需要回顾以前所有的交易,并且找到所有 UTXO 并相加。
交易模型 #
上文讲了一个交易是怎么发生的,那比特币交易由哪些部分组成呢?

图片
如图,最开始的部分是 Version,表示版本。
然后是 Input 相关的信息:Input Count 表示数量,Input Info 表示输入的内容,也就是 Unlocking Script,主要用于核对输入来源、输入是否可用以及其他输入的细节。

  • Previous output hash 所有输入都能追溯回一个输出,这指向包含将在该输入中花费的 UTXO,该 UTXO 的哈希值在这里以相反的顺序保存
  • Previous output index 一个交易可以有多个由它们的索引号引用的 UTXO,第一个索引是 0
  • Unlocking Script Size - Unlocking Script 的字节大小
  • Unlocking Script 满足 UTXO Unlocking Script 的哈希
  • Sequence Number 默认为 ffffffff
    接着是 Output 相关的信息,Output Count 表示数量,Output Info 表示输出的内容,也就是 Locking Script, 主要用于记录输出了多少比特币,未来支出的条件以及输出的细节。
  • Amount 以 Satoshis (最小的比特币单位) 表示的输出比特币数量,10^8 Satoshis = 1 比特币
  • Locking Script Size 这是 Locking Script 的字节大小
  • Locking Script 这是 Locking Script 的哈希,它指定了使用此输出必须满足的条件
    最后是 Locktime,表示一个交易可以被最早添加到区块链的时间 / 块,如果小于 500 million 的话直接读取块高度,而如果大于 500 million 则读取时间戳。

比特币脚本#

在交易中有提到 Unlocking script 和 Locking script,那什么是比特币脚本呢?
比特币脚本是记录在每个交易中的指令列表,当脚本被执行时可以检验交易是否有效、比特币是否可以使用等。一个典型的脚本如下

<sig> <pubKey> OP_DUP OP_HASH160 <pubKeyHash> OP_EQUALVERIFY OP_CHECKSIG

比特币脚本是基于栈从左至右执行的,使用 Opcodes 对数据进行操作,在上面这个脚本语言中,<> 包含的是要被推入 stack 的数据,没有 <> 包括、以 OP_ 为前缀的是操作符(OP 可省略),脚本也可以嵌入数据永久记录在链上(不超过 40 bytes),所记录的数据不会影响 UTXO。
在交易中, 是 Unlocking script,OP_DUP OP_HASH160 OP_EQUALVERIFY OP_CHECKSIG 部分是 Locking script。
跟大多数编程语言相比,比特币脚本是非图灵完备的,没有循环或复杂的流程控制,执行起来很简单,不论在哪里执行结果都是确定性的,也不会保存状态,且脚本与脚本之间是相互独立的。因为以上特征,虽然比特币脚本相对安全,但没办法处理很复杂的逻辑,因此不适合用来处理一些复杂的业务,Ethereum 所提供的智能合约就在这一点上实现了创新性的突破,因此诞生了很多去中心化应用。

挖矿#

在上文对整个交易过程中提到了挖矿,接下来我们详细讲一下。
有的节点为了得到出块奖励和矿工费,赚取收益,因此会对交易进行验证,称为矿工挖矿。出块奖励由 coinbase 创建,每四年会递减,从 2009 年的 25 个,到现在已经减少为 6.5 个。
挖矿其实是一个不断尝试随机数以达到某个设定目标值的过程,如小于某个 target 值,这个难度是人为设置来调整验证时间、提升安全性的,而不是解决数学难题。
矿工们会不断尝试这个值,成功率很低,但是尝试次数可以很多,因此,算力强的节点有成比例的优势,更容易解出难题。
那挖矿难度为什么要进行调整呢?
因为在比特币系统中,出块时间太短容易出现分叉,如果分叉过多则会影响系统达成共识,危害系统安全性。比特币系统通过难度调整把出块速度稳定在 10 分钟左右,从而防止交易被算改。
挖矿难度是如何调整的呢?
系统会在每产生 2016 个区块时(约两周)调整一次目标阈值,存在块头中,全网所有节点需要遵从新的难度进行挖矿,如果恶意节点不调整代码中的 target 的话,诚实的矿工则不会认可
目标阈值 = 目标阈值 * (产生 2016 个区块的实际时间 / 产生 2016 个区块的预计时间)
比特币诞生之初,矿工很少,挖矿难度也较低,大多都是用家用电脑(CPU)直接挖矿;随着越来越多的人参与到比特币生态中,挖矿的难度也越来越高,慢慢开始用一些算力较强的 GPU 进行挖矿,也有一些专用的 ASIC (Application Specific Integrated circuit) 专用挖矿芯片以及矿机随着市场需求逐步诞生;而现在也出现了很多大型矿池,集合了全网大量算力进行集中挖矿。
在这种大型矿池系统中,Pool Manager 担任了全节点的作用,而集合的大量矿工会一起计算哈希值,最后通过工作量证明机制来分配收益。但算力过于集中容易产生一些中心化风险,如某个大型矿池达到了全网 51% 以上算力的话就可以对交易进行回滚或者对某些交易进行抵制等。
分叉 #
比特币系统中,也会有未达成一致性意见的情况发生,称为分叉。分叉是主要分为两种类型,一种是状态分叉,往往是一些节点故意进行的;另一种称为协议分叉,也就是说对比特币协议产生了一些分歧。
协议分叉又可以分为两种类型,一种叫硬分叉,也就是对于协议的部分内容产生了不可兼容的修改,比如将比特币的块大小由 1M 调整为 4M,这种分叉方式是永久的,从某个节点开始形成了两条平行发展的链,比如 Bitcoin Classic,形成了两种币。
另一种则叫软分叉,比如还是调整比特币的块大小,但是从 1M 调整为 0.5M,这样调整后,就会出现新节点挖小区块,旧的节点挖大的区块的情况,软分叉是非永久性的,比较典型的例子是对 coinbase 的内容进行修改以及 P2SH (Pay to Script Hash) 产生的分叉。

Bitcoin Core 客户端#

Bitcoin Core 是比特币的实现,又被称为 Bitcoin-QT 或 Satoshi-client,可以通过这个客户端连接至比特币网络、验证区块链、发送与接收比特币等。有 Mainnet、Testnet 和 Regnet 三个网络,可以进行切换。
提供了一个 Debug Console 来与比特币区块链直接进行交互,常见操作如下:
Blockchain

  • getblockchaininfo: 返回有关区块链处理的各种状态信息
  • getblockcount: 返回区块链中的块数
  • verifychain: 验证区块链数据库
    Hash
  • getblockhash: 返回所提供的区块哈希值
  • getnetworkhashps: 基于指定数量的最近块,返回每秒网络哈希数
  • getbestblockhash: 返回最佳块的哈希值
    Blocks
  • getblock: 返回块信息的详细信息
  • getblockheader: 返回有关区块头信息
  • generate: 立即将指定数量的块挖矿到钱包中的一个地址
    Wallet
  • getwalletinfo: 返回一个对象,该对象包含有关钱包状态的各种信息
  • listwallets: 返回当前加载的钱包列表
  • walletpassphrasechange: 更改钱包密码
    Mempool
  • getmempoolinfo: 返回内存池活动状态的详细信息
  • getrawmempool: 返回内存池中的所有交易详细信息
  • getmempoolentry: 返回给定交易的内存池数据
    Transaction
  • getchaintxstats: 计算关于链中交易总数和速率的统计数据
  • getrawtransaction: 返回原始交易数据
  • listtransactions: 返回给定帐户的交易列表
    Signature
  • signrawtransaction: 签署原始交易的输入
  • signmessage: 使用地址的私钥对信息进行签名
  • dumpprivkey: 获取私钥
    Network
  • getnetworkinfo: 返回 P2P 网络的状态信息
  • getpeerinfo: 返回每个连接网络节点的数据
  • getconnectioncount: 返回节点的连接数
    Mining
  • getmininginfo: 返回包含挖掘相关信息的对象
  • getblocktemplate: 返回构造块所需的数据
  • prioritisetransaction: 以较高或较低的优先级接受交易进入挖掘的块

总结#

以上就是对比特币核心技术的一些解读,主要从它的基础原理和数据模型层面进行了一些深入了解,通过对比特币的学习,能够很好地理解区块链的设计理念和运行机制,接下来将会对被称为区块链 2.0 的以太坊进行学习和分析,敬请期待!

参考资料#

  1. COMP7408 Distributed Ledger and Blockchain Technology, Professor S.M. Yiu, HKU
  2. Udacity Blockchain Developer Nanodegree, Udacity
    Ethereum 核心技术解读 #

前言#

比特币作为一种去中心化的数字货币,是极其成功的,但受限于比特币脚本(非图灵完备,只能处理一些简单的逻辑),并不能处理很复杂的业务。而 Ethereum 引入了智能合约,使去中心化的概念能够应用于更丰富的应用场景,因此也被称为区块链 2.0。本文将对以太坊核心技术进行解读,如有错漏,欢迎交流指正。

Ethereum 系统#

2014 年 1 月,俄罗斯开发者 Vitalik Buterin 发布了以太坊白皮书并成立团队,旨在创造一个集成更通用的脚本语言的区块链平台。其中一位成员 Dr. Gavin Wood 发布了一份黄皮书,涉及 Ethereum Virtual Machin (EVM) 以太坊虚拟的相关技术,这就是 Ethereum 的诞生

图片

简单来说,Ethereum 是一个开源的去中心化系统,使用区块链来存储系统状态变化,因此也被称为 “世界计算机”;它支持开发者在区块链上部署运行不可变的程序,称为智能合约,因此可以支持广泛的应用场景;它使用数字货币 Ether 来衡量系统资源消耗,激励更多人参与 Ethereum 系统建设。

去中心化应用 DApp#

狭义来说,DApp 其实就是一个集成了用户界面、支持智能合约、运行于以太坊区块链上的应用。

图片
如上图所示,Ethereum 应用实例部署在区块链网络上(智能合约运行于区块链虚拟机中),而 Web 程序只需要通过 Web3.js 对区块链网络进行 RPC 远程调用,这样用户就可以通过浏览器(DApp 浏览器或 MetaMask 等插件工具)访问去中心化服务应用了。

账本#

Ethereum 区块链是一个去中心化的账本(数据库),网络中的所有交易都会存储在区块链中,所有节点都要本地保存一份数据,并且确保每一笔交易的可信度;所有的交易都是公开且不可篡改的,网络中的所有节点都可以查看和验证。

账户#

当我们需要登录一个网站或系统(比如邮箱)时,往往需要一个帐号和一个密码,密码通过加密算法以暗文的形式存储在中心化的数据库中。然而,以太坊是一个去中心化的系统,那是怎么生成账户的呢?

和比特币系统原理类似

首先生成一个仅有自己知道的私钥,假设为 sk,采用 ECDSA (Elliptic Curve Digital Signature Algorithm) 椭圆曲线算法生成对应的公钥 pk
采用 keccak256 算法对公钥 pk 求哈希值
截取后 160 位作为以太坊的地址
用户的私钥和地址一起组成了以太坊的账户,可以存储余额、发起交易等(比特币的余额是通过计算所有的 UTXO 得到的,而不是像以太坊一样存储在账户中)。

其实 Ethereum 账户分为两种类型,上述方式生成的叫 Externally Owned Accounts (EOA),外部账户,也就是常规用户拥有的账户,主要是用来发送 / 接收 Ether 代币或者向智能合约发送交易(即调用智能合约)。

而另一种则是 Contract Accounts,合约账户,不同于外部账户,这种账户是没有对应的私钥的,而是在部署合约的时候生成的,存储智能合约代码。值得注意的是,合约账户必须要被外部账户或者其他合约调用才能够发送或接收 Ether,而不能自己主动执行交易。

钱包#

存储和管理 Ethereum 账户的软件 / 插件称为钱包,提供了诸如交易签名、余额管理等功能。钱包生成主要有两种方式,非确定性随机生成或根据随机种子生成。

Gas#

Ethereum 网络上的操作也需要 “手续费”,称为 Gas,在区块链上部署智能合约以及转账都需要消耗一定单位的 Gas,这也是鼓励矿工参与 Ethereum 网络建设的激励机制,从而使整个网络更加安全、可靠。

每个交易都可以设置相应的 Gas 量和 Gas 的价格,设置较高的 Gas 费则往往矿工会更快处理你的交易,但为了预防交易多次执行消耗大量 Gas 费,可以通过 Gas Limit 来设置限制。Gas 相关信息可以通过 [https://etherscan.io/gastracker](Ethereum Gas Tracker)

图片

智能合约#

上文提到,Ethereum 区块链不仅仅存储交易信息,还会存储与执行智能合约代码。
智能合约控制应用和交易逻辑,Ethereum 系统中的智能合约采用专属 Solidity 语言,语法类似于 JavaScript,除此之外,还有 Vyper、Bamboo 等编程语言。智能合约代码会被编译为字节码并部署至区块链中,一旦上链则不可以再编辑。EVM 作为一个智能合约执行环境,能够保障执行结果的确定性。
智能合约示例:众筹 #
让我们想象一个更复杂的场景,假设我要众筹 10000 元开发一个新产品,通过现有众筹平台需要支付不菲的手续费,而且很难解决信任问题,于是,可以通过一个众筹的 DApp 来解决这个问题。
先为众筹设置一些规则

  1. 每个想参与众筹的人可以捐款 10-10000 元的金额
  2. 如果目标金额达成了,金额会通过智能合约发送给我(即众筹发起人)
  3. 如果目标在一定时间内(如 1 个月)没有达成,众筹的资金会原路返回至众筹用户
  4. 也可以设置一些规则,比如一周后,如果目标金额没有达成,用户可以申请退款
    因为这些众筹条款是通过智能合约实现并部署在公开的区块链上的,即使是发起者也不能篡改条款,且任何人都可以查看,解决了信任问题。
    完整代码可以点击这里查看:https://www.toshblocks.com/solidity/complete-example-crowd-funding-smart-contract/

交易#

在 Ethereum 中,一个典型的交易是怎么样的呢?

  1. 开发者部署智能合约至区块链
  2. DApp 实例化合约、传入相应值以执行合约
  3. DApp 对交易进行数字签名
  4. 本地对交易进行验证
  5. 广播交易至网络中
  6. 矿工节点接收交易并进行验证
  7. 矿工节点确认可信区块后广播至网络中
  8. 本地节点与网络进行同步,接收新区块

架构#

工具进行查询。

图片

智能合约#

上文提到,Ethereum 区块链不仅仅存储交易信息,还会存储与执行智能合约代码。
智能合约控制应用和交易逻辑,Ethereum 系统中的智能合约采用专属 Solidity 语言,语法类似于 JavaScript,除此之外,还有 Vyper、Bamboo 等编程语言。智能合约代码会被编译为字节码并部署至区块链中,一旦上链则不可以再编辑。EVM 作为一个智能合约执行环境,能够保障执行结果的确定性。

智能合约示例:众筹#

让我们想象一个更复杂的场景,假设我要众筹 10000 元开发一个新产品,通过现有众筹平台需要支付不菲的手续费,而且很难解决信任问题,于是,可以通过一个众筹的 DApp 来解决这个问题。
先为众筹设置一些规则

  1. 每个想参与众筹的人可以捐款 10-10000 元的金额
  2. 如果目标金额达成了,金额会通过智能合约发送给我(即众筹发起人)
  3. 如果目标在一定时间内(如 1 个月)没有达成,众筹的资金会原路返回至众筹用户
  4. 也可以设置一些规则,比如一周后,如果目标金额没有达成,用户可以申请退款
    因为这些众筹条款是通过智能合约实现并部署在公开的区块链上的,即使是发起者也不能篡改条款,且任何人都可以查看,解决了信任问题。
    完整代码可以点击这里查看:Demo

交易#

在 Ethereum 中,一个典型的交易是怎么样的呢?

  1. 开发者部署智能合约至区块链
  2. DApp 实例化合约、传入相应值以执行合约
  3. DApp 对交易进行数字签名
  4. 本地对交易进行验证
  5. 广播交易至网络中
  6. 矿工节点接收交易并进行验证
  7. 矿工节点确认可信区块后广播至网络中
  8. 本地节点与网络进行同步,接收新区块

架构#

图片

Ethereum 采用的是一种 Order - Execute - Validate - Update State 的系统架构。在这种架构下,当产生一笔新的交易,矿工会进行 PoW 工作量证明机制的运算;验证完成后,将区块通过 gossip 协议广播至网络中;网络中的其他节点接收到新区块后,也会对区块进行验证;最终,提交至区块链,更新状态。
具体来看,Ethereum 系统有共识层、数据层、应用层等核心组件,其交互逻辑如下

图片

如上图所示,Ethereum 数据由 Transaction Root 和 State Root 组成。Transaction Root 是所有交易组成的树,包含 From、To、Data、Value、Gas Limit 和 Gas Price;而 State Root 则是所有账户组成的树,包含 Address、Code、Storage、Balance 和 Nonce。

总结#

以上就是对 Ethereum 核心技术的一些解读,智能合约的引入给区块链的应用带来了更多可能性,但仍有很多安全性、隐私性和效率问题需要考虑。针对复杂的企业级应用场景,联盟链是更好的选择,后续将会对 Hyperledger Fabric 进行详尽的分析,敬请期待!

参考资料#

  1. COMP7408 Distributed Ledger and Blockchain Technology, Professor S.M. Yiu, HKU
  2. Udacity Blockchain Developer Nanodegree, Udacity

EOS#

Pomelo Coin EOS 简介 Pomelo Coin EOS 是区块链巫师 BM (Daniel Larimer) 开发的类似于操作系统的区块链架构平台,旨在实现分布式应用的性能扩展。EOS 在数百个 CPU 或集群上提供账户、认证、数据库、异步通信和程序调度。这项技术的最终形式是一种区块链架构,可以支持每秒数百万次的交易,普通用户不用支付使用费

EOS.IO 的https://github.com/EOSIO/Documentation/blob/master/zh-CN/TechnicalWhitePaper.md](白皮书):#

EOS.IO 软件引入一种新的区块链架构设计,它使得去中心化的应用可以横向和纵向的扩展。 这通过构建一个仿操作系统的方式来实现,在它之上可以构建应用程序。 该软件提供帐户、身份验证、数据库、异步通信和跨越数百个 CPU 内核或集群的应用程序调度。 由此产生的技术是一种区块链架构,它可以扩展至每秒处理百万级交易,消除用户的手续费,并且允许快速和轻松的部署去中心化的应用。
EOS.IO 的白皮书还讲到了 EOS.IO 在设计之初的几个主要目标:

  • 支持成百上千的用户
  • 免费的使用
  • 简单升级和 bug 修复
  • 低延时
  • 时序性能
  • 并发性能
    这其中,最吸引人的应该就是所谓的每秒处理百万级交易,因为有了这样级别的处理能力才能让区块链有了真正的大规模应用的可能性。与之相对应的有 Ethereum,初期的测试网络的处理能力是 25 笔交易每秒,经过逐渐的优化之后,可能可以达到 50-100 笔交易每秒。而这 50-100 笔的每秒交易笔数显然是不能满足大规模应用的,在 2017 年时候出现的爆红一时的
    Cryptokitties(以太猫)就很明显的暴露了这个问题。
    支持百万级别的每秒交易笔数也是 EOS.IO 相对 Ethereum 来说最核心,也是最本质的革命。
    当然,先别高兴的太早,究竟能不能实现,我们之后再来探究。
    识算法
    EOS.IO 采用委托股权证明算法,全称是 delegated proof of stake,缩写就是 DPOS.
    DPOS 最早在数字货币的应用应该是 BitShare(比特股),也就是 ByteMaster 的第一个区块链产品,最早的时候是为了出一个基于区块链的去中心化交易所和去中心的化的区块链银行,所以出现了一个称为比特股内盘的平台,有兴趣的可以去这个地址看一下什么是比特股内盘。
    在这里要提到比特股内盘的原因是,比特股是一个很好的体现 ByteMaster 想法的应用,也正是因为其中存在的质押模式,让 EOS.IO 最近受到了很大的质疑。这个我们也在后面再谈。
    先简单介绍一下 DPOS,后面在考虑单独出一篇文章介绍一下各种不同的共识算法。
    DPOS 顾名思义,就是讲共识机制委托给对应的人进行决定。以比特股作为例子,DPOS 会让每一个持有比特股的人进行投票,产生 101 位代表,这 101 位代表每个人拥有相同的权益,而最终的来决定哪一条链是有效的真实的链,则是由这 101 位代表的情况来决定。
    这听起来是不是有点像人大会议或者是议会制度?由多数人选出少数人,再由这部分少数人来投票出最后的决定。而这样的投票最终的目标是确保没有任何人能够篡改历史。
    具体为什么这样的模式可以做到这一点,可以参考 Steemit 上 dantheman 在 2017 年 6 月发表的文章《DPOS Consensus Algorithm - The Missing White Paper》。
    想要看中文翻译的版本的,可以参考奚海峰在万云 BaaS 上发表的翻译稿,可以在此看到当时的具体内容。

回到 EOS.IO 来看共识算法,基于 DPOS 的 EOS.IO 会每三秒产生一个新的区块,这个区块必须由投票产生的 21 位生产者轮流生产出来,这样,完成一个轮回之后,就会重新选出 21 位生产者。选择的过程中,获得票数数量的前 20 名自动被选中,剩下的一个生产者则需要按照得票比例来选出。
可能只是这样简单的说会比较不好理解,之后可以根据具体的代码来做进一步的分析。
其余的特性

  • 交易确认: 15/21(也就是所谓的一个节点可以等待 21 个生产者中的 15 个给出确认来确认现有交易的合法性)
  • EOS.IO 允许长度在 2 到 32 个字符之间的自定义名称来作为索引。账户支持命名空间(简单来说就是支持 @)。同时,账户支持权限管理,允许权限映射和权限评估。而最特别是支持恢复被盗的密钥:原理和大家现在用的微信找回密码需要多个活跃好友发送消息验证非常类似。
  • EOS.IO 支持区块生产者使用并发算法来调度交易

EOS EVM 简述#

EVM 指的是以太坊虚拟机。 在以太坊生态系统中,它是一系列的智能合约,允许开发者部署和运行使用 Solidity 编写的去中心化应用程序(dApp)。 EOS EVM 是对以太坊 EVM 的模拟,并位于 EOS 智能合约中。
EOS EVM 将提供与该领域其他 EVM 同等的功能,但具有无与伦比的速度、性能和兼容性优势。 这些优势归功于 EOS EVM 的架构设计和 EOS 原生系统的强大特性。
EOS Native 在大规模采用中所扮演的角色
尽管目前的重点是 EOS EVM,但 EOS Native Layer 仍然是生态的旗舰产品。 随着 Leap v4.0.0 的即将发布,EOS Native 将与 EOS EVM 一起继续创新。
EOS Native 是用 C++ 编写的,这是一种在传统开发者中非常受欢迎的语言,拥有速度和强大的库优势。 它经常被用于对性能有严格要求的技术项目,如操作系统和游戏。
由于这种底层架构,基于 EOS Native 构建的智能合约更加高效、强大,并且经常受到从 Web2 或其他传统计算机科学领域进入 Web3 领域开发者的青睐。 随着 GameFi 的兴起,EOS Native 仍然是一个实现大规模采用的强大载体平台,它使那些已经在 Web2 环境中构建的游戏开发者能够根据需求,无缝集成 Web3 元素。
随着 EOS Native 基础设施优化工作的持续开展,以及目前来自以太坊生态系统的工具在 EOS EVM 上的推出,可以预见 EOS 生态将出现在任何其他生态系统中都不可能的出现的创新机会。 基于此,EOS 正将自己定位为一个积极的正和开发环境

EOS EVM 技术细节#

EOS EVM 的幕后开发工作中发生了很多事情,以确保它最大限度地提高性能和易用性。 下面我们将要介绍过去一年中实施的一些创新设计选择。

图片

Architecture of Silkworm#

图片
最初,Silkworm 的开发专注于创建和测试分离的各个阶段。Erigon 用于为这些阶段准备数据库状态。后来,工作开始于实现两个阶段,这取决于与对等体的交互(通过 Erigon 提供的 Sentry 组件),以及 Silkworm StageLoop 的组装,并将不同的二进制文件(每个阶段一个)转换为可用的产品,所有阶段都集成到一个二进制文件中。

如图所示,目前正在负责下载块体和维护状态根哈希的阶段上进行工作。
Erigon 的执行时间 vs Silkworm 的执行时间

图片

参考资料#

Want to learn more, check out the Erigon blogs
https://erigon.substack.com/p/current-status-of-silkworm-and-silkrpc
https://erigon.substack.com/p/staged-sync-and-short-history-of?s=w

联盟链#

除了公链,联盟链也是重要的区块链类型。比之公链,联盟链共识的复杂度被大大缩减,因此具有更高的执行效率。 联盟链受企业级机构青睐,一般而言,相关机构之间会形成联盟,通过联盟链来共享数据。联盟链可覆盖供应链金融、司法存证、溯源等多种场景,未来还会与 IOT、AI 等技术结合。 在当今联盟链生态中,除去采用 chaincode 的 Fabric,大部分平台都采用 Solidity 作为智能合约语言,FISCO BCOS 即是如此。
联盟链是介于公有链和私有链之间,具备部分去中心化的特性。
联盟链是由若干机构联合发起,由盟友共同来维护,它只针对特定某个群体的成员和有限的第三方开放。

什么是联盟链#

联盟链是区块链的一种。所谓联盟链,简单来说,是指由多个机构或组织组成的、并且共同控制的区块链。个人或组织想要接入某个联盟链,必须得到授权。

目前,在讨论区块链时,大家通常根据区块链的开放程度,将区块链公有链、私有链、联盟链三类。公有链就是比特币、以太坊那种,任何人都可以随时接入,获得链上的数据或向链上提交新的数据。当然,你也可以随时退出网络。私有链是指那些由单个机构或组织控制的区块链。这种区块链不开放给别人参与,只有自己内部使用。

而联盟链则介于公有链与私有链之间,它的成员由多个机构或组织组成。因此它不像私有链那样,由某个组织独自掌握控制权;但也不会像公有链那样,任何人都能访问。
联盟链的英文为「 Consortium Blockchain 」,我觉得「联盟」这个词翻译得非常好,即使不作任何解释,我们也能从「联盟链」这个名字里体会到它的特点。
Solidity 可谓占据了智能合约的 C 位,掌握 Solidity 是学习智能合约和区块链的重要一环。
后面系列也将对如何用 Solidity 编写、运行以及测试智能合约作深入介绍解析,敬请关注。 除了 Solidity,WebAssembly、Libra 的 Move 等一些智能合约语言也在发展中,可以保持关注。
2016 年的时侯,联盟链是非常火热的,当时的公链还处于探索阶段,以太坊也不够成熟,这给了很多联盟链涌现的机会。所以说,从技术上来看,联盟链其实非常强劲,毫不逊色于著名的区块链项目,下面我们就一起来看看联盟链技术。
简介
  联盟链源自于 Vitalik 对区块链的概念分类,是他第一次提出了联盟链的说法,联盟链的英文是 Consortium Blockchain。
  我们回顾一下联盟链。所谓联盟链,就是这个区块链具有准入许可,不像公链,任何人都可以随时进入,准入许可意味着候选节点进入区块链时需要得到已经在网络中的节点的许可。  
  所以联盟链也叫做许可链,也就是 Permisson Chain,这个叫法在国外比较常见。联盟链的节点数通常不多,维护成本相比公链要低。
  有关联盟链与公链的概念区别,它们的区别仅仅是看新加入的节点是否要经过全网中其他节点的许可,这决定了一个区块链是否开放,开放程度决定了项目生态的大小,这也是最直观的区别。
  联盟链的技术框架很多,其中又以超级账本项目下的技术框架最为知名,应用也最为广泛,它基本代表了联盟链,所以,今天我们就重点来介绍一下超级账本项目。
超级账本 HyperLedger
  超级账本在 2015 年年底被发起,吸纳了众多重量级公司加入,它们包括大家耳熟能详的 IBM、Intel、Accenture、日立、JP 摩根、Digital Asset Holdings 等公司。
  超级账本的代码和组织结构都结构清晰、层次分明。可以说无论从声势还是实力上来说,它都可以完胜公链。
  例如,超级账本组织是会员制的,加入超级账本需要缴纳一笔入会费,入会费决定了你的会员等级。再如,超级账本 Frabric 的架构设计简直就是教科书级别的,干净利落、模块清楚,几乎挑不出毛病。
 
超级账本由 Linux 基金会主持,宗旨是构建一个面向企业应用场景的开源分布式账本技术平台。

  因为企业应用场景的多样性,所以超级账本包含了不只一个项目,它是由多个项目组成的。一共 9 个项目,其中 5 个是主要的技术框架,其他 4 个是辅助性工具。
  它的主要技术框架分别是下面的 5 种。
  1.Hyperledger Fabric :没有中文名,暂译【纺布克】,是 IBM 提供的,超级账本第一个项目。 纺布克旨在用模块化架构作为开发区块链程序或解决方案的基础,允许一些组件 —— 例如共识算法和成员管理变成即插即用的服务。
  2.Hyperledger Sawtooth:中文名【锯齿湖】,Intel 提供,是超级账本第二个项目。 锯齿湖是一个可以创建、部署和运行分布式账本的模块化平台,基于硬件依赖的 PoET 共识,可以面向大型分布式验证器群,同时也比较低功耗。
  3.Hyperledger Iroha:没有中文名,暂译【伊路哈】,由 Soramitsu 提供。 伊路哈是为了将分布式账本技术简单容易地与基础架构型项目集成而设计的一个区块链框架。
  4.Hyperledger Burrow:没有中文名,暂译【掘地者】,由 Monax 提供。 掘地者提供了一个模块化的区块链客户端,提供了权限管理的智能合约虚拟机,它部分建立在以太坊虚拟机(EVM)规范的基础上。
  5.Hyperledger Indy:没有中文名,暂译【因迪】。 因迪是特别为去中心化的身份而建立的一种分布式账本。它提供了基于区块链或者其它分布式账本互操作来创建和使用独立数字身份的工具、代码库和可以重用的组件。
  另外 4 个辅助性工具是:Cello、Composer、Explorer、Quilt,这四个辅助性工具可以对以上 5 个框架进行管理,例如 Composer 可以类比 Docker 中的 Composer,Explorer 就是区块浏览器。
  我们不排除随着超级账本的发展,还有新的技术框架加入,当然,也可能存在既有的框架被市场淘汰。不过这些都不是本文的重点,所以我们不作过多介绍,你可以通过查阅超级账本官方网站获得更多内容。
1. 纺布克 Fabric
  纺布克是由 IBM 提供的,它基于 Go 语言,前身是 Openchain 项目。在超级账本成立之初,Openchain 的代码量就已经达到 4 万行了,随着项目的推进,项目成员对 Openchian 进行了重构,也就是我们看到的纺布克 1.0 版本。
  纺布克提供了比较完备的模块化组件,如下图所示。

图片
它的架构上分成了:成员关系管理、区块链服务、Chaincode 服务三个大模块。
  成员关系管理相当于账户和权限管理系统,区块链服务提供了区块链一样的账本结构,Chaincode 服务相当于智能合约。
  成员关系管理是基于 PKI 的成员权限管理,平台可以对接入的节点和客户端的能力进行限制。
  区块链服务提供一个分布式账本平台,多个交易被可以被打包进一个区块中,多个区块单向链接成一条区块链。区块链代表的是账本状态机发生变更的历史过程,这与公链区别不大。
  Chaincode 包含核心的业务处理逻辑,并对外提供接口,外部通过调用 Chaincode 接口来改变账本数据,在纺布克中,Chaincode 是运行在隔离环境中的,也就是 Docker。
  纺布克的一个可能的工作模式如下图

图片
如果 Chaincode 运行在 Docker 中,我们按照经典的 IT 架构来分析,可以发现纺布克基本就是经典分布式系统的升级版,它可以提供宕机容错,可插拔的共识模块让用户自行选择是否需要拜占庭容错。

2. 锯齿湖 Sawtooth#

  锯齿湖也是一个高度模块化的区块链技术框架,它基于 Python 语言,1.0 版本之后和纺布克一样,作为一套稳定的框架,它已经有了实际的应用了。
  它是第一真正意义上提供拜占庭容错共识选项的超级账本项目,有以下四个特点。

  1. 链上治理:利用智能合约进行投票运营成员管理彼此之间的关系。
  2. 高级交易执行引擎:可以并行处理交易的创建和验证,性能可观。
  3. 支持以太坊智能合约:兼容了以太坊智能合约技术栈。
  4. 支持主流语言编写智能合约:编写智能合约不局限 Solidity,可以是 Go、Javascript、Python 等语言。
      相比以上四个特点,最引人注意的其实是锯齿湖提供了一个新的共识算法,叫做 PoET(Proof of Elapsed Time),它的中文译作:时间流逝证明。
      如果你熟悉 Raft 共识算法的话,我们知道 Raft 算法是一类强 Leader 的共识算法,选举 Leader 的时候,每个节点自己倒计时(CountDown),最先数完的那个成为候选人。
      这个过程叫做超时选举(Election Timeout)。每个节点每轮选举中得到的倒计时时间是不同的,它的代码实现为随机产生,通常是 150 毫秒到 300 毫秒。
      PoET 与上述规则类似,只是倒计时时间的产生变更为硬件依赖的,这里的硬件目前是由英特尔提供的 SGX,Software Guard Extensions,它可以提供可信的程序执行环境。
      SGX 提供了一种名为 Enclave 的机制,它支持两个函数 “CreateTimer” 和 “CheckTimer”。CreateTimer 用于从 Enclave 中产生一个计时器。
      CheckTimer 会去校验这个计时器是不是由 Enclave 产生并验证是否已经过期。如果满足这两个条件就给该节点开具一个证明,这个证明可以被其他节点验证,验证通过则表示同意该节点成为记账节点。
      我们看出,PoET 共识算法的拜占庭容错是由 SGX 保证的,具有一定的硬件依赖。
      锯齿湖官方提供了的四种工作模式:开发模式、PoET 模式、PoET 仿真模式以及 Raft 模式。
      可以发现,锯齿湖相当于是 Raft 协议的变种版本,选择 Raft 模式使得锯齿湖可以退化成经典分布式系统。
    3. 掘地者 Burrow
      掘地者也是一个基于以太坊 EVM 的智能合约执行引擎的区块链技术框架,最初项目名叫 Eris,它是基于 Go 语言构造的。
      掘地者主要由下述组件组成。
  • 共识引擎:提供了基于 Tendermint PBFT 算法的高性能拜占庭容错共识算法。
  • 应用程序区块链接口 ABCI:为共识引擎和智能合约引擎提供接口规范。
  • 许可型以太坊虚拟机 EVM:权限许可是可以通过本地安全接口强制绑定到智能合约上,其他与以太坊智能合约一样。
  • API 网关:提供 REST 和 JSON-RPC 两种 API 接口。
      掘地者也是模块化的分布式账本技术,提供许可型的智能合约执行环境,它也基于 EVM 规范。除了 Tendermint PBFT 共识算法,没看到与纺布克的的区别。

4. 伊路哈 Iroha#

  以上几个技术框架,基本都是通用技术框架,不涉及业务概念。伊路哈是第一个关注资产创建和管理的区块链平台,通过名字我们也可以发现是一个日本公司主导的项目。
  伊路哈具有如下特征。

  • 可以帮助人们创建和管理多样化的复杂资产,例如货币、不可分割的权利、产品序列号和专利等等;
  • 提供基于域名分类的账户管理机制,类似 “子账本” 系统;
  • 提供权限管理;
  • 系统本身提供验证业务逻辑规则,以及交易查询接口。
  • 相较于纺布克和掘地者是 Go 语言开发,伊路哈是使用 C++14 开发的。

5. 因迪 Indy#

  因迪也是一个从身份出发去构建一个分布式经济系统的技术框架。
  因迪具有如下的特征。

  • 基于多冗余拜占庭容错 RBFT(Redundant Byzantine Fault Tolerance)实现的共识算法,叫做 Plenum。
  • 意图通过构建去中心化的身份来打造分布式账本。
  • 全局唯一性的身份,无需中心化授权。
  • 基于 W3C 标准的身份属性和格式;
  • 提供零知识证明手段。
      因迪与其他通用技术框架显得非常不同,对身份的研究或许会成为因迪的突破点,这点与元界的数字身份很像。

BaaS 与 BTaaS#

  超级账本很多技术框架是可以依托云计算来帮助企业进行快速搭建的,当然 IBM 和微软已经开始这么干了,他们将它称之为 BaaS(Blockchain As A Service)。
  我们进一步思考,例如比特币提供了全球支付的功能,那么这种功能是否可以植入到云服务中呢?
  答案是肯定的。对于诸多有支付需求的应用来说,自己搭建比特币节点,并且结构化区块到数据库中是非常痛苦的过程,毕竟比特币全节点提供的 API 有限,而我们的查询需求可能细致到交易输出和脚本签名。
  所以,把比特币转化成 PaaS 服务也是另外一种 BaaS 思路。
  因此,我们把原来的 BaaS 概念拆成了两种:

  • BaaS 是指把公链提供的服务转化成云计算中的 PaaS 服务的过程;
  • BTaaS 是指把区块链技术框架转化成 PaaS 服务的过程。

图片

联盟链的困境#

  超级账本系列技术框架很好地诠释了分布式账本技术走到极致是什么样子的。
  这里也可以看出,几乎所有的超级账本项目都是技术主导,技术的强大也让他们忽视了市场的真实需求。
  联盟链是少数节点之间的活动,它往往退化成微观经济中的博弈,所以利用联盟链构建少数节点之间的协作系统不是一个技术问题,而是变成了如何构造一个稳定的微观经济模型使得协作者可以达成帕累托改进,在这里,技术变成了次要的。
  再好的技术工具如果不结合有效的激励和反馈机制,那么联盟链的应用落地过程似乎变得异常艰难,它很可能最后沦落为普通的分布式系统,这个分布式系统仍然是中心化的。
公链、私链和联盟链

公链#

是完全去中心化的一类区块链,BTC 和 ETH 就是。交易信息公开透明,任何人都可以交易和读取信息,也都可以加入 / 退出节点。私密性,无法知道参与者的真实身份。缺点是交易成本高,需要多数节点验证一笔交易。
全球十大公链:BTC,ETH(以太坊),ICP,ADA(艾达币),VET,TRX,NEO(小蚁),EOS,XTZ,ETC(以太坊经典,ETH 硬分叉之前的主链)

联盟链#

部分去中心化,节点加入需要验证和授权。这些节点再根据共识机制协调工作。这是部分去中心化的区块链,民众可以进行查阅和交易,不过验证交易的话就需要联盟内部决定。 适用于多机构联合的场景,如供应链金融、跨境清算等。
典型代表:目前由四十多家银行参与的区块链联盟 R3 和 Linux 基金会的超级账本项目都是联盟链架构。以 Hyperledger Fabric 为例,系统通过引入 PKI 体系,提供 成员管理、认证、授权、监控、审计等安全管理功能。同时 Fabric 提供了一个模块化的分布式记账方案,提供高度保密性、弹性、灵活性和可扩展性,如共识机制的可插拔。 它的目的是支持不同组件灵活选择,以适用不同应用场景。
私链

私有链是对单独的个人或实体进行开放的区块链系统。系统内的每个节点的权限都需要组织来分配,对每个节点开放的数据量要视情况由组织来决定。优势是交易成本低,速度快, 因为不需要每个节点验证交易,少量节点就可以完成。 其次是更好的私密性,因为读取数据的权限受限,参与者无法读取链上与自己无关的数据。(适用于需要监管的场景)。 某种程度来说,私链与传统应用没有太大差别,仅仅是适用了分布式账本技术,记账规则、节点、权限控制都是企业自己制定。
私链的价值主要是在企业内部提供安全、可追溯、不可篡改、自动执行的运行平台,同时防范来自内部对数据的安全攻击,传统平台不容易做到这点,适用场景有内部审计、数据库管理等。

三者核心区别#

三大类型区块链的核心区别,在于访问权限的开放程度,或者叫去中心化程度。本质上,联盟链也属于私有链,只是私有的程度不同。

一般来说,去中心化程度越高、 信任和安全程度越高,交易效率则越低。

由于联盟链和私链中的节点加入均需要认证和授权,所以它俩又称许可链。

从技术上介绍#

区块链更像是一门交叉学科,结合了 P2P 网络技术、分布式账本、密码学、共识机制、宏观经济学、经济学博弈等等知识,构建的一个新领域 —— 针对价值互联网的探索。
分布式数据库是区块链的物理载体,区块链是交易的逻辑载体,所有核心节点都应包含该条区块链数据的全副本。区块链按时间序列化区块, 且区块链是整个网络交易数据的主体,区块链只对添加和查询有效,对其他操作无效!
区块链是一套协议,一组规范,而不是具体代码、项目,理解了这套协议,你可以基于现有的技术,以不同的语言去实现它。
比喻

  • 金融业的人会说区块链是一个分布式账本,是一个分布式的银行记账系统
  • 密码学者的会说区块链是使用密码学构建的去信任网络
  • 码农可能会说区块链就是一个确保最终一致性的分布式数据库

区块链技术的迭代(1.0->2.0->3.0)
1.0 时代指的是以比特币为代表的虚拟数字货币时代,特征是区块上只存储了用于数字货币交易的相关数据;同时还涌现了其他数字货币,如莱特币、点点币、瑞波币等;
2.0 指的是数字货币与智能合约相结合的时代,以太坊是其典型代表。特征是具备了虚拟机、智能合约与分布式应用(DApp),

其中智能合约是关键特征;在 2.0 时代,人们尝试创建可共用的 区块链技术平台,并向开发者提供区块链及服务(BaaS),这使得分布式身份认证、分布式域名系统、分布式自治组织等 DApp 的开发变得十分容易。同时,智能合约 的部署与实施也促进了自动化交易的发展,大幅提高了交易效率,降低了交易成本。

3.0 是人们对区块链构建的价值互联网的探索理想,目前尚未到来。价值互联网的核心是由区块链构造一个全球性的分布式记账系统,它不仅仅能够记录金融业的交易, 而是几乎可以记录任何有价值的能以代码形式进行表达的事物:对共享汽车的使用权、信号灯的状态、出生和死亡证明、结婚证、教育程度、财务账目、医疗过程、保险理赔、投票、能源。 因此,随着区块链技术的发展,区块链会超越金融领域,进入社会公证

区块链技术想要进入 3.0 时代,还必须解决以下问题:

  • 可扩展性:目前比特币和以太坊处理交易的效率都太低,远低于传统企业级应用;

  • 隐私保护:区块链公开透明的特性,允许人们可以通过区块链浏览器查看其他用户数据。

  • 虽然达氏币、门罗币、大零币在这方面的研究作出了许多努力,但都限于 数字货币领域,还远远不够。

  • 3.0 时代允许用户存储更多样化的数据,如医疗数据、个人征信等用户隐私数据,没有人希望自己的隐私暴露在公共目光下。

  • 合法合规:区块链的开放性和匿名性给各国政府监管带来严峻的挑战。未来区块链技术的健康发展,需要在政府监管要求下进行,没有监管,就无法约束,当用户利益受到 损害时,也无法进行维权。

核心技术#

区块链使用的 p2p 网络通信技术或许给了我们另外一种选择:人皆生而平等,没有谁生来就是 server,就是 client。每个节点都是平等的,既是生产者也是消费者。

有人可能会问,p2p 网络就能保证不作恶,不宕机,数据不被篡改么?别急,p2p 网络只是为所有节点提供了信息交换的方式。做事的还是 共识算法和加密算法。

1. 分布式账本#

DLT(distributed ledger technology)本质上是一种能够在网络中的多个节点上进行数据分享、复制和同步的去中心化、新型分布式数据存储技术。想对于 传统分布式存储系统,DLT 特征如下:

  • 效率高
    传统分布式存储系统采用一种受控于某一中心机构的数据管理机制,在面对数据爆炸性增长的数据量时,面临着巨大挑战,即不得不持续性追加投资构建大型数据 中心,造成系统规模和复杂度不断推升。这不仅带来了计算、网络、存储等各种庞大资源池建设问题,也带来了严峻的系统可靠性问题。
    而 DLT 基于一定的共识规则,采用多方决策、共同维护的方式进行数据存储、复制等操作。其所具有的的去中心化数据维护策略恰恰可以有效减少系统臃肿负担,同时 在某些应用场景中,甚至可以有效利用互联网中大量零散节点所沉淀的庞大资源池。
  • 安全性高
    传统分布式存储系统中的数据是受控于单一机构组织,这样的管理机制在数据可信、网络安全方面的短板已经逐渐收到人们的关注。用户无法确定自己数据是否被服务商 窃取、篡改或非法使用,在收到黑客攻击或数据泄露时无能为力。
    在 DLT 中,各个节点都是各自拥有独立的、完整的数据备份,各节点之间彼此互不干涉、权限等同,通过相互之间的周期性或事件驱动的共识达成数据存储的最终 一致性。任一节点或少数集群对数据的修改,均无法对全局多数副本造成影响。换句话说,无论是服务提供商在无授权情况下的蓄意修改,还是网络黑客的恶意攻击, 均需要同时影响到分布式账本集群中的大部分节点,才能实现对数据的修改。
  1. P2P 网络
    又称为点对点网络或对等网络。它没有中心服务器,其中每个用户都兼具客户端 / 服务器的角色。
    这个技术其实早已应用多年,如 BT 下载,迅雷,P2P 聊天等。它相对于传统 B/S 架构系统的独特优势是:
  • 快速且保障隐私:用户之间无需所谓服务器中转,直接通信,通信数据不经手他人。
  • 数据容错:P2P 网络中,资源都是分布式存储于各节点的,有足够的冗余,比特币区块链系统中甚至是一个节点存储了全部数据。这样的好处是没有单点故障。
  • 稳定性:不会出现某些节点退出 / 故障而导致系统瘫痪。
  1. 共识算法
    在去中心化的系统中,想要保持节点数据一致性,就需要共识算法。
    区块链系统中,所有账本通过哈希指针连接起来,并规定选择最长链作为主链(DAG 区块链除外),每个节点都在主链末尾添加区块,收到其他节点发来的区块时, 也是根据主链末尾区块进行验证并更新区块链的。所以,区块链中的共识机制的核心问题就是如何选择每一轮的记账节点,哪个节点有权在本轮中创建区块。
    目前这个问题已有多种方案,如 PoW,PoS,DPoS。
    共识算法可以分类为 证明类、随机类、联盟类。其中,证明类常见的有 PoW 和 PoS,前者证明记账节点的算力,后者证明记账节点拥有系统虚拟资源的权益。随机类常见 的是通过依赖随机数字选取打包节点的 Algorand 和 POET3。联盟类有代表委托权益证明 DPoS 是以民主集中式轮流获得记账权。

3.1 PoW 算法#

它是 BTC 系统采用的共识机制,其核心思想是当一个新的区块将要加入 BTC 系统中时,区块链系统中的各个节点将去争相解决一个数学难题来获得该区块的记账权, 同时获得 BTC 给予的奖励。由于高算力节点在解决难题上会以大概率胜出,因此高算力节点将比低算力节点更有机会获得记账权并获得 BTC 奖励。
PoW 算法的核心是寻找一个能够满足系统给出的一道哈希计算题条件的 Nonce 值,过程就是不断的变换 Nonce 值进行哈希计算,在全网节点中,谁算得快谁就获得 本轮的记账权,所以这个算法本质是算力比拼。(消耗计算资源,不环保,所以会逐渐被其他方案替代)

3.2 PoS 算法#

为了解决 PoW 算法浪费计算资源的问题,一种新的基于权益证明的 PoS 算法被设计出来。它是一种依赖记账节点在网络中的经济利益的共识机制。在 PoS 中,记账节点依据所拥有 的代币数量和持有代币的时间来获得币权,币权越高,节点越容易解决难题,也越容易获得记账权。
简言之:这个算法认为系统中最有钱的人是不会作恶的,因为会导致他自己损失最大。所以提出了币龄概念,一个币存一天就是一币龄,谁的币龄最大越拥有记账权, 所以它的本质是比拼币龄。
优点:缩短了达成共识的时间,记账效率远高于 PoW。挖矿简单,无需消耗巨大算力;
缺点:节点基于虚拟货币的币权获得记账权,在系统运行之初,可能会有垄断虚拟货币的现象出现,进而导致记账权的垄断。

3.3 DPoS 算法#

这个算法的机制有点类似人民代表大会制度,用户手里的币就是票,用户可以投票给有能力有信誉的节点,获票最多的节点将代表权益人去记账。以 EOS 为例,全网 投票选出 21 个超级节点,轮流去记账。本质上来说,它是 PoS 的扩展,比拼的还是币数量。 优点:大幅缩减了参与验证和记账节点的数量,提高了效率,可以达到秒级共识验证。
缺点:记账权更加集中在少数节点手里。
3.4 PBFT 算法
TODO

4. 密码算法#

4.1 非对称加密算法
先说对称加密,它的加解密都是用同一个密钥;而非对称则是用到公私钥两个密码串,理论上来说公钥和私钥互补,可用其中一个密码串加密,另一个密码串解密, 但实际使用时一般根据场景会有约定:如加解密场景是用公钥加密,私钥解密;而数字签名场景则是私钥加密,公钥解密(验证),数字签名的核心用途不是解密数据而是 验证数据的完整性和真实来源。现在多数区块链系统使用基于 secp256kl 的椭圆曲线密码算法。
4.2 哈希算法
又叫摘要或散列算法,或单向函数,是一种将不定长数据压缩成定长大小的字符串的算法,具有不可逆和低概率碰撞性的特点,好的哈希算法碰撞率更低。
它的主要用途是数据校验、数据摘要等;常见的哈希算法有 md5, sha-1, RipeMD-160, sha-256, sha-512 等。
4.3 编解码算法
编码的目的是将一长串、没有规则的字符串变得精简可读,它没有密码概念,根据所使用的编解码算法可以直接解码。在比特币中使用的是 base58 编码,其源自 base64, 去除了一些容易与其他字符混淆的字符,如数字 0,大写 O,小写 L,大写 i。

5. 嵌入式数据库#

传统的应用一般使用关系型数据库存储数据,如 MySQL 等,存储的数据一般有日志、用户数据和索引。而在区块链系统中,不管是比特币的 UTXO 模型,还是以太坊账户 模型,数据库存储的都是交易日志。例如,UTXO 模型的区块链中,只是将用户地址账号及其余额保存在 kv 数据库中;Hyperledger 等项目还包括一些类似状态存储的 模块。目前,几乎所有区块链系统中都不存在索引存储这样的模块。总的来讲,区块链存储结构比较简单。
目前,为了将时延降到最低,区块链系统一般采用嵌入式数据库存储数据,例如比特币早期使用的是 BerkeleyDB,后入加入了 LevelDB;Hyperledger 使用的 LevelDB,也支持 CouchDB。
嵌入式数据库指的是运行在本机上,不用启动服务端的轻型数据库,它与 app 紧密集成,随 app 启动而启动,终止而终止。常见的有 SQLite、BerkeleyDB、LevelDB、CouchDB。
嵌入式数据的优势:

  • 效率较高:不用运行什么数据引擎,app 直接调用 api 操作数据;
  • 体积适当:由于早期是为嵌入式系统设计,所以体积都比较小,也就是占用很少的 ROM,RAM 和 CPU 资源;
  • 功能齐全:日志管理、数据压缩、备份、恢复功能都有;
  • 可移植性:这方面远优于关系型数据库,一般都可以适用不同软硬件平台;
  1. 智能合约
    是运行在区块链上的一段经过共识的、代表合约的程序代码,在预订条件满足的情况下,能够实现合约中条款的自动强制执行,由以太坊平台首次引入。目前 以太坊与 Hyperledger Fabric 是较为成熟,且具有代表性的智能合约平台。
    智能合约的工作流程如下:
  2. 多方用户共同参与指定一份智能合约
  3. 合约通过 P2P 网络广播存入区块链
  4. 等待外部事件触发合约执行
    特点:
  • 合约一旦上链,不可篡改:存入区块中
  • 代码安全执行:一旦满足条件触发合约执行时,区块链平台中所有的全节点,都会将合约代码在安全沙盒环境中执行,不受外部环境影响。并在所有节点执行结果一致时, 才算是成功执行。
  • 结果透明公开:合约执行结果会记录在区块链中,公平公正公开
    目前存在的问题:人为漏洞。合约是程序员写的,必然会存在漏洞,常见的有浮点溢出、访问控制、返回值错误、拒绝服务等。甚至是故意导致的。。由于不可篡改特性,所以带来的风险后果是巨大的。 参考 2016 年以太坊的 The DAO 事件
    以太坊智能合约运行在以太坊虚拟机(EVM)中,该虚拟机为智能合约提供了一种图灵完备的脚本语言:Ethereum virtual machine code,这使得 任何人都能创建智能合约及其去中心化应用,并在其中自由定义所有权规则,交易方式和状态转换函数。以太坊智能合约包括账户、交易、Gas、日志、指令集、消息调用、 存储和代码库 8 个部分。该合约主要应用于公链。
    Hyperledger Fabric 智能合约实质上是在验证节点上运行的分布式交易程序,用于自动执行特定的业务规则,并最终更新账本状态。该合约部署后将被打包成 docker 镜像,每个节点基于该镜像启动一个新的 docker 容器并执行合约中的初始化方法,然后等待被外部调用。该合约具有图灵完备性,分为公开、保密和访问控制 三种类型,分别由拥有不同权限的成员发起,主要应用于联盟链,以及企业级的数字支付、金融资产管理、供应链金融等。
    区块链技术发展趋势
  1. 技术上迭代更新
    区块链技术没有广泛应用起来,最主要的问题之一就是现有技术本身具有一定缺陷。
    1.1 数据存储
    现有区块链技术为保证效率,多使用嵌入式数据库,只能保存单一 key-value 数据,这方面应用慢慢向 IPFS、关系型数据库、分布式数据库等方向发展,以满足 更复杂的应用。
    1.2 处理效率
    淘宝在双 11 高峰时,能达到 20W 的 TPS,而比特币区块链的 TPS 是 720,EOS 能达到 30005w,都还远远不够。
    1.3 系统安全
    即使是经过数学证明是安全的 PoW 算法,在极端情况下,即攻击不计成本控制全网 50% 以上算力时也会导致系统崩塌。其次,由于区块链架构的开放性,其安全考虑和 攻击手段也完全区别于传统中心化系统,如 DDOS 攻击、女巫攻击、日蚀攻击等。除此之外,隐私保护、密钥管理、智能合约安全都是待解决的问题。
    1.4 技术创新
    单一的区块链技术无法满足更为复杂的应用场景,所以区块链技术本身多链并举、跨链融合、联盟链和公链优势互补是必然要求,同时与其他产业的融合,如云计算、 大数据、机器学习等是必然趋势。
  2. 应用上脱虚入实

虽然目前区块链概念风靡全球,但其杀手级大规模应用还未出现。现阶段企业对区块链的研究集中于公链和联盟链,虽然已经出现了许多落地的区块链项目,但这些项目 都没有出现其不可替代的优势。所以,随着区块链产业发展,未来在医疗、版权、司法、工业、能源等领域大展身手也是非常重要的趋势。

区块链应用#

金融领域
区块链在国际汇兑、信用证、保险业务、股权登记和证券交易所等金融领域有着潜在的巨大应用价值。将区块链技术应用在金融行业中,能够省去第三方中介环节, 实现点对点的直接对接,从而在大大降低成本的同时,快速完成交易支付。
在保险理赔方面,保险机构负责资金归集、投资、理赔,往往管理和运营成本较高。通过智能合约的应用,既无需投保人申请,也无需保险公司批准,只要触发理赔条件, 实现保单自动理赔。
在跨境支付方面,该领域的痛点是到达周期长、成本高、交易透明度低。以第三方支付公司为中心,在支付过程中完成会计、结算和清算,到达周期长。 例如,跨境支付的到达周期超过三天,成本较高。没有第三方支付机构的加入,区块链具有去中介化、开放、透明、不可篡改的特点,缩短了支付周期,降低了成本,增加了交易透明度。
比如 Visa 推出基于区块链技术的 Visa B2B Connect,它能为机构提供一种费用更低、更快速和安全的跨境支付方式来处理全球范围的企业对企业的交易。 要知道传统的跨境支付需要等 3-5 天,并为此支付 1-3% 的交易费用。Visa 还联合 Coinbase 推出了首张比特币借记卡,花旗银行则在区块链上测试运行加密货币 “花旗币”。

数字货币#

区块链技术最广泛的运用是以比特币为代表的数字货币。近年来,数字货币发展迅速。由于分散信贷和频繁交易的特点,具有较高的交易流通价值, 可以通过开发对冲金融衍生品作为超主权货币来保持相对稳定的价格。
自比特币出现以来,数百种数字货币已经出现,围绕数字货币的生成、存储和交易形成了一个相对较大的产业链生态系统。以比特币为例, 参与者主要可分为基础设施、交易平台、ICO 融资服务、区块链综合服务等。
数字货币还可以解决纸币和电子支付存在的几个问题:

  • 一是纸币易匿名、伪造,存在洗钱风险
  • 二是基于现有银行账户紧耦合模式的电子支付,无法满足公众匿名支付的需求
  • 三是现有的纸币和硬币印制发行成本高、携带不便
  • 使货币创造、记账、流动等数据实时采集成为可能,并在数据脱敏以后,通过大数据等技术手段进行深入分析,为货币的投放、货币政策的制定与实施提供有益的参考, 并为经济调控提供有益的手段。与此同时,央行数字货币还能够在反洗钱、反恐融资方面提供帮助。
    加密数字货币近年来成为多个国家央行的研究重点。中国央行已经在 2020 年发布基于区块链的数字货币 DCEP,截止 2022 年 8 月,累计交易笔数 3.6 亿笔、金额 1000.4 亿元; 其他国家也相继推出自己的 CBDC(Central bank digital currencies,即中央银行数字货币)

价值互联网#

如果说现有的互联网已解决信息传播与分享的瓶颈,那么区块链要解决的就是资金、合约和数字化资产在互联网上交换、交易与转移的难题。
未来 20 年,是信息互联网升级为价值互联网的创业潮。
共享经济
近两年来,滴滴与 uber 之间的互联网租车争夺战,将 “共享经济” 推到了风口浪尖。这种个人与个人之间直接共享闲置资产的方式将通过区块链更加流行。因为区块链网络作为一个去信任去中心网络,让人们摆脱了个人与个人之间的信任危机以及中心化的非市场化运作。
比如法国一个去中心化的叫车平台 Arade City,司机与乘客直接交易。 而有些公司现在也正在做一个共享用户闲置磁盘空间的区块链应用平台。我们相信,唯数据与空间不可辜负,基于区块链技术,可让闲置的空间存储可被信任的加密数据。数据可以是用户自己的照片视频,也可以是某组织的业务数据。
智能合约
智能合约也是现在很火热的一个概念。简单的说,智能合约类似于计算机语言的 if 语句,当一个预先编好的合约的某一条件被触发时,就自动在区块链网络中执行合约相应的合同条款,而不需人为干预。 按照这样的愿景,未来律师的职责可能会大变样,律师的职责不是裁定个人合约,而是生产智能合约模板。定制性如何,易用性如何将决定合约的价格或者律师的身价。所以才会有笑谈:不会写脚本的律师不是好的码农。
物联网和物流领域
区块链在物联网和物流领域也可以天然结合。通过区块链可以降低物流成本,追溯物品的生产和运送过程,并且提高供应链管理的效率。该领域被认为是区块链一个很有前景的应用方向。

数字存证和版权领域#

通过区块链技术,可以对作品进行鉴权,证明文字、视频、音频等作品的存在,保证权属的真实、唯一性。作品在区块链上被确权后,后续交易都会进行实时记录,实现数字版权全 生命周期管理,也可作为司法取证中的技术性保障。NFT 也是数字存证的一项应用。
例如,美国纽约一家创业公司 Mine Labs 开发了一个基于区块链的元数据协议,这个名为 Mediachain 的 系统利用 IPFS 文件系统,实现数字作品版权保护,主要是面向数字图片的版权保护应用。

公益领域#

区块链上存储的数据,高可靠且不可篡改,天然适合用在社会公益场景。公益流程中的相关信息,如捐赠项目、募集明细、资金流向、受助人反馈等, 均可以存放于区块链上,并且有条件地进行透明公开公示,方便社会监督。
一个典型的应用案例就是 LenderBot, 是 2016 年由区块链企业 Stratumn、德勤与支付服务商 Lemonway 合作推出,它允许人们通过 Facebook Messenger 的聊天功能,注册定制化的微保险产品, 为个人之间交换的高价值物品进行投保,而区块链在贷款合同中代替了第三方角色。
溯源、防伪与供应链方向
溯源,顾名思义就是追踪记录有形商品或无形信息的流转链条。通过对每一次流转的登记,实现追溯产地、防伪鉴证、根据溯源信息优化供应链、提供供应链金融服务等目标。 区块链技术可给药品溯源、艺术品防伪、奢侈品防伪等交易提供可靠支持。

去中心化存储方向#

医疗方面,区块链最主要的应用是对个人医疗记录的保存,可以理解为区块链上的电子病历。目前病历是掌握在医院手上的,患者自己并不掌握,所以病人就没有 办法获得自己的医疗记录和病史情况,就像银行的帐看不到过往记录一样,对未来的就医会造成很大的困扰。如果可以用区块链技术进行保存,患者就能随时随地掌握 自己的医疗记录历史信息,以便去到任何医院就诊都可以立即出示给医生。
DNS 系统,现有 DNS 系统是建立在一家非营利性国际机构 ICANN,和集中的 DNS 服务器之上的,DNS 访问需要通过递归服务器 => 顶级域名服务器 => 权威服务器进行,复杂的访问 过程很容易让用户请求被劫持到另一地址。倘若顶级域名或权威服务器遭受 DDOS 攻击而故障,将会影响不计其数的互联网用户上网。而使用区块链技术能够在全球数以百万 个设备上存储信息,源头上解决了中心化服务器遭受攻击而停止服务的问题,同时也具备让用户请求免受审查的能力,也可以让网站免受封锁,而凭借共识机制可以保证用户得到的地址信息是正确的,避免被 劫持到虚假网站从而遭受诈骗。目前知名的区块链 DNS 服务是以太坊的 ENS、Handshake。

知名开源区块链项目#

1. 超级账本(Hyperledger)#

超级账本(Hyperledger)是 Linux 基金会于 2015 年发起的推进区块链数字技术和交易验证的开源项目,它是一组开源工具,旨在构建一个强大的、 业务驱动的区块链框架。加入成员包括:荷兰银行(ABN AMRO)、埃森哲(Accenture)、IBM 等十几个不同利益体,目标是让成员共同合作,共建开放平台, 满足来自多个不同行业各种用户案例,并简化业务流程。超级账本项目很适合联盟链,私有链的构建。现在超级账本的开源代码实现 Fabric 由 IBM 主持孵化,由 go 语言开发。
注意:它并不是一个区块链应用,而是一个包含构建区块链所需工具集合的项目;Fabric 是其核心实现。

2. 以太坊 (Ethereum)#

以太坊是一个运行智能合约的去中心化平台(Platform for Smart Contract),平台上的应用按程序设定运行,不存在停机、审查、欺诈、第三方 人为干预的可能。
以太坊是一个公链项目,也是由 Go 语言实现,同时它还催生了另一个高级语言 Solidity,专门用来写智能合约。

  1. 其他
    还有 Ethereum、Polkadot、Solana、Bitcoin、Filecoin 等。
    智能合约运行分析 ¶
    下面将分享一个基础的智能合约:HelloWorld。

图片
这段 Solidity 代码的功能是存取_num 字段。该字段被称为 “状态变量”,会由区块链持久存储。 用户可以将这段代码部署在以太坊或类似的区块链上,部署成功就意味着该智能合约不可再被修改,只要底层区块链不被销毁,这段合约就一直存在。任何人都可通过 “合约地址” 来调用该合约接口,每次调用信息都会被记录在链上。 在讲解这段代码如何运行之前,我们先

回顾下传统 java 程序的运行方式。

首先,用户编译完 java 代码后,会以字节码的形式保存在磁盘上;然后用户会调用程序,这由 JVM 来托管执行;程序执行期间可能会通过日志来记录调用参数,也可能会和磁盘进行 IO。 Solidity 的执行与此类似。不同的是介质由硬盘换成了区块链,由单机变为分布式。 代码部署后,以字节码的形式存储在每一个节点上。当用户要求调用某个函数时,调用请求将会被囊括在交易中,并被打包到某个区块上,一旦全网对该区块形成共识,就意味着调用是合法的。 接下来,EVM 会来调用字节码,它负责存取底层的状态变量,好比传统编程的 IO。

图片
光从代码来看,合约开发似乎不过如此,单个合约只需要围绕着字段进行操作,对于很多简单业务而言,不过是 CRUD 而已。 但其复杂性也恰恰在于此,合约在区块链环境上执行,是不可修改的。 所以如果出现了 bug,就必须部署新的合约,这对于合约的可维护性提出了挑战。并且,一旦业务复杂起来,容易出现安全漏洞,导致链上资产损失。同时,还要考虑完成代码编写、逻辑执行、数据存储的成本问题。 综上所述,写合约不难,但写好合约,却需要一定功底

加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。