区块链是随着比特币等数字加密货币的日益普及而逐渐兴起的一种的技术,它提供了一种去中心化,无需信任积累的信用建立范式。区块链本质上是一种对等网络(P2P)的分布式账本数据库,比特币的底层就是区块链技术架构,区块链本身其实是一串链接的数据区块,类似C里面的链表结构,块中有内容,指针指向下一个区块,其链接指针是采用密码学hash算法对区块头进行处理所产生的区块头哈希值,每一个数据块中记录了一组采用哈希算法组成的树状交易状态信息,这样保证每个区块内的交易数据不可篡改,区块链里链接的区块也不可篡改。
基本概念:
一个完整的区块链系统包含了很多技术,其中有储存数据的数据区块以及之上的数字签名,时间戳等技术,有作为支撑的P2P网络和维护系统的共识算法,有挖矿和工作量证明机制,有匿名交易机制和比特币钱包,链龄,UTXO,Merkle树,双花等相关技术。
1,数据区块:
比特币的交易记录会保存在数据区块之中,比特币系统中大约每10分钟会产生一个区块,每个数据区块一半会包含去块头(Header)和区块体(Body)两个部分。区块头封装了当前版本号(version),前一区块地址(Prev-block),时间戳(Timestamp),随机数(nonce),当前区块的目标哈希值(bits),Merkle树的根值(Merkle-root),等信息。
区块链中则主要包含交易计数和交易详情。交易详情就是比特币系统中的记账本,每一笔交易都会被永远记入数据区块中,而且任何人都可以查询。区块体中的Merkle树将会对每一笔交易进行数字签名,,如此可以确保每一笔交易都不可伪造且没有重复交易。所有的交易将通过Merkle树的hash过程产生一个唯一Merkle根植记入去块头。
如果你使用的是比特币核心钱包(bitcoin core),那么每当你打开客户端时,区块数据文件都会被文件同步到电脑硬盘中,可以在blocks文件下找到它们。
2,挖矿与分叉问题
区块在挖矿过程中产生。所谓挖矿,实际上是穷举随机数算法,把上个区块的哈希值加上10分钟内的全部交易单打包,再加上一i个随机数,算出一个256位的字符串哈希值,输入的随机数Nonce使哈希值满足一定条件就获得这个区块的交易记账权,信产生的区块需要快速的广播出去,以便其他节点进行验证,以防造假,每个区块存着上一个区块的哈希值,可以溯源到源头,只有经过验证后才最终获得区块的交易记账权,比特币系统会让挖矿的矿工竞争记账权(在主链上链接区块的权利),这个竞争机制就是工作量证明。挖矿需要付出大量时间和能源,,谁付出的工作量多就能以更大的概率获得一个区块的记账权,获得记账权的矿工会将当前区块链接到前一区块,形成最新的区块主链,该矿工也会得到系统奖励的一定数量(2009~2013年每年每10分钟产生50个比特币,2014年至今每10分钟产生的比特币将减半成25个)的比特币,所有的区块链接在一起形成了区块链的主链,从创世区块到当前区块,在区块链之上所有数据历史都可以被追溯和查询。
3,时间戳和不可篡改性
在比特币系统中,获得记账权的节点在链接区块时需要在区块头加盖时间戳,用于记录当前区块数据的写入时间。每一个随后区块中的时间戳都会对前一个时间进行增强,形成一个时间递增的链条。时间戳本身并没有多复杂,但在区块链技术中确实一个重大创新,时间戳为未来基于区块链的互联网和大数据增加一个时间维度,使得数据更容易追溯,重现历史也成为可能。
4,分布式数据库
比特币系统中的区块就像一个记账本一样,记录所有比特币的交易信息,每一个比特币用户的比特币收支情况都被永久地嵌入了数据区块中以供别人查询。这些数据区块中的交易数据存放在每一个比特币用户的客户端节点中,所有的这些节点则组成了比特币及其坚韧的分布式数据库系统。任何一个节点的数据库被破坏都不会影响整个数据库的正常运转,因为其他的健康节点都保存了完整的数据库。
5,UTXO交易模式
UTXO(Unspent Transaction Outputs)是未花费的交易输出,它是比特币交易过程中的基本单位。除创世区块以外,所有区块中的交易(Tx)会存在若干个输入(Tx_in,也称资金来源)和若干个输出(Tx_out,也称为资金去向),创世区块和后来挖矿产生的区块中给矿工奖励的交易没有输入,除此之外,在比特币系统中,某笔交易的输入必须是另一笔交易没使用的输出,同时这笔输入也需要上一笔输出地址所对应的私钥进行签名。当前整个区块链网络中的UTXO会被储存在每一个节点中,只有满足了来源于UTXO和数字签名条件的交易才是合法的。所有区块链系统中的新交易并不需要追溯整个交易历史,就可以确认当前交易是否合法。
6,哈希函数
哈希函数在比特币系统中也有着重要的应用,区块链中的数据并不是只是原始数据或者交易记录,还包括它们的哈希数值,即将原始数据编码为特定长度的,由数字和字母组成的字符串后,记入区块链。哈希函数有着很多适合存储区块链数据的优点:
a,哈希函数处理过的数据是单向性的,通过处理过的输出值几乎不可能计算出原始的输入值;
b,哈希函数处理不同长度的数据所耗费的时间是一致的,输出值的结果也是定常的;
c,哈希函数的输入值即使只差一个字节,输出值的结果也会迥然不同,比特币系统中最常采用的哈希函数SHA256哈希函数,通俗来说就是将不同长度的原始数据用两次SHA256哈希函数进行处理,再输出长度256的二进制数字进行统一的识别和存储。
7,Merkle树
比特币区块链系统中采用的是Merkle二叉树,他的主要作用是快速归纳和校验区块数据的完整性,它将会区块链中的数据分组进行哈希运算,向上不断递归运算产生新的哈希节点,最终只剩下一个Merkle根存入区块头中,每个哈希或其哈希值。在比特币系统中使用Merkle树有诸多优点:首先是极大地提高了区块链的运作效率和可扩展性,使得区块头只需要包含根哈希值而不必封装所有底层数据,这使得哈希运算可以高效地运行在智能手机甚至物联网设备上;
8,双重支付
双重支付问题又称为“双花”问题,即利用货币的数字特性用“同一笔钱”完成两次或者多次支付。在传统的金融和货币体系中,由于金钱货币是物理实体,具有客观唯一存在的属性,所以可以避免双重支付的情况。但在其他电子货币系统中,则需要可信第三方管理机构提供保证,比如Q币有腾讯承认,区块链技术则不需要第三方机构而只通过分布式节点之间的相互验证和共识机制,有效避免了双重支付的问题,在信息传输的同时完成了价值转移。区块链技术通过区块链形成的时间戳技术加上验证比特币是否满足UTXO(未花费交易)和数字签名,有效避免了双重支付的问题。如果有人同一笔UTXO构造两笔付给不同交易方的交易,则比特币客户端只会转发最先被侦听到的那个。矿工会选择将那笔交易包入未来区块,当其中一笔交易所在的区块后又5个链接的区块,这笔交易已经得到6次确认。在比特币区块链上,6次确认后可以基本保证比特币不被双花。
9,P2P网络
P2P网络是一种在对等者(peer)之间分配任务和工作负载的分布式应用架构,是对等计算模型在应用层形成的一种组网或网络形式,因此,从字面上,P2P可以理解为对等计算或对等网络,迅雷就是采用P2P技术,而区块链系统是建立在IP通信协议和分布式网络的基础上的,它不依靠传统的电路交换,而是建立网络通信之上,完全通过互联网去交换信息,网络中所有节点具有同等的地位,不存在任何特殊化的中心节点和层级结构,每个节点均会承担网络路由,验证数据区块等功能,比特币网络现在大约有几十G,还在不断增长中。
10,加密算法
除了哈希算法外,比特币中还存在一种交易加密的非对称加密算法(椭圆曲线加密算法)。非对称加密算法指的就是存在一对数学相关的密钥,使用其中一个密钥进行加密的数据信息,只有使用另一个密钥才能对该信息进行加密,这对密钥中,对外公布的的密钥叫公钥,不公开的密钥叫私钥。打个比方,公钥就像银行账户,私钥就是密码。
日常深推公众号: