當前位置:首頁 » 區塊鏈知識 » 區塊鏈節點遍歷

區塊鏈節點遍歷

發布時間: 2023-10-01 06:39:02

Ⅰ 什麼是區塊鏈

用最簡單的術語來說,區塊鏈是一個分布式分類賬。

要理解這意味著什麼,我們首先要看一下它的對立面:一個集中的分類賬。因為區塊鏈技術是從金融開始的,下面我們也將使用銀行作為例子進行介紹。

以下是我們使用銀行借記卡交易的過程:

你可以在商店刷卡購買商品。

商家向你的銀行發送賬單,以獲得商定的金額。

你的銀行會驗證你是否可能授權購買。

銀行將錢匯給商家。

最後,銀行在其分類賬中記錄了這些信息。

這里涉及很多技術,但基本上就是這樣。最後一步很重要 - 銀行記錄了客戶所做的所有交易。這個分類賬一直回到銀行做的第一筆交易。

該分類賬由銀行保管,維護和監管。你可以在自己的在線銀行帳戶中閱讀,但無法對其進行更改。銀行完全控制。如果它決定做出改變,那麼你無能為力。

至關重要的是,如果黑客能夠訪問銀行的分類賬,那就可能導致很多問題。他們可以更改帳戶余額,使其看起來像某些交易從未發生過,等等。

這就是分布式賬本如此酷的原因。

區塊鏈網路可視化

如果銀行在分布式分類賬上運作,銀行的每個成員都會有一份分類賬的副本,每當銀行的任何成員進行購買時,他們都會告訴銀行的其他所有成員。

每個成員都將驗證事務並將其添加到分類帳(添加的記錄稱為「塊」)。這有一些重要的好處,因為沒有可以操縱記錄的集中許可權。黑客訪問一個分類帳不會是一個大問題,因為其他分類帳可以輕松驗證它。

另一方面,它需要大量的工作。簡而言之,第二個系統是區塊鏈(至少在財務方案中)。

如上所述,區塊鏈是一個分散的交易清單。如果我發送小明2個比特幣,我會向網路中的每個人發送一條消息,說「我正在發送小明2個比特幣」,他們都會記錄交易。

區塊鏈的未來,它將如何改變我們的生活?

關於區塊鏈,有一點很重要,它是公共資源,沒有人真正擁有它,因為每個人都擁有它。

區塊鏈不僅僅是科幻小說。我們不需要理解這項技術背後的機制,但你需要明白,它在未來20年裡可能會徹底改變我們的生活。

這聽起來很大膽,但請記住,20年前,我們還在Netscape上瀏覽互聯網,使用最先進的摩托羅拉翻蓋手機,購買我們的第一台DVD播放機。當時,如果我們幻想電腦可以拿在手裡,在上面還可以買車、付款、看電影,那一定會被認為是天方夜譚。

雖然區塊鏈的影響可能不像互聯網那樣明顯,也不如手機那麼有形,但區塊鏈將切實解決日常生活中的諸多煩惱。比如中介坑人、交易拖延等。在我們現在的生活中,中間商隨處可見,我們理所當然地認為他們是生活的一部分。如果有一天,這些中介不復存在,你會發現這個世界將會變成另外一個樣子。

幻想一下,到2040年,區塊鏈或將成為一種成熟的、應用廣泛的技術。當某一天,你離不開區塊鏈就像現在離不開互聯網一樣,你就會驚覺這種去中心化的記賬技術已化繁就簡,成為你生活方式的一部分

Ⅱ 比特幣之挖礦與共識(二)

比特幣共識機制的第三步是通過網路中的每個節點獨立校驗每個新區塊。當新區塊在網路中傳播時,每一個節點在將它 轉發到其節點之前,會進行一系列的測試去驗證它。這確保了只有有效的區塊會在網路中傳播。

獨立校驗還確保了誠實 的礦工生成的區塊可以被納入到區塊鏈中,從而獲得獎勵。行為不誠實的礦工所產生的區塊將被拒絕,這不但使他們失 去了獎勵,而且也浪費了本來可以去尋找工作量證明解的機會,因而導致其電費虧損。

當一個節點接收到一個新的區塊,它將對照一個長長的標准清單對該區塊進行驗證,若沒有通過驗證,這個區塊將被拒 絕。這些標准可以在比特幣核心客戶端的CheckBlock函數和CheckBlockHead函數中獲得

它包括:

為什麼礦工不為他們自己記錄一筆交易去獲得數以千計的比特幣?

這 是因為每一個節點根據相同的規則對區塊進行校驗。一個無效的coinbase交易將使整個區塊無效,這將導致該區塊被拒 絕,因此,該交易就不會成為總賬的一部分。礦工們必須構建一個完美的區塊,基於所有節點共享的規則,並且根據正 確工作量證明的解決方案進行挖礦,他們要花費大量的電力挖礦才能做到這一點。如果他們作弊,所有的電力和努力都 會浪費。這就是為什麼獨立校驗是去中心化共識的重要組成部分。

比特幣去中心化的共識機制的最後一步是將區塊集合至有最大工作量證明的鏈中。一旦一個節點驗證了一個新的區塊, 它將嘗試將新的區塊連接到到現存的區塊鏈,將它們組裝起來。

節點維護三種區塊:第一種是連接到主鏈上的,第二種是從主鏈上產生分支的(備用鏈),最後一種是在已知鏈中沒有 找到已知父區塊的。在驗證過程中,一旦發現有不符合標準的地方,驗證就會失敗,這樣區塊會被節點拒絕,所以也不 會加入到任何一條鏈中。

