首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

一问搞懂区块链基本原理

一、架构

认识区块链,让我们从最开始的比特币开始。

比特币本质上来讲,是一个全球统一的分布式账本,记录着所有的交易记录。只要根据你所有的交易记录,就能知道你现在有多少钱了。

弄一个账本很简单,但是要让全世界都信任这个账本就很难了,我们来看看比特币是如何做到的。

区块链架构

支撑比特币的技术从下到上大概可以分为三层:

第一层 p2p网络层。这一层主要解决的问题是,分布式的节点如何发现自己人,节点之间如何通信形成一个网络。

第二层 共识存储层。全球那么多节点如何达成共识,共同维护唯一的一份账本,并且别人还捣乱不了。

第三层 账本模型。账要怎么记才合理呢。

二、账本模型

2.1 交易

比特币的账本中只记录一个东西,就是“交易”。

上图记录了三笔交易

每一笔交易主要有两个部分:

交易输入:记录了这笔交易钱从哪儿来。

交易输出:输入的这些钱将到哪儿去。

我们来看这三笔交易:

1001号交易:一般的交易交易输入填写的是已经记录在案的交易输出,而挖矿是一种特殊的交易,输入不用引用其他的交易输出,所以比特币账本中的钱都是来源于挖矿交易,其他的交易只会做转移,不会凭空产生钱。在这笔交易中张三获得来12.5个币。

2001号交易:交易输入引用了1001号交易的第一号输出,输出有两项:2.5给李四,10给张三。也就是张三把挖矿所得的12.5分了2.5给李四,自己留下了10。一般交易输入之和等于交易输出之和,所以比特币中经常会有这种自己账号出现在交易输出中称为找零。

3001号交易:交易输入有两项,交易输出也有两项。李四和张三共同转钱给王五。

2.2 怎么知道自己有多少钱

现在假设你是张三你现在知道自己有多少余额吗,如果你要转3个币给李四又该怎么做。

我们已经知道每笔交易的输入,都是之前的交易的输出,所谓的花钱就是构造一笔交易引用之前的交易输出,所以比特币中余额称作UTXO(未被花费的交易输出)。想知道你有多少余额,只需要找到交易输出是你的账号,而且没有被其他交易输入引用的全部交易输出额之和,就是你的全部余额了。

如果你想要转3个币给李四,你就找到到你的UTXO填入交易输入,李四的账号填入交易输出,构造一笔交易发布到比特币网络中等待矿工打包,当你的交易打包发布到了网络中得到承认的时候你的转账就成功了,李四就多了3个币的UTXO了。

2.3 怎么证明钱是你的

比特币交易输出都是公开,那怎么能保证只有我能使用我的交易输出,而别人不会用了我的钱呢,首先我们来科普下非对称加密的相关知识。

非对称加密中,公钥和私钥是成对存在的,公钥加密的东西只有与之匹配的私钥能解开,私钥加密的东西只有与之匹配的公钥能解开。

加密:一般来说我们把公钥放出去,想给你传信息的人就使用你的公钥把信息加密传送给你,你用私钥解密就能看到真实的信息了,而没有私钥的人死活解不开密文的。

签名:你把你说过的话用私钥加密放出去,别人使用你的公钥就能验证这话是不是你说的,因为只有你的私钥加密的东西你的公钥才能解开,其他人是没法伪造的,其他人你得不到你的私钥。

在比特币中公钥可以看作是你的账号,私钥你就悄咪咪自己保管好,别人转钱给你的时候就把你的公钥放到交易输出中,如果你要使用这笔UTXO就得使用你的私钥提供一个签名证明这你有这公钥对应的私钥,才能得到矿工的承认,才能得到全世界的承认,最后你这笔钱才能算花出去了。

2.4 智能合约

上图才是一笔交易真正的样子,每个交易输出都包含一个锁定脚本,每个交易输入都包含一个解锁脚本。这里的脚本就是指编程的那种脚本,是可以一段可以运行程序代码。普通的交易锁定脚本的意思是让解锁脚本提供一个签名能与自身的公钥匹配上那你就可以使用这笔UTXO。当你构造好解锁脚本和交易之后,矿工会运行锁定脚本和解锁脚本来验证你的这笔交易合不合法,决定是否打包。

这里你是否看出了比特币实现智能合约牛B之处。比如你爸想给你一笔钱,但是又希望你用的时候得你妈同意,那你爸就可以构造一笔交易在锁定脚本中写到得同时用你妈和你的签名才能使用这笔钱,这样你就必须得到你妈的签名才能构造解锁脚本,才能用这笔钱了。这里又可以看出其实比特币对于账户的概念是比较弱的:只要你能给出解锁脚本匹配上锁定脚本就能使用这笔UTXO了,没有什么账户的概念。有了锁定脚本和解锁脚本,我们就能做很多扩展的事情了。

参考资料:锁定脚本和解锁脚本怎么运行

三、共识储存

上面我们已经知道如何构造一个合法的交易,这么多交易如何来组成一个合法的账本呢,账本又应该存在哪儿才安全呢。

3.1 账本-区块链

账本就长这样,我们把一堆交易记录打个包成为上图的每一个小方块,这样的方块称为区块,然后把他们首尾相连就成了区块链也,是不是so easy. 每一块都记录了上一块的hash值,这样就使得它有这样一个特性:如果你想改变其中的一笔交易记录那这个区块的hash就会变,也就导致了下一个区块hash改变,产生一连串的反应,所以想篡改越久远的历史越难。

3.2 账本放哪儿

这样的一个账本应该存哪儿呢。

比特币的策略是让每个人都存下来维护着,当有人挖出了新的区块就大吼一声,所有人都来验证看是不是真的,验证成功就更新账本,这样历史账本就几乎不可能被篡改了,除非你改变所有人的。

3.3 挖矿

历史不能被更改,那我们怎么来写入新的区块呢。

假设我们每个人都可以写,岂不是就很混乱了,你想在A上加一区块B,他却想在A上面加个区块C,就不能维持唯一的一份账本了。

比特币想了个办法使得每个新的区块只能有一个人来写。谁来写呢,比特币说谁每次我发布一道题,谁先解出来,谁就能拥有记账权写下这个新的区块。然后大家来解题了,这个题很难解出来(可能要耗费十几分钟时间),但是又很好去验证(大家一看就知道你做的对不对),那些没解出题来却想滥竽充数的人就很容易被大家看出来,得不到大家的承认。

解题争取记账权的过程就称作挖矿,比特币这种耗费计算资源来算题争取记账权的模式又被称为工作量证明,意思就是想要记账就得让我看到你的努力,越努力就越有机会得到记账权。

3.4 共识

介绍来这么多,大家应该能从中明白“共识”这两个字的含义了吧,比特币建立的这一套体系其实只是一套规则而已,大家都去相信且遵守这套规则,抵制不守规则的人,那比特币就能一致存在下去。

四、总结

讲到这里大家应该都明白了比特币的基本原理了吧,至于它用到的p2p网络,又是一片新天地了。

从分布式系统来看比特币的话,挖矿其实就是个leader选举的过程,只有leader拥有写权限,写完从节点再进行同步。

区块链给世界带了很多新的东西,请在评论区说下你的高见。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20191015A0B6D800?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券