合約即合同,自動售貨機更是大家熟悉的東西,通過自動售貨機你可以非常方便的買到水或飲料。它在我們生活中無處不在,你去超市購物,超市標出了貨物的價格,你從眾多貨物中挑選中一款你認為適合你的,然后你去收銀臺付款,付款完后,其實你和超市已經(jīng)形成了一種合約的存在等。
大家知道嗎?一個智能合約是一套以數(shù)字形式定義的承諾(promises),包括合約參與方可以在上面執(zhí)行這些承諾的協(xié)議。一旦節(jié)點執(zhí)行了這個代碼,合約就會更新總賬(ledger)。
以太坊聯(lián)合創(chuàng)始人Vitalik Buterin表示,很多人誤用了智能合約,智能合約的正確使用方式應該是將其視為經(jīng)濟機制,用于制定規(guī)則,使不同的參與者可以更好地交流互動。例如有這樣一種資金代管的想法,認為如果雙方存在爭議,兩個人的資金都會被銷毀。聽著很苛刻,但它確實為當事雙方誠實行事提供了強大的動力。
區(qū)塊鏈技術在支持可編程合約時候,還具有去中心化、不可篡改、過程透明可追蹤等特征,天然適合于智能合約。智能合約可以被自動地、無需信任地和公正地執(zhí)行。在合約制定,履行和強制執(zhí)行過程中取消中間人。智能合約就像一個多米諾骨牌,你需要上一個事件,來執(zhí)行下一個事件。智能合約不用擔心系統(tǒng)在條件被滿足時不執(zhí)行合約;然后就是去中心的不能篡改和全網(wǎng)備份,完備的記錄完全可以支持支持事后的審計。
從用戶角度來講,智能合約通常被認為是一個自動擔保賬戶,例如,當特定的條件滿足時,程序就會釋放和轉移資金。
從技術角度來講,智能合約是架設在區(qū)塊鏈上。從而可以在其上面運行特定的合約程序。智能合約不依賴某個特定的硬件設備。
條件
智能合約就是有幾個條件:
1.必須有價值符號參與。
2.資產(chǎn)必須數(shù)字化,而且有唯一的映射關系。
3.資產(chǎn)必須聯(lián)網(wǎng)且絕對信任某個數(shù)據(jù)庫。
總之,智能合約它必須是智能的,自動化的,不需要人來執(zhí)行的,合約的執(zhí)行是自動觸發(fā)的。
特征
無需信任
無需信任是智能合約的關鍵特征。智能合約其不同之處在于合約的所有條款都是由計算機代碼評估和執(zhí)行的,這使得它無需任何信用背書。
圖靈完備性
代碼的執(zhí)行是自動的:要么成功執(zhí)行,或者所有的狀態(tài)變化都撤消---在區(qū)塊鏈環(huán)境中,這尤為重要,因為沒有辦法來撤消執(zhí)行錯誤所帶來的不好的后果。
2009年,比特幣就開始用Script的語言來擬定智能合約。事實上,智能合約追溯到1995年,這樣看要早于比特幣。比特幣的智能合約語言同以太坊版本的區(qū)別在于以太坊的語言具有圖靈完備性。 以太坊的Solidity語言允許更復雜的合約,其代價是會增加分析難度,當然安全度也受到了考驗。比特幣粗暴德放棄圖靈完備性。 執(zhí)行層面更容易列舉和檢查。
以太坊DAO事件導致了區(qū)塊崩潰----正在利用智能合約中的瑕疵獲利的人是存在的。區(qū)塊鏈安全公司PeckShield近日發(fā)現(xiàn)一種新型的智能合約安全漏洞evilReflex,攻擊者可通過公開的接口竊取合約地址賬戶中存放的Token。
智能合約工作原理
開發(fā)人員會為智能合約撰寫代碼。智能合約可用于交易和(或)兩方/多方之間的任何交換行為。一旦編碼完成,智能合約就會被上傳到區(qū)塊鏈網(wǎng)絡上,即它們被發(fā)送到所有連接到網(wǎng)絡的設備上。然后更新數(shù)據(jù)庫以記錄合約的執(zhí)行情況,并監(jiān)督合約的條款以檢查合規(guī)性。這樣一來,單獨一方就無法操縱合約,因為對智能合約執(zhí)行的控制權不在任何單獨一方的手中。
場景
數(shù)字身份;
允許用戶賬戶信息與企業(yè)共享,用戶可以有決定權。
證券;
簡化資本表管理,能夠繞開證券保管鏈中的中間人,便于自動支付股息,股票分割和債務管理,同時,降低了操作風險。
抵押;
智能合約鏈接各方來完成合同的執(zhí)行。
貿(mào)易金融;
自動化信用證和貿(mào)易支付流程,提高各方的融資效率。
智能合約面臨的問題
智能合約目前還處在初級階段,尚未有任何實質(zhì)進展。關鍵問題是信任度的問題。
? ? ? ? 合約可能有漏洞,能夠轉移證券,但卻無法轉移貨幣。
在現(xiàn)實生活中,這些事情可以通過中心化的系統(tǒng)來撤消。但是如果是去中心化的系統(tǒng),則只能自己承擔風險。
同樣地,也有欺詐的問題:某人需要設計(編程)合約,在合約設計時就會需要確保沒有欺詐的問題。
? ? ? ? 至少參與者要確保:
高層級(例如Solidity)的代碼中需要充分描述合約參與方的目的
代碼中的字節(jié)碼實際上相當于高層級的代碼,需要在進入合約之前進行審核。
井通區(qū)塊鏈智能合約的基礎
? ? ? ?國際唯一分層(5層)的區(qū)塊鏈底層技術

