比特幣交易所 比特幣交易所
Ctrl+D 比特幣交易所
ads
首頁 > Polygon > Info

ArcBlock 博客 | 區塊鏈和數據庫:致虛極,守靜篤_ARC

Author:

Time:1900/1/1 0:00:00

作者:陳天

前言:為紀念中本聰發表比特幣白皮書10周年,ArcBlock研發副總裁陳天特撰此文闡述他對區塊鏈與數據庫的關系的獨特觀察和思考。

10月31日,陳天發朋友圈感慨自己投身區塊鏈創業“半年過去了,無數打了雞血的三點鐘群已經悄無聲息,一票在泡沫里仰泳的投機者消失了,而我,像鉆進了兔子洞的愛麗絲,徜徉在這個奇妙的世界里……”

如果說牛頓的經典物理是愛因斯坦相對論在低速環境下的一種體現的話,我們所熟知的數據庫技術,可以認為是區塊鏈技術在弱分布式環境下的一個特例。

「弱分布式」環境是我胡扯的一個詞,你可以將其理解為節點數量極其有限,運行環境高度可控的一種分布式環境。一個數據庫集群運行在同一數據中心,或者不同數據中心,只要是同一個管理者,那么這就是可控的運行環境。在可控的運行環境下,默認不存在「作惡」的節點,也就無所謂BFT,因此我們不需要復雜的共識算法,一般兩階段提交或者paxos/raft就能收斂共識,滿足需要。所以,數據庫的共識算法是區塊鏈共識算法的特例。

在區塊鏈的世界里,交易和交易產生的狀態是嚴格分離的。若干交易由被共識算法選擇出來的礦工驗證并打包成為區塊并廣播出去,然后網絡里其他參與者驗證區塊中每個交易的合法性,并寫入自己的statedb。在bitcoin里,statedb是UTXO,在ethereum里,則是其worldstate。

數據庫的世界里仿佛沒有類似于區塊鏈的交易記錄,但仔細想想,它的交易歷史其實就是WAL。從外界接收到的請求,數據庫會先將其寫入WAL,確保其進入持久化存儲,才會往它自己的“states”里面寫入。從這個角度,我們可以認為WAL里的每一個記錄,就對應區塊鏈里的一個交易,它是區塊鏈交易的特例。

Alameda Research從Circle提取6500萬枚USDC:10月14日消息,Lookonchain監測數據顯示,Alameda Research今日從Circle提取6500萬枚USDC,并從FTX提取2600萬枚USDC。

昨晚美國CPI數據發布后兩小時,Alameda曾從Circle提取4600萬枚USDC,并將3700萬枚轉至幣安和FTX。之后,ETH價格上漲了9%。[2022/10/14 14:27:53]

如果你再認真思考一下,WAL,blockchain,以及MartinFowler很早就提倡的CQRS在這個層面上其實都是「一中各表」:大家都強調「事件」和「狀態」的分離,通過前一個狀態+當前事件,可以推演出當前狀態。這樣,我們只要有一個初始的「狀態」,然后記錄系統發生過的所有的「事件」,就可以復原任意一個時刻的「狀態」。

我們回到交易和容納交易的「區塊」。你會發現,「區塊」是一個怪怪的存在,為什么數據庫不需要「區塊」這樣的概念作為容器裝載「交易」,而區塊鏈卻需要呢?我們知道,在區塊鏈的世界里,不確定性和確定性仿佛一對孿生兄弟,確定的是規則,不確定的是規則的執行者。所謂礦工輪流做,下回到我家,那怎么定義一個「回合」呢?為了回答這個問題,我們需要某種機制明確一個回合礦工地位的起止——這個起止就是一個「區塊」。不僅如此,在一個物理時鐘并不一致的分布式環境下,「區塊」還承載著全局時鐘的功能,滴答滴答將整個網絡往前推進。「區塊」的概念是如此重要,以至于它當仁不讓地成為共識算法的基礎——大家先得對下一個要出的區塊序號達成共識,否則這個游戲無法進行。反觀數據庫系統,在一個數據庫集群中,master是固定的,master令旗一揮,slave就迅速跟進,指哪打哪,不存在輪流坐莊,也就無所謂回合,所以其實每個「交易」就是一個「區塊」。所以在數據庫的世界里,邏輯上每個交易,或者說WAL的每個記錄,自成一個隱性的「區塊」。

