當(dāng)前位置:首頁(yè) > 物聯(lián)網(wǎng) > 區(qū)塊鏈
[導(dǎo)讀] 關(guān)注區(qū)塊鏈的人,經(jīng)常會(huì)聽到有關(guān)“智能合約”的討論。智能合約允許在沒(méi)有第三方的情況下進(jìn)行可信交易,這些交易可追蹤且不可逆轉(zhuǎn),是區(qū)塊鏈技術(shù)的關(guān)鍵。百度超級(jí)鏈在智能合約上也進(jìn)行了深入研發(fā),實(shí)現(xiàn)高性能,

關(guān)注區(qū)塊鏈的人,經(jīng)常會(huì)聽到有關(guān)“智能合約”的討論。智能合約允許在沒(méi)有第三方的情況下進(jìn)行可信交易,這些交易可追蹤且不可逆轉(zhuǎn),是區(qū)塊鏈技術(shù)的關(guān)鍵。百度超級(jí)鏈在智能合約上也進(jìn)行了深入研發(fā),實(shí)現(xiàn)高性能,且支持多種語(yǔ)言編寫,大大提高合約使用效率。

本期超級(jí)鏈學(xué)院線上微課堂就帶你突破以往智能合約的性能極限!明星講師超哥將主要圍繞以下幾點(diǎn)展開:

1.超級(jí)鏈智能合約有哪些特點(diǎn)?

2.超級(jí)鏈智能合約與以太坊的異同點(diǎn)?

3.超級(jí)鏈智能合約執(zhí)行的運(yùn)行模式是怎樣的?

4.超級(jí)鏈智能合約如何做到高性能?

5.超級(jí)鏈智能合約能為開發(fā)者提供的能力?

快來(lái)繼續(xù)往下看吧!

Q1:什么是智能合約?

智能合約(英語(yǔ):Smart contract )是一種旨在以信息化方式傳播、驗(yàn)證或執(zhí)行合同的計(jì)算機(jī)協(xié)議。智能合約允許在沒(méi)有第三方的情況下進(jìn)行可信交易,這些交易可追蹤且不可逆轉(zhuǎn)。智能合約概念于1995年由Nick Szabo首次提出。

智能合約的目的是提供優(yōu)于傳統(tǒng)合約的安全方法,并減少與合約相關(guān)的其他交易成本。

Q2:超級(jí)鏈的智能合約有什么特點(diǎn)

1.多語(yǔ)言支持,支持C++/Go等高級(jí)語(yǔ)言。

2.高性能,獨(dú)創(chuàng)的XuperModel數(shù)據(jù)模型來(lái)最大化合約并行執(zhí)行能力。

3.安全,支持合約資源審計(jì)以及屏蔽操作系統(tǒng)接口,保證合約安全。

4.可擴(kuò)展性,可以擴(kuò)展合約的多語(yǔ)言以及鏈上資源的訪問(wèn)能力。

5.隔離性, 不同合約調(diào)用之間互不影響。

確定性,同樣的參數(shù)和環(huán)境下得到一致的結(jié)果。

Q3:超級(jí)鏈智能合約跟hyperledger fabric合約的異同點(diǎn)

相同點(diǎn):

1.超級(jí)鏈和fabric的智能合約都使用了兩階段提交的預(yù)執(zhí)行模型,最大化的并發(fā)合約的執(zhí)行

2.超級(jí)鏈和fabric都可以使用高級(jí)語(yǔ)言,如go等編寫智能合約,降低合約的開發(fā)門檻。

不同點(diǎn):

1.fabric的合約是運(yùn)行在docker的常駐進(jìn)程,一個(gè)不規(guī)范的合約會(huì)導(dǎo)致多次合約調(diào)用互相影響,如全局變量的使用等。超級(jí)鏈的每次合約調(diào)用都會(huì)啟動(dòng)一個(gè)單獨(dú)的合約上下文,結(jié)合ModelCache,徹底做到多次合約調(diào)用相互隔離,互不影響。