對應于TCP/IP網(wǎng)絡協(xié)議架構分層,井通區(qū)塊鏈信任棧通過5個層次:網(wǎng)絡層、區(qū)塊層、數(shù)據(jù)層、價值層以及合約層,保障了區(qū)塊鏈可信任的特點在整個架構里各層次的覆蓋,從底層有效保護數(shù)據(jù)安全,每一個層次都可以為一定的應用服務,滿足不同的應用的需求,為個人或企業(yè)快速安全的實現(xiàn)各種應用場景和商業(yè)模式提供保障。區(qū)塊鏈的發(fā)展成熟是也是多層次的發(fā)展成熟,不是一個單一的成熟路徑。區(qū)塊鏈本身基于分層設計,每一個層次的成熟度不一樣,可以根據(jù)每個層次的成熟情況,推出相應的區(qū)塊鏈產(chǎn)品。
? ? ? ? 底層平臺分層設計
對應于TCP/IP網(wǎng)絡協(xié)議架構分層,將區(qū)塊鏈底層平臺分為網(wǎng)絡層,數(shù)據(jù)層,價值層,合約層,各層相互協(xié)同。
TX層--底層系統(tǒng)稱為TX層,負責處理最基本的TX,合約層:在TX層之上增加一個合約層,負責處理合約。
合約要素分層管理:合約的要素(code,state,storage,transaction)transaction的執(zhí)行下傳到TX層,其他部分的執(zhí)行在合約層實現(xiàn)。合約的執(zhí)行速度和TX層的ledgerclose的速度去耦合。合約的狀態(tài)變化可以以合約節(jié)點的共識速度完成。
共識節(jié)點中引入分片技術
對每個交易自動隨機選擇處理此交易的節(jié)點。利用了眾多節(jié)點的處理能力,同時維持足夠的容錯空間;“規(guī)劃”網(wǎng)絡間信息流量,提高網(wǎng)絡的整體效率。
用戶可以標識需要的合約節(jié)點個數(shù)和共識達成的條件。創(chuàng)建合約時,一方面用戶可以靈活控制付出的花費和可靠性之間的平衡,另一方面使得合約層能夠更加高效的處理更多的合約。
基于智能合約的快速交易可以看成是一個分片技術的特例。從更通用的概念講,對智能合約執(zhí)行節(jié)點的選擇性執(zhí)行,就是一個分片技術的實現(xiàn)。
除以上所述的快速交易外,如果多個智能合約節(jié)點之間通過預定義的協(xié)議(BFT)來實現(xiàn)之間的信息同步,那么他們之間就實現(xiàn)了一個BFT的共識。當然,采用這樣的公識之后,對智能合約的處理效率會降低,但是比通常的全部節(jié)點同時處理一個合約的情況,仍然大大提高了。
共識節(jié)點外概率抽樣
保障合約系統(tǒng)的安全性。
井通區(qū)塊鏈采用自主產(chǎn)權的智能合約體系
A,自有知識產(chǎn)權的具備高效自適應特征的隨機BFT共識算法保證交易的連續(xù)性和可溯源性。
B,井通區(qū)塊鏈實現(xiàn)全球首個異步合約調(diào)用以及亞秒級拜占庭容錯的快速合約調(diào)用,不會阻塞系統(tǒng)共識和其他創(chuàng)異步調(diào)用合約機制。
C,支持智能合約的授權訪問控制,滿足不同應用的數(shù)據(jù)安全性要求。
D,設計自動觸發(fā)的合約執(zhí)行,讓合約具有更強大的應用價值,提供真實的智能合約。
E,井通智能合約具有類似于閃電網(wǎng)絡的快速秒級確認功能。
井通公鏈智能合約創(chuàng)新:分層實現(xiàn)+異步調(diào)用
智能合約指合約的編寫可以通過代碼的形式預先編寫。一旦代碼運行,執(zhí)行無法干預。為了實現(xiàn)智能合約的功能,通常需要在共識機制里面添加支持。一般實現(xiàn)的方式可以是腳本語言或者是圖靈完備的程序語言。后者通常需要單獨的虛擬機執(zhí)行來隔絕與其他模塊的相關性。以太坊主要特色是支持圖靈完備的智能合約。它采用了POW的共識方式,加快了區(qū)塊生成的速度,并通過vm來執(zhí)行合約,使得合約的執(zhí)行也能修改共識的輸出。
a) 我們采用TX驅動的做法,合約的創(chuàng)建,合約功能的調(diào)用,都由TX發(fā)起,如果執(zhí)行的過程中需要修改用戶的余額,則會發(fā)起交易并發(fā)到下層的TX,所有這些交易都將在TX執(zhí)行驗證并記錄在底層的區(qū)塊鏈中
b)TX層的交易不受合約的影響
c)TX層的跟合約相關的交易以單獨的TX的方式保存合約的代碼和狀態(tài),合約的具體狀態(tài)對應于對合約相關功能的調(diào)用及參數(shù),TX層的狀態(tài)hash保證信息的一致性。
d)合約層的執(zhí)行由多個合約節(jié)點contractvalidator執(zhí)行,以確定性的方式分別執(zhí)行并進行共識
e)每個合約節(jié)點采用VM執(zhí)行代碼。
f)合約節(jié)點保存合約執(zhí)行的storage在這樣的分層設計下,我們進一步優(yōu)化了井通系統(tǒng),使得合約的調(diào)用采用異步的方式,在此基礎上,實現(xiàn)合約的快速調(diào)用和返回,同時支持用戶選擇分片的方式來執(zhí)行智能合約,不需要所有的節(jié)點都做同樣的事情,提高了整個系統(tǒng)的處理能力。
智能合約的異步調(diào)用
現(xiàn)有的智能合約的執(zhí)行采用同步方式,利用交易觸發(fā)或者自動觸發(fā)合約調(diào)用,合約在具體執(zhí)行的時候,區(qū)塊鏈的共識機制必須等待合約執(zhí)行完,返回結果后才能繼續(xù)操作,從而完成對當前區(qū)塊的共識。
這樣的智能合約執(zhí)行方式具有以下缺陷:
(1)合約執(zhí)行的速度嚴重影響區(qū)塊生成的時間:
因為區(qū)塊共識依賴于合約執(zhí)行的結果,每個節(jié)點必須對合約的結果的一致性達成共識,因此,合約的執(zhí)行速度的快慢,直接影響區(qū)塊后續(xù)操作,導致區(qū)塊生成時間的延遲。
(2)合約執(zhí)行的速度嚴重影響區(qū)塊鏈能夠支持的合約執(zhí)行并發(fā)量:
在區(qū)塊鏈生成的頻率通常大致固定的情況下,在同樣的時間段內(nèi),一個合約執(zhí)行的快慢,將直接影響到同區(qū)塊其他合約的執(zhí)行,極端情況下,一個惡意的合約可能導致系統(tǒng)無法處理其他的合約,導致處理合約的并發(fā)量大大降低。
(3)合約執(zhí)行過程中的容錯能力受限:
由于采用同步執(zhí)行的方式,合約執(zhí)行時針對各種錯誤情況的處理需要全面考慮,并且實現(xiàn)對各種時間敏感的操作的快速處理,比如需要對各種操作的超時情況作相應的處理。
一些現(xiàn)有的解決方案,如以太坊,采用GAS的方式,對每個合約進行運算量的估算,并且利用一個系統(tǒng)總GAS量來控制當前區(qū)塊能支持的總運算量,來保證共識的按時完成。但是系統(tǒng)能支持的合約總數(shù)受到這個總量GAS的限制,如果合約的代碼越來越復雜,整個系統(tǒng)能支持的合約數(shù)就越來越少;另外,以太坊共識時間有限,GAS的最高值并不能大幅增加。
跨區(qū)塊異步調(diào)用合約系統(tǒng)
目標:
該系統(tǒng)的區(qū)塊共識不依賴于合約執(zhí)行結果,可提高合約執(zhí)行的并發(fā)量以及區(qū)塊能支持的合約數(shù)量,提高系統(tǒng)容錯能力。
優(yōu)勢
井通的區(qū)塊鏈系統(tǒng)以異步調(diào)用作為后臺核心技術,與現(xiàn)有智能合約執(zhí)行技術相比具有以下優(yōu)勢:
(1) 隔絕了合約執(zhí)行和系統(tǒng)共識單元,合約的執(zhí)行可以在遠端,使得合約的執(zhí)行不再占有系統(tǒng)共識的資源;
(2) 合約執(zhí)行單元和系統(tǒng)共識單元的去耦合,使得合約執(zhí)行模塊和共識模塊相對獨立,支持熱插拔;
(3)在共識驗證單元和合約執(zhí)行單元之間設立合約執(zhí)行緩存單元,在整個合約執(zhí)行過程中創(chuàng)造性地采用了異步調(diào)用執(zhí)行方式,使得合約的調(diào)用和執(zhí)行結果在跨區(qū)(區(qū)塊i和區(qū)塊(i+k)之間分別實現(xiàn),同時又能保證各個驗證節(jié)點之間完成共識;該種合約異25步調(diào)用執(zhí)行模式提高了合約執(zhí)行的并發(fā)量,共識的過程無需要等待合約的執(zhí)行結果,大大提高了區(qū)塊能支持的合約數(shù)量。
(4)高了整個系統(tǒng)的容錯能力,一方面系統(tǒng)可以設置合適的超時處理機制來處理合約延時的情況,另一方面,用戶可以在合約調(diào)用中配置合適的k值來保證長時執(zhí)行的合約得到正確處理。

單元
井通的異步調(diào)用合約系統(tǒng),包括以下單元:
1. 分布式系統(tǒng)驗證單元:包括一個或多個服務節(jié)點以及若干個驗證節(jié)點,用于接收用戶遞交的交易請求集合{TX},包括合約調(diào)用請求TX和支付請求TX;
2. 2.分布式合約執(zhí)行單元:位于本地或遠端的分布式系統(tǒng)驗證單元,與分布式系統(tǒng)驗證單元之間通過預定義協(xié)議進行通訊,用以獲取合約執(zhí)行所需信息,并在合約執(zhí)行完畢后,將結果返回至驗證節(jié)點;
3. 合約執(zhí)行緩存單元:包括用于接收來自驗證節(jié)點的合約調(diào)用請求,發(fā)送合約調(diào)用請求至分布式合約執(zhí)行單元,接收合約執(zhí)行結果,返回當前合約執(zhí)行狀態(tài)至驗證節(jié)點,以實現(xiàn)合約的異步調(diào)用;
實現(xiàn)方法
服務節(jié)點接收用戶遞交的交易請求TX,每個驗證節(jié)點收集上述TX并匯集成交易請求集合{TX}i;
1. {TX}i中包含的合約調(diào)用請求發(fā)送至合約執(zhí)行緩存單元,合約執(zhí)行緩存單元在收到上述請求后立即返回當前合約執(zhí)行狀態(tài);
2. 在所有驗證節(jié)點收到{TX}i后,{TX}i在所有驗證節(jié)點完成共識,區(qū)塊i生成,驗證節(jié)點對共識后的{TX}i進行驗證,驗證后的狀態(tài)寫入?yún)^(qū)塊i;同時每個驗證節(jié)點創(chuàng)建一個查詢合約TXq,并將其加入到區(qū)塊(i+k)的交易請求集合{TX}(i+k)中;
3. 在進行1~2時,合約執(zhí)行緩存單元采用異步調(diào)用的方式將合約調(diào)用請求發(fā)送至分布式合約執(zhí)行單元,于后臺執(zhí)行合約,執(zhí)行完畢后,合約執(zhí)行緩存單元獲得合約執(zhí)行的最后結果,等待處理;
4. 區(qū)塊(i+k)處理周期開始,{TX}(i+k)中包含的合約調(diào)用請求發(fā)送至合約執(zhí)行緩存單元,合約執(zhí)行緩存單元立即返回當前合約執(zhí)行狀態(tài),同時,驗證節(jié)點從查詢合約TXq中取出合約相關信息,并向合約執(zhí)行緩存單元發(fā)出查詢請求,合約執(zhí)行緩存單元向驗證節(jié)點返回區(qū)塊i的合約調(diào)用請求的執(zhí)行結果,并更新查詢合約TXq;
5. 在所有驗證節(jié)點收到{TX}(i+k)后,更新后的查詢合約TXq和{TX}(i+k)合在一起形成一個新的集合,在所有驗證節(jié)點完成共識,區(qū)塊(i+k)生成,驗證節(jié)點對共識過的TX進行驗證,驗證后的狀態(tài)寫入?yún)^(qū)塊(i+k)。
基于智能合約的快速交易
缺陷
現(xiàn)有基于區(qū)塊鏈的分布式交易方式因區(qū)塊鏈共識方式、區(qū)塊鏈生成時間、區(qū)塊的生成時間、區(qū)塊的大小而受到很大的限制。
基于區(qū)塊鏈的交易速度一般都在秒級、甚至分鐘級以上,此外,還存在如下缺陷:
1.交易請求在分布式系統(tǒng)中的傳播過程存在延遲,從某個發(fā)起節(jié)點到信息傳播至其他所有節(jié)點之間存在信息延遲;2.共識過程存在時間延遲:數(shù)據(jù)的更新必須在共識完成后才能寫入賬本中,這種寫入是間歇性的,每個驗證周期更新一次,用戶對數(shù)據(jù)更新的請求必須在更新周期之后才能得到響應并返回;3.現(xiàn)有的基于智能合約不僅受到以上兩點的影響,還受到合約執(zhí)行延遲的影響。
一些現(xiàn)有的解決方案,如閃電網(wǎng)絡、比特幣網(wǎng)絡采用通道的辦法來加快對交易請求的處理,但上述方案的協(xié)議或者比較復雜,或者采用了非拜占庭容錯的方式,限制了其更廣泛的應用。
井通公鏈方案:基于區(qū)塊鏈合約的快速交易系統(tǒng)
在異步調(diào)用合約的基礎上,對合約節(jié)點分成兩種:普通合約節(jié)點和快速交易合約節(jié)點。普通交易合約節(jié)點與驗證節(jié)點之間通過預定義協(xié)議進行通訊,獲取合約執(zhí)行所需信息,合約執(zhí)行完畢后,將結果返回至驗證節(jié)點;快速交易合約節(jié)點執(zhí)行快速交易請求并將執(zhí)行結果返回至合約接入服務器。
目標
井通系統(tǒng)分為獨立的合約層和底層共識層,快速交易對合約層發(fā)起調(diào)用,在合約層實現(xiàn)快速交易,其快速執(zhí)行結果周期性或非周期性返回底層共識層進行驗證確認并寫入?yún)^(qū)塊鏈,使得交易的執(zhí)行28不受區(qū)塊關閉的時間和區(qū)塊大小的影響,也不受分布式網(wǎng)絡傳遞的影響,同時具備分布式區(qū)塊鏈固有的優(yōu)點,克服了現(xiàn)有區(qū)塊鏈交易方式在交易傳播、共識過程以及和合約執(zhí)行過程中存在的延遲現(xiàn)象,以接近實時的方式實現(xiàn)對交易的快速支持,維持了交易系統(tǒng)的拜占庭容錯性,可實現(xiàn)對交易細節(jié)的隱藏和加密,同時保持了分布式系統(tǒng)的數(shù)據(jù)的一致性和完整性。
實現(xiàn)方法
快速調(diào)用的具體實現(xiàn)方法如下:




