Table of Contents:

todo

网站

OK 国际站:【www.okex.com】
火币网国际站:【www.huobi.pro】
币安:【www.binance.com】
中比特国际站:【www.zb.com】
中比特海外版:【www.exx.com】
比特儿海外版:【www.gate.io】
比特时代海外版:【www.aex.com】
元宝网海外版:【www.bcex.ca】
聚币海外版:【www.coinegg.com】
云币海外版:【www.big.one】
币久网海外版:【www.cex.com】
币赢网:【www.coinw.com】
kex:【www.kex.com】
国外交易平台
Bitfinex:【www.bitfinex.com】
B 网:【www.bittrex.com】
R 网:【www.rightbtc.com】
P 网:【www.poloniex.com】
L 网:【liqui.io】
H 网:【hashtoken.co】
CEO:【www.bite.ceo】
BTBT:【www.btbt.top】
HitBTC:【hitbtc.com】
bithumb:【www.bithumb.com】
coincheck:【coincheck.com/cn/】
bit-z:【www.bit-z.com】
去中心化交易平台
以德:【etherdelta.com】
比特股:【bitshares.org/wallet/#】
场外交易平台
local:【localbitcoins.com/zh-cn】
可盈可乐:【www.coincola.com/】
比特币世界【www.bitcoinworld.com/】
元宝场外交易【www.otc789.com/】
电脑看行情网站
非小号:【www.feixiaohao.com】
手机看行情软件:mytoken,aicoin
比特币、区块链新闻网站
金色财经:【www.jinse.com】
巴比特:【www.8btc.com】
bitcoin86:【www.bitcoin86.com】

第一章 浅说区块链基础 (8讲)

第1讲 | 到底什么才是区块链

09年诞生了比特币。差不多在2014 年左右,才真正有了“区块链”的概念

区块链和区块链行业

这个行业是通过比特币形成的。我们可以把比特币比作一棵树,这棵树在生长过程中不可避
免地会开枝散叶,慢慢长大,渐渐地,树变树林,几乎是以指数级增长的过程,树林又变成了森林,错综复杂,最终形成
了一个崭新的行业,这个行业我们称作“区块链行业”。
区块链具有自己的独特内涵,那么到底是什么内涵让这么多人“趋之若鹜”呢?
* 第一个是具有理想主义情怀的极客所提出的“去中心化”;
* 第二个是以赚钱为主要目标的投资者和生意人

前者为后者提供了极佳的赚钱土壤,后者为前者注入了赖以生存的资金。

前者组成了“链圈”,后者组成了“币圈”,以前这两个圈子“井水不犯河水”,现在却有融合的趋势
我再深入介绍一点,刚刚提到了“去中心化”,它更像是表达极客信仰的一面“旗帜”,我
个人更喜欢称之为“导火索”。
它把金融领域聪明的投资者与厉害的技术人才拧在一起,点燃了无数起“回归互联网平等、
自由、开放”的大讨论,任何人都可以从中构思挖掘自己熟悉领域的“区块链应用”,整个
过程在技术上看就是上文提到的“开枝散叶”,这个过程你也可以看成是区块链的发展过
程。

区块链究竟是什么

区块链与之最大的不同是整个系统本身具有自己的 Token。Token 在国内有的翻译成“通
证”,有的翻译成“代币”,其实最简单的理解就是“虚拟资产凭证”,它可以是我们的股
权,也可以是票据,也可以是游戏积分,凡是需要资产记账的地方都可以用 Token 来做。

第2讲 | 区块链到底是怎么运行的

本讲以一个虚拟的村子记账的场景的讲解区块链的运行
中心化记账的问题:需要解决信任问题,和防止中心造假作弊,审计的问题
中心化记账-->分布式记账
1. 公开记账
只记录交易,不记录余额
2. 创建创世区块
3. 交易
4. 打包 Transaction (挖矿)
需要算例证明,以决出打包权
5. 广播交易
6. 验证

第3讲 | 浅说区块链共识机制

分布式系统的经典问题: 拜占庭将军问题

区块链本质上也是分布式系统的一种,其共识机制也是为了上述问题而提出的解决方案。
本质:如何让众多完全平等的节点针对某一状态达成共识

什么是区块链共识机制?

共识机制是区块链是核心的组成要素之一,它决定了区块链的业务吞吐量、交易速度、不可
篡改性、准入门槛等等,是最为关键的技术要素之一。
共识机制主要解决了两个问题:
1. 谁有记账权利;
2. 如何避免记账者作弊。

另外,在比特币社区,“共识”(consensus)这个词已经跳出了技术的范畴。其内涵还包括比特币的
使用者、开发者、矿工达成了社区共识。

最经典的入门型共识机制:PoW 工作量证明

在 PoW 这种机制中,计算资源(又称算力)是决定记账权的唯一因素
如果一个作弊者想篡改区块里面的交易,首先得获得记账权。
而影响记账权的唯一因素只有计算资源(算力)的大小,如果想篡改交易,只能投入大量的
计算资源与整个系统中其他所有人进行对抗,这是十分困难的,尤其在整个系统有一定基础
计算资源(算力)的情况下

PoW 工作量证明的补充:解决双花攻击(double-spending)

所有记账节点都会遵循以下两条规则:
规则一避免了未确认的交易出现双花,规则二基本避免已经确认的交易中(信封中)的双花问题。
* 规则一:一个代币如果已经被花费,那么会被标记成已花费(utxo被消费),如果再次接收到这个代币被花
费的请求,那么记账节点会拒绝打包这笔交易;
* 规则二:如果同时接收到两个区块,这两个信封中装的两笔交易出现了一个代币被花费了两
次的情况,这种情况也就是我们所说的分叉(Fork),那么选择挖矿难度比较大的那个区块。

假设作弊者的计算资源(算力)占整个系统的 30%,那么连续两次获得记账权的概率是
9%,看起来作弊的可能性还是挺高的,如果是连续 6 次获得记账权呢?概率直降到万分之七。
试想,如果任何作弊者花了大量的成本获取了系统 30% 的计算资源(算力),最后只有万
分之七的概率获得篡改的可能性,比起作弊,还不如诚实记账的收益高。

第4讲 | 区块链的应用类型

数字货币应用方向

数字货币的运行则通常是靠社区自治的,所谓社区自治,是指用户、维护者、开发者三种角色共
同决定数字货币的发展,也就对应了上一篇文章中,我们所讲到的“共识”。
数字货币特点:
* 总量透明公开
数字货币的发行是在项目创建之初,是白皮书事先就规定好了的,白皮
书通常是一个区块链项目公开发布的一种阐述性文档,其中简述了项目的宗旨和愿景以
及设计蓝图。在白皮书中,这个项目总共发行多少数字货币,投资者、用户、矿工能够
获得多少也都是事先分配好的。数字货币的总量也分为两种,一种是总量设上限的,另
外一种是不设上限的。
* 数字货币缓慢释放
通常在矿工的那部分是需要靠“挖”才能出来的
* 代码执行规则:
数字货币的释放不再是人为控制,而是代码将负责控制数字货币的释放,这里去除了人为操作的因素

在区块链领域,一个项目的开始运营,就伴随着一个新的数字货币的产生,这个数字
货币会成为这个项目的基础代币,也有可能会派生出其他货币。

数字资产方向

虚拟资产一般包括有金融资产、游戏代币、数字版权、域名、用户流量等。由于虚拟资产
不需要与实体资产进行挂钩,所以在对应到区块链上更为方便。

比较成熟的应用类型

任何的区块链创始项目如果要活下去,就要先解决钱的问题,也就是融资问题。
任何的区块链项目基本都会产生一个基础代币,那么什么样的融资模式能让投资者和项目方都满意呢?
ICO(Initial Coin Offering)。
ICO的中文名是首次代币发行,又称为区块链众筹,这是一种新型的融资模式,投资者可以用手中的比特币或其他代币投到一些区块链创始项目
一个区块链项目发起之后,如果选择发起 ICO,相比传统融资渠道,项目方会在很短的时
间内融到资,且白皮书中规定好的代币将一次性地投放到投资者手里,并在短时间内上线数
字资产交易平台。数字资产交易平台也具有高流动性,这种高流动性为早期投资者提供了退出条件,这样投资
者的投资周期大大缩短,并且可以快速抽身。
ICO 技术虽然为所有区块链项目提供了周期短、效率高的融资模式,但在同时,ICO 也成了传销和内幕交易的重灾区。

