引言
比特币作为目前大热的虚拟货币,一直给人非常神秘的感觉。剖开比特币复杂的数学原理及计算机算法,它跟我们日常生活中的货币并没有太大的不同。
首先比特币也是一种货币,它与人民币、美元的区别就是并不需要特定政府发行,也不依赖银行来管理账户及验证交易。
而这篇文章将围绕交易账本来一步步地建立比特币的交易模型,向大家解释比特币为什么能够实现以上两个特点,不拘泥于复杂的数学模型,以一种简单的方式看待比特币及区块链。
公共账本
第一步,我们建立一个公共账本。刚开始假设参与交易的只有4名用户A、B、C、D,这些用户之间的所有交易都会记录在这份公共账本上,例如:
这个时候,由于几个用户之间的信任度降低,这份公共账本的可信度降低,用户们不相信账本上的交易记录是真实可信的。所以我们为了重新建立信任体系(在生活中人民币、美元等货币的信任体系是由银行等金融机构来维持的),就通过计算机发明了加密货币。它的主要实现方式是:
1. 加密货币是一套基于密码学中某些去中心化的、互不信任的交易验证体系;
2. 上面所陈述的公共账本必须是公开的,即参与交易的用户都能查询这个账本,而且当发生交易时,每个用户都能在账本上添加新的交易记录。
公钥和私钥
那么问题就产生了,由于每个用户都能够添加交易记录,如果B在A不知情的情况下偷偷记下:A 付给 B 20个比特币,我们怎么相信账本中的记录都是准确无误的呢?
所以我们就引入了电子签名这一技术,当A要付给其它用户比特币的时候,A 必须在交易记录后面留下自己的电子签名,以证明自己知晓并承认这笔交易。那么如何保证这个签名是不可伪造的呢?实现方法就是每个用户都需要生成一对公共密钥及私人密钥(以下简称公钥和私钥),它们都是一串二进制数字。公钥是记录在账本上的电子签名,以证明交易的可信性。私钥由用户自己保存。
每次在交易记录上签名时,用户输入私钥,系统将通过加密算法生成一个公钥记录在账本上,使得其它用户无法通过复制公钥来伪造签名(因为用户输入的是自己的私钥)。在现实生活中签署不同文件使用的签名是一样的,但是电子签名进一步地在签署内容不同时也变得不同。
进一步,为了防止用户重复记录交易,我们将每条交易记录加上索引,以保证唯一性。
那么交易时就通过验证私钥和公钥是否配对,就能辨别交易的真假了。
同时私钥和公钥都是长度为256位的二进制数字,要通过穷举法来获取私钥几乎是不可能的。所以我们确信只要提供正确的私钥,我们就认为这笔交易确实是真实存在的。
1. 系统会拒绝某些入不敷出的交易,也就是不存在用户比特币为负的情况。
2. 用户之间可以实现真实货币与比特币之间的互换,这一点与我们的股票类似。
去中心化
那么问题又来了,我们如何确信这个公共账本不会被管理者修改数据呢?就像网站的管理者可以修改网站上的数据一样。
我们的解决方案就是让每个人都成为公共账本的管理者,即每个用户都会获得一份公共账本。这就是所谓的“去中心化”。
具体的实现方法是:当A与B发生交易时(A向B支付50比特币),A需要将这条交易记录通过广播传送到所有其他用户,然后其他账户在自己的账本上记下“A 付给 B 50比特币”。
那么如何保证所有用户的账本都是正确的那一份呢?怎么保证所有人接受交易信息的顺序都是一样的呢?
工作量证明
所以就要想出一种方案使得所有人接受的交易顺序都是相同的,最终达到所有的账本都是相同的,然后就有了区块链。为了减少伪造交易信息的伪造,区块链引入了工作量证明:
工作量证明(Proof-of-Work,PoW)是一种对应服务与资源滥用、或是阻断服务攻击的经济对策。一般是要求用户进行一些耗时适当的复杂运算,并且答案能被服务方快速验算,以此耗用的时间、设备与能源做为担保成本,以确保服务与资源是被真正的需求所使用。此一概念最早由Cynthia Dwork和Moni Naor于1993年的学术论文提出[1],而工作量证明一词则是在1999年由Markus Jakobsson与Ari Juels.[2]所发表。现时此一技术成为了加密货币的主流共识机制之一,如比特币所采用的技术。
其技术原理就是将交易信息整理成一个区块(每条交易信息后需签署电子签名),然后通过大量的计算找到一个数字(例如,交易信息加上这个数字通过加密散列函数得到的一串二进制数字的前30位均为0),将该数字记录在交易信息的下方,作为自己的工作量证明。
工作量证明最常用的技术原理是散列函数。由于输入散列函数h()的任意值n,会对应到一个h(n)结果,而n只要变动一个比特,就会引起雪崩效应,所以几乎无法从h(n)反推回n,因此借由指定查找h(n)的特征,让用户进行大量的穷举运算,就可以达成工作量证明。
我们若指定h(n)的16进制值的前四值,求n,这样统计上平均约要运行216次h(n)散列运算,才会得到答案,但验算只要进行一次就可以了。如果想要增加难度,那就增加指定的位数即可。以SHA256函数举例,假设我们要处理数据Hello World,并找出h(n)前四值为0000的n,如果从Hello World0开始加上一个十进制数ASCII进行穷举猜测,到Hello World107105时才会得到匹配条件的h(n):
0000BFE6AF4232F78B0C8EBA37A6BA6C17B9B8671473B0B82305880BE077EDD9
验算时只要将Hello World107105代入SHA256函数一次即可。
区块链
为了确保区块之间的顺序是相同的,我们将上一个区块计算得到的数字放在下一个区块的头部,形成区块链。这样一来,无论是改变区块中的交易记录或者是改变两个区块之间的顺序,都需要重新计算符合规则的数字,大大提高了造假的成本。
而建立区块的过程叫做挖矿,所谓挖矿的过程就是:收听广播中的交易记录,整理交易记录形成区块并进行大量的计算,然后广播自己的区块。为了奖励创造区块的用户,用户可以获得比特币奖励(即在区块交易信息顶部写上“区块奖励 12.5 比特币”)。
系统通过控制计算难度使得每10分钟新生成一个区块,而每生成210000个区块,区块奖励就会减半(初始奖励是50 比特币):
所以比特币的总数量不会超过21,000,000。
当然用户还可以选择将交易金额的一小部分作为交易费,这笔交易费将会奖励给创造包含这笔交易的区块的用户,这样可以激励矿工尽快的将这个区块广播,加快了交易的进行。
如有任何问题,可在下方留言或者后台私信哦!
网友评论