BitMEX Research:21家上市比特幣礦企總市值已超過150億美元:金色財經報道,據BitMEX Research官方社交媒體賬號披露數據顯示,目前21家上市比特幣礦企的總市值已經超過150億美元。BitMEX表示,通過將當前市場狀況與2012/14年比特幣挖礦行業進行比較發現,目前資本正在瘋狂涌入這一領域,因此他們判斷網絡算力會出現顯著增加。數據顯示,目前市值最大的比特幣礦企是CORE SCIENTIFIC(約為26.375億美元),MARATHON DIGITAL(23.372億美元)和RIOT BLOCKCHAIN(19.561億美元)分列第二和第三位,另外NORTHERN DATA市值約為14.076億美元,這四家上市礦企市值在10億美元以上,是這一領域的“獨角獸”。[2022/4/12 14:18:32]

我們從另一個角度來探討這個結論。「區塊」的另一個重要的作用是crashrecovery。在一個區塊鏈網路中,某個節點無論是斷網還是崩潰,其狀態和網絡中達成共識的狀態必不一致,那么,如何從這種不一致的狀態恢復同步的狀態呢?答案是「區塊」,因為它是唯一明確的共識的產物。節點總是能夠找到最近的commit的和網絡中一致的區塊高度,然后從這個高度往后一個區塊一個區塊同步,依次運行區塊中包含的所有交易并更新本地的狀態,最終可以保證和網絡中的狀態達成一致。在這里,「區塊」就是檢測和達成狀態一致的最小單元。而在數據庫系統中,在崩潰發生后,系統會從其他節點同步最新的WAL,并從上次commit的WAL的位置往后一個記錄一個記錄執行命令,直到所有記錄運行完畢,這時數據庫狀態恢復到集群的當前狀態。在這里,WAL的記錄是檢測和達成一致的最小單元,所以我們稱其為隱性的「區塊」,沒毛病。

動態 | BitMEX Research稱BSV經歷非共識鏈分裂 比特幣協會創始主席稱其不懂比特幣工作原理:BitMEX Research在推特宣布BSV經歷了非共識區塊鏈分裂后,BSV再次成為新聞焦點。BitMEX Research表示,“BSV今天有一個非共識的鏈分裂,長度為2;它發生在UTC時間1月20日14:36 到14:51 。”AMBCrypto文章指出,截至發稿時,很難看到這一分裂本身是否對BSV的價格有任何影響。比特幣協會創始主席Jimmy Nguyen評論稱,BitMEX Research再次證明自己不理解比特幣是如何工作的。中本聰在比特幣白皮書中表示,大多數決策都由最長的鏈來代表,它投入了最大的工作證明。據此前報道,BSV計劃于2020年2月4日進行“創世紀升級”硬分叉。升級技術變更內容如下: 重點變更為包括必要共識參數、共識變更及其其它必需的變更。其中,共識變更包括恢復OP_RETURN的功能、用BigNumber替代32位操作碼、在新交易中廢止使用P2SH和恢復nLockTime和nSequence的最初用法。 補充共識變更包括創世紀升級的區塊高度激活機制、UTXO繼承依賴規則等。 此外,還將對并行區塊驗證等進行性能改善。(AMBCrypto)[2020/1/21]

在區塊鏈的世界里,一筆交易需要被驗證。這里的驗證有兩重含義:1)身份驗證——交易是由其發起人正確簽名的;2)完整性驗證——交易對狀態的變更是合法的。身份驗證好理解,你用自己錢包的私鑰簽名給我轉1個ABT的交易,系統會驗證你的確是你;完整性驗證則是指在statesdb里,你的賬號下的確有超過1個ABT的token,才能發起這個交易。在數據庫的世界里,身份驗證直接赤果果用諸如RBAC的訪問控制系統解決了,而完整性驗證和區塊鏈類似。

動態 | Libra項目負責人David Marcus預計將會出席7月16日的聽證會:據CNBC報道,此前消息,美國參議院銀行委員會計劃于7月16日就Facebook的加密貨幣Libra舉行聽證會。盡管參議院銀行委員會發言人的表示目前還沒有宣布聽證人員名單。但據知情人士透露,Libra項目負責人David Marcus預計將會出席聽證會。目前仍沒有扎克伯格是否將會出席的確切信息。[2019/6/20]

接下來我們看看確定性。所謂確定性,就是在同一個狀態Sn-1下,大家拿著同樣一筆交易,不依賴任何第三方信息獨立執行,執行的結果完全一致。這一點僅就純粹的從交易到statesdb的處理來說,區塊鏈和數據庫是完全一致的,大家都能保證確定性。然而,如果某個區塊鏈要支持交易中攜帶額外信息,這些信息觸發某些鏈上部署好的代碼的執行,那么,我們就得注意代碼本身需要具備確定性。所謂確定性,無非是:

代碼中不要使用不確定的隨機數生成器——比如使用計算機的時鐘作為種子生成隨機數,這就是不確定的。因為交易在被執行的那一刻,我們無法保證所有參與者的時鐘是精確同步的。

代碼避免使用多線程。多線程引發的racecondition具有不確定性。

不要使用系統時鐘。不解釋。

不要使用未初始化的內存。鬼知道上面是陳冠希還是諸子百家。

不要使用浮點數——這個很奇葩,因為不同的CPUarch,編譯器,甚至不同CPU型號間,由于支持的浮點數指令集不同,會導致結果不同。

動態 | 紐交所Arca尋求變更規則以列出比特幣和美國國債支持的ETF:據Coindesk報道,紐約證券交易所Arca已正式向美國證券交易委員會(SEC)申請更改規則,允許其列出擬議的比特幣投資信托。根據該交易所周一晚些時候提交的文件,由Wilshire Phoenix基金管理的“美國比特幣和國庫投資信托基金”將專門投資比特幣和短期美國國債。該文件稱,Coinbase的托管部門將擔任該基金中比特幣的托管人。通過與Coinbase合作,該信托基金獲得了高達2億美元的保險,以防止冷熱錢包被盜竊。這種投資工具獨立于Arca和Bitwise正尋求SEC批準上市的另一項比特幣ETF提案。[2019/5/21]

不要使用編程語言的可能有隨機行為的數據結構。比如遍歷一個map

基本上避免了這些,代碼就具備了確定性,可以在區塊鏈上執行。那么,為什么數據庫中的存儲過程可以允許沒有確定性的代碼的執行?比如,一個存儲過程里可以使用當前時間插入一條記錄?我們如果再回歸本源,從「交易」的角度看待問題,可以發現,存儲過程類似于“off-chain”執行的代碼,它雖然植根于數據庫之中,但其實是「交易」的源頭,存儲過程的執行產生真正的交易,也就是WAL記錄,然后同步給其它節點。所以存儲過程可以non-deterministic,因為其產生的WAL記錄已經是deterministic的——添加一條帶當前時間的記錄這件事情,在master執行時,已經將取「當前時間」這個動作完成并得到一個確定的值,攜帶于WAL之中。這跟區塊鏈的smartcontract的概念有本質的區別,這也是為什么存儲過程可以不必具備確定性,而“on-chain”執行的smartcontract需要確定性。從這個角度來講,數據庫系統也是一個弱化的區塊鏈系統。

既然區塊鏈和數據庫存儲的對象都是數據,那么,提過了數據的完整性和確定性,接下來就是數據的一致性。區塊鏈顯然是最終一致性的典范——網絡越大,參與的節點越多,區塊的擴散就越慢,任何時刻在不同的節點上讀取狀態就很大幾率出現不一致的情況。然而,只要節點能同步到最新的區塊,整個網絡的狀態是收斂的,最終大家能夠得到一個一致的狀態數據。其實,按照這個道理,所有使用WAL,CQRS思想的分布式系統,其數據的狀態都是最終一致的——這似乎和我們對經典數據庫強一致性的印象不匹配。然而,如果我們把視角拉到數據庫內部,可以發現,強一致性只不過是最終一致性之上添加了一些條件,是個特例。如果我們假定一個區塊鏈滿足下面的條件:

任何節點收到新的區塊,必須在交易執行完成,寫入statesdb中之后,給礦工節點發送確認

礦工節點在收到所有確認之后廣播給網絡中所有節點這個區塊大家已經commit成功

在一個區塊沒有收到礦工節點的上述廣播之前,客戶端發送來的查詢進入隊列排隊

那么在外界看來,它也是強一致性。當然,第三點有些過于苛刻,一般的數據庫實現都會采用MVCC,讓每個client看到當前狀態的一個snapshot,因而存在一個很小的窗口,大家看到的數據是不一致的。如果較真,MVCC不算強一致性,當然沒人會這么認為。

通過上面的規則,數據庫可以通過犧牲一些性能來打造對外而言的強一致性。但有時候,為了一些崇(wo)高(chuo)的理想,數據庫系統也可以打破這些規則來號稱更高的性能。mongdb可以在cluster的環境下,寫操作不需要節點確認即可返回,于是有了美其名曰的,如薛定諤的貓一般的「弱一致性」。

一個區塊鏈網絡理論上可以通過上述規則把自己營造成對外強一致性的感覺,但這實際上沒有可操作性。能力越大,責任越大網絡越大,延遲越大,所以,實際可操作的強一致性只能發生在節點數量很少,且節點都在同一個datacenter的環境下。從數據一致性的角度來說,數據庫也是區塊鏈在特殊場景下的一個特例。