任何時候,主鏈都是累計了最多難度的區塊鏈。在一般情況下,主鏈也是包含最多區塊的那個鏈,除非有兩個等長的鏈 並且其中一個有更多的工作量證明。主鏈也會有一些分支,這些分支中的區塊與主鏈上的區塊互為「兄弟」區塊。這些區 塊是有效的,但不是主鏈的一部分。 保留這些分支的目的是如果在未來的某個時刻它們中的一個延長了並在難度值上超 過了主鏈,那麼後續的區塊就會引用它們。

如果節點收到了一個有效的區塊,而在現有的區塊鏈中卻未找到它的父區塊,那麼這個區塊被認為是「孤塊」。孤塊會被 保存在孤塊池中,直到它們的父區塊被節點收到。一旦收到了父區塊並且將其連接到現有區塊鏈上,節點就會將孤塊從 孤塊池中取出,並且連接到它的父區塊,讓它作為區塊鏈的一部分。當兩個區塊在很短的時間間隔內被挖出來,節點有 可能會以相反的順序接收到它們,這個時候孤塊現象就會出現。

選擇了最大難度的區塊鏈後,所有的節點最終在全網范圍內達成共識。隨著更多的工作量證明被添加到鏈中,鏈的暫時性差異最終會得到解決。挖礦節點通過「投票」來選擇它們想要延長的區塊鏈,當它們挖出一個新塊並且延長了一個鏈, 新塊本身就代表它們的投票。

因為區塊鏈是去中心化的數據結構,所以不同副本之間不能總是保持一致。區塊有可能在不同時間到達不同節點,導致節點有不同的區塊鏈全貌。

解決的辦法是,每一個節點總是選擇並嘗試延長代表累計了最大工作量證明的區塊鏈,也就 是最長的或最大累計工作的鏈(greatest cumulative work chain)。節點通過累加鏈上的每個區塊的工作量,得到建立這個鏈所要付出的工作量證明的總量。只要所有的節點選擇最長累計工作的區塊鏈,整個比特幣網路最終會收斂到一致的狀態。分叉即在不同區塊鏈間發生的臨時差異,當更多的區塊添加到了某個分叉中,這個問題便會迎刃而解。

提示由於全球網路中的傳輸延遲,本節中描述的區塊鏈分叉自動會發生。

然而,倒三角形的區塊不會被丟棄。它被鏈接到星形鏈的父區塊,並形成備用鏈。雖然節點X認為自己已經正確選擇了獲勝鏈,但是它還會保存「丟失」鏈,使得「丟失」鏈如果可能最終「獲勝」,它還具有重新打包的所需的信息。

這是一個鏈的重新共識,因為這些節點被迫修改他們對塊鏈的立場,把自己納入更長的鏈。任何從事延伸星形-倒三角形的礦工現在都將停止這項工作,因為他們的候選人是「孤兒」,因為他們的父母「倒三角形」不再是最長的連鎖。

「倒三角形」內的交易重新插入到內存池中用來包含在下一個塊中,因為它們所在的塊不再位於主鏈中。

整個網路重新回到單一鏈狀態,星形-三角形-菱形,「菱形」成為鏈中的最後一個塊。所有礦工立即開始研究以「菱形」為父區塊的候選塊,以擴展這條星形-三角形-菱形鏈。

從理論上來說,兩個區塊的分叉是有可能的,這種情況發生在因先前分叉而相互對立起來的礦工,又幾乎同時發現了兩個不同區塊的解。

然而,這種情況發生的幾率是很低的。單區塊分叉每周都會發生,而雙塊分叉則非常罕見。比特幣將區塊間隔設計為10分鍾,是在更快速的交易確認和更低的分叉概率間作出的妥協。更短的區塊產生間隔會讓交易清算更快地完成,也會導致更加頻繁地區塊鏈分叉。與之相對地,更長的間隔會減少分叉數量,卻會導致更長的清算時間。

2012年以來,比特幣挖礦發展出一個解決區塊頭基本結構限制的方案。在比特幣的早期,礦工可以通過遍歷隨機數 (Nonce)獲得符合要求的hash來挖出一個塊。

難度增長後,礦工經常在嘗試了40億個值後仍然沒有出塊。然而,這很容 易通過讀取塊的時間戳並計算經過的時間來解決。因為時間戳是區塊頭的一部分,它的變化可以讓礦工用不同的隨機值 再次遍歷。當挖礦硬體的速度達到了4GH/秒,這種方法變得越來越困難,因為隨機數的取值在一秒內就被用盡了。

當出現ASIC礦機並很快達到了TH/秒的hash速率後,挖礦軟體為了找到有效的塊, 需要更多的空間來儲存nonce值 。可以把時間戳延後一點,但將來如果把它移動得太遠,會導致區塊變為無效。

區塊頭需要信息來源的一個新的「變革」。解決方案是使用coinbase交易作為額外的隨機值來源,因為coinbase腳本可以儲存2-100位元組的數據,礦工們開始使用這個空間作為額外隨機值的來源,允許他們去探索一個大得多的區塊頭值范圍來找到有效的塊。這個coinbase交易包含在merkle樹中,這意味著任何coinbase腳本的變化將導致Merkle根的變化。

8個位元組的額外隨機數,加上4個位元組的「標准」隨機數,允許礦工每秒嘗試2^96(8後面跟28個零)種可能性而無需修改時間戳。如果未來礦工穿過了以上所有的可能性,他們還可以通過修改時間戳來解決。同樣,coinbase腳本中也有更多額外的空間可以為將來隨機數的擴展做准備。

比特幣的共識機制指的是,被礦工(或礦池)試圖使用自己的算力實行欺騙或破壞的難度很大,至少理論上是這樣。就像我們前面講的,比特幣的共識機制依賴於這樣一個前提,那就是絕大多數的礦工,出於自己利益最大化的考慮,都會 通過誠實地挖礦來維持整個比特幣系統。然而,當一個或者一群擁有了整個系統中大量算力的礦工出現之後,他們就可以通過攻擊比特幣的共識機制來達到破壞比特幣網路的安全性和可靠性的目的。

