日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

重构智能合约(中):平行宇宙与无限扩展

發(fā)布時(shí)間:2025/3/15 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 重构智能合约(中):平行宇宙与无限扩展 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1、前言

本文是小蟻的兩位創(chuàng)始人過去兩年中在設(shè)計(jì)小蟻智能合約時(shí)所做的深度思考和技術(shù)探索的結(jié)果。《重構(gòu)智能合約》系列文章將分為上、中、下三篇,分別從確定性和資源控制、擴(kuò)展性和耦合度、通用性和生態(tài)兼容三個(gè)方面來剖析現(xiàn)有智能合約系統(tǒng)的優(yōu)缺點(diǎn),并提出新的智能合約體系的設(shè)計(jì)思路。

在上一篇《重構(gòu)智能合約(上):非確定性的幽靈》中我們分析了智能合約對(duì)確定性、資源控制和隔離的需求,得出了虛擬機(jī)作為智能合約的執(zhí)行環(huán)境在上述三點(diǎn)都相對(duì)與容器技術(shù)具備相當(dāng)?shù)膬?yōu)勢(shì)。本篇中,我們將從擴(kuò)展性的角度繼續(xù)比較幾種智能合約系統(tǒng)的優(yōu)劣,并提出改進(jìn)的思路。

2、執(zhí)行環(huán)境的性能

智能合約的執(zhí)行環(huán)境會(huì)對(duì)合約的性能起到非常重要的作用。目前主流的區(qū)塊鏈架構(gòu)對(duì)智能合約執(zhí)行環(huán)境的設(shè)計(jì)主要分為兩種:虛擬機(jī)和容器(Docker)。無論是虛擬機(jī)還是容器,它們的作用都是在一個(gè)沙盒中執(zhí)行合約代碼,并對(duì)合約所使用的資源進(jìn)行隔離和限制。

1) 虛擬機(jī)

虛擬機(jī)通常是指能夠像真實(shí)機(jī)器一樣執(zhí)行程序的計(jì)算機(jī)的軟件實(shí)現(xiàn)。有些虛擬機(jī)會(huì)模擬出一個(gè)完整的物理計(jì)算機(jī),比如VMware、Hyper-V等,可以在這些虛擬機(jī)上安裝操作系統(tǒng)和應(yīng)用程序;另一些虛擬機(jī)則只提供了硬件的抽象層,而與具體的底層硬件無關(guān),例如Java虛擬機(jī)。

區(qū)塊鏈智能合約系統(tǒng)的設(shè)計(jì)中,很少會(huì)采用模擬完整物理計(jì)算機(jī)的模式,因?yàn)檫@種方式會(huì)消耗大量的資源并嚴(yán)重影響性能,且很難兼容不同的硬件架構(gòu)。所以絕大多數(shù)的區(qū)塊鏈會(huì)采用更加輕量級(jí)的虛擬機(jī)架構(gòu),例如以太坊開發(fā)了EVM,R3 Corda則直接采用了JVM,還有一些區(qū)塊鏈采用了V8引擎——Google的JavaScript引擎(虛擬機(jī))。

當(dāng)我們分析執(zhí)行環(huán)境的性能時(shí),有兩個(gè)指標(biāo)是非常關(guān)鍵的:(1)指令的執(zhí)行速度(2)執(zhí)行環(huán)境本身的啟動(dòng)速度。對(duì)于智能合約而言,執(zhí)行環(huán)境的啟動(dòng)速度往往要比指令的執(zhí)行速度更為重要。智能合約中較多是一些甚少涉及IO操作的邏輯判斷指令,這些指令的執(zhí)行速度很容易得到優(yōu)化。上一篇《重構(gòu)智能合約(上):非確定性的幽靈》中,我們提到了出于安全性考慮,智能合約必須在相互隔離的沙盒執(zhí)行環(huán)境中運(yùn)行。每個(gè)智能合約每次被調(diào)用,都必須啟動(dòng)一個(gè)新的虛擬機(jī)/容器。因此執(zhí)行環(huán)境本身的啟動(dòng)速度(啟動(dòng)一個(gè)虛擬機(jī)/容器)對(duì)智能合約系統(tǒng)的性能影響更大。

