当下区块链的研究、实验和推广正如火如荼进行中。 区块链真的能改变我们的生活吗?本篇短文将用简单易懂的方式介绍比特币区块链技术。力求让读者快速理解比特币和区块链的基本原理,但不涉及过于细节的技术问题。
请关注javaresearcher微信订阅号了解更多。
主要内容
一、比特币简介
二、区块链的工作原理
三、比特币账号
四、比特币交易
五、区块链技术的本质和影响
一、比特币简介
什么是比特币?
比特币是一种非官方数字货币,或者说是一种数字资产。非现金支付在中国已经非常流行,钱就是银行系统里的一个数字。同样,比特币也可以说是比特币系统中在每个用户账户里记录的数字。人民币、美元这些货币由政府控制和发行。比特币则没有哪一个政府或者个人来控制。虽然比特币也是由挖矿者组成的网络来支持的,但是这个组织非常松散,不具有很强的、一致的主观意志。每个挖矿者必须按照预定的规则运行,而不能随意修改规则。违反规则的挖矿者会自动面临损失和不被承认。我们后面会详细解释为什么。
比特币为什么能得到使用者的承认?
首先因为比特币数量有限,发行速度受控。物以稀为贵,自然可以拥有一定的价值。当然, 必须有一定数量的拥护者它才能收到更多人的认可和推广使用。比特币由于其令人信服的、具有独创性理论,早期推广的到了认可。可以说它是目前为止最成功的一个虚拟货币系统。
二、 区块链的工作原理
什么是区块链?
顾名思义,区块链就是区块组成的链。
一个贴切的比喻是:区块链就是一个账本。每个区块是账本的一页。每一个区块记录了多个相干或者不相干的交易。每一页都有上一页的一个摘要,这样多个页必须前后相继,互相验证,因此叫做链。这个账本由多个见证人(挖矿者)独立的检查和记录,因此叫做分布式账本。
区块链是由很多挖矿者共同维护的。挖矿者并非一个严密的组织,而是人人都可以加入的。您也可以从网上很容易下载到比特币软件和比特币的区块链数据,然后运行起来加入挖矿者的行列。
挖矿者如何维护区块链呢?
首先,每一笔交易都会在比特币区块链网络上广播。这样每个挖矿者都能收到很多的交易记录。这些交易记录被放在每个挖矿者的草稿纸上(缓存区)。同时,挖矿者会验证每一笔交易是否合法。隔一段时间这些交易会被放入一个区块,这个区块会加到区块链上。
那问题来了,每个挖矿者收到的交易信息是不一致的。因为每笔交易到达不同挖矿者的时间先后是不一样的。所以所有的挖矿者没办法产生一个完全一致的区块。并且,任何交易不应该被重复执行和记录。解决办法就是:一次只能有一个挖矿者来创造一个新的区块。
怎么决定由哪一个挖矿者来产生下一个区块呢?
答案是掷骰子。谁先掷到连续N个0(工作量证明)谁来创造下一个区块。掷骰子的速度越快,就有更大概率比别人先掷到连续N个0。因此挖矿者会不断升级自己的电脑,以便以更快的速度掷到N个0。同时比特币网络会根据前边多个区块产生时的时间来调整难度N,以便维持大约10分钟一个区块的创造速度。这个速度必须得加以控制。每个区块会创造一定数量的新比特币。这个新的比特币数量会授给创造这个区块的挖矿者。这就是挖矿收入。这也是挖矿者愿意花钱买电脑24x7干这个无聊差事的原因之一。另一个收入是每笔交易会付给挖矿者一定手续费。
挖矿获得的挖矿收入根据算法会每过4年就减半,并最终在大概2140年变为0。到时候挖矿者唯一的收入就只能靠交易手续费了。也有人因此担心比特币严重通缩。也有人反驳通胀与通缩并非跟货币发行量硬相关,这就涉及金融理论了。
当然掷骰子只是个比喻。真正的算法并不像掷骰子那么简单。是使用SHA-256哈希算法来做的。
哈希算法是一类对信息进行不可逆的单向运算的算法。举个简单的例子,对任何一个4位数,我可以拿它的前2位乘以它的后2位得到一个新的数字。因此HASH(1234)=12x34=408。由408是无法得知原来的数字的,因为不止一个四位数能得到等于408的哈希值(比如3412)。
一个SHA-256哈希值是一个十六进制40位长的字符串。比如:
这个哈希数必须以区块链上的数据+随机填充数据来作为输入,并且刚好计算出来的哈希字符串前N个字符都是0。输入数据的一丁点改动都会造成整个哈希字符串完全变样。因此得到N个字符都是0的字符串需要试很多次不同的随机填充数据。
这个掷骰子的工作量是非常必要的。它可以防止区块链被篡改。修改历史上的任何一个区块都会导致后来的所有区块都重新计算工作证明。因为每个区块的产生都需要大量的计算,要伪造一个区块链分支,并且超过主链的长度来得到认可几乎不可能。
如何保证每个挖矿者都遵守约定呢?
区块链是分布式的,每个挖矿者都保存整个区块链。因此每个区块产生后都要分发到别的挖矿者节点。每个挖矿者都会验证这个新区快链是否符合所有的规则。如果不符合规则,这个块就会被丢弃,下一个符合规则的区块会被接受。为了能获得挖矿收入和交易费,每个挖矿者都会遵守规则。否则电费、网费和买电脑的钱都得不到回报了。
三、比特币账号
比特币账号和密钥
通常一个系统允许用户通过用户名和密码来登录系统并执行操作,比如常见的电子邮件系统。但是因为比特币是一种去中心分布式的系统,并且所有的交易和数据都是公开的,密码是不能由这个系统来存储和管理的。因此比特币系统必须使用非对称系统,也就是数字签名技术。
数字签名就好比我们现实世界的签名或者按指纹、签章类似。指纹、签章、和签名都可以通过专家来验证,造假是有一定难度的。
数字签名和非对称加密系统使用一对公钥和私钥,以及特殊的算法来完成。公钥可以公开发布出来。私钥必须由所有者安全的保存,不能泄露。公钥和私钥具有很特别的性质,可以完成非对称加密和数字签名。在这里,主要使用数字签名算法:私钥可以对输入信息进行运算,得到一定的输出结果,叫做数字签名;可以用另一个算法,以公钥、输入信息和数字签名作为输入,验证是否符合特定规则,如果符合规则,则说明数字签名是相应的私钥产生的。
打个比方,在数字签名过程中,私钥就像一个造锁的机器,公钥就像一把钥匙。账户的主人张三拥有一个造锁机器,其他人都有一把能打开这这个机器造出的锁的钥匙,并且这个锁一旦打开无法再次锁上。张三把自己的信息装到一个箱子里,并上锁。拿到箱子的人用钥匙(公钥)能打开,就说明这个锁一定是账户主人的锁,因此箱子里的信一定是私钥的主人写的。张三不可以抵赖,别人也无法伪造这个锁。上面的数字签名并不涉及加密。因为公钥是公开的,每个人都能打开箱子,只是没有人能伪造这个箱子和里边的信息。又好比张三用钢笔在箱子的封条上签了名。谁都能打开,但是没人能伪造这个签名。因此叫做数字签名。
非对称加密是另外一种用法。这时候公钥好比一把锁,每个人都可以拿到张三的一把锁,但是打开这把锁的钥匙(私钥)只有张三有。比如李四要写封信给张三,写完把信放到一个盒子里,用这把锁锁上。然后随便找个人送给张三就行,因为没人打得开这个箱子,大概是钛合金做的吧:),只有张三有钥匙能打开。
数字签名和非对称加密的算法不止一种。比特币系统选择一种称为椭圆曲线的非对称加密算法。
说了这么多,言归正传。
比特币账户是这样产生的:先随机产生一个密钥和公钥,对公钥做哈希得到账户字符串。是的,又是哈希,不过这次换了个哈希算法-RIPEMD。跟SHA-256都是哈希算法,换个用是为了更安全。毕竟SHA-256已经被矿工(对挖矿者的另一种称呼)们24x7的疯狂使用了,账号还是换一个算法感觉比较安全一点。
因此密钥、公钥和账户具有如下关系:
公钥可以验证任何信息是否是对应的私钥签名的;对任何公钥,可以通过RIPEMD算法验证,就是某账号字符串对应的公钥。
比特币账户是这样使用的:对一笔授权的交易信息,比如转账给另一个账户,做数字签名。然后通过比特币点对点网络广播给所有矿工。
矿工拿到签过名的交易信息和公钥后,可以验证公钥就是这个账户的公钥;可以验证数字签名就是对应的私钥产生的。因此可以断定这笔交易经过这个账户的主人授权。因此交易合法,并将最终被记录到区块链。
所有的账号和交易都是公开的,那怎么保护个人隐私呢?
答案是,比特币账户是匿名的。但是,等等,虽然匿名,但是跟别人做过交易别人就记住你了,可以翻看公开的区块链看到你的交易和账户平衡了。对这个问题,比特币软件的解决办法是:你可以有非常多,比如几百个比特币账户。这么多账户怎么管理?别怕,比特币软件都自带比特币钱包功能,自动帮你管理很多账户。
四、比特币交易
与银行的账户不同,比特币网络并不记录账号的余额。而是通过记录每笔交易,最终可以推算出账户余额。并且每笔交易必须指明钱是从之前的哪些笔交易获得的,现在要转到哪些新的账号去。
因此比特币区块链记录的所有交易也都是个链。交易链的起点是对应的比特币被创造出来的地方。也就是前边提过的挖矿挖出来的。
另外交易的输入和输出有一个差额,是留给矿工的手续费。矿工会优先处理手续费高的交易。可能低优先级或者放弃处理低手续费或者不付手续费的交易。天下没有免费的午餐呢。
如果一个普通用户想获得比特币怎么办呢?有很多交易所提供各种货币兑换比特币的业务。你也可以从朋友那里买一些。可以从网上查到市场汇率。
五、区块链技术的本质和影响
比特币是典型的,并且是影响最大的区块链应用。另外现在还有多种其它类型的区块链开源项目,提供变种的区块链来提供更多功能。
一般来讲区块链技术主要有以下特点:
分布式,可以提高系统可用性。
去中心化,提供受到算法控制,不受特定机构控制的网络。
可以支持虚拟货币交易。
矿工节点可以执行特定的脚本程序,完成转账以外的更复杂的交易类型。
提供不可更改和篡改的历史交易记录功能。
使用数字签名来保护账户。
匿名交易的能力。
可以是开放性网络,交易记录全公开。
防止双花。这是为什么需要一个网络而不仅是一个数字签名。这也是交易系统必备的。
这些究竟意味着什么呢?真的能带来革命性变化吗?能解决什么特定的问题呢?
感谢阅读。如有问题欢迎发送消息给微信公众号javaresearcher。
领取专属 10元无门槛券
私享最新 技术干货