USD:入门比特币 - Bitcoin RTFM_比特币

在中文互联网的世界里,大部分都是在描述比特币的投机交易,鲜有对比特币底层交易机制、分布式记账所解决的问题有比较详细的阐述,故作此文。

当然,你也可以把它当作是比特币的RTFM来用。

任何交易都可以划分为线上和线下两种,线下特指现金交易,当你在线下用现金购买某个商品的时候,一手交钱一手交货,本次交易所使用的现金,在这个交易的同时,就无法再被使用。

而线上交易的时候我们用的都是电子现金,电子物品与实体物品有个本质区别:可复制性强,所以在用电子现金交易的时候,我们如何确保这个电子现金在同一时间内不被“同时使用”?

这就是我们所说的“双重支付”问题,于是近现代电子现金系统,就引入了信任的第三方来防止双重支出。那么问题就出来了:一个纯粹的电子现金系统,将允许在线支付从一方直接发送到另一方,它的优势理应是点对点支付,而无需通过第三方金融机构,这个时候的效率才是最高的,这才是数理上的必然。

金融机构作为可信第三方,仍然有自身的缺陷:金融机构不能避免仲裁争议,增加了交易成本,这些为信任而付出的摩擦成本进而将限制了交易规模,从而阻止了很多小额支付交易。

基于信任的成本支出,一定程度上就意味着交易的可逆转性,也就是目前的系统无法为那些不可能逆转的服务提供不可逆的支付,从而大大增加了信任验证的频率,这在一手交钱一手交货的线下时代可以避免,但是在线上通过沟通渠道建立而不被信任的双方却无法避免。

我们面对的第一个问题是:是否允许任意双方在不需要信任第三方的情况下直接交易?

目前电子现金之所以要依赖第三方金融机构,是因为当交易发生时,电子现金必须返回第三方金融机,然后第三方金融机构再发行一次新的等值电子现金,只有被第三方金融机构发行的电子现金,才是可信的未被双重支付过的。

所以这个问题本质上要解决一个核心问题:

在没有第三方介入的情况下,能否确保电子现金同一时间内不被双重支出?

我们需要一种方式,可以让使用过这个电子现金的人在交易之时签名,而我们只会认可最早的那一笔交易,并完成确认。尽管后面这笔交易有了双重支付的企图,但是我们并不关心。

为了能在没有第三方参与的情况下完成以上任务,交易记录必须被公开,进而我们需要一个系统能让参与者们认同并第一时间接收到这份唯一正确的交易记录。

所以解决方案将会是:

把交易的散列数据录入一个不断延展、以散列为基础的工作量证明链上,形成一个如非完全重做否则不可能改变的记录。

这句话中,有几个点要解释一下:

什么是散列数组?

所谓散列,本质就是把任意长度的输入通过散列算法变成固定长度的输入,你可以理解为它是一种压缩性的映射,所以散列值的空间会小于输入空间,便于储存。

又因为它很难找到逆向规律的特性,所以也可以用作数字签名来保障数据传递的安全性,散列也称为哈希,hash算法也因此被广泛应用在互联网应用中。

什么是工作量证明?

工作量证明本质来说是一种对策,一种以所耗用的时间、设备和能源作为担保,以确保服务和资源被真正需求使用的对策,目的是拒绝资源滥用、服务攻击。

工作量证明最常用的技术原理就是上面提到的散列函数,如果输入散列函数h的任意值n,会对应一个确定的h(n),基于散列函数的特性,注定了h(n)几乎无法反推出n,但是从n推出h(n)却是轻而易举的。

也就是n→h(n)很容易,但是h(n)→n很难;

但是如果我们指定了一个特征的h(n),例如16进制值前四值为0的这种特征,再通过h(n)去反推n,那么相对难度就会小很多,尽管对用户来说还是需要大量的穷举计算,但是一旦算出n,我带入h函数里面去验证一下h(n),看看16进制前四值是否均为0就可以了。

这就会形成一种情况:反推得出结果是有可能的,但是要大量运算,但是正向代入验证,一次就行。

工作量证明如何应用?在区块链上,每个区块基本会由上一个区块的散列值、若干交易信息和一个随机数组成,一个矿工在交易广播渠道收集交易项目并打包,然后不断将随机数和交易信息进行散列运算,期望算出一个散列值。

每个区块都会有一个难度目标值,当这个算出的散列值满足难度目标值时,视为条件满足,谁最先算出来,谁就获得了这个区块的记账权及比特币奖励。

