看了不少書和文章,對區塊鏈的描述都過於科普和簡單。每10分鐘形成的區塊裏包含了這10分鐘內所有的交易信息,然後附上上一個區塊的哈希值和本區塊的哈希值,以及一個隨機數用來進行工作量證明。誰能告訴我下這個區塊的產生是誰負責的呢?

多謝多謝!


具體點說吧,一個區塊包含的值是:

1、上一個區塊的哈希值

2、XXX(礦工的帳號,如果是你在挖礦,就填你的帳號)得到了12.5個比特幣(看,就這麼完全憑空生產出來了12.5個比特幣,記到帳上去就行了)

3、大約4000條的交易信息。不是這十分鐘內的,是前面堆存下來還沒處理的所有交易信息,這些交易信息裏除了誰給誰多少幣外,還都附了一條給多少交易費。交易費全歸XXX得。所以XXX要在這些交易信息裏優先挑交易費高的出來,挑出4000條為止(誰給的交易費太少,可能就一直堆在那了)。當然,XXX還有確認這些交易信息有效的責任。反正電腦做這些事很快很快的。

4、一個隨機數。

把上面這些打包在一起,形成一個1M左右的數據塊,計算哈希值(一個256位的2進位數)。看看這個哈希值的前30位是不是零。如果不是,就把上面第4條的隨機數改一改,重新算一次哈希值。如果還不是,再改,再算。。。。因為哈希計算是不可逆的,所以沒有辦法從後往前推算這個隨機數,只能這麼一次又一次的改了算。。。這就叫哈希碰撞。

前30位是零這個數是我隨手寫的,它本身也不是固定的,所謂的挖礦難度,就是指這個數的調整,要求的零越多,就越難碰出來。按現在挖礦難度,碰上個億億億億次也不一定能碰出來。

全世界的礦工都在做這樣的工作,當然不同的礦工,那個XXX是不一樣的,紀錄的交易信息也可能是不一樣的。直到有一位幸運礦工碰出了前30位是零的哈希值,他就可以高興的把自己打好的包和哈希值上傳到網上去了。其它礦工收到後,驗算一下,只要一次哈希計算就夠了,當然也要驗算一下裡面打包的交易信息,沒問題就可以承認這個塊了,把這個塊掛到鏈的最後面。掛進去後,裡面的交易就成為了被確認的交易,同時被確認的還有第二條「XXX得到了12.5個幣」,全世界的比特幣就此多出來了12.5個。

這樣的話有人就會問了,我不承認這個塊,我繼續算我自己的塊不行嗎?要是我算的塊被確認,那12.5個幣不就是我的了嗎。所以,區塊鏈還有個規則就是大家都承認最長的鏈,你不承認這個塊,那你算的鏈就比大家算的短了一個塊。如果在大家算出下一個塊之前你算出了這個塊,你還有機會追一追,如果大家再出一個塊,你就落後兩個了,越落越多,根本追不上的,這就叫工作量證明。除非你的算力超過了全網51%的算力,那你不用承認別人的塊了,埋頭算自己的,最終你的鏈絕對是比誰的都長。這就是51%算力陷阱,不是網上吹的有了51%算力就能改交易信息,不是那麼回事,是有人過了51%其它人就都沒得玩了,這整個系統就要崩了。

但是,中本聰低估了玩家的聰明,本來大家各算各的,去中心化的系統,很好的想法吧,有人不樂意這麼玩了,因為碰上億億億億次才能碰到一次,單人想要中獎,機率實在是太低太低了。那就幾個人把算力聯合起來,中獎機率不是就大很多了嗎?於是礦池出現了,礦池主承包了打包的前三項工作,把未完成的包(就差一個隨機數)分發給礦工。礦工不用幹別的,就碰這個隨機數。碰出來了,請看第二條,這12.5個幣是歸礦池主得,然後,礦池主再把這12.5個幣按大家的算力貢獻分發下去。有人買一臺礦機,挖一天挖出來0.0001個幣,就是這麼來的。就在2017年,中國的某礦神(就是那個專門賣礦機的)他掌握的礦池,已經超過了51%!他自己也知道不能這樣,這要玩崩了誰都沒得玩了,於是他自願的把礦池拆成了兩個,完美的避開了51%算力陷阱。現在的比特幣挖礦行業,已經被前幾大礦池牢牢把控了,私人拿一兩臺電腦想單獨的挖就是個笑話,必須加入一個礦池,纔有喝到點稀湯的可能。而且隨著最近比特幣價格下跌,小礦池破產倒閉越來越多,越小的倒得越快。。。。。


其實是個挺好的問題,嘗試回答一下。

抖機靈的答案是不知道。

科普的答案是,第一個算出本區塊哈希值的人。聽起來挺簡單是吧?但是問題就在於,分散式系統中,時間是不確定的。為什麼?想像一下,你有一塊表,那麼時間對於你來說是確定的,但是如果你有兩塊表,那就麻煩了,哪塊是準的?

這個問題突然就複雜了起來,誰能證明自己是第一個算出來的人?

我覺得到這裡,應該還有人矯情,問,第一個廣播答案的人就是第一個算出來的人呀?

那我請問,兩個人同時(真實時間裡)廣播,算誰的區塊是第一個廣播出來的?

