好好学习,天天向上

  • 后端开发
    • Rust
  • 区块链
    • BTC
    • Layer2
  • 经济投资
  • 文学创作
    • 哲学思考
    • 随笔
HhxxTtxs
人生到处知何似,应似飞鸿踏雪泥。
  1. 首页
  2. 区块链
  3. 正文

BTC运行原理通俗解释

30 3 月, 2024 418点热度 3人点赞 0条评论

讲解比特币之前,我们先来了解下什么是区块链,直接看下百科上面的定义:“区块链是一种块链式存储、不可篡改、安全可信的去中心化分布式账本,它结合了分布式存储、点对点传输、共识机制、密码学等技术,通过不断增长的数据块链(Blocks)记录交易和信息,确保数据的安全和透明性 ”。

如果是刚开始学习区块链,看到这样的定义可能是一脸懵!什么是块链式存储?为什么它是不可篡改的?怎么就安全可信了呢?还有这个分布式账本到底是什么鬼?

我刚开始接触区块链的时候,也有很多这样的疑惑,也看了很多的文章,但当你熬过许多枯燥的时间之前,这些技术名词看着都是十分懵逼的。

接下来我想通过一个生动形象的故事,尽可能通俗易懂的来说明区块链(比特币)的运行原理(这里为了简单易懂,会省略很多技术细节),希望各位看官能够有一些收获。

内容 隐藏
1 记账本的故事
2 第一个问题--如何保护用户的资产
3 致命的问题--双花问题
4 总结
5 其他
6 参考

记账本的故事

一个村子中有三个商贩张三、李四和王五,它们之间经常进行一些货物的交易,最初他们是通过法币来进行交易的,突然有一天张三说自己有一个分布式记账的方法,非常的excited,每个人一个记账本,三人之间货物的交易只需要在记账本上面做一个记录就好,通过记账的方式进行货物的交换,省去了每次使用法币的麻烦,甚至搞的好,还可以改变世界。

方法很简单,每个人用一个记账本记录下三个人之间所有的交易记录就好了,交易的单位我们就叫btc。假设每个人的初始资金都是 1000 btc,这时候张三要买李四一个苹果,就给李四转了100 btc,张三告诉李四和王五这个交易的信息,那么三个人都需要在自己的记账本上记录下 张三 ----> 李四 100 btc,大家就都知道张三剩下 1000 - 100 = 900 btc,而李四有 1000+100=1100btc,其它的转账类似。 如下图所示:

每人都有一个笔记本,上面是全量交易数据

其实这里我们就已经有了一个极其简单的区块链模型了。

三个人拥有的“记账本”就是区块链中的“节点”(也可以理解为服务器),如果其中有一个人的“记账本”丢失(服务器宕机)了,他可以找一个新的“记账本”(重新启动服务器或者另找一个服务器)通过“抄录”其他人记账本上的信息,“重建”一个记账本,这个其实就是区块链的精髓,每个人在本地都有一份记录所有数据的“记账本”,所以它是去中心化的。

相对于中心化的服务厂商(例如钉钉、微博等),如果厂商服务器挂了,那么所有的人都无法继续使用其APP了,而去中心化中如果某一个人的服务器挂了,其他的服务器依然可以正常提供服务,因为每个人都有一份完整的数据存储在自己的服务器上。

如果其他人也想加入这个系统,那么只需要找一个“记账本”,然后抄录别人“记账本”上面全量的交易数据就可以了。

同时也是也涉及到一个概念,共识----只要在该系统中的人将交易记录在“记账本”上,大家就认可该笔交易生效了,这个是非常重要的,如果大家没有形成一个共识,并不认可这个,那这个记账本就毫无意义。

第一个问题--如何保护用户的资产

之后大家看张王李三人搞得这个东西,十分excited,于是赵六、孙七、周八......等等,也都陆续也加入了这个系统。

随着越来越多的人加入,这个系统就遇到了第一个问题:

因为所有人的资产都是公开在记账本上的,且人人都有一个这样的记账本,那么如何避免别人把属于自己的btc花了呢?

比如赵六最近手头紧,看到张三有较多的btc,他就在一个夜黑风高的晚上偷偷模仿张三的口吻告诉其他人张三转给赵六50btc,其他人只要没有怀疑,并在记账本上记录下来这个交易记录,那么就等于张三的btc就被赵六偷偷给花掉了,这怎么行!

于是张李王三个创始人就坐一起商量该咋整,这是个大漏洞啊!

它们首先想到看看银行是怎么解决这个问题的,银行会给每个人发一张银行卡,用户在取钱的需要输入正确的卡号及对应的密码,这样就可以保护用户在银行的资产。那么如何在这个区块链的系统中搞出一个与银行卡类似的机制呢,因为记账本中的数据是公开的,处理起来十分棘手,三人商量了半天也没啥好法子,最后张三就说自己有个舅舅是搞密码学的,自己回家问问他该怎么解决。

银行取款

一夜无话。