最后說說性能。性能這事,和網絡規模成反比。兩個主要原因:1)節點越多,達成共識的難度就越大。2)節點越多,「交易」在網絡中傳播所需的時間就越長。那想要達到宇宙無敵的TPS怎么辦?其實不難——既然數據庫是一個弱分布式環境下的特例,那么,咱就把區塊鏈往數據庫的方向退化就好。PoW說「王侯將相,寧有種乎」,讓全網參與鐵王座的競爭,PoS就讓「一小部分人先富起來」,DPoS再進一步,「讓領導先走」,也許不久的將來,有人會則憋出終極大招,全網就一個九五之尊,把數據庫里能用的招數,replicaSet,Sharding等等統統用上,再使用兵法中不戰而屈人之兵之術:「今治水軍八十萬眾,方與將軍會獵于吳」…于是,可以名正言順地搶下性能的桂冠。

只不過…就像非誠勿擾里車曉問葛優:那事兒,就那么有意思嗎?

ArcBlockTechnicalLearningSeries第七期

Tendermint:ConsensusMadeEasy

下周三,11月7日下周三上午8時,由ArcBlock研發副總裁陳天授課,介紹Tendermint及其架構,共識算法如何工作,以及如何復制應用程序數據。

主講

陳天

ArcBlock研發副總裁

●前舊金山創業公司TubiTV研發副總裁,比圖科技(TubiTV中國全資子公司)總經理,創建中國團隊,并領導TubiTV研發團隊在過去兩年半時間幫助業務成長數十倍

●前JuniperNetworksTechLead&Sr.StaffEngineer

●2011-2013曾在北京創立在線旅游創業公司途客圈,獲創新工場和金沙江投資,在結束途客圈的創業生涯后,將創業經歷撰寫成《途客圈創業記》一書,由人郵出版社出版。

●技術愛好者,涉獵網絡安全,云計算,分布式系統和區塊鏈。主力語言:elixir,nodejs和python。github:tyrchen。

●公眾號「程序人生」(programmer_life)作者,知乎專欄「迷思」作者。自2014年以來,撰寫技術文章近四百篇,很多文章被知乎日報推薦。

報名聽課,登錄官網注冊:

https://hack.arcblock.io/learning/

或登陸掘金注冊:

https://juejin.im/events/all

或掃描二維碼注冊:

ArcBlock課堂①|IntrotoGraphQLandAbsinthe

ArcBlock課堂②|IntrotoEthereumSmartContract

ArcBlock課堂③|IntrotoAWSDataPipelineServices

ArcBlock課堂④|IntrotoAWSAthena

ArcBlock課堂⑤|WhatisAWSKinesis

ArcBlock課堂⑥|多步驗證那些事

ArcBlock課堂⑦|IntrotoCQRSandCommanded

Tags:區塊鏈ARC比特幣LOC區塊鏈存證怎么弄Search Engine超級比特幣還有價值嗎blockchain平臺交易

Polygon
K網國際站關于AAC、BTM恢復充提服務的公告_NCE

尊敬的用戶: AAC官方與Bytom官方系統升級工作已完成,K網國際站將于新加坡時間2018年11月6日恢復AAC與BTM的充值和提幣服務,暫停期間給您帶來的不便.

1900/1/1 0:00:00
IDAX開放XRP充提、交易公告_ETH

親愛的用戶:?? ??IDAX已上線XRP。開通XRP/ETH交易,立即前往。 規則說明: ???1、關于XRP ???2、費率說明 DigiDaigaku #1632以200 ETH的價格成交.

1900/1/1 0:00:00
MEDIBIT交易有好禮,100,000,000糖果大派送_MEDI

活動時間:11月12日13:00:00-11月29日12:00:00活動獎勵:1億MEDIBIT 活動規則: 1活動一:首單獎勵 活動期間,完成首筆MEDIBIT買入交易且交易量不低于150.

1900/1/1 0:00:00
波場TRON(TRX)已經登陸Trust Wallet錢包_RON

波場TRON|社區存儲渠道TrustWallet是適用于ios和Android設備的獨立應用程序,允許用戶管理其加密貨幣并與去中心化應用程序(包括DEX)進行交互.

1900/1/1 0:00:00
[11-14]關于“華爾街之狼”數字貨幣交易大賽IX特別戰用戶交易模式的公告_USD

親愛的社區成員:?IX.com交易所攜手全球首家數字資產投資集體智慧平臺CryptoStrategies共同組織“華爾街之狼”數字貨幣交易大賽IX特別戰已于2018年11月12日正式上線.

1900/1/1 0:00:00
DT薪期三空投獎勵公告(10.22-10.28)_DRAG

DT薪期三空投獎勵公告 2018-10-31 DragonEx——更便捷的C2C法幣充提Telegram:https://t.me/Dragonex_io(CN)https://t.

1900/1/1 0:00:00
ads