定义:去中心化的分布式 账本数据库
比特币区块链的原理:
block(区块、账簿):记录交易单的数据单元叫做block,一个block上回记录很多单交易。
每个block只记录比特币全网10分钟内的交易信息,大约每10分钟产生一个新的block。
比特币区块链原理——挖矿
block由那些最诚实最勤劳的节点产生,中本聪引入了工作量证明机制(POW)。
疑问:区块链金融中有没有挖矿的概念
高度:区块是每十分钟的一个交易记录打包在块里,每个块都有一个ID,在区块链中叫高度,以及交易纪录和上一个块的ID,每个区块连起来形成链。
疑问:区块链金融中高度也是10分钟产生一次吗
新产生的区块需要快速广播出去,其他节点进行对其验证,以防造假,每个区块存着上一个区块的hash值,可以溯源到源头,只有经过验证后才最终获得区块的打包权。
每个块的哈希是不一样的,10分钟的交易量最多4200次,超过这个数字的就无法打包,因此不同矿工挑手续费高的进行打包。出现分叉后又定义一套规则,并不马上确认哪个区块不合理,但两个块总有汇合到一起的时候,最终以链长的区块进行确认,链短的将被自动抛弃。
比特币存储——钱包地址:
去中心化:
区块链基础架构:
一个区块包含以下三部分:交易信息、前一个区块形成的哈希散列、随机数。
从技术上来讲,区块是一种记录交易的数据结构,反映了一笔交易的资金流向。
区块链本质上是一个去中心化的巨大账本数据库,作为比特币的底层技术,区块链是由一串使用密码学相关联所产生的数据块组成,每一个数据块中包含了多次比特币网络有效确认(一次有效交易检验被称为一次确认)的信息。随着交易不断产生,矿工不断验证交易创造新的区块来记录最新的交易,这个帐本会一直增长延长。这些区块按照时间顺序线性补充到原有的区块链上。每一个节点(每台通过钱包的客户端口连接到区块链网络上的电脑)都有一份完整的已有区块链备份记录,而这些都是通过进行数据验证算法解密的矿工网络自动完成。区块链上保留有所有关于每个节点和节点上比特币余额的信息,这些信息也被记录在完整的区块链上。公共式区块链帐本完全对外公开,这意味着区块链信息可以通过特定地址在区块链浏览器上(例如www.blockchain.info)进行查询。
新区块的生成将奖励矿工新的电子货币,还可以通过设置交易费用来奖励挖矿这种提供算力的行为,系统通过这样的方式完成电子货币的发行,这也让矿工有利可图,成为了矿工挖矿的主要动机。
每个节点接收到交易信息以后,生成新的区块并计算该区块的随机数答案,最快得到答案的节点将促成这笔交易的实现,完成交易的区块记录,并将该区块广播至所有节点。同时该节点将有可能获得一枚新的电子货币作为奖励。由于其过程很像矿工挖矿,因此节点提供算力的过程也叫作挖矿。通过挖矿,可以强制性保证块链中的数据按时间顺序存储,保持比特币网络的中立性,且允许比特币网络上不同的计算机对系统状态达成一致。
可靠数据库(Reliable Database):
系统中每一个节点都拥有最新的完整数据库拷贝,修改单个节点的数据库是无效的,因为系统会自动比较,认为最多次出现的相同数据记录为真。
上图为简化起见,仅展示了6处保留数据库副本的节点;在3个交易序列中,前2个交易的数据和签名得到了所有6个节点的验证,但第三个交易的位置5没有通过验证,将被其它节点的“一致意见”更改。
哈希散列
是密码学里的经典技术,可以用来验证有没有人篡改数据内容。
这时候我们再看对区块链的原始定义就能理解了:区块链是一种分布式数据库,是一串使用密码学方法相关联产生的数据块,每个数据块都包含了一次网络交易信息,用于验证其信息的有效性和生成下一个区块。
问:什么是区块链?
答:区块链(Blockchain)是指通过去中心化和去信任的方式集体维护一个可靠数据库的技术方案。通俗一点说,区块链技术就指一种全民参与记账的方式。所有的系统背后都有一个数据库,你可以把数据库看成是就是一个大账本。那么谁来记这个账本就变得很重要。目前就是谁的系统谁来记账,微信的账本就是腾讯在记,淘宝的账本就是阿里在记。但现在区块链系统中,系统中的每个人都可以有机会参与记账。在一定时间段内如果有任何数据变化,系统中每个人都可以来进行记账,系统会评判这段时间内记账最快最好的人,把他记录的内容写到账本,并将这段时间内账本内容发给系统内所有的其他人进行备份。这样系统中的每个人都了一本完整的账本。这种方式,我们就称它为区块链技术。
问:什么是比特币说的“挖矿”?
答:比特币中的“挖矿”实际上就是记账的过程,比特币的运算采用了一种称为“工作量证明(Proof of Work,PoW)”的机制,系统为了找出谁有更强大的计算能力,每次会出一道数学题,只有最快解出这道题目的计算机才能进行记账。而抢到记账权的计算机会获得25个比特币的奖励。通常把这个行为称为“挖矿”,把获得的比特币视为挖矿成功获得的奖励。
问:所有的区块链都需要挖矿吗?
答:并非所有的区块链项目都会采用类似于比特币这样的“工作量证明”方式,这更多出现在早期的区块链项目中。如果采取其他的证明机制,如“权益证明(Proof of Stake,PoS)”、“股份授权证明机制(DPoS,Delegate Proof of Stake)”都是不需要采取这样的挖矿方式。
问:什么是公有链?什么是私有链?什么是联盟链?
答:公有链是任何节点都是向任何人开放的,每个人都可以参与到这个区块链中参与计算,而且任何人都可以下载获得完整区块链数据(全部账本)。但是有些区块链的应用场景下,并不希望这个系统任何人都可以参与,任何人都可以查看所有数据,只有被许可的节点才可以参与并且查看所有数据。那么这种区块链结构我们称为私有链。
联盟链是指参与每个节点的权限都完全对等,大家在不需要完全互信的情况下就可以实现数据的可信交换,R3组成的银行区块链联盟要构建的就是典型的联盟链。
但是随着区块链技术的快速发展,不排除以后公有链和私有链的界限会变得比较模糊。因为每个节点的可以有较为复杂的读写权限,也许有部分权限的节点会向所有人开发,而部分记账或者核心权限的节点只能向许可的节点开放,那就会不再是纯粹的公有链或者私有链。
什么是“分叉”?
每一个子区块都只有一个父区块,但一个父区块可以暂时拥有很多子区块,这种情况被称为区块链分叉。这种只有当不同的矿工在同一时刻发现不同的区块时才会发生。这时解决的方法就是,每一个节点总是选择并尝试延长拥有最大工作量证明(最长或者最大难度)的区块链。
举个例子:
我们现在有一个区块链-蓝
(图片来自《精通比特币》,可爱的小姑娘来自我)
位于X地区的矿工与位于Y地区的矿工同时发现了两个区块。
我们假设:
矿工熊猫君A发现区块-红,
矿工兔子君B发现区块-绿。
当熊猫君A,兔子君B节点分别在比特币网络广播的时候,部分节点会先收到熊猫君A的广播,部分会先收到兔子君B的广播,然后分为两派阵营的节点会分别开始以他们接收到的区块作为父区块,进行深一步的挖矿活动。(这里节点的地理意义指的是网络拓扑上的位置,而非真实的地理位置。)
(图片来自《精通比特币》,可爱的小姑娘来自我)
就在大家如火如荼地紧张解题的关键时刻,一个接收到兔子君B所广播的节点的兔子君C,优先发现了下一个区块-粉,也就是说绿色阵营的小兔子们的区块链可以进行下一步延伸,就会比红色阵营的小熊猫们的长度长,红色阵营小熊猫遗憾出局。这样的话分叉问题就得到了解决。
这里我们需要提到一个名词,“共识攻击”。一个很著名的场景就是“51%攻击”。如果一群矿工拥有了全网51%的算力,那么只要他们联合起来就可以打击整个比特币网络。他们可以认为地去制造一个分叉的区块链实现双重支付,拿我们上文的例子举例,攻击者在区块-红中进行过了交易,结果他强行制造出区块-绿,并且区块-绿中将原本的交易替换成另一笔交易(把原本应该给卖家的钱打入自己同伙的钱包中),然后在区块绿的基础上再计算一个区块-粉,这样包含伪造的区块的区块链就比包含真实交易的区块红高出一个高度,此时,包含双重支付的恶意区块链将取代真实区块链,从而实现诈骗。51%的概念并不是说攻击者需要全网51%的算力才能进行攻击,理论上来说不到51%也是可以实现攻击的,我们只是说拥有超过51%的算力的攻击几乎我们就可以判定它一定会成功。
上面都是在比特币场景下进行的论述
merle树是一种计算机算法,用于完整性校验,最简单的方法就是对要校验的整个的数据文件做个哈希运算,把得到的哈希值公布在网上,这样我们把数据下载到手之后,再次运算一下哈希值,如果运算结果相等,就表示我们下载过程中文件没有任何的损坏。因为哈希的最大特点是,如果你的输入数据,稍微变了一点点,那么经过哈希运算,你得到的哈希值将会变得面目全非。
你要真诚的告诉对方,Merkles树是现代计算机一个非常基础的算法,广泛用于文件系统,操作系统内存管理,大名鼎鼎的Git,BT下载这些都大量用到了merkle树。
merle树
每一个区块中包含一个梅克尔树根,这个树根是很多交易的不断重复hash计算得到的。
假设一个区块中包含4比交易,每个交易都可以生成一个hash值,这4个hash值两两结合生成2个hash,然后这两个hash在进行一次hash计算救得到一个hash值,这个hash值就是梅克尔树根。
如果你希望确定一笔交易的状态,只要要求对方提供一个梅克尔证明,也就是得到特定的交易,交易的所在的梅克尔树根就是就是区块头,上一次我已经在题主的问题说明了,客户端会不断同步最新的交易数据,spv只用同步区块头就可以了,区块头里面包含区块交易的梅克尔树根。
只要本地能验证交易所在的区块头根哈希和本地相应的区块的根哈希就可以确定。
merkle值计算方法
区块头的哈希值包含两个重要要素:一是merkle根哈希值;二是父区块哈希值,因此,区块头哈希值是包含了本区块所有交易信息和父区块的信息的电子指纹,任何针对交易的修改都会通过merkle值的变化导致区块哈希值的变化;任何对父区块信息的修改,都会导致父区块哈希值的变化,从而导致区块头哈希值的变化。因此,通过哈希加密,任何针对某块信息的修改(如277315块),都会导致后续所有区块数据的修改(不仅仅要修改277315块,还要修改277316块等所有后续块)。由此,可见区块链的加密方法是多么严格。
区块头哈希值链接merkle值计算方法
区块头的哈希值包含两个重要要素:一是merkle根哈希值;二是父区块哈希值,因此,区块头哈希值是包含了本区块所有交易信息和父区块的信息的电子指纹,任何针对交易的修改都会通过merkle值的变化导致区块哈希值的变化;任何对父区块信息的修改,都会导致父区块哈希值的变化,从而导致区块头哈希值的变化。因此,通过哈希加密,任何针对某块信息的修改(如277315块),都会导致后续所有区块数据的修改(不仅仅要修改277315块,还要修改277316块等所有后续块)。由此,可见区块链的加密方法是多么严格。
区块头哈希值链接