第二天,张三兴高采烈的来告诉大家好消息,舅舅已经给出一个解决方法了。李四王五听到也是相当开心,让他赶紧讲,张三说:现在有一个密码学的方法很适合咱们这个系统。

方法是这样的:通过密码学我们可以得出两个数字A和B,这两个数字有一个特性---只要通过A加密的数据,有且只有B可以解密出来,且无法通过B推断出A。也就是说只要通过B解密出来一笔加密的交易,那就可以证明是拥有A的这个用户发出的合法交易。

有了这个关键的密码学方法,三个人很快就得出了个解决方案:

首先通过密码学方法得到A与B这两个数字,用户发起交易的时候用A进行加密,同时把B公布出去。而这里B可以作为每个人在记账本中的标识(类似于银行卡号,而这个A类似于密码)。其他人收到加密的交易信息后,首先看B对应的账户是否有足够的钱(注意:B是可以公开的),其次看B是否能够解密这个交易,如果都满足,那么这笔交易就被承认,并写进记账本当中,只要用户不泄露自己拥有的A,自己的资产就不会被别人花费了,这样就完美解决了上面提到的资产保护的问题!

聪明的小伙伴可能已经意识到,这里的数字A其实就是比特币中经常提到的私钥,而数字B就是公钥,在比特币中地址其实就是通过B做多次计算得来的,上面为了简化,直接使用B作为地址,大家理解就好。

致命的问题--双花问题

随着越来越多的人加入,又出现了一个隐藏的致命问题----双花问题。

本来张三、李四、王五记账都是诚实,但是喜欢使坏的赵六一计不成,又生一计,他竟然通过一个方法将自己记账本上的10btc当成了20btc花,他是怎么做的呢?

我们前面提到,记账的时候是通过发起人通知其他人来实现的,正常情况人,其他人收到发起人的交易信息后,写到记账本上就好。但是赵六这个坏小子,它和张三交易的时候,告诉了张三自己有10个btc,张三一看账本确实有10个,签名也正确,就交易成功了。但是李四和王五却还不知道呢,这时候赵六又在张三告诉其他人之前找到李四,同样是花费10个btc,李四一看自己的账本,确实赵六有10个btc,签名也正确,交易同样成功了。

这里可以看到赵六通过传递消息的时间差,把自己的10个btc,当成20个btc花了。

这里其实就是我们常听到的“双重支付”问题或者“双花问题”

这个问题很严重,要是不解决,大家都这么搞,岂不是乱套了。

张李王三个创始人又坐一起商量该咋整?又想着看下中心化的银行是怎么解决这个问题,银行里面进行转账的话,都需要通过一个“中心化”的交易中心来处理最终的交易,这样就可以避免一个人把一笔钱花两次,因为每一次交易都需要通过交易中心,所以当你有10元钱,那你花一次10元之后,交易中心就给你减去了10元,你再想花第二次,交易中心就给你拒绝了。

这里的关键点就在于:需要有一个“中心化”的交易中心来处理所有的交易,就可以避免双重支付的问题。但是大家应该还没忘记,我们可是声称是去中心化的系统,那么如何在一个去中心化的系统中,推举出一个“中心化”的交易中心就成了亟需解决的问题。

张三又说自己有个搞密码学的舅舅,还是请教下它,大家各自散会,回家等张三的好消息。

一夜无话。

第二天张三再次兴高采烈的拿来了舅舅的解决方案。他说舅舅给的方案十分靠谱,甚至还加入了一些经济学的通胀方案,具体方案如下:

通过一种竞争的机制来决定出一个“中心化”的交易中心,同时每个系统中的用户都可以参与竞争。

竞争的方式是这样的:参与竞争的用户可以对一段时间内的交易(这些交易暂时不会被记录到记账本上)按照指定的规则进行数字化计算,算出一个值,这里称为W,这个W有一个要求----需要小于某个大家指定的数字(这个难度的指定使这个W并不容易算出),谁最先计算出这个W,谁就是这个“中心化”的交易中心,交易中心有权利将这一段时间内的交易记录在自己记账本上,然后再广播告诉系统中的用户,其他的用户会校验交易中心打包的这些交易是否合法,算出的W是否确实小于大家指定的数字,校验都没问题的话,其他的用户就会将这些值写入到自己的“记账本”中,这部分被处理的交易集合就达成了。

W的计算方式如下图所示:

计算W值

计算得到W之后,包含在计算W中的这一堆交易就形成了一个集合,这个集合就是我们常说的区块链中的“区块“。而本次计算出的W值也会被包含进计算下一个区块的W值当中,通过数字W进行串联的行为,就是区块链中的“链”了。

计算一个W的计算量是巨大的,如果作恶者要修改链上的某一个区块的数据,那么你需要把该区块之后的所有区块的W值重新计算一遍,这个难度更是无比巨大,这也是区块链难以篡改的一个重要原因。

如图所示:

下一个区块中包含了上一个区块的W值

还有一个小问题,就是怎么推动大家都参与这个W值的计算呢?

就是在每计算出一个W值之后,即生成了一个新区块,可以获得50btc的奖励,同时每一笔交易都附带一些手续费(手续费来自每一笔交易),50btc和手续费最后都给到最先计算出W的用户。