上述的EVM、JVM、V8引擎這些輕量級(jí)的虛擬機(jī)架構(gòu)對(duì)智能合約的性能提升有顯著的優(yōu)勢(shì)。它們的啟動(dòng)速度非常快,占用資源也很小,適合像智能合約這樣短小的程序。缺點(diǎn)是,這類虛擬機(jī)的執(zhí)行效率會(huì)相對(duì)略低,好在智能合約一般都比較短小,會(huì)更加注重環(huán)境加載的速度而非代碼執(zhí)行的速度。另外,通過JIT(即時(shí)編譯器)技術(shù)對(duì)熱點(diǎn)智能合約進(jìn)行靜態(tài)編譯和緩存可以顯著提升虛擬機(jī)的執(zhí)行效率。

2) 容器(Docker)

與其它主流區(qū)塊鏈設(shè)計(jì)不同的是,超級(jí)帳本中的子項(xiàng)目Fabric獨(dú)樹一幟地采用Docker作為其智能合約的執(zhí)行環(huán)境。與虛擬機(jī)的作用一樣,Docker也進(jìn)行了資源的隔離,但不如虛擬機(jī)那么隔離充分。Docker本身沒有采用虛擬化技術(shù),而是讓程序直接運(yùn)行在底層操作系統(tǒng)上,因此代碼執(zhí)行的效率很高。但由于其相對(duì)于輕量級(jí)虛擬機(jī)而言過于龐大的體型,部署和啟動(dòng)Docker本身需要消耗大量的時(shí)間和資源。當(dāng)使用在智能合約系統(tǒng)時(shí),Docker的啟動(dòng)時(shí)間成為了制約整體效率的瓶頸。Fabric在性能測(cè)試時(shí),即便用上了IBM的大型機(jī)LinuxONE這樣的強(qiáng)悍硬件,性能依然不高。

執(zhí)行環(huán)境的代碼執(zhí)行速度就好比汽車的最高時(shí)速,而執(zhí)行環(huán)境的啟動(dòng)速度則好比汽車的0-100km/h加速度。和一般程序相比,智能合約短小精悍,總是處在“啟動(dòng)—停止—啟動(dòng)—停止”的狀態(tài),很少能夠跑到極速。執(zhí)行環(huán)境的啟動(dòng)速度才是影響智能合約性能的關(guān)鍵因素。

3、并發(fā)、分片與無限擴(kuò)展

當(dāng)談及一個(gè)系統(tǒng)的擴(kuò)展性時(shí),總會(huì)涉及到兩個(gè)詞Scale Up(垂直擴(kuò)展)和Scale Out(水平擴(kuò)展)。最典型的垂直擴(kuò)展案例是單核時(shí)代的CPU——主要靠提高主頻達(dá)到性能的提升。垂直擴(kuò)展很容易就碰上天花板,當(dāng)CPU制程工藝的提升越來越困難后,通過多核實(shí)現(xiàn)水平擴(kuò)展,對(duì)指令進(jìn)行并行處理,成為了提升CPU性能的重要手段。

正因?yàn)榇怪睌U(kuò)展會(huì)很快觸及造價(jià)、技術(shù)的極限,一個(gè)不可拆分業(yè)務(wù)的串行系統(tǒng)的擴(kuò)展性(或曰性能提升能力)就會(huì)很弱——它取決于單臺(tái)設(shè)備的最大處理能力。當(dāng)我們需要對(duì)系統(tǒng)進(jìn)行擴(kuò)展時(shí),如果有辦法將串行系統(tǒng)改造成并行系統(tǒng),那么理論上我們將可以獲得近乎無限的擴(kuò)展性。我們?cè)诳紤]對(duì)區(qū)塊鏈系統(tǒng)進(jìn)行擴(kuò)展時(shí),是否有無限擴(kuò)展的可能?換言之,區(qū)塊鏈能否并行地對(duì)業(yè)務(wù)進(jìn)行處理?

區(qū)塊鏈?zhǔn)且粋€(gè)分布式的大賬本,里面記錄了各式各樣的狀態(tài)數(shù)據(jù),同時(shí)也記錄了這些狀態(tài)如何變化的規(guī)則,智能合約正是用來記錄這些規(guī)則的載體。區(qū)塊鏈能否并行地對(duì)業(yè)務(wù)進(jìn)行處理,就取決于多個(gè)智能合約能否并發(fā)執(zhí)行——即合約的執(zhí)行是否是順序無關(guān)的。

