原文地址 https://mbinary.coding.me/introduction-to-block-chain.html#more
本文整理自 <<區(qū)塊鏈原理,設(shè)計與應(yīng)用 >>
分布式記賬
原理
商業(yè)活動參與者首先要尋找一個多方均信任的第三方來記賬, 確保交易的準確.
可以很容易設(shè)計出一個簡單粗暴的分布式記賬結(jié)構(gòu),如下圖。多方均允許對賬本進行任意讀寫,一旦發(fā)生新的交易即追加到賬本上。這種情況下,如果參與多方均誠實可靠,則該方案可以正常工作;但是一旦有參與方惡意篡改已發(fā)生過的記錄,則無法確保賬本記錄的正確性。
為防止惡意篡改, 可以引入驗證機制. 使用數(shù)字摘要技術(shù)(digital digest)
. 每當有新交易記錄被追加到賬本上, 記錄前面交易歷史的 hash 值, 此后每個時刻, 參與者都可以重新計算 hash, 看是否與記錄的 hash 匹配. 不匹配說明修改過, 也可以容易地定位修改的交易記錄了
不必要每次都計算前面所有歷史的 hash, 可以計算 上次的 hash 加上當前交易 的 內(nèi)容的 hash
這正是一個區(qū)塊鏈結(jié)構(gòu).
重要性
分布式記賬問題為何重要?可以類比互聯(lián)網(wǎng)出現(xiàn)后對社會帶來的重大影響。
互聯(lián)網(wǎng)是人類歷史上最大的分布式互聯(lián)系統(tǒng)。作為信息社會的基礎(chǔ)設(shè)施,它很好地解決了傳遞信息的問題。然而,由于早期設(shè)計上的缺陷,互聯(lián)網(wǎng)無法確保所傳遞信息的可靠性,這大大制約了人們利用互聯(lián)網(wǎng)進行大規(guī)模協(xié)作的能力。而以區(qū)塊鏈為基礎(chǔ)的分布式賬本科技則可能解決傳遞可信信息的問題。這意味著基于分布式賬本科技的未來商業(yè)網(wǎng)絡(luò),將成為新一代的文明基礎(chǔ)設(shè)施——大規(guī)模的協(xié)作網(wǎng)絡(luò)。
分布式賬本科技的核心價值在于為未來多方協(xié)同網(wǎng)絡(luò)提供可信基礎(chǔ)。區(qū)塊鏈引發(fā)的記賬科技
的演進,將促使商業(yè)協(xié)作和組織形態(tài)發(fā)生變革。
區(qū)塊鏈的特點
- 分布式容錯性:分布式網(wǎng)絡(luò)極其 robust , 能夠容忍部分節(jié)點的異常狀態(tài);
- 不可篡改性:一致提交后的數(shù)據(jù)會一直存在,不可被銷毀或修改;
- 隱私保護性:密碼學保證了數(shù)據(jù)隱私,即便數(shù)據(jù)泄露,也無法解析。
可能帶來的業(yè)務(wù)特性
- 可信任性:區(qū)塊鏈技術(shù)可以提供天然可信的分布式賬本平臺,不需要額外第三方中介機構(gòu)參與;
- 降低成本:跟傳統(tǒng)技術(shù)相比,區(qū)塊鏈技術(shù)可能帶來更短的時間、更少的人力,降低維護成本;
- 增強安全:區(qū)塊鏈技術(shù)將有利于安全、可靠的審計管理和賬目清算,減少犯罪風險。
區(qū)塊鏈的定義
狹義上,區(qū)塊鏈是一種以區(qū)塊為基本單位的鏈式數(shù)據(jù)結(jié)構(gòu),區(qū)塊中利用數(shù)字摘要對之前的交易歷史進行校驗,適合分布式記賬場景下防篡改和可擴展性的需求。
廣義上,區(qū)塊鏈還指代基于區(qū)塊鏈結(jié)構(gòu)實現(xiàn)的分布式記賬技術(shù),還包括分布式共識、隱私與安全保護、點對點通信技術(shù)、網(wǎng)絡(luò)協(xié)議、智能合約等。
區(qū)塊鏈的原理
- 交易(transaction): 一次對賬本的操作,導致賬本狀態(tài)的一次改變.
- 區(qū)塊(block): 記錄一段時間內(nèi)發(fā)生的所有交易和狀態(tài)結(jié)果.,是對當前賬本狀態(tài)的一次共識
- 鏈(chain): 由區(qū)塊按照發(fā)生順序串聯(lián)而成,是整個邦本狀態(tài)變化的日志記錄
在實現(xiàn)上, 首先假設(shè)存在一個分布式的數(shù)據(jù)記錄賬本,只允許添加,不允許刪除.
例如比特幣
首先,比特幣客戶端發(fā)起一項交易,廣播到比特幣網(wǎng)絡(luò)中并等待確認。網(wǎng)絡(luò)中的節(jié)點會將一些收到的等待確認的交易記錄打包在一起(此外還要包括前一個區(qū)塊頭部的哈希值等信息),組成一個候選區(qū)塊。然后,試圖找到一個 nonce 串(隨機串)放到區(qū)塊里,使得候選區(qū)塊的哈希結(jié)果滿足一定條件(比如小于某個值)。這個nonce 串的查找需要一定的時間進行計算嘗試。
一旦節(jié)點算出來滿足條件的 nonce 串,這個區(qū)塊在格式上就被認為是“合法”了,就可以嘗試在網(wǎng)絡(luò)中將它廣播出去。其它節(jié)點收到候選區(qū)塊,進行驗證,發(fā)現(xiàn)確實符合約定條件了,就承認這個區(qū)塊是一個合法的新區(qū)塊,并添加到自己維護的區(qū)塊鏈上。當大部分節(jié)點都將區(qū)塊添加到自己維護的區(qū)塊鏈結(jié)構(gòu)上時,該區(qū)塊被網(wǎng)絡(luò)接受,區(qū)塊中所包括的交易也就得到確認。
這種基于算力尋找 nonce 串的共識機制成為 PoW(Proof of Work). (還有很多其他共識機制 PoX, 如 PoS (stake)...)
區(qū)塊鏈的演化
比特幣區(qū)塊鏈支持簡單的腳本計算, 僅限于數(shù)字畫筆相關(guān)的處理. 還可以將區(qū)塊鏈上執(zhí)行的處理過程進一步泛化,即提供 智能合約 Smart Contract. 由此提供除貨幣交易功能外更靈活的合約共功能,執(zhí)行更為復雜的操作.
關(guān)鍵問題與挑戰(zhàn)
抗抵賴與隱私保護
- 怎么防止交易記錄被篡改
- 怎么證明交易雙方的身份
- 怎么保護交易雙方的隱私
分布式共識
指標: 容錯的結(jié)點比例, 決策收斂速度, 出錯后的恢復,動態(tài)特性等.
擴展性
不能簡單得增加結(jié)點來擴展整個系統(tǒng)的處理能力.
對于比特幣和以太坊區(qū)塊鏈而言,網(wǎng)絡(luò)中每個參與維護的核心節(jié)點都要保持一份完整的存儲,并且進行智能合約的處理。此時,整個網(wǎng)絡(luò)的總存儲和計算能力,取決于單個節(jié)點的能力。甚至當網(wǎng)絡(luò)中節(jié)點數(shù)過多時,可能會因為一致性的達成過程延遲降低整個網(wǎng)絡(luò)的性能。尤其在公有網(wǎng)絡(luò)中,由于大量低性能處理節(jié)點的存在,問題將更加明顯。
要解決這個問題,根本上是放松對每個節(jié)點都必須參與完整處理的限制(當然,網(wǎng)絡(luò)中節(jié)點要能合作完成完整的處理),這個思路已經(jīng)在超級賬本中得到應(yīng)用;同時盡量減少核心層的處理工作。
在聯(lián)盟鏈模式下,還可以專門采用高性能的節(jié)點作為核心節(jié)點,用相對較弱的節(jié)點僅作為代理訪問節(jié)點。
數(shù)據(jù)庫和存儲系統(tǒng)
區(qū)塊鏈網(wǎng)絡(luò)中的大量信息需要寫到文件和數(shù)據(jù)庫中進行存儲。
預(yù)測將可能出現(xiàn)更具針對性的“塊數(shù)據(jù)庫(BlockDB)”,專門服務(wù)類似區(qū)塊鏈這樣的新型數(shù)據(jù)業(yè)務(wù),其中每條記錄將包括一個完整的區(qū)塊信息,并天然地跟歷史信息進行關(guān)聯(lián),一旦寫入確認則無法修改。所有操作的最小單位將是一個塊。為了實現(xiàn)這種結(jié)構(gòu),需要原生支持高效的簽名和加解密處理。
認識上的誤區(qū)
區(qū)塊鏈不等于數(shù)據(jù)庫。雖然區(qū)塊鏈也可以用來存儲數(shù)據(jù),但它要解決的核心問題是多方的互信問題。單純從存儲數(shù)據(jù)角度,它的效率可能不高,不建議把大量的原始數(shù)據(jù)放到區(qū)塊鏈系統(tǒng)上。
應(yīng)用場景
金融服務(wù)
區(qū)塊鏈帶來的潛在優(yōu)勢包括降低交易成本、減少跨組織交易風險等。
征信管理
區(qū)塊鏈平臺將可能提供前所未有規(guī)模的相關(guān)性極高的數(shù)據(jù),這些數(shù)據(jù)可以在時空中準確定位,并嚴格關(guān)聯(lián)到用戶。因此,基于區(qū)塊鏈提供數(shù)據(jù)進行征信管理,將大大提高信用評估的準確率,同時降低評估成本
另外,跟傳統(tǒng)依靠人工的審核過程不同,區(qū)塊鏈中交易處理完全遵循約定自動化執(zhí)行。基于區(qū)塊鏈的信用機制將天然具備穩(wěn)定性和中立性。
權(quán)屬管理
區(qū)塊鏈技術(shù)可以用于產(chǎn)權(quán)、版權(quán)等所有權(quán)的管理和追蹤。其中包括汽車、房屋、藝術(shù)品等各種貴重物品的交易等,也包括數(shù)字出版物,以及可以標記的數(shù)字資源。
目前權(quán)屬管理領(lǐng)域存在的幾個難題是:
- 物品所有權(quán)的確認和管理;
- 交易的安全性和可靠性保障;
- 必要的隱私保護機制。
利用區(qū)塊鏈技術(shù),物品的所有權(quán)是寫在數(shù)字鏈上的,誰都無法修改。并且一旦出現(xiàn)合同中約定情況,區(qū)塊鏈技術(shù)將確保合同能得到準確執(zhí)行。這能有效減少傳統(tǒng)情況下糾紛仲裁環(huán)節(jié)的人工干預(yù)和執(zhí)行成本
資源共享
相比于依賴于中間方的資源共享模式,基于區(qū)塊鏈的模式有潛力更直接的連接資源的供給方和需求方,其透明、不可篡改的特性有助于減小摩擦。
貿(mào)易管理
區(qū)塊鏈技術(shù)可以幫助自動化國際貿(mào)易和物流供應(yīng)鏈領(lǐng)域中繁瑣的手續(xù)和流程。基于區(qū)塊鏈設(shè)計的貿(mào)易管理方案會為參與的多方企業(yè)帶來極大的便利。另外,貿(mào)易中銷售和法律合同的數(shù)字化、貨物監(jiān)控與檢測、實時支付等方向都可能成為創(chuàng)業(yè)公司的
物聯(lián)網(wǎng)
物聯(lián)網(wǎng)絡(luò)中每一個設(shè)備分配地址,給該地址所關(guān)聯(lián)一個賬戶,用戶通過向賬戶中支付費用可以租借設(shè)備,以執(zhí)行相關(guān)動作,從而達到租借物聯(lián)網(wǎng)的應(yīng)用。
典型的應(yīng)用包括 PM2.5 監(jiān)測點的數(shù)據(jù)獲取、溫度檢測服務(wù)、服務(wù)器租賃、網(wǎng)絡(luò)攝像頭數(shù)據(jù)調(diào)用等等。
另外,隨著物聯(lián)網(wǎng)設(shè)備的增多、邊沿計算需求的增強,大量設(shè)備之間形成分布式自組織的管理模式,并且對容錯性要求很高。區(qū)塊鏈自身分布式和抗攻擊的特點可以很好地融合到這一場景中。
分布式系統(tǒng)
一致性問題(Consistency)
對于系統(tǒng)中的多個服務(wù)結(jié)點,給定一系列操作, 在協(xié)議(某種共識算法)保障下, 使得它們對處理結(jié)果達成某種程度的一致
存在的問題
- 節(jié)點之間的網(wǎng)絡(luò)通訊是不可靠的,包括任意延遲和內(nèi)容故障;
- 節(jié)點的處理可能是錯誤的,甚至節(jié)點自身隨時可能宕機;
- 同步調(diào)用會讓系統(tǒng)變得不具備可擴展性。
解決的基本思想: 將可能引發(fā)不一致的并行操作串行化
理想一致性
分布式系統(tǒng)一致性應(yīng)滿足
- 可終止性(Termination):一致的結(jié)果在有限時間內(nèi)能完成;
- 共識性(Consensus):不同節(jié)點最終完成決策的結(jié)果應(yīng)該相同;
- 合法性(Validity):決策的結(jié)果必須是其它進程提出的提案。
帶約束的一致性
理想情況的強一致性是很難達到的. 其實實際需求并沒有那么強,可以適當放寬一致性要求.
共識算法
由于響應(yīng)請求往往存在時延、網(wǎng)絡(luò)會發(fā)生中斷、節(jié)點會發(fā)生故障、甚至存在惡意節(jié)點故意要破壞系統(tǒng), 不能簡單地通過多播過程投票.
一般地,把故障(不響應(yīng))的情況稱為“非拜占庭錯誤”,惡意響應(yīng)的情況稱為“拜占庭錯誤”(對應(yīng)節(jié)點為拜占庭節(jié)點)。
Paxos & Raft
這種算法解決的是對于 分布式系統(tǒng)中存在故障(fault), 但不存在惡意(corrupt)結(jié)點場景(即可能消息丟失或重復, 但無錯誤信息)下的共識達成(consensus)問題.
FLP不可能原理
在網(wǎng)絡(luò)可靠,存在節(jié)點失效(即便只有一個)的最小化異步模型系統(tǒng)中,不存在一個可以解決一致性問題的確定性算法。
即一個可擴展的分布式系統(tǒng)的共識問題的下限是無解
它告訴人們,不要浪費時間去為異步分布式系統(tǒng)設(shè)計在任意場景下都能實現(xiàn)共識的算法。
但是可以在付出一定代價下, 達到一定的目標.
下面的CAP原理告訴我們能做到多少
CAP原理
分布式系統(tǒng)不可能同時確保一致性(Consistency)、可用性(Availablity)和分區(qū)容忍性(Partition),設(shè)計中往往需要弱化對某個特性的保證。
- 一致性(Consistency):任何操作應(yīng)該都是原子的,發(fā)生在后面的事件能看到前面事件
發(fā)生導致的結(jié)果,注意這里指的是強一致性; - 可用性(Availablity):在有限時間內(nèi),任何非失敗節(jié)點都能應(yīng)答請求;
- 分區(qū)容忍性(Partition):網(wǎng)絡(luò)可能發(fā)生分區(qū),即節(jié)點之間的通信不可保障。
CAP 不能同時滿足,設(shè)計系統(tǒng)時針對應(yīng)用場景弱化對某個特性的支持
- 弱化一致性: 如網(wǎng)站靜態(tài)頁面內(nèi)容, 實時性較弱的查詢類數(shù)據(jù)庫
- 弱化可用性: 對結(jié)果一致性很敏感的應(yīng)用. 如銀行取款機
- 弱化分區(qū)容忍性: 如 某些關(guān)系型數(shù)據(jù)庫, ZooKeeper
ACID 原則
即 Atomicity(原子性)、Consistency(一致性)、Isolation(隔離性)、Durability(持久性)。
ACID 原則描述了對分布式數(shù)據(jù)庫的一致性需求,同時付出了可用性的代價。
Atomicity:每次操作是原子的,要么成功,要么不執(zhí)行;
Consistency:數(shù)據(jù)庫的狀態(tài)是一致的,無中間狀態(tài);
Isolation:各種操作彼此互相不影響;
Durability:狀態(tài)的改變是持久的,不會失效。
一個與之相對的原則是 BASE(Basic Availiability,Soft state,Eventually Consistency),犧牲掉對一致性的約束(最終一致性),來換取一定的可用性。
密碼學技術(shù)
hash算法
是一種信息摘要, 可以用于檢驗內(nèi)容的完全性, 一致性等. 流行的有 md5, sha-1, sha-2(Secure Hash Algorithm), sha-1已被證明不具備"強抗碰撞性"
加解密算法
組件包括: 加解密算法,加密密鑰,解密密鑰.
根據(jù)加解密的密鑰是否相同,可以分成對稱加密與非對稱加密(asymmetrix cryptography).
對稱
對稱密碼從實現(xiàn)原理上可以分為兩種:分組密碼和序列密碼。前者將明文切分為定長數(shù)據(jù)塊
作為加密單位,應(yīng)用最為廣泛。后者則只對一個字節(jié)進行加密,且密碼不斷變化,只用在一
些特定領(lǐng)域,如數(shù)字媒介的加密等。
代表算法
- DES(Data Encryption Standard):經(jīng)典的分組加密算法,將 64 位明文加密為 64 位的密文,其密鑰長度為 56位 + 8 位校驗。現(xiàn)在已經(jīng)很容易被暴力破解。
- 3DES:三重 DES 操作:加密 --> 解密 --> 加密,處理過程和加密強度優(yōu)于 DES,但現(xiàn)在也被認為不夠安全。
- AES(Advanced Encryption Standard):分組算法,分組長度為 128、192、256 位三種。AES 的優(yōu)勢在于處理速度快,整個過程可以數(shù)學化描述,目前尚未有有效的破解手段。
適用于大量數(shù)據(jù)的加解密;不能用于簽名場景;需要提前分發(fā)密鑰。
非對稱加密
非對稱加密是現(xiàn)代密碼學歷史上最為偉大的發(fā)明,可以很好的解決對稱加密需要的提前分發(fā)密鑰問題。
一般比對稱加解密算法慢兩到三個數(shù)量級;同時加密強度相比對稱加密要差。
非對稱加密算法的安全性往往需要基于數(shù)學問題來保障,目前主要有基于大數(shù)質(zhì)因子分解、離散對數(shù)、橢圓曲線等幾種思路。
代表算法:
- RSA:經(jīng)典的公鑰算法。算法利用了對大數(shù)進行質(zhì)因子分解困難的特性,但目前還沒有數(shù)學證明兩者難度等價,或許存在未知算法在不進行大數(shù)分解的前提下解密。
- Diffie-Hellman 密鑰交換:基于離散對數(shù)無法快速求解,可以在不安全的通道上,雙方協(xié)
商一個公共密鑰。 - ElGamal:利用了模運算下求離散對數(shù)困難的特性。被應(yīng)用在PGP 等安全工具中。
- 橢圓曲線算法(Elliptic curve cryptography,ECC):基于對
加解密算法橢圓曲線上特定點進行特殊乘法逆運算難以計算的特性。
一般適用于簽名場景或密鑰協(xié)商,不適于大量數(shù)據(jù)的加解密。
RSA 算法等已被認為不夠安全,一般推薦采用橢圓曲線系列算法。
混合加密機制
即先用計算復雜度高的非對稱加密協(xié)商一個臨時的對稱加密密鑰(會話密鑰,一般相對內(nèi)容
來說要短的多),然后雙方再通過對稱加密對傳遞的大量數(shù)據(jù)進行加解密處理。
典型的場景是現(xiàn)在大家常用的 HTTPS 機制。HTTPS 實際上是利用了 Transport Layer
Security/Secure Socket Layer(TLS/SSL)來實現(xiàn)可靠的傳輸。TLS 為 SSL 的升級版本
數(shù)字簽名
類似在紙質(zhì)合同上簽名確認合同內(nèi)容,數(shù)字簽名用于證實某數(shù)字內(nèi)容的完整性(integrity)和來源(或不可抵賴,non-repudiation)。
一個典型的場景是,A 要發(fā)給 B 一份信息.
A 先對文件進行摘要,然后用自己的私鑰進行加密,將文件和加密串都發(fā)給B。B 收到文件和加密串后,用 A 的公鑰來解密加密串,得到原始的數(shù)字摘要,跟對文件進行摘要后的結(jié)果進行比對。
數(shù)字證書
數(shù)字證書用來證明某個公鑰是誰的,并且內(nèi)容是正確的。
數(shù)字證書內(nèi)容可能包括版本、序列號、簽名算法類型、簽發(fā)者信息、有效期、被簽發(fā)人、簽發(fā)的公開密鑰、CA 數(shù)字簽名、其它信息等等,一般使用最廣泛的標準為 ITU 和 ISO 聯(lián)合制定的 X.509 規(guī)范。
其中,最重要的包括 簽發(fā)的公開密鑰 、 CA 數(shù)字簽名 兩個信息。因此,只要通過這個證書就能證明某個公鑰是合法的,因為帶有 CA 的數(shù)字簽名。
Merkle 樹
定義
默克爾樹(又叫哈希樹)是一種二叉樹,由一個根節(jié)點、一組中間節(jié)點和一組葉節(jié)點組成。最下面的葉節(jié)點包含存儲數(shù)據(jù)或其哈希值,每個中間節(jié)點是它的兩個孩子節(jié)點內(nèi)容的哈希值,根節(jié)點也是由它的兩個子節(jié)點內(nèi)容的哈希值組成。
特點
底層數(shù)據(jù)的任何變動,都會傳遞到其父親節(jié)點,一直到樹根。
應(yīng)用場景
- 快速比較大量數(shù)據(jù):當兩個默克爾樹根相同時,則意味著所代表的數(shù)據(jù)必然相同。
- 快速定位修改:例如上例中,如果 D1 中數(shù)據(jù)被修改,會影響到 N1,N4 和 Root。因此,沿著 Root --> N4 --> N1,可以快速定位到發(fā)生改變的 D1;
- 零知識證明:例如如何證明某個數(shù)據(jù)(D0……D3)中包括給定內(nèi)容 D0,很簡單,構(gòu)造一個默克爾樹,公布 N0,N1,N4,Root,D0 擁有者可以很容易檢測 D0 存在,但不知道其它內(nèi)容。
同態(tài)加密
同態(tài)加密(Homomorphic Encryption)是一種特殊的加密方法,允許對密文進行處理得到仍然是加密的結(jié)果,即對密文直接進行處理,跟對明文進行處理再加密,得到的結(jié)果相同。從代數(shù)的角度講,即同態(tài)性。(保運算)
比特幣
從實體貨幣到數(shù)字貨幣
去中心化實現(xiàn)數(shù)字貨幣的難題
- 貨幣的防偽:誰來負責對貨幣的真?zhèn)芜M行鑒定;
- 貨幣的交易:如何確保貨幣從一方安全轉(zhuǎn)移到另外一方;
- 避免雙重支付:如何避免同一份貨幣支付給多個接收者。
原理與設(shè)計
比特幣網(wǎng)絡(luò)是一個分布式的點對點網(wǎng)絡(luò),網(wǎng)絡(luò)中的礦工通過“挖礦”來完成對交易記錄的記賬過程,維護網(wǎng)絡(luò)的正常運行。
基本交易過程
比特幣中沒有賬戶的概念。因此,每次發(fā)生交易,用戶需要將交易記錄寫到比特幣網(wǎng)絡(luò)賬本中,等網(wǎng)絡(luò)確認后即可認為交易完成。
除了挖礦獲得獎勵的 coinbase 交易只有輸出,正常情況下每個交易需要包括若干輸入和輸出,未經(jīng)使用(引用)的交易的輸出(Unspent Transaction Outputs,UTXO)可以被新的交易引用作為其合法的輸入。被使用過的交易的輸出(Spent Transaction Outputs,STXO),則無法被引用作為合法輸入。
概念
賬戶
比特幣采用了非對稱的加密算法,用戶自己保留私鑰,對自己發(fā)出的交易進行簽名確認,并公開公鑰。
比特幣的賬戶地址其實就是用戶公鑰經(jīng)過一系列 Hash(HASH160,或先進行 SHA256,然后進行 RIPEMD160)及編碼運算后生成的 160 位(20 字節(jié))的字符串。交易
易可能包括如下信息:
付款人地址:合法的地址,公鑰經(jīng)過 SHA256 和 RIPEMD160 兩次 Hash,得到 160 位Hash 串;
付款人對交易的簽字確認:確保交易內(nèi)容不被篡改;
付款人資金的來源交易 ID:從哪個交易的輸出作為本次交易的輸入;
交易的金額:多少錢,跟輸入的差額為交易的服務(wù)費;
收款人地址:合法的地址;
時間戳:交易何時能生效
節(jié)點收到交易信息后,將進行如下檢查:
交易是否已經(jīng)處理過;
交易是否合法。包括地址是否合法、發(fā)起交易者是否是輸入地址的合法擁有者、是否是UTXO;
交易的輸入之和是否大于輸出之和。交易腳本: 保障交易的完成的核心機制
區(qū)塊
比特幣區(qū)塊鏈的一個區(qū)塊不能超過 1 MB,將主要包括如下內(nèi)容:
區(qū)塊大小:4 字節(jié);
區(qū)塊頭:80 字節(jié):
交易個數(shù)計數(shù)器:1~9 字節(jié);
所有交易的具體內(nèi)容,可變長,匹配 Merkle 樹葉子節(jié)點順序。避免作惡: 在一個開放的網(wǎng)絡(luò)中,無法通過技術(shù)手段保證每個人都是合作的。但可以通過經(jīng)濟博弈來讓合作者得到利益,讓非合作者遭受損失和風險 . 如共識機制PoW
閃電網(wǎng)絡(luò)
比特幣交易性能:全網(wǎng)每秒 7 筆左右的交易速度,遠低于傳統(tǒng)的金融交易系統(tǒng)
提出閃電網(wǎng)絡(luò)的解決方法
主要通過引入智能合約的思想來完善鏈下的交易渠道。核心的概念主要有兩個:RSMC(Recoverable Sequence Maturity Contract)和 HTLC(Hashed TimelockContract)。前者解決了鏈下交易的確認問題,后者解決了支付通道的問題。
側(cè)鏈
以比特幣區(qū)塊鏈作為主鏈(Parent chain),其他區(qū)塊鏈作為側(cè)鏈,二者通過雙向掛鉤(Two-way peg),可實現(xiàn)比特幣從主鏈轉(zhuǎn)移到側(cè)鏈進行流通。
側(cè)鏈可以是一個獨立的區(qū)塊鏈,有自己按需定制的賬本、共識機制、交易類型、腳本和合約的支持等。側(cè)鏈不能發(fā)行比特幣,但可以通過支持與比特幣區(qū)塊鏈掛鉤來引入和流通一定數(shù)量的比特幣。當比特幣在側(cè)鏈流通時,主鏈上對應(yīng)的比特幣會被鎖定,直到比特幣從側(cè)鏈回到主鏈。可以看到,側(cè)鏈機制可將一些定制化或高頻的交易放到比特幣主鏈之外進行,實現(xiàn)了比特幣區(qū)塊鏈的擴展。側(cè)鏈的核心原理在于能夠凍結(jié)一條鏈上的資產(chǎn),然后在另一條鏈上產(chǎn)生,可以通過多種方式來實現(xiàn), 如 SPV
以太坊
以太坊區(qū)塊鏈底層也是一個類似比特幣網(wǎng)絡(luò)的 P2P 網(wǎng)絡(luò)平臺,智能合約運行在網(wǎng)絡(luò)中的以太坊虛擬機里。網(wǎng)絡(luò)自身是公開可接入的,任何人都可以接入并參與網(wǎng)絡(luò)中數(shù)據(jù)的維護,提供運行以太坊虛擬機的資源。
特點
跟比特幣項目相比
- 支持圖靈完備的智能合約,設(shè)計了編程語言 Solidity 和虛擬機 EVM;
- 選用了內(nèi)存需求較高的哈希函數(shù),避免出現(xiàn)強算力礦機、礦池攻擊;
- 叔塊(Uncle Block)激勵機制,降低礦池的優(yōu)勢,并減少區(qū)塊產(chǎn)生間隔(10 分鐘降低到15 秒左右);
*采用賬戶系統(tǒng)和世界狀態(tài),而不是 UTXO,容易支持更復雜的邏輯; - 通過 Gas 限制代碼執(zhí)行指令數(shù),避免循環(huán)執(zhí)行攻擊;
- 支持 PoW 共識算法,并計劃支持效率更高的 PoS 算法。
概念
智能合約:即以計算機程序的方式來締結(jié)和運行各種合約。
-
賬戶: 比特幣在設(shè)計中并沒有賬戶(Account)的概念,而是采用了UTXO 模型記錄整個系統(tǒng)的狀態(tài)。任何人都可以通過交易歷史來推算出用戶的余額信息。而以太坊則直接用賬戶來記錄系統(tǒng)狀態(tài)。每個賬戶存儲余額信息、智能合約代碼和內(nèi)部數(shù)據(jù)存儲等。 以太坊賬戶分為兩類
- 合約賬戶:存儲執(zhí)行的智能合約代碼,只能被外部賬戶來調(diào)用激活;
- 外部賬戶:以太幣擁有者賬戶,對應(yīng)到某公鑰。賬戶包括 nonce、balance、storageRoot、codeHash 等字段,由個人來控制。
-
交易: 是指從一個賬戶到另一個賬戶的消息數(shù)據(jù)
包括如下字段:- to:目標賬戶地址。
- value:可以指定轉(zhuǎn)移的以太幣數(shù)量。
- nonce:交易相關(guān)的字串,用于防止交易被重放。
- gasPrice:執(zhí)行交易需要消耗的 Gas 價 格。
- startgas:交易消耗的最大 Gas 值。
- signature:簽名信息。
在發(fā)送交易時,用戶需要繳納一定的交易費用,通過以太幣方式進行支付
和消耗。
燃料(Gas),控制某次交易執(zhí)行指令的上限。每執(zhí)行一條合約指令會消耗固定的燃料。當某個交易還未執(zhí)行結(jié)束,而燃料消耗完時,合約執(zhí)行終止并回滾狀態(tài)。
Gas 可以跟以太幣進行兌換。需要注意的是,以太幣的價格是波動的,但運行某段智能合約的燃料費用可以是固定的,通過設(shè)定 Gas 價格等進行調(diào)節(jié)
主要設(shè)計
- 運行環(huán)境: EVM
以太坊虛擬機是一個隔離的輕量級虛擬機環(huán)境,運行在其中的智能合約代碼無法訪問本地網(wǎng)絡(luò)、文件系統(tǒng)或其它進程。
對同一個智能合約來說,往往需要在多個以太坊虛擬機中同時運行多份,以確保整個區(qū)塊鏈數(shù)據(jù)的一致性和高度的容錯性。另一方面,這也限制了整個網(wǎng)絡(luò)的容量。 - 開發(fā)語言: Solidity, vyper... 智能合約編寫完畢后,用編譯器編譯為以太坊虛擬機專用的二進制格式(EVM bytecode),由客戶端上傳到區(qū)塊鏈當中,之后在礦工的以太坊虛擬機中執(zhí)行。
-
交易模型: 以太坊的賬戶模型與比特幣的 UXTO 模型對比
- 共識: 基于成熟的 PoW 共識的變種算法 Ethash 協(xié)議
- 客戶端和開發(fā)庫
以太坊客戶端可用于接入以太坊網(wǎng)絡(luò),進行賬戶管理、交易、挖礦、智能合約等各方面操
作。
超級賬本-Hyperldger
Hyperledger 項目是首個面向企業(yè)的開放區(qū)塊鏈技術(shù)的重要探索.該項目試圖打造一個透明、公開、去中心化的分布式賬本項目,作為區(qū)塊鏈技術(shù)的開源規(guī)范和標準,讓更多的應(yīng)用能更容易的建立在區(qū)塊鏈技術(shù)之上。