以上举例说明了区块链在虚拟资产下的应用模式,而另外一个高产虚拟资产的领域——游
戏领域,也是区块链同化的对象。
不过,目前还没有特别成熟的案例,比较有名的是 2017 年走红的以太坊“养猫”游戏,但
我并不认为这意味着区块链真正踏入了游戏圈,这仅仅只是它的小试牛刀。
试想,你在游戏里的道具,如果可以在其他任何游戏进行使用,感觉是不是很棒。
当然除了虚拟资产,实体资产也可以用区块链进行应用,但是目前遇到的难题基本都是实体
资产如何与链上区块链的数据进行一一映射。
这涉及了数据公证等等环节,实施起来比中心化应用困难很多,比较典型的例子是区块链与
供应链结合,解决信息流、资金流、物流,“三流”合一的问题。
除了实体资产和虚拟资产,区块链最简单直接的应用还有公证公示领域,不过这里仅仅用到
了区块链“不可篡改”的特性。

第5讲 | 如何理解数字货币?它与区块链又是什么样的关系?

数字货币的概念

  1. 电子货币
    电子货币其实就是将法币电子化,例如,支付宝、微信、网上银行。
  2. 虚拟货币
    游戏代币、积分类、数字货币(加密货币)
  3. 数字货币
    数字货币通常是基于区块链技术、在全球范围内公开发行的、并且没有任何国家政府背书的虚拟货币

传统货币与数字货币

匿名性 vs 实名制
点对点 vs 中心化
自理型安全性 vs 托管型安全性
广区域流通 vs 国家内部流通

数字货币的发行过程

比特币的发行过程是通过挖矿维持的,是依靠矿工挖矿产生比特币。相当于矿工自己就是一
个小型的印钞机。
矿工每挖出一个区块,会产生一个Coinbase 交易,这个 Coinbase 交易相当于凭空产生了币,
矿工可以从 Coinbase 获得比特币,作为维护系统的奖励。
Coinbase 的产出是每 4 年衰减一半的,第一个 4 年是挖出每个块 50 个比特币,第二个
4 年的周期就是挖出每块产出 25 个
所以数字货币的发行过程可以认为是一个区块链项目的核心利益分配的过程,也是一个社区
激励的过程,如何把有限的代币派发给愿意为项目付出的社区人,是考量一个区块链项目运
营成熟度的重要指标。

第6讲 | 理解区块链之前,先上手体验一把数字货币

数字货币钱包

玩转数字货币钱包

  1. 获取钱包程序
    对于钱包程序来说,最重要信息的就是当前区块高度了,区块高度表示了当前你所在区块的
    序号,序号体现了你是否更新到了最新区块,而最新区块则决定了你能否查询到自己的交
    易。即规定了你所有交易账单的起始位置。
  2. 钱包文件与钱包账户
    当你第一次安装好钱包以后,使用钱包的第一件事情就是创建账户(或者钱包文件)。
    在区块链的世界,主私钥和助记词是操作资产的唯一途径,如果丢失,那么资产就丢
    失,不存在忘记助记词还能找回资产这回事。
  3. 钱包地址
  4. 获取比特币
    目前不存在人民币对数字货币的场内交易平台,所以想用人民币购买数字货币的各
    位只能选择场外交易,比较有名的平台有 coincola.com
  5. 区块链交易
    一般交易所都会提供 TXID,就是交易哈希,供用户查询,TXID 代表了这个区块链上某一个唯一的
    交易,我们可以根据 TXID 可以上区块浏览器上查询该币交易,
    比如某一笔比特币交易:
    https://blockchain.info/tx/6e64c2098b84b04a0d9f61a60d5bc8f5f80f37e19f3ad9c39bfe419db422b33c
  6. 发送比特币给别人

第7讲 | 区块链的常见误区

1. 数字货币没有背书,我为什么要用呢?

数字货币的机制和底层技术支持本身就是一个背书,

如果硬要说一说数字货币的背书,我认为,社区本身就是一种背书。
社区由用户、开发者、矿工三者组成的。
他们之间的利益相互绑定,用户使用数字货币决定了市场价格,开发者为数字货币开发了更
多的功能来提升生产效率,矿工是系统的维护者,三者包含了数量巨大的个体,每个个体都
相当于为数字货币作了背书

2. 数字货币是不是投机炒币?

数字货币出现的初衷并不是为了投机炒币,确切的说法应该是数字货币的特性刚好满足投机者的需求,即使没有数字货币,投机主义也
会存在并且长期存在,而且投机在金融领域并不是一个贬义词,它也是中性词汇。
投机者为整个交易市场提供了充足的流动性,商品价格波动风险被所有投机者所稀释,这是
一个健康的交易市场所必备的。所以数字货币是中立性的工具,我们应当理性看待。

3. 区块链是不是万能的?

区块链领域有个说法叫做“不可能三角”,意思是说区块链的“去中心化”“安全”“环保”三个要素不可能同时全部满足。
在分布式领域,有个著名的 CAP 定理,在 CAP 中:
Consistency 是一致性,表示同样数据在所有节点都是被复制成相同;
Availability 是可用性,表示所有节点都能够处理操作且能响应查询;
Partition tolerance 是分区容忍性,表示不同节点之间数据同步有意外情况产生时,能够容错。
一般情况下,CAP 理论认为你不能同时拥有上述三种,只能同时选择两种。所以,当我们
应用到区块链上时,可以明显地发现区块链其实是一个 AP 系统,尤其在 A 这个指标上,
也就是可用性做得非常好,所以相应地,C 就会降低,反映到具体系统中的交易吞吐量上,
自然会也会降低

4. 去中心化是不是区块链唯一的评价标准?

去中心化只是一个公有区块链应当具备的基本特性,但是我们衍生到区块
链应用层面的时候,其实去中心化往往并不能契合到一个公司的业务上,所以我在这里提
倡:当我们在思考区块链的解决方案时,还是应当以需求为第一导向。

5. 联盟链为什么没有公有链普及?

所谓联盟链,就是这个区块链具有准入许可,不像公链,任何人都可以随时进入,准入许可
意味着候选节点进入区块链时,需要得到已经在网络中的节点的许可,所以联盟链也叫做许
可链。联盟链的节点数通常不多,维护成本相比公链要低。
第一是观察者偏差,因为 To B 的业务往往是商务合作的形式,并不直接进入大家的视野,
实际上有很多大型机构已经尝试,或者已经部分落地了的联盟链业务。

6. 区块链是否会颠覆当下互联网?

持这种观点的大都是区块链的从业者,利益相关者。自然会说它的好话的。

第8讲 | 最主流区块链项目有哪些?

比特币

比特币曾经面临过区块容量不足的问题,但随着隔离见证的生效,网络拥堵的问题缓解了很多

以太坊

以太坊是一个区块链应用平台,它的极大创新在于它提供了智能合约这种可以自定义业务逻
辑的工具,智能合约是一种可编程的合约,合约是由用户编写并且部署到区块链上的
以太坊在 2014 年开始众筹,2015 年 3 月份正式运行,它采取的共识机制是 PoW,但根
据核心团队公布的方案,后期会逐渐迁移到 PoS 共识算法。以太坊的总发行量是:6000万 +1872 万 / 年,
目前的区块时间是 12 秒

瑞波币

瑞波币(Ripple)是一个比较另类的区块链项目,因为从本质上来说,它更像是一种支付
结算协议,瑞波币不需要挖矿,它是通过一种叫“Open Coin”的算法,提供瑞波协议共
识来达到记账的目的

瑞波币旨在为全球跨境机构提供了高效率的支付过程,提供较好的全球支付体验。因为涉及
了机构之间的资产转移,瑞波币被设计成需要准入许可才能进入瑞波的支付网络,这一点有
些像我们所说的联盟链
瑞波团队掌握了一半以上的瑞波币,所以瑞波币面临的币价被操纵的问题很严重。如果你是
一个技术极客,那么你可以略过该项目。如果你想创建一个有关支付结算的区块链项目,那
么一定要研究瑞波币。

莱特币

