编辑推荐: |
文章主要介绍了区块链六层模型,并且以一个交易的例子来说明这模型所起的作用,希望对您能有所帮助。 本文来自于jianshu,由火龙果软件Luca编辑、推荐。 |
区块链就是一个分布式、有着特定结构的数据库,是一个有序,每一个块都连接到前一个块的链表。也就是说,区块按照插入的顺序进行存储,每个块都与前一个块相连。这样的结构,能够让我们快速地获取链上的最新块,并且高效地通过哈希来检索一个块。
1、区块链六层模型
一个标准的区块链项目,应该至少包含数据层、网络层、共识层这三层,应用层、合约层、激励层可以不包含。
以一个交易的例子来说明这模型所起的作用,假如说,我们有三个角色,
A有100btc,B有0btc,c是矿工,现在A给B转10个btc,
1、A->B转账10比特币,数据层
2、转账交易要确认,需要广播出去,网络层
3、把交易打包到区块形成新的区块,并且加入到区块链,共识层
4、第三步的奖励,激励层
5、钱包,应用层
区块链开发语言
2、区块链模型之数据层
1、数据层的特点是:
不可篡改
全备份
完全平等(数据、权限、代码)
要实现这样的特点,依靠是链式结构,如下
Prev Hash:父区块哈希,特定值的扫描。比方说SHA-256下的随机散列值,保证数据的可靠性和不可篡改。
Nonce:随机数,类似于区块的随机散列值
2、数据层之数据结构:
区块:一种包含在公开账簿(区块链)里的聚合了交易信息的容器数据结构,包含区块头和区块主体,区块头 + 区块体 <= 1M (比特币的扩容在讨论中)
区块头:80个字节
区块体:每个区块包含2000个交易,平均每个交易至少是250字节。因此,包含完整交易的区块比区块头的4千倍还要大。
区块头
区块头由三组区块元数据(Blockmeta)组成
一组元数据:父区块哈希值,用于该区块与区块链中的前一区块相连接
二组元数据:Merkle根,一种用来有效地总结区块中所有交易的数据结构
三组元数据:难度目标,时间戳和Nonce与生产区块相关
区块头哈希值
产生:通过SHA256算法对区块头进行二次哈希计算得到的数字指纹
特点:是唯一,可计算
存储:不包含在区块的数据结构里,可存储在独立的数据库表中
区块高度
产生:节点在接受来自比特币网络的区块时,动态地识别该区块在网络中的位置(区块高度)
特点:不是唯一的(短时间)
存储:不包含在区块的数据结构里,可存储在独立的数据库表中
补充:1.安全散列算法(The Secure Hash Algorithm,SHA)美国国家安全局 (NSA) 设计,美国国家标准与技术研究院(NIST) 发布的一系列密码散列函数。
2.第一个区块高度为0,2016年2月25号区块高度大约为399,900
3、数据层之区块的链接
1、比特币的完整节点保存了区块链从创世区块起的一个本地副本,该区块链的本地副本会不断地更新用于扩展这个链条。
2、一个节点从网络接收传入的区块时,它会验证这些区块,然后链接到现有的区块链上。
3、对于一个新区块,节点会在“父区块哈希值”字段里找出包含它的父区块的哈希值。
4、数据层之创世区块
1、创世块是指块链的第一个块,现在的比特币客户端版本把块号定为0,以前的版本把该块块号定为1。
2、交易的输入:The Times 03/Jan/2009 Chancellor on brink of second bailout for banks。(翻译:《泰晤士报》,2009年1月3日,财政大臣正站在第二轮救助银行业的边缘)。
3、创世块的收益不可能被花掉,因为创世块是用代码表示的(这个巧合可能是故意的),尽管如此,其50BTC收益还是被发送到地址:1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa。
备注:
难度公式:difficulty = difficulty_1_target / current_target。
difficulty_1压缩值:0x1d00ffff
difficulty_1_target固定值:0xffff2^(8(0x1d-3)) -------这两个值都是固定的
current(计算目标)压缩值:0x1729d72d(10进制为38818029,如下图中的计算目标)
current(计算目标)固定值:0x29d72d2^(8(0x17-3))
难度系数difficulty= 0xffff2^(8(0x1d-3)) / 0x29d72d2^(8(0x17-3))
即,计算目标越小,难度系数越高
比特币区块链浏览器 https://blockchain.info/zh-cn/
5、数据层之时间戳
时间戳,指的是各个节点本地的时间戳
区块产生频率:10 分钟
区块拒绝条件:
上限 > 前7个块的时间戳的中位数
下限 < 系统平均时间之后2小时
6、数据层之交易记录
7、数据层之私钥,公钥,钱包地址
比特币系统使用了椭圆曲线签名算法,算法的私钥由32个字节随机数组成,通过私钥可以计算出公钥,公钥经过一系列哈希算法和编码算法得到比特币地址,地址也可以理解为公钥的摘要(hash)。
8、数据层之记账原理
已知:发送方(张三 公钥地址):19anBP……iPitVr
接收方(李四 公钥地址):1Eu8Uk…….Xy7i2B
金额:10 BTC
9、数据层之交易签名,校验流程
一个广播出去的区块交易数据包含三部分,
原始数据,包含转账金额和对方钱包地址
签名,使用转账人私钥对原始数据进行签名
公钥,转账人公钥(公钥是根据私钥产生的,可以私钥签名的数据进行验签)
10、数据层之非对称加密算法
在“加密”和“解密”的过程中分别使用两个密码
私钥:是信息拥有者才知道的,可以加密信息或者解密公钥数据(信息的安全性)
公钥:是公开全网可见的,用公钥来验证信息,加密数据(信息的真实性);
非对称加密椭圆曲线加密算法(ECC)>secp256k1
11、数据层之Merkle树
Merkle 树是一种哈希二叉树,用于快速递归和校验大规模数据完整性,是一种平衡树(如果是奇数个交易,则多余的那个自己复制自己)
每个区块都包括了产生于该区块的所有交易,并且以Merkle 树表示
H(A)=SHA256(SHA256(交易A))
H(AB)=SHA256(SHA256(H(A)+H(B)))
为了证明区块中存在某个特定的交易,只需要计算log2(N)个哈希,16笔交易可以由4个哈希+Merkle树根来证明了,65535交易,只需16个哈希
SPV : 简单支付验证,一个节点只需要仅下载区块头(80字节)+Merkle路径就能证明一笔交易的存在,这个节点称之为轻节点。
如上图,假如我们想要确定H(K)这笔交易的准确性,证明方法:
1)服务器A,轻节点,只有区块头,没有区块体,但是能够与全2节点通信,获得Merkle树的hash;
2)服务器B,全节点,区块头和区块体都有;
3)确定Merkle路径(H(L),H(IJ),H(MNOP),H(ABCDEFGH))
4)向全及诶单请求数据(H(L),H(IJ),H(MNOP),H(ABCDEFGH))
5)进行验证,多次hash运算,最后跟Merkle根做hash比较
12、哈希(hash)函数
哈希函数:Hash(原始信息) = 摘要信息
原始信息可以是任意的信息,hash之后会得到一个简短的摘要信息。
哈希函数有几个特点:
同样的原始信息用同一个哈希函数总能得到相同的摘要信息
原始信息任何微小的变化都会哈希出面目全非的摘要信息
从摘要信息无法逆向推算出原始信
3、区块链模型之网络层
1、网络层之数据传播和验证
新的交易向全网进行广播
每一个节点都将收到的交易信息纳入一个区块中
每个节点都尝试在自己的区块中找到一个具有足够难度的工作量证明(挖矿)
当一个节点找到了一个工作量证明(获得打包区块的资格),它就向全网进行广播(新打包的区块)
当且仅当包含在该区块中的所有交易都是有效的且之前未存在过的,其他节点才认同该区块的有效性
其他节点表示他们接受该区块,而表示接受的方法,则是在跟随该区块的末尾,制造新的区块以延长该链条,而将被接受区块的随机散列值视为先于新区块的随机散列值
2、网络层之P2P技术
P2P组网技术早期应用在BT这类P2P下载软件中,这就意味着区块链具有自动组网功能,支持TCP,UDP等通信协议
4、区块链模型之共识层
拜占庭将军问题:如何让不信任,不可靠的多方,协同工作,达成统一目标——靠共识。
拜占庭将军问题是Leslie Lamport(2013年的图灵讲得主)用来为描述分布式系统一致性问题(Distributed Consensus)在论文中抽象出来一个著名的例子(互不信任的多支军队同时保持进攻或者防守)。
共识层封装了网络节点的各类共识机制算法,共识机制算法是区块链的核心技术,因为这决定了区块的产生,而记账决定方式将会影响整个系统的安全性和可靠性。
目前已经出现了十余种共识机制算法,其中比较最为知名的有
工作量证明机制(PoW,Proof of Work)
实用拜占庭容错算法(PBFT)
权益证明机制(PoS,Proof ofStake)
股份授权证明机制(DPoS,Delegated Proof of Stake)等。
POW:工作量证明机制
比特币通过对这个系统做出一个简单的(事后看是简单的)修改解决了这个问题,它为发送信息加入了成本,这降低了信息传递的速率,并加入了一个随机元素以保证在一个时间只有一个城邦(或者很少)可以进行广播,同时在广播时会附上自己的签名,这个过程就像将军A(节点)像其他的将军发起一个进攻(或者防守)提议一样,如果是诚实的将军就会立刻同意,只要诚实的将军占比大于51%,那么大家行动就会保持一致。
它加入的成本是“工作量证明”,并且它是基于计算一个随机哈希算法(挖矿)的。
不过在进行工作量证明之前,记账节点会做进行如下准备工作:
收集广播中还没有被记录账本的原始交易信息
检查每个交易信息中付款地址有没有足够的余额
验证交易是否有正确的签名
把验证通过的交易信息进行打包记录
添加一个奖励交易:给自己的地址增加12.5比特币
如果节点争夺记账权成功的话,就可以得到12.5比特币的奖励。
PBFT:实用拜占庭容错算法
PBFT是一种状态机副本复制算法,即服务作为状态机进行建模,状态机在分布式系统的不同节点进行副本复制。每个状态机的副本都保存了服务的状态,同时也实现了服务的操作。执行过程如下
客户端向主节点发送请求调用服务操作
主节点通过广播将请求发送给其他副本
所有副本都执行请求并将结果发回客户端
客户端需要等待2f+1个不同副本节点发回相同的结果,作为整个操作的最终结果。
PBFT对每个副本节点提出了两个限定条件:
1、所有节点必须是确定性的。也就是说,在给定状态和参数相同的情况下,操作执行的结果必须相同;
2、所有节点必须从相同的状态开始执行。在这两个限定条件下,即使失效的副本节点存在,PBFT算法对所有非失效副本节点的请求执行总顺序达成一致,从而保证安全性。
Pos:股权证明
就是一个根据你持有货币的量和时间,给你发利息的一个制度。
类似于财产储存在银行,这种模式会根据你持有数字货币的量和时间,分配给你相应的利息。
在股权证明POS模式下,有一个名词叫币龄,每个币每天产生1币龄,
比如:比如你持有100个币,总共持有了30天,那么,此时你的币龄就为3000,这个时候,如果你发现了一个POS区块,你的币龄就会被清空为0。你每被清空365币龄,你将会从区块中获得0.05个币的利息(假定利息可理解为年利率5%),那么在这个案例中,利息 = 3000 * 5% / 365 = 0.41个币。
POS的存在主要是从经济学上的考虑和创新。
DPos:股份授权证明机制(又称受托人机制)
原理是让每一个持有比特股的人进行投票,由此产生101位代表 , 我们可以将其理解为101个超级节点或者矿池,而这101个超级节点彼此的权利是完全相等的。
从某种角度来看,DPOS有点像是议会制度或人民代表大会制度。如果代表不能履行他们的职责(当轮到他们时,没能生成区块),他们会被除名,网络会选出新的超级节点来取代他们。
DPOS的出现最主要还是因为矿机的产生,大量的算力在不了解也不关心比特币的人身上,类似演唱会的黄牛,大量囤票而丝毫不关心演唱会的内容。
数据层、网络层、共识层是构建区块链技术的必要元素,缺少任何一层都将不能称之为真正意义上的区块链技术。