當前位置:首頁 » 以太坊知識 » 以太坊全節點同步

以太坊全節點同步

發布時間: 2023-05-09 21:59:19

A. geth以太坊客戶端輕節點模式啟動怎麼與全節點啟動的geth連接

一般來說,Undefined index就是自己編寫過程中出現了的的確確的寫法問題notice一般提示關於與執行代碼沒有直接關系的錯誤,但不要忘記,notice有時會返回一些多餘的錯誤信息

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

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

既然是基於賬戶的模型,我們需要通過賬戶地址找到賬戶的狀態。就像通過銀行卡號可以找到你在銀行中的各種信息一樣。最簡單的想法當然是一個簡單的哈希表 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顆全局賬戶樹,交易樹和收據樹則是維護本區塊內的交易或收據。

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

C. 以太坊多節點私有鏈部署

假設兩台電腦A和B
要求:
1、兩台電腦要在一個網路中,能ping通
2、兩個節點使用相同的創世區塊文件
3、禁用ipc;同時使用參數--nodiscover
4、networkid要相同,埠號可以不同

1.4 搭建私有鏈
1.4.1 創建目錄和genesis.json文件
創建私有鏈根目錄./testnet
創建數據存儲目錄./testnet/data0
創建創世區塊配置文件./testnet/genesis.json

1.4.2 初始化操作
cd ./eth_test
geth --datadir data0 init genesis.json

1.4.3 啟動私有節點

1.4.4 創建賬號
personal.newAccount()
1.4.5 查看賬號
eth.accounts
1.4.6 查看賬號余額
eth.getBalance(eth.accounts[0])
1.4.7 啟動&停止挖礦
啟動挖礦:
miner.start(1)
其中 start 的參數表示挖礦使用的線程數。第一次啟動挖礦會先生成挖礦所需的 DAG 文件,這個過程有點慢,等進度達到 100% 後,就會開始挖礦,此時屏幕會被挖礦信息刷屏。
停止挖礦,在 console 中輸入:
miner.stop()
挖到一個區塊會獎勵5個以太幣,挖礦所得的獎勵會進入礦工的賬戶,這個賬戶叫做 coinbase,默認情況下 coinbase 是本地賬戶中的第一個賬戶,可以通過 miner.setEtherbase() 將其他賬戶設置成 coinbase。

1.4.8 轉賬
目前,賬戶 0 已經挖到了 3 個塊的獎勵,賬戶 1 的余額還是0:

我們要從賬戶 0 向賬戶 1 轉賬,所以要先解鎖賬戶 0,才能發起交易:

發送交易,賬戶 0 -> 賬戶 1:

需要輸入密碼 123456

此時如果沒有挖礦,用 txpool.status 命令可以看到本地交易池中有一個待確認的交易,可以使用 eth.getBlock("pending", true).transactions 查看當前待確認交易。

使用 miner.start() 命令開始挖礦:
miner.start(1);admin.sleepBlocks(1);miner.stop();

新區塊挖出後,挖礦結束,查看賬戶 1 的余額,已經收到了賬戶 0 的以太幣:
web3.fromWei(eth.getBalance(eth.accounts[1]),'ether')

用同樣的genesis.json初始化操作
cd ./eth_test
geth --datadir data1 init genesis.json

啟動私有節點一,修改 rpcport 和port

可以通過 admin.addPeer() 方法連接到其他節點,兩個節點要要指定相同的 chainID。

假設有兩個節點:節點一和節點二,chainID 都是 1024,通過下面的步驟就可以從節點二連接到節點一。

首先要知道節點一的 enode 信息,在節點一的 JavaScript console 中執行下面的命令查看 enode 信息:

admin.nodeInfo.enode
" enode://@[::]:30303 "

然後在節點二的 JavaScript console 中執行 admin.addPeer(),就可以連接到節點一:

addPeer() 的參數就是節點一的 enode 信息,注意要把 enode 中的 [::] 替換成節點一的 IP 地址。連接成功後,節點一就會開始同步節點二的區塊,同步完成後,任意一個節點開始挖礦,另一個節點會自動同步區塊,向任意一個節點發送交易,另一個節點也會收到該筆交易。

通過 admin.peers 可以查看連接到的其他節點信息,通過 net.peerCount 可以查看已連接到的節點數量。

除了上面的方法,也可以在啟動節點的時候指定 --bootnodes 選項連接到其他節點。 bootnode 是一個輕量級的引導節點,方便聯盟鏈的搭建 下一節講 通過 bootnode 自動找到節點

參考: https://cloud.tencent.com/developer/article/1332424

D. 以太坊技術系列-以太坊共識機制

區塊鏈的特點之一是去中心化。也就是節點會分布在各個地方組成分布式系統。各個節點需要對1個問題達成一致,理想情況下,只需要同步狀態即可。

如上圖所示 B節點將a=1=> a=2的狀態同步給  ACDE四個節點,這時系統中狀態變為a=2, 但如果其中有惡意節點 AE 收到通知後把a=1=>a=3修改為錯誤的節點,這個時候大家的狀態就不一致了,此時需要共識機制使系統中得到1個唯一正確的狀態。

如上面說到分布式系統存在惡意節點導致系統中狀態不一致的情況有1個比較著名的虛擬問題-拜占庭將軍問題。

拜占庭將軍問題是指,N個將軍去攻打一座城堡,如果大於一定數量的將軍同時進攻則可以攻打成功,如果小於則進攻失敗。將軍中可能存在叛徒。

這個時候有2種情況

1.如果2個叛徒都在BCDE中,那麼共識演算法需要讓其餘2個將軍聽從A的正確決策進攻城堡。

2.如果A是1個叛徒,共識演算法需要讓BCDE中剩餘的3個忠誠將軍保持一致。

這個問題有很多種解法,大家有興趣可以自行查閱(推薦學習PBFT),我們重點來看看以太坊中目前正在使用的Nakamoto 共識和將要使用的 Casper Friendly Finality Gadget共識是如何解決拜占庭將軍問題的。

說到Nakamoto共識和Casper Friendly Finality Gadget共識可能大家不太熟悉,但他們的部分組成應該都比較熟悉-POW(工作量證明)和POS(權益證明)。

POW或POS稱之為Sybil抗性機制,為什麼需要Sybil抗性機制呢,剛剛我們說到拜占庭將軍問題,應該很容易看出惡意節點越多,達成正確共識的難度也就越大,Sybil攻擊就是指1個攻擊者可以偽裝出大量節點來進行攻擊,Sybil抗性是指抵禦這種攻擊能力。

POW通過讓礦工或驗證者投入算力,POS通過讓驗證者質押以太坊,如果攻擊者要偽裝多個節點攻擊則必將投入大量的算力或資產,會導致攻擊成本高於收益。在以太坊中保障的安全性是除非攻擊者拿到整個系統51%算力或資產否則不可能進攻成功。

在解決完Sybil攻擊後,通過選取系統中的最長鏈作為大家達成共識的鏈。

很多人平時為了簡化將pow和pos認為是共識機制,這不夠准確,但也說明了其重要作用,我們接下來分析pow和pos。

通過hash不可逆的特性,要求各個礦工不停地計算出某個值的hash符合某一特徵,比如前多少位是000000,由於這個過程只能依賴不停的試錯計算hash,所以是工作量證明。計算完成後其他節點驗證的值符合hash特徵非常容易驗證。驗證通過則成為成為合法區塊(不一定是共識區塊,需要在最長鏈中)。

以太坊中的挖礦演算法用到2個數據集,1個小數據集cache,1個大數據集DAG。這2個數據集會隨著區塊鏈中區塊增多慢慢變大,初始大小cache為16M DAG為1G。

我們先來看這2個數據集的生成過程

cache生成規則為有1個種子隨機數seed,cache中第1個元素對seed取hash,後面數組中每個元素都是前1個元素取hash獲得。

DAG生成規則為 找到cache中對應的元素後 根據元素中的值計算出下次要尋找的下標,循環256次後獲得cache中最終需要的元素值進行hash計算得到DAG中元素的值。

然後我們再看看礦工如何進行挖礦以及輕節點如何驗證

礦工挖礦的過程為,選擇Nonce值映射到DAG中的1個item,通過item中的值計算出下次要找的下標,循環64次,得到最終item,將item中的值hash計算得到結果,結果和target比較,符合條件

則證明挖到區塊,如果不符合則更換nonce繼續挖礦。礦工在挖礦過程中需要將1G的DAG讀取到內存中。

輕節點驗證過程和礦工挖礦過程基本一致,

將塊頭裡面的Nonce值映射到DAG中的1個item,然後通過cache數組計算出該item的值,通過item中的值計算出下次要找的下標,循環64次,得到最終item,將item中的值hash計算得到結果,結果和target比較,符合條件則驗證通過。輕節點在驗證過程中不需要將1G的DAG讀取到內存中。每次用到DAG的item值都使用cache進行計算。

以太坊為什麼需要這2個不同大小的數組進行輔助hash運算呢,直接進行hash運算會有什麼問題?

如果只是進行重復計算會導致挖礦設備專業化,減少去中心化程度。因為我們日常使用的計算機內存和計算力是都需要的,如果挖礦只需要hash運算,挖礦設備則會設計地擁有超高算力,但對內存可以縮小到很小甚至沒有。所以我們選用1G的大內存增加對內存訪問的頻率,增加挖礦設備對內存訪問需求,從而更接近於我們日常使用的計算機。

我們看看在Nakamoto共識是如何解決拜占庭將軍問題的。首先看看區塊鏈中的拜占庭將軍問題是什麼?

區塊鏈中需要達成一致的是哪條鏈為主鏈,雖然採用了最長鏈原則,但由於分叉問題,還是會帶來拜占庭將軍問題。

本來以太坊pow目標是抵抗51%以下的攻擊,但如上圖如果惡意節點沿著自己挖出的區塊不斷挖礦,由於主鏈上有分叉存在,惡意節點不需要達到51%算力就可以超過主鏈進而成為新的主鏈,為此以太坊使用了ghost協議給上圖中的B1和C1也分配出塊獎勵,盡快合並到主鏈中,這樣主鏈長度(按照合並後的總長度算,長度只是抽象概念,以太坊中按照區塊權重累加)還是大於惡意節點自己挖礦的。

網路中的用戶通過質押一定數量的以太坊成為驗證者。每次系統從這些驗證者從隨機選擇出區塊創建者,其餘驗證者去驗證創建出的區塊是否合法。驗證者會獲得出塊獎勵,沒有被選中的區塊不進行驗證則會被扣除一定質押幣,如果進行錯誤驗證則會被扣除全部質押幣。

如上圖,權益證明在每隔一定區塊的地方設置一個檢查點,對前面的區塊進行驗證,2/3驗證者通過則驗證通過,驗證通過則該區塊所在鏈成為最長合法鏈(不能被回滾)。

我們簡化地只分析了權益證明本身,在以太坊中權益證明較為復雜的點在於和分片機制結合在一起時的運行流程,這部分會在後面單獨將分片機制的一篇文章中詳述。

本篇文章主要討論了共識機制是解決分布式系統中的拜占庭將軍問題,以及分析了以太坊中的共識機制一般包括最長鏈選擇和一種sybil抗性機制(pow或pos)。重點分析了pow和pos的流程以及設計思想。後續將開始重點討論智能合約的部分。

E. 小狐狸錢包eth取消交易要手續費

以太坊錢包是一種幫助您與您的以太坊賬戶進行交互的工具。可以把它想像成一個背後沒有銀行的互聯網銀行應用。通過錢包您可以查看余額,發送交易或者鏈接到各種應用。您的錢包只是管理您以太坊賬戶的工具。這意味著您可以隨時更換您的錢包應用。許多錢包應用都支持同時管理您的多個以太坊賬戶。是您,而不是錢包實際控制您的資產。它們只是管理您資產的工具。
第一個要說的當然就是Ethereum官方錢包+瀏覽器Mist。Mist是一個全節點錢包(全節點錢包通俗的來說就是同步了全部的以太坊區塊信息的錢包)。也就是說打開錢包後,電腦會自動同步全部的以太坊區塊信息,如果設備和網路的條件過關的情況下,目前(17年9月8日)大概需要半天左右的時間。
優勢:安全度高,不需要經過第三方發起交易,節點未同步完成之前無法查看地址余額
劣勢:無法調整GasPrice對網路要求高,需要連接節點,才能發起交易

F. [以太坊源碼分析][p2p網路07]:同步區塊和交易

同步,也就是區塊鏈的數據的同步。這里分為兩種同步方式,一是本地區塊鏈與遠程節點的區塊鏈進行同步,二是將交易均勻的同步給相鄰的節點。

01.同步區塊鏈
02.同步交易
03.總結

ProtocolManager 協議管理中的 go pm.syncer() 協程。

先啟動了 fetcher ,輔助同步區塊用的。然後等待不同的事件觸發不同的同步方式。

同步的過程調用 pm.synchronise 方法來進行。

ProtocolManager 協議管理中的 go pm.txsyncLoop() 協程。

同步交易循環 txsyncLoop 分為三個部分的內容:

發送交易的函數。

挑選函數。

三個監聽協程的 case 。

G. 以太坊幣到什麼錢包最安全

Parity。
Parity錢包由以太坊核心開發者參與開發,開發團隊和以太坊基金會保持著千絲萬縷的聯系,可以看作是以太坊的准官方錢包。
Parity擁有市面上最強大的功能和極強的安全性。不過目前Parity沒有移動端產品,同時需要同步全節點,需要一定的專業知識,適合對技術有一定掌握的用戶。

H. 走進以太坊網路

目錄


術語「以太坊節點」是指以某種方式與以太坊網路交互的程序。從簡單的手機錢包應用程序到存儲整個區塊鏈副本的計算機,任何設備均可扮演以太坊節點。

所有節點都以某種方式充當通信點,但以太坊網路中的節點分為多種類型。


比特幣不同,以太坊找不到任何程序作為參考實施方案。在比特幣生態系統中, 比特幣核心 是主要節點軟體,以太坊黃皮書則提出了一系列獨立(但兼容)的程序。目前最流行的是Geth和Parity。


若要以允許獨立驗證區塊鏈數據的方式連接以太坊網路,則應使用之前提到的軟體運行全節點。

該軟體將從其他節點下載區塊,並驗證其所含交易的正確性。軟體還將運行調用的所有智能合約,確保接收的信息與其他節點相同。如果一切按計劃運行,我們可以認為所有節點設備均存儲相同的區塊鏈副本。

全節點對於以太坊的運行至關重要。如果沒有遍布全球的眾多節點,網路將喪失其抗審查性與去中心化特性。


通過運行全節點,您可以直接為網路的 健康 和安全發展貢獻一份力量。然而,全節點通常需要使用獨立的機器完成運行和維護。對於無法(或單純不願)運行全節點的用戶,輕節點是更好的選擇。

顧名思義,輕節點均為輕量級設備,可顯著降低資源和空間佔用率。手機或筆記本電腦等攜帶型設備均可作為輕節點。然而,降低開銷也要付出代價:輕節點無法完全實現自給自足。它們無法與整條區塊鏈同步,需要全節點提供相關信息。

輕節點備受商戶、服務供應商和用戶的青睞。在不必使用全節點並且運行成本過高的情況下,它們廣泛應用於支收付款。

挖礦節點既可以是全節點客戶端,也可以是輕節點客戶端。「挖礦節點」這個術語的使用方式與比特幣生態系統不同,但依然應用於識別參與者。

如需參與以太坊挖礦,必須使用一些附加硬體。最常見的做法是構建 礦機 。用戶通過礦機將多個GPU(圖形處理器)連接起來,高速計算哈希數據。

礦工可以選擇兩種挖礦方案:單獨挖礦或加入礦池。 單獨挖礦 表示礦工獨自創建區塊。如果成功,則獨享挖礦獎勵。如果加入 礦池 ,眾多礦工的哈希算力會結合起來。出塊速度得以提升,但挖礦獎勵將由眾多礦工共享。


區塊鏈最重要的特性之一就是「開放訪問」。這表明任何人均可運行以太坊節點,並通過驗證交易和區塊強化網路。

與比特幣相似,許多企業都提供即插即用的以太坊節點。如果只想啟動並運行單一節點,這種設備無疑是最佳選擇,缺點是必須為便捷性額外付費。

如前文所述,以太坊中存在眾多不同類型的節點軟體實施方案,例如Geth和Parity。若要運行個人節點,必須掌握所選實施方案的安裝流程。

除非運行名為 歸檔節點 的特殊節點,否則消費級筆記本電腦足以支持以太坊全節點正常運行。不過,最好不要使用日常工作設備,因為節點會嚴重拖慢運行速度。

運行個人節點時,建議設備始終在線。倘若節點離線,再次聯網時可能耗費大量的時間進行同步。因此,最好選擇造價低廉並且易於維護的設備。您甚至可以通過Raspberry Pi運行輕節點。


隨著網路即將過渡到權益證明機制,以太坊挖礦不再是最安全的長期投資方式。過渡成功後,以太坊礦工只能將挖礦設備轉入其他網路或直接變賣。

鑒於過渡尚未完成,參與以太坊挖礦仍需使用特殊硬體(例如GPU或ASIC)。若要獲得可觀收益,則必須定製礦機並尋找電價低廉的礦場。此外,還需創建以太坊錢包並配置相應的挖礦軟體。這一切都會耗費大量的時間和資金。在參與挖礦前,請認真考量自己能否應對各種挑戰。(國內嚴禁挖礦,切勿以身試法)


ProgPow代表 程序化工作量證明 。這是以太坊挖礦演算法Ethash的擴展方案,旨在提升GPU的競爭力,使其超過ASIC。

在比特幣和以太坊社區,抗ASIC多年來一直是飽受爭議的話題。在比特幣網路中,ASIC已經成為主要的挖礦力量。

在以太坊中,ASIC並不是主流,相當一部分礦工仍然使用GPU。然而,隨著越來越多的公司將以太坊ASIC礦機引入市場,這種情況很快就會改變。然而,ASIC到底存在什麼問題呢?

一方面,ASIC明顯削弱網路的去中心化。如果GPU礦工無法盈利,不得不停止挖礦,哈希率最終就會集中在少數礦工手中。此外,ASIC晶元的開發成本相當昂貴,坐擁開發能力與資源的公司屈指可數。這種現狀有可能導致以太坊挖礦產業集中在少數公司手中,形成一定程度的行業壟斷。

自2018年以來,ProgPow的集成一直飽受爭議。有些人認為,它有益於以太坊生態系統的 健康 發展。另一些人則持反對態度,認為它可能導致硬分叉。隨著權益證明機制的到來,ProgPoW能否應用於網路仍然有待觀察。


以太坊與比特幣是一樣,均為開源平台。所有人都可以參與協議開發,或基於協議構建應用程序。事實上,以太坊也是區塊鏈領域目前最大的開發者社區。

Andreas Antonopoulos和Gavin Wood出品的 Mastering Ethereum ,以及Ethereum.org推出的 開發者資源 等都是新晉開發者理想的入門之選。


智能合約的概念於20世紀90年代首次提出。其在區塊鏈中的應用帶來了一系列全新挑戰。2014年由Gavin Wood提出的Solidity已經成為開發以太坊智能合約的主要編程語言,其語法與Java、JavaScript以及C++類似。

從本質上講,使用Solidity語言,開發者可以編寫在分解後可由以太坊虛擬機(EVM)解析的指令。您可以通過Solidity GitHub詳細了解其工作原理。

其實,Solidity語言並非以太坊開發者的唯一選擇。Vyper也是一種熱門的開發語言,其語法更接近Python。

I. 輕用戶是什麼意思

什麼是輕客戶端?為什麼你需要了解它

播報文章

在以太坊的案例中,過去只有一種類型的節點,現在稱為全節點。這個軟體負責驗證和轉播網路上的交易和區塊。由於無信任環境(開放的互聯網)和區塊鏈的性質,每個全節點需要下載並驗證每個區塊,所以就是在每個區塊中驗證每一筆交易。

Parity Ethereum 和 Geth 這兩個最受歡迎的以太坊客戶端,今天都可以在一台中等功率的筆記本電腦上運行。然而,下載和驗證整個區塊鏈的區塊是需要時間和資源的。例如,現在需要使用 SSD 來完全同步以太坊區塊鏈。HDD 無法跟上每秒所需的輸入/輸出操作。

全節點使用案例

現在,組織和個人運行全節點是因為他們的業務需要。想想礦工、區塊瀏覽器、交易所。個人用戶可能希望運行全節點,因為這是與區塊鏈交互的最安全方式。在一個更小的范圍內,他們也可能是純粹的利他主義來幫助網路。7*24 小時全天候的運行一個全節點需要良好的知識和資源水平,大多數用戶不願意投資是可以理解的。除了礦工,沒有什麼內置的激勵來運行一個全節點,盡管這部分基礎設施對網路至關重要。

因此,大多數與區塊鏈交互的用戶,不管是否自願,都會使用一個中心的基礎設施。最流行的軟體錢包默認依賴於第三方託管的節點。這些客戶端連接到遠程節點,並以非密碼驗證的方式完全信任其響應。它的積極方面顯然是增強了用戶體驗,因為這些錢包的用戶不需要運行自己的節點。但是,它們被迫信任第三方節點。默認情況下,Metamask、MyEtherWallet 和 MyCrypto 連接到遠程節點,但如果用戶願意,仍然允許他們連接到自己的本地節點。這不是 Jaxx 或 Exos 錢包的情況,它們默認連接到遠程節點,而沒有連接到用戶自己的本地節點的選項。這里沒有提到移動錢包,因為手機無法運行全節點。

像 Infura 這樣的公司致力於運行全節點,並免費提供給那些需要它們的人。抽象出同步一個全節點的麻煩,允許任何用戶輕松地訪問區塊鏈。這樣的解決方案有助於讓更多用戶能夠訪問以太坊。然而,盡管這一舉措是對生態系統的一個重大補充,但它代表了一個中心化的單一失敗點,與去中心化的區塊鏈理念背道而馳。直到幾個月前,錢包開發商還沒有其他選擇。

「我們的目標是創建一個兼容不同程度『輕』的協議,從幾乎不存儲任何內容的客戶端到幾乎存儲所有內容的客戶端。」

— PIP, Parity Light Protocol(https://wiki.parity.io/The-Parity-Light-Protocol-%28PIP%29)

輕量級替代方案:輕客戶端

輕客戶端或輕節點是連接到全節點與區塊鏈交互的軟體。與全節點對應節點不同,輕節點不需要運行 24/7 或讀寫區塊鏈上的大量信息。事實上,輕客戶端並不直接與區塊鏈交互,而是使用全節點作為中介。輕客戶端依賴於全節點去執行許多操作,從請求最新的區塊頭到請求帳戶中的余額。

輕客戶端協議的設計方式允許它們以最小信任的方式與全節點交互。這是一個需要理解的關鍵方面,因此讓我們回顧一下以太坊區塊鏈的基礎知識:

1. 普通用戶使用全節點、輕節點或受信任的遠程節點在網路上發送交易。

2. 全節點從網路上的對等節點接收交易,檢查這些交易的有效性,並將它們廣播到網路。

3. 礦工是連接到特定軟體的全節點。他們像一個普通的全節點一樣從網路上接收和驗證交易,但是會額外投入大量的精力來尋找問題的解決方案,才會被允許生成下一個區塊。礦工使用的全節點通過應該將哪個區塊添加到區塊鏈並構建在其上達成共識。任何在其上構建了至少 10 個塊的塊都被認為是安全的,因為它包含的交易被還原的概率非常低。

現在,回到我們的輕客戶端。作為起點,輕客戶端需要下載區塊鏈的區塊頭。輕客戶端不需要為它對全節點的每個請求去信任全節點。這是因為區塊頭包含一個名為 Merkle 樹根的信息。Merkle 樹根就是區塊鏈上有賬戶余額和智能合約存儲的所有信息的指紋。如果有任何微小的信息改變,這個指紋也會改變。假設大多數礦工都是誠實的,那麼區塊頭和他們所包含的指紋就被認為是有效的。輕客戶端可能需要從全節點請求信息,例如特定帳戶的余額。輕客戶端知道每個區塊的指紋,就可以驗證全節點給出的答案是否與其擁有的指紋匹配。這是一個強有力的工具,可以在事先不知情的情況下證明信息的真實性。

由於輕客戶端需要發送多個請求來執行簡單的操作,因此所需的總體網路帶寬高於全節點的帶寬。另一方面,所需的資源和存儲量比全節點的資源和存儲量低幾個數量級,同時實現了非常高的安全級別。只需要大約 100MB 的存儲空間和較低的計算能力,輕節點就可以在移動設備上運行!這意味著手機可以以去中心化的方式訪問區塊鏈。

因為只需要一個全節點的一小部分信息,所以一個輕節點可以更快地與區塊鏈同步。目前,將整個以太坊主網區塊鏈同步,輕客戶端大約只需要一個小時,但節點同步超過幾秒對任何應用程序來說都太多了。為輕客戶端開發的解決方案可以快速與區塊鏈頂部同步,盡管這些解決方案通常需要權衡。目前,輕客戶端在其代碼中內置了一個可信的區塊鏈檢查點。正因為如此,客戶端只需要下載最新的區塊頭文件,就可以在幾秒鍾內實現同步。輕客戶端用戶信任客戶端開發人員集成有效的檢查點。這種折衷被認為是可以接受的,因為用戶已經需要信任客戶端實現的開發人員。為了以去中心化的方式快速執行同步,Parity Technologie 目前開發了一種替代解決方案,允許輕客戶端以與全節點類似的方式執行扭曲同步(https://wiki.parity.io/Warp-Sync)。

未來,輕客戶端會遍布各地。 — Marty McFly

輕客戶端的挑戰

輕客戶端非常適合主流應用,例如發送一些交易和驗證帳戶余額。對輕客戶端的主要批評是,輕客戶端不能直接幫助網路。它們不驗證除自己需要的信息以外的任何其他信息,也不從網路向其他對等節點提供或轉播信息,它們使用來自全節點的資源,而不提供任何的回報。

與全節點相比,輕客戶端提供了更好的最終用戶體驗,同時允許最終用戶以去中心化的和安全的方式訪問區塊鏈。關鍵是要找到一種激勵個人和機構的方式去運行全節點、服務輕節點、懲罰服務壞數據的惡意全節點。使輕客戶端可持續發展的一種方法是讓他們對全節點發出的每個請求執行小額支付。在不久的將來,輕客戶端將在以太坊分片中扮演重要角色,讓驗證節點快速同步不同的分片。輕客戶端還可用於報告惡意參與者(驗證節點或 plasma 許可權)。輕客戶端對全節點的激勵是一個活躍的研究領域,因為激勵是生態系統穩定的關鍵。

有一些很有前途的想法可以讓輕客戶端快速同步,同時避免前面提到的折衷方案。一種想法是允許全節點提供最新的已知區塊頭的零知識證明(例如,zk-STARK https://eprint.iacr.org/2018/046.pdf)。然後,輕客戶端可以驗證它並與鏈的頂部同步,而無需事先知道區塊鏈的狀態。

總之,在短期內,輕客戶端將成為去中心化應用程序的骨幹,這對用戶友好的分布式生態系統來說是一個非常好的消息。

熱點內容
創客區塊鏈是什麼 發布:2024-11-18 10:34:12 瀏覽:278
冒險與挖礦凜孫策 發布:2024-11-18 10:12:40 瀏覽:273
怎麼算合法使用區塊鏈 發布:2024-11-18 09:45:41 瀏覽:522
挖礦難度全網算力關系 發布:2024-11-18 09:40:35 瀏覽:333
新華社最新的元宇宙新聞 發布:2024-11-18 09:19:29 瀏覽:564
以太坊幣圈信息預測 發布:2024-11-17 23:13:49 瀏覽:291
最新手機挖礦軟體下載 發布:2024-11-17 23:04:22 瀏覽:512
禁比特幣平台 發布:2024-11-17 22:31:16 瀏覽:286
區塊鏈pdf新浪博客 發布:2024-11-17 22:27:48 瀏覽:531
eth要轉成pos還要等6年 發布:2024-11-17 22:21:49 瀏覽:960