2.fabric的合約沒(méi)有對(duì)合約的資源做限制,理論上合約里面的一個(gè)死循環(huán)會(huì)導(dǎo)致合約無(wú)法順利執(zhí)行。超級(jí)鏈的智能合約會(huì)設(shè)置資源的上限(cpu,內(nèi)存等),一旦合約的執(zhí)行超過(guò)上限會(huì)自動(dòng)停止,杜絕死循環(huán)的情況發(fā)生。

3.合約里面的代碼還是會(huì)訪問(wèn)系統(tǒng)的一些資源,比如文件系統(tǒng),隨機(jī)數(shù)等,都會(huì)導(dǎo)致合約的不確定性。超級(jí)鏈的智能合約對(duì)任何訪問(wèn)系統(tǒng)資源的系統(tǒng)調(diào)用都做了隔離,是一個(gè)行為完全可控的沙盒環(huán)境,不會(huì)出現(xiàn)不確定的行為。

Q4:超級(jí)鏈智能合約跟以太坊合約的異同點(diǎn)

相同點(diǎn):

1.超級(jí)鏈和以太坊的智能合約都具有確定性,即相同的輸入得到相同的輸出。

2.超級(jí)鏈和以太坊的智能合約都支持合約的資源審計(jì),從而保證合約安全。

不同點(diǎn):

1.目前以太坊的合約虛擬機(jī)是EVM,里面的大部分指令都是256bit的,導(dǎo)致性能比較低。超級(jí)鏈?zhǔn)褂玫暮霞s指令是WASM,是運(yùn)行于瀏覽器的匯編指令,有Google,Apple,Molliza, Microsoft四大公司聯(lián)合貢獻(xiàn),指令接近機(jī)器匯編,性能很高。

2.目前運(yùn)行于以太坊的語(yǔ)言主要是Sodility,通過(guò)編譯成EVM的字節(jié)碼從而運(yùn)行在以太坊上,然而由于EVM的很多指令跟以太坊的功能高度耦合,導(dǎo)致通用編程語(yǔ)言很難編譯到EVM指令上,因此以太坊的多語(yǔ)言支持比較弱。超級(jí)鏈得益于WASM指令,很多高級(jí)語(yǔ)言都可以編譯到WASM上,如C++,Go,Rust等,另外超級(jí)鏈?zhǔn)褂昧薠uperBridge來(lái)擴(kuò)展合約訪問(wèn)鏈上的能力,跟指令解耦,有更好的擴(kuò)展能力。

Q5:超級(jí)鏈智能合約是怎么運(yùn)行WASM指令的

超級(jí)鏈合約執(zhí)行有兩種運(yùn)行模式,

1.一種是解釋執(zhí)行,這種模式在讀取合約代碼之后,首先把合約代碼翻譯成一種內(nèi)存數(shù)據(jù)結(jié)構(gòu),之后根據(jù)指令類型逐條執(zhí)行,類比傳統(tǒng)的解釋型語(yǔ)言的解釋器。這種模式的優(yōu)點(diǎn)是部署合約比較快,缺點(diǎn)是性能比較慢一些。

2.另一種是編譯執(zhí)行,這種模式在讀取合約代碼之后,首先把合約翻譯成native cpu指令,如x86指令,之后交給cpu來(lái)運(yùn)行編譯之后的指令。這種模式的優(yōu)點(diǎn)是運(yùn)行速度很快,缺點(diǎn)是由于需要預(yù)先編譯,部署速度會(huì)比較慢,但編譯是一次性動(dòng)作,后續(xù)執(zhí)行直接復(fù)用編譯結(jié)果。

Q6:超級(jí)鏈智能合約是如何支持資源統(tǒng)計(jì)的

主要分三步:

第一步:分析合約的字節(jié)碼,根據(jù)字節(jié)碼分函數(shù)構(gòu)建出一個(gè)控制流圖。什么是控制流圖呢?我們大體上把合約的指令按照是否會(huì)引起跳轉(zhuǎn)分為兩類,一類是順序執(zhí)行的指令,如add, load等;一類是loop,if等會(huì)引起跳轉(zhuǎn)的指令,而控制流圖就是一個(gè)以控制指令為節(jié)點(diǎn)的能表現(xiàn)合約的指令流向的一個(gè)圖。

