toBeTheLight.github.io 荒原

阅读:《白话区块链》粗读————炒币体验

2018-05-06
toBeTheLight

EOS卖出了,初步了解下区块链的东西吧。这个步骤是不是反了?

体验

作为一个只买过余额宝的“投资者”,2018 年 01 月 10 日开始尝试买入几个(1000多元,10 几个) EOS 后,到 2018 年 05 月 01 日基本全部卖出,也算是有所获利,这个尝试阶段算是结束了。现在反正没被割了韭菜,说不定哪一天又回头扎进去成了韭菜了。这么一回顾才发现一直觉得只有 1 个月的持有时间竟然已经过了 4 个月。

经历成本 70 元/个,币值翻倍,跌倒成本价一半 35左右,补仓平低成本(5000多元,110个)到 50+,低价徘徊,涨到 100+,到将近三倍快 150 元/个,回调之后在两倍卖出,心态在赔本的时候更加平静,大幅上涨时更多是心慌、烦躁,这种心慌和烦躁更多是没有底气、没有资本引起的,将上涨之后的账面数字当做了自己的实际资产,总觉得明天万一一下跌自己就赔的什么都没了,反而赔钱的时候更能回归最开始的目的————尝试。

没有底气来源于什么呢?虽然知道有白皮书这种东西,但是其实 EOS 的白皮书并没有看过,只是听别人“吹嘘”(自己不了解的东西当然要先当做吹嘘)第三代技术和社区灌输的“信仰”。同时对于区块链的认识也仅仅停留在几个视频简介和短篇科普文,整个“投资”(更确切的说是投机,赌运气)过程完完全全就是一个毫无根据、毫无底气的体验尝试,当然也怀有一点“暴富”的想法 😄,那么还是得回归技术本身。

没有资本当然就是没钱了,还是要好好工作努力积累初始资本,才能在下一次机遇中更好地给“庄家”送菜 😄。

粗读

作为一本不错的原理入门书籍,虽然叫《白话区块链》但是感觉并不完全适合对编程算法等完全没有经验的小白。

第一章 初始区块链

初步认识

区块链记账方法雏形

被“骰子”选中的人负责记账,其他人核对并在无误后同步账本,每人一本。

区块链技术理念

形成了分布式的公共网络,不依赖某特定个体的节点共同参与“记账”。通过一种“骰子”(共识算法)选出负责数据整理、验证数据、打包数据、广而告之的打包者节点(矿工),其他节点负责验证和接收,每个节点都用一对密钥进行身份标识,使用一套与密钥相关的程序规则(脚本系统)向公共网络中定向发送有价值的数据。

区块链一般工作流

  1. 数据被发送出去。
  2. 打包者节点将交易数据写入区块(区块和币并不是一个东西)。
  3. 打包者对外进行广播。
  4. 其他节点确认。
  5. 经过确认写入各自的区块链账本。
  6. 大多数节点(或核心节点等其他确认方式)确认后并写入后,这个过程即为完成。

区块链技术栈

  • 区块链本身只是一种数据记录格式。
  • 数据被分成一个个的数据块记录,并被串联起来(像结绳记事,一个结是一个区块,用绳串联)。
  • 最基本的技术组合有:区块链账本、共识机制、网络路由、脚本系统、密码算法。
    • 区块链账本:每过一定时间产生一个新的区块,新的区块中有上个区块的关键信息(如哈希值),从而无法独立的去篡改某个区块的信息,区块通过某种方式关联区块中众多的交易事务。
    • 共识机制:将每个节点各自的数据保持一致的规则。在实际操作中,会通过一种机制筛选出有代表性的人,常用的筛选方案有工作量证明、权益证明、委托权益证明、实用拜占庭容错算法。
    • 密码算法:用于串联区块、约束区块事务、创建账户地址、签名交易事务等。
    • 脚本系统:使得在区块链中可以实现各种业务,如发币、记录订单等。
    • 网络路由:发现节点、同步数据,形成区块链共识网络。

区块链架构

  • 1.0:
    • 代表:比特币
    • 两个任务:
      1. 通过竞争获取区块数据打包权并将内存池(发送至网络中但是未确认进区块的交易信息会放在内存池)中的数据打包进区块,并进行广播。
      2. 接收系统对打包行为的数字货币奖励。
    • 组成:
      • 前端工具:钱包、浏览器、RPC客户端、命令行接口。
      • 核心节点:矿工、区块链维护、数字签名、密码、共识、交易验证、脚本引擎、内存池、数据库、RPC服务、消息队列、网络路由。
  • 2.0:
    • 代表:以太坊
    • 特点:支持智能合约(扩展区块链系统的功能)。
    • 组成:
      • 应用工具:钱包、浏览器、控制台、智能合约开发工具、去中心化应用。
      • 核心节点:矿工、区块链维护、数字签名、密码、递归长度编码、共识、交易验证、脚本引擎、内存池、智能合约、数据库、RPC服务、消息队列、网络路由、以太坊虚拟机。
  • 3.0:
    • 特点:面向行业应用、钱包不再必选。增加网关控制(对安全保密的需求支持)。共识机制不固定,可用户选配。
    • 组成:
      • 应用工具:业务客户端、浏览器、API、智能合约开发工具。
      • 网关控制:身份认证、许可授权、运行监控、数据审计。
      • 核心节点:智能合约、可插拔共识、账户管理、网络管理、合约容器、区块校验、分布式计算、存储管理。

区块链分类

  • 根据网络范围:
    • 公有链:完全公开透明的全民参与的链,节点不可控。
    • 私有链:内部使用,搭建在不与外部网络连接的局域网,节点可控,一般有身份认证和权限设置。
    • 联盟链:可公开数据可不公开,用在明确的机构之间,往往由不同权限的成员参与,节点往往可控。
  • 根据部署环境:
    • 主链:部署在生产环境的真正区块链系统。同时由于如矿工的竞争导致链分叉(还有其他原因),这种情况下也指最长的原始链条。
    • 测试链:测试用。
  • 根据对接类型:
    • 单链:能单独运行的区块链系统都可以成为单链。基于某个链开发的系统不叫链,只能算是智能合约应用。
    • 侧链:跨链技术,是锚定某个链的独立的链系统,按照一定的协议进行数据互动,对锚定链进行功能扩展。
    • 互联链:彼此互联,彼此互补。

比特币简介

比特币白皮书

《比特币:一种点对点电子现金系统》

白皮书内容:

  • 简介:不通过权威机构,构建可信的交易网络。
  • 交易:通过密钥签名进行交易验证。
  • 时间戳服务器:通过时间将数据分为区块,并串联。
  • 工作量证明:比特币的共识机制。
  • 网络:比特币网络的应用协议,交易确认的过程。
  • 激励:对矿工工作的奖励。
  • 回收硬盘空间:随着区块链变长,数据体积会一直增长,通过删除过老的一些交易数据,同时不破坏区块的随机哈希值,进行数据压缩。
  • 简化的支付确认:不需要全部数据,只需要保留体积相对很小的区块头。
  • 价值的组合和分割:比特币的交易事务组成方式。
  • 隐私:比特币系统中的交易带有很大的匿名性和隐秘性。
  • 计算:概率统计攻击者成功的概率。

比特币挖矿

挖矿是一套算法,主要用在抢夺区块打包权、验证交易事务、奖励发行新币、广播新区块。

