区块链技术之比特币运作原理

什么是比特币

点对点的传输的一个去中心化的电子现金系统。每个节点都共同维护一个区块链形式存储的交易记录,每个比特币节点遵守同一个比特币网络协议,并基于密码学原理加密每一笔交易记录和区块,实现每一笔交易不可逆、防篡改、去中心化的、数据可监管溯源的电子现金交易系统。

比特币特点

  • 比特币最初由中本聪2008年发明
  • 比特币发行和交易不依赖中央机构
  • 比特币的发行总量不会超过2100万个
  • 只要能够联网,安装比特币客户端,任何人都能接入到这个比特币网络
  • 比特币的账户地址是匿名的
  • 任何国家或者机构无法监管或者操纵这个比特币网络
  • 比特币是基于现代密码学实现的点对点交易的分布式超级账本

比特币行情

比特币从诞生以来已经翻了好几万倍了,比特币的第一笔交易是一个程序员用50btc买了披萨,第一批持有比特币的人估计早已经是千万富翁,但是神奇的比特币之父中本聪的创始区块及它的账户的其他比特币都还没有发生转账交易。

区中心化的比特币网络

这个比特币网络大致是这个样子的,节点分为以下几类:

  • 全数据节点:保存了完整的区块链所有交易信息
  • 矿工节点:负责打包新的交易数据制作新的区块
  • 轻客户端节钱包节点:只保留自己关心交易数据

什么是区块链


区块链有以下几个特点:

  • 区块链本质是一个分布式的超级账本,整个比特币网络各个节点仅仅认可和维护记录一样且长度最长的区块链
  • 每个区块由区块头(上一个区块的hash值,当前区块的高度,出块的时间等)+ 交易记录列表 组成
  • 所有经过验证符合比特币协议的交易记录都会被“矿工”打包进新的区块,然后广播给所有其它节点。

每一个新的区块的都有一个指向上一个区块的hash值,所以这条链被形象的称之为区块链

什么是挖矿


上图是传统的煤矿挖矿的矿工,比特币的“挖矿”当然不是这个挖矿。
比特币的挖矿是指:将接收到全网的交易记录打包制作到一个新区块并广播至其它节点的过程,由于这个过程通常不是那么容易,需要不停的hash计算符合标准的随机数才能生效新区块,平均全网每10分钟才能有计算出这样的随机数,所以形象的形容为比特币的“挖矿”

挖矿的原理


挖矿的过程如下:

  1. 每个矿工节点都共同监听最新的交易数据,并做合法性校验,将符合校验的交易打包进新的区块中
  2. 在新的区块中添加给矿工账户转账的一笔交易,给矿工自己加上相应的比特币奖励和交易记录收取的手续费
  3. 最后一步用新区块的所有内容+一个随机数做SHA-256计算出hash值,使得这个hash值的二进制数符合一定规则,才能向全网广播这个新的区块

那么接下来我们思考下以下三个问题:

  1. 整个网络那么多矿工谁都有打包制作的权利,怎么解决并发问题?
  2. 这种“苦力活”如果没人做怎么办?
  3. 如果这个矿工“不老实”怎么办?

1. 整个网络那么多矿工谁都有打包制作的权利,怎么解决并发问题?


在比特币的协议中规定,给挖矿过程增加了一定的难度,使得矿工挖矿并不是那么容易,一般是全网的所有矿工节点的所有算力一起计算10分钟才能制作出一个合法的新区块。
有了这个规定,这个比特币网络就有充足的时间让大部分节点同步最新的区块数据,而减少并发问题。这个挖矿的难度在比特币中就叫工作量证明机制(Proof-of-Work,PoW)。

刚刚提到的10分钟,为什么是10分钟,是怎么保证的?

先来回答下为什么是10分钟,而不是15分钟、2分钟、8分钟,中本聪在设计比特币机制时,考虑到新区块数据在全世界节点的广播同步有一定的网络延迟,于是为了尽量避免“矿工A和矿工B在不知道对方都计算出结果的情况下同时发送计算结果”的事情,规定了制作新区款的难度,这个难度难到平均每个矿工需要花10分钟挖出一个区块,于是设计了一个这样的值:理论平均出块时间=10分钟。至于为什么是10分钟,那总得取一个值吧,综合考量就定了10分钟。

是怎么保证全网的平均出块时间一直保证在10分钟,不会随着计算能力的提升,就不需要10分钟了吗?

比特币规定,每挖完2016个区块,数学题的难度会自动的根据这2016个区块的实际挖出时间,动态地做出调整。

也就是说,每2016个区块的难度都是一样的,接下来的2016个区块的难度,根据前2016个区块的难度以及前2016个区块的整体实际挖矿时间综合决定,这里有个计算公式如下:

可以看出10分钟不是绝对值,有的矿工可能运气好一些、3分钟、5分钟就能找到符合标准的新区块,有的矿工运气差一些,可能需要20分钟、30分钟才能找到符合标准的新区块,由于有了这个标准的动态调整,总能保证全网的平均出块时间在10分钟左右。
具体这个难度是什么,我们看下面公式:

而上面的这个目标值b就是和挖矿难度系数有关的值,目前的难度就是SHA-256【制作新区款的所有内容+一个随机数】的hash值的二进制值至少前72位为零,也就是最坏的结果是至少需要计算2^72次才能找到这个随机数,你可以认为这个72就是一个难度系数值

有了这个工作量证明机制就能保证一定全网在同一时刻只有一个矿工制作成符合标准的新区块吗,答案是否定的,那么如果出现这个情况,比特币网络是怎么处理的?

E矿工和F矿工分别基于d区块制作出了新的区块并广播至其他节点,如下图:

同时收到e区块和f区块的节点会先同时保留这些区块,直到下一个区块基于其中一个区块制作出更长的区块链

比特币协议规定只保留最长的区块链,较短的支链中的交易记录重新变为待确认交易重新发送至矿工节点作确认

如果下一个区块碰巧又分别有两个新的区块基于e区块和f区块制作新区块,比特币网络的做法和上面的是一样的,先同时保留这些支链,直到最长的区块链出现,较短的区块的交易记录变为待确认交易重新发送至别人矿工节点。

2. 这种“苦力活”如果没人做怎么办?

比特币网络规定每成功生成一个新的区块,给相应的BTC给矿工账号作为奖励,并将新区块中的交易的手续费也归矿工所有,通过这个奖励机制大家就很乐意去干这个“苦力活”了。

这个奖励最初是50比特币,今后每产生21万个区块,比特币数量都会依次减半。直到第33次减半时,每个块产生0.0021个新比特币直接减为0个,最终比特币总量维持在2100万个。我们知道比特币大约每10分钟产生一个区块,而21万个10分钟接近4年。
最终这个比特币网络的矿工只能通过收取交易的手续费来维持他们的成本和收益
这个交易的手续费是可以交易方自己定的
但是矿工有权利优先选择手续费较高的记账或者拒绝,只要矿工们达成共识。

挖矿工具——矿机

挖矿的矿机从最初的使用PC个人电脑挖矿到专业的挖矿矿池,算力变得越来越强,挖矿的成本也越来越高,门槛越来越高。
CPU挖矿→GPU挖矿→专业矿机挖矿→矿池挖矿



比特币是如何进行交易的

比特币交易符合以下几个特点:

  • 交易数据包含交易输入和交易输出,其中交易输入的金额总和必须>=输出金额总和
  • 挖矿奖励属于一个特殊的交易(称为coinbase交易),可以没有输入。
  • 在比特币没有余额概念,只有分散到区块链里的UTXO(未花费交易记录)
  • UTXO是交易的基本单元,不能在分割。

比特币转账

比特币的交易记录主要由以下几部分组成:

  • 交易的输入,是指向上一笔交易的hash值
  • 交易的输入解锁脚本,能够证明这笔钱你有权动用
  • 交易的输出,交易的输出对方账户
  • 交易输出的加锁脚本,是的对方必须提供证明是转给他的,才有权动用


上表格中:
记录1是个特殊的交易记录,是比特币矿工的奖励记录,给A账户转账10BTC,所以没有交易输入,这个交易记录叫coinbase
记录2:A使用记录1转给他的钱用来支付给B,并加锁这个转账
记录3:B收到这个转账时,提供自己的签名和公钥,证明确实是转给他的,B再用这笔转账支付10BTC给C

从上面的交易得知,我们把以上交易记录中可以用来当下一笔交易的未使用记录,称之为未花费记录(UTXO)

我们再来看下面这个记录:

记录2中A需要支付5BTC给B,但是交易输入记录1是10BTC的,所以将自己的账户添加到交易输出中找回5BTC

记录4由于A需要支付10BTC,所以交易输入是两笔5BTC的交易记录。

从上面的交易可以看出,比特币系统中没有账户的概念,只有交易记录,一笔未花费交易记录不能拆开使用,如果要只需花费一部分,通过在交易输出添加一笔给自己转账的记录,类似现金找零。

如何防止同一笔前用两次

A账号用【记录1】当做输入支付给10BTC给“B账号”,接着又用【记录1】当做输入支付给10BTC给“C账号”,
相当于10BTC用了两次。如下图:

我们分情况来看同一笔交易输入支付给了不同的人:
**情况1:**两条交易记录打包在同一个区块中:那么以先收到的交易是合法的,后收到的交易是非法的
**情况2:**两条交易记录先后被打包进不同区块的同一主链中:那么当矿工验证交易合法性时,是从以往合法的所有区块的所有交易中查找验证的,先收到的交易是合法的,后收到的是非法的
**情况2:**两条交易记录先后被打包进不同区块的不同支链中:
A矿工在之前主链基础上制作新区款,先收到交易1;
B矿工在之前主链基础上制作新区款,先收到交易2。
那么矿工在做合法性验证时都认为是合法的,此时比特币网络发生分叉,随着之后新区款制作,根据比特币协议规定,将保留区块长度最长的链,较短的支链将丢弃,其中的交易记录重新变为未确认交易等待下一个新区块的合法性校验,此时校验不通过的交易将丢弃。

真实的比特币交易数据的结构

{
   "lock_time":0,
   "size":259,
   "version":1,
   "vin_sz":1,
   “hash”:“2514161c059ac18bf2eff1e05c4628e322d846e930fd6dd4b24805ea59dc4913”,//这笔交易的ID
   "vout_sz":2,
   “inputs”:[//这笔交易的的来源交易,也称输入交易,可能有多个
      {
         "prev_out":{
		“hash”:“4f40655c4ab1a029bc41bc547f79556a0dc48d22df7202778fad592791c77fcd”,//上一笔交易的交易ID
		“index”:0 //在上一笔交易的输出列表的下标位置
         },
         “script”:“493046022100cd6795ebcd1b6b87833a4ad812733d3804065d34bafee24da181a770892272b902210088cd2484952ad2572f9bfb2874643dbb4b3c492b749e79d8177a14eb4a3bc61a014104bbf2b84900b6f898548687aefba86cc06da6f4656a71e45fa55128b501455b5486cb09705cfa23c1899fe46d4355c9058bb2de4f1a7f1a01ff27e00b306f7356” //解锁上一笔交易输出的参数
      }
   ],
    “out”:[//这笔交易的交易对手方,也称交易输出,也可以有多个
      {
	   //交易输出的锁定脚本,只有交易对方提供正确的自己的签名及公钥才能证明这笔钱是转给他的,才有资格进行下一次的转账交易
         “script_string”:“OP_DUP OP_HASH160 f9d49c5cf3e120ad1be60b67d868603a8fc945d2 OP_EQUALVERIFY OP_CHECKSIG”,
         "address":"1PmyxDv5VvGoSAKMr1DQcWB6sHPx1ZbgWe",
         “value”:88994500000,//转多少钱,单位是聪,1亿聪=1BTC
         "script":"76a914f9d49c5cf3e120ad1be60b67d868603a8fc945d288ac"
      },
      {
         "script_string":"OP_DUP OP_HASH160 088465c1f0c8b3b3da06f7073a921d6b95b22f49 OP_EQUALVERIFY OP_CHECKSIG",
         "address":"1n31g4rKiEeXnZEZR6VZwm3LggLicEqEC",
         "value":1000000000,
         "script":"76a914088465c1f0c8b3b3da06f7073a921d6b95b22f4988ac"
      }
   ]
}

比特币的脚本语言

OP_DUP OP_HASH160 f9d49c5cf3e120ad1be60b67d868603a8fc945d2 OP_EQUALVERIFY OP_CHECKSIG

上面是比特币交易中的交易输入解锁脚本,输入两个参数: 使得的HASH160值等于9d49c5cf3e120ad1be60b67d868603a8fc945d2,接着使用验证签名,验证同步则表示该交易输入合法有效,就像用户名密码一样。

比特币脚本语言是非图灵完备脚本语言,就是说它不能实现复杂的逻辑。
比特币脚本语言的执行是遵循先进后出的原因,即它的变量读取是堆栈式,如下图:


最终的结构

比特币就是通过每一个区块都有上一个区块的指正,每个区块中包含通过验证的合法交易组成的链式结构,并让所有节点同步这份数据,形成不可逆,串改成本巨大的分布式超级账本,称之为区块链

比特币的价值及存在问题

比特币的价值在于,金融危机发生的时候,货币超发,法币贬值,社会财富缩水;
而比特币不依赖中央机构管理,期价值完全由供给关系决定,
当旧的法定货币崩溃时,人们便会涌向比特币,把比特币作为新的资产避风港——“21世纪版的黄金”
比特币是目前区块链技术落地最成功的项目,虽然比特币目前实际用的更多的是黑产(赌博、洗钱、黑客敲诈、传销),但是开创了人们对区块链技术无限探索和想象;

但同样存在着问题:

  • 由于有新区块难度限制,每秒处理交易数不足7/sec,交易确认时间长大几小时甚至几天交易确认时间长大几小时甚至几天
  • 巨大的能源消耗(这也是比特币防篡改的代价)
  • 随着计算机算力的提升,构建数字货币的密码学可能会被攻破
  • 投机性强,泡沫大
  • 算力集中,随着挖矿难度增加,只有少数几个矿池能够维持挖矿成本,失去去中心化初衷

区块链的应用

基于区块链的记录不可逆、去中心化、全民监管的特点来构建一个信任网络,降低
社会协同合作成本,主要应用如下:

  • 企业融资:企业可以通过发行代币的方式对投资者承诺未来能够通过代币购买
  • 公共实物:居于区块链上的登记的信息不可篡改,能够很方便的证明你的信息合法性
  • 公益:在当前大环境下,听到慈善、公益,心里就不是滋味——信息不透明、 监督困难;利用区块链技术能够追踪每一笔善款的去向
  • 供应链:结合物联网实现对物品信息的区块链管理,做到每个每个商品从生产到消费者的每一个环节,做到正品溯源;
  • 供应链金融:代理商可以低成本的通过货物抵押向供应商赊账,并利用区块链智能合约技术保证物品出售时自动回款给供应商
  • 物流:通过区块链技术做到CP间的信息信任,较少物流环节的信息交换成本,并通过区块链加密技术做到信息的保护。

总结

  • 区块链为信息时代的去中心化信息交易提供了良好的解决思路
  • 区块链只是一种解决问题的技术,一定是结合实际场景落地才能有好的未来,否则就是技术人和投机者的一场狂欢。
  • 炒币有风险,入市需谨慎

了解区块链的一些网站:

区块链相关导航:https://www.feixiaohao.com/daohanglist/
比特币富豪排行榜:http://bitop.top/http://bitop.top/)


  目录