舉個(gè)例子,某賬戶中有10元的余額,現(xiàn)有兩個(gè)合約對(duì)該賬戶進(jìn)行修改,第一個(gè)合約在賬戶中增加5元,第二個(gè)合約在賬戶中扣除11元。如果先執(zhí)行前者,則最終賬戶的余額為4元;如果先執(zhí)行后者,由于余額不足,第二個(gè)合約將會(huì)執(zhí)行失敗,而第一筆合約會(huì)執(zhí)行成功,最終賬戶余額為15元。像這樣的兩個(gè)合約由于執(zhí)行的順序不同而導(dǎo)致不同的結(jié)果,那么它們是不可以并發(fā)執(zhí)行的,只能串行處理。

反過來,如果兩個(gè)合約分別對(duì)兩個(gè)不同的賬戶進(jìn)行修改,那么它們無論哪一個(gè)先執(zhí)行,結(jié)果都不會(huì)不同,所以它們是可以并發(fā)執(zhí)行的。

從上面的例子可以看出,兩個(gè)合約是否可以并行處理,取決于這兩個(gè)合約是否是順序無關(guān)的;而是否順序無關(guān),則取決于他們是否能夠?qū)ν粭l狀態(tài)記錄進(jìn)行修改。

基于上面的分析,我們可以很容易設(shè)計(jì)出一個(gè)具備“無限擴(kuò)展”能力的智能合約系統(tǒng)。只需要簡(jiǎn)單地規(guī)定:(1)一個(gè)智能合約只能修改屬于該合約自己的狀態(tài)記錄;(2)同一個(gè)事務(wù)批次(區(qū)塊)中,一個(gè)合約只能被運(yùn)行一次。這樣一來,所有的智能合約之間都是順序無關(guān)可以平行處理了。干的漂亮!

但是,等等……如果“一個(gè)智能合約只能修改屬于該合約自己的狀態(tài)記錄”,就意味著合約間無法相互調(diào)用,每個(gè)合約都是一個(gè)孤島;如果“一個(gè)區(qū)塊中,一個(gè)合約只能被運(yùn)行一次”,就意味著用智能合約發(fā)行的某種數(shù)字資產(chǎn)在一個(gè)區(qū)塊里只能處理一筆交易。這顯然和“智能”二字的設(shè)計(jì)初衷大相徑庭。畢竟合約間的相互調(diào)用,同一區(qū)塊中多次調(diào)用同一個(gè)合約,都是我們想要的設(shè)計(jì)目標(biāo)。

這樣一來情況就變得復(fù)雜多了,特別是像以太坊這種支持動(dòng)態(tài)調(diào)用(通過CALL指令)的智能合約系統(tǒng),不可能在運(yùn)行前就判斷出合約的行為和調(diào)用路徑,也就無法判斷合約會(huì)修改哪些狀態(tài)記錄。因此,以太坊的擴(kuò)展性一直是其設(shè)計(jì)上的一大弊病,其目前的架構(gòu)設(shè)計(jì)難以支撐以太坊成為“全球計(jì)算平臺(tái)”的遠(yuǎn)大愿景。為了解決擴(kuò)展性問題,以太坊提出了分片(Sharding)方案:

打個(gè)比方,分片就類似于戶籍制度。計(jì)算一個(gè)合約的散列值再對(duì)256取模,就可以把合約分配到256個(gè)片區(qū)中去,這相當(dāng)于給每個(gè)合約分配了一個(gè)該片區(qū)的“戶口”。江蘇戶口的合約只能調(diào)用江蘇的合約,上海戶口的合約就只能調(diào)用上海的,不能直接彼此調(diào)用。