比特币使用被称为工作量证明的算法,通过计算得出一个符合要求的目标数字。

  • 难度值:难度值会影响目标数字的要求,比特币为了维持10分钟的出块速度会大约两周根据全网算力调整难度值。
  • 挖矿计算:
    • 公式:SHA256(SHA256(区块版本号 + 前一个区块的哈希值 + 准备打包的交易事务哈希树的根植(梅克尔根) + 区块时间戳 + 当前难度 + 随机数))
    • 其中 SHA256 是一种加密算法。
    • 计算出的值小于难度目标值则符合要求。
    • 其中会变的值只有梅克尔根、区块时间戳、随机数。
    • 挖矿就是重复计算区块头的哈希值,不断修改此参数,直到与难度目标值匹配的一个过程。
    • 挖矿成功会得到比特币奖励,这个奖励一般会被写在区块的第一条,但是这个奖励不是无限的,每21万个区块减少一半。
  • 区块广播:矿工挖出区块后,进行网络广播,传递给相邻的节点,经历确认验证后会被写入账本。但是无法保证同一时间只有一个矿工挖到,这时较长的链就会被保留。
  • 挖矿方式:CPU -> GPU -> FPGA -> ASIC;个体矿工 -> 矿池。

比特币钱包

  • 通过钱包转账就是将比特币从一个地址转移到另一个地址。
  • 地址:私钥 -> 公钥 -> 公钥哈希 -> 比特币地址
  • 钱包:
    • 核心钱包:带有完整账本数据的钱包,与核心客户端一起使用,可做交易验证。
    • 轻钱包:只保留区块头数据,做简单的支付验证。
  • 未花费事务输出:这是比特币中交易事务的数据结构,简单的讲就是 Alice 输出时会去找之前对 Alice 的输出记录,作为此次交易的输入并“消耗”掉,这个之前对 Alice 的输出就是未花费事务输出。

区块链技术意义

  • 数据不可篡改:去中心化、分散存储、区块数据关联。
  • 分布式存储:避免单点故障,增加系统可靠性。
  • 匿名性:使用地址进行交易,满足隐私安全需求。
  • 价值传递:区块链可以创造信任机制,在这种机制下简化交易过程和成本,实现价值(货币价值、信用资产、版权或价值符号)传递。
  • 自动网络共识:交易事务可以自动达成共识,不需要手动担保、证明或各种确认。
  • 可编程合约:让资本具备更强的编程可控能力,可以通过程序设定对资产的管理方式,这种可配置、可控制的思想就是可编程合约思想。

第二章 区块链应用发展

应用

基础应用:加密数字货币

数字货币的价值背后并不像贵金属等一样有使用和劳动价值支撑,其实是没有任何实际价值在支撑,这种说法在一定程度上是说的过去的。

并不是每个链都会发币。现有加密数字货币有比特币、莱特币、以太币等。

  • 一般代表资产背书的数字要能称为可以流通的加密数字货币,必须具备:
    • 加密哈希函数
    • 独特的、以哈希函数结果为指针的、防止篡改的链式数据结构
    • 分对称密钥体系
  • 一般数字资产的价值网络构建共识机制包括如下5个要素:
    • 谁来维护价值交易记录账本?
    • 谁有权决定一笔交易的合法性?
    • 谁是初始数字资产的产生者?
    • 谁可以修改系统规则?
    • 数字资产交换与流转谁可以获利,获利多少,怎么获利?

应用扩展:智能合约

以太坊、超级账本等。

交易结算

瑞波,开放支付网络。

  1. Alice 登录到选择的瑞波网关;
  2. 将现金存入并指示自己的网关通过 Bob 的网关将现金转给他;
  3. Bob 通过自己的网关获得现金;
  4. Alice 与 Bob 的网关进行债务结算。

瑞波币可以带去共同信任的中间网关,将实物进行瑞波币定价,由此进入瑞波网络的结算网络。

其他应用

  • 星际文件系统
  • 公正防伪
  • 供应链金融

第三章 区块链骨骼:密码算法

哈希算法

用在钱包地址、区块头、交易事务等方方面面。

哈希算法一般具有以下性质:

  • 函数的输入可以使任意长的字符串。
  • 函数的输出是固定长度的。
  • 函数的计算过程是有效率的。

公开密钥算法