第二步,有了控制流圖我們就可以插入資源檢查的指令了,我們把所有的控制指令的子指令序列看做一個(gè)鏈表,如下面代碼所示的if語(yǔ)句的子block

if (flag) {

n += 1;

sum += n;

}

由于非跳轉(zhuǎn)指令是順序執(zhí)行的,我們只需要在鏈表的開頭加上檢查資源的指令就可以了,不需要在每個(gè)指令后面都加上資源檢查。

第三步,在翻譯為機(jī)器碼或者解釋器解釋到資源檢查指令的時(shí)候,根據(jù)當(dāng)前已經(jīng)累加的資源counter比對(duì)limit值,如果超出則直接終止虛擬機(jī)的執(zhí)行,否則繼續(xù)執(zhí)行。

Q7:超級(jí)鏈智能合約是怎么通過(guò)XuperBridge來(lái)擴(kuò)展鏈上能力的

XuperBridge設(shè)計(jì)了一套標(biāo)準(zhǔn)接口以及序列化方法,合約虛擬機(jī)只需要把不同語(yǔ)言的不同訪問(wèn)方式統(tǒng)一為XuperBridge的接口形式就可以訪問(wèn)鏈上資源,在形式上類似我們平時(shí)用的RPC調(diào)用,當(dāng)我們需要擴(kuò)展接口的時(shí)候只需要增加新的接口方法就行,超級(jí)鏈正是通過(guò)這種形式支持了多種虛擬機(jī),如WASM,Docker,EVM等,而不需要為每一種虛擬機(jī)設(shè)計(jì)一種接口來(lái)訪問(wèn)鏈上資源。

Q8:超級(jí)鏈智能合約是怎么做到高性能的

超級(jí)鏈合約主要從以下幾個(gè)方面來(lái)做到高性能:

1.合約指令選取的是WASM,WASM自身本身就比較貼近硬件底層,因此性能比較好。

2.合約虛擬機(jī)支持翻譯合約指令到native指令,運(yùn)行速度接近native程序。

3.合約的執(zhí)行分兩步,第一步是預(yù)執(zhí)行,每個(gè)合約運(yùn)行的時(shí)候都有一個(gè)唯一的上下文來(lái)隔離不同的合約運(yùn)行,上下文里面會(huì)收集合約執(zhí)行過(guò)程中對(duì)數(shù)據(jù)的讀寫結(jié)果,執(zhí)行完畢后會(huì)生成一個(gè)對(duì)數(shù)據(jù)修改的讀寫集;第二步,把讀寫集上鏈打包成交易上鏈,這個(gè)時(shí)候通過(guò)XuperModel會(huì)對(duì)讀寫集進(jìn)行沖突檢測(cè),如果兩個(gè)讀寫集沒(méi)有任何沖突則直接通過(guò),有沖突的則會(huì)失敗。正是通過(guò)這種方式來(lái)最大化合約的并行執(zhí)行和校驗(yàn)?zāi)芰Α?/p>

Q9:基于超級(jí)鏈智能合約能做什么

目前的超級(jí)鏈智能合約提供了如下能力:

· 設(shè)置合約方法的ACL以控制不同的合約方法訪問(wèn)權(quán)限。

· 以KV的形式存儲(chǔ)數(shù)據(jù)到鏈上和以及查詢鏈上數(shù)據(jù)。

· 跨合約調(diào)用的能力,不同合約之間可以直接互通調(diào)用。

· 轉(zhuǎn)賬給合約以及從合約轉(zhuǎn)出

· 查詢歷史交易以及區(qū)塊

后續(xù)會(huì)逐漸加上一些新的功能,如SQL和文件系統(tǒng)的接口來(lái)豐富合約的功能

Q10:怎么部署一個(gè)超級(jí)鏈的智能合約

以超級(jí)鏈example目錄下的ERC20合約為例,需要以下步驟:

1. 編譯合約,進(jìn)入到源代碼的contractsdk/cpp目錄,執(zhí)行build.sh腳本

2.準(zhǔn)備合約賬戶,調(diào)用xchain-cli account new --account 1111111111111111 來(lái)創(chuàng)建合約賬號(hào),合約必須部署到合約賬號(hào)下