比特币的 Logo 颜色为金色,而莱特币的 Logo 的颜色为银色。一金一银。然后就成就了莱特币。
莱特币在技术上仅仅把比特币的挖矿算法修改成了 Scrypt 算法,Scrypt 算法是一个可参数
化、可配置的挖矿算法
莱特币作为比特币的先行者,它会替代比特币做一些具有实验性质的试运行

比特现金

比特现金仅仅是从区块容量上高于比特币,其他技术上的区别并不是很大。
比特现金的诞生要从比特币扩容之争开始谈起,由于比特币的区块容量是 1MB,随着用户
增多,交易愈发拥堵
所以围绕着提升网络容量,社区内部发生了分歧,“支持隔离见证”与”支持直接扩大区块
尺寸”分成了两派,这就是著名的扩容之争
比特币核心开发者们支持前者,矿工们支持后者,由于比特币核心开发者掌握了代码的控制
权,但是矿工掌握了记账权,所以两权发生了分离,矿工索性一拍大腿,你不改代码,我花
钱找人改,这就产生了比特现金。
比特现金作为社区共识分裂的产物,体现了区块链开放共识的特点,你不支持我,我分分钟
就可以独立出来

Tether(泰达币 USDT)

Tether 也是一个特殊的区块链项目,它为所有区块链资产提供了法币(主要是美元)兑换网关。
Tether 又称 USDT,言外之意就是和美元一对一锚定,用户存入多少美元,就会产生多少
USDT 进入虚拟资产网络。USDT 可以直接在虚拟货币交易所与比特币等其他区块链资产进行交易。
Tether 可以直接在二级市场流通,是数字货币交易市场重要的交易入口。另外,Tether 可
能存在被冻结和没收的风险。

匿名性区块链项目

匿名性区块链项目是指:使用交易匿名技术,让公开可查询的交易内容变成私密的匿名性区
块链项目。市值比较不错的有门罗币、达世币、Zcash 三种,它们分别使用了不同类型的
匿名技术,为区块链技术的匿名特性发展做出了贡献

国内的公有区块链项目

中国的公链项目不多,分别有 NEO、量子链、元界、公信宝、比原链

第二章 深入区块链技术 (15讲)

第9讲 | 深入区块链技术(一):技术基础

区块链的技术定义

区块链是一个提供了拜占庭容错、并保证了最终一致性的分布式数据库;
从数据结构上看,它是基于时间序列的链式数据块结构;
从节点拓扑上看,它所有的节点互为冗余备份;
从操作上看,它提供了基于密码学的公私钥管理体系来管理账户。

区块链在技术上的 7 个特征:
1. 区块链的存储基于分布式数据库;
2. 数据库是区块链的数据载体,区块链是交易的业务逻辑载体;
3. 区块链按时间序列化区块数据,整个网络有一个最终确定状态;
4. 区块链只对添加有效,对其他操作无效;
5. 交易基于非对称加密的公私钥验证;
6. 区块链网络要求拜占庭将军容错;
7. 共识算法能够“解决”双花问题。

区块链的类型

准入许可也就意味着候选节点进入区块链时需要得到已经在网络中的节
点许可,所以联盟链也叫做许可链。
* 侧链是一种双向挂钩技术,将主链中的代币锁定到侧链中使用。所以可以将主链看作主干
道,侧链看作与主链相对独立的一条分支道,作为主链功能的低耦合拓展。

早期文章里可能还会涉及私有区块链的定义,其实我认为私有区块链更像是一个捏造的概
念,如果是完全私有的分布式数据库,技术人员往往会有更好的选择。

区块链的核心技术组成

  1. P2P 网络协议
  2. 分布式一致性算法(共识机制)
    在经典分布式计算领域,我们有 Raft 和 Paxos 算法家族代表的非拜占庭容错算法,以及具
    有拜占庭容错特性的 PBFT 共识算法。
    区块链的三种共识算法:
    PoW
    PoS
    这是一种股权证明机制,它的基本概念是产生区块的难度应该与你在网络里所占
    的股权(所有权占比)成比例。它实现的核心思路是:使用你所锁定代币的币龄(CoinAge)以及一个小的工作量证明,去计算
    一个目标值,当满足目标值时,你将可能获取记账权。
    DPoS
  3. 加密签名算法
    在比特币大类的代码中,基本上使用的都是 ECDSA。ECDSA 是 ECC 与 DSA 的结合,整
    个签名过程与 DSA 类似,所不一样的是签名中采取的算法为 ECC(椭圆曲线函数)。
  4. 账户与存储模型
    区块链的账本特性,通常分为 UTXO 结构以及基于 Account-Balance 结构的账本结构,
    我们也称为账本模型。UTXO 是“unspent transaction input/output”的缩写,即“未花费的交易输入输出”

第10讲 | 深入区块链技术(二):P2P网络

P2P 的网络协议也有很多,比较常见的有 BitTorrent、ED2K、Gnutella、Tor等

网络连接与拓扑结构

1. 网络连接

节点发现

节点发现是任何区块链节点接入区块链 P2P 网络的第一步
节点发现可分为初始节点发现,和启动后节点发现。

1. 初始节点发现

在比特币网络中,初始节点发现一共有两种方式。
* 第一种叫做 DNS-seed,又称 DNS 种子节点,DNS 就是中心化域名查询服务,比特币的
社区维护者会维护一些域名。
比如 seed.bitcoin.sipa.be 这个域名就是由比特币的核心开发者 Sipa 维护的,如果我们通
过 nslookup 会发现大约二十多个 A 纪录的 IPv4 主机地址。
* 第二种方式就是,代码中硬编码( hard-code )了一些地址,这些地址我们称之为种子节
点(seed-node),当所有的DNS-seed节点全部失效时,全节点会尝试连接这些种子节点

2. 启动后节点发现

在 Bitcoin 的网络中,一个节点可以将自己维护的对等节点列表 (peer list) 发送给临近节
点,所以在初始节点发现之后,你的节点要做的第一件事情就是向对方要列表:"快把你的
节点列表给我复制一份"

而在以太坊网络中,也会维护类似的一个节点列表 (NodeTable),但是这个节点列表与比
特币的简单维护不同,它采用了 P2P 网络协议中一个成熟的算法,叫做 Kademlia 网络,
简称 KAD 网络
它使用了 DHT 来定位资源,全称 Distributed Hash Table,中文名为分布式哈希表。
KAD 网络会维护一个路由表,用于快速定位目标节点。由于 KAD 网络基于 UDP 通信协
议,所以以太坊节点的节点发现是基于 UDP 的,如果找到节点以后,数据交互又会切换到TCP 协议上

3. 黑名单

在比特币的代码中,会有一段去控制逻辑,你可以手动将你认为可疑的节点移除并加入

禁止列表,同时去配置可信的节点。当然,以上并不属于客户端的标准协议的一部分,任何
人都可以实现属于自己的 P2P 网络层

局域网穿透

前面我们说到了区块链的 P2P 网络结构是一种全分布式的拓扑结构。但是,如今我们的网
络环境是由局域网和互联网组成的。也就是说,当你在局域网运行一个区块链节点,在公网
是发现不了的,公网上的节点只能被动接受连接,并不能主动发起连接。

NAT 技术非常常见,这里使用的是源 NAT,简而言之就是替换 TCP 报文中的源地址并映
射到内网地址。
UPnP 是通用即插即用(Universal Plug and Play)的缩写,它主要用于设备的智能互联
互通,所有在网络上的设备马上就能知道有新设备加入。

节点交互协议

一旦节点建立连接以后,节点之间的交互是遵循一些特定的命令,这些命令写在消息的头
部,消息体写的则是消息内容。
命令分为两种,一种是请求命令,一种是数据交互命令

节点连接完成要做的第一件事情叫做握手操作。这一点在比特币和以太坊上的流程是差不多的,就是相互问候一下,提供一些简要信息。比如先交换一下版本号,看看是否兼容

握手完毕之后,无论交互什么信息,都是需要保持长连接,在比特币上有 PING/PONG
这两种类型的消息,这很明显就是用于保持节点之间长连接的心跳而设计的;而在以太坊的
设计中,将 PING/PONG 协议移到了节点发现的过程中