非对称加密,每个人都有一对唯一对应的密钥:公开密钥(简称公钥)和私人密钥(简称私钥),公钥对外公开,私钥由个人秘密保存;用其中一把密钥加密,就只能用另一把密钥解密。

编码/解码算法

数据存储转换。

第四章 区块链灵魂:共识算法

分布式系统的一致性

区块链系统是一个分布式应用软件,分布式系统的首要问题就是如何在多个独立的节点之间达成共识,当然这个共识是指结果一致,而不是结果一定正确。

一致性问题

一致性要求分布式系统中每个节点产生相同的结果或者具备同样的状态,看起来好像是一台机器一样,然而分布式系统没有一个中心服务器做调度员,这对其达成一致性是有难度的,我们一般希望其具备以下能力:

  • 分布式系统作为一个逻辑整体,不应该返回错误的结果。
  • 只要系统里的大部分机器工作正常,整个分布式系统就能有效运行,可抵御单点故障。
  • 系统的性能是可以横向扩展的,不适用木桶原理。
  • 分布式系统必须是异步的,每个节点可以按照自己的时序独立工作,没有全序的时间顺序。

这种一致性不是实时的,是最终的,比如宕机或断网的节点可在恢复后同步数据达成一致。

FLP 和 CAP

  • FLP:以三位作者名简写命名。
    • 定义:在网络可靠、存在节点失效的最小化异步模型系统中,不存在一个可以解决一致性问题的确定算法。
    • 说明:不要浪费时间为异步分布式系统设计在人以场景下都能实现共识的算法,在允许节点失效的情况下,纯粹异步系统无法保证一致性在有限时间内完成。
  • CAP:
    • 定义:分布式计算系统不可能同时确保一致性、可用性、分区容错性。
      • 一致性:所有节点在同一时刻能够看到同样的数据。
      • 可用性:每个请求都可以在有限的时间内收到确定其是否成功的响应。
      • 分区容错性:因为网络故障导致的系统分区故障不影响整个系统正常运行。
    • 弱化:既然无法同时满足,我们可以对一个要素进行弱化。
      • 弱化一致性:不需要实时一致性。
      • 弱化可用性:提高性能,保持可靠,避免加载不必要的模块,牺牲可用性。
      • 弱化分区容错性:对分布式系统,分区容错是必然的。使用共识算法,优先保证整个系统的容错能力,这也是设计为分布式或去中心结构的目的。

拜占庭将军问题

n 个将军被分隔在不同的地方,忠诚的将军希望通过某种协议达成某个命令的一致(比如一起进攻或者一起后退)。但其中一些背叛的将军会通过发送错误的消息阻挠忠诚的将军达成命令上的一致。Lamport 证明了在将军总数大于3m ,背叛者为 m 或者更少时,忠诚的将军可以达成命令上的一致。即在存在消息丢失的不可靠信道上试图通过消息传递的方式达到一致性是不可能的。

拜占庭容错要处理这些问题。

共识算法的目的

解决拜占庭将军问题。

引入机制:

  • 激励机制:给忠诚的将军以奖励,背叛无收益则动机减少。
  • 随机性:“随机”的选举一位将军。
    • 根据每个节点的计算力来决定。
    • 根据每个节点具有的资源来决定。

出于以上考虑引入共识算法,分布式共识协议具有:

  • 所有公正节点达成共识,共识过程终止。
  • 最后达成的共识必须公正。

共识算法

每种算法有不同的适应环境。

  • Paxos 算法:解决的是不存在恶意节点情况的算法。
  • Raft 算法。
  • PBFT 算法:至多可以容忍不超过 1/3 的节点错误,少数服从多数。
  • PoW 工作量证明:允许 50% 的节点出错,使用计算量当做信任表达的不利代价(像作为人质的质子)。
  • PoS 股权权益证明:将货币作为门槛资产,而不像 PoW 有矿机就可参与,利息做收益。
  • DPoS 委托权益人证明机制:改进 PoS,通过选举得出委托权益人,通过减少确认的要求,减少验证耗时,利息做收益。