值得注意的是,共識攻擊只能影響整個區塊鏈未來的共識,或者說,最多能影響不久的過去幾個區塊的共識(最多影響過去10個塊)。而且隨著時間的推移,整個比特幣塊鏈被篡改的可能性越來越低。

理論上,一個區塊鏈分叉可以變得很長,但實際上,要想實現一個非常長的區塊鏈分叉需要的算力非常非常大,隨著整個比特幣區塊鏈逐漸增長,過去的區塊基本可以認為是無法被分叉篡改的。

同時,共識攻擊也不會影響用戶的私鑰以及加密演算法(ECDSA)。

共識攻擊也 不能從其他的錢包那裡偷到比特幣、不簽名地支付比特幣、重新分配比特幣、改變過去的交易或者改變比特幣持有紀錄。共識攻擊能夠造成的唯一影響是影響最近的區塊(最多10個)並且通過拒絕服務來影響未來區塊的生成。

共識攻擊的一個典型場景就是「51%攻擊」。想像這么一個場景,一群礦工控制了整個比特幣網路51%的算力,他們聯合起來打算攻擊整個比特幣系統。由於這群礦工可以生成絕大多數的塊,他們就可以通過故意製造塊鏈分叉來實現「雙重支 付」或者通過拒絕服務的方式來阻止特定的交易或者攻擊特定的錢包地址。

區塊鏈分叉/雙重支付攻擊指的是攻擊者通過 不承認最近的某個交易,並在這個交易之前重構新的塊,從而生成新的分叉,繼而實現雙重支付。有了充足算力的保證,一個攻擊者可以一次性篡改最近的6個或者更多的區塊,從而使得這些區塊包含的本應無法篡改的交易消失。

值得注意的是,雙重支付只能在攻擊者擁有的錢包所發生的交易上進行,因為只有錢包的擁有者才能生成一個合法的簽名用於雙重支付交易。攻擊者在自己的交易上進行雙重支付攻擊,如果可以通過使交易無效而實現對於不可逆轉的購買行為不予付款, 這種攻擊就是有利可圖的。

攻擊者Mallory在Carol的畫廊買了描繪偉大的中本聰的三聯組畫(The Great Fire),Mallory通過轉賬價值25萬美金的比特幣 與Carol進行交易。在等到一個而不是六個交易確認之後,Carol放心地將這幅組畫包好,交給了Mallory。這時,Mallory 的一個同夥,一個擁有大量算力的礦池的人Paul,在這筆交易寫進區塊鏈的時候,開始了51%攻擊。

首先,Paul利用自己礦池的算力重新計算包含這筆交易的塊,並且在新塊里將原來的交易替換成了另外一筆交易(比如直接轉給了Mallory 的另一個錢包而不是Carol的),從而實現了「雙重支付」。這筆「雙重支付」交易使用了跟原有交易一致的UTXO,但收款人被替換成了Mallory的錢包地址。

然後,Paul利用礦池在偽造的塊的基礎上,又計算出一個更新的塊,這樣,包含這 筆「雙重支付」交易的塊鏈比原有的塊鏈高出了一個塊。到此,高度更高的分叉區塊鏈取代了原有的區塊鏈,「雙重支付」交 易取代了原來給Carol的交易,Carol既沒有收到價值25萬美金的比特幣,原本擁有的三幅價值連城的畫也被Mallory白白 拿走了。

在整個過程中,Paul礦池裡的其他礦工可能自始至終都沒有覺察到這筆「雙重支付」交易有什麼異樣,因為挖礦程序都是自動在運行,並且不會時時監控每一個區塊中的每一筆交易。

為了避免這類攻擊,售賣大宗商品的商家應該在交易得到全網的6個確認之後再交付商品。或者,商家應該使用第三方 的多方簽名的賬戶進行交易,並且也要等到交易賬戶獲得全網多個確認之後再交付商品。一條交易的確認數越多,越難 被攻擊者通過51%攻擊篡改。

對於大宗商品的交易,即使在付款24小時之後再發貨,對買賣雙方來說使用比特幣支付也 是方便並且有效率的。而24小時之後,這筆交易的全網確認數將達到至少144個(能有效降低被51%攻擊的可能性)。

需要注意的是,51%攻擊並不是像它的命名里說的那樣,攻擊者需要至少51%的算力才能發起,實際上,即使其擁有不 到51%的系統算力,依然可以嘗試發起這種攻擊。之所以命名為51%攻擊,只是因為在攻擊者的算力達到51%這個閾值 的時候,其發起的攻擊嘗試幾乎肯定會成功。

本質上來看,共識攻擊,就像是系統中所有礦工的算力被分成了兩組,一 組為誠實算力,一組為攻擊者算力,兩組人都在爭先恐後地計算塊鏈上的新塊,只是攻擊者算力算出來的是精心構造 的、包含或者剔除了某些交易的塊。因此,攻擊者擁有的算力越少,在這場決逐中獲勝的可能性就越小。

從另一個角度 講,一個攻擊者擁有的算力越多,其故意創造的分叉塊鏈就可能越長,可能被篡改的最近的塊或者或者受其控制的未來 的塊就會越多。一些安全研究組織利用統計模型得出的結論是,算力達到全網的30%就足以發動51%攻擊了。全網算力的急劇增長已經使得比特幣系統不再可能被某一個礦工攻擊,因為一個礦工已經不可能占據全網哪怕的1%算 力。

待補充

待補充

Ⅲ Blockstack簡介

一、概要
Blockstack是一個分散式應用程序的新互聯網,配備了一整套開源開發工具來構建和引導分散的應用程序和協議生態系統。用戶擁有自己的數據,瀏覽器就是開始所需的一切,Blockstack是區塊鏈的「Google」。
Blockstack是一款集成了分散式數據、分散式應用程序、分散式用戶數據的區塊鏈瀏覽器應用。
所謂分布式互聯網,用戶在此之上擁有對其身份的所有權,數據和身份綁定,存儲在自己的私有設備,或者雲端,從而取消了對第三方機構的依賴。而開發者可以開發分布式的應用本地運行,調用用戶的API,在用戶許可的情況下訪問用戶數據,從而不用考慮數據的存儲問題。Blockstack通過這種方式將數據主權交還給用戶,用戶數據由用戶保管,未經用戶許可,任何第三方無法訪問用戶數據。由於用戶擁有了數據主權,用戶可以隨心所欲轉移,不用再受到平台限制。

二、Blockstack的實現原理
Blockstack在底層區塊鏈之上構建了一個與之隔離的命名系統。底層的區塊鏈用來記錄「名-值(name-value)」對的狀態變化,利用區塊鏈的共識協議,命名系統中的各項操作(例如命名注冊,更新,轉讓等)可以在全網達成共識,不可篡改。

Blockstack採用了數據平面與控制平面分離的思想,將命名控制和命名相關數據分離。
控制平麵包括底層區塊鏈和之上的虛擬鏈,定義了注冊名字,創建名字-身份綁定的協議。
數據平面負責數據存儲,主要包括
(1)用來通過哈希值或URL找到數據的zone file
(2)外部存儲(Dropbox,S3,IPFS等)。數據由與其綁定的名字所對應的密鑰對簽名。客戶端從數據平面讀取數據,並且通過zone file中的數據哈希和名字所有者的公鑰對數據進行完整性和可靠性驗證。

這種數據平面與控制平面相分離的思想使得Blockstack不依附於任何一種特定的區塊鏈,也就是說用戶可以根據自己的需求選擇不同的區塊鏈

三、Blockstack的層次
為了實現命名與存儲功能,Blockstack具有四個層次:控制平面的區塊鏈層和虛擬鏈層,以及數據平面的路由層和數據存儲層。具體實現如下圖所示

1、區塊鏈層(Blockchain Layer)
區塊鏈層處於最底層,主要提供兩項服務:
(1)Blockstack的各項操作是編碼在底層區塊鏈的交易記錄中的,區塊鏈層負責存儲Blockstack的操作序列;
(2)為寫入區塊鏈的操作的順序提供共識。

2、虛擬鏈層(Virtualchain Layer)
虛擬鏈層是Blockstack的核心,定義了Blockstack節點的各種操作,且只有Blockstack節點能感知到這一層,單純的區塊鏈節點雖然能讀取到操作的原文,但無法對其解析。
虛擬鏈層還定義了接收和拒絕Blockstack操作的規則。例如,注冊命名操作被接收的條件是這個名字還沒有其他用戶注冊。

3、路由層(Routing Layer)
Blockstack將路由請求(如何找到數據)與實際的數據存儲分開,這樣就給了用戶可以選擇數據存儲的餘地,用戶既可以選擇存在商用的雲存儲(如亞馬遜S3,或者Dropbox)也可以選擇自己的私有存儲或者p2p存儲系統。
路由信息存儲在zone files里,這與DNS的zone file在形式上幾乎相同,如上圖所示。虛擬鏈將名字與zone file的哈希值綁定,存儲在控制平面,而zone file本身是存儲在路由層(目前的實現方式是存儲在分布式哈希表中)。用戶可以充分信任路由層,因為用戶可以隨時將zone file與控制平面的哈希值對比,來校驗zone file是否被改動。

4、存儲層(Storage Layer)
存儲層是用戶實際存放數據的地方。所有數據都會被名字所有者對應的密鑰對簽名。通過這種鏈外存儲的方式,用戶可以存儲任意大小的數據,而且因為數據的哈希值是存儲在控制層的,因此用戶不用擔心數據被篡改。
數據在存儲層的存儲方式有兩種:多變存儲和非多變存儲。兩者的區別主要在於在修改數據時是否同時修改zone file,分別適用於數據經常需要修改,以及數據幾乎不會被修改的情況。

5、命名系統
Blockstack使用四層的結構實現了分布式命名系統。名字歸屬於底層區塊鏈的地址以及相應的私鑰。和Namecoin一樣,用戶需要先預定(preoder),之後才能注冊(register)名字。最先將預定操作和注冊操作成功寫入區塊鏈的用戶可以獲得對某個名字的所有權。名字被注冊後,用戶可以使用更新(update)命令向該名字下發送更新的數據。用戶也可以使用轉讓(transfer)操作將名字轉讓給別的地址。撤銷(revoke)命令可以暫時終止對這一名字的操作。

四、總結
區塊鏈技術給互聯網帶來了激動人心的前景。分布式的命名與存儲系統使得用戶保有對身份與數據的絕對控制權,第三方的程序若想要訪問用戶的數據需要用戶授權。Blockstack項目雖然目前還不是很成熟,但其設計的思想和理念十分貼合互聯網未來的發展方向,也是區塊鏈技術落地應用的典範。

https://zhuanlan.hu.com/p/29823215

Ⅳ 區塊鏈的組成部分

區塊鏈的組成部分如下:

開放性:區塊鏈的系統數據是公開透明的,每個人都可以參與進來,比如租房子,你可以知道這個房子以前的出租信息,有沒出現過問題,當然這里頭的一些個人私有信息是加密的。

自治性:區塊鏈採用基於協商一致的規范和協議(比如一套公開透明的演算法),然後各個節點就按照這個規范來操作,這樣就是所有的東西都有機器完成,就沒有人情成分。 使得對人的信任改成了對機器的信任,任何人為的干預不起作用。

信息不可篡改:如果信息存儲到區塊鏈中就被永久保存,是沒辦法去改變,至於 51% 攻擊,基本不可能實現。

匿名性:區塊鏈上面沒有個人的信息,因為這些都是加密的,是一堆數字字母組成的字元串,這樣就不會出現你的各種身份證信息、電話號碼被倒賣的現象。

以太坊技術系列-以太坊數據結構

本篇文章和大家介紹一下以太坊的數據結構,上篇文章我們提到,以太坊為了實現智能合約這一功能,使用了基於賬戶的模型。我們來看看以太坊中數據結構。

既然是基於賬戶的模型,我們需要通過賬戶地址找到賬戶的狀態。就像通過銀行卡號可以找到你在銀行中的各種信息一樣。最簡單的想法當然是一個簡單的哈希表 key是賬戶地址 value是賬戶狀態。但這里有個問題解決不了。

輕節點如何校驗賬戶合法性?

上篇我們說過,區塊鏈中有2類節點,全節點和輕節點,輕節點只會存儲block header,所以輕節點如何才能校驗賬號是否合法呢?

這個思路和我們平時用的md5校驗一致,我們會對區塊內的信息進行hash運算從而得出區塊內信息唯一確定的值,區塊鏈所有節點中這個值都是相同的。

在這個過程中我們用到了一種數據結構Merkle Tree(哈希樹),我們先看下Merkle Tree(哈希樹)的示意圖。

上篇文章說到區塊鏈中的鏈表(哈希鏈)和我們平時常見鏈表不同的是將指針從地址改為了hash指,這里也一樣,哈希樹和二叉樹的區別有2個

1.將地址改為了哈希值

2.只有葉子節點存儲數據

回到之前的問題輕節點是如何校驗1個賬戶或交易是否是在鏈上的呢?

整個流程如上圖所示

1.輕節點需要判斷1個賬號是否合法

2.輕節點由於只存儲block header,所以拿到1個賬號的時候會向全節點發出請求

3.全節點存儲了所有賬戶狀態,將賬戶路徑中的需要計算用到的hash值返回給輕節點

4.輕節點本地進行計算根hash值,如果計算結果和自己存儲一致則賬戶合法,不一致則不合法。

那以太坊中的賬戶信息的數據結構就是這樣嗎?

直接用這樣的數據結構來存儲賬戶信息會有2個問題

查找困難

生成hash值不確定

第1個問題應該比較容易發現,在這個樹中尋找1個賬號需要的復雜度是O(n),因為沒有任何順序。

第2個問題其實也是因為無序導致的,無序的組合每個節點針對同一批賬戶生成的hash值不一致,這就導致無法達成共識。

既然2個問題都和順序有關,那我們類似二叉排序樹一樣,使用哈希排序樹是不是就可以解決問題了呢?

使用排序樹後會帶來另外1個問題

插入困難

因為要維持樹是有序的,很可能帶來樹結構的很大變動。

以太坊中使用了另外一種數據結構字典樹。和哈希樹不同,字典樹應該是很多地方都有使用。我們簡單來看下字典樹的結構。

字典樹能夠較好地解決哈希樹的2個缺點1.查找困難 2.生成的hash值不確定以及排序二叉樹的1個缺點 插入困難。

但字典樹我們可以看到可能樹的深度可能由於部分元素導致整棵樹深度非常深。

這時我們可以進一步優化,將相同路徑進行壓縮。這就是壓縮字典樹。

將哈希樹和壓縮字典樹結合,就可以得到以太坊存儲賬戶的最終數據結構-MPT。

將壓縮字典樹裡面的指針從地址改為指針,並且將數據存儲在葉子節點中即可。

介紹完狀態樹的數據結構,我們接下來討論1個問題,區塊中存儲的賬戶狀態是什麼樣的范圍。有2種選擇。

只保存當時區塊中產生交易的賬戶狀態。

保存全局所有的賬戶。

我們可以看下這2種方式,無非就是空間和時間的平衡,只保存當前區塊產生的交易意味著是做懶載入(需要的時候才去尋找賬戶),在區塊鏈中這個代價是非常大的,因為尋找的賬戶之前從未交易過,這樣會遍歷整個區塊鏈。另外一種保存全局的賬戶方式雖然看起來空間消耗較大,但查找快捷,而且空間的問題我們可以通過其他方式優化。所以最終以太坊選擇了第2種每個區塊都報錯全局所有賬戶的方式。

我們來看下以太坊中是如何保存狀態樹的。

可以看到以太坊中雖然每個區塊都保存了全部賬戶,但是會將未發生變化的賬戶狀態指向前1個節點,本身只存儲發生變化的狀態,這樣可以較大程度優化空間佔用。

介紹完以太坊中比較復雜的狀態樹後,我們繼續來看看以太坊中的另外兩棵樹,交易樹和收據樹。

首先介紹一下,為什麼需要交易樹&收據樹。

1.交易樹

雖然以太坊是基於賬戶的模型,但是就像銀行不僅會存儲銀行卡的余額,還會存儲卡中的每筆錢怎麼來的以及怎麼花的。交易樹中就存儲著當前區塊中的包含的所有交易。

2.收據樹

由於智能合約的引入增加了不少復雜性,所以以太坊用收據樹存儲著一些交易操作的額外信息。比如交易過程中執行日誌就包含在收據樹中方便查詢。收據樹和交易樹是一一對應的。每發生一次交易就會有一次收據。

和狀態樹不同交易樹和收據樹只維護當前區塊內發生的交易,因為當時區塊發生交易時不需要再去查找另外1個交易,也就之前需要可能遍歷整個區塊鏈的查找操作了。

由於以太坊中的出塊速度較快,我們進行一些查詢一些符合條件交易的時候會面臨大量數據遍歷困難的問題。收據樹中引入了布隆過濾器可以幫助我們有效緩解這一困難。

布隆過濾器將大集合中每個元素進行hash運算映射到1個較小的集合,這時再來1個元素要判斷是否在大集合的時候,不需要遍歷整個大集合,而是去進行hash運算去小集合中尋找是否存在,如果不存在,肯定不在大集合中,如果存在則不能說明任何問題。

如上圖所示,布隆過濾器只能證明某1個元素不在集合中,不能證明1個元素在結合中。

以太坊中如果我們要在較多區塊中尋找某1個交易,則可以利用布隆過濾器,過濾掉肯定不存在目標交易的區塊,然後進入收據樹內繼續利用布隆過濾器篩選,剩下的才是可能的目標交易的交易,進行一一比對即可。

我們介紹了以太坊的核心數據結構,狀態樹&交易樹&收據樹,他們都是使用相同的數據結構-哈希壓縮字典樹。但狀態樹是維護1顆全局賬戶樹,交易樹和收據樹則是維護本區塊內的交易或收據。

介紹完數據結構後,後面我們會用幾篇文章來介紹以太坊中的一些核心演算法,比如共識機制,挖礦演算法等。

Ⅵ 區塊鏈技術

背景:比特幣誕生之後,發現該技術很先進,才發現了區塊鏈技術。比特幣和區塊鏈技術同時被發現。

1.1 比特幣誕生的目的:

①貨幣交易就有記錄,即賬本;

②中心化機構記賬弊端——可篡改;易超發

比特幣解決第一個問題:防篡改——hash函數

1.2 hash函數(加密方式)

①作用:將任意長度的字元串,轉換成固定長度(sha256)的輸出。輸出也被稱為hash值。

②特點:很難找到兩個不同的x和y,使得h(x)=h(y)。

③應用:md5文件加密

1.3 區塊鏈

①定義

區塊:將總賬本拆分成區塊存儲

區塊鏈:在每個區塊上,增加區塊頭。其中記錄父區塊的hash值。通過每個區塊存儲父區塊的hash值,將所有的區塊按照順序連接起來,形成區塊鏈。

②區塊鏈如何防止交易記錄被篡改

形成區塊鏈後,篡改任一交易,會導致該交易區塊hash值和其子區塊中不同,發現篡改。

即使繼續篡改子區塊頭中hash值,會導致子區塊hash值和孫區塊中不同,發現篡改。


1.4 區塊鏈本質

①比特幣和區塊鏈本質:一個人人可見的大賬本,只記錄交易。

②核心技術:通過密碼學hash函數+數據結構,保證賬本記錄不可篡改。

③核心功能:創造信任。法幣依靠政府公信力,比特幣依靠技術。

1.5如何交易

①進行交易,需要有賬號和密碼,對應公鑰和私鑰

私鑰:一串256位的二進制數字,獲取不需要申請,甚至不需要電腦,自己拋硬幣256次就生成了私鑰

地址由私鑰轉化而成。地址不能反推私鑰。

地址即身份,代表了在比特幣世界的ID。

一個地址產生之後,只有進入區塊鏈賬本,才能被大家知道。

②數字簽名技術

簽名函數sign(張三的私鑰,轉賬信息:張三轉10元給李四) = 本次轉賬簽名

驗證韓式verify(張三的地址,轉賬信息:張三轉10元給李四,本次轉賬簽名) = True

張三通過簽名函數sign(),使用自己的私鑰對本次交易進行簽名。

任何人可以通過驗證韓式vertify(),來驗證此次簽名是否有由持有張三私鑰的張三本人發出。是返回true,反之為false。

sign()和verify()由密碼學保證不被破解。·

③完成交易

張三將轉賬信息和簽名在全網供內部。在賬戶有餘額的前提下,驗證簽名是true後,即會記錄到區塊鏈賬本中。一旦記錄,張三的賬戶減少10元,李四增加10元。

支持一對一,一對多,多對已,多對多的交易方式。


比特幣世界中,私鑰就是一切!!!

1.6中心化記賬

①中心化記賬優點:

a.不管哪個中心記賬,都不用太擔心

b.中心化記賬,效率高

②中心化記賬缺點:

a 拒絕服務攻擊

b 厭倦後停止服務

c 中心機構易被攻擊。比如破壞伺服器、網路,監守自盜、法律終止、政府幹預等

歷史 上所有有中心化機構的機密貨幣嘗試都失敗了。


比特幣解決第二個問題:如何去中心化

1.7 去中心化記賬

①去中心化:人人都可以記賬。每個人都可以保留完整的賬本。

任何人都可以下載開源程序,參與P2P網路,監聽全世界發送的交易,成為記賬節點,參與記賬。

②去中心化記賬流程

某人發起一筆交易後,向全網廣播。

每個記賬節點,持續監聽、持續全網交易。收到一筆新交易,驗證准確性後,將其放入交易池並繼續向其它節點傳播。

因為網路傳播,同一時間不同記賬節點的交一次不一定相同。

每隔10分鍾,從所有記賬節點當中,按照某種方式抽取1名,將其交易池作為下一個區塊,並向全網廣播。

其它節點根據最新的區塊中的交易,刪除自己交易池中已經被記錄的交易,繼續記賬,等待下一次被選中。

③去中心化記賬特點

每隔10分鍾產生一個區塊,但不是所有在這10分鍾之內的交易都能記錄。

獲得記賬權的記賬節點,將得到50個比特幣的獎勵。每21萬個區塊(約4年)後,獎勵減半。總量約2100萬枚,預計2040年開采完。

記錄一個區塊的獎勵,也是比特幣唯一的發行方式。

④如何分配記賬權:POW(proof of work) 方式

記賬幾點通過計算一下數學題,來爭奪記賬權。

找到某隨即數,使得一下不等式成立:

除了從0開始遍歷隨機數碰運氣之外,沒有其它解法,解題的過程,又叫做挖礦。

誰先解對,誰就得到記賬權。

某記賬節點率先找到解,即向全網公布。其他節點驗證無誤之後,在新區塊之後重新開始新一輪的計算。這個方式被稱為POW。

⑤難度調整

每個區塊產生的時間並不是正好10分鍾

隨著比特幣發展,全網算力不算提升。

為了應對算力的變化,每隔2016個區塊(大約2周),會加大或者減少難度,使得每個區塊產生的平均時間是10分鍾。

#歐易OKEx# #比特幣[超話]# #數字貨幣#

Ⅶ 區塊鏈是怎樣防止數據篡改的

區塊鏈是分布式數據存儲、點對點傳輸、共識機制、加密演算法等計算機技術的新型應用模式。

跟傳統的分布式存儲有所不同,區塊鏈的分布式存儲的獨特性主要體現在兩個方面:一是區塊鏈每個節點都按照塊鏈式結構存儲完整的數據,傳統分布式存儲一般是將數據按照一定的規則分成多份進行存儲。二是區塊鏈每個節點存儲都是獨立的、地位等同的,依靠共識機制保證存儲的一致性,而傳統分布式存儲一般是通過中心節點往其他備份節點同步數據。

沒有任何一個節點可以單獨記錄賬本數據,從而避免了單一記賬人被控制或者被賄賂而記假賬的可能性。也由於記賬節點足夠多,理論上講除非所有的節點被破壞,否則賬目就不會丟失,從而保證了賬目數據的安全性。

存儲在區塊鏈上的交易信息是公開的,但是賬戶身份信息是高度加密的,只有在數據擁有者授權的情況下才能訪問到,從而保證了數據的安全和個人的隱私。

區塊鏈提出了四種不同的共識機制,適用於不同的應用場景,在效率和安全性之間取得平衡。

基於以上特點,這種數據存儲技術是可以完美防止數據被篡改的可能性,在現實中也可以運用到很多領域之中,比我們的電子存證技術在電子合同簽署上提供了更安全可靠的保證。

Ⅷ 什麼是區塊鏈挖礦是做什麼詳細介紹區塊鏈和虛擬貨幣

在比特幣剛發行的時候人們發現了,它去中心化,不受任何中心管制;它完全開放,除了交易信息加密之外整個系統信息高度透明,技術都是開源的;安全性,只要不能控制全部節點的%51,就無法肆意修改數據,這使得它相對安全;獨立性,整個模式和比特幣不依賴任何第三方,所有節點都在系統內驗證、交換數據,不受任何干預

我們這里詳細解釋什麼是區塊鏈技術,說白了就是區塊+鏈,那什麼是 「區塊」 ?什麼又是 「鏈」 呢?

區塊就是一個賬本交易記賬由分布在不同地方的多個節點共同完成,而且每一個節點記錄的是完整的賬目,因此它們都可以參與監督交易合法性,同時也可以共同為其作證

每一個區塊包含了前一個區塊的加密散列、相應時間戳記以及交易資料(通常用默克爾樹(Merkle tree)演算法計算的散列值表示),這樣的設計使得區塊內容具有難以篡改的特性。用區塊鏈技術所串接的分布式賬本能讓兩方有效記錄交易,且可永久查驗此交易。

哈希函數h()的作用:將任意長度的字元串,轉換成固定長度(例如256位)的輸出。輸出也被稱為 哈希值 ,這個輸出不可逆

很難找到兩個不同的x和y,使得h(x) = h(y),也就是說兩個不同的輸入,會有不同的輸出。理論上說兩個不同的輸入可能會有不同的輸出,但這幾乎不可能,比方說一個無限的空間映射到一個有限的空間,肯定存在多對一的情況,理論存在,但沒有任何規律,保證你無法通過數學上的任何推斷來找到這個結果,為什麼這里是256位呢?不是更長的呢?因為256位已經足夠安全。

將賬本拆分成塊,比如一個本子的一張紙就是一個區塊,每個區塊記錄一段時間內的交易,列如10分鍾

我們把每張紙比作一個一個 區塊 ,在每個區塊的上面增加一部分內容我們把它叫做 區塊頭 ,其中記錄父區塊的哈希值,通過每個區塊儲存父區塊的哈希值,將所有區塊按順利連接起來,形成區塊鏈

1區塊 的哈希值記錄到 2區塊 的區塊頭上,如此操作每個區塊的區塊頭都記錄父區塊的哈希值,每個區塊都按照順序鏈接起來了,這就叫做區塊鏈。第一個區塊沒有區塊頭,又被稱之為創世區塊

區塊鏈是一個賬本,在賬本上只有發生了交易你的賬戶上的錢才會變多和變少,需要進行交易那麼首先需要一個賬號和密碼,就像你的銀行卡有賬號和密碼別人就可以對你進行一個轉賬,在區塊賬本上這個賬號密碼就是公鑰和私鑰

老王(已有私鑰,公鑰),想轉給張10個BTC,需要一些操作

證明是老王本人發出轉賬 簽名函數Sign (老王的私鑰 + 轉賬信息:老王轉給張三10 BTC)=本次專賬簽名
驗證是老王本人發出轉賬 驗證函數Verify (老王的地址 + 轉賬詳細:老王轉給張三10 BTC + 本次轉賬簽名)=true
一旦轉賬記錄到區塊從此誰也不能改變它,張三增加10 BTC,老王則相應減少10 BTC,整個操作都是自動的,比如你的錢包app它會幫你去做這樣的事情,app知道你的私鑰,你告訴錢包交易內容,錢包簽名向全網公布,等待其他人來驗證這筆交易

中心化記賬效率會更高,銀行、政府或者支付寶幫你記賬,都很可靠,因為他們都無法動你的錢,除非它們有你的私鑰

中心化記賬存在一些缺點

去中心化人人都可以記賬,每個人可以保留一個完整的賬本。任何人都可以下載開源程序,參與比特幣的p2p網路,監聽來自全世界發送的交易,成為記賬節點,參與記賬,假設小逸發布了一筆交易向全網廣播,A記賬節點監聽到了這筆交易,A驗證了這筆交易位true之後放入交易池繼續向其它節點傳播,因為是網路傳播,同一時間不同記賬節點的交易池不一定相同,每10分鍾,從所有記賬節點當中,按照某個方式抽取一名,驗證這個節點的交易為true之後,之後將這個選中的節點交易池中的交易記錄與自己(A)節點的交易池中的交易記錄對比一下,對比完之後會將自己交易池中已經被選中記賬節點記錄的交易刪掉,別的不動繼續記賬等待下一次被選中,每隔10分鍾就是一個循環,這個10分鍾所有記賬節點正常記賬,10分鍾之後再選出一個節點把它交易池當中的交易作為一個新的區塊,這個區塊來自所有記賬節點中我任意選擇的一個記賬節點的交易池,如此不斷循環往復

交易並不是被記錄就完成,只有當這筆交易變成了某一個區塊,這筆交易才算是真正的完成。這就是去中心化的一個記賬的完整的流程,你的交易並不會第一時間被記錄,因為p2p網路傳播需要時間,如果被選中區塊的節點還沒有接受到你的交易,交易就沒有完成。每10分鍾產生一個區塊,但不是所有在10分鍾內的交易都能記錄。10分鍾只是一個平均值

去中心化記賬的特點,有記賬權的記賬節點,每十分鍾被選中的節點它會獲得50BTC獎勵,每21萬個區塊差不多4年,獎勵減半,比特幣自發行已經兩次減半,那麼每十分鍾產生一個新的區塊這個記賬節點得到的獎勵是10.5BTC,每隔4年減半那麼可以算出BTC的總量大約為2100萬枚,預計2040年開采完,記錄一個區塊的獎勵也是比特幣唯一的發行方式,當BTC開采完之後,記賬節點可以獲得的收益就只有交易的手續費了

記賬節點通過題目來爭奪記賬權,

找到某位隨機數使得等式不成立
SHA256哈希函數 (隨機數 + 父區塊哈希值 + 交易池中的交易) 某一指定值)
從0開始遍歷隨機數碰運氣之外,沒有其它解法,解題的過程,又叫做 挖礦 ,所以解這個題目的記賬節點又被稱之為 礦工 ,你遍歷隨機數越快你拿到這個記賬權的可能性就越大,這個遍歷速度就被礦老闆們稱之為 算力 ,為了得到這個算力,礦老闆們就會購買更多且更高算力的礦機

誰先解對,誰就得到記賬權。A記賬節點率先找到解,即向全網公布,其他節點驗證無誤之後,A節點就獲得了這個區塊,獲得12.5個BTC的收益,在新區塊之後重新開始新一輪計算。這個方式被稱之為(POW)分配記賬權

一般大約10分鍾解出這個隨機數,10並不絕對,因為解開這個題目的過程本就是個碰運氣的過程,未來應對算力的變化,比特幣每隔2016個區塊,大約兩周,會加大或減小難度,使得平均產生區塊的時間是十分鍾

每一個區塊包含了前一個區塊的加密散列、相應時間戳記以及交易資料(通常用默克爾樹(Merkle tree)演算法計算的散列值表示),這樣的設計使得區塊內容具有難以篡改的特性。用區塊鏈技術所串接的分布式賬本能讓兩方有效記錄交易,且可永久查驗此交易。

和傳統存儲的數據不同的是,區塊鏈每個節點都按照塊鏈式結構存儲完整的數據,區塊鏈每個節點存儲都是獨立的、地位等同的,依靠共識機制保證存儲的一致性,而傳統分布式存儲一般是通過中心節點往其他備份節點同步數據。

麻將作為中國傳統的區塊鏈項目,四個礦工一組,先碰撞出13個數字正確哈希值的礦工可以獲得記賬權並得到獎勵。

很多人講區塊鏈是騙局比特幣是騙局,這也許是個騙局,但是這個技術已經被廣泛地承認和應用,區塊鏈涉及的密碼學知識一般人再借幾個腦子給你你也搞不懂,在一個相對理性的角度看待問題最重要,千萬別聽風就是雨。

這門技術有著不可思議的地方 在一個沒有中心沒有監管的情況下保持著絕對的秩序 這個只需由大家的共識建立的信任,比特幣創造了這個共識,在區塊鏈的世界裡每個人都是公平平等的。

Ⅸ 區塊鏈網路中的節點包括

區塊鏈網路中的節點包括手機、礦機和伺服器等等。
節點指的是區塊鏈網路中的計算機,由大量個人或者家庭用戶參與的區塊鏈,每個個人或者家庭都是區塊鏈的節點。
區塊鏈是由一個個小區塊組成,形成一個區塊節點的每個人互不相識,但彼此之間卻相互信任,因為他們也有一個共同的目的,就是都想獲得機制的獎勵。

熱點內容
電信合約套餐怎麼回事 發布:2025-06-25 04:01:37 瀏覽:316
比特幣100倍合約多少爆倉 發布:2025-06-25 04:01:32 瀏覽:860
eth什麼時候大都會測試 發布:2025-06-25 03:33:47 瀏覽:446
以太坊有代理返利機制嗎 發布:2025-06-25 03:33:04 瀏覽:374
btc礦場排行 發布:2025-06-25 03:28:02 瀏覽:124
區塊鏈首碼礦機項目 發布:2025-06-25 03:27:16 瀏覽:404
微信與數字貨幣 發布:2025-06-25 03:25:54 瀏覽:867
淘特怎麼解除合約 發布:2025-06-25 03:25:08 瀏覽:293
如何獲得少量的eth 發布:2025-06-25 03:25:04 瀏覽:458
gbc區塊鏈怎麼樣 發布:2025-06-25 03:15:16 瀏覽:51