【请求命令】
请求命令一般分为发起者请求,比如比特币中的 getaddr 命令是为了获取对方的可用节点
列表,inv 命令则提供了数据传输,消息体中会包含一个数据向量
【数据交互命令】
我们说区块链最重要的功能就是同步区块链,而同步区块恰巧是最考验 P2P 网络能力的。
区块同步方式分为两种,
第一种叫做 HeaderFirst,它提供了区块头先同步,同步完成以后再从其他节点获得区块体。
第二种叫做 BlockFirst,这种区块同步的方式比较简单粗暴,就是从其他节点获取区块必须
是完整的。第一种方案提供了较好的交互过程,减轻了网络负担。这两种同步方式会直接体
现在节点交互协议上,他们使用的命令逻辑完全不同。

第11讲 | 深入区块链技术(三):共识算法与分布式一致性算法

分布式系统面临的问题

分布式系统面临了几个问题:一致性问题,可终止性问题、合法性问题
* 可终止性可以理解为系统必须在有限的时间内给出一致性结果,
* 合法性是指提案必须是系统内的节点提出
* 一致性是指在某个分布式系统中,任意节点的提案能够在约定的协议下被其他所有节点所认
可。需要提醒你区分的一点是:这里的“认可”表示所有节点对外呈现的信息一致,而不是对信
息的内容认可。一致性也分严格一致性最终一致性

那我们这里所说的一致性到底体现在那里呢?
主要体现在下面两种类型的问题上:
1. 非人为恶意的意外, 比如网络问题,对方机器问题
2. 人为恶意篡改
问题 2 要求设计拜占庭容错系统,这个在 IT 行业并不常见,因为多数 IT 系统是中心化
的,所以如果我们想要解决问题 2,这就引出了我们今天要介绍的共识算法与分布式一致性算法。

有关分布式系统的定理

通过以上我们可以发现比特币、以太坊等公链是偏重高可用性、分区容忍性(AP),满足
最终一致性(C)且 TPS 较低的分布式系统。

共识算法与分布式一致性算法

1. 经典的分布式一致性算法

经典分布式一致性算法有 Raft 协议,Raft 协议是一种强 Leader 的一致性算法,它的吞吐
量基本就是 Leader 的吞吐量,它无法抵御节点恶意篡改数据的攻击
稍微复杂一点的就是 Paxos 协议,Paxos 能提供不同场合不同种类的一致性算法,所以
Paxos 有很多变种,经典 Paxos 是 Leaderless 的,有变种是强 Leader 型的,叫做 FastPaxos
以上两种都是不提供拜占庭容错的系统,下面介绍一种具有拜占庭容错的一致性算法。
PBFT 全称实用性拜占庭容错系统(Practical Byzantine Fault Tolerance, PBFT),PBFT
是一种状态机,要求所有节点共同维护一个状态,所有节点采取的行动一致,PBFT 非常适
合联盟链等对性能具有较高要求的场合,超级账本项目中的 Fabric 框架默认采用的就是PBFT 的修改版本。

2. 区块链共识算法

区块链的共识算法,我在某些场合直接称作基于经济学的博弈算法?,以区别于经典分布式
一致性算法思路,它的整体思路就是让攻击者的攻击成本远远大于收益。
PoX 类的算法其实都延续了 PoW 的设计理念,相比较经典分布式一致性算法,PoX 类算
法通过?概率选择记账者降低了潜在的提案者,另外是延长了达成最终一致性的时间。

第12讲 | 深入区块链技术(四):PoW共识

PoW 工作量证明

PoW 机制其实早在 1997 年就被提出了,它早期多被应用在抵抗滥用软件服务的场景中,
例如抵抗垃圾邮件
为了防止垃圾消息泛滥,接收者并不直接接受来自任意发送者的消息,所以在一次有效的会
话中,发送者需要计算一个按照规则约定难题的答案,发送给接受者的同时,需要附带验证
这个答案,如果这个答案被验证有效,那么接受者才会接受这个消息。

如何理解区块链 PoW

如果所有节点在同一时刻发起提案,那么这个系统的记账过程将会非常的复杂混乱,
为了降低具有提案权的节点数量,采用工作量证明不失为一个好办法
所以我们需要构造一个计算不对称的难题,解题困难,验证容易。
实际挖矿的基本步骤如下。
1. 生成 Coinbase 交易,并与其他所有准备打包进区块的交易组成交易列表,?并生成默克
尔哈希;
2. 把?默克尔哈希及其他相关字段组装成区块头,将区块头(Block Header)作为工作量
证明的输入,区块头中包含了前一区块的哈希,区块头一共 80 字节数据;
3. 不停地变更区块头中的随机数即 nonce 的数值,也就是暴力搜索,并对每次变更后的的
区块头做双重 SHA256 运算,即 SHA256(SHA256(Block_Header))),将结果值与当
前网络的目标值做对比,如果小于目标值,则解题成功,工作量证明完成。

PoW 挖矿算法分类与简介

PoW 挖矿算法大致分为两个大类,第一类叫做计算困难,第二类叫内存困难
以太坊的 PoW 挖矿算法:ETHASH,ETHASH 是 Dagger-Hashimoto 的
修改版本,它是典型的内存困难型挖矿算法。直到如今,也没有芯片厂商设计出挖矿芯片。
在专业矿机上加一块内存的收益?与在 GPU 上加一块内存获得的收益是差不多的,所以厂
商并没有研发内存困难型专业矿机的动力,没有专业矿机的出现,这从某种程度上也缓解了
算力中心化的问题。

PoW 的优势和劣势

PoW 共识的内在优势在于可以稳定币价,因为在 PoW 币种下,矿工的纯收益来自
Coinbase 奖励减去设备和运营成本,成本会驱使矿工至少将币价维持在一个稳定水平
缺点是:
1.比较消耗能源
2.从理论上来看,PoW 会一直有 51% 算力攻击的问题,即攻击者只需要购买超过全网 51%
算力设备,即可发起“双花攻击”,甚至“重放攻击”等多种高收益攻击,这个问题目前没有解决方案

第13讲 | 深入区块链技术(五):PoS共识机制

PoS(Proof of Stake 权益证明) 最早出现在点点币的创始人 Sunny King 的白皮书中,它的目的就是为了解决使用PoW 挖矿出现大量资源浪费的问题。
区块链共识机制的第一步就是随机筛选一个记账者,PoS 则将PoW的计算能力更换为财产证明,
就是节点所拥有的币龄越多,获得的记账的概率就越大。这有点像公司的股权结构,股权占比大的合伙人话语权越重
PoS 包含了多个变种实现,每个变种往往会涉及区块链代币经济模型的改动,可以说是牵一发而动全身。
CoinAge(币龄),字面意思就是币数量乘以天数。
比如你有 100 个币,在某个地址上 9 天没有动,那么产生的币龄就是 900,如果你把这个
地址上这 100 币转移到任意地址,包括你自己的地址,那么 900 个币龄就在转移过程中被
花费了,你的币数量虽然还是 100 个,但是币龄变更为 0。币龄在数据链上就可以取到,任何人都可以验证。

PoS 的实现原理

pow
Hash (block_header) < Target
pos
Hash (block_header) < Target * CoinAge
如果你的币龄越大,也就意味着你的获得答案越容易。这里的 Target 与 PoW 一致,用来控制出块速度的

PoS 的相关问题

优点:
PoS 似乎完美地解决了 PoW 挖矿资源浪费的问题,甚至还顺带
解决了 51% 攻击的问题,这里可以顺便讲一下 51% 攻击是什么,它是指 PoW 矿工如果
积累了超过 51% 的算力,则可以一定程度篡改账本
缺点:

  1. PoS 遇到的第一个问题就是币发行的问题。一开始的时候,只有创始区块上有币,意味着
    只有这一个节点可以挖矿,所以让币分散出去才能让整个网络壮大,那么如何分散出去又是
    另外一个难题了
    所以早期 PoS 币种基本都采用了分阶段挖矿,即第一阶段是 PoW 挖矿,到第二阶段才是 PoS 挖矿。
  2. 第二个问题是由于币龄是与时间挂钩的,这也意味着用户可以无限囤积一定的币,等过了很
    久再一次性挖矿发起攻击;所以解决方案是:PoS 机制需要引入一个时间上限来控制时间因素的自然增长
  3. 第三个问题是虽然引入了时间上下限,用户还是倾向于囤积代币,这会造成币流通的不充
    分;基于此,所以瑞迪币引入了币龄按时间衰减,构造了权益速度证明,鼓励用户流动代
    币,而不是倾向于囤积代币。
  4. 第四个问题是离线攻击,即使引入了时间上下限,时间仍然是自然流动的,也就是可以不
    要求挖矿节点长时间在线。挖矿是可以离线的,这简直是灾难,所以任意一个 PoS 机制的
    实践形式都必须避免这个问题,因为网络节点数量的多少直接关系到区块链网络的健壮性
  5. Nothing at Stake,翻译过来叫做无成本利益问题。大体的意思在 PoS 系
    统中做任何事几乎没有成本,比如在 PoS 系统上挖矿几乎没有成本,这也就意味着分叉
    非常方便。由于以太坊部分采用了 PoS 共识,它的名字叫做 Casper,它必须解决上述无成本?利益问
    题攻击。所以 Casper 协议要求?PoS 矿工需通过抵押保证金的方法对共识结果进行下注.