(1)快速交易初始化:
兩個或多個需實現(xiàn)快速交易的用戶之間達成一致并創(chuàng)建一個合約,發(fā)起一個快速交易初始化請求tx,合約接入服務器經(jīng)服務節(jié)點將該tx發(fā)送至驗證節(jié)點形成交易集,驗證節(jié)點對該交易集進行共識;完成共識后,驗證節(jié)點將該交易集發(fā)送所有合約節(jié)點,依據(jù)預定義協(xié)議通過分布式隨機算法在其中隨機且確定性地選取一個快速交易合約節(jié)點;
(2)快速交易實現(xiàn):
用戶發(fā)起快速交易執(zhí)行請求,合約接入服務器經(jīng)服務節(jié)點將該請求發(fā)送至快速交易合約節(jié)點,于該節(jié)點執(zhí)行交易請求,直接返回快27速交易結果至合約接入服務器,同時該服務器記錄交易狀態(tài),并保存自上一次確認后的所有快速交易歷史;該快速交易合約節(jié)點的交易執(zhí)行方式可以通過非對稱加密方式或者其他方式(例如對稱加密方式)運行,使得合約/交易的執(zhí)行是保密的,僅對用戶和當前合約節(jié)點可見。
用戶可通過合約接入服務器查詢交易的歷史記錄;
(3)快速交易歷史的分布式確認:
用戶可在各方簽名驗證的情況下,對可未確認的交易主動周期(比如10分鐘、1天、1周)或非周期性發(fā)起確認交易請求tx,也可以根據(jù)實現(xiàn)定義的合約定時對發(fā)起確認交易請求tx;發(fā)起的確認交易請求tx與上述未確認的交易歷史合并,產(chǎn)生一個自上次確認后到當前狀態(tài)的變換交易;合約接入服務器經(jīng)服務節(jié)點將該變換交易發(fā)送至驗證節(jié)點,驗證節(jié)點對交易集進行共識,再將其發(fā)送至所有合約節(jié)點進行合約執(zhí)行,合約執(zhí)行結果經(jīng)驗證節(jié)點驗證并確認,與其他交易信息(普通交易或普通合約執(zhí)行信息)一起寫入?yún)^(qū)塊鏈,同時該合約執(zhí)行結果返回給客戶,通過共識節(jié)點對歷史交易記錄進行確認,從而實現(xiàn)交易確認的拜占庭容錯。
當用戶重復步驟(2),選取下一個快速交易合約節(jié)點后,原來的快速交易合約節(jié)點的交易歷史將被清空。