這樣一來,江蘇、上海等256個(gè)片區(qū)的合約就可以按片區(qū)進(jìn)行并行處理了,看起來執(zhí)行效率可以得到256倍的提升。但是在這種設(shè)計(jì)下,想要跨片區(qū)調(diào)用,就必須向一個(gè)全局賬本(區(qū)塊鏈)寫入調(diào)用請(qǐng)求,另一片區(qū)的合約收到請(qǐng)求后再執(zhí)行操作,并再次寫入全局賬本來返回調(diào)用結(jié)果。這導(dǎo)致了跨片區(qū)調(diào)用無法在同一個(gè)業(yè)務(wù)批次(區(qū)塊)中完成,效率顯著降低。在真實(shí)的應(yīng)用場(chǎng)景中,分片的結(jié)果很可能是大家都擠到一個(gè)“繁華片區(qū)”中去,因?yàn)檫@樣才能最高效的進(jìn)行相互調(diào)用,避免跨區(qū)操作。在城市郊區(qū)修建再多的干道,也無法解決市中心的擁堵問題。

另外,智能合約代碼的加載方式也會(huì)影響到擴(kuò)展性。目前主流的區(qū)塊鏈智能合約系統(tǒng)都會(huì)要求將智能合約代碼發(fā)布到鏈上,然后再?gòu)逆溕霞虞d代碼執(zhí)行。有些合約代碼可能只被使用一次就廢棄了,但在區(qū)塊鏈中永久性地存在,占用節(jié)點(diǎn)的存儲(chǔ)資源,久而久之這些廢棄代碼會(huì)成為區(qū)塊鏈的巨大負(fù)擔(dān),影響擴(kuò)展性。

另一種方案,是將智能合約的散列值記錄在鏈上,用IPFS等以散列值為索引的新型分布式存儲(chǔ)網(wǎng)絡(luò)來存儲(chǔ)完整合約代碼。在執(zhí)行合約的時(shí)候,再?gòu)逆溚饧虞d代碼。由于合約的散列值已經(jīng)在鏈上記錄,即使從鏈外加載代碼也不用擔(dān)心合約的內(nèi)容被篡改,這樣可以為節(jié)點(diǎn)節(jié)省大量的存儲(chǔ)空間。同時(shí)也能對(duì)智能合約的內(nèi)容進(jìn)行一定程度的隱私保護(hù)。

4、耦合度

耦合是指兩個(gè)或兩個(gè)以上的實(shí)體相互依賴于對(duì)方的一個(gè)量度。在區(qū)塊鏈與智能合約系統(tǒng)的設(shè)計(jì)中,對(duì)于耦合度的控制有兩個(gè)非常極端的例子:

1) 以太坊

以太坊在智能合約系統(tǒng)的設(shè)計(jì)中是高耦合的典型,區(qū)塊鏈與EVM之間到處充斥著相互依賴的關(guān)系,例如:

  • 費(fèi)用的計(jì)算混雜在虛擬機(jī)的實(shí)現(xiàn)邏輯中;

  • 虛擬機(jī)指令集中包含大量用于訪問賬本數(shù)據(jù)的指令;

  • 虛擬機(jī)直接提供以區(qū)塊鏈賬本作為載體的持久化存儲(chǔ)指令。

將區(qū)塊鏈的業(yè)務(wù)邏輯與虛擬機(jī)混在一起,并不是一個(gè)良好的設(shè)計(jì)。這會(huì)造成一系列的問題,一旦區(qū)塊鏈的功能需要改進(jìn)或者升級(jí),勢(shì)必就要對(duì)EVM也進(jìn)行相應(yīng)的修改,這種修改多數(shù)情況都會(huì)體現(xiàn)在增加新的指令上;而EVM幾乎沒有辦法移植到其它區(qū)塊鏈系統(tǒng)中,除非另一個(gè)鏈的底層架構(gòu)與以太坊高度一致,或者專門針對(duì)EVM開發(fā)一個(gè)對(duì)接層。這種模式會(huì)對(duì)以太坊的生態(tài)應(yīng)用造成很大的局限性,關(guān)于這一點(diǎn)我們將會(huì)在《重構(gòu)智能合約(下):兼容性與生態(tài)》中詳述。

2) Fabric

