你們好,很是感謝你們在百忙之中抽空收聽比原鏈技術入門課程,我是比原鏈技術運營經理鍾立飛。算法
今天主要給你們介紹一些比原鏈的基礎技術知識,但願能給你們帶來一些啓發。同時比原鏈的開發大賽也在進行當中,歡迎你們參加咱們的比賽,咱們準備了200萬BTM的豐厚獎勵,同時推薦身邊的開發者參賽也能獲得推薦獎勵。(活動詳情見報名網站:http://bytom.io/developers_zh/)數據庫
下面進入正題,本次分享主要分爲如下幾部分:編程
Bytom是什麼安全
Bytom有哪些特性服務器
Bytom的設計原理和技術架構網絡
比原鏈的UTXO模型以及一些主要的流程數據結構
比原的智能合約和合約模板架構
比特幣是點對點的點子現金系統,以太坊是一個巨大的分佈式計算機,那麼比原鏈是什麼?比原鏈想要連通原子世界和比特世界,促進資產在兩個世界間的交互和流轉。併發
咱們知道區塊鏈的創新之一就是解決了價值傳遞問題,傳統互聯網能夠很方便地傳遞信息,可是並不適合於傳遞價值,由於不能保證我把某個東西給你,你多了而我少了,信息能夠方便地複製和傳播,結果每每是你有一份我仍然還有一份。而區塊鏈經過一系列的措施較好地解決了這個問題,可是咱們看到不管是比特幣仍是以太坊,它自己仍是在虛擬世界中作價值傳遞,而比原鏈想打破這個界限,把數字世界和物理世界中的資產在比原鏈上登記,以比原鏈做爲鏈接的橋樑,實現流通、對賭以及其餘複雜操做。app
固然在這個過程中會有不少的難題,好比錨定問題、硬連接問題等,錨定和硬連接問題實際上是一類問題(只是一個對虛擬資產,一個對實物資產),都是如何證實比原鏈上的某個資產實際對應某個虛擬或者實物資產。
對於其餘虛擬資產錨定問題,咱們會使用跨鏈等技術來將虛擬資產錨定到比原鏈上,同時經過ODIN標識來進行惟一性的標識,防止資產僞造。
對於硬連接問題,確定繞不開監管等,如何將一些實物資產,好比房產、土地、消耗品等引到鏈上,這裏確定須要區塊鏈的不斷髮展演進、政策和法律的完善,以及周邊應用的完善,路漫漫其修遠兮,吾將上下而求索,比原鏈將先易後難,不斷實現本身的願景和使命。
總之,比原鏈是想用區塊鏈技術來實現各類資產交互的公鏈,做爲資產專鏈,它比以太坊領域更垂直,比比特幣更擴展。
比原鏈的特性:
採用AI-POW算法做爲共識算法
多資產的靈活交互能力
資產防僞ODIN標識
支持國密標識
本文重點分享AI-POW算法和資產防僞ODIN標識。
2.1 AI-POW算法
比特幣的POW算法由於其能源消耗和礦機的利用率一直被人詬病。能源消耗做爲保證系統的穩定性的代價也許還能說得通,就像爲了挖掘礦產也須要消耗電力同樣(固然由於競爭的緣由致使過量的電力消耗也仍然是一個問題),可是礦機利用率的問題確實是一個純粹的消耗,比特幣的礦機除了作哈希計算,毫無其餘利用價值,一旦新一代礦機到來,算力爆漲,那麼舊的礦機將直接報廢。
和以太坊、EOS等改造共識算法的作法不一樣,比原鏈團隊在選擇共識算法過程當中仍然選擇使用成熟穩定的POW算法,由於畢竟咱們和資產相關,安全可靠是第一位的,(這個我後續也會講咱們的設計準則,包括最近以太坊推遲POS方案,也是考慮到一些風險),比原鏈經過引入AI友好型的POW算法,使針對比原的礦機除了可以挖比原以外,還可以作AI運算,從而可以給其餘AI有須要的地方(好比企業、機構等)提升AI運算能力,比原看到將來AI的巨大潛力,認爲跟AI結合也是一條有無限可能的道路。
2.2 ODIN標識
前面提到能夠在比原鏈上登記無數的資產,那麼如何保證某一種資產是真實的,不是其餘人僞造進行欺詐的呢?咱們經過ODIN的方式來進行鑑僞,ODIN的方式有點相似於域名,只不過域名是由中心化的服務器管理,而ODIN是寫入到比特幣區塊上的,任何的資產ID在比原鏈上是具備惟一性的,可是名稱卻不必定,咱們經過ODIN來作惟一性的映射,將資產的名稱和資產ID進行關聯,比原鏈會擁有一個根的ODIN標識,從而可以管理其下的二級ODIN標識,任何想要在比原鏈上註冊惟一資產標識的團隊或者我的都須要經過比原鏈的根標識進行認證,若是考慮到去中心化,那麼能夠由比原鏈團隊和其餘權威機構來共同管理這個權限。
多資產的交互能力我將在後續合約中進行一些描述。
關於支持國密標準主要也是爲了可以促進在國內進一步落地,密碼算法的供應鏈安全也是一塊很重要的保障。
接下來介紹一下比原鏈的設計準則和技術架構。
3.1 比原鏈的設計準則
**安全性是咱們考慮的首要準則。**由於咱們是資產專鏈,未來會有各類各樣的資產運行在比原鏈之上。
首先使用較爲成熟穩定的關鍵技術,包括咱們以前講到的POW共識算法,其在比特幣上穩定運行這麼長時間,也很好地解決了雙花的問題,咱們沿襲了UTXO模型而沒有采用帳戶模型,犧牲了部分的便捷性可是提高了安全性,咱們知道在以太坊產生的諸多安全問題中,大部分是由於其合約帳戶編程漏洞從而遭到攻擊,並且一旦攻擊則會影響到所有的資產(token)。
比原鏈在開發過程當中,會有詳盡的代碼審計,多人同時研究一段代碼,最後在pr的過程當中由架構師進行review再合併,同時具有較爲完整的測試用例,從而從開發層保證安全性。
比原鏈還積極和其餘的一些著名安全廠商合做,包括360、慢霧等團隊,從更加專業的角度來保證比原鏈的安全。
模塊化設計。
比原鏈總體會分爲若干層次,每一個層次之間功能清晰,分類明確,利於擴展。
好比網絡層,主要作區塊同步、節點廣播等網絡之間的事情;內核層作共識、驗證的事情,其內部比較複雜但仍然具備相對清晰的邏輯,這個後邊會詳細進行闡述,同時各個模塊以前經過一些接口進行關聯,實現鬆耦合。
強擴展性。
3.2 比原鏈分層模型
比原鏈能夠分爲三個模塊,從上到下分別爲:錢包層、內核層和通訊層,上圖中的比例是指代碼所佔的份額。
錢包層你們平時接觸比較多,收款或者打款的一個操做界面,比原如今有一個全節點錢包能夠供你們使用。
內核層能夠簡單理解爲分佈式系統中你們都認同的一套規則,在通訊過程當中,兩個節點須要有相同的規則,才能夠達成共識,若是兩個節點規則不一樣,那麼實際上是意味着分叉。比原鏈中內核層佔有很是重要的位置,代碼量也是最大的,佔據了超過半數的容量。
通訊層主要負責節點之間信息交互,包括區塊同步、交易同步等,好比交易同步,你須要把交易發到全網每個節點,最後由礦工節點打包,比原鏈的通訊創建在比較成熟的點對點網絡的技術之上。
3.3 比原鏈詳細分層模型
上圖展現的是比原鏈更加細緻的分層模型。分層仍是通訊層、內核層和錢包層,除此以外內核層還有虛擬機,這個是爲了運行智能合約用的,由於比原鏈支持圖靈完備的智能合約,須要虛擬機進行隔離運行;在虛擬機之上是合約編譯層,負責將equity語言編譯成機器碼從而可以在虛擬機中運行,內核層和錢包層都有數據庫,比原鏈使用levelDB做爲存儲的數據庫,根據各個層不一樣的需求來存儲不一樣的數據。
接下了咱們具體講講每一層。
內核層
內核層相對來講較爲複雜,從最上層看,內核層有五個模塊:孤兒塊管理、共識層、區塊樹管理、數據存儲層和交易池。
孤兒塊管理是什麼呢?由於比原使用POW共識算法,就是採用挖礦的方式來產生區塊,若是我挖到了一個塊-塊A,你挖到一個塊-塊B,最後只有一個塊會成爲主鏈,另一個塊就成爲孤兒塊了,在以太坊中還會有叔塊的概念,咱們這裏面統稱爲孤兒塊,就是未成爲主鏈的合法區塊。孤兒塊管理是一個模塊,在某一高度出現多個塊時,這個模塊就負責收集和存儲非主鏈的塊。
共識層比較複雜,它也是全節點最核心的部分,當一個區塊來的時候,我如何驗證和肯定這個塊是合法的、我是否該認同這個塊,這就是共識層的工做。咱們把驗證分爲兩部分:
一部分是區塊頭驗證,須要驗證父塊的信息,父塊是否存在,父塊的高度,而後是驗時間戳,這塊比較複雜須要一系列的驗證流程,而後就是pow的驗證,要證實你有足夠的算力計算出難度值,從而有這個出塊或者是記帳的權利;
另外一部分是交易驗證,這塊咱們比原設計中和區塊鏈有點不同,就是比原有個BC層,BC層是一個map,用戶能夠在這個map中找到全部跟交易相關的信息,專門設計用來提升交易驗證的性能,在BC層咱們把交易的常規數據都驗證完畢,而後就是智能合約的驗證,咱們支持圖靈完備的智能合約,因此底層有虛擬機層,這個前文講過。在每一個交易進入時,須要驗證交易的每一個輸入,每一個輸入其實被一個智能合約所守護,把輸入傳輸到虛擬機中,將用戶放到隔離驗證的參數也放進去,而後驗證這個輸入是否合法。
區塊樹管理,主要用來記錄全網全部的區塊,爲何咱們說區塊樹管理而不是區塊鏈管理呢,由於以前講過會有孤兒塊,可能在某個高度出現分叉的狀況,因此經過樹的形式記錄了全網全部的塊,咱們還稱他爲block index,由於能夠索引到比原全部的區塊。
數據存儲,就是把區塊和其餘的一些數據落盤作持久化存儲。這裏列出來兩個存儲的數據:第一個是區塊數據,這個就是在網絡上廣播的原生區塊信息;第二個是UTXO數據。爲何咱們會存儲UTXO數據呢?若是不存儲UTXO數據,當有一筆交易來的時候,若是你要驗證這筆交易的UTXO是否被使用了,你須要歷遍全部的區塊,對性能會有很大影響,若是存儲了可用的UTXO數據,那麼就至關於有了一個緩衝池,當交易到來時,你只須要查找該UTXO是否存在在數據庫中便可。
交易池,當你發送了一筆交易到全網,若是這筆交易還未被驗證,那麼這筆交易是存儲在每一個節點的交易池中,也就是說交易池維護了全網已經發出但沒有被確認的交易,跟它關聯最大的是挖礦這個模塊,若是我要產生一個新的區塊,那麼我須要從交易池中拿一系列的交易並把它打包成塊,而後進行POW的工做量驗算。比原鏈的交易選擇使用FIFO,也就是先進先出的策略,就是按時間順序,早入池的早打包,防止由於交易費低而遲遲得不到打包的現象,這塊也很容易擴展其餘的策略,要看具體的場景。
錢包層
錢包層分爲四塊:私鑰管理、帳戶管理、資產管理和交易管理。
私鑰管理,好比你用比原的錢包生成一個private key,就是用到這個模塊,還有包括若是安全保護這個私鑰,通常都須要進行加密存儲,以及如何使用私鑰進行簽名和子私鑰的派生。
帳戶層,其實在UTXO模型當中是沒有帳戶的概念的(比特幣是這樣),只有私鑰和地址,帳戶實際上是上層的抽象,咱們比原的設計中,在錢包層設計了帳戶的概念,每一個帳戶能夠擁有多把私鑰,私鑰的不一樣形式就組成了不一樣的帳戶(由於會有多簽帳戶),能夠把帳戶理解成私鑰的一種表現形式。每一個帳戶會有無限多的地址,這個地址是由派生公鑰生成的,這個能夠很好地保護用戶的隱私,由於用戶的資產分散在不一樣的地址當中,只追蹤某個地址不可能追溯到用戶的全部資產。
資產模塊主要進行資產的建立、展現和管理,比原鏈支持多資產的交互,任何人均可以發行本身的資產,而後經過資產管理我的或者組織機構下面的資產。
交易模塊換一種更確切的說法是跟我有關的交易數據,在區塊鏈上天天可能會有無數筆的交易,但其中可能只有幾筆是跟你相關的,那麼交易模塊會在本地把跟你相關的交易篩選出來,維護錢包端的UTXO的數據庫,記錄你本人所擁有的UTXO,這個和內核中記錄的UTXO不一樣,內核記錄了全網的UTXO,但並無記錄UTXO的詳細數據,而只是記錄了hash,而錢包端記錄了跟這個UTXO相關的詳細數據,包括跟哪一個帳戶相關、在哪一個區塊產生出來的、輸入輸出等等。而後交易模塊會進行交易的構建,若是你在錢包端發起一筆交易,那麼就須要在這裏進行交易構建和簽名,相關的後邊會有流程介紹。
通訊層
通訊層架構分爲節點發現、交易同步、區塊同步和區塊廣播。
節點發現是很獨立的一塊,在區塊鏈的世界中,其實像一個黑森林同樣,你不知道有哪些節點、這些節點分佈在哪?你惟一知道的是有幾個種子節點,這幾個種子節點就像是一個個的燈塔,能夠將新進入的節點引入到整個網絡。節點發現就是完成如何鏈接這些種子節點,並獲取種子節點鏈接的其餘相鄰節點,而後再向其餘節點嘗試握手,以此循環發現更多的全網節點,從而可以更快地鏈接入網絡並進行相關信息的同步。
交易同步,當你把交易發到全網的時候,它會經過這個模塊發送給相鄰節點,而後再進一步擴散,直到全網都有這筆交易。
區塊同步,又成爲被動區塊同步,好比我當前本地區塊高度爲1萬,我從新鏈接入網,我發現了其餘有個節點高度是4萬,那麼這個模塊就會從1萬開始不斷地向4萬高度的節點請求區塊,獲取區塊並更新狀態,丟給內核層去處理。
區塊廣播,新區塊快速廣播是主動將新的區塊廣播給其餘人,若是隻有區塊同步被動地接受區塊,那麼好比我挖到一個新塊,還須要等別人發現個人高度比他高才會進行同步,會有很多的延遲,特別是網絡層數較多時。新區塊廣播就是直接將新產生的區塊強制廣播給相鄰鏈接節點,這些節點在驗證確實是最新塊時他們也會調用這個模塊進行擴散,從而提升了區塊同步的效率。
3.4 區塊的誕生
介紹完了各個層的架構以後,咱們用一個例子來串一下。舉一個很是有表明性同時也是入門區塊鏈須要掌握的例子——區塊的誕生,區塊是如何被礦工挖出來,而後再傳播到其餘各個節點的。
首先就是挖礦相關的,礦工節點從交易池中讀取一系列的未確認的交易,驗證這些交易合法後打包成區塊,而後計算區塊頭的默克爾樹,作完後就造成了一個未進行工做量證實的區塊,而後礦工進行工做量證實,也就是計算一個符合條件的難度值。當礦工計算出知足條件的難度值後,mining模塊就會將這個區塊交給內核共識層。
共識層處理這個新的區塊,這個就比較複雜了,首先它會把這個區塊從新進行一遍區塊頭驗證,包括父區塊、時間戳、默克爾樹、POW驗證等。而後就是交易BC層驗證,好比UTXO是否被使用、輸入輸出平衡等等。BC層驗證以後,把全部輸入的智能合約(Control Program)傳入虛擬機,讓虛擬機作一個合約層的驗證,之後你們若是要在比原鏈上開發Dapp,那麼相關的代碼都須要在虛擬機內進行必定的控制,好比gas機制等等。
合約層驗證完成後,區塊的驗證已經經過了,證實這個區塊已經合法了,咱們要將這個區塊落盤,無論是主鏈上的塊仍是孤兒塊,都會落盤,咱們會將區塊數據落盤,同時若是你在這個區塊中的UTXO有變更,那麼咱們會將UTXO進行更新,把已使用的刪除把新的增長,不然就會引發雙花了。
而後就是區塊樹的更新,區塊樹前面說過記載了所有的區塊信息。區塊樹更新以後其實大部分工做已經完成了,須要作一些善後工做,第一個就是將交易池中把這些已經確認的交易刪除,不然下次再去打包這些交易就非法了,而後共識層的工做已經作完,將區塊交給通訊層。
最後通訊層經過兩種方式把區塊同步出去,第一種是快速同步,它會立馬把新區塊廣播出去,爲了讓其餘節點更好收到這個塊,可是快速同步有個問題:若是你我之間的區塊高度相差很大,好比你是2萬,我是1萬,你的第20001塊傳遞給我也是無用的,由於我沒有2萬的父塊沒法進行驗證,因此還須要正常的區塊同步來進行被動同步。對於實踐中來講,常常在線的節點,好比礦池,交易所,錢包等都會經過第一種方式來同步區塊,而不常常在線的,好比用戶偶爾使用的全節點錢包通常會觸發第二種機制。
比原鏈的BUTXO模型沿襲自比特幣的UTXO模型,在UTXO模型上進行了革新,這張圖是BUTXO模型的一個概覽圖,瞭解UTXO的朋友必定以爲很熟悉,每一筆輸入和上一筆交易的輸出所關聯,這個和比特幣是相同的,但比原鏈的一筆交易中能夠包含多種不一樣類型資產的輸入輸出,同時會有一個MUX交易池結構做爲交易輸入輸出的簡化,還有一種issue的特殊交易類型,這種類型用於建立一種全新的資產。
4.1 UTXO和帳戶模型的比較
咱們簡要對比一下UTXO和帳戶模型的區別,以及爲何要選擇UTXO。
如上圖的表格所示:
在UTXO模型中,單個UTXO是沒有狀態的,整個UTXO組成了一個世界狀態;而帳戶模型中,在合約對象中會關聯全部的世界狀態。
UTXO的交易經過UTXO的產生和消亡來表明,好比我向你轉了100個BTM,那麼我帳戶裏的BTM UTXO被刪除,你帳戶中多了一筆100面額的UTXO。而帳戶模型使用帳戶和合約之間的消息交互,在合約狀態中記錄某我的的帳戶餘額變更。
UTXO主要的優勢是隱私性好,你很難追蹤一個帳戶中全部的地址;安全性高,攻擊一個UTXO不會影響其餘的UTXO;併發性,就是好比你手中有兩個UTXO,其實你能夠同時花出去,由於兩個UTXO之間不會有關聯。而帳戶模型就是易於理解和編碼,咱們知道如今中心化的世界中,大多數系統都是帳戶模型,因此帳戶模型深刻人心,更容易被理解;同時帳戶模型存儲了世界狀態,更方便進行復雜場景的定製。
而相應的UTXO模型的複雜度較高,對於一些在帳戶模型中較爲簡單實現的功能就比較麻煩,可編程性較差。而帳戶模型中,特別是以太坊的合約暴露出來的巨大安全隱患,攻擊合約帳戶將會影響全部的token安全。
4.2 BUTXO的創新
Butxo具有一些創新的特性:
引入了資產ID以及一套體系,從而能夠方便地支持多資產的交互
引入MUX交易池結構,簡化多資產交易的交互
創始合約,方便在比原鏈上發佈資產
實現了BUTXO上的圖靈完備的智能合約
4.3 BUTXO結構
上圖所示是BUTXO的靜態數據結構:
SourceID和sourcePos都是用於定位前一筆的輸出,咱們經過SourceID找到上一筆關聯的交易,可是由於比原鏈是多輸出的,因此還須要一個位置信息,標識是屬於第幾筆交易。
資產ID和資產數量不用多說。
Control Program也就是智能合約是很關鍵的一個信息,前面也說過合約層驗證須要將合約傳入虛擬機運行和驗證,每一個UTXO的輸入都帶有Control Program。
Address,地址分爲帳戶下面的地址和合約的地址,分別用於鎖定資產使用,能夠沒有Address,可是不能沒有合約。
4.4 MUX交易池結構
比原鏈首創的MUX結構,爲了使多資產的交互可以更加安全和方便。
定位輸出,前面介紹的sourceID就是跟這個MUX的id相關聯,經過這個ID找到這筆交易,從而驗證這個UTXO確實存在;
MUX結構能夠進行輸入輸出平衡的驗證,這個跟架構裏面講到的bc層相關,MUX把全部的輸入根據不一樣的資產類型進行歸集,再跟全部的輸出去比較,防止輸出和MUX已經歸集的輸入不匹配,而在一個個去驗證輸出時,也不須要根據不一樣資產去累加輸入,直接根據MUX已經歸集的輸入便可,方便了多資產多輸入輸出的驗證。
MUX結構能夠防止溢出,若是你再輸入中惡意填入一些越界的值,好比你填充了一筆負值的輸入或者超過上限的輸入,會被MUX監測出來,從而防止溢出攻擊
4.5 比原鏈交易過程詳解
穿插一個交易過程的案例:比原鏈是如何將一筆交易發給別人的。
錢包有存儲全部的UTXO信息,也就是以前說過的交易模塊,這些UTXO就構成了你能夠花費的餘額。
錢包收到你的信息,你要向某人發送一筆,好比20個BTM給某我的,而後咱們就會去找全部BTM的UTXO,多說一句,由於比原是多資產的,因此咱們除了BTM的UTXO以外也會有其餘的UTXO。錢包會去尋找合適的UTXO,可是這裏必須瞭解的是:UTXO模型和帳戶模型不同,你想發20個BTM就在餘額減去20,不是這樣的,你必須去找合適的面額,若是找不到怎麼辦,好比我只有一個10BTM數量的UTXO和一個30BTM數量的UTXO,咱們不會選擇10BTM,由於不夠,因此只好選擇30BTM的UTXO,這個時候由於多餘10 BTM,因此咱們必須把剩下的10個找回本身,因此就須要一個找零的機制,咱們會向錢包申請一個找零地址,輸入30BTM,輸出有兩個:第一個是要給其餘人的20BTM,還有一個10個BTM找給本身的UTXO,而後錢包會幫咱們構建這樣的一個交易,輸入30,輸出20和一個10的找零,而後找到要花費的UTXO的智能合約,找到帳戶信息並加入到交易模板中。
放到交易模板以後,錢包會讓私鑰模塊給錢包進行簽名,表明我能夠花費而且要花費這個30BTM的UTXO,簽名完成後咱們會將交易交給內核,而後由內核驗證這筆交易,驗證完成後將這筆交易放入交易池,而後再傳輸給通訊層,而後再廣播到相鄰節點,這樣一筆交易的發出也就完成了,固然這是一筆還未確認的交易,須要等待礦工的打包和確認,後邊的流程就是區塊的誕生流程了。
比原鏈上的合約是構建在UTXO模型之上的,和以太坊的面向帳戶編程的模型不同,比原鏈是面向資產編程,你的Dapp針對的是一個個的資產,對資產鎖定、驗證、加鎖和控制。
比原鏈的合約是圖靈完備,但也是無狀態的,無狀態的意思是你不能在一個資產合約中尋找到記錄這個資產以前發送的事情,這塊後續會考慮如何進行完善。對於比原鏈合約的安全性,由於每一個資產都會有本身的合約,因此沒法像攻擊以太坊合約帳戶同樣,直接影響其世界狀態,從而致使大量的威脅,若是黑客攻擊了比原鏈的上的一個UTXO合約,那麼也僅僅影響該UTXO,而不會影響到其餘UTXO。
5.1 創始合約
以前也說過,由於比原鏈上須要有各類各樣的資產進行上鍊和錨定,須要一個能夠產生資產的方式,就是使用創始合約來創造資產和它的數量,創始合約能夠看做相似於ERC20的協議,可是又有很大差異,也是由於建立在UTXO模型之上,創始合約並無合約帳戶,也不保存世界狀態,你能夠認爲憑空創造了一個指定數額的UTXO。
5.2 合約模板的例子
最後咱們經過兩個合約模板的例子來結束本次的分享吧。
幣幣交易合約
咱們先來看第一個幣幣交易合約,幣幣交易合約是由一個賣家發起的合約,賣家在這個合約中鎖定固定數量的資產,好比將5個BTC放入合約中,它如今有兩種解鎖方式,對應的兩種過程:Trade和Cancel;
對於Trade過程,只要別人發送了trade裏面規定的對應資產種類,對應數量的資產給我,那麼他就能夠拿走我鎖定的資產。若是在很長時間內都沒法成功交易,那麼合約發起人也能夠經過Cancel方法取消這個合約,而後拿回本身鎖在合約的資產,固然須要驗證這筆資產是這個發起人的,不可能全部人都能取消這個合約從而拿到資產。這個合約能夠做爲一個去中心化交易所的
第三方託管合約
這個合約能夠類比於在淘寶中買東西,買家能夠類比於淘寶買家,託管方能夠認爲是支付寶,賣家類比爲商家。買賣雙方都是無信任的,買家的錢不是直接打給賣家,而是經過一個可信第三方先進行託管,若是賣家不發貨或者想要欺詐,那麼賣家沒法拿到第三方託管的資產。
在第三方託管合約中,買方先將必定的資產託管給可信第三方,而後由第三方根據買賣雙方的交易狀況,選擇approve操做仍是reject操做,若是交易正常發生,那麼託管第三方將觸發approve操做,將買方鎖定的資產打給賣方;若是交易異常,賣方欺詐,那麼託管第三方觸發reject操做,將資產退回給買家,從而保證整個交易過程當中各方的利益。若是這個第三方欺詐怎麼辦?其實合約當中已經考慮這個問題了,買家鎖定的資產的接收者只能是買家或者指定的賣家,第三方沒法獲取這筆資產,從而避免中間人做惡。
內容來源:HiBlock區塊鏈課堂013期 鍾立飛老師的線上分享《比原鏈技術入門》
本文編輯:Cynthia
點擊「閱讀原文」便可回聽課程分享。
Blockathon|48小時極客競賽,區塊鏈馬拉松等你挑戰(成都)
時間:2018年9月14-16日
地點:成都高新區天府五街200號菁蓉國際廣場2號樓A座12樓中韓互聯網+新技術孵化器
招募50名開發者(識別下圖二維碼便可報名)
報名費100元爲參賽押金,參賽者我的緣由不能到場參加活動概不退款;參賽者全程參與活動,待活動結束後現場退還。9月14日18:00開始第一次簽到,9月15日和16日天天早上都要記得簽到哦。
主辦方免費提供2天的食物、飲料,併爲每一位參會者準備一件文化衫