答案是,誰的廣播被接受的更多,就算誰的,從原則上來說,甚至與時間無關。

因為:

1.礦工們需要用自己的算力進行計算以獲得獎勵,當一個礦工計算出答案的時候,他有動機去廣播這個區塊,因為區塊被接受後他能獲得獎勵。

2.當一個礦工收到一個區塊廣播的時候,他有動機去驗證這個區塊是否有效,因為如果這個區塊為真,那麼他現在做的計算就是毫無意義的,因為有人比他算出來的更早,已經獲得了本區塊的收益,作為一個理性的礦工,應該立刻放棄手頭的工作,基於本區塊開始計算,並且將這個合法的區塊廣播出去。因為,如果這個合法區塊沒有被大家接受,那麼他現在做的工作就算是白費勁。他接收到這個區塊越早,那麼他(自認為)自己佔盡先發優勢,為了自己的利益應該廣播並開始下輪計算,至少理論上是這樣的。

3.當一個區塊被接受後,大家應該都會基於這個區塊去挖下一個,但是大家接受的區塊可能都不一樣。那麼當下下一個區塊被挖出來的時候,沒戲的幾率已經更大,所以,每當礦工收到一個更長鏈的時候,礦工有動機去基於更長的鏈進行計算。不同的鏈被稱為分叉,分叉普遍存在,但中本聰認為,在低於51%算力不聯合作惡的前提下,本區塊後面跟隨了6個區塊就應該認為,這個區塊不會因為分叉被更改了,因為:

5.1/2的6次方,自己算概率。

6.但是如果51%的算力聯合起來了,那麼中本聰假設:你們都這麼NB了,老老實實挖礦麼賺錢麼為啥葯搞事呢,閑的蛋疼了麼?

以上就是比特幣的共識原理,根本不是一個計算機學問題,而完完全全基於經濟學上的理性人假設。

所以,比特幣上的時間戳,並不是你的本地時間,而是大家時間的一個平均值,因為中本聰在設計之初,就規定大約10分鐘產生一個區塊,如果比這個時間長,那麼降低下一個區塊的計算難度,如果低於這個時間,則加大下一個區塊的計算難度,具體規則,請自行百度,本節課不做擴展。

講到這裡,我覺得腦子活絡的應該想搞事了,想搞事的都是數學好的,行,我們往下講那麼一點點。

有童鞋想了,如果我挖到一個區塊,不廣播會怎麼樣?中本聰認為,這純屬腦子有病,但是確實有人想到了從這個方面獲益的辦法,就是扣下這個區塊,並且馬上進行一次消費,然後廣播這個區塊。因為如果這個區塊被接受了,上次消費不作數,萬一有人腦子不好接受了,他就賺了。這個東西,叫自私挖礦。

再擴展一步,我作為某個大礦池,把一筆(給另一個礦池的)小交易封進一個塊裏並且挖出下一個塊,我扣下並進行交易,花出一大筆錢,然後廣播這個塊,那麼作為另一個礦池,肯定願意接受我這個塊,他就有動機故意的忽略別的塊並不廣播,如果大礦池這麼做,就讓系統的風險更大了,這玩意叫賄賂挖礦。

繞回來,這個區塊是由誰產生的這個問題的答案是,被接受的最多的算出合法答案的那個礦工。


礦池


所有運行比特幣系統全節點的人啊。

整個流程是這樣的,礦工、礦池這些運行全節點的第一步就是先從未確認的交易池裡面把合法的交易驗證後,生成merkle樹,然後連同上一個區塊的哈希等區塊頭中所包含的信息進行工作量證明,其實也就是在計算這個區塊的哈希,但是這個區塊的哈希值是有要求的,只有找到符合要求的哈希值才能算是合法的區塊,才能被全網認同,所以礦工需要不斷地調整隨機數並做哈希,直到誰先找到符合要求的哈希誰就算是生產出了一個合法的區塊,而此時其他礦工雖然也在做工作量證明但是卻沒有找到符合要求的哈希值,所以區塊的生產是由最先找到符合要求哈希值得那名礦工所擁有。

糾正一點,「然後附上上一個區塊的哈希值和本區塊的哈希值」,本區塊的哈希值是不會被附上的,因為本來就是在找這個區塊的哈希。


居然有這樣的問題邀我回答,溜溜溜了


答:所有安裝了比特幣挖礦代碼的機器都有一定概率可以產生。

看了不少書和文章,對區塊鏈的描述都過於科普和簡單。

註:一旦展開說,一天都說不完

每10分鐘形成的區塊裏包含了這10分鐘內所有的交易信息,

注1:不是每10分鐘,而是大約每十分鐘注2:不是10分鐘內所有的交易信息,而是10分鐘內「可以記錄在帳」的交易信息,沒記錄下的基本上是因為手續費太低,只能等下一個10分鐘

然後附上上一個區塊的哈希值和本區塊的哈希值,

註:創始區塊沒有哈希值

以及一個隨機數用來進行工作量證明。

註:你問的問題的答案就在這裡

誰能告訴我下這個區塊的產生是誰負責的呢?

註:重點不是誰負責的。重點是誰都可以負責,只要你遵循了比特幣生產的規則。第一個找到那個隨機數的(大概率)有權利產生這個區塊。
礦工
推薦閱讀:
相關文章