哈希娱乐看完什么是比特币了
哈希游戏作为一种新兴的区块链应用,它巧妙地结合了加密技术与娱乐,为玩家提供了全新的体验。万达哈希平台凭借其独特的彩票玩法和创新的哈希算法,公平公正-方便快捷!万达哈希,哈希游戏平台,哈希娱乐,哈希游戏小知识:什么是比特(bit) ?bit 是计算机表示二进制的单位。例如:1bit 可以表示 0 或者 1 两种状态;2bit 可以表示 00/01/10/11 四种状态。所以,习惯上人们用比特来形容数字化相关的事物,例如:比特币
小思考:为什么物物交换行不通?1、A 在安阳,B 在梅州,空间上没法物物交换;2、A 今天生产了商品甲,下个月才需要商品乙,时间上没法物物交换;3、参与市场的各方提供了成千上万的商品,效率上不接受物物交换。
这个时候,需要一种各方都认可的一般等价物来衡量、转换和传递商品的价值,从而实现商品的高效自由流动。
早期,人们使用贝壳来充当一般等价物,后来又使用金、银等贵金属,再发展出纸币,甚至到现在的移动支付。
以 ¥人民币 为例,它是以国家信用为背书,充当价值媒介的一般等价物。具有价值尺度、流通手段、贮藏手段、支付手段等职能。
只要你能创造出一种东西:它满足充当一般等价物的条件,那么你就是创造了一种货币!
小思考:充当一般等价物需要哪些条件?1、全体参与方认可;2、不可伪造;3、方便携带、分隔、可以长期保存;4、数量可控;......
这是一个革命性的创举,它打破了古今中外的惯例:货币都由政府的中央银行负责发行,而且只能在特定国家或地区流通。
要知道,往往只有改朝换代的时候有机会发行全新的货币,可谓百年难遇。现在比特币做到了,而且是全球性地发行和流通,前无古人!
例如,通过颁布法律和规章制度:《中华人民共和国中国人民银行法》、《中华人民共和国人民币管理条例》等。
对于防止伪造,一方面通过技术手段提高纸币的伪造难度;另一方面通过法律手段打击制造、流通假币。
2008 年,一个网名为中本聪 (Satoshi Nakamoto) 的人,发表了《比特币:一种点对点式的电子现金系统》的论文,由此掀开了比特币风靡全球的大幕。
2、比特币是数字货币,是不是和银行账户一样,在某个服务器的数据库里记录着我的账户下有多少余额?
3、两个人之间怎么转账?是不是和传统的银行一样:A 的账户 -100,B 的账户 +100?
当你开始思考这些问题的时候,那么恭喜你,你已经在思考如何设计一种货币系统了。
真是激动人心,从来没有想过有一天自己也可以设计一套货币系统,而且可以在真实世界运行起来。
比特币系统不需要一个具体的地方记录某个账户下有多少余额,只要知道所有账户之间的转账记录,就可以推算出某个账户下有多少余额。
额... 结果还是有某个地方记录着 A/B/C 的初始值为 50/0/0,说好的比特币不用记录每个账户的余额呢?!
都是 0 ?那后来 A 的 50元 哪里来的?没有这 50 ,哪来后续的转账?总不能无中生有吧??
现在,A/B/C 账户的余额都是 0,所以不用记录了,但是多了一笔“无中生有”的转账记录:
凭什么无中生有的时候,到了 A 的账户下,而不是我的,或者至少是所有人平均?!
想想吧,A 发现了一座疑似金矿,他费时费力、千辛万苦、冒着万一不是金矿或者发生矿难的风险开采完,最终总共得到了 50 克黄金。
而 A 的所得是系统对他的奖励,毕竟没人挖矿的话,市场上就没有支持价值流动的媒介:一般等价物。
这也是比特币唯一的发行方式:矿工每完成一次有效“挖矿”,就奖励一定数量的比特币。
同时,“挖矿”会设置一定的难度,保证每次“挖矿”时间在 10 分钟左右。
按照这样的规则,时间线 年左右,奖励会变为 0,那时候问世的比特币总量约 2100 万个。
所以,你现在就参加挖矿的线 个比特币,根据比特币交易所的最新数据:1btc = $14907,那么 12.5 个比特币约合人民币 ¥1210802,心动不?
事实上,“挖矿”只是一个形象的比喻。比特币作为一种数字货币,并不像黄金一样要开着挖掘机一勺一勺的挖。
上文说到,“无中生有”是对“矿工”辛苦“挖矿”付出成本的一种奖励,随着奖励的不断进行,这些“矿工”的账户上也就不断地有比特币增加,然后“矿工”们向其他人支付或者转账,那么货币系统就开始运行起来了。
比特币系统给每个“矿工”布置一道作业题,谁先解答出来,就算谁“挖矿”成功,然后奖励就花落他家。
给你 1-10 个号码,随机从中抽一个,放回后可以重复任意次,谁先抽到 “小于等于 N”的号码,就算解答成功。
那么:对于题目“抽到号码小于等于 10”,那么平均抽 10/10=1 次,就能出现;对于题目“抽到号码小于等于 5”,那么平均抽 10/5=2 次,就能出现;对于题目“抽到号码小于等于 2”,那么平均抽 10/2=5 次,就能出现;...可见 N 的值越小,需要抽的次数就越多
是不是很简单?以计算机的速度,别说抽 10 次,就算抽 100 万次也是分分钟搞定的事情。感觉我也能“挖矿”,马上就要一夜暴富了,哈哈哈。
比特币系统为了保证每次挖矿时间大约为 10 分钟,会根据过去 2016 次挖矿的平均时间,动态调整 N 的大小。
如果“矿工”投入了计算速度超快的设备,也就是传说中的“矿机”,甚至使用成千上万的“矿机”的联合体,也就是更可怕的“矿场”。
直至终极形态:由无数的个体户和“矿场”等联合,形成“矿池”!那么,计算能力不断增强,为了保证计算时间稳定在 10 分钟左右,N 的值就得不断减小。
根据的统计,目前参与比特币系统“挖矿”的计算能力已经达到:15.23 EH/s!
所以,很遗憾,作为“个体户”,你已经没有参与“挖矿”的机会了,或者说你那点计算能力参与竞争的话,机会有点渺茫,很渺茫的那种渺茫。so sad ;(
小思考:每台“矿机”背后都要消耗大量的电源,所以为了降低成本,很多“矿场”都选择建在靠近电站的地方。比特币这种人为设置“挖矿”成本的机制,一直被批评人士诟病:造成大量能源的浪费。你觉得有什么好的解决方案呢?
现在,你已经对比特币“挖矿”的概念有了感性的认识:付出“辛苦劳动”的成本,获得系统的奖励,这样你的账户上就会“无中生有”多出比特币,然后你用这些“被挖出”的比特币购买商品或服务,给他人支付或转账,那么比特币就开始充当一般等价物的角色,变身为货币。
上文说到,不管你是参与“挖矿”,还是接受比特币支付或者转账,都需要一个属于你的账户。所以,参与到比特币系统的前提是,你要有一个比特币账户。
小知识:截至 2018 年 1 月,比特币网络上活跃的账户已经超过 2200 万个。
你以前去银行开户的时候,需要本人带着身份证,填写一大堆信息和签名,甚至需要现场录指纹和拍照,相当繁琐。
答案是:不用带任何材料,不用到任何机构,你可以随时随地零成本地开设任意数量的账户!
这只是比特币货币系统一个小特性而已。从现在开始,你脑海中的思维定势需要被慢慢推翻,直到你完全掌握比特币运行的原理。
这对密钥有这样的特性:私钥加密后的信息只有公钥能解密;公钥加密后的信息只有私钥能解密。也就是所谓的“非对称加密”。
小知识:这也是比特币被称为数字加密货币的原因,整个系统都依赖密码学基础。
现在,你完全不用关心怎么生成这样一对密钥。因为有专门的软件帮你生成和保管,这种软件被形象地称为“比特币钱包”。
有了比特币钱包之后,你需要做的就是动动手指,点一下就开好账户了,再点一下又开好了一个账户。
一个账户由一对密钥(私钥,公钥)组成,公钥可以通过私钥生成。再使用公钥经过一系列不可逆的哈希计算得到比特币账号地址。
所谓“不可逆”就是:别人无法通过账号地址推算出公钥。所以,你可以放心的把地址告诉别人,接受对方的转账。下图展示了通过公钥计算出比特币地址的过程:
你很兴奋,因为有了第一个属于自己的比特币账户,但是也很沮丧,因为里面空空如也。
小知识:比特币冷笑话为什么前文提到比特币价值 1btc = $14907,这里又变成了 $17082?因为比特币交易价格剧烈波动,在作者写到这里的时候,已经过了 10 分钟。^_^
2、接受比特币支付,比如你的工资/咖啡店;(你的老板/顾客也没有比特币)
4、花钱到比特币交易所购买。(国内已经禁止比特币交易,另外价格也已经突破 $10000 美元)
你说对了,目前参与门槛已经非常高了。这是比特币发展必然要经历的一个过程,也许等到“矿工”们愿意花费他们手中的比特币,也有足够的机构和个人愿意接受比特币支付了,比特币才会通过价值流动慢慢到达普通人手中。
小思考:批评人士也认为,目前的比特币不能给大众带来普惠。狂热的炒作只是一个庞氏骗局,泡沫终将破灭。你怎么看?
假设 Mr.Chen 在国外,通过比特币交易所,用美元向他人购买了 0.1 个比特币。
小知识:比特币最小单位就像 1元 = 10角 = 100分 一样,1btc 也可以细分:1btc = 100000000聪(没错,是1亿,也是中本聪那个聪)也即:1聪 = 0.00000001btc所以,当你以后听到:“2两葱多少钱?” “2聪” 这样对话的时候,不要惊讶。
剩下的事情,银行会帮你搞定:扣掉你账户的金额,加到对方账户下,给你出账单等等,还可能会收你手续费。
比特币转账步骤类似,但是没有银行这个角色,就像你开比特币账户的时候不用带着材料跑去银行一样。
小知识:什么叫分布式?与分布式对应的是“中心化”,就像所有人的交易都由银行这个中心记录管理。如果银行服务器崩溃了,那么所有人的交易都无法再进行。相反,分布式就是所有交易由比特币网络中的节点共同记录。每个节点独立维护一份完整的交易账本,这个账本也叫做“分布式账本”。任何一个节点退出比特币网络,不影响系统运行。现在,比特币系统由分布在全球各地的节点组成。每个节点都与附近的节点连接,组成一张覆盖全球的 P2P 网络。这也是比特币可以全球流通的物质基础。
它不仅会帮你记录到它的账本中,还会帮你转发给与之连接的近邻节点,通过这样病毒式扩散后,数分钟内交易信息将抵达全球每一个比特币节点。蔚为壮观!
事实上,比特币钱包要把交易信息告诉节点,那么它就至少得连接比特币网络中的一个节点,当与节点连接后,比特币钱包本身也就成为了网络中的一个节点,只不过叫做“轻量级节点”,因为它既没有记录完整的账本,也没有去“挖矿”。
小知识:比特币钱包都有哪些功能?1、管理比特币账户(密钥);2、发送交易信息;3、查询余额。
很简单,在比特币网络发展的过程中,会有一些长期稳定的节点,称为“种子节点”。
开发比特币钱包软件的时候,会把这些“种子节点”的域名写进代码,通过 DNS 动态查询的方式,向“种子节点”要一份活跃节点地址列表,以这些节点为媒介比特币钱包就可以加入网络了。
好极了!现在 Mr.Chen 通过比特币钱包给 Miss.Liu 完成转账了,这笔转账通过“分布式账本”被全球的比特币网络节点记录在案。
那么谁来充当比特币网络中记账的“全节点”?为什么它们会那么好心,帮我记录交易信息呢?毕竟随着交易数量的增长,这个账本可不小。
事实上,每一个节点都可能是“坏节点”,即使收到你发来的交易信息了,也不帮你记账!so bad ;(
我们说过,交易会被全球比特币网络节点记录在案,那么“转账费”是它们均分么?节点那么多,平均下来也太少了,起码我不干。
当然不会均分,而是谁先完成“挖矿”,这笔费用就归谁,也就是跟系统奖励一起给他,赢者通吃!
这也是节点被称为“矿工”的原因,勤勤勉勉的记账,辛辛苦苦的付出计算成本,最后得到转账费+系统奖励。
解决方案:“挖矿”是每 10 分钟一次,虽然这次你没挖着,没了奖励也没了转账费,但是可以开始下一轮竞赛了啊,不过参加下一轮竞赛的前提是,你得把账本更新到最新,也就是你不记账就失去了继续竞赛的资格。
你已经知道,只需向比特币网络广播一次交易信息,就会被全网的节点记录在案。
比特币节点接收到一条交易信息后,会独立进行真实性校验,如果有误就不会入账:
对于余额查询,我们前文说过,比特币系统的分布式账本并不直接记录某个账户下有多少余额,而是只记录转账记录。“挖矿”奖励所得也相当于一次系统给“矿工”的转账。
假设你账户 A 如下,有“挖矿”所得及 X/Y/Z 三人给你转账,共 50btc:
就像你不能把1元硬币割成两块,分别作为5毛钱一样。如果你要给商户支付5毛,只能给他1元,然后找回你5毛。
现在,你想给 B 转账 22btc,你只能从这 4 个 UTXO 中挑几个,如果刚好可以凑齐 22btc 最好,否则只能选大于 22btc 的组合。
就像你钱包有 10元/5元/2元/1元 各一张,买地铁票需要 3元,那么你可以给 ¥2+¥1 的组合,也可以给 ¥5 找回 ¥2,甚至可以给 ¥10 找回 ¥7,随你意。
这就是你准备发起的新交易的输入部分,总共 25btc。等到交易被确认之后,它们会被从 UTXO 记录中移除 ,也就不能再作为另一笔交易的输入了。
输出分为两部分,一个是给 B 转账 22btc,另一个是给自己转账 2.5btc:
答案是:随意,而且交易费和交易额无关,只和交易数据大小有关。费用越高,你的交易就越快地被记录。
幸运的是,挑选 UTXO 组合和计算转账费的工作都有“比特币钱包”帮你搞定,对你来说只需关注:给谁转了多少、找零多少、费用多少。
小思考:不给转账费会怎样?当传统的银行都开始取消转账费的时候,比特币还在收费,有点过分。这也是批评人士诟病比特币的缺陷之一。事实上,转账费是为了鼓励节点参与到系统的维护。传统银行系统也有巨额的维护成本,只不过他们转移了收费方式,毕竟“羊毛出在羊身上”。即使你不交转账费,交易也可能被顺利记录,因为网络中有一些“热情的”节点。只不过不能那么及时可以确认转账成功。
现在,你已经知道,一笔交易由输入和输出组成。输入由多个 UTXO 组成,输出由转出额以及可选的找零、交易费组成。
所以,当你挑选的 UTXO 组合小于转出额的时候,被判定为:余额不足,交易无效。
节点会给你的比特币钱包返回错误提示,也不会再把这个交易信息转发给近邻节点。
事实上,每笔 UTXO 都带有转账方为 A 量身打造的的“锁定脚本”(scriptPubKey),A 想要花费这笔 UTXO 的话必须提供“解锁脚本”(scriptSigs)。
“解锁脚本”和“锁定脚本”拼接在一起,可以组成一段可执行代码。如果执行成功,那么解锁成功,解锁者可以花费这笔 UTXO,否则记账节点在验证交易的时候认为他没有权限操作。
相当于转账者用你提供的一把锁,锁住了 UTXO,只要你能提供钥匙解锁,就可以花费。
使用栈顶的公钥 public-key 解密签名 signature,能够解密的话,执行成功;
“锁定脚本”中包含的 public-key-hash 就是 A 的公钥哈希(注意:不是公钥),可以通过 A 的比特币地址解码出来。
所以,我们说知道对方的比特币地址就可以给对方转账,实质上是知道对方的 public-key-hash 从而可以制造“锁定脚本”,也就是所谓的 P2PKH(Pay-To-Public-Key-Hash)。
A 想要花费一笔 UTXO 的时候,需要提供“解锁脚本”,包含他的公钥(public-key)和对新建交易的签名(signature)。
前文说到,私钥加密的信息只有对应的公钥能解密。言下之意,如果一段密文可以用公钥解密出来,那么这段密文肯定是对应的私钥所有者亲手加密的,因为私钥只存在所有者手中。
用私钥对一份数据加密,生成密文的过程,被形象地称为“签名”。就像你在一份合同上签名后就不可抵赖,因为没人可以写出你那样的笔迹。
综上所述,将一笔 UTXO 作为交易的输入部分而花费的时候,你需要提供一段“解锁脚本”,包含有你的私钥加密后的签名。
小知识:智能合约(smart contract)的概念也就是从上述“脚本”代码执行过程衍生出来的。所谓“智能”指的是:当条件满足时,代码可以顺利执行。比特币系统对“脚本”的设计是开放的。上述 P2PKH 的执行过程,只要你能提供私钥就可以花费 UTXO。事实上,你可以设计为:3 人中有 2 个人提供私钥,代码就可以顺利执行。这就相当于,你把比特币账户交给 3 人共同保管,有 2 人达成协议就可以花费。
遍布全球的比特币网络节点各自独立工作,随时有节点退出或者加入,怎么保证最终大家记录的账本一致,或者说达成共识呢?
假设某节点 Node 在 10 分钟内接收到 3 笔经过合法校验的交易:
节点会计算每笔交易的输入减去输出的差额,也就是前文所说的“隐性的转账费”。
假设每笔交易包含的转账费都是 0.1btc,那么总共就有 0.3btc。
接下来,节点以这些交易列表为基础,构造出一个区块头,共同组成一个完整的区块。
可以使用区块链浏览器查询每个区块的数据内容,以下是通过查询到的高度为 503688(也就是第 503688 个区块)的区块信息:
为了方便浏览,有一些并不在区块头中实际存储的信息,也被展示出来了。比如:区块自身的哈希值、后一个区块哈希值等。
比特币协议会不断发展以适应新的需求,不同的版本有不同的规则,可以通过版本字段标示这个区块适用哪些规则。
这里有个递归的问题:构造区块头需要上一个区块的信息,那么同理,上一个区块在被构造出来的时候需要上上一个区块的信息....
下图展示了创世区块(Genesis Block)的数据结构,可以看到它没有上一个区块头的哈希值,同时也没有交易记录,只有一笔系统奖励的 50btc:
有了创世区块问题就解决了,下一个区块可以指向创世区块,从此子子孙孙无穷尽也。
Merkle Root 美国计算机科学家 Ralph Merkle 最早提出,并由他冠名的一种数据处理过程。
例如,对于排好序的 4 份数据 L1/L2/L3/L4,分别计算它们的哈希值,然后将哈希值两两合并再计算哈希值,直至最后剩下一个根节点:
上图看起来就像一棵不断分叉的树,最底层的称为叶子(leaf)节点,最顶部的称为 Merkle Root。
这种数据结构具有特点:任意叶子节点的数据变化,都会沿着箭头向上传递,最终导致 Merkle Root 也发生变化。
将这种处理方法应用到区块的交易列表数据上,把每笔交易作为叶子节点,就可以计算出区块头所需要的 Merkle Root。
上文说到,比特币网络设置了“挖矿”难度,保证不管全网算力增加还是减少,都让“挖矿”时间保持在 10 分钟左右。
每经过 2016 个区块,难度就会调整一次。如果平均时间大于 10 分钟,那么降低难度;如果平均时间小于 10 分钟,那么增大难度。
下图是对数化处理后的难度变化曲线 月开始难度剧烈增加(对数化处理后才能在图表内展示完整,所以看起来平缓):
这个构造过程也称为“工作量证明”(Proof of Work),因为不花费一定时间投入算力的话,就不能构造出符合条件的区块头。那么构造成功的话也就证明了投入的工作量。
在区块头中,有 4 个字节的长度存储编码后的难度目标值,以第 503829 个区块的难度目标值为例:
这串 16 进制表示的数据分为 0091c1 和 18 两部分,经过固定公式计算后,可以得到难度目标值:
计算区块头哈希值的算法把区块头内容也映射为一个 16 进制表示的整数,例如第 503829 个区块头的哈希值:
只能通过不断地变化原始内容,然后计算出哈希值,看看是否符合小于难度目标值的要求。
这是一个费时的工作,大约需要 10 分钟。虽然“挖矿”设备计算速度超快,但是需要尝试的次数实在是太多了!
相当于前文说到的在 1 到 2的256次方 之间随机抽一个数,使其小于等于这个难度目标值。
答案是:每构造完 2016 个区块,有一次调整的机会,根据过去的 2016 块消耗的平均时间,用固定的规则计算出新的难度目标值。
还是有递归的问题,所以创世区块的难度目标值只能人为设定。事实上,初始难度目标值由中本聪写在第一版比特币代码中:
难度系数(difficulty)是相对值,表征当前相对于第一次,构造一个有效区块有多难。
难度目标值(target)是实现这个难度的具体阈值,要求构造的区块头的哈希小于这个数。
可见,难度有涨有跌,涨多跌少,这也表明加入“挖矿”大军的算力总体上在不断增加。
根据过去 2016 个区块的平均生成时间和难度目标值,就可以计算出接下来 2016 个区块的难度目标值:
前文说到,为了让区块头的哈希值满足条件,必须不断地变化区块头内容,但是区块头的其他部分都是固定的,所以只能调整区块头的随机数字段。
所以,随机数字段(Nonce:Number use Once) 从 0 开始遍历,可以产生约 43 亿个不同的值,也就可以生成 43 亿个不同的哈希,只要有一个哈希满足条件了,区块头构造工作就实现了。
前文说到,普通交易需要在输入部分提供“解锁脚本”,用于花费 UTXO ,但是“矿工”自己构造的系统奖励+转账费的那笔交易(coinbase transaction)并不需要指定 UTXO ,所以不用写入“解锁脚本”。这里空出来的地方可以写入多达 100 字节的任何数据。
交易列表的每次变动会导致区块头中的 Merkle Root 也发生变化,从而保证足够多次的哈希尝试。
以创世区块为例,虽然当时随机数字段足够满足哈希尝试次数,但是中本聪依然在 coinbase transaction 写入了这句话:
这句话既证明了创世区块诞生于 2009 年 1 月 3 号 之后,又表达了对银行(传统货币体系)的讽刺和创造比特币系统的初衷,还示范了 coinibase transaction 字段的扩展性用法。
现在你已经知道构造区块头需要的所有数据,以及如何获取到这些数据,回顾一下:
1、节点收集 10 分钟内全网有效的交易信息;2、插入一笔包含交易费和系统奖励的交易信息;3、将交易列表排好顺序,计算出 Merkle Root 写入区块头;4、找到上一个区块,并计算出它的区块头哈希值写入区块头;5、获取当前难度目标值;6、不断调整随机数和 coinbase transaction 扩展字段,使得区块头的哈希值满足要求。
从创世区块开始,每 10 分钟左右全网发生的交易被打包进一个区块,每个区块都包含上一个区块头的哈希值,从而在块与块之间形成“链条”,这就是所谓的“区块链”:
每个节点是独立开展工作的,只打包自己接收到的交易信息,同时会插入给自己的奖励交易,那最后岂不是每人一条自己的区块链?
1、节点成功构造出区块后,除了加到自己的链尾,还会第一时间广播给全网节点;2、其他节点收到一个有效区块后,会第一时间加入到自己的区块链上,同时也就宣布自己放弃这一轮的“挖矿”了。
第 1 个结果是显而易见的,把好不容易构造出来的区块藏着掖着,对自己没有任何好处。
倒不如发给更多人,反正它们无法篡改,让它们加到链尾,那么你的区块所在的链条长度又 +1 了,这样就巩固了“系统中最长的区块链”的地位,你才可以认为系统奖励安心落袋了。
小思考:为什么其他节点无法篡改你的区块?篡改的主要目标是交易记录,比如把系统奖励改到自己名下。这就会导致 Merkle Root 发生变化,那么区块头的哈希值也跟着变化。那就不再是一个有效的区块了,毕竟区块头的哈希值必须小于难度目标值。
第 2 个结果充分运用了博弈的原理,假设你收到一个别人发过来的有效区块,你最佳的选择就是马上把它加到自己的区块链上,因为你不知道其他节点会不会加到它们的链尾,如果它们加了而你没加,那你的链条就比人短,导致你记录的整个链条作废!
那么摆在你面前的只有两个选项:放弃这一轮“挖矿”,开始下一个区块的构造;或者等着自己的链条作废。“利欲熏心”的你应该不难做出选择,毕竟没人跟钱过不去。
至此,“自私”的节点在有效规则之下做到了大规模协同,让系统利益最大化:只保持同一条最长的区块链。这也叫做“达成共识”。
假设 A/B 两个节点在同一时刻成功构造区块并广播出去,全网节点中有一半先收到 A 的区块后收到 B 的区块,另一半先收到 B 的区块后收到 A 的区块。
节点会把先后收到的两个区块都接入链尾,以先收到为主链,后收到的为候选链,并开始以主链为基础继续下一轮“挖矿”。
不要担心,如果“挖矿”期间又收到下一个有效区块,其指向的是候选链,那么此时候选链更长,节点会把它切换为主链。
所以,这种“分叉”危机往往只存在一个“挖矿”周期,最后全网又只有一条最长的区块链。
前文介绍了比特币系统如何确保一笔交易是本人签发的,主要为了防止坏人盗取你的资金。
考虑到只有参与“挖矿”并第一个完成“工作量证明”,才能获得系统发行的比特币。只有存在别人给你转账而你未花费的 UTXO,你才能发起一笔有效交易。这就确保比特币系统基本上没有作弊的空间了。
这笔交易被广播到比特币网络,大约 10 分钟后被打包进一个区块,加入到区块链。
并把这笔交易只发给自己控制的具有强大算力的“矿池”,假设你的“矿池”的算力已经占到全网的 51%,那么你可以很快的生成包含转给 C 的交易的区块,并广播给其他节点。
由于你的“矿池”算力如此之大,以至于下一个区块又是首先被你构造成功。于是乎全网节点都把候选链切换为主链。
就这样,包含给 B 支付的那笔交易的区块就被排除在“最长区块链”之外了,相当于你没给 B 付钱。
幸运的是,目前全网算力如此之高,以至于你得付出巨大的成本才能掌握超过 51% 的算力。权衡利弊,你发现得不偿失就放弃了这个想法。
对于 B 来说,可以做的就是等待。不要看到交易被打包进区块加入区块链后,就认为支付已经成功了。
等到更多后续的区块被加入区块链后,想要篡改之前的某笔交易,就必须重新生成后续的所有区块,但是每个区块都要耗时大约 10 分钟,攻击者在算力有限的情况下无论如何也追不上主链的区块构造速度。
1、块与块之间形成链式结构,如果某个区块被改动,那么后续的区块就不再指向它,要想成为“最长的区块链”只能重新构造后续的区块;
所以,前文说到人为地给比特币“挖矿”制造成本,并不是设计者没事找事,而是为了让比特币系统无懈可击。
事实上,比特币“挖矿”难度完全可以改为 5 分钟、20分钟或任意分钟,但是综合考虑到:既不能让人等太久才可以确认交易,又不能让攻击者有机可乘,便折中确定为 10 分钟。
现在你已经完全理解了比特币系统运行的原理,所有这些复杂的设计,都只有一个目的:满足成为一般等价物的条件。
1、比特币的“挖矿”机制,耗费了全球大量的能源;2、盲目的炒作令比特币价格剧烈波动,而货币的首要目标就是币值稳定;3、交易的匿名性存在缺陷,比如此前勒索病毒要求使用比特币作为赎金;4、比特币总量有限,所以是一种通缩型货币,价值只增不减,可能导致人人囤积,从而市场上缺少流动性,最终经济萎缩;5、转账耗时,还需要手续费;6、交易并发容量有限。
政府发行货币,本身就是对其合法性的一种宣示。对货币发行的控制权本质上是对社会财富分配的控制权。
从 2009 年正式问世以来,比特币在无数人的共同努力下不断发展,启发了人们关于货币体系的思考,这本身就是巨大的成就。
但更伟大的是比特币带来了区块链技术。区块链从比特币发展而来,但却远远超出了比特币的范畴。
“中心”的形成是因为信任的需要,因为只有建立了信任才能提高活动效率。但一旦成为“中心”,便带来垄断和不透明,这本身又侵蚀了效率。
本文主要介绍了比特币的运行原理,相信读者已经对比特币相关的概念有了基本的认知。
你脑海中还有一大堆疑问,想了解更多关于比特币/区块链的信息,可以联系作者微信/微博 @Ceelog,与作者直接交流与问答。
这些数字货币甚至比比特币更完善,价格也在不断攀升,受到越来越多人的认可,虽然有很大一部分人是无知而无畏的投机。