區(qū)塊鏈模塊怎樣裝入pos機(jī)
1、區(qū)塊鏈要什么技術(shù)開發(fā)
區(qū)塊鏈開發(fā)需要掌握以下技術(shù):
數(shù)據(jù)結(jié)構(gòu):區(qū)塊鏈的核心數(shù)據(jù)結(jié)構(gòu)是區(qū)塊,開發(fā)者需要掌握數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)和實(shí)現(xiàn)。
哈希算法:哈希算法是區(qū)塊鏈技術(shù)中的重要組成部分,用于生成區(qū)塊的哈希值,保證區(qū)塊數(shù)據(jù)的不可篡改性。
密碼學(xué)算法:密碼學(xué)算法用于保證區(qū)塊鏈技術(shù)的安全性,包括數(shù)字簽名、對(duì)稱加密和非對(duì)稱加密等算法。
P2P網(wǎng)絡(luò):區(qū)塊鏈?zhǔn)且环N去中心化的分布式系統(tǒng),需要建立P2P網(wǎng)絡(luò),實(shí)現(xiàn)節(jié)點(diǎn)之間的通信和數(shù)據(jù)共享。
共識(shí)機(jī)制:區(qū)塊鏈需要采用一種共識(shí)機(jī)制來解決分布式系統(tǒng)中的數(shù)據(jù)一致性問題,包括PoW、PoS、DPoS等機(jī)制。
智能合約:智能合約是區(qū)塊鏈應(yīng)用的重要組成部分,需要掌握智能合約的設(shè)計(jì)和開發(fā)。
前端技術(shù):區(qū)塊鏈應(yīng)用需要與用戶進(jìn)行交互,需要掌握Web前端技術(shù),如HTML、CSS、JavaScript等。
數(shù)據(jù)庫技術(shù):區(qū)塊鏈的數(shù)據(jù)存儲(chǔ)和管理需要掌握數(shù)據(jù)庫技術(shù),如MySQL、MongoDB等。
以上技術(shù)是區(qū)塊鏈開發(fā)的核心技術(shù),開發(fā)者需要綜合掌握以上技術(shù)才能進(jìn)行區(qū)塊鏈應(yīng)用的開發(fā)和實(shí)現(xiàn)。
區(qū)塊鏈要什么技術(shù)開發(fā):一、區(qū)塊鏈理論:區(qū)塊鏈開發(fā)者要對(duì)區(qū)塊鏈的理論知識(shí)具備熟悉的掌握能力,這是作為一名區(qū)塊鏈開發(fā)者最基本的要求。在里面的內(nèi)容包括了區(qū)塊鏈網(wǎng)絡(luò)架構(gòu)、去中心化等相關(guān)應(yīng)用技術(shù)。拓展技術(shù)理論是對(duì)以太坊開發(fā)的掌握。
二、智能合約:智能合約是需要區(qū)塊鏈開發(fā)者用區(qū)塊鏈編程語言寫出來的一串代碼,根據(jù)不同場景構(gòu)思邏輯后開發(fā)出來的信任機(jī)制,旨在消除第三方的介入,創(chuàng)造出高效、高信任的區(qū)塊鏈網(wǎng)絡(luò)。區(qū)塊鏈開發(fā)者要實(shí)現(xiàn)這串代碼自動(dòng)執(zhí)行,且是不可逆的操作效果。
三、密碼學(xué):區(qū)塊鏈應(yīng)用場景很多都是具備高加密性的,點(diǎn)對(duì)點(diǎn)的加密模式是密碼學(xué)的特點(diǎn)。區(qū)塊鏈開發(fā)者通過研究密碼學(xué),了解到錢包、密鑰、廣泛的加密和解密技術(shù)等加密概念
四、分布式架構(gòu):區(qū)塊鏈開發(fā)人者必須懂得分布式架構(gòu)和網(wǎng)絡(luò)的功能。去中心化網(wǎng)絡(luò)是區(qū)塊鏈架構(gòu)的基礎(chǔ),在區(qū)塊鏈網(wǎng)絡(luò)中信息的傳遞要遵循去中心化的方式,這樣每個(gè)人才能享受到同等的網(wǎng)絡(luò)權(quán)益。
2、區(qū)塊鏈技術(shù)概念
區(qū)塊鏈技術(shù)概念
區(qū)塊鏈技術(shù)概念,現(xiàn)如今,區(qū)塊鏈已經(jīng)成為大部分人關(guān)注的領(lǐng)域,很多企業(yè)也早已深入其中研究該技術(shù)情況,但是還有人對(duì)于它不是很了解,下面我分享一篇關(guān)于區(qū)塊鏈技術(shù)概念的相關(guān)信息。
區(qū)塊鏈技術(shù)概念1區(qū)塊鏈的基本概念和工作原理
1、基本概念
區(qū)塊鏈?zhǔn)欠植际綌?shù)據(jù)存儲(chǔ)、點(diǎn)對(duì)點(diǎn)傳輸、共識(shí)機(jī)制、加密算法等計(jì)算機(jī)技術(shù)的新型應(yīng)用模式。所謂共識(shí)機(jī)制是區(qū)塊鏈系統(tǒng)中實(shí)現(xiàn)不同節(jié)點(diǎn)之間建立信任、獲取權(quán)益的數(shù)學(xué)算法。
區(qū)塊鏈Blockchain、是比特幣的一個(gè)重要概念,它本質(zhì)上是一個(gè)去中心化的數(shù)據(jù)庫,同時(shí)作為比特幣的底層技術(shù)。區(qū)塊鏈?zhǔn)且淮褂妹艽a學(xué)方法相關(guān)聯(lián)產(chǎn)生的數(shù)據(jù)塊,每一個(gè)數(shù)據(jù)塊中包含了一次比特幣網(wǎng)絡(luò)交易的信息,用于驗(yàn)證其信息的有效性防偽、和生成下一個(gè)區(qū)塊。
狹義來講,區(qū)塊鏈?zhǔn)且环N按照時(shí)間順序?qū)?shù)據(jù)區(qū)塊以順序相連的方式組合成的一種鏈?zhǔn)綌?shù)據(jù)結(jié)構(gòu), 并以密碼學(xué)方式保證的不可篡改和不可偽造的分布式賬本。
廣義來講,區(qū)塊鏈技術(shù)是利用塊鏈?zhǔn)綌?shù)據(jù)結(jié)構(gòu)來驗(yàn)證與存儲(chǔ)數(shù)據(jù)、利用分布式節(jié)點(diǎn)共識(shí)算法來生成和更新數(shù)據(jù)、利用密碼學(xué)的方式保證數(shù)據(jù)傳輸和訪問的安全、利用由自動(dòng)化腳本代碼組成的智能合約來編程和操作數(shù)據(jù)的一種全新的分布式基礎(chǔ)架構(gòu)與計(jì)算方式。
2、工作原理
區(qū)塊鏈系統(tǒng)由數(shù)據(jù)層、網(wǎng)絡(luò)層、共識(shí)層、激勵(lì)層、合約層和應(yīng)用層組成。 其中,數(shù)據(jù)層封裝了底層數(shù)據(jù)區(qū)塊以及相關(guān)的數(shù)據(jù)加密和時(shí)間戳等基礎(chǔ)數(shù)據(jù)和基本算法;網(wǎng)絡(luò)層則包括分布式組網(wǎng)機(jī)制、數(shù)據(jù)傳播機(jī)制和數(shù)據(jù)驗(yàn)證機(jī)制等;共識(shí)層主要封裝網(wǎng)絡(luò)節(jié)點(diǎn)的各類共識(shí)算法;激勵(lì)層將經(jīng)濟(jì)因素集成到區(qū)塊鏈技術(shù)體系中來,主要包括經(jīng)濟(jì)激勵(lì)的發(fā)行機(jī)制和分配機(jī)制等;合約層主要封裝各類腳本、算法和智能合約,是區(qū)塊鏈可編程特性的基礎(chǔ);應(yīng)用層則封裝了區(qū)塊鏈的各種應(yīng)用場景和案例。該模型中,基于時(shí)間戳的鏈?zhǔn)絽^(qū)塊結(jié)構(gòu)、分布式節(jié)點(diǎn)的共識(shí)機(jī)制、基于共識(shí)算力的經(jīng)濟(jì)激勵(lì)和靈活可編程的智能合約是區(qū)塊鏈技術(shù)最具代表性的創(chuàng)新點(diǎn)。
區(qū)塊鏈主要解決的交易的信任和安全問題,因此它針對(duì)這個(gè)問題提出了四個(gè)技術(shù)創(chuàng)新:
1、分布式賬本,就是交易記賬由分布在不同地方的多個(gè)節(jié)點(diǎn)共同完成,而且每一個(gè)節(jié)點(diǎn)都記錄的是完整的賬目,因此它們都可以參與監(jiān)督交易合法性,同時(shí)也可以共同為其作證。
跟傳統(tǒng)的分布式存儲(chǔ)有所不同,區(qū)塊鏈的分布式存儲(chǔ)的獨(dú)特性主要體現(xiàn)在兩個(gè)方面:一是區(qū)塊鏈每個(gè)節(jié)點(diǎn)都按照塊鏈?zhǔn)浇Y(jié)構(gòu)存儲(chǔ)完整的數(shù)據(jù),傳統(tǒng)分布式存儲(chǔ)一般是將數(shù)據(jù)按照一定的規(guī)則分成多份進(jìn)行存儲(chǔ)。二是區(qū)塊鏈每個(gè)節(jié)點(diǎn)存儲(chǔ)都是獨(dú)立的、地位等同的,依靠共識(shí)機(jī)制保證存儲(chǔ)的一致性,而傳統(tǒng)分布式存儲(chǔ)一般是通過中心節(jié)點(diǎn)往其他備份節(jié)點(diǎn)同步數(shù)據(jù)。 [8]
沒有任何一個(gè)節(jié)點(diǎn)可以單獨(dú)記錄賬本數(shù)據(jù),從而避免了單一記賬人被控制或者被賄賂而記假賬的可能性。也由于記賬節(jié)點(diǎn)足夠多,理論上講除非所有的節(jié)點(diǎn)被破壞,否則賬目就不會(huì)丟失,從而保證了賬目數(shù)據(jù)的安全性。
2、非對(duì)稱加密和授權(quán)技術(shù),存儲(chǔ)在區(qū)塊鏈上的交易信息是公開的,但是賬戶身份信息是高度加密的,只有在數(shù)據(jù)擁有者授權(quán)的情況下才能訪問到,從而保證了數(shù)據(jù)的安全和個(gè)人的隱私。
3、共識(shí)機(jī)制,就是所有記賬節(jié)點(diǎn)之間怎么達(dá)成共識(shí),去認(rèn)定一個(gè)記錄的有效性,這既是認(rèn)定的手段,也是防止篡改的手段。區(qū)塊鏈提出了四種不同的共識(shí)機(jī)制,適用于不同的應(yīng)用場景,在效率和安全性之間取得平衡。
區(qū)塊鏈的共識(shí)機(jī)制具備“少數(shù)服從多數(shù)”以及“人人平等”的特點(diǎn),其中“少數(shù)服從多數(shù)”并不完全指節(jié)點(diǎn)個(gè)數(shù),也可以是計(jì)算能力、股權(quán)數(shù)或者其他的計(jì)算機(jī)可以比較的特征量。“人人平等”是當(dāng)節(jié)點(diǎn)滿足條件時(shí),所有節(jié)點(diǎn)都有權(quán)優(yōu)先提出共識(shí)結(jié)果、直接被其他節(jié)點(diǎn)認(rèn)同后并最后有可能成為最終共識(shí)結(jié)果。以比特幣為例,采用的是工作量證明,只有在控制了全網(wǎng)超過51%的記賬節(jié)點(diǎn)的情況下,才有可能偽造出一條不存在的記錄。當(dāng)加入?yún)^(qū)塊鏈的節(jié)點(diǎn)足夠多的時(shí)候,這基本上不可能,從而杜絕了造假的可能.
4、智能合約,智能合約是基于這些可信的不可篡改的數(shù)據(jù),可以自動(dòng)化的執(zhí)行一些預(yù)先定義好的規(guī)則和條款。以保險(xiǎn)為例,如果說每個(gè)人的信息包括醫(yī)療信息和風(fēng)險(xiǎn)發(fā)生的信息、都是真實(shí)可信的,那就很容易的在一些標(biāo)準(zhǔn)化的保險(xiǎn)產(chǎn)品中,去進(jìn)行自動(dòng)化的理賠.
3、其它
互聯(lián)網(wǎng)交換的是信息,區(qū)塊鏈交換的是價(jià)值。人類歷史和互聯(lián)網(wǎng)歷史可以用八個(gè)字理解:分久必合合久必分,到了分久必合的時(shí)代,網(wǎng)絡(luò)信息全部散在互聯(lián)網(wǎng)上面,大家要挖掘信息非常不容易,這時(shí)會(huì)出現(xiàn)像谷歌和臉 書等的平臺(tái),它做的唯一的事情就是把我們所有的信息重新組合了一下。互聯(lián)網(wǎng)時(shí)代壟斷巨頭們重組的就是信息,并不是產(chǎn)生自己的信息,產(chǎn)生的信息完全是我們個(gè)人。一旦信息重組,就會(huì)出現(xiàn)一個(gè)新的壟斷巨人,所以就到了分久必合的時(shí)代。現(xiàn)在由于區(qū)塊鏈技術(shù)產(chǎn)生又到了合久必分時(shí)代,又是新的多中心化,新的多中心化之后賦能產(chǎn)生新的價(jià)值,這些數(shù)據(jù)會(huì)在我們自己的手上,個(gè)人數(shù)據(jù)產(chǎn)生價(jià)值是歸自己所有,這是這個(gè)時(shí)代最最激動(dòng)人心的時(shí)代。
區(qū)塊鏈的價(jià)值有哪些?低成本建立信任的機(jī)制,確立數(shù)權(quán),解決數(shù)據(jù)的.產(chǎn)權(quán)。
目前區(qū)塊鏈技術(shù)不斷發(fā)展,包括現(xiàn)在的單鏈向多鏈發(fā)展,而且技術(shù)能夠在進(jìn)一步擴(kuò)展,我想未來還是可能會(huì)出現(xiàn),特別是在交易等方面出現(xiàn)顛覆性的,特別是對(duì)現(xiàn)有產(chǎn)業(yè)的很多顛覆性的場景。
區(qū)塊鏈的本質(zhì)是在不可信的網(wǎng)絡(luò)建立可信的信息交換。
一帶一路+一鏈。區(qū)塊鏈更大的不是制造信任,而是讓信任產(chǎn)生無損的傳遞,整個(gè)降低社會(huì)的摩擦成本,從而提高整個(gè)效益。
現(xiàn)在區(qū)塊鏈本身還是初始階段,所以包括區(qū)塊鏈的信息傳遞、加密,這個(gè)過程中出現(xiàn)量子加密和其他加密,實(shí)際上對(duì)區(qū)塊鏈本身所采用的加密算法攻擊現(xiàn)象也時(shí)有發(fā)生。包括區(qū)塊鏈也是作為一種資產(chǎn)的認(rèn)定,數(shù)字資產(chǎn)的一個(gè)認(rèn)定,但是現(xiàn)在我們很多都是用密碼算法,或者是作為我們來解密的鑰匙,但是如果密碼忘記了,很可能你現(xiàn)在的資產(chǎn)就丟掉了,你不能夠在得到你原來的這些資產(chǎn),所以在資產(chǎn)管理,包括信息傳遞和一些安全這些方面,應(yīng)該說都還是存在著一些隱患。當(dāng)然那么從技術(shù)角度,現(xiàn)在我們區(qū)塊鏈本身處理的速度,或者說本身的擴(kuò)展性,因?yàn)閺墓ぷ鳈C(jī)理的角度來看,是要把整個(gè)賬本要復(fù)制給所有的參與人員,所以在區(qū)塊鏈本身的運(yùn)作效率和擴(kuò)展性方面還是比較受限的。這些我們覺得都還是需要進(jìn)一步在技術(shù)方面有進(jìn)一步的發(fā)展。
區(qū)塊鏈平臺(tái)這些底層技術(shù),又形成包括區(qū)塊鏈錢包、區(qū)塊鏈瀏覽器、節(jié)點(diǎn)競選、礦機(jī)、礦池、開發(fā)組件、開發(fā)模塊、技術(shù)社區(qū)及項(xiàng)目社群等一系列的生態(tài)系統(tǒng),這些生態(tài)系統(tǒng)的完善程度直接決定著區(qū)塊鏈底層平臺(tái)的使用效率和效果。
4、蒙代爾的不可能三角
去中心化、高效、安全,不可能實(shí)現(xiàn)三者全部同時(shí)達(dá)到極致。
區(qū)塊鏈技術(shù)概念2區(qū)塊鏈的本質(zhì)是一種分布式記賬技術(shù),與之相對(duì)的是中心式記賬技術(shù),中心式記賬技術(shù)在我們目前的生活中廣泛存在。區(qū)塊鏈?zhǔn)欠植际綌?shù)據(jù)存儲(chǔ)、點(diǎn)對(duì)點(diǎn)傳輸、共識(shí)機(jī)制、加密算法等計(jì)算機(jī)技術(shù)的新型應(yīng)用模式。
區(qū)塊鏈Blockchain、,是比特幣的一個(gè)重要概念,它本質(zhì)上是一個(gè)去中心化的數(shù)據(jù)庫,同時(shí)作為比特幣的底層技術(shù),是一串使用密碼學(xué)方法相關(guān)聯(lián)產(chǎn)生的數(shù)據(jù)塊,每一個(gè)數(shù)據(jù)塊中包含了一批次比特幣網(wǎng)絡(luò)交易的信息,用于驗(yàn)證e69da5e887aa7a6431333431343061其信息的有效性防偽、和生成下一個(gè)區(qū)塊。
狹義來講,區(qū)塊鏈?zhǔn)且环N按照時(shí)間順序?qū)?shù)據(jù)區(qū)塊以順序相連的方式組合成的一種鏈?zhǔn)綌?shù)據(jù)結(jié)構(gòu), 并以密碼學(xué)方式保證的不可篡改和不可偽造的分布式賬本。
廣義來講,區(qū)塊鏈技術(shù)是利用塊鏈?zhǔn)綌?shù)據(jù)結(jié)構(gòu)來驗(yàn)證與存儲(chǔ)數(shù)據(jù)、利用分布式節(jié)點(diǎn)共識(shí)算法來生成和更新數(shù)據(jù)、利用密碼學(xué)的方式保證數(shù)據(jù)傳輸和訪問的安全、利用由自動(dòng)化腳本代碼組成的智能合約來編程和操作數(shù)據(jù)的一種全新的分布式基礎(chǔ)架構(gòu)與計(jì)算方式。
區(qū)塊鏈技術(shù)通俗的理解就是:把“物”的前、后、左、右區(qū)塊用一種技術(shù)連接成一個(gè)鏈條,但每個(gè)區(qū)塊的原始數(shù)據(jù)不可篡改,是一種物聯(lián)網(wǎng)范疇的、可以讓參與者信任的“各個(gè)模塊鏈動(dòng)”的技術(shù)。區(qū)塊鏈技術(shù)的應(yīng)用,離不開互聯(lián)道網(wǎng),也離不開物聯(lián)網(wǎng),是建立在二者融合互動(dòng)基礎(chǔ)上的、但又讓參與者各自保持獨(dú)回立的去中心化、、并共同擁有這套價(jià)值鏈共建共享、的技術(shù)。
區(qū)塊鏈的特征:去中心化、開放性、自治性、信息不可篡改,匿名性。
區(qū)塊鏈?zhǔn)且粋€(gè)能夠傳遞價(jià)值的網(wǎng)絡(luò),對(duì)可以傳遞價(jià)值的網(wǎng)絡(luò)的需求是推動(dòng)區(qū)塊鏈技術(shù)產(chǎn)生的重要原因。在對(duì)于保護(hù)帶有所有權(quán)或者其他價(jià)值的信息需求的推動(dòng)下,區(qū)塊鏈出現(xiàn)了。區(qū)塊鏈通過公私鑰密碼學(xué)、分布式存儲(chǔ)等技術(shù)手段,一方面保證了帶有價(jià)值的信息的高效傳遞,另一方面保證了這些信息在傳遞的過程中不會(huì)被輕易的復(fù)制篡改。
從區(qū)塊鏈誕生的必然性來理解區(qū)塊鏈的內(nèi)涵,區(qū)塊鏈?zhǔn)墙鉀Q了中心化記賬缺點(diǎn)、解決了分布式一致性問題的分布式記賬技術(shù),同時(shí)也是連接互聯(lián)網(wǎng)升級(jí)為保證帶有價(jià)值的信息安全高效傳遞的價(jià)值網(wǎng)絡(luò)。
區(qū)塊鏈技術(shù)概念3區(qū)塊鏈: 區(qū)塊鏈就像是一個(gè)全球唯一的帳簿,或者說是數(shù)據(jù)庫,記錄了網(wǎng)絡(luò)中所有交易歷史。
以太坊虛擬機(jī)(EVM): 它讓你能在以太坊上寫出更強(qiáng)大的程序比特幣上也可以寫腳本程序、。它有時(shí)也用來指以太坊區(qū)塊鏈,負(fù)責(zé)執(zhí)行智能合約以及一切。
節(jié)點(diǎn):你可以運(yùn)行節(jié)點(diǎn),通過它讀寫以太坊區(qū)塊鏈,也即使用以太坊虛擬機(jī)。完全節(jié)點(diǎn)需要下載整個(gè)區(qū)塊鏈。輕節(jié)點(diǎn)仍在開發(fā)中。
礦工:挖礦,也就是處理區(qū)塊鏈上的區(qū)塊的節(jié)點(diǎn)。這個(gè)網(wǎng)頁可以看到當(dāng)前活躍的一部分以太坊礦工:stats.ethdev.com。
工作量證明:礦工們總是在競爭解決一些數(shù)學(xué)問題。第一個(gè)解出答案的(算出下一個(gè)區(qū)塊)將獲得以太幣作為獎(jiǎng)勵(lì)。然后所有節(jié)點(diǎn)都更新自己的區(qū)塊鏈。所有想要算出下一個(gè)區(qū)塊的礦工都有與其他節(jié)點(diǎn)保持同步,并且維護(hù)同一個(gè)區(qū)塊鏈的動(dòng)力,因此整個(gè)網(wǎng)絡(luò)總是能達(dá)成共識(shí)。(注意:以太坊正計(jì)劃轉(zhuǎn)向沒有礦工的權(quán)益證明系統(tǒng)(POS),不過那不在本文討論范圍之內(nèi)。)
以太幣:縮寫ETH。一種你可以購買和使用的真正的數(shù)字貨幣。這里是可以交易以太幣的其中一家交易所的走勢(shì)圖。在寫這篇文章的時(shí)候,1個(gè)以太幣價(jià)值65美分。
Gas:在以太坊上執(zhí)行程序以及保存數(shù)據(jù)都要消耗一定量的以太幣,Gas是以太幣轉(zhuǎn)換而成。這個(gè)機(jī)制用來保證效率。
DApp: 以太坊社區(qū)把基于智能合約的應(yīng)用稱為去中心化的應(yīng)用程序(Decentralized App)。DApp的目標(biāo)是(或者應(yīng)該是)讓你的智能合約有一個(gè)友好的界面,外加一些額外的東西,例如IPFS可以存儲(chǔ)和讀取數(shù)據(jù)的去中心化網(wǎng)絡(luò),不是出自以太坊團(tuán)隊(duì)但有類似的精神)。DApp可以跑在一臺(tái)能與以太坊節(jié)點(diǎn)交互的中心化服務(wù)器上,也可以跑在任意一個(gè)以太坊平等節(jié)點(diǎn)上。(花一分鐘思考一下:與一般的網(wǎng)站不同,DApp不能跑在普通的服務(wù)器上。他們需要提交交易到區(qū)塊鏈并且從區(qū)塊鏈而不是中心化數(shù)據(jù)庫讀取重要數(shù)據(jù)。相對(duì)于典型的用戶登錄系統(tǒng),用戶有可能被表示成一個(gè)錢包地址而其它用戶數(shù)據(jù)保存在本地。許多事情都會(huì)與目前的web應(yīng)用有不同架構(gòu)。)
以太坊客戶端,智能合約語言
編寫和部署智能合約并不要求你運(yùn)行一個(gè)以太坊節(jié)點(diǎn)。下面有列出基于瀏覽器的IDE和API。但如果是為了學(xué)習(xí)的話,還是應(yīng)該運(yùn)行一個(gè)以太坊節(jié)點(diǎn),以便理解其中的基本組件,何況運(yùn)行節(jié)點(diǎn)也不難。
運(yùn)行以太坊節(jié)點(diǎn)可用的客戶端
以太坊有許多不同語言的客戶端實(shí)現(xiàn)即多種與以太坊網(wǎng)絡(luò)交互的方法、,包括C++, Go, Python, Java, Haskell等等。為什么需要這么多實(shí)現(xiàn)?不同的實(shí)現(xiàn)能滿足不同的需求例如Haskell實(shí)現(xiàn)的目標(biāo)是可以被數(shù)學(xué)驗(yàn)證、,能使以太坊更加安全,能豐富整個(gè)生態(tài)系統(tǒng)。
在寫作本文時(shí),我使用的是Go語言實(shí)現(xiàn)的客戶端geth (go-ethereum),其他時(shí)候還會(huì)使用一個(gè)叫testrpc的工具, 它使用了Python客戶端pyethereum。后面的例子會(huì)用到這些工具。
關(guān)于挖礦:挖礦很有趣,有點(diǎn)像精心照料你的室內(nèi)盆栽,同時(shí)又是一種了解整個(gè)系統(tǒng)的方法。雖然以太幣現(xiàn)在的價(jià)格可能連電費(fèi)都補(bǔ)不齊,但以后誰知道呢。人們正在創(chuàng)造許多酷酷的DApp, 可能會(huì)讓以太坊越來越流行。
交互式控制臺(tái):客戶端運(yùn)行起來后,你就可以同步區(qū)塊鏈,建立錢包,收發(fā)以太幣了。使用geth的一種方式是通過Javascript控制臺(tái)。此外還可以使用類似cURL的命令通過JSON RPC來與客戶端交互。本文的目標(biāo)是帶大家過一邊DApp開發(fā)的流程,因此這塊就不多說了。但是我們應(yīng)該記住這些命令行工具是調(diào)試,配置節(jié)點(diǎn),以及使用錢包的利器。
在測試網(wǎng)絡(luò)運(yùn)行節(jié)點(diǎn): 如果你在正式網(wǎng)絡(luò)運(yùn)行g(shù)eth客戶端,下載整個(gè)區(qū)塊鏈與網(wǎng)絡(luò)同步會(huì)需要相當(dāng)時(shí)間。你可以通過比較節(jié)點(diǎn)日志中打印的最后一個(gè)塊號(hào)和stats.ethdev.com上列出的最新塊來確定是否已經(jīng)同步。) 另一個(gè)問題是在正式網(wǎng)絡(luò)上跑智能合約需要實(shí)實(shí)在在的以太幣。在測試網(wǎng)絡(luò)上運(yùn)行節(jié)點(diǎn)的話就沒有這個(gè)問題。此時(shí)也不需要同步整個(gè)區(qū)塊鏈,創(chuàng)建一個(gè)自己的私有鏈就勾了,對(duì)于開發(fā)來說更省時(shí)間。
Testrpc:用geth可以創(chuàng)建一個(gè)測試網(wǎng)絡(luò),另一種更快的創(chuàng)建測試網(wǎng)絡(luò)的方法是使用testrpc. Testrpc可以在啟動(dòng)時(shí)幫你創(chuàng)建一堆存有資金的測試賬戶。它的運(yùn)行速度也更快因此更適合開發(fā)和測試。你可以從testrpc起步,然后隨著合約慢慢成型,轉(zhuǎn)移到geth創(chuàng)建的測試網(wǎng)絡(luò)上 - 啟動(dòng)方法很簡單,只需要指定一個(gè)networkid:geth --networkid "12345"。這里是testrpc的代碼倉庫,下文我們還會(huì)再講到它。
接下來我們來談?wù)効捎玫木幊陶Z言,之后就可以開始真正的編程了。寫智能合約用的編程語言用Solidity就好。
要寫智能合約有好幾種語言可選:有點(diǎn)類似Javascript的Solidity, 文件擴(kuò)展名是.sol. 和Python接近的Serpent, 文件名以.se結(jié)尾。還有類似Lisp的LLL。Serpent曾經(jīng)流行過一段時(shí)間,但現(xiàn)在最流行而且最穩(wěn)定的要算是Solidity了,因此用Solidity就好。聽說你喜歡Python? 用Solidity。
solc編譯器: 用Solidity寫好智能合約之后,需要用solc來編譯。它是一個(gè)來自C++客戶端實(shí)現(xiàn)的組件又一次,不同的實(shí)現(xiàn)產(chǎn)生互補(bǔ)、,這里是安裝方法。如果你不想安裝solc也可以直接使用基于瀏覽器的編譯器,例如Solidity real-time compiler或者Cosmo。后文有關(guān)編程的部分會(huì)假設(shè)你安裝了solc。
web3.js API. 當(dāng)Solidity合約編譯好并且發(fā)送到網(wǎng)絡(luò)上之后,你可以使用以太坊的web3.js JavaScript API來調(diào)用它,構(gòu)建能與之交互的web應(yīng)用。
3、區(qū)塊鏈 --- 共識(shí)算法
PoW算法是一種防止分布式服務(wù)資源被濫用、拒絕服務(wù)攻擊的機(jī)制。它要求節(jié)點(diǎn)進(jìn)行適量消耗時(shí)間和資源的復(fù)雜運(yùn)算,并且其運(yùn)算結(jié)果能被其他節(jié)點(diǎn)快速驗(yàn)算,以耗用時(shí)間、能源做擔(dān)保,以確保服務(wù)與資源被真正的需求所使用。
PoW算法中最基本的技術(shù)原理是使用哈希算法。假設(shè)求哈希值Hash(r),若原始數(shù)據(jù)為r(raw),則運(yùn)算結(jié)果為R(Result)。
R = Hash(r)
哈希函數(shù)Hash()的特性是,對(duì)于任意輸入值r,得出結(jié)果R,并且無法從R反推回r。當(dāng)輸入的原始數(shù)據(jù)r變動(dòng)1比特時(shí),其結(jié)果R值完全改變。在比特幣的PoW算法中,引入算法難度d和隨機(jī)值n,得到以下公式:
Rd = Hash(r+n)
該公式要求在填入隨機(jī)值n的情況下,計(jì)算結(jié)果Rd的前d字節(jié)必須為0。由于哈希函數(shù)結(jié)果的未知性,每個(gè)礦工都要做大量運(yùn)算之后,才能得出正確結(jié)果,而算出結(jié)果廣播給全網(wǎng)之后,其他節(jié)點(diǎn)只需要進(jìn)行一次哈希運(yùn)算即可校驗(yàn)。PoW算法就是采用這種方式讓計(jì)算消耗資源,而校驗(yàn)僅需一次。
PoS算法要求節(jié)點(diǎn)驗(yàn)證者必須質(zhì)押一定的資金才有挖礦打包資格,并且區(qū)域鏈系統(tǒng)在選定打包節(jié)點(diǎn)時(shí)使用隨機(jī)的方式,當(dāng)節(jié)點(diǎn)質(zhì)押的資金越多時(shí),其被選定打包區(qū)塊的概率越大。
POS模式下,每個(gè)幣每天產(chǎn)生1幣齡,比如你持有100個(gè)幣,總共持有了30天,那么,此時(shí)你的幣齡就為3000。這個(gè)時(shí)候,如果你驗(yàn)證了一個(gè)POS區(qū)塊,你的幣齡就會(huì)被清空為0,同時(shí)從區(qū)塊中獲得相對(duì)應(yīng)的數(shù)字貨幣利息。
節(jié)點(diǎn)通過PoS算法出塊的過程如下:普通的節(jié)點(diǎn)要成為出塊節(jié)點(diǎn),首先要進(jìn)行資產(chǎn)的質(zhì)押,當(dāng)輪到自己出塊時(shí),打包區(qū)塊,然后向全網(wǎng)廣播,其他驗(yàn)證節(jié)點(diǎn)將會(huì)校驗(yàn)區(qū)塊的合法性。
DPoS算法和PoS算法相似,也采用股份和權(quán)益質(zhì)押。
但不同的是,DPoS算法采用委托質(zhì)押的方式,類似于用全民選舉代表的方式選出N個(gè)超級(jí)節(jié)點(diǎn)記賬出塊。
選民把自己的選票投給某個(gè)節(jié)點(diǎn),如果某個(gè)節(jié)點(diǎn)當(dāng)選記賬節(jié)點(diǎn),那么該記賬節(jié)點(diǎn)往往在獲取出塊獎(jiǎng)勵(lì)后,可以采用任意方式來回報(bào)自己的選民。
這N個(gè)記賬節(jié)點(diǎn)將輪流出塊,并且節(jié)點(diǎn)之間相互監(jiān)督,如果其作惡,那么會(huì)被扣除質(zhì)押金。
通過信任少量的誠信節(jié)點(diǎn),可以去除區(qū)塊簽名過程中不必要的步驟,提高了交易的速度。
拜占庭問題:
拜占庭是古代東羅馬帝國的首都,為了防御在每塊封地都駐扎一支由單個(gè)將軍帶領(lǐng)的軍隊(duì),將軍之間只能靠信差傳遞消息。在戰(zhàn)爭時(shí),所有將軍必須達(dá)成共識(shí),決定是否共同開戰(zhàn)。
但是,在軍隊(duì)內(nèi)可能有叛徒,這些人將影響將軍們達(dá)成共識(shí)。拜占庭將軍問題是指在已知有將軍是叛徒的情況下,剩余的將軍如何達(dá)成一致決策的問題。
BFT:
BFT即拜占庭容錯(cuò),拜占庭容錯(cuò)技術(shù)是一類分布式計(jì)算領(lǐng)域的容錯(cuò)技術(shù)。拜占庭假設(shè)是對(duì)現(xiàn)實(shí)世界的模型化,由于硬件錯(cuò)誤、網(wǎng)絡(luò)擁塞或中斷以及遭到惡意攻擊等原因,計(jì)算機(jī)和網(wǎng)絡(luò)可能出現(xiàn)不可預(yù)料的行為。拜占庭容錯(cuò)技術(shù)被設(shè)計(jì)用來處理這些異常行為,并滿足所要解決的問題的規(guī)范要求。
拜占庭容錯(cuò)系統(tǒng) :
發(fā)生故障的節(jié)點(diǎn)被稱為 拜占庭節(jié)點(diǎn) ,而正常的節(jié)點(diǎn)即為 非拜占庭節(jié)點(diǎn) 。
假設(shè)分布式系統(tǒng)擁有n臺(tái)節(jié)點(diǎn),并假設(shè)整個(gè)系統(tǒng)拜占庭節(jié)點(diǎn)不超過m臺(tái)(n ≥ 3m + 1),拜占庭容錯(cuò)系統(tǒng)需要滿足如下兩個(gè)條件:
另外,拜占庭容錯(cuò)系統(tǒng)需要達(dá)成如下兩個(gè)指標(biāo):
PBFT即實(shí)用拜占庭容錯(cuò)算法,解決了原始拜占庭容錯(cuò)算法效率不高的問題,算法的時(shí)間復(fù)雜度是O(n^2),使得在實(shí)際系統(tǒng)應(yīng)用中可以解決拜占庭容錯(cuò)問題
PBFT是一種狀態(tài)機(jī)副本復(fù)制算法,所有的副本在一個(gè)視圖(view)輪換的過程中操作,主節(jié)點(diǎn)通過視圖編號(hào)以及節(jié)點(diǎn)數(shù)集合來確定,即:主節(jié)點(diǎn) p = v mod |R|。v:視圖編號(hào),|R|節(jié)點(diǎn)個(gè)數(shù),p:主節(jié)點(diǎn)編號(hào)。
PBFT算法的共識(shí)過程如下:客戶端(Client)發(fā)起消息請(qǐng)求(request),并廣播轉(zhuǎn)發(fā)至每一個(gè)副本節(jié)點(diǎn)(Replica),由其中一個(gè)主節(jié)點(diǎn)(Leader)發(fā)起提案消息pre-prepare,并廣播。其他節(jié)點(diǎn)獲取原始消息,在校驗(yàn)完成后發(fā)送prepare消息。每個(gè)節(jié)點(diǎn)收到2f+1個(gè)prepare消息,即認(rèn)為已經(jīng)準(zhǔn)備完畢,并發(fā)送commit消息。當(dāng)節(jié)點(diǎn)收到2f+1個(gè)commit消息,客戶端收到f+1個(gè)相同的reply消息時(shí),說明客戶端發(fā)起的請(qǐng)求已經(jīng)達(dá)成全網(wǎng)共識(shí)。
具體流程如下 :
客戶端c向主節(jié)點(diǎn)p發(fā)送<REQUEST, o, t, c>請(qǐng)求。o: 請(qǐng)求的具體操作,t: 請(qǐng)求時(shí)客戶端追加的時(shí)間戳,c:客戶端標(biāo)識(shí)。REQUEST: 包含消息內(nèi)容m,以及消息摘要d(m)。客戶端對(duì)請(qǐng)求進(jìn)行簽名。
主節(jié)點(diǎn)收到客戶端的請(qǐng)求,需要進(jìn)行以下交驗(yàn):
a. 客戶端請(qǐng)求消息簽名是否正確。
非法請(qǐng)求丟棄。正確請(qǐng)求,分配一個(gè)編號(hào)n,編號(hào)n主要用于對(duì)客戶端的請(qǐng)求進(jìn)行排序。然后廣播一條<<PRE-PREPARE, v, n, d>, m>消息給其他副本節(jié)點(diǎn)。v:視圖編號(hào),d客戶端消息摘要,m消息內(nèi)容。<PRE-PREPARE, v, n, d>進(jìn)行主節(jié)點(diǎn)簽名。n是要在某一個(gè)范圍區(qū)間內(nèi)的[h, H],具體原因參見 垃圾回收 章節(jié)。
副本節(jié)點(diǎn)i收到主節(jié)點(diǎn)的PRE-PREPARE消息,需要進(jìn)行以下交驗(yàn):
a. 主節(jié)點(diǎn)PRE-PREPARE消息簽名是否正確。
b. 當(dāng)前副本節(jié)點(diǎn)是否已經(jīng)收到了一條在同一v下并且編號(hào)也是n,但是簽名不同的PRE-PREPARE信息。
c. d與m的摘要是否一致。
d. n是否在區(qū)間[h, H]內(nèi)。
非法請(qǐng)求丟棄。正確請(qǐng)求,副本節(jié)點(diǎn)i向其他節(jié)點(diǎn)包括主節(jié)點(diǎn)發(fā)送一條<PREPARE, v, n, d, i>消息, v, n, d, m與上述PRE-PREPARE消息內(nèi)容相同,i是當(dāng)前副本節(jié)點(diǎn)編號(hào)。<PREPARE, v, n, d, i>進(jìn)行副本節(jié)點(diǎn)i的簽名。記錄PRE-PREPARE和PREPARE消息到log中,用于View Change過程中恢復(fù)未完成的請(qǐng)求操作。
主節(jié)點(diǎn)和副本節(jié)點(diǎn)收到PREPARE消息,需要進(jìn)行以下交驗(yàn):
a. 副本節(jié)點(diǎn)PREPARE消息簽名是否正確。
b. 當(dāng)前副本節(jié)點(diǎn)是否已經(jīng)收到了同一視圖v下的n。
c. n是否在區(qū)間[h, H]內(nèi)。
d. d是否和當(dāng)前已收到PRE-PPREPARE中的d相同
非法請(qǐng)求丟棄。如果副本節(jié)點(diǎn)i收到了2f+1個(gè)驗(yàn)證通過的PREPARE消息,則向其他節(jié)點(diǎn)包括主節(jié)點(diǎn)發(fā)送一條<COMMIT, v, n, d, i>消息,v, n, d, i與上述PREPARE消息內(nèi)容相同。<COMMIT, v, n, d, i>進(jìn)行副本節(jié)點(diǎn)i的簽名。記錄COMMIT消息到日志中,用于View Change過程中恢復(fù)未完成的請(qǐng)求操作。記錄其他副本節(jié)點(diǎn)發(fā)送的PREPARE消息到log中。
主節(jié)點(diǎn)和副本節(jié)點(diǎn)收到COMMIT消息,需要進(jìn)行以下交驗(yàn):
a. 副本節(jié)點(diǎn)COMMIT消息簽名是否正確。
b. 當(dāng)前副本節(jié)點(diǎn)是否已經(jīng)收到了同一視圖v下的n。
c. d與m的摘要是否一致。
d. n是否在區(qū)間[h, H]內(nèi)。
非法請(qǐng)求丟棄。如果副本節(jié)點(diǎn)i收到了2f+1個(gè)驗(yàn)證通過的COMMIT消息,說明當(dāng)前網(wǎng)絡(luò)中的大部分節(jié)點(diǎn)已經(jīng)達(dá)成共識(shí),運(yùn)行客戶端的請(qǐng)求操作o,并返回<REPLY, v, t, c, i, r>給客戶端,r:是請(qǐng)求操作結(jié)果,客戶端如果收到f+1個(gè)相同的REPLY消息,說明客戶端發(fā)起的請(qǐng)求已經(jīng)達(dá)成全網(wǎng)共識(shí),否則客戶端需要判斷是否重新發(fā)送請(qǐng)求給主節(jié)點(diǎn)。記錄其他副本節(jié)點(diǎn)發(fā)送的COMMIT消息到log中。
如果主節(jié)點(diǎn)作惡,它可能會(huì)給不同的請(qǐng)求編上相同的序號(hào),或者不去分配序號(hào),或者讓相鄰的序號(hào)不連續(xù)。備份節(jié)點(diǎn)應(yīng)當(dāng)有職責(zé)來主動(dòng)檢查這些序號(hào)的合法性。
如果主節(jié)點(diǎn)掉線或者作惡不廣播客戶端的請(qǐng)求,客戶端設(shè)置超時(shí)機(jī)制,超時(shí)的話,向所有副本節(jié)點(diǎn)廣播請(qǐng)求消息。副本節(jié)點(diǎn)檢測出主節(jié)點(diǎn)作惡或者下線,發(fā)起View Change協(xié)議。
View Change協(xié)議 :
副本節(jié)點(diǎn)向其他節(jié)點(diǎn)廣播<VIEW-CHANGE, v+1, n, C , P , i>消息。n是最新的stable checkpoint的編號(hào), C 是 2f+1驗(yàn)證過的CheckPoint消息集合, P 是當(dāng)前副本節(jié)點(diǎn)未完成的請(qǐng)求的PRE-PREPARE和PREPARE消息集合。
當(dāng)主節(jié)點(diǎn)p = v + 1 mod |R|收到 2f 個(gè)有效的VIEW-CHANGE消息后,向其他節(jié)點(diǎn)廣播<NEW-VIEW, v+1, V , O >消息。 V 是有效的VIEW-CHANGE消息集合。 O 是主節(jié)點(diǎn)重新發(fā)起的未經(jīng)完成的PRE-PREPARE消息集合。PRE-PREPARE消息集合的選取規(guī)則:
副本節(jié)點(diǎn)收到主節(jié)點(diǎn)的NEW-VIEW消息,驗(yàn)證有效性,有效的話,進(jìn)入v+1狀態(tài),并且開始 O 中的PRE-PREPARE消息處理流程。
在上述算法流程中,為了確保在View Change的過程中,能夠恢復(fù)先前的請(qǐng)求,每一個(gè)副本節(jié)點(diǎn)都記錄一些消息到本地的log中,當(dāng)執(zhí)行請(qǐng)求后副本節(jié)點(diǎn)需要把之前該請(qǐng)求的記錄消息清除掉。
最簡單的做法是在Reply消息后,再執(zhí)行一次當(dāng)前狀態(tài)的共識(shí)同步,這樣做的成本比較高,因此可以在執(zhí)行完多條請(qǐng)求K(例如:100條)后執(zhí)行一次狀態(tài)同步。這個(gè)狀態(tài)同步消息就是CheckPoint消息。
副本節(jié)點(diǎn)i發(fā)送<CheckPoint, n, d, i>給其他節(jié)點(diǎn),n是當(dāng)前節(jié)點(diǎn)所保留的最后一個(gè)視圖請(qǐng)求編號(hào),d是對(duì)當(dāng)前狀態(tài)的一個(gè)摘要,該CheckPoint消息記錄到log中。如果副本節(jié)點(diǎn)i收到了2f+1個(gè)驗(yàn)證過的CheckPoint消息,則清除先前日志中的消息,并以n作為當(dāng)前一個(gè)stable checkpoint。
這是理想情況,實(shí)際上當(dāng)副本節(jié)點(diǎn)i向其他節(jié)點(diǎn)發(fā)出CheckPoint消息后,其他節(jié)點(diǎn)還沒有完成K條請(qǐng)求,所以不會(huì)立即對(duì)i的請(qǐng)求作出響應(yīng),它還會(huì)按照自己的節(jié)奏,向前行進(jìn),但此時(shí)發(fā)出的CheckPoint并未形成stable。
為了防止i的處理請(qǐng)求過快,設(shè)置一個(gè)上文提到的 高低水位區(qū)間[h, H] 來解決這個(gè)問題。低水位h等于上一個(gè)stable checkpoint的編號(hào),高水位H = h + L,其中L是我們指定的數(shù)值,等于checkpoint周期處理請(qǐng)求數(shù)K的整數(shù)倍,可以設(shè)置為L = 2K。當(dāng)副本節(jié)點(diǎn)i處理請(qǐng)求超過高水位H時(shí),此時(shí)就會(huì)停止腳步,等待stable checkpoint發(fā)生變化,再繼續(xù)前進(jìn)。
在區(qū)塊鏈場景中,一般適合于對(duì)強(qiáng)一致性有要求的私有鏈和聯(lián)盟鏈場景。例如,在IBM主導(dǎo)的區(qū)塊鏈超級(jí)賬本項(xiàng)目中,PBFT是一個(gè)可選的共識(shí)協(xié)議。在Hyperledger的Fabric項(xiàng)目中,共識(shí)模塊被設(shè)計(jì)成可插拔的模塊,支持像PBFT、Raft等共識(shí)算法。
Raft基于領(lǐng)導(dǎo)者驅(qū)動(dòng)的共識(shí)模型,其中將選舉一位杰出的領(lǐng)導(dǎo)者(Leader),而該Leader將完全負(fù)責(zé)管理集群,Leader負(fù)責(zé)管理Raft集群的所有節(jié)點(diǎn)之間的復(fù)制日志。
下圖中,將在啟動(dòng)過程中選擇集群的Leader(S1),并為來自客戶端的所有命令/請(qǐng)求提供服務(wù)。 Raft集群中的所有節(jié)點(diǎn)都維護(hù)一個(gè)分布式日志(復(fù)制日志)以存儲(chǔ)和提交由客戶端發(fā)出的命令(日志條目)。 Leader接受來自客戶端的日志條目,并在Raft集群中的所有關(guān)注者(S2,S3,S4,S5)之間復(fù)制它們。
在Raft集群中,需要滿足最少數(shù)量的節(jié)點(diǎn)才能提供預(yù)期的級(jí)別共識(shí)保證, 這也稱為法定人數(shù)。 在Raft集群中執(zhí)行操作所需的最少投票數(shù)為 (N / 2 +1) ,其中N是組中成員總數(shù),即 投票至少超過一半 ,這也就是為什么集群節(jié)點(diǎn)通常為奇數(shù)的原因。 因此,在上面的示例中,我們至少需要3個(gè)節(jié)點(diǎn)才能具有共識(shí)保證。
如果法定仲裁節(jié)點(diǎn)由于任何原因不可用,也就是投票沒有超過半數(shù),則此次協(xié)商沒有達(dá)成一致,并且無法提交新日志。
數(shù)據(jù)存儲(chǔ):Tidb/TiKV
日志:阿里巴巴的 DLedger
服務(wù)發(fā)現(xiàn):Consul& etcd
集群調(diào)度:HashiCorp Nomad
只能容納故障節(jié)點(diǎn)(CFT),不容納作惡節(jié)點(diǎn)
順序投票,只能串行apply,因此高并發(fā)場景下性能差
Raft通過解決圍繞Leader選舉的三個(gè)主要子問題,管理分布式日志和算法的安全性功能來解決分布式共識(shí)問題。
當(dāng)我們啟動(dòng)一個(gè)新的Raft集群或某個(gè)領(lǐng)導(dǎo)者不可用時(shí),將通過集群中所有成員節(jié)點(diǎn)之間協(xié)商來選舉一個(gè)新的領(lǐng)導(dǎo)者。 因此,在給定的實(shí)例中,Raft集群的節(jié)點(diǎn)可以處于以下任何狀態(tài): 追隨者(Follower),候選人(Candidate)或領(lǐng)導(dǎo)者(Leader)。
系統(tǒng)剛開始啟動(dòng)的時(shí)候,所有節(jié)點(diǎn)都是follower,在一段時(shí)間內(nèi)如果它們沒有收到Leader的心跳信號(hào),follower就會(huì)轉(zhuǎn)化為Candidate;
如果某個(gè)Candidate節(jié)點(diǎn)收到大多數(shù)節(jié)點(diǎn)的票,則這個(gè)Candidate就可以轉(zhuǎn)化為Leader,其余的Candidate節(jié)點(diǎn)都會(huì)回到Follower狀態(tài);
一旦一個(gè)Leader發(fā)現(xiàn)系統(tǒng)中存在一個(gè)Leader節(jié)點(diǎn)比自己擁有更高的任期(Term),它就會(huì)轉(zhuǎn)換為Follower。
Raft使用基于心跳的RPC機(jī)制來檢測何時(shí)開始新的選舉。 在正常期間, Leader 會(huì)定期向所有可用的 Follower 發(fā)送心跳消息(實(shí)際中可能把日志和心跳一起發(fā)過去)。 因此,其他節(jié)點(diǎn)以 Follower 狀態(tài)啟動(dòng),只要它從當(dāng)前 Leader 那里收到周期性的心跳,就一直保持在 Follower 狀態(tài)。
當(dāng) Follower 達(dá)到其超時(shí)時(shí)間時(shí),它將通過以下方式啟動(dòng)選舉程序:
根據(jù) Candidate 從集群中其他節(jié)點(diǎn)收到的響應(yīng),可以得出選舉的三個(gè)結(jié)果。
共識(shí)算法的實(shí)現(xiàn)一般是基于復(fù)制狀態(tài)機(jī)(Replicated state machines),何為 復(fù)制狀態(tài)機(jī) :
簡單來說: 相同的初識(shí)狀態(tài) + 相同的輸入 = 相同的結(jié)束狀態(tài) 。不同節(jié)點(diǎn)要以相同且確定性的函數(shù)來處理輸入,而不要引入一下不確定的值,比如本地時(shí)間等。使用replicated log是一個(gè)很不錯(cuò)的注意,log具有持久化、保序的特點(diǎn),是大多數(shù)分布式系統(tǒng)的基石。
有了Leader之后,客戶端所有并發(fā)的請(qǐng)求可以在Leader這邊形成一個(gè)有序的日志(狀態(tài))序列,以此來表示這些請(qǐng)求的先后處理順序。Leader然后將自己的日志序列發(fā)送Follower,保持整個(gè)系統(tǒng)的全局一致性。注意并不是強(qiáng)一致性,而是 最終一致性 。
日志由有序編號(hào)(log index)的日志條目組成。每個(gè)日志條目包含它被創(chuàng)建時(shí)的任期號(hào)(term),和日志中包含的數(shù)據(jù)組成,日志包含的數(shù)據(jù)可以為任何類型,從簡單類型到區(qū)塊鏈的區(qū)塊。每個(gè)日志條目可以用[ term, index, data]序列對(duì)表示,其中term表示任期, index表示索引號(hào),data表示日志數(shù)據(jù)。
Leader 嘗試在集群中的大多數(shù)節(jié)點(diǎn)上執(zhí)行復(fù)制命令。 如果復(fù)制成功,則將命令提交給集群,并將響應(yīng)發(fā)送回客戶端。類似兩階段提交(2PC),不過與2PC的區(qū)別在于,leader只需要超過一半節(jié)點(diǎn)同意(處于工作狀態(tài))即可。
leader 、 follower 都可能crash,那么 follower 維護(hù)的日志與 leader 相比可能出現(xiàn)以下情況
當(dāng)出現(xiàn)了leader與follower不一致的情況,leader強(qiáng)制follower復(fù)制自己的log, Leader會(huì)從后往前試 ,每次AppendEntries失敗后嘗試前一個(gè)日志條目(遞減nextIndex值), 直到成功找到每個(gè)Follower的日志一致位置點(diǎn)(基于上述的兩條保證),然后向后逐條覆蓋Followers在該位置之后的條目 。所以丟失的或者多出來的條目可能會(huì)持續(xù)多個(gè)任期。
要求候選人的日志至少與其他節(jié)點(diǎn)一樣最新。如果不是,則跟隨者節(jié)點(diǎn)將不投票給候選者。
意味著每個(gè)提交的條目都必須存在于這些服務(wù)器中的至少一個(gè)中。如果候選人的日志至少與該多數(shù)日志中的其他日志一樣最新,則它將保存所有已提交的條目,避免了日志回滾事件的發(fā)生。
即任一任期內(nèi)最多一個(gè)leader被選出。這一點(diǎn)非常重要,在一個(gè)復(fù)制集中任何時(shí)刻只能有一個(gè)leader。系統(tǒng)中同時(shí)有多余一個(gè)leader,被稱之為腦裂(brain split),這是非常嚴(yán)重的問題,會(huì)導(dǎo)致數(shù)據(jù)的覆蓋丟失。在raft中,兩點(diǎn)保證了這個(gè)屬性:
因此, 某一任期內(nèi)一定只有一個(gè)leader 。
當(dāng)集群中節(jié)點(diǎn)的狀態(tài)發(fā)生變化(集群配置發(fā)生變化)時(shí),系統(tǒng)容易受到系統(tǒng)故障。 因此,為防止這種情況,Raft使用了一種稱為兩階段的方法來更改集群成員身份。 因此,在這種方法中,集群在實(shí)現(xiàn)新的成員身份配置之前首先更改為中間狀態(tài)(稱為聯(lián)合共識(shí))。 聯(lián)合共識(shí)使系統(tǒng)即使在配置之間進(jìn)行轉(zhuǎn)換時(shí)也可用于響應(yīng)客戶端請(qǐng)求,它的主要目的是提升分布式系統(tǒng)的可用性。
4、如何利用區(qū)塊鏈發(fā)行我的數(shù)字資產(chǎn)?
假如我有個(gè)資產(chǎn),該怎樣在小蟻上注冊(cè)、發(fā)行呢?
首先要明確一點(diǎn),我們這個(gè)數(shù)字資產(chǎn),必須要和現(xiàn)實(shí)資產(chǎn)是有對(duì)應(yīng)關(guān)系的,能夠?qū)拥浆F(xiàn)實(shí)的金融世界。
傳統(tǒng)的銀行記錄了每個(gè)人的賬戶余額,在銀行里面存的一百塊錢,可以看到你賬戶上面一百元的余額,它到底是什么東西?這實(shí)際上并不是人民幣,這實(shí)際上是銀行發(fā)行的一種數(shù)字資產(chǎn)。
真正的人民幣是什么?真正的人民幣上面印有“中國人民銀行”的字,是真正的人民幣。你存進(jìn)去的時(shí)候,已經(jīng)交給商業(yè)銀行了,然后商業(yè)銀行上面記錄了,你增加了100元的余額,這個(gè)和你真正的人民幣是不是一樣呢?我只能說你可以去兌換,這個(gè)兌換實(shí)際上是銀行信用做保障的,一旦這家銀行倒閉,或者是銀行出問題了,這個(gè)是得不到保障的。
實(shí)際上你在銀行里面的存款不是人民幣本身,而是由銀行信用背書,能夠一比一兌換的數(shù)字資產(chǎn),這個(gè)資產(chǎn)是由銀行發(fā)行的,記錄在銀行的數(shù)據(jù)庫里面。
那可不可以記錄在區(qū)塊鏈上?只要在區(qū)塊鏈上公開地聲明,說你區(qū)塊鏈上的某種資產(chǎn),和我現(xiàn)實(shí)是可以兌換的。具體到底該怎么操作呢?首先,要有一個(gè)數(shù)字身份。
為什么?數(shù)字資產(chǎn)背后就是由某一個(gè)實(shí)體的身份,或者是他的信用做擔(dān)保,如果在鏈上不知道他實(shí)體的身份是誰的話,就沒有辦法做擔(dān)保。怎么做呢?很簡單,因?yàn)閰^(qū)塊鏈?zhǔn)且粋€(gè)密碼學(xué)系統(tǒng),可以跟我們現(xiàn)有的PKI體系,數(shù)字證書體系結(jié)合起來。
現(xiàn)在我們可以在CA機(jī)構(gòu)去申請(qǐng)ECC的證書,這個(gè)算法其實(shí)是一樣的,你區(qū)塊鏈上的地址對(duì)應(yīng)一個(gè)公鑰,這個(gè)公鑰對(duì)應(yīng)數(shù)字證書,這個(gè)數(shù)字證書是國家認(rèn)可的,在區(qū)塊鏈上只要公開這個(gè)數(shù)字證書就可以認(rèn)證了。再在區(qū)塊鏈上進(jìn)行登記是什么資產(chǎn),有一個(gè)類別,和名稱、總量,并且可以指定資產(chǎn)的管理員賬戶。
然后是發(fā)行,發(fā)行的話是說我這個(gè)資產(chǎn)雖然注冊(cè)區(qū)塊鏈上了,它只不過是注冊(cè)一個(gè)類,但還沒有具體的發(fā)出來,就像我沒有啟動(dòng)印鈔機(jī)印出來一樣,發(fā)行就是啟動(dòng)印鈔機(jī)印出來了。
在小蟻上,可以通過智能合約支持任意發(fā)行邏輯,可以一次性完成,也可以在任意時(shí)間內(nèi)分批完成,比如典型發(fā)行模型pow、pos,甚至可以人工分配,這是最簡單粗暴的。
5、如何用最簡單的方式解讀區(qū)塊鏈?
大家最近天天都能聽到區(qū)塊鏈這個(gè)詞,那什么是區(qū)塊鏈呢?“分布式、難以篡改、一致存儲(chǔ)”等解釋太技術(shù)化且較為干澀。我這里來通俗的科普下:區(qū)塊鏈主要為了解決互不信任的個(gè)體之間的信任問題。舉個(gè)通俗的例子:話說老李和老王一個(gè)村,老李最近手頭有點(diǎn)緊,想向老王借點(diǎn)錢。老王呢,擔(dān)心借了老李后他賴賬怎么辦,于是找來“德高望重”的村長,不過想想,村長也不可信,以前村長還偷過別人家的地瓜啊!怎么辦?
區(qū)塊鏈的方法是:老王借了1000塊錢給老李后,然后用大喇叭在村里大喊“我老王今天借了老李1000元錢,大家都趕緊記錄下”,于是村里的所有人都記錄在了自己家里的賬本上,謹(jǐn)慎的保管了起來。這下可好,老李再也賴不過了,村里即便有不守信的人,那還是好人多呀,老李也不可能找村里全部的人偷偷抹掉自己的借錢記錄的。就這樣,區(qū)塊鏈解決了互不信任的老王和老李之間的借錢的信任問題。
在沒有出現(xiàn)區(qū)塊鏈之前,我們是如何解決互不信任個(gè)體間的信任問題呢?簡單啊,找兩者都信任的“德高望重”的“見證人”就好了,例如故事里的村長,例如買賣雙方之間的支付寶,例如公證處等等。不過可能這類“見證人”也不一定一直誠信下去,所以區(qū)塊鏈干脆就讓大家都作為見證人。
老王放心了,但老李頭疼啊!老李要等村里人都記錄好了才能拿到借給他的錢,誰家還沒個(gè)大爺大媽手腳慢一些的。所以目前區(qū)塊鏈距離應(yīng)用還有一定的距離,效率問題需要得到大幅提升才可以。
回想一下,你平時(shí)是怎么和別人交易的:一件漂亮的衣服,你可以在實(shí)體店挑好,確認(rèn)好了對(duì)方衣服質(zhì)量不錯(cuò),對(duì)方確認(rèn)你的錢是真錢,那么我們面對(duì)面一手交錢一手拿貨。
要是我們隔著十萬八千里,彼此既不認(rèn)識(shí)也不信任還是想交易呢?那就要有我們都信任的第三方了,也就是達(dá)成所謂的共識(shí)機(jī)制。比如:你可以在淘寶通過第三方見證擔(dān)保完成交易,錢先給支付寶——支付寶收款讓賣家發(fā)貨——賣家發(fā)貨——你確認(rèn)收貨——支付寶再把錢給賣家。
但是,倘若這個(gè)中心化的機(jī)構(gòu)作惡了,馬爸爸撕了賬本,不承認(rèn)你給了錢,或者和賣家聯(lián)合起來騙你錢,那可怎么辦?
又或者政府借了你一100萬,最后用超發(fā)貨幣的方式還給你錢,100萬縮水到1萬,由你來承受通貨膨脹的損失,你又怎么辦?
有沒有不被任何政府、組織機(jī)構(gòu)控制,能公開透明的完成仲裁,記錄了就不被篡改,沒有跑路風(fēng)險(xiǎn)的第三方呢?
別著急,我們的主角區(qū)塊鏈技術(shù)解決就是這樣的問題——你們之間的交易可以被所有在這個(gè)區(qū)塊鏈系統(tǒng)的人見證,大家的小賬本里頭都會(huì)記錄你們的交易。B如果否認(rèn)收了A的錢,或者A說自己借了300塊錢,都會(huì)被路人甲乙丙丁質(zhì)疑。具體是如何做到的呢?
1)系統(tǒng)給每個(gè)人都發(fā)了個(gè)小賬本,讓每個(gè)人都有記賬的權(quán)利,咱們稱之為分布式記賬。
2)為了鼓勵(lì)大家?guī)蛣e人記賬,系統(tǒng)代碼設(shè)定將比特幣這樣的代幣獎(jiǎng)勵(lì)給記賬者,為了防止一堆人記賬堵死,還將代幣設(shè)為有限個(gè),甲乙丙丁需要通過系統(tǒng)規(guī)定的機(jī)制進(jìn)行計(jì)算,算的最快最好的才能獲得記賬的權(quán)利,記錄之后通過系統(tǒng)廣播給大家,所有人復(fù)制一份相同的賬本,這個(gè)通過計(jì)算獲得獎(jiǎng)勵(lì)的過程就叫挖礦,記賬的路人甲乙丙丁就是礦工。
3)有一天,最初記錄這筆交易的甲Game Over了,這個(gè)賬本卻還是存在在其他人的賬本里,A和B誰想否認(rèn)都不行。我們把通過代碼寫好了如何仲裁和分配,無需銀行、政府、企業(yè)等中心化組織機(jī)構(gòu)作為第三方見證(去中心化),直接點(diǎn)對(duì)點(diǎn)(P2P)交易的方式,稱為去中心化。
4)系統(tǒng)把多個(gè)交易打包成區(qū)塊,按時(shí)間順序鏈接起來成為最后人手一本的賬本,這就是區(qū)塊鏈技術(shù)
其實(shí)把區(qū)塊鏈簡單理解為賬本不過是最淺顯的解讀了,把它的每個(gè)特點(diǎn)拆分開來,所能應(yīng)用的領(lǐng)域很多很多。
現(xiàn)在傳統(tǒng)金融行業(yè)、券商、投資機(jī)構(gòu)正在跑步入場,物聯(lián)網(wǎng), 游戲 ,儲(chǔ)存,版權(quán),防偽,征信,支付,預(yù)測市場(賭博之類)、社區(qū)等眾多領(lǐng)域已經(jīng)開始了區(qū)塊鏈的 探索 應(yīng)用。
互聯(lián)網(wǎng)讓萬物皆可連,區(qū)塊鏈能否讓所連皆可信呢?
我用天地自然運(yùn)化的奇石解讀一下區(qū)塊鏈:
所有科學(xué)、哲學(xué)、道義⋯⋯天地都包涵著。任何一個(gè)事物、任何一種文化都與天地道化有關(guān)。
區(qū)塊鏈自然逃不脫天地運(yùn)化法:即順然、隨然、無窮、無常。
它就是這塊奇石,其表面整體上的數(shù)據(jù)運(yùn)化,一是,整體向著無形無象。二是線點(diǎn)守著一個(gè)規(guī)律:即無常之道。就是說它們每條線,每個(gè)點(diǎn),追求的都不是一個(gè)閉合的目標(biāo)和一個(gè)局限的目的。這樣說大家我好理解了:一個(gè)畫家要畫一只雞,是有目的的,有終結(jié)相的,而奇石,大自然造化時(shí),是沒有終結(jié)相的。所以相不閉合,線、點(diǎn)數(shù)據(jù)也不終結(jié)。區(qū)塊連接之技術(shù),就是這個(gè)天運(yùn)之道。無常運(yùn)化無形無象,永無終結(jié)。(無中心化,就是無形無相,形式不封閉,結(jié)構(gòu)不封閉,思想不封閉⋯⋯如“石”辦事就行)。
山東曲阜孔子靈石館
大家好,我是皮皮,我在這里用幾個(gè)生活小例子給大家解讀一下什么叫區(qū)塊鏈?
去中心化,不可篡改級(jí),分布式存貯的,以加密信息做鏈接地址的數(shù)據(jù)區(qū)塊鏈接系統(tǒng),叫區(qū)塊鏈
這玩意本來就是許多高 科技 的復(fù)合品,沒法簡單,再簡單也是一大段話,而且未必能說清楚
區(qū)塊鏈(Blockchain)嚴(yán)格的定義是指通過基于密碼學(xué)技術(shù)設(shè)計(jì)的共識(shí)機(jī)制方式,在對(duì)等網(wǎng)絡(luò)中多個(gè)節(jié)點(diǎn)共同維護(hù)一個(gè)持續(xù)增長,由時(shí)間戳和有序記錄數(shù)據(jù)塊所構(gòu)建的鏈?zhǔn)搅斜碣~本的分布式數(shù)據(jù)庫技術(shù)。該技術(shù)方案讓參與系統(tǒng)中的任意多個(gè)節(jié)點(diǎn),把一段時(shí)間系統(tǒng)內(nèi)全部信息交流的數(shù)據(jù),通過密碼學(xué)算法計(jì)算和記錄到一個(gè)數(shù)據(jù)塊(block),并且生成該數(shù)據(jù)塊的指紋用于鏈接(chain)下個(gè)數(shù)據(jù)塊和校驗(yàn),系統(tǒng)所有參與節(jié)點(diǎn)來共同認(rèn)定記錄是否為真。
區(qū)塊鏈?zhǔn)且环N類似于NoSQL(非關(guān)系型數(shù)據(jù)庫)這樣的技術(shù)解決方案統(tǒng)稱,并不是某種特定技術(shù),能夠通過很多編程語言和架構(gòu)來實(shí)現(xiàn)區(qū)塊鏈技術(shù)。并且實(shí)現(xiàn)區(qū)塊鏈的方式種類也有很多,目前常見的包括POW(Proof of Work,工作量證明),POS(Proof of Stake,權(quán)益證明),DPOS(Delegate Proof of Stake,股份授權(quán)證明機(jī)制)等。
區(qū)塊鏈的概念首次在論文《比特幣:一種點(diǎn)對(duì)點(diǎn)的電子現(xiàn)金系統(tǒng)(Bitcoin: A Peer-to-Peer Electronic Cash System)》中提出,作者為自稱中本聰(Satoshi Nakamoto)的個(gè)人(或團(tuán)體)。因此可以把比特幣看成區(qū)塊鏈的首個(gè)在金融支付領(lǐng)域中的應(yīng)用。
【通俗解釋】
無論多大的系統(tǒng)或者多小的網(wǎng)站,一般在它背后都有數(shù)據(jù)庫。那么這個(gè)數(shù)據(jù)庫由誰來維護(hù)?在一般情況下,誰負(fù)責(zé)運(yùn)營這個(gè)網(wǎng)絡(luò)或者系統(tǒng),那么就由誰來進(jìn)行維護(hù)。如果是微信數(shù)據(jù)庫肯定是騰訊團(tuán)隊(duì)維護(hù),淘寶的數(shù)據(jù)庫就是阿里的團(tuán)隊(duì)在維護(hù)。大家一定認(rèn)為這種方式是天經(jīng)地義的,但是區(qū)塊鏈技術(shù)卻不是這樣。
如果我們把數(shù)據(jù)庫想象成是一個(gè)賬本:比如支付寶就是很典型的賬本,任何數(shù)據(jù)的改變就是記賬型的。數(shù)據(jù)庫的維護(hù)我們可以認(rèn)為是很簡單的記賬方式。在區(qū)塊鏈的世界也是這樣,區(qū)塊鏈系統(tǒng)中的每一個(gè)人都有機(jī)會(huì)參與記賬。系統(tǒng)會(huì)在一段時(shí)間內(nèi),可能選擇十秒鐘內(nèi),也可能十分鐘,選出這段時(shí)間記賬最快最好的人,由這個(gè)人來記賬,他會(huì)把這段時(shí)間數(shù)據(jù)庫的變化和賬本的變化記在一個(gè)區(qū)塊(block)中,我們可以把這個(gè)區(qū)塊想象成一頁紙上,系統(tǒng)在確認(rèn)記錄正確后,會(huì)把過去賬本的數(shù)據(jù)指紋鏈接(chain)這張紙上,然后把這張紙發(fā)給整個(gè)系統(tǒng)里面其他的所有人。然后周而復(fù)始,系統(tǒng)會(huì)尋找下一個(gè)記賬又快又好的人,而系統(tǒng)中的其他所有人都會(huì)獲得整個(gè)賬本的副本。這也就意味著這個(gè)系統(tǒng)每一個(gè)人都有一模一樣的賬本,這種技術(shù),我們就稱之為區(qū)塊鏈技術(shù)(Blockchain),也稱為分布式賬本技術(shù)。
由于每個(gè)人(計(jì)算機(jī))都有一模一樣的賬本,并且每個(gè)人(計(jì)算機(jī))都有著完全相等的權(quán)利,因此不會(huì)由于單個(gè)人(計(jì)算機(jī))失去聯(lián)系或宕機(jī),而導(dǎo)致整個(gè)系統(tǒng)崩潰。既然有一模一樣的賬本,就意味著所有的數(shù)據(jù)都是公開透明的,每一個(gè)人可以看到每一個(gè)賬戶上到底有什么數(shù)字變化。它非常有趣的特性就是,其中的數(shù)據(jù)無法篡改。因?yàn)橄到y(tǒng)會(huì)自動(dòng)比較,會(huì)認(rèn)為相同數(shù)量最多的賬本是真的賬本,少部分和別人數(shù)量不一樣的賬本是虛假的賬本。在這種情況下,任何人篡改自己的賬本是沒有任何意義的,因?yàn)槌悄隳軌虼鄹恼麄€(gè)系統(tǒng)里面大部分節(jié)點(diǎn)。如果整個(gè)系統(tǒng)節(jié)點(diǎn)只有五個(gè)、十個(gè)節(jié)點(diǎn)也許還容易做到,但是如果有上萬個(gè)甚至上十萬個(gè),并且還分布在互聯(lián)網(wǎng)上的任何角落,除非某個(gè)人能控制世界上大多數(shù)的電腦,否則不太可能篡改這樣大型的區(qū)塊鏈。
【要素】
結(jié)合區(qū)塊鏈的定義,我們認(rèn)為必須具有如下四點(diǎn)要素才能被稱為公開區(qū)塊鏈技術(shù),如果只具有前3點(diǎn)要素,我們將認(rèn)為其為私有區(qū)塊鏈技術(shù)(私有鏈)。
1、點(diǎn)對(duì)點(diǎn)的對(duì)等網(wǎng)絡(luò)(權(quán)力對(duì)等、物理點(diǎn)對(duì)點(diǎn)連接)
2、可驗(yàn)證的數(shù)據(jù)結(jié)構(gòu)(可驗(yàn)證的PKC體系,不可篡改數(shù)據(jù)庫)
3、分布式的共識(shí)機(jī)制(解決拜占庭將軍問題,解決雙重支付)
4、納什均衡的博弈設(shè)計(jì)(合作是演化穩(wěn)定的策略)
【特性】
結(jié)合定義區(qū)塊鏈的定義,區(qū)塊鏈會(huì)現(xiàn)實(shí)出四個(gè)主要的特性:去中心化(Decentralized)、去信任(Trustless)、集體維護(hù)(Collectively maintain)、可靠數(shù)據(jù)庫(Reliable Database)。并且由四個(gè)特性會(huì)引申出另外2個(gè)特性:開源(Open Source)、隱私保護(hù)(Anonymity)。如果一個(gè)系統(tǒng)不具備這些特征,將不能視其為基于區(qū)塊鏈技術(shù)的應(yīng)用。
去中心化(Decentralized):整個(gè)網(wǎng)絡(luò)沒有中心化的硬件或者管理機(jī)構(gòu),任意節(jié)點(diǎn)之間的權(quán)利和義務(wù)都是均等的,且任一節(jié)點(diǎn)的損壞或者失去都會(huì)不影響整個(gè)系統(tǒng)的運(yùn)作。因此也可以認(rèn)為區(qū)塊鏈系統(tǒng)具有極好的健壯性。
去信任(Trustless):參與整個(gè)系統(tǒng)中的每個(gè)節(jié)點(diǎn)之間進(jìn)行數(shù)據(jù)交換是無需互相信任的,整個(gè)系統(tǒng)的運(yùn)作規(guī)則是公開透明的,所有的數(shù)據(jù)內(nèi)容也是公開的,因此在系統(tǒng)指定的規(guī)則范圍和時(shí)間范圍內(nèi),節(jié)點(diǎn)之間是不能也無法欺騙其它節(jié)點(diǎn)。
集體維護(hù)(Collectively maintain):系統(tǒng)中的數(shù)據(jù)塊由整個(gè)系統(tǒng)中所有具有維護(hù)功能的節(jié)點(diǎn)來共同維護(hù)的,而這些具有維護(hù)功能的節(jié)點(diǎn)是任何人都可以參與的。
可靠數(shù)據(jù)庫(Reliable Database):整個(gè)系統(tǒng)將通過分?jǐn)?shù)據(jù)庫的形式,讓每個(gè)參與節(jié)點(diǎn)都能獲得一份完整數(shù)據(jù)庫的拷貝。除非能夠同時(shí)控制整個(gè)系統(tǒng)中超過51%的節(jié)點(diǎn),否則單個(gè)節(jié)點(diǎn)上對(duì)數(shù)據(jù)庫的修改是無效的,也無法影響其他節(jié)點(diǎn)上的數(shù)據(jù)內(nèi)容。因此參與系統(tǒng)中的節(jié)點(diǎn)越多和計(jì)算能力越強(qiáng),該系統(tǒng)中的數(shù)據(jù)安全性越高。
開源(Open Source):由于整個(gè)系統(tǒng)的運(yùn)作規(guī)則必須是公開透明的,所以對(duì)于程序而言,整個(gè)系統(tǒng)必定會(huì)是開源的。
隱私保護(hù)(Anonymity):由于節(jié)點(diǎn)和節(jié)點(diǎn)之間是無需互相信任的,因此節(jié)點(diǎn)和節(jié)點(diǎn)之間無需公開身份,在系統(tǒng)中的每個(gè)參與的節(jié)點(diǎn)的隱私都是受到保護(hù)的。
【區(qū)塊鏈意義之一 :解決拜占庭將軍問題】
區(qū)塊鏈解決的核心問題不是“數(shù)字貨幣”,而是在信息不對(duì)稱、不確定的環(huán)境下,如何建立滿足經(jīng)濟(jì)活動(dòng)賴以發(fā)生、發(fā)展的“信任”生態(tài)體系。而這個(gè)問題稱之為“拜占庭將軍問題”,也可稱為“拜占庭容錯(cuò)”或者“兩軍問題”,這是一個(gè)分布式系統(tǒng)中進(jìn)行信息機(jī)交互時(shí)面臨的難題,即在整個(gè)網(wǎng)絡(luò)中的任意節(jié)點(diǎn)都無法信任與之通信的對(duì)方時(shí),如何能創(chuàng)建出共識(shí)基礎(chǔ)來進(jìn)行安全的信息交互而無需擔(dān)心數(shù)據(jù)被篡改。區(qū)塊鏈?zhǔn)褂盟惴ㄗC明機(jī)制來保證整個(gè)網(wǎng)絡(luò)的安全,借助它,整個(gè)系統(tǒng)中的所有節(jié)點(diǎn)能夠在去信任的環(huán)境下自動(dòng)安全的交換數(shù)據(jù)。更多介紹請(qǐng)參見《比特幣與拜占庭將軍問題》。
【區(qū)塊鏈意義之二:實(shí)現(xiàn)跨國價(jià)值轉(zhuǎn)移】
互聯(lián)網(wǎng)誕生最初,最早核心解決的問題是信息制造和傳輸,我們可以通過互聯(lián)網(wǎng)將信息快速生成并且復(fù)制到全世界每一個(gè)有著網(wǎng)絡(luò)的角落,但是它尚始終不能解決價(jià)值轉(zhuǎn)移和信用轉(zhuǎn)移。這里所謂的價(jià)值轉(zhuǎn)移是指,在網(wǎng)絡(luò)中每個(gè)人都能夠認(rèn)可和確認(rèn)的方式,將某一部分價(jià)值精確的從某一個(gè)地址轉(zhuǎn)移到另一個(gè)地址,而且必須確保當(dāng)價(jià)值轉(zhuǎn)移后,原來的地址減少了被轉(zhuǎn)移的部分,而新的地址增加了所轉(zhuǎn)移的價(jià)值。這里說的價(jià)值可以是貨幣資產(chǎn),也可以是某種實(shí)體資產(chǎn)或者虛擬資產(chǎn)(包括有價(jià)證券、金融衍生品等)。而這操作的結(jié)果必須獲得所有參與方的認(rèn)可,且其結(jié)果不能受到任何某一方的操縱。
在目前的互聯(lián)網(wǎng)中也有各種各樣的金融體系,也有許多政府銀行提供或者第三方提供的支付系統(tǒng),但是它還是依靠中心化的方案來解決。所謂中心化的方案,就是通過某個(gè)公司或者政府信用作為背書,將所有的價(jià)值轉(zhuǎn)移計(jì)算放在一個(gè)中心服務(wù)器(集群)中,盡管所有的計(jì)算也是由程序自動(dòng)完成,但是卻必須信任這個(gè)中心化的人或者機(jī)構(gòu)。事實(shí)上通過中心化的信用背書來解決,也只能將信用局限在一定的機(jī)構(gòu)、地區(qū)或者國家的范圍之內(nèi)。由此可以看出,必須要解決的這個(gè)根本問題,那就是信用。所以價(jià)值轉(zhuǎn)移的核心問題是跨國信用共識(shí)。
在如此紛繁復(fù)雜的全球體系中,要憑空建立一個(gè)全球性的信用共識(shí)體系是很難的,由于每個(gè)國家的政治、經(jīng)濟(jì)和文化情況不同,對(duì)于兩個(gè)國家的企業(yè)和政府完全互信是幾乎做不到的,這也就意味著無論是以個(gè)人抑或企業(yè)政府的信用進(jìn)行背書,對(duì)于跨國之間的價(jià)值交換即使可以完成,也有著巨大的時(shí)間和經(jīng)濟(jì)成本。但是在漫長的人類 歷史 中,無論每個(gè)國家的宗教、政治和文化是如何的不同,唯一能取得共識(shí)的是數(shù)學(xué)(基礎(chǔ)科學(xué))。因此,可以毫不夸張的說,數(shù)學(xué)(算法)是全球文明的最大公約數(shù),也是全球人類獲得最多共識(shí)的基礎(chǔ)。如果我們以數(shù)學(xué)算法(程序)作為背書,所有的規(guī)則都建立一個(gè)公開透明的數(shù)學(xué)算法(程序)之上,能夠讓所有不同政治文化背景的人群獲得共識(shí)。
【未來的發(fā)展】
互聯(lián)網(wǎng)將使得全球之間的互動(dòng)越來越緊密,伴隨而來的就是巨大的信任鴻溝。目前現(xiàn)有的主流數(shù)據(jù)庫技術(shù)架構(gòu)都是私密且中心化的,在這個(gè)架構(gòu)上是永遠(yuǎn)無法解決價(jià)值轉(zhuǎn)移和互信問題。所以區(qū)塊鏈技術(shù)有可能將成為下一代數(shù)據(jù)庫架構(gòu)。通過去中心化技術(shù),將能夠在大數(shù)據(jù)的基礎(chǔ)上完成數(shù)學(xué)(算法)背書、全球互信這個(gè)巨大的進(jìn)步。
區(qū)塊鏈技術(shù)作為一種特定分布式存取數(shù)據(jù)技術(shù),它通過網(wǎng)絡(luò)中多個(gè)參與計(jì)算的節(jié)點(diǎn)開共同參與數(shù)據(jù)的計(jì)算和記錄,并且互相驗(yàn)證其信息的有效性(防偽)。從這一點(diǎn)來,區(qū)塊鏈技術(shù)也是一種特定的數(shù)據(jù)庫技術(shù)。互聯(lián)網(wǎng)剛剛進(jìn)入大數(shù)據(jù)時(shí)代,但是從目前來看,大數(shù)據(jù)還處于非常基礎(chǔ)的階段。但是當(dāng)進(jìn)入到區(qū)塊鏈數(shù)據(jù)庫階段,將進(jìn)入到真正的強(qiáng)信任背書的大數(shù)據(jù)時(shí)代。這里面的所有數(shù)據(jù)都獲得堅(jiān)不可摧的質(zhì)量,任何人都沒有能力也沒有必要去質(zhì)疑。
也許我們現(xiàn)在正處在一個(gè)重大的轉(zhuǎn)折點(diǎn)之上——和工業(yè)革命所帶來的深刻變革幾乎相同的重大轉(zhuǎn)折的早期階段。不僅僅是新技術(shù)指數(shù)級(jí)、數(shù)字化和組合式的進(jìn)步與變革,更多的驚喜也許還會(huì)在我們前面。在未來的24個(gè)月里,這個(gè)星球所增長的計(jì)算機(jī)算力和記錄的數(shù)據(jù)將會(huì)超過所有 歷史 階段的總和。在過去的24個(gè)月里,這個(gè)增值可能已經(jīng)超過了1000倍。這些數(shù)字化的數(shù)據(jù)信息還在以比摩爾定律更快的速度增長。區(qū)塊鏈技術(shù)將不僅僅應(yīng)用在金融支付領(lǐng)域,而是將會(huì)擴(kuò)展到目前所有應(yīng)用范圍,諸如去中心化的微博、微信、搜索、租房,甚至是打車軟件都有可能會(huì)出現(xiàn)。因?yàn)閰^(qū)塊鏈將可以讓人類無地域限制的、去信任的方式來進(jìn)行大規(guī)模協(xié)作。
區(qū)塊鏈?zhǔn)且环N技術(shù),基于這項(xiàng)技術(shù)產(chǎn)生很多應(yīng)用,包括與數(shù)據(jù)和信息相關(guān)的一切行業(yè)業(yè)務(wù),比特幣就是其中最為人熟知的一種應(yīng)用。對(duì)于區(qū)塊鏈的通俗解釋就是,假如在網(wǎng)上買一只口紅,首先找到心儀的產(chǎn)品和賣家下單,先把錢給中間平臺(tái),等到賣家發(fā)貨買家確認(rèn)收貨以后,中間平臺(tái)再把錢轉(zhuǎn)給賣家,因?yàn)樾湃螁栴}買賣家之間都依賴于中間平臺(tái),而區(qū)塊鏈作為去中心化的分布式賬本數(shù)據(jù)庫,則著力于去掉這個(gè)中間平臺(tái)但同時(shí)又解決信任問題。在區(qū)塊鏈中每個(gè)人擁有自己的記賬本,用來記錄發(fā)生的每一件事,假如在交易中出現(xiàn)賣家拿錢不發(fā)貨的行為,這一條記錄將永久存在不可修改,不需要互相交換信息,區(qū)塊鏈的世界會(huì)選擇在同一個(gè)時(shí)間節(jié)點(diǎn)記錄最快質(zhì)量最好的那個(gè)人的記賬本進(jìn)行復(fù)制發(fā)送并串聯(lián),最后越疊越厚形成區(qū)塊。
大家在談?wù)撎摂M貨幣時(shí),往往離不開區(qū)塊鏈這個(gè)概念,那么區(qū)塊鏈到底是個(gè)神馬玩意呢?
區(qū)塊鏈?zhǔn)且环N底層技術(shù),本質(zhì)上是一個(gè)去中心化的分布式賬本數(shù)據(jù)庫。聽起來好像十分高端,遙不可及,其實(shí)是很容易理解的。
舉個(gè)例子,假如要在淘寶上購買商品,那么一般首先要做的就是打開淘寶,找到想要的商品并下單將錢支付給作為交易中介的淘寶。等收到商品并確認(rèn)收貨后淘寶便會(huì)將貨款打給賣家。這本來只是我和賣家的交易,但卻多了個(gè)“中心”,即淘寶。
在交易進(jìn)行的過程中,這個(gè)“中心”擁有無限大的權(quán)力,甚至隨意修改賬單。因此,“中心”往往需要強(qiáng)大的后臺(tái)為其背書。
于是,有一個(gè)名叫中本聰?shù)哪腥讼胍傻暨@個(gè)權(quán)力無窮大的中心,他想創(chuàng)造一個(gè)去中心化的系統(tǒng),在這個(gè)系統(tǒng)里,每個(gè)人都是中心,都有記賬的權(quán)力。于是,他創(chuàng)造了比特幣。
在比特幣的系統(tǒng)中,每個(gè)人都有一個(gè)小賬本用以記錄發(fā)生的每一筆交易。一筆交易只有經(jīng)過大部分人確認(rèn)后才有效。如果賣家不發(fā)貨,那么每個(gè)人的小賬本都會(huì)將這件事記錄下來,讓他無處可逃。
這時(shí)候大家可能會(huì)有疑問,既然只是一個(gè)公開的賬本,那么為什么又要叫區(qū)塊鏈呢?這就涉及到了共識(shí)問題,區(qū)塊鏈系統(tǒng)是一個(gè)由眾多“中心”組成的系統(tǒng),整個(gè)區(qū)塊鏈?zhǔn)菍儆谒袇⑴c記賬的個(gè)體的。這時(shí)候就產(chǎn)生了新的問題,一個(gè)系統(tǒng)必須要有秩序才能長遠(yuǎn)的存在。假如記賬者可以不計(jì)成本地胡作非為,那就可能出現(xiàn)本來只是購買一臺(tái)手機(jī),但收到的卻是一臺(tái)特斯拉的情況。
于是,中本聰發(fā)明了一種名為PoW的共識(shí)方式。這種方式提高了記賬者記賬的成本,讓其不能輕易作惡。PoW通過密碼學(xué)的方式要求記賬者需要通過競爭計(jì)算能力來獲取記賬權(quán),第一個(gè)計(jì)算出結(jié)果的記賬者即可獲得一個(gè)由若干筆交易打包而來的區(qū)塊的記賬權(quán),同時(shí)獲得一定的代幣作為獎(jiǎng)勵(lì)。這就是我們俗稱的“挖礦”。
既然記賬者已經(jīng)將一個(gè)包含了若干筆交易的區(qū)塊記錄了下來,那么系統(tǒng)就需要進(jìn)行整理排序,不可能讓無數(shù)的區(qū)塊雜亂無章地分布在系統(tǒng)中。于是就需要把所有區(qū)塊按照時(shí)間順序首尾相連鏈接鏈接起來,這時(shí),區(qū)塊鏈便誕生了。區(qū)塊鏈的核心是技術(shù)。

轉(zhuǎn)載請(qǐng)帶上網(wǎng)址:http://www.ting2000.com/posjithree/208364.html