大家可能已经猜到,这个计算W的过程,就是我们经常听到的“挖矿”,计算结果W证明了矿工所做的工作,称为“工作量证明”。

交易中心最终获得的50BTC和手续费的奖励,就是挖矿的奖励,也是大家自愿参与挖矿的驱动因素。同时为了避免整个账本里面的btc数量通胀过快,大家约定经过一定数量的区块之后,就把这个奖励额减少一半,例如:50btc的奖励,下一次减半之后就剩25btc了,这个也就是大家常讲的四年一减半。同时四年一减半意味着最终区块的奖励将趋近于0,因为挖矿是唯一产生btc的途径(我们为了讲故事,开始凭空给张王李三人分配了1000btc),所以这也是为什么大家说btc总量只有2100w枚的原因。

那么矿工是否会作恶呢?不会的。我们前面提到一个是矿工打包的交易,在广播给其他用户之后,其他用户会对其中的每一笔交易都做一遍校验,看是否合法,同时会校验该矿工计算出的W值是否合法(需要小于某个大家约定的值),因为这个W虽然计算出来是比较难的,因为你需要不断变换随机数,时间戳等,但是算出来之后就很容易进行校验了,毕竟算出的随机数、时间戳、交易集合都已经公开了,用户只需要自己重新计算一次就可以查看是否正确。

pefect !!!

张王李三人终于解决了系统中遇到的最棘手的问题,它们三个和赵六幸福的生活在了一起,happy ending!

总结

通过上面对去中心化“记账本”逐渐复杂的设计,我们已经构建起了大致的比特币区块链网络,也清楚了我们重点在解决什么问题:利用公私钥保护个人的btc,利用挖矿解决“双花问题”等。

这里多嘴提一下有关思想层面的设计:

1、私钥通过密码学的方法保证了只有个人才能花费自己的财产,其他人无法染指,且无法破解。

2、每个参与的用户都拥有一份数据的独立副本,任何人都可以接入该系统,保证了它的去中心化。(当然也有轻客户端,为通俗略过不提)

3、挖矿的激励保证了整个系统持续的运行。

其他

前面为了通俗理解,省略了一些在比特币区块链的细节点,但并不影响大家对原理的整体认识。

以防万一,这里做一些简单的补充。

  1. UTXO(unspent transaction output):上面的设计其实还有另一个被忽略的问题----例如张三有50btc,然后给赵六转了10btc,这笔交易就达成了,但是赵六使坏,它不断把张三发的这个交易,不断重新发送给网络,直到张三的50btc被扣完,那样赵六的钱就会不断增加,因为这一笔交易本来就是张三发出的,所以可以通过矿工的校验,它会一直给赵六+10btc,给张三扣-10btc,这个也被称为“重放问题”。比特币通过UTXO的设计来避免这个问题,也很好理解,就是当转给赵六10btc的时候,也会转给张三自己40btc。最开始的50btc是一个UTXO,而产生的这两个10btc、40btc转账是新的UTXO,原来50btc的UTXO被花费之后就不能被再次花费,新产生的UTXO相同。赵六如果重新发送一笔已有的交易,就无法成功了,因为会检测到原来的50btc的UTXO已经被花掉了。(很多文章说UTXO是用来解决双花问题的,我理解更多是用来解决“重放问题”的)。
  1. 比特币脚本(Script):延续上面提到的,我们如何“标识”一个UTXO已经被花掉呢?其实就是通过比特币脚本来实现的。脚本的实现理解起来较为繁琐,我们留到后面的技术学习再讲,这里有个概念就好。
  2. 分叉(Fork ):可能会有两个矿工同时算出来W,如何避免这个问题?矿工会在“最长”的那个链上继续“挖”,最终就会收敛到一条链。

这里为了能够简单的理解,省去了很多的技术细节,比较适合初学者来入门、老韭菜来温习,之后的文章中会对BTC的具体实现做技术细节上的讲解,比这个会枯燥一点 ,但也会更加全面一些。

参考

  • 1.《精通BTC》:https://github.com/inoutcode/bitcoin_book_2nd

本作品采用 知识共享署名 4.0 国际许可协议 进行许可
标签: 区块链 比特币
最后更新:30 3 月, 2024

hhxxttxs

五年服务端开发,现专职区块链,偏零知识Layer2工程方向

点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

Archives

  • 2026 年 2 月
  • 2025 年 9 月
  • 2025 年 8 月
  • 2025 年 7 月
  • 2025 年 1 月
  • 2024 年 9 月
  • 2024 年 8 月
  • 2024 年 7 月
  • 2024 年 6 月
  • 2024 年 5 月
  • 2024 年 4 月
  • 2024 年 3 月

Categories

  • BTC
  • cuda
  • L2
  • rust
  • 其他
  • 区块链
  • 后端开发
  • 哲学思考
  • 文学创作
  • 算法
  • 经济投资
  • 链开发
  • 零知识

COPYRIGHT © 2024 好好学习,天天向上. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang