首頁>>企業動態
一個程序員眼中的區塊鏈技術
作者:西安區塊鏈平臺開發 | 轉載 來源:西安區塊鏈平臺開發 | 時間:2018年8月24日| 點擊:0次 | 【評論】

在了解區塊鏈相關信息時(例如維基百科上的內容),我發現這些內容非常零碎和不連貫。要把這些零碎的信息整合在一起,形成一個完整的視圖需要花費大量的時間。不過現在,我想我已經知道在引入區塊鏈時要使用哪些東西,以及應該按照怎樣的順序來了解它們,以便讓開發人員能夠在 1 到 1.5 小時內看到完整的視圖。本文內容經過一定程度的簡化,如果有人對更復雜的細節感興趣,可以繼續深入探討。

非對稱加密已經存在很長一段時間了,非對稱加密包含了公鑰和私鑰。我們使用公鑰加密并使用私鑰解密,并且無法從這兩者中的一個中獲得另外一個。因此,在使用非對稱加密技術時,我可以向某人發送一條信息,比如“我轉賬 100 美元”,每個人都知道它是我發送出去的,而且中間沒有被篡改過。

假設有十個人,他們每個人都擁有一定數量(假設是美元)的新貨幣。他們每個人都確定(并確信)一個叫“X”的人支出了 30 萬美元,但 X 是否真的擁有 30 萬美元還不得而知。為了弄清楚情況,我們需要知道每個人的余額。我們只需要將他所有收入交易加起來,并扣除所有支出交易,這樣就能得到余額。為此,我們需要了解有關收入和支出的信息,于是公共賬本出現了。有了公共賬本,我們就知道某人是否真的有能力支出 30 萬美元。

比特幣:開端

還有一個問題——如果我把所有錢同時發給兩個人會怎樣?這個問題被稱為雙重支出(double spending)。當然,這兩個人不應該同時收到我賬戶里的錢。讓他們自己商量誰將收到我賬戶里的錢?這樣做不方便。通過查看時間戳來確定我把錢先轉給了誰?這樣做不保險。不過,還是有一個解決方案——對交易進行流水化。如果這樣做了,那么很明顯第一筆付款發給了 John,那么就無法再將它發給第二個人,因為我沒有更多的錢。但現在還不清楚誰將決定交易的順序。在銀行和其他集中式系統中,銀行本身就是受托人,也就是單一故障點和信任點,負責與第一個接收人溝通。

在區塊鏈中,不存在這樣的單個受托人,取而代之的是網絡中的大部分參與者(當然,這是指將整個網絡作為一個整體,因為你不能相信每個個體參與者,因為其中肯定有一些騙子)。我們假設網絡不受一個人的控制,并且大多數參與者嚴格按照自己的經濟利益行事。

但流水化交易仍然存在問題,我們還需要在網絡參與者中達成“共識”。這個問題需要通過共識算法來解決,這是區塊鏈領域的一個關鍵算法。

在討論特定的共識算法之前,先讓我們來說說臭名昭著的區塊鏈的“區塊”。區塊是一種技術度量,是批處理的一個實例,因此我們可以以“批量”的方式計算多個交易的共識,并且網絡的開銷成本可以通過多個交易來“分攤”。

區塊內交易的順序由網絡參與者(即生成該區塊的人員,也稱為“礦工”)定義,但區塊本身的順序則由共識算法來確定。共識算法已經存在了相當長一段時間。例如,多主 NoSQL 系統中的 Paxos 和 Raft 等算法就屬于共識算法,但它們并不適用于擁有數百萬個參與者的網絡。

比特幣的工作證明(proof of work,PoW)共識算法在剛開始時被認為是革命性的。許多網絡參與者(礦工)同時生成新區塊,那么就有必要確定區塊之間的順序。為了讓一個區塊成為鏈中的下一個區塊,礦工必須進行非常耗時的散列計算。對一個區塊(隨同一個隨機串,一個遞增的數字)進行持續的散列計算,直到散列值看起來像是一個符合某些條件的大數,例如包含 10 個前導零。這需要數十億次的散列操作,這一過程代表礦工“證明”該區塊的存在。但檢查礦工的工作是否正確卻十分容易——只需要再進行一次散列操作。需要注意的是,整個網絡(其中包括成千上萬的礦工)平均在 10 分鐘內(比特幣生成區塊的平均間隔)只可以生成一個區塊 。這大大減少了出現沖突的可能性,即同時有兩個或多個區塊作為下一個區塊。

但是,沖突的可能性仍然存在。于是就有了如下規則——網絡參與者接受形成最長鏈的那個區塊。

事實上,它不是一個鏈,而是一個有許多分支和鏈的有向無環圖(DAG)。鏈通常被稱為“共同歷史”(它是最長的鏈)。共識不會立即達成,至少需要在生成幾個區塊之后,所以必須等待一段時間。為了防止比特幣的雙重支出,人們通常會等待六個區塊(這需要一個小時)。

除了交易數據之外,一個區塊還包含對前一個區塊的散列值。因此,過去的某些內容不可能被修改,因為如果修改了就會使其后的所有散列無效。在挖礦過程中,你將獲得獎勵,也就是新的資金收益!否則的話,該如何將資金引入到這個系統呢?如果說資金必須發放給某人,那么這個人就變得很特別,這與去集中化的想法是相矛盾的。為挖礦者發錢似乎是一種合乎邏輯和可接受的解決方案。

順便說一些關于挖礦的事。礦工的主要工作是對新區塊進行散列計算,這里沒有使用非對稱加密技術,因為只需要在將交易添加到區塊之前檢查交易。比特幣使用 SHA-256 散列,以太坊則使用 Keccak-256。如果你是獨自挖礦,那么在生成一個區塊之前,需要很長的時間(每十分鐘產生一個區塊,而你的競爭者有成千上百萬)。因此,礦工需要聚集在一起形成礦池。在礦池中,獎勵在參與者之間通過各種方式進行分配,這意味著你有可能會更經常地獲得獎勵。在這種情況下,風險和收益都是“分散”的。隨著時間趨于無限,來自礦池開采獎勵的數學期望值(無視礦池傭金)等于獨自挖礦的數學期望值。

到目前為止,我們主要介紹的是網絡參與者之間的數據交換,并沒有深入太多細節。要記住,數據通過網絡進行點對點交換,讓每個挖礦者都能看到交易。

這就是比特幣區塊鏈技術。

智能合約和 ICO

讓我們繼續。兩個操作(加法和減法)在比特幣的每個賬戶上執行,任何人(主要是礦工)都可以檢查它們。但如果我們向帳戶添加內部變量并添加比較操作呢?假設當我積累了 1000 萬美元時,我不想再讓我的帳戶繼續接受資金,也就是說除了向賬戶添加資金的操作,還需要一定的條件。于是我們有了確定性圖靈機(每個人仍然可以檢查我的賬戶),然后是智能合同。本文所說的智能合約指的是以太坊網絡中的智能合約,因為它是目前最受歡迎的智能合約。

確定性意味著在交易參數相同和存儲初始狀態相同的情況下,我們最終會得到相同的結果以及相同的存儲變更。只有在這些條件得到滿足的情況下,網絡才能就每筆交易達成共識。我們必須明白,因為對確定性、可驗證性和去中心化的要求,智能合約孤立于外部世界。例如,它無法調用去中心化的 Web API。另外,智能合約對外界的控制也非常有限。例如,要通過智能合約來租用公寓(交換加密貨幣)仍然是很困難的,因為我仍然需要確信當我來到公寓門口時,電子鎖上面不會再套著一把老式的掛鎖。

要了解智能合約的執行結果(新的余額或存儲變更),網絡節點必須執行該合約規定的操作。在多個節點上的計算不是免費的,因此,以太坊引入了瓦斯(gas)的概念,以避免出現硬編碼加密貨幣傭金,并讓用戶可以計算運算數量及設置價格。這種結構提供了一個額外的間接層,讓用戶可以在低成本交易和快速交易之間進行選擇。

當資金被發送到合約賬戶(通過地址)時,它便觸發了回退功能,即默認的入口。與賬戶不同的是,合約有多個入口——因此可以接受參數。要修改合約(無論入口是什么),你必須將交易發送到網絡。但是,如果你只想以只讀模式查看某些內容,則可以通過使用最新的區塊鏈在本地執行此操作。另外,與賬戶不同的是,智能合約沒有私鑰。你不能直接從余額中提取資金——這可以通過使用定義好的方法來完成,當然這些方法應該有安全限制,例如檢查試圖訪問資金的用戶的地址。

最后,我們在比特幣風格的區塊鏈上獲得智能合約技術。

許多加密貨幣或所謂的“代幣”都是基于以太坊智能合約。是的,通常這種加密貨幣只是一個以太坊合約。余額是 map 形式的智能合約存儲條目,

貨幣從一個參與者到另一個參與者的轉移如下所示:

map[Alice] –= payment;map[Bob] += payment;

他們不需要自己挖礦和自己的網絡,他們可以使用以太坊的基礎設施。在以太坊中,ICO/ITO 是指加密貨幣(代幣)的以太網交換(以太坊網絡的加密貨幣)。 ERC20 標準說明了哪些方法必須在加密貨幣中定義,這要歸功于交易所對加密貨幣的支持以及以太坊錢包提供的支持。

未來的發展

除了智能合約之外,還有很多其他建立在區塊鏈基本概念之上的想法,比如“零知識證明(zero-knowledge proof)”和“自律網絡(self-regulated network)”。

零知識證明基于同名的密碼協議族,實質上,它最初用于在不解開整個對象的情況下證明該對象的所有權。例如,如果我能夠說出某個文件隨機十個字節的位置,那就可以證明我擁有這個 1GB 的文件。顯然,在這種情況下,我將只公開了 1GB 中的 10 個字節。由于 RSA 加密涉及求冪,并且

(Y ? X) ^ a = Y^a ? X^a

所以最后變成了

encrypted(Y ? X) = encrypted(Y) ? encrypted(X)

也就是說,任何人都可以檢查我的帳戶余額是否正確執行了乘法預算,而且沒有必要透露我的帳戶上有多少錢!基于這個想法,我們可以創建一種可以保護余額和支付隱私信息的加密貨幣(實際上,這樣的貨幣已經存在,如 Zcash)。

區塊鏈提供的通用設置已經包含在網絡客戶端的代碼中,例如區塊的交易數量。通常,更改它們需要網絡參與者社區接受這些更改(以代碼更新的形式),這會帶來網絡分支的風險(當一些參與者決定不接受更改并繼續使用“舊”代碼)。自我監管嘗試解決這些問題(參見 Tezos 或 EOS 區塊鏈)。這個想法的本質是,對于每一次變更,都可以使用自己的資金進行投票(當然,不會失去它們)。

結論

簡而言之,區塊鏈技術走過了以下的路徑:

交易簽名(非對稱加密技術)+ 交易的開放性 + 交易的流水化 + 到圖靈機的擴展 +(零知識證明 | 自我監管 | ……)

我已經提到,許多加密貨幣實際上是以太坊的智能合約,也就是說它們使用了以太坊區塊鏈。但除了比特幣和以太坊之外,還有其他項目——它們在細節和主要特征方面可能會有所不同,有人已經嘗試創建幾乎全新的區塊鏈,如 EOS,甚至是不同的區塊拓撲,如 Tangle 和 AElf。

此內容DOC下載 此內容PDF下載

【全文完】
關鍵詞標簽: 區塊鏈 
0 ([$-頂稿人數-$])
0 ([$-踩稿人數-$])

版權聲明:

1、弈聰軟件網站內容中凡注明“來源:XXX(非陜西弈聰網站)”的作品,轉載自其它媒體,轉載目的在于傳遞更多信息,其中涉及的網站建設,網站優化,APP開發,微信小程序開發,大數據平臺開發,區塊鏈技術開發等軟件開發技術細節并不代表本站贊同支持其觀點,并不對其真實性負責。對于署名“陜西弈聰”的作品系本站版權所有,任何人轉載請署名來源,否則陜西弈聰將追究其相關法律責任。

2、本站內容中未聲明為“原創”的內容可能源自其它網站,但并不代表本站支持其觀點,對此帶來的法律糾紛及其它責任與我方無關。如果此內容侵犯了您的權益,請聯系我方進行刪除。

天天影视综合网