與以太坊的設(shè)計(jì)模式相反,Fabric的智能合約系統(tǒng)采用了低耦合的設(shè)計(jì),區(qū)塊鏈賬本與Docker之間幾乎沒有任何依賴關(guān)系,因?yàn)镈ocker本身就被廣泛應(yīng)用于區(qū)塊鏈以外的大量場(chǎng)景之中。在Docker中運(yùn)行的智能合約程序只能通過gRPC協(xié)議與節(jié)點(diǎn)進(jìn)行通信,協(xié)議中包含了訪問賬本和持久化存儲(chǔ)的功能。當(dāng)區(qū)塊鏈的功能需要改進(jìn)或者升級(jí)時(shí),只需要對(duì)gRPC協(xié)議進(jìn)行改動(dòng)即可。這種超低耦合度的設(shè)計(jì)模式值得其它區(qū)塊鏈的開發(fā)者學(xué)習(xí)參考。

高內(nèi)聚、低耦合是設(shè)計(jì)系統(tǒng)架構(gòu)時(shí)所常常追求的目標(biāo)。Fabric的設(shè)計(jì)目標(biāo)是打造通用的許可型區(qū)塊鏈的技術(shù)框架,因此一開始就采用了高度模塊化的設(shè)計(jì)思想;而以太坊最初的設(shè)計(jì)目標(biāo)是一個(gè)具體的公有鏈實(shí)例,而非技術(shù)框架。因此以太坊中存在著系統(tǒng)耦合度過高的問題。這將會(huì)妨礙以太坊作為一種通用技術(shù)被使用在聯(lián)盟鏈、私有鏈上。

5、小結(jié)

在本篇中,我們分析了智能合約系統(tǒng)理想的執(zhí)行環(huán)境性能、并發(fā)處理能力、耦合度和代碼加載方式,發(fā)現(xiàn)了以太坊的一些高度抽象,無灰度的設(shè)計(jì)帶來的擴(kuò)展性問題,提出了可以做到理論上“無限擴(kuò)展”的高度并行化智能合約系統(tǒng)的設(shè)計(jì)思路。我們認(rèn)為一個(gè)可以良好進(jìn)行并發(fā)執(zhí)行的智能合約系統(tǒng),應(yīng)該具有以下特征:

  • 輕量級(jí)的執(zhí)行環(huán)境:快速的啟動(dòng)時(shí)間和較高的執(zhí)行效率。

  • 可插拔的執(zhí)行環(huán)境架構(gòu):默認(rèn)的執(zhí)行環(huán)境應(yīng)該不提供持久化存儲(chǔ),從而讓合約默認(rèn)是一種類似于微服務(wù)的無狀態(tài)函數(shù),從而可以直接并發(fā)處理。僅在需要存儲(chǔ)狀態(tài)時(shí),才提供可插拔的持久化存儲(chǔ)模塊。這樣的虛擬機(jī)默認(rèn)只有一個(gè)CPU和棧,僅在需要時(shí)才提供“硬盤”和其他IO設(shè)備。

  • 明示化的調(diào)用關(guān)系:即只提供靜態(tài)調(diào)用的功能,從而使得程序的調(diào)用關(guān)系可以在運(yùn)行它之前就整理清楚。一旦調(diào)用路徑明確了,那么合約可能會(huì)修改到的狀態(tài)數(shù)據(jù)也就明確了,依據(jù)這些明示的調(diào)用路徑就可以進(jìn)行即時(shí)的動(dòng)態(tài)分片提高合約執(zhí)行的并行能力。

  • 可鏈外存儲(chǔ)的合約代碼:通過鏈上存儲(chǔ)散列值,鏈外存儲(chǔ)合約代碼實(shí)現(xiàn)存儲(chǔ)空間的擴(kuò)展性。

  • 低耦合度的設(shè)計(jì):合約語言、執(zhí)行環(huán)境、區(qū)塊鏈之間的低耦合度,提高智能合約系統(tǒng)的通用性。

在本系列最后一篇《重構(gòu)智能合約(下):兼容性與生態(tài)》中,我們將會(huì)分析現(xiàn)有智能合約系統(tǒng)對(duì)編程語言的選擇,并提出一種讓非區(qū)塊鏈開發(fā)者也能立即編寫智能合約的新模式。

參考閱讀:《重構(gòu)智能合約(上):非確定性的幽靈》


https://36kr.com/p/5067556.html

總結(jié)

以上是生活随笔為你收集整理的重构智能合约(中):平行宇宙与无限扩展的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。