虽然 PoS 共识机制未来变数依然很多,但它的可塑性比 PoW 好,技术上的探索空间大,
目前 PoS 币种相比较 PoW 币种风险也较高。

第14讲 | 深入区块链技术(六):DPoS共识机制

DPoS(Delegated Proof of Stake,代理权益证明)

从 BM 开始聊起的故事

这和聊比特币绕不开中本聪一样,DPoS 是 BM 一手创造的。DPoS 不是独立提出的
共识算法,而是直接被 BM 应用到比特股项目中,在稳定运行了 3 年多后,又接着被 BM
构造成可复用的区块链工具箱:石墨烯
虽然应用得很早,但 DPoS 算法直到 2017 年才被 BM 单独拎出来作了一篇“DPoS 技术
白皮书”,这期间伴随着 比特股、Steemit、EOS 三个项目的依次发布。
BM 的本名是 Daniel Larimer,由于他的 GitHub昵称是 ByteMaster,所以才被称作 BM
2017 年,随着 Steemit 的成熟,BM 宣布退出了 Steemit,开展了下一个项目 EOS。EOS
的目的是要做出区块链行业的操作系统,为开发者提供底层功能,包括并行运算、数据库、
账户系统等等。

DPoS 详解

PoS 并没有解决性能问题,在这里我们直接认为提高性能就是提高
TPS,我们可以构造一个等式:TPS = transactions / block_time
要注意的一点是在 DPoS 中,记账节点不叫做矿工,而是改称为见证人(Witness)

简单来理解,DPoS 共识算法就是将 PoS 共识算法中的记账者转换为指定节点数组成的小
圈子,而不是所有人都可以参与记账,这个圈子可能是 21 个节点,也有可能是 101 个节
点,这一点取决于设计,只有这个圈子中的节点才能获得记账权。这将极大地提高系统的吞
吐量,因为更少的节点也就意味着网络和节点的可控。
它的原理是让每一个持有币的人进行投票,由此产生n位代表 , 我们可以将其理解为n个超级节点或者矿池,而这n个超级节点彼此的权利是完全相等的。从某种角度来看,DPOS有点像是议会制度或人民代表大会制度。如果代表不能履行他们的职责(当轮到他们时,没能生成区块),他们会被除名,网络会选出新的超级节点来取代他们。EOS就是采用DPOS共识算法。

1.DPoS 共识的目标

如果我们事先规定好记账节点的数量,接着让全网所有节点可以投票决定哪些节点可以成为记账节点

BM 还为 DPoS 算法确立两个原则:
1. 投票选举过程一定要保证最大权益所有者最终能控制全网,因为一旦出了问题,他们的损失最大;
2. 与 PoW、PoS 一样,所有节点仅承认最长链

2.DPoS 共识算法分析

在 DPoS 共识算法中,区块链的正常运转依赖于见证人 (Delegates),见证人是由全网节点
投票产生的,见证人也是记账节点的实际控制人,相当于咱们选课代表,课代表帮我们整理作业。

见证人在完成打包交易的同时可以领取区块奖励和交易的手续费,并且可以执行社区投票的
提案,所以 DPoS 共识算法不仅仅是算法,而是一个包含了协作治理关系的共识机制

DPoS 共识机制本身将“矿池”纳入系统内部,并把它们统称为见证节点,虽然不会出现中
心化挖矿的风险,但是 DPoS 由于节点数不多,并且见证节点权力较大,可以认为 DPoS
本身就是带中心化思路的共识机制

记账者的选举过程

记账的时候可能用到了智能合约。

  1. 抵押获取投票权限
    在EOS系统中,抵押token以获取对应比例的band、ram等资源和投票的权力,需要将token转到合约账户'eosio.stake'下,释放资源后,失去投票权利,token赎回
  2. 记账者候选人
    流程分为注册和注销
  3. 委托
    注册和注销为proxy,可以全权代理被代理者的投票权,被代理人的投票权利被收回。
  4. 投票选举
  5. 定时更新生产者信息
    EOS 的出块时间是500ms一个,所以利用这个时间特性实现了定时器的功能,收到120个出块消息,即一分钟触发一次计票统计(因为21个生产者,每人3s,如果是15个生产者,就应该是42s)
  6. 编排出块者顺序
  7. 恶意记账者的惩罚
    在Casper中需要在投票选择分叉的时候需要将token抵押,防止Byzantine user 作恶,对于EOS而言,所有的惩罚措施都体现在投票上,即下一轮会被选举出局,投票抵押的token没有罚没机制,只是会延迟3天后返还。

第15讲 | 深入区块链技术(七):哈希与加密算法

  1. 哈希算法
  2. 默克尔树(Merkle tree)
    以太坊中针对比特币的设计做了改进,叫做默克尔帕特里夏树 (Merkle Patricia tree),相
    对于比特币在块头中只有一棵树,以太坊有三棵树。
  3. 非对称加密算法

第16讲 | 深入区块链技术(八): UTXO与普通账户模型

区块链网络中有两种记账模式,除了 UTXO 模型还有 Account Based 结构,也就是普通账户模型,也叫账户余额模型
前者在比特币系的数字货币中被广泛使用,后者更多是用在智能合约型的区块链上。

UTXO 模型

UTXO 的核心设计思路是无状态,它记录的是交易事件,而不记录最终状态,也就是
说只记录变更事件,用户需要根据历史记录自行计算余额。

账户余额模型与 UTXO 的比较

  1. 存储空间,UTXO 占用空间比账户模型高,因为账户模型只记录最终状态。
  2. 易用性,UTXO 比较难处理,账户模型简单容易理解。例如 UTXO 在使用上,还需要配
    合高效的 UTXO 组装算法,这个算法要求尽可能降低输入输出的个数,还要让“零
    钱“归整,算法的复杂度相比账户余额无疑要高。
  3. 安全性,UTXO 比账户模型要高,UTXO?本身具备 ACID 的记账机制,而账户模型需要
    自行处理,例如重放攻击。

UTXO 的特性及缺点

  1. 从计算的角度来说,UTXO 具有非常好的并行支付能力,也就是我们上文中所说的如果没
    有尺寸限制,一笔交易可以包含任意笔输入输出,同时也没有次序要求,在一笔交易中哪一
    个 UTXO 在前,哪个在后面不影响最终结果。
  2. 从存储的角度来说,UTXO 具有较好的可裁剪特性,可裁剪性指的是 UTXO 类型的交易,
    如果从最老的那一笔 UTXO 开始截断数据库,那么之前的数据可以删除掉了。
  3. 如果想进一步压缩数据?尺寸,?可以在任意位置截断,记录 UTXO 对应的交易哈希即可,
    然后从其他节点获取并校验 UTXO,这也是 SPV 轻钱包工作的基础之一。
  4. 以太坊中并没有使用比特币的这种 UTXO 设计,这与以太坊的宗旨有关,以太坊的目标是
    构建通用计算,而比特币是数字货币,需求不同导致设计的不同。

第17讲 | 去中心化与区块链交易性能

比特币和以太坊的 TPS 一直被技术领域的人所诟病,或许这与工程师“高性能高并发”的情节有关

