区块链

“发送报文时,发送方用一个哈希函数从报文文本中生成 报文摘要,然后用自己的私人密钥对这个摘要进行加密,这个加密后的摘要将作为报文的数字签名和报文一起发送给接收方,接收方首先用与发送方一样的哈希函数从接收到的原始报文中计算出报文摘要,接着再用发送方的公用密钥来对报文附加的数字签名进行解密,如果这两个摘要相同、那么接收方就能确认该数字签名是发送方的。
数字签名有两种功效:一是能确定消息确实是由发送方签名并发出来的,因为别人假冒不了发送方的签名。二是数字签名能确定消息的完整性。因为数字签名的特点是它代表了文件的特征,文件如果发生改变,数字摘要的值也将发生变化。不同的文件将得到不同的数字摘要。 一次数字签名涉及到一个哈希函数、发送者的 公钥、发送者的 私钥。”

交易验证过程

比特币的交易验证依赖于两类脚本:锁定脚本和解锁脚本。

锁定脚本是一个放在一个交易输出值上的“障碍”,同时它明确了今后花费这笔输出的条件。

解锁脚本是一个“解决”或满足被锁定脚本在一个交易输出上设定的花费条件的脚本,同时它将允许输出被消费。


每一个比特币客户端会通过同时执行锁定和解锁脚本来验证一笔交易。对于比特币交易中的每一个输入,验证软件会先检索输入所指向的UTXO。这个UTXO包含一个定义了花费条件的锁定脚本。接下来,验证软件会读取试图花费这个UTXO的输入中所包含的解锁脚本,并执行这两个脚本。

交易验证过程如下图所示:




区块链(Blockchain)是由节点参与的分布式数据库系统[1],它的特点是不可更改,不可伪造,也可以将其理解为账簿系统(ledger)。它是比特币的一个重要概念,完整比特币区块链的副本,记录了其代币(token)的每一笔交易。通过这些信息,我们可以找到每一个地址,在历史上任何一点所拥有的价值。

  区块链是由一串使用密码学方法产生的数据块组成的,每一个区块都包含了上一个区块的哈希值(hash),从创始区块(genesis block)开始连接到当前区块,形成块链。每一个区块都确保按照时间顺序在上一个区块之后产生,否则前一个区块的哈希值是未知的。这些特征使得比特币的双花(double-spending)非常困难。区块链是比特币的核心创新。

  区块链概念的出现,首先是在中本聪的比特币白皮书[2]中提到的,但是以工作量证明链(proof-of-work chain)的形式而存在,以下是中本聪对区块链概念的描述:

  时间戳服务器通过对以区块(block)形式存在的一组数据,实施随机散列而加上时间戳,并将该随机散列进行广播,就像在新闻或世界性新闻组网络(Usenet)的发帖一样 。显然,该时间戳能够证实特定数据必然于某特定时间是的确存在的,因为只有在该时刻存在了才能获取相应的随机散列值。每个时间戳应当将前一个时间戳纳入其随机散列值中,每一个随后的时间戳都对之前的一个时间戳进行增强(reinforcing),这样就形成了一条链(Chain)。
  节点始终都将最长的链视为正确链,并持续工作和延长它。如果有两个节点同时广播不同版本的新区块,那么其他节点在接收到该区块的时间上,将存在先后差别。当此情形,他们将在率先收到的区块基础上进行工作,但也会保留另外一条链,以防后者变成最长链。该僵局(tie)的打破,要等到下一个工作量证明被发现,而其中的一条链被证实为是较长的一条,那么在另一条分支链上工作的节点将转换阵营,开始在较长的链上工作。

  比特币钱包的功能依赖于与区块链的确认,一次有效检验称为一次确认。通常一次交易要获得数个确认才能进行。轻量级(SPV )[3]比特币钱包, 其客户端在本地只需保存与用户可支配交易相关的数据,而不会存储完整的区块链。

  区块链技术是众多加密数字货币的核心,包括比特币、以太坊、莱特币、狗狗币等。维护区块链的方式,有工作量证明(proof-of-work)、权益证明(proof-of-stake)等。

二、区块链系统核心优势

区块链体系结构的核心优势包括:
  任何节点都可以创建交易,在经过一段时间的确认之后,就可以合理地确认该交易是否为有效,区块链可有效地防止双花问题的发生。
  对于试图重写或者修改交易记录而言,它的成本是非常高的。
  区块链实现了两种记录:交易(transactions)以及区块(blocks)。交易是被存储在区块链上的实际数据,而区块则是记录确认某些交易是在何时,以及以何种顺序成为区块链数据库的一部分。交易是由参与者在正常过程中使用系统所创建的(在加密数字货币的例子中,一笔交易是由bob将代币发送给alice所创建的),而区块则是由我们称之为矿工(miners)的单位负责创建。