3.保證合約賬號(hào)有充足的token,因此我們轉(zhuǎn)給合約賬戶一些token xchain-cli transfer --to XC1111111111111111@xuper --amount 100000000

4.部署合約到剛才創(chuàng)建的合約賬號(hào)下 xchain-cli wasm deploy $path_to_contract/erc20.wasm -n erc20 --account XC1111111111111111@xuper -a ‘{“totalSupply”:“10000000”}’

至此一個(gè)ERC20合約已經(jīng)部署上鏈,后續(xù)可以調(diào)用合約的相關(guān)接口來(lái)使用合約,具體文檔見https://xuperchain.readthedocs.io/zh/latest/advanced_usage/create_contracts.html

需要注意事項(xiàng)如下:

1.不同語(yǔ)言的合約需要在部署的時(shí)候需要指明各自的runtime,否則會(huì)部署失敗

2.合約賬號(hào)需要充足的token來(lái)部署合約

Q11:哪里能找到更多的超級(jí)鏈智能合約例子

超級(jí)鏈開源代碼里面包含了一些使用合約的例子,涵蓋了ERC20,ERC721,存證等合約例子,后續(xù)會(huì)有更多的示例給大家。

分享結(jié)束后,群里涌現(xiàn)出的精彩問(wèn)題,摘取部分分享給各位。

問(wèn):是不是所有區(qū)塊鏈應(yīng)用都必須要有智能合約?

答:自從以太坊發(fā)明了在區(qū)塊鏈上運(yùn)行智能合約后,智能合約幾乎已經(jīng)成為了新鏈的標(biāo)配。因?yàn)橛辛酥悄芎霞s,開發(fā)者就可以表達(dá)復(fù)雜的業(yè)務(wù)邏輯,在之前這些邏輯可能都是鏈下行為,不夠“區(qū)塊鏈”,可以說(shuō)智能合約讓區(qū)塊鏈進(jìn)入了2.0。

問(wèn):智能合約中有對(duì)關(guān)聯(lián)數(shù)據(jù)的直接查詢嗎。還是說(shuō)通過(guò)關(guān)鍵字段再查另外數(shù)據(jù)?因?yàn)閏++語(yǔ)言是可以有主鍵設(shè)置類似的,但是go語(yǔ)言就沒(méi)有這樣的設(shè)置。

答:目前智能合約里面的數(shù)據(jù)是KV的形式存儲(chǔ)的,可以認(rèn)為唯一的主鍵就是key,c++中包裝了一個(gè)table的數(shù)據(jù)接口來(lái)輔助生成多索引,go里面目前還沒(méi)有這樣的數(shù)據(jù)結(jié)構(gòu)。后面可以期待一下超級(jí)鏈合約支持SQL。

問(wèn):如果有三個(gè)硬盤存儲(chǔ)數(shù)據(jù),不同的數(shù)據(jù)業(yè)務(wù)可以通過(guò)指定方式放到指定硬盤嗎?

答:目前超級(jí)鏈支持多盤部署,但按照業(yè)務(wù)劃分硬盤暫時(shí)不支持。

問(wèn):請(qǐng)問(wèn)智能合約什么時(shí)候可以支持java語(yǔ)言編寫?

答:Java語(yǔ)言的支持在計(jì)劃中,可能先以native合約的形式提供,WASM的支持在調(diào)研中。

問(wèn):可以跨智能合約調(diào)用嗎?如果智能合約不在同一條鏈上也可以調(diào)用嗎?

答:多個(gè)智能合約之間可以互相調(diào)用,前提是得有對(duì)應(yīng)的權(quán)限。但是目前超級(jí)鏈的智能合約只能在一個(gè)鏈上互通,多鏈技術(shù)正在研發(fā)中。

問(wèn):目前,超級(jí)鏈智能合約支持哪些資源消耗統(tǒng)計(jì)啊?它們與gas的兌換比例是如何衡量的?

答:支持資源消耗統(tǒng)計(jì)的有:CPU,內(nèi)存,磁盤等;具體兌換比例參照源碼,當(dāng)然開發(fā)者也可以通過(guò)提案投票的方式來(lái)更改這些參數(shù)。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