去中心化是包含了一定政治主观色彩的词汇,点对点只是一个中性词汇,更适合用来描述系统的性质。
去中心化这种说法?树立了一个无形的靶子,这个靶子可大可小,大到政府机关,小到小商小贩。
正如我们说的是 P2P 网络,而不是去中心化网络。所以在技术领域使用点对点,而不是去
中心化,可以避免这种概念被过度消费,
说到了“过度消费”,我认为“去中心化”已经演变成了区块链行业对外宣传的消费概念,
这是一种情怀消费,它消费了人们对强权者的不满

区块链本来是这样看似低效的 TPS,为什么说它提高了交易效率呢?

跨境支付便是典型的例子,市值长居 Top3 的区块链项目 Ripple 就是为了解决跨境支付的难题而产生的。
我们再来看区块链点对点的交易模式,它的 TPS 看似低效,但是它提供了全局无缝衔接的
资产流转过程,这减少了整个交易生命周期的步骤,这也是区块链提升交易效率的关键所在。
所以说,虽然中心化系统能提供优秀的高性能服务,但是慢在人工审核、平台之间衔接、内
部审计,平台之间的协作业务推进,想必你一定也深有体会

各个区块链的 TPS 指标

业界的可选方案之一:Sharding 分片

第18讲 | 智能合约与以太坊、

智能合约的概念

首先实践了智能合约这一概念的是比特币,比特币脚本(bitcoin script)包含了 5 种标准
交易脚本,这些脚本的功能不仅仅提供了普通单人支付的情况,它还提供了多方共同签名支
付的脚本,叫做多重签名支付,多重签名支付可以看成是萨博语义下的智能合约。

以太坊的核心概念

以太坊 Ethereum 项目的目标是打造一个去中心化的新一代互联网应用平台,这个平台称作 Dapp 平台。
这些 Dapp 基于以太坊智能合约虚拟机开发、编译、部署,并且可以自定义业务逻辑,部
署后全网可见且自动执行,理想情况下不存在宕机、审查、欺诈、第三方干预的情况。
以太坊核心概念包括:智能合约虚拟机 EVM 和 Solidity 编程语言、账户模型、以太币和
Gas,交易和消息。

1. 智能合约虚拟机 EVM 和 Solidity 编程语言

2. 账户模型

以太坊并没有采用 UTXO 模型,也不同于银行账户,它是由以太坊开发者设计了自己的账户模型。
以太坊上的账户有两种类型,
第一类叫做合约账户 CA(Contracts Accounts),
第二类叫做外部账户 EOA(Externally Owned Accounts)。
简单理解就是:CA 是智能合约代码用的账户,EOA 是人用的账户;
所以 CA 可以存储并执行智能合约代码,它的智能被 EOA 激活,它也不存储私钥,合约账户可以调用其他合约。
EOA 则是人们直接控制的账户,可以存储以太币,可以发送交易到合约账户,触发既定的
逻辑。EOA 账户由公钥标识,由对应的私钥控制
当合约账户被调用时,存储其中的智能合约可以在矿工处的虚拟机中自动执行,并消耗
Gas,如果 Gas 不足则会触发“Out of Gas”异常,被终止执行。
无论是 CA 还是 EOA,在以太坊内部都被看做状态对象(state objects),意思就是说这
些账户都有自己的状态,EOA 具有以太币余额的状态,而 CA 除了余额,还多了合约存储状态。

3. 以太币和 Gas

Gas 是执行智能合约操作的燃料,由以太币兑换,以太币由挖矿产生。

4. 交易和消息

以太坊上的交易与比特币中的 UTXO 交易不同,它是指 EOA 账户将一个经过签名的数据
包发送到另外一个账户的过程,这个过程产生的账户状态变化将被存储到以太坊区块链上。
以太坊上除了交易还有消息这个概念,消息指一个合约账户调用其他合约账户的过程,可以
类比函数调用过程。

与比特币的主要区别

区块链的开发者因为智能合约的出现开始分为两类。第一类是公链底层开发者,主要
是以 C++ 和 Go 语言为主的全节点开发者,他们需要对区块链各个技术模块有很深的理解。
第二类是智能合约开发者,也就是应用开发者,这类开发者对区块链的运行原理不需要理解
很深,只需要会编写 Solidity,了解规范即可。

第19讲 | 上手搭建一条自己的智能合约

以太坊社区提供了多种语言实现的客户端和开发库,多数客户端支持 JSON-RPC2.0 标准。
官方推荐使用的版本是 Go-ethererum,这是 Go 语言实现的版本,又称 Geth 客户端。

搭建一条智能合约

1. 下载与安装 Geth

2. 搭建以太坊私链

如果在以太坊的主网上运行和开发测试智能合约,这是不明智的,因为会消耗真实的以太
币,不过我们可以使用 Geth 搭建一条属于自己的以太坊区块链,也就是以太坊私链。

# 进入 Geth 命令行交互页面:
$ geth --datadir /root/geth-test/ --networkid 98 console
# 获得余额
eth.getBalance("0xf8f7ff845596f0bab1e973859bfcaec6cd2a82ab")
# 建立新账户
personal.newAccount()
# 用指定账户挖矿
$ geth --datadir /root/geth-test/ --networkid 98 --mine --minerthreads=1 --etherbase=0xf8f7ff845596f0bab1e973859bfcaec6cd2a82ab

3. 编写并部署属于自己的智能合约

智能合约的开发与钱包是独立的,用户可以使用 IDE 进行调试等操作,目前 Dapp 的 IDE 并不多,常见有 Truffle、Embark、Remix 几种;
* 首先我们要获取 Solidity 编译器,通过 apt-get install solc 来安装。
* 执行 solc --bin helloword.sol 获得 EVM 二进制码。
* 接下来我们还需要生成 ABI 部署参数,使用命令 solc --abi helloword.sol。
* 进入 console,定义 code 和 abi 两个变量

