通过比特币应用来诠释区块链技术原理
通过比特币应用来诠释区块链技术原理
比特币作为区块链技术的第一个成熟应用,通过其独特的交易和记账机制,展示了区块链技术的核心原理。本文将通过对比特币应用的详细描述,帮助读者理解区块链技术的基本概念和工作原理。
1、比特币概述
区块链中的数据是可检索且不可篡改的,这主要依靠两大核心技术:数字签名和共识机制。区块链技术是比特币的基础,比特币则是对区块链技术的第一个成熟应用。区块链是一种通过去中心化和去信任化方式集体维护可靠数据库的技术方案。
在比特币体系中,不存在单独的货币单位,只存在交易记录。每个人都有自己的账户ID,每次交易都会以交易单的形式记录在账本上,货币值依附于交易单存在。用户的余额是通过追溯所有参与的交易单来计算得出的。
比特币的区块链本质上是一个包含大量账单的账本,其中每个账单就是一个区块,整个账本就是区块链。账本以一种特殊形式记录了比特币从诞生至今的所有交易记录。每10分钟会创建一个新的区块,记录全球所有交易信息,每个新区块都会通过指针链接到前一个区块,形成区块链。
区块链巧妙地结合了两种基于哈希值的数据结构:一是区块的哈希链,每个区块头部包含一个指向其前一个区块的哈希指针;二是树状数据结构(梅克尔树),用于存储区块内所有交易的哈希值,便于快速搜索特定交易数据。
目前,比特币网络已经运行了10多年,产生了大约53万个区块。每个用户都有一份完整的账本副本,账单就是区块,总账本就是区块链。
2、如何交易
比特币的交易是通过签写交易单完成的。例如,用户b从a处获取10个比特币,想用它购买c的产品,b需要创建一个交易单并向全网广播。具体交易流程如下:
- a从某处获得10个比特币记录在Tx0,a转账给b,记录在Tx1,b转账给c,记录在Tx2。
- 每个交易单都是进出双向记录的,类似于会计上的复式记账法。
- 每个交易单包含两个主要部分:
- 来源:记录本次转账资金来源,包括上一次交易单的ID(上次交易单全文Hash值)和上次发送方的数字签名。
- 去向:记录本次转账资金的去向,包括转账金额、接收方公钥和发送方的数字签名(加密资金来源交易单+接收方公钥生成的Hash值)。
每个节点收到Tx2后会进行验证:
- 通过ID找到Tx1交易单
- 获得b公钥
- 用b公钥对Tx2数字签名解密
- 比对Hash来验证
验证过程得出两个结论:
- b确实从a获得了10个比特币(Tx1上有a的签名)
- b确实有10个比特币,而且b要给c10个比特币(Tx2上有b的数字签名)
通过这种验证机制,交易的真实性得到有效验证,交易造假被杜绝。
3、如何记账
每一笔交易以交易单形式向比特币全网广播,网络上每个节点都在接收全网的所有交易单,并将它们临时存储在本地账单(区块)中。这导致了一个问题:以谁的账单为准?为了解决这个问题,比特币采用了工作量证明(POW)机制来分配记账权。
比特币采用的是POW工作量证明机制,其实就是计算能力的比拼。矿工需要完成以下工作来获得记账权:
- 收听全网广播,比对本地账本筛查拒绝掉一些不合理的交易单,将合理的新交易单记录在本地账单之中;
- 计算一个随机数X,将X同本地账本衔接一起计算出一个Hash值;
- Hash值需要前面若干位是0(位数调整影响计算难度),这样的随机数很难算出,需要进行大量的计算(挖矿过程);
- 一旦计算出来满足要求的随机数后,立即向全网广播,全网的其他节点用他们本地的账单+这个满足要求的随机数进行Hash值计算验证,验证通过之后就以该节点的账单为准进行对账。记账节点将获得比特币奖励;
- 对账完成,进行新的一轮随机数计算比赛(挖矿比赛),继续争夺记账权。
除了POW,还有其他记账权分配机制:
- POS(权益证明):根据持币数量和时间发放利息;
- DPOS(股份授权证明):实行电子民主,选取信任节点,成为受托人来保证通讯安全。
4、如何成链
在区块链账单中,需要指定上一页的页码,才能将区块有序排列。每个区块是使用密码箱签名与下一个区块“连接”起来的。区块头中的“本区块哈希值”相当于账单的“本页页码”,“父区块哈希值”相当于“上页页码”。而“页码”的具体数值是使用上一页“正文”的全文作为自变量,通过哈希函数生成的随机字符串。
网络里的计算机节点要争夺记账权,就必须随机生成到前十位数字是0的“页码,而随机数的前十位为0是个极端罕见的事件,因此整个区块链网络也需要花十分钟左右的时间,才能由某台计算机节点找到一个这样符合要求的”密码“。
一旦找到,这台计算机节点就夺得了记账权,它所生成的新账单(区块)就会更新到网络中的所有计算机节点。账单(区块)通过上页页码(父区块哈希值)寻找父区块,自动链接成为总账本(区块链)。
最长的链条才被全网公认。如果有人试图篡改数据,链条就会出现分支。为了让别人认可这条伪造的链条,他必须以个人理论维持这条链条知道长度大于真正的链条。由于工作量证明机制,单个节点的算力必须超过全网51%的算力才有可能超过真正的链条长度,随着系统的壮大和节点的广泛分布,这一点几乎不可能实现。