区块链(BlockChain)
区块链简介
区块链是近年来最具革命性的新兴技术之一,其已去中心化方式建立信任等突出特点,对金融等诸多行业来说极具颠覆性,具有非常广阔的应用场景,收到各国政府、金融机构、科技企业、爱好者和媒体的高度关注。
区块链可以分为:公共链(Public BlockChain)、联盟链(consortium BlockChain)、私有链(Private BlockChain)。从链的关系来分,可以分为主链和侧链。而且不同区块链还可以形成网络互连互通,产生互联链(Interchain)的概念。
公共链:所有用户都可以是节点,所有人都有权进行查看,发送等操作。公共链是真正意义上的完全去中心化的区块链。它通过密码学保证交易不可篡改,同时也利用密码学验证以及经济上的鼓励(目前数字货币还不能被算是可以实际使用的“经济”,只能算是“资产”),在相互为陌生的网络环境中建立共识机制。在公有链中的共识机制一般是采用工作量证明(Proof of work)或权益证明(又名股权证明Proof of Stake),用户的影响力直接取决于他们在网络中拥有的资产的占比。
联盟链:联盟链仅限于联盟成员参与,区块链上的读写权限、参与记录权限按照联盟规则来决定。由于参与共识的节点比较少,联盟链一般不采用工作量证明的挖矿机制,而是多采用权益证明或PBFT(Practical Byzantinc Fault Tolerant 拜占庭证明)、RAFT等算法。联盟链由成员机构共同维护,网络接入一般通过成员机构的网管节点接入。联盟链平台对成员提供权限操作。(联盟链的例子可以产看一下R3联盟计划开发的Corda分布账本,工作流),是一种许可链。
私有链:限制更加严格,只允许参与者看到自己的的区块链。也是一种许可链。
互联链:特定领域的应用可能会形成各自的垂直领域的区块链,这些区块链之间也会有互联互通的需求,把这些区块链通过某种协议链接起来就好像互联网一样。这种区块链上的互联互通就可以构成互联网。形成区块链的全球网络。
区块链基础
区块链本质上是一个点对点网络(peer-to-peer)的分布式账本数据库(! )。比特币就采用了区块链的技术架构。区块链本身其实是一串链接的数据区块,其链接指针是采用密码学哈希算法对区块头进行处理所产生的区块哈希值。每一个数据块中记录了一组采用哈希值组成的树状交易状态信息,这样保证了每个区块内的交易数据不可篡改,区块链里的链接的区块也不可篡改。
(物理世界 随机性,无序化 正态分布 竞争资源 没有相同的树叶
数字世界 伪随机,有序化 幂律分布 非竞争资源 一切内容皆可复制)
通证(token)
(可流通的加密数字权益证明:https://blog.csdn.net/myan/article/details/78712506)
(区块链,新型都协作网络
基于共识,实现信任传递,构建信人网络,衍生信誉、新用、价值...
技术上看:是构建新型协作网络的一套技术
区块链核心特性,高度防篡改)
一个完整的区块链系统包含了很多技术,其中由存储的数据区块及其之上的数字签名、时间戳等技术,有作为支撑P2P网络和维护系统的共识算法,有挖矿和工作量证明机制,有几名交易机制和比特币和比特币钱包,还有链龄、UTXO、Merkle树、双花等相关技术概念。
数据区块:比特币的交易会保存在数据区块之上,比特币系统中大约每10分钟会产生一个区块,每个区块一般包含区块头和区块体两部分,如上图。区块头封装了当前的版本号、前一区块的地址、时间戳、随机数、当前区块的目标哈希值、Merkle树的根只等信息。结构大致如下:
区块中则主要包含交易计数和交易详情。交易详情就是比特币系统的记账本,每一笔交易都会永久地记入数据块中,而且任何人都可以查询。内容文件实际存储的数据要是请自行下载比特币核心钱包(bitcoin core)进行查看。
挖矿问题:所谓挖矿,实际上是穷举随机数算法,把上个区块的哈希值加上10分钟内的全部交易打包,再加上一个随机数,算出一个256位的字符串哈希值,输入的随机数Nonce使哈希值满足一定条件就获得这个区块的交易记账权。新产生的区块需要快速广播出去,一遍其他节点进行对其验证,以防造假。每个区块存着上一个区块的哈希值,可以溯源到源头,又有经过验证后才最终获得区块的交易记账权。比特币系统会让挖矿的矿工竞争记账权(在主链上链接区块的权利),这个竞争机制就是工作量证明机制。挖矿需要付出大量的能源和时间,谁付出的工作量最多就能以更大的概率获得一个区块的记账权。获取记账权的矿工会将当前区块链接到前已区块,形成最新的区块主链,矿工也会得到系统奖励的一定数量的比特币。这个比特币是凭空出现的,转到矿工手中。
分叉问题:
当有两个矿工同时挖出两个新区块并且将新区块连接的情况下,这时主链上出现分叉。系统不会马上确认那个区块是不合理的,而是约定后续矿工总是选择累计工作量最大的区块链。最终,只有一条链会被保留下来,成为真正有效的账本,其他都是无效的,所以整个区块链仍然是唯一的。
注意,能够让区块链保证数据唯一性的前提是:所有矿工都遵从同样的机制。
还有一种情况,就是矿工不遵从同样的机制,那么也会出现分叉。这种分叉又有两种情况:一是由于整个区块链系统软件的升级,一部分矿工没有来得及升级,出现了遵从不同机制产生的分叉。
当这部分矿工升级系统后,这个分叉就会消失,我们称这种分叉为软分叉。二是由于矿工之间出现分歧,一部分矿工决定采用不同的机制,产生出来的分叉是不会消失的。我们一般把这种分叉称为硬分叉。
软分叉很好理解,我们重点谈谈硬分叉。
区块链圈里第一个有影响力的硬分叉应该是以太坊的分叉事件。以太坊上一个著名的项目The DAO由于其自身漏洞,导致黑客窃取了当时价值约6000万美元的以太币。2016年7月,以太坊开发团队通过修改以太坊软件的代码,在第1920000个区块强行把The DAO及其子DAO的所有资金全部转到一个特定的退款合约地址,从而“夺回”黑客所控制的DAO合约币。
由于一部分矿工并不认同这个修改,于是形成两条链,一条为以太坊(ETH),一条为以太坊经典(ETC),各自代表不同的社区共识以及价值观。当以太坊发生了这次硬分叉后,产生了两条区块链。由于这两条链在发生分叉之前的数据都是一样的,一个非常有意思的现象出现了:原本持有以太币(ETH)的人,发现自己除了持有原有的ETH外,又有了相同数量的ETC。也就是说,凭空的多出了一些资产。这些资产的价值具体怎样,还要看市场交易情况。但总的来说,区块链的硬分叉,没有减少资产,反而让人手里多了一种资产,看上去总归是一件不亏的事情,于是区块链分叉就成了一种资产凭空增加的方式。
时间戳:
时间戳技术本身并没有多少复杂程度,只是一个毫秒数的字符序列,唯一标识出某一刻的时间(在区块链接的过程中会有增加会存在一个隐形的递增关系)。但在区块链技术中应用时间戳却是一个重大创新,时间戳为未来基于区块链的互联网和大数据增加了一个时间维度,使得数据更容易追溯,重现历史额成为可能。同时,时间戳可以作为存在性证明(Proof of Existence)的重要参数,它能够证实特定数据必然在某特定时刻是存在的,者保证了区块链数据库是不可篡改和不可伪造的,这也为区块链技术应用于公正、知识产权注册等时间敏感领域提供了可能。
UTXO:
UTXO叫做“未花费的交易输出”,它是比特币交易过程中的基本单位。除了创世区块以外,所有区块中的交易(TX)会存在若干个输入(Tx_in,也称资金来源)和若干哥输出(Tx_out,也称资金走向),创世区块和后来挖矿产生对顶区块中给矿工奖励的交易没有输入。在比特币系统中,某笔交易的输入必须是另一笔交易未被使用的输出,同时这笔输入也需要上一笔输出地址所对应的撕咬进行滚签名。当整个区块链网络中UTXO会被存储在每一个节点中,只有满足了来源于UTXO和数字签名条件的交易才是合法的。所以区块链系统中的新交易并不需要追溯整个交易历史,就可以确认当前交易是否合法。
哈希函数:
哈希函数在比特币系统中也有着重要的应用,区块链中的数据并不是原始数据或者交易记录,还包含他们的哈希函数值,即将原始数据编码未特定的长度的、有数据和字母组成的字符串后,记入区块链。哈希函数有着很多适合存储区快链数据的有点:
1.哈希函数处理的数据是单项的,通过处理过的输出值几部不可能计算出原始的输入值;
2.哈希函数处理不同长度的数据所耗费的时间是一致的,输出也是顶长的;
3.哈希函数的输入值即使只相差一个字节,输出值的结果也会迥然不同。比特币系统中最常采用的哈希函数是双SHA256哈希函数,通俗来书就是将不同长度的原始数据用两次SHA256哈希函数进行处理,在在输出长度为256的二进制数字来进行统一的识别和存储。
Merkle树
特点如下:
1、数据结构是一个树,可以是二叉树,也可以是多叉树(本BLOG以二叉树来分析)
2、Merkle Tree的叶子节点的value是数据集合的单元数据或者单元数据HASH。
3、Merke Tree非叶子节点value是其所有子节点value的HASH值。
双重支付:
和分叉相似,口述说明。
P2P网络:
P2P网络(peer-to-peer network,对等网络)是一种在对等者(peer)之间分配任务和工作负载的分布式应用架构,是对等计算机模型在应用层形成的一种组网或网络形式。因此,从字面上,P2P可以理解为对等计算或对等网络。区块链系统是建立在IP通信协议和分布式网络的基础上的,它不依靠传统的电路交换,而是建立在网络通信之上,完全通过互联网去交换信息。网络中所有的节点具有相同的地位,不存在任何特殊化的中心节点和层级结构,每个节点均会承担网络路由、验证数据区块等功能。网络的节点根据存储数据量的不同可以分为轻量级节点和全节点。
加密算法:
除了哈希算法之外,比特币中还存在者一种为交易加密的非对称加密算法(椭圆曲线加密算法)。非对称加密算法指的就是存在一堆数学相关的密钥,使用其中一个密钥进行加密的数据信息,只有使用另一个密钥才能对该信息进行解密。者对密钥中,对外公开的密钥叫做公钥,不公开的密钥叫做私钥。
数字签名:
数字签名就是在信息后面加上另一段内容,作为发送者的证明并且证明信息没有被篡改。一般是发送者将信息用哈希算法处理一个哈希值,然后用私钥对该哈希值进行加密,得出一个签名。然后发送者在将信息和签名一起发送给接收者。接受者使用公钥界面得到hash值的签名,在通过哈希加密算法计算验证信息的哈希值是否和解密签名的哈希值是否一样。
比特币的隐私模式:
传统的隐私模型:
身份信息 |
第三方 |
交易对手 |
交易 |
比特币隐私模型:····
身份信息 |
核心技术
区块链(比特币)的连接:
顾名思义,区块链即由一个个区块组成的链。每个区块分为去块头和区块体连个部分。去块头包含用来数显区块链接的前一区块的哈希(PrevHash)值(又称散列值)和用于计算挖矿的随机数(nonce)。前一区块的哈希值实际是上一个去块头部的哈希值,而计算随机数规则决定了那个矿工可以获取记录区块的权利。
共识机制:
区块链是伴随比特币诞生的,是比特币的基础技术架构。可以将区块链理解成为一个给予互联网的去中心化记账系统。类似比特币这样的去中心化数字货币系统,要求在没有中心节点的情况下保证各个诚实节点记账的一致性,就需要区块链来完成。所以区块链技术的核心是在没有中心控制器的情况下,在互相没有信任基础的个体之间就交易的合法性等达成共识的共识机制。
区块链的共识机制目前主要有4类:PoW、PoS、DPoS、分布式一致性算法。
PoW(工作量证明):工作量证明(Proof Of Work,简称POW),简单理解就是一份证明,用来确认你做过一定量的工作。监测工作的整个过程通常是极为低效的,而通过对工作的结果进行认证来证明完成了相应的工作量,则是一种非常高效的方式。比如现实生活中的毕业证、驾驶证等等,也是通过检验结果的方式(通过相关的考试)所取得的证明。工作量证明系统(或者说协议、函数),是一种应对拒绝服务攻击和其他服务滥用的经济对策。它要求发起者进行一定量的运算,也就意味着需要消耗计算机一定的时间。这个概念由Cynthia Dwork 和Moni Naor 1993年在学术论文中首次提出。而工作量证明(POW)这个名词,则是在1999年 Markus Jakobsson 和Ari Juels的文章中才被真正提出。工作量证明系统主要特征是客户端需要做一定难度的工作得出一个结果,验证方却很容易通过结果来检查出客户端是不是做了相应的工作。这种方案的一个核心特征是不对称性:工作对于请求方是适中的,对于验证方则是易于验证的。它与验证码不同,验证码的设计出发点是易于被人类解决而不易被计算机解决。举个例子,给定的一个基本的字符串"Hello, world!",我们给出的工作量要求是,可以在这个字符串后面添加一个叫做nonce的整数值,对变更后(添加nonce)的字符串进行SHA256哈希运算,如果得到的哈希结果(以16进制的形式表示)是以"0000"开头的,则验证通过。为了达到这个工作量证明的目标。我们需要不停的递增nonce值,对得到的新字符串进行SHA256哈希运算。按照这个规则,我们需要经过4251次计算才能找到恰好前4位为0的哈希散列。
Pos,dpos等简述。
解锁脚本:
脚本是区块链上实现自动验证、自动执行合约的重要技术。每一笔交易的每一项输出严格意义上并不是指向一个地址,而是指向一个脚本。脚本类似一套规则,它约束者接收方怎么样才能花费掉这个输出上锁定的资产。
交易的合法性校验也依赖于脚本。目前它依赖于两类脚本:锁定脚本于解锁脚本。锁定脚本是在输出交易上加上的条件,通过一段脚本语言来实现,位于交易的输出。解锁脚本于锁定脚本相对应。只有满足锁定脚本要求的条件,才能花掉这个脚本上对应的资产,位于交易的输入。通过脚本语言可以表达很多灵活的条件。解释脚本是通过类似我们编程领域里的“虚拟机”,他分布式运行在区块链网络里的每一个节点。