三、区块链工作原理

3.1 什么是区块?

  数据通过称之为区块(block)的文件,永久记录在数字货币网络上。它们好比是一个股票交易账本。新的区块会被添加到记录(区块链)的末端,而且一旦书写就很难修改或移除。

3.2 .区块结构

大小字段描述
4字节区块大小用字节表示的该字段之后的区块大小
80字节区块头组成区块头的几个字段
1-9(可变整数)交易计数器交易的数量
可变的交易记录在区块里的交易信息

3.3 区块头

  区块头由三组区块元数据组成。首先是一组引用父区块哈希值的数据,这组元数据用于将该区块与区块链中前一区块相连接。第二组元数据,即难度、时间戳和nonce,与挖矿竞争相关 。第三组元数据是merkle树根[4](一种用来有效地总结区块中所有交易的数据结构)。

3.4 区块头结构

大小字段描述
4字节版本版本号,用于跟踪软件/协议的更新
32字节父区块哈希值引用区块链中父区块的哈希值
32字节Merkle根该区块中交易的merkle树根的哈希值
4字节时间戳该区块产生的近似时间(精确到秒的Unix时间戳)
4字节难度目标该区块工作量证明算法的难度目标
4字节Nonce用于工作量证明算法的计数器

3.4 创始区块

  比特币区块链的第一个区块,创建于2009年,我们称之为创世区块。它是比特币区块链里所有区块的共同祖先,这意味着你从任一区块,循链向后回溯,最终都将到达创世区块。

  每一个节点都“知道”创世区块的哈希值、结构、被创建的时间和里面的一个交易。因此,每个节点都把该区块作为区块链的首区块,从而构建了一个安全的、可信的区块链的根。

  在chainparams.cpp里可以看到创世区块被编入到比特币核心客户端里。

创世区块的哈希值为:

0000000000 19d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f

  你可以在任何区块浏览网站搜索这个区块哈希值,如区块元(blockmeta),你会发现一个用包含这个哈希值的链接来描述这一区块内容的页面:
http://blockmeta.com/block/000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f
在命令行使用比特币核心客户端:

$ bitcoindgetblock 000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f{    
"hash":"000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f",    "confirmations":308321,    "size":285,    "height":0,    
"version":1,    "merkleroot":"4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2
127b7afdeda33b",    "tx":["4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b"],    "time":1231006505,    "nonce":2083236893,    "bits":"1d00ffff",    
"difficulty":1.00000000,    "nextblockhash":"00000000839a8e6886ab5951d76f411475428afc90947ee320161bbf18eb6048"}

  创世区块包含一个隐藏的信息。在其Coinbase交易的输入中包含这样一句话“The Times 03/Jan/2009 Chancellor on brink of second bailout forbanks.”这句话是泰晤士报当天的头版文章标题,引用这句话,既是对该区块产生时间的说明,也可视为半开玩笑地提醒人们 , 一个独立的货币制度的重要性,同时告诉人们随着比特币的发展,一场前所未有的世界性货币革命将要发生。该消息是由比特币的创立者中本聪嵌入创世区块中。

四、区块链分叉

  诚实矿工只创建最长有效链上的最新区块。“长度”(Length)指区块链的累计计算难度,而不是是区块数目。当包括在链中的所有区块以及交易都有效,且是从创世区块开始的链,才是被我们承认的有效区块链。

  对于区块链中的任意一个区块,到达创世块的路径只有一条。然而,从创世块开始,会有分叉的情况出现。当创建两个区块的时间差只有几秒时,经常会创建出一个分叉[5]区块。当发生这种情况时,节点就会在他们最先接收到的那个区块上创建区块。无论哪一个区块包含在下一个区块中,它都会成为主链的一部分,因为这条链更长。

  短链(无效链)中的区块没有什么作用。当比特币客户端切换至另外一条更长的区块链时,短链中的所有有效交易区块都重新添加到序列交易池中,且会包含在下一个区块中。短链中的区块奖励不会呈现在最长的区块链中,因此实际上他们是有损失的,这就是为什么需要网络强制的100个区块的成熟时间来让产生存在。

  在短链中的区块,我们通常称之为“孤儿块”(orphans)。这是因为,在长链中这个生成交易并没有父系区块,因为这些生成交易在交易PRC列表中显示为孤儿。一些矿池误解这些信息,声称他们的区块是”孤儿“。事实上,这些区块都有父系区块,而且甚至可能有子系。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值