第0章 引言安全
做者:閃電HSL網絡 最近幾天BCH社區異常激勵地討論着在5月19日的一次在香港開的關於募集BCH開發資金主題會議的事,本文主要想寫明白這個主題會議上到底發生了什麼,尤爲是後面幾天社區的各類誤讀,各位都激動的很,以及我本人對這個會議提案的見解。區塊鏈
第1章 香港BCH開發資金募資方案主題會議spa
5月19日在香港BCH的愛好者,會議有礦池、節點開發者、錢包開發、愛好者等,規模並不大,我沒數人數,估計20人左右吧。代理
會議最重要的事是BCH節點開發者姜家志(哥白尼項目的負責人)在會議上作了一個主題演講,演講的內容是闡述一個針對BCH開發的專項專款募資的方案。ci 演講內容包括下面幾大塊:開發
我重點表述第3點。
募資的起點是:有開發者提出資金需求和募資理由,具體方式是使用鏈上一筆多重簽名的交易方式向BCH全網發佈,將需求和理由以文字的方式寫進OP_Return字段,全部人均可以查閱這些內容,是全網公開的;多重簽名的私鑰持有者是全部礦池,有多少礦池就有多少把私鑰,具體如何構造咱們不用管。
募資的審覈過程是:礦池全部者看到這筆交易後會對OP_Return裏的內容,並評估是否願意捐贈。若是願意捐贈,就使用簽名的方式投票贊成捐贈,捐贈的比例是按礦池全部者的算力佔全網比例。多重簽名交易廣播成功後進入算力投票。
礦池使用區塊對募資進行投票,一個塊一票,若是全網超過75%的算力都投票贊成捐贈,那這個募資需求經過了審覈,進入打款階段。塊獎勵轉入募資的管理地址。
好比有一個開發申請100BCH,有75%算力審覈經過後,開始打款。一個區塊有12.5BCH的區塊獎勵,募資方案裏提方按每一個區塊裏捐贈0.1BCH,持續1000個區塊。在開始打款的區塊日後延續1000個區塊,挖到區塊的礦池就會打款,沒挖到固然不打款。
打款也能夠輔助階段性,好比開發者作到什麼里程碑才轉下一個階段的款,以便創建監督缺席。
以上就是大概的過程,細節可能有不同。下面要分析具體的打款實施過程,這是爭議最大的地方。
若是75%的算力投票贊成捐贈,但其他25%算力不一樣意,怎麼辦?
家志的提議是使用必定的方式來「逼迫」不一樣意的少數服從捐贈,請注意,家志在表達的過程,屢次強調這只是一個潛在的可選擇的方案,是一個拋磚引玉的提議,這是他目前能想到的最可行性策略,但願引出你們更多的更好的方案。
具體的辦法是,由於75%算力贊成捐贈,這是多數優點算力,按照少數服從多數的原則,若是少數算力不執行捐贈,首先捐贈會持續,多數算力依然會執行捐贈,會持續在挖到的區塊裏轉出認捐的份額,直到捐贈滿爲止。但爭議的地方在這裏,多數算力將會對這些沒有捐贈的區塊進行孤立。由於是多數算力採起統一行動,因此孤立大機率會成功,這時候少數算力就會損失掉挖出的塊。在這種博弈下,少數算力是不會坐視被孤立,會出三種狀況,第一是服從捐贈;第二是將算力離開BCH前往BTC挖礦;第三是拉更多的算力過來,反過來壓倒捐助者,這時捐助可能就沒法執行了。
因此在實際執行過程當中,實際發生的狀況大機率來講是不會出現真正有區塊被孤立,博弈會出現穩定的狀況。這是一個介於強制和純自願之間的中間地帶的機制。 爲了實現這個多數算力對少數不認捐的算力進行孤立的行爲,礦池會使用特定的機制來達成統一意見,具體的是一個代理機制,代理這個詞很差理解,咱們能夠將這個詞理解爲一個軟件,軟件能識別礦池之間發現哪個區塊沒有認捐,而且軟件能夠指揮挖礦軟件自動執行孤立不認捐的區塊。
第2章 社區最大的兩個誤解
這幾天社區在大討論這個募資方案,有兩個誤解最好澄清下。
第一個必需要澄清的是:此次募資方案提議並非要成立一個長期的收款基金會,不是長期的針對BCH每個區塊要抽固定比例的分紅到特定的地址。 此次募資方案是一個專項專款,有人提出資金需求,礦工審覈投票,經過則捐贈,通不過則不會出現捐贈。
這個澄清能夠避免關於資金腐敗的問題,沒有特定的基金會用來長期管理資金的問題。能夠避免討論募資的具體使用方式,由於在捐款以前已經肯定了使用方式。也能夠避免討論募資額度的問題和誤會BCH挖礦被固定抽稅的問題,額度都是專項討論出來的。
第二要澄清的是「孤立不認捐」的區塊的機制不是一個共識協議級更改。
社區不少人一聽這個方案誤認爲要對BCH進行一次共識協議升級,使用一個軟分叉或硬分叉來部署。沒有這回事。上一章講的「代理」軟件不是要針對bitcoin abc這樣的節點軟件進行部署,而是在礦池挖礦軟件上部署。
這個澄清能夠避免展開是否是礦工獨裁挾持整個社區的討論。事實上這個募資提案並非讓礦工擁有改協議的能力,只是讓礦工達成了某種合謀共事。這種「孤立不認捐」的機制只是礦工之間的事,和非礦工沒有什麼關係。
第3章 我承認此次募資方案會議的地方
我承認BCH的發展確實如此次會議所說的,是須要更大規模的募資推進發展的。區塊鏈的發展已通過了極客愛好者主導的階段了,已經步入專業化了。開發難度已是很難了,再也不是業餘和少數人能搞定的事。這個背景下,要作出一個偉大的產品,是須要投入更多的資金。但具體金額須要多大,則須要更專業的評估了,我不知道。
不可是開發須要更大的投入,社區的推廣,和應用層的開發也須要更多的投入。
我也認同礦工做爲協議層最大的受益者主動站出來捐贈資金推進開發是合理的。BCH整個經濟生態,礦工確定不是最掙錢的,但區塊獎勵確實是只有礦工挖到的,礦工是底層協議最大的受益者。針對推進開發的資金,礦工有必要牽頭捐贈。
但這裏先補充一點,我認爲除了協議開發層面,其餘如推廣和應用項目開發等,並不能把這個捐款的冤大頭也按到礦工頭上。我們有一說一,不能看誰掙錢就咬誰一口,我主張資本主義,不主張劫富濟貧。
第三我認同這個募資方案在專項專款透明度上的創舉。慈善最大的敵人是腐敗,腐敗的最大敵人多是透明。此次會議將募資的需求方、起因、金額、使用策略;捐贈者、捐贈金額、捐贈時間,等信息徹底公開寫入BCH區塊鏈的試,徹底透明、而且不可篡改,並且任何第三方均可以針對這個款項和募資項目發起公開透明化的評論,這對慈善來講是一個很是大的進步。
第4章 我認爲這個募資方案存在的最大問題
我不認同這種在礦池之間部署一個「代理」來孤立掉不認捐的小算力區塊的設定。這會致使下面的問題。
BCH網絡是一個P2P網絡,節點可分爲挖礦節點和非挖礦節點。如今挖礦節點和非挖礦節點都追隨簡單的最長鏈爲有效鏈規則,只有區塊處於最長鏈就是有效區塊,不處在最長鏈的區塊就是無效區塊。
目前網絡挖礦節點和非挖礦節點對最長鏈最大的分歧在於孤塊,若是全網在極短的時間內同時由兩個獨立的礦池分別在同一高度上挖出區塊,就必定會出現其中一個是孤塊,另外一個纔是有效塊。這種狀況下,哪一個區塊優先廣播到更多的算力節點,得到超過51%的算力的投票,就成爲了有效塊,鏈的最新高度就會上升到這個塊,而另外一個塊則成爲孤立塊。
這種孤塊制度在非挖礦節點上也是能夠在「秒級」時間偵查到的,全部的非挖礦節點都是和礦池節點同樣,會前後收到這兩個相競爭的區塊,也均可以預見全網將會出現一個孤塊。因此非挖礦節點能夠和挖礦節點同步知道在接下來的最新高度會是哪個區塊。這種設定下,全網全部節點並不會怕孤塊的出現會傷害安全性。這兩句話有點難理解,我舉例說明。
假設如今全網在同一高度上挖出了兩個區塊,咱們稱爲A和B兩個區塊,其中必有一個是孤塊。若是有一筆交易tx1被打包進A區塊,而沒有被打包進B區塊。這種狀況下,若是非挖礦節點1優先收到了A區塊,而且將區塊鏈高度更新到A區塊,則在這個節點1來看tx1已經得到了1個確認。但非挖礦節點2優先收到了B區塊,而且將區塊鏈高度更新到B區塊,則在這個節點2來看tx1仍是零確認。這時候區塊鏈處於臨時分裂狀態,但這種衝突能夠在秒級時間內就能夠消解,由於幾秒時間後,節點1和節點2都會收到另外一個相沖突的區塊,就能夠從新評估最新高度和tx1的安全性了。而這種競爭性必定會在下一個區塊決出勝負。而對挖礦節點來講,也是同樣的,礦池公司應該會在全球部署更多的節點來偵探這種相競爭的區塊A和B,但本質上仍是和非挖礦節點處於相似的地位,只是有微弱的優點。
但若是由本次募資方案中的「孤立不認捐的區塊」的策略,容許礦池間存在一個聯盟,能夠聯盟能夠採起主動孤立掉聯盟外的區塊政策。在這樣的背景設定下,非挖礦節點是沒法知道這個挖礦聯盟的政策的,非挖礦節點是沒法識別是否存在收到的區塊是否會被這個聯盟孤立掉,這樣的設定會讓非挖礦節點收到最新區塊後沒法作出和礦池相同的安全性評估,非挖礦節點只有等到下一個區塊時才能發現上一個區塊是否被孤立。這一段句話也很差理解,我舉例以下。
如今有一個礦池聯盟,咱們取名爲捐贈者聯盟,持有75%的算力;其餘25%算力構成拒絕捐贈者聯盟。前者挖的區塊咱們稱爲A;後者挖的礦稱爲B。如今全網出了一個B1塊,全網全部的節點,包括非挖礦節點都會收到B塊,非挖礦節點和拒絕捐贈者聯盟的礦池節點都將這個B1塊列爲最新高度,但捐贈者聯盟礦池則會拒絕B塊。這時候全網處於臨時分裂狀態,若是下一個區塊爲A1塊,全網都會收到這個A1塊。非挖礦節點和拒絕捐贈者聯盟節點才發現,我操,我可能收到一個孤塊,如今的A塊和10分鐘前那個B塊,造成了競爭關係,有一個必然是孤塊。而誰勝出,還須要在下一個區塊出現,若是在A1塊以後,捐贈者聯盟又挖了一個塊A2塊,則非挖礦節點和拒絕捐贈者聯盟節點會將B1塊拋棄,認定A2塊爲最新高度。但如何A1塊以後,是拒絕捐贈者聯盟挖出一個塊B2塊,非挖礦節點和拒絕捐贈聯盟會將最新高度認定爲B2塊,這種狀況下,競爭還將繼續。直到A塊爆出的數量多於B塊。由於A塊的算力更大,有75%的算力優點,會在第二個A2塊大機率決出勝負。
這種聯盟有權限孤立掉別人的區塊的設定會讓非挖礦節點和礦池節點處在不一樣的對最新區塊高度的共識上,非挖礦節點就須要更多的確認數才能保證本身的高度是和礦池節點處在相同的共識上。
我認爲這是不合理的,這會讓非挖礦節點面臨潛在的少確認數風險。如今1確認是極端安全的,甚至零確認都是安全的。但若是有這種孤立政策後,1確認的安全性就大大下降了,零確認基本沒戲,須要3確認才能達到以前1確認的安全等級。
至於這個募資方案關於自由、權力、義務,這些的爭議,我認爲永遠都不會有答案的,這是阿貓阿狗都有本身自圓其說的說法,討論這些太虛無縹緲了。
第5章 我認爲這個方案值得修改完善的地方
第一應該補充的是限定礦工捐贈資金的使用範圍,應該限定在協議層的開發。
個人理由是礦是協議層最大的受益者,加上協議層開發也必須和礦工配合運行,也就是礦工的理念是能夠影響協議開發的,那礦工在協議層的進化上就應該承擔更多的義務。
但著如BCH推廣,搞meetup,應用層的開發,這些就不是礦工受益最大了,這應該是交易所或其餘生態節點纔是最大的受益方。像這些活動資金需求,就另找出路吧。礦工也不是冤大頭。讓礦工的捐贈集中在協議層開發,整體出資不會變成無底洞,也就不須要想各類催捐招了。礦工也別剝奪別的經濟節點生態作慈善的機會哈。
第二是去掉「孤立不認捐區塊」的環節,換成純粹的自動捐款的設定,加上透明、榮耀和社區輿論壓力輔助推進更大的捐款意願,再配合上述第一條,就夠了。還要啥自行車啊。
就目前的現狀來講,排名前幾的大礦池都願意捐贈,有產者多出點,換來更多的榮耀和更多的話語權。那些小礦池不捐款,不想要這種榮耀,就算了。維持一個生態的多樣性也挺重要的,同時有大方的和自私的,才叫多樣性嘛、就維持現狀挺好的。
開發者也努力點,努力向社區解釋下你要幹嘛,努力作出真正牛逼的事,作一個真正牛逼的人,爲何要捐贈,不要那麼高冷,又不是美女。 第6章 結束語
你們不要激動,咱們的目標是星辰大海,土大木。 |