>code="0x606060405234156100......"
>abi=[{"constant":false,"inputs":[],"name":"renderHelloWorld","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"nonpayable","type":"function"}]
 // 这一步解锁账户,用于方便部署合约 
  >personal.unlockAccount("0xf8f7ff845596f0bab1e973859bfcaec6cd2a82ab")
   // 使用上述定义的 abi 变量生成合约信息
  >myHelloWorld=eth.contract(abi)
  // 注入 code 信息,激活合约
>contract=myHelloWorld.new({from:"0xf8f7ff845596f0bab1e973859bfcaec6cd2a82ab",data:code,gas:1000000})   

智能合约标准模板

当任何人都可以写代码自定义业务逻辑的时候,也就意味着需要一套标准让人们降低开发门槛,标准化的接口让产品之间可以协作。那么我们接下来就来讨论一下以太坊上的三种智能合约标准模板。
这三种模板都与 Token 有关。Token 往往代表了一种资产,这些资产在已经存在的其他区块链之上运行,资产还可以像商品一样交易,例如消费积分、游戏虚拟资产。Token 离具体的区块链应用也会更近,因为区块链应用的项目方通常也是 Token 的发行方。

第20讲 | 区块链项目详解:比特股BTS

比特股发布于 2014 年,虽然没有引入智能合约的概念,但它提供了功能极为丰富的金融类
工具,比特股上所有的金融合约都是事先在代码里写好的,所以说它的本身就是一个超级智能合约集合。

什么是比特股

比特股是一个公开透明的、7*24 小时不间断运行的、基于区块链技术的去中心化交易平台。
比特股目前全网在线的服务器有 27 个,由于 DPoS 共识算法提供了较好的交易吞吐性能,
理论上比特股的 TPS 可达 10 万

比特股的两个机制

  1. 人人承兑
    人人承兑就是提供了从法币到系统内置货币的转换,比特股系统内置了多种货币,它锚定了多数法币。
    例如 bitCNY、bitUSD、bitEUR 等等,这些系统内置货币是可以与 CNY、USD、EUR 按
    照 1:1 兑换的。而人人承兑货币其实就是提供了 bitCNY 和?真正人民币之间的相互转换。
    它的机制上有点类似那个比特币的场外交易。所谓场外交易,就是没有中心化撮合中介,交易双方自行议价成交。
  2. 锚定机制
    锚定机制提供了稳定货币的出入金过程,锚定机制也保证了比特股的出入资金和交易撮合是
    分离的,避免了中心化交易平台的弊端

比特股社区也是区块链界的一股清流,因为持有比特股往往需要学习大量金融知识。
投资者想要投资比特股,光是弄清楚锚定机制足以让投机者?就需要花费大量时间,所以一
旦被比特股套牢,似乎只能学习比特股进行自我提升,这也让比特股社区的平均金融知识储
备高于其他区块链项目。

第21讲 | 引人瞩目的区块链项目:EOS、IOTA、Cardano

EOS

如果智能合约是程序,那么可以把 EOS 看成是一个超大的操作系统了,它为所有的程序,
也就是智能合约提供了基本设施。例如账户、授权、数据库、异步通信等接口。
DPoS 其实是 BM 参照现实世界中的议会制度而设计的共识算法。DPoS 的核心理念其实是
投票,?它的设计理念是延迟性惩罚,它假设参与者绝大部分都是没有恶意的。
“人性本善”的假设虽然让系统的作弊成本降低,但是随之而来的惩罚也非常严厉,就是丧
失见证人的资格,但是带来的好处则是效率的提升。
我们来看看 EOS 吸引人的地方,这里一共有两点,第一是 EOS 号称可以提供百万级 TPS
交易性能,第二是 EOS 的链上治理机制:区块链宪法以及 21 个超级节点(见证人节点)。

EOS 的争议

Vitalik 针对 EOS 超级节点竞选发表过意见。他认为 21 个节点的 DPoS 虽然引入了治理结
构,但也很容易受到选民和持币大户的操纵,最终导致“财阀统治型”的治理结构。
在超级节点竞选过程中,某些节点为了获得更多的选票,承诺当选后可以给投票者分红,这
在西方文化中是无法接受的,?这一点似乎违背了 BM 设计 DPoS 的初衷,所以 BM 以及
EOS 团队都表示坚决反对。

埃欧塔 IOTA

IOTA 是一个为了物联网(IoT) 而生的区块链项目。严格来说,IOTA 不是“区块链”,因
为它没有区块,也不是链式结构。
IOTA 提出了一种基于有向无环图(DAG)的?分布式账本结构,这种结构 IOTA 将其命名
为 The Tangle,探戈。

第22讲 | 国内区块链项目技术一览

第23讲 | 联盟链和它的困境

联盟链的困境
超级账本系列技术框架很好地诠释了分布式账本技术走到极致是什么样子的。
这里也可以看出,几乎所有的超级账本项目都是技术主导,技术的强大也让他们忽视了市场的真实需求。

第26讲 | 数字货币和数字资产

第三章 数字货币与数字资产 (5讲)

第24讲 | 比特币专题(一)历史与货币

俗话说读史明智,我们就从比特币的历史开始聊起。比特币的历史总结起来大约有四个时期:
创立前期、创立期、成长和稳定期。
比特币的意义:
1. 无国界的共识
2. 记账是本职

第25讲 | 比特币专题(二):扩容之争、IFO与链上治理

第26讲 | 数字货币和数字资产

第27讲 | 弄懂数字货币交易平台(一)

如果没有数字货币交易所,就没有今天繁荣的数字货币市场,区块链技术也不会这样被广为人知

交易的两种模式

传统交易所的运作流程

一般有四种角色,分别是:
* 投资者,在国内大部分是散户,
* 证券公司
* 交易所,仅指场内交易场所
* 证监会

通常投资者在证券公司开户,然后投资者委托证券公司下单,证券公司接受投资者下单并收
取一定的佣金,然后买卖单由证券公司在交易场所进行交易,这个过程叫做委托,投资者是
委托者,证券公司是受托者。普通投资者是无法直接接触交易所的,这是因为交易所采取会员制,只有成为交
易所的会员且有交易席位,才可以接收其他投资者的委托,所以这就限定了机构投资者,也
就是证券公司了。
流程可以简述为:
1. 投资者到证券公司开户,然后下单给证券公司;
2. 证券公司再将这些订单传递到交易所,订单在交易所完成撮合成交;
3. 接着交易所将订单和成交数据传到证券登记结算公司,结算公司据此进行资金和证券账户的结算;
4. 结算结果再回传给证券公司,证券公司通过自己的平台显示给投资者,例如成交信息,
账户余额等等。

数字资产交易平台

数字交易所主要为人们提供交易数字货币或数字资产撮合交易服务
这种交易市场是一种典型的买单、卖单交易市场,所以这些平台以场内交易为主,通过提供
买单卖单的撮合服务然后赚取手续费,这个过程中也发展出了层次丰富的金融工具,例如杠杆交易。
这种交易市场通常是数字货币对数字货币的,当然这显然不够,所以这就催生了法币对数字
货币的交易,这也是中心化交易平台的由来
目前市场上,中心化的交易平台占据了绝大部分。从功能上来看,中心化交易所一般都会提
供以下业务模块:充提数字货币、资产托管、交易撮合、资产结算、杠杆交易、KYC 等。

如果我们从这些业务模块出发,结合技术架构来看,中心化的数字货币交易平台更接近互联
网应用的技术架构,它本质上是金融交易系统与互联网网络服务相结合,具有以下优势特性:
1. 能够支持海量高并发实时撮合交易 ;
2. 用户终端全平台支持,从桌面到移动端不一而足 ;
3. 数字资产的超高流动性;
4. 平台可以获取超高的利润;
5. 价值发现功能。
虽然利润和流量都超大,但中心化交易平台也面临了一些天花板,例如动不动就被爆出被黑
事件,这也着实让用户提心吊胆,所以我归纳了?一些如下缺点:
1. 内幕操作,交易所相当于是一个黑盒,内部操作不透明带来了巨大风险;
2. 监管缺失,信息披露不完善,项目方跑路风险;
3. 持仓风险,用户的资金完全托管在交易所;
4. 趋利优先,区块链本身的

数字货币交易平台的三种类型

第28讲 | 弄懂数字货币交易平台(二)

上一篇介绍了数字货币交易平台的概念,这篇重点聊聊数字货币交易平台的技术
由于中心化交易所是主流应用,所以今天我主要介绍的是中心化模式下的数字货币交易平台。

两套账本

数字货币交易平台的技术基本沿用了金融交易技术中的系统架构,
我们知道,区块链本身也是用来记账的,也算作一种金融账本,所以一套内部账本,一
套区块链本身的账本,这里就出现了两套账本,如何管理这两套账本,就是资金管理系统的
首要任务。

交易所内部的账本记录的是交易 Trade,这个交易是由用户挂单,接着被撮合引擎撮合成
交而产生的,而区块链账本上的交易 Transaction,是当且仅当用户发起充币提币请求并被
执行时,才会产生的。
这两种交易都用了中文“交易”来表示,但是它们所属的语境不同,前者的交易表示的是金
融交易语境下的资产交换,也就是 Deal;后者表示的是区块链上的技术概念,表示资产转
移的一次记账过程,上述特意用英文以表区别,希望你能够区分。

数字货币交易所包含哪些系统模块

一个数字货币交易所的后端其实至少有四部分构成:Web 业务逻辑系统、交易撮合系统、
运营后台管理系统、资金管理系统。资金管理系统其实就是刚才说到的内部账本。

  1. Web 业务逻辑系统:这个模块通常包含了用户账户模块、登录网关、账户安全管理、
    KYC 认证、行情推送等等,这个模块更偏向用户,也与通常的电商账户系统十分类似。

  2. 交易撮合系统:这个模块是一个交易所的核心模块,为所有的用户提供订单撮合。

  3. 运营后台管理:这个模块是一个交易所运营人员使用的系统,交易所内部人员才能访问。

  4. 资金管理系统:这里的资金管理其实包含了三部分,第一部分是法币的支付网关,可能
    需要对接银行或第三方支付机构;第二部分就是数字货币钱包管理,它提供了大部分主
    流数字货币的支付功能;第三部分是用户持仓信息,所谓持仓就是用户持有多少数字货
    币,这个是记录在数据库中的,不需要与区块链保持一致,但是要求交易所的总账是平的。

    各自模块的特征

    Web 业务系统与我们常见的电商系统无异,主要是用户账户以及简单的业务逻辑,重点
    是可扩展性,业务要求比较弹性。
    交易撮合系统本质上是一个高并发的计算系统,特点是系统性能高和稳定性好,其中订单
    队列可以是编程语言中的数据容器,也可以是内存数据库。
    运营后台系统在整个交易所生命周期的早期并不凸显重要性,但是运营后台系统恰恰是交
    易所中后期发展的核心系统,重点在数据准确,要求网络安全性高和可扩展性好。
    资金管理系统包含用户持仓状态,以及数字货币钱包服务,它是一个交易平台中安全性要
    求最高的系统,资金管理系统往往要搭配一个内存数据库,其中数字货币钱包服务也可以
    拆出来做成独立子系统,甚至可以改造成整个公司的内部区块浏览器,因为钱包服务需要
    设计成多个钱包实例,并统一所有的币种钱包接口。

    交易过程

    举例说,用户 A 拿 0.01BTC 换取了 B 的 10 个 ETP 的过程究竟是什么样的呢,我来举一个例子。

  5. 用户 A 挂 10ETP 买单,出价 0.01BTC 经过 Web 业务系统进入撮合系统订单簿 ETP-
    BTC 买单队列,等待撮合成交,同时资金管理系统冻结 0.01BTC。

  6. 用户 B 挂 10ETP 卖单,出价 0.01BTC 经过 Web 业务系统进入撮合系统订单簿 ETP-
    BTC 卖单队列,与步骤 1 中 A 的订单撮合匹配成功,生成 Trade,同时资金管理系统结
    算对应资产,B 的资产变化为增加 0.01BTC 并减少 10ETP, A 增加 10ETP 并减少
    0.01BTC。

  7. 成交 Trade 以及资产变化通过资金管理系统写 RDB 数据库,形成成交记录,同时更新
    行情,数据库记录可供用户和运营后台管理系统查询。 要注意的是这一步并不是登记到
    区块链上。

  8. 用户 B 经过 Web 业务系统发起提币请求,请求提取 10ETP 进入自己的数字货币钱包,
    这个请求进入资金管理系统,交易所运营人员可通过运营后台观察到这笔请求,运营人
    员审核用户 B 的信息,比如实名认证是否正常等。

  9. 提币请求进入运营系统后,如果通过审核,则资金管理系统会冻结用户 B 的 10ETP,同
    时将提币请求发起给数字货币钱包服务系统,也就是 WalletGroup,子系统发起区块链
    上的交易 x(Transaction), 等待交易被打包,并根据更新提币审核状态,供用户查看。

  10. 数字货币钱包服务根据区块信息查询交易 x 是否被打包,如果已经打包,则资金管理系
    统将完全把用户 B 被冻结的 10ETP 直接抹成 0,更新提币状态最终为完成,提供区块交
    易 ID 以供用户和运营后台系统进行查询。
    在步骤 3 中,我们可以看到用户所持有的资产,相当于是交易所对用户的负债,但这也只
    是数据库中的一个数字,并不是真正的链上资产。
    在步骤 6 中,我们看到区块链上的“交易”与步骤 3 中的“交易”完全不是一个概念,同
    时用户的资产是否安全,完全取决于交易平台的技术是否安全,对交易所是否信任。
    再来看看充值阶段。
    简单来说,充值是与提币相反的过程,不同的是,充值不需要审核,一般数字货币交易所的
    原则都是“宽进严出”,在充值过程中,交易平台通常不直接使用数字货币钱包检测用户是
    否充值到账,而是使用“扫块”(block_scan) 这一方法检测用户的充值。

第四章 区块链与当下互联网 (5讲)

第29讲 | 互联网身份与区块链数字身份

本讲探讨了区块链数字身份的话题,我们先从身份的原始概念开始讲
解,接着介绍了身份的简要发展和现在面临的问题,最后介绍了区块链数字身份和它面临的挑战。

第30讲 | 区块链即服务BaaS

区块链即服务”,也就是 Blockchain as a Service,它的缩写是“BaaS”

第31讲 | 数字货币钱包服务

扫描区块技术 Block scan

如何把全节点钱包中的数据转换成为数据库服务器中的数据,这就需要用到一种扫描区块技术,简称扫块。
扫块,顾名思义,就是指扫描全节点钱包中的所有区块,然后将其解析后存储到数据库服务
器的过程,这些数据库可以是 MongoDB,也可以是 MySQL,取决于你的业务需要。
整体的思路是使用 getblock 的 JSON-RPC,从第 0 个高度的区块一直扫描到最新区块,
并且存储到 MySQL 中。
这里最难以处理的问题是保持 MySQL 中的区块数据与全节点数据的一致性,也就是当区
块链分叉时,MySQL 需要感知到发生了分叉,接着移除被分叉的区块,并且接着同步到正
确的区块上。
关系型的表结构也可以做成标准化的,区块链本身作为基础设施,历史交易已经不可篡改,
如果把这些结构化的区块做成公共基础设施,并提供基于 API 的开放调用,这便就是我们
常见的区块浏览器了。
扫描区块技术解决了所有区块链资产可视化、高并发查询的问题,所以它在一些大规模的数
字货币交易所中也有应用。区块浏览器就是基于这种技术产生的一种 Web 服务

区块浏览器

从技术上看,一个区块浏览器的主要工作就是把区块扫描到数据库服务器中,然后搭建一个
Web 访问服务,用户只需要输入交易哈希或者区块哈希,即可查询到交易是否已经被打包
和确认。

数字货币钱包服务

实际上,大规模的区块链应用都需要搭建一个数字货币钱包服务,数字货币钱包服务为系统
中的其他模块提供了可扩展的、统一的、安全的交易查询和验证服务。

第32讲 | 区块链与供应链(一)

第33讲 | 区块链与供应链(二)

第五章 如何从业区块链 (3讲)

第34讲 | 从业区块链需要了解什么?

行业现状

目前区块链领域的人才需求大致可以分为以下几种:
1. 根据客户的需求,搭建基于 DLT 技术的分布式账本应用,在 DLT 上实现客户要求的业
务需求,这类与传统解决方案型的人才十分接近。
2. 公司已经具有了某些行业的资深经验,目标是通过技术选型选择某个公链,在此公链上
开发基于区块链的应用。目前游戏与社交类的项目比较成熟,游戏类有以太养猫、
LeBloc 等,内容社区类有 Steemit、币问、币乎等项目。这一类的特点是可以很好地与
现有技术结合,在业务层面利用区块链的资产数字化特性,商业潜力大,技术发展空间
也很大,进入门槛较低,风险较低。
3. 公司获得融资或者在海外发起 ICO,目标是研发新一代公链,这一类是为了通过改进现
有的区块链技术不足而创建的项目,技术发展空间最大,进入门槛最高,风险也最高。
4. 区块链生态基础设施类。数字资产交易平台、数字资产管理、移动钱包、硬件冷钱包、
数字金融媒体、区块链咨询、矿池运营等都属于此类,这些都是目前商业利润最高的区
块链产业,技术发展空间较大,进入门槛较低,风险也较低。

第35讲 | 搭建你的迷你区块链(设计篇 )

技术选型

详细功能

  1. P2P 网络:节点发现、节点维护、持久化保存、区块同步。
  2. 公私钥对:命令行,创建公私钥对并生成地址,提供私钥存储,公私钥验证。
  3. 发送交易:命令行,发送成功验证,输入是交易哈希。
  4. 交易查询:命令行,JSON 格式的交易查询返回,输入是某个地址。
  5. 余额查询:命令行,JSON 格式的余额查询返回,输入是某个地址。
  6. 挖矿:命令行、JSON 格式挖矿信息返回,输入是某个地址。
  7. 区块共识:编织区块链的算法,包含创世区块以及调整全网挖矿难度。
  8. 交易共识:验证单个交易的算法,包含签名验证和 UTXO 验证。
  9. 基础日志:用于监控网络,区块验证等操作。
  10. 区块持久化存储:?分叉与合并时的一致性,并为查询提供接口。
  11. 提供格式化输出交易的功能,这里的格式化主要指 JSON 格式。
  12. 有效防止双花交易。

第36讲 | 搭建你的迷你区块链(实践篇)

尾声篇 | 授人以鱼,不如授人以渔

讲了下自己写此专栏的经历和过程

新书首发 |《区块链第一课:深入浅出技术与应用》

宣传了一下自己的书(极客时间出品)


资料

基础《精通比特币》
行业知识《从区块链到信用社会》
技术进阶《区块链原理设计与应用》