获得记账权的矿工就可以把上一个区块的散列值、交易数据和当前区块的散列值合并并广播到发布渠道,其他矿工在获取新区块的散列值后,就会放弃当前正在处理的区块,投入到新一轮的区块挖矿中去。

一旦这个耗费了算力获得的结果得出后,这个区块将不能再更改了,为啥?因为其他接收到验证通过后新散列值的矿工,已经在下一个新区块里开始投入计算了,这就等于大家承认了上一个区块已经生成,并且同步到自己的节点下了。

想篡改的人意味着需要先按下停止计算的按钮,然后重新完成之前所有的工作量,否则新区块不断被添加进来会持续提升存量工作量。这个按下停止计算按钮的动作,需要覆盖全网至少51%以上的算力。

这就是所谓的51%攻击,意图通过获取超过半数的节点控制权,来起到欺诈和篡改作用。在区块链技术里,解决这个问题也是十分简单,他运用了博弈论里面的观点:

你如果掌握了全网51%的算力,诚实带来的报酬将远远大于破坏和欺诈。那么诚实的链条成长最为迅速,速度会远超其他竞争链。

这样子能把“积极、诚实”的人通过生存法则筛了出来。这就是Proof-of-Work,简称PoW

回过来再试下理解工作量证明的定义:工作量证明本质来说是一种对策,一种以所耗用的时间、设备和能源作为担保,以确保服务和资源被真正需求使用的对策,目的是拒绝资源滥用、服务攻击。

只要绝大多数CPU的算例被良性节点控制,它们就不会与那些尝试攻击网络的节点合作,随着时间的推移,后面要被篡改的难度越来越难。

我们再次理解一下最开始那句话:

把交易的散列数据录入一个不断延展、以散列为基础的工作量证明链上,形成一个如非完全重做否则不可能改变的记录。

这里面运行的逻辑顺序是:

1、所有交易向所有节点广播;

2、每个节点将新交易打包到一个区块;

3、每个节点开始用算力为此区块“找”一个满足目标值的散列值;

4、当某个节点“找”到后,它就将次区块广播给所有节点;

5、其他节点当以下条件满足才会认可这个区块:所有交易都是有效的,且未被双重支付

6、其他节点向网络表示自己认可这个区块的方法是:在创建下一个区块时,把认可区块的散列值当做新区块里之前的散列值。

节点始终认为最长链是正确的那个,且会不断向其添加新数据。若是有两个节点同时向网络广播了两个不同版本的“下一个区块”,有些节点会先接收到其中一个,而另外一些节点会先接收到另外一个。

这种情况下,节点将在它们先接收到的那个区块上继续工作,但也会把另外一个分支保存下来,以防后者成为最长链。当下一个工作证明被找到,而其中的一个分支成为更长的链之后,这个暂时的分歧会被打消,在另外一个分支上工作的节点们会切换到更长的链上。

新的交易不见得一定要广播到达所有的节点。只要到达足够多的节点,那么没多久这些交易就会被打包进一个区块。区块广播也容许一些消息被丢弃。如果一个节点并未接收到某个区块,那么这个节点会在它接收到下一个区块的时候意识到自己错失了之前的区块,因此会发出补充那个遗失区块的请求。

在这个系统中,没有中心化的权威机构去发行硬币,但是按照约定每一个区块生成后都会得到一枚新的硬币,所属权是这个区块的生成者,这么做就代替了中心化的权威机构去发行硬币,每一个硬币都不是凭空产生,而是消耗了CPU的算力和它们所用的电力。

就像黄金开采者消耗了他们的资源,而这些资源又流通在增加的黄金里面一样。

当既定数量的硬币全部进入流通市场,那么奖励将全面交由交易手续费来完成,而该交易费就是用来奖励节点把该交易打包进此块的,这种方式确保不会产生通货膨胀。

这就是比特币乃至区块链的整个来龙去脉。

--

你在这里能得到什么?

我始终认为:最有价值的时刻,在于你是否真正捕获了更多客观的一手信息,并修补了以前错误的观点,得到一些启发,这是你和大多数人真正拉开距离的时刻。

你能在这里能得到一些启发,偶尔一两个就够了。

在加密行业你想抓住下一波牛市机会你得有一个优质圈子,大家就能抱团取暖,保持洞察力。如果只是你一个人,四顾茫然,发现一个人都没有,想在这个行业里面坚持下来其实是很难的。想抱团取暖,或者有疑惑的,欢迎加入!感谢阅读,喜欢的朋友可以点个赞关注哦,我们下期再见!

郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。

大币网

[0:0ms0-4:402ms