第五章 区块链扩展:扩容、侧链和闪电网络

解决已运行链的不足。

扩容

由于区块大小的限制,导致每个区块可容纳交易事务有限,需要进行扩容提高交易速度,通常有两种方式:

  • 区块扩容,提升单个区块大小。
  • 隔离见证,减小交易数据大小,将见证信息与交易数据隔离开并抛弃。 两种方法可以独立和组合使用。

但是由于已运行的链式分布式的,社区针对扩容方式有不同的建议和支持,就导致链可能出现分叉。

侧链

通过建立侧链,在保证主链价值的基础上,把交易/资产转移到别的完全不同架构、技术和共识机制的新区块链上,解决主链的性能问题。

闪电网络

闪电网络是链下交易,一般先开辟一个支付通道,并提交给一个微支付网络。将交易转移,在完成一系列交易后将交易结果返回链上,节约了链上交易的中间过程。

多链

多链通过跨链连接器互连。

第六章 区块链开发平台:以太坊

以太坊属于区块链 2.0 的范畴,是通用的全球性区块链,属于公有链,可以用来管理金融和非金融类型的应用,同时以太坊也是一个平台和编程语言,包括数字货币以太币以及用来构建和发布分布式应用的以太脚本,也就是智能合约编程语言。

可以通过在智能和跃层开发一套合约程序去构建区块应用,甚至实现一个比特币。

第七章 区块链开发平台:超级账本

超级账本实际上是一套开发框架或一组开发资源,面向企业级的服务项目。目标是发展一个跨行业的开放式标准以及开源代码开发库,允许企业创建自定义的分布式账本解决方案,以促进区块链技术在商业当中的应用。

第八章 略

第九章 潜在的问题

软分叉和硬分叉

区块链是分布式的,在软件升级的过程中,不能保证每个节点都升级到新版本,这时未升级的节点继续工作就会导致区块链分叉。

  • 软分叉:新版本节点认为老版本节点发出的区块/交易合法()。
  • 硬分叉:新版本节点认为老版本节点发出的区块/交易不合法,区块链从这个升级开始向两个方向发展。

达摩克利斯剑:51% 攻击

51% 象征占据了算例的一大半,可以占据打包权,决定打包区块中的交易事务,发起攻击。

  1. 修改自己的交易记录,实现双花(通过控制长链,进行一笔输出两次花费)。
  2. 阻止区块确认部分或者全部交易。
  3. 阻止其他矿工开采到区块。 但是有如下操作通过 51% 攻击是实现不了的:
  4. 修改他人交易记录。
  5. 凭空产生货币。
  6. 高边每个区块的货币发行量。
  7. 把不属于自己的比特币发给别人或自己。
  8. 修改历史区块数据。

简单的代价:轻钱包的易攻击性

轻钱包只是简单的通过区块头来验证一下是否存在交易,而区块头本身的可靠性并无法保证。

忘了保险箱密码:私钥丢失

私钥丢失无法恢复。

重放攻击:交易延展性

改掉一些已经被发送到网络中不影响交易本身的信息(如签名),不会影响对当前交易的验证,但是会使后续对当前交易的查询等功能出现问题。

代码漏洞:智能合约之觞

基于公有链开发的智能合约本身可能存在漏洞。以太坊发生过 TheDAO 合约漏洞的问题,导致 TheDAO 资产池中以太币被非法转移,导致为修复问题后期硬分叉为 ETC 和 ETH。

Parity 多重签名漏洞

同样是发生在智能合约上的问题。

网络拥堵:大量交易的确认延迟

大量发生的交易会因为区块大小等限制拥堵在内存池中。

容量贪吃蛇:不断增长的区块数据

随着区块链长度的增长,数据量会越来越大,会导致:

  • 完全节点数减少:用户更偏向“轻钱包”导致核心节点减少,使区块链偏向中心化网络发展。
  • 验证缓慢:在海量数据中做校验,验证速度越来越慢。

相关文章

Content