日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁(yè) > 物聯(lián)網(wǎng) > 區(qū)塊鏈
[導(dǎo)讀] Qtum賬戶抽象層(AAL)實(shí)現(xiàn)簡(jiǎn)析 Qtum設(shè)計(jì)上以比特幣UTXO為基礎(chǔ)賬戶模型,并實(shí)現(xiàn)了支持EVM規(guī)范的智能合約,這是通過(guò)賬戶抽象層(Account Abstract Layer,

Qtum賬戶抽象層(AAL)實(shí)現(xiàn)簡(jiǎn)析

Qtum設(shè)計(jì)上以比特幣UTXO為基礎(chǔ)賬戶模型,并實(shí)現(xiàn)了支持EVM規(guī)范的智能合約,這是通過(guò)賬戶抽象層(Account Abstract Layer, AAL)來(lái)完成的。AAL對(duì)UTXO賬戶和EVM合約賬戶之間進(jìn)行了適配,這樣通過(guò)AAL可以使用UTXO交易輸出實(shí)現(xiàn)在鏈上創(chuàng)建智能合約,發(fā)送交易到合約賬戶用于觸發(fā)合約的執(zhí)行,完成執(zhí)行后AAL最終對(duì)執(zhí)行結(jié)果進(jìn)行處理并適配至UTXO。由于采用了AAL,合約開(kāi)發(fā)者不需關(guān)心對(duì)合約操作相關(guān)的UTXO轉(zhuǎn)換細(xì)節(jié),即可使用EVM的特性進(jìn)行開(kāi)發(fā)而且兼容現(xiàn)有以太坊的智能合約。本文通過(guò)對(duì)從UTXO交易到智能合約執(zhí)行的實(shí)現(xiàn)代碼進(jìn)行解讀,初略分析了AAL的工作過(guò)程。

1.UTXO交易新增的腳本操作碼

Qtum 針對(duì)UTXO交易腳本新增了三個(gè)操作碼OP_CREATE,OP_CALL和OP_SPEND,目的是用于為UTXO和EVM賬戶模型之間的轉(zhuǎn)換提供操作支持。這些操作碼定義在opcodetype枚舉類型中:

這個(gè)三個(gè)操作碼分別有以下作用:

OP_CREATE用于智能合約的創(chuàng)建;

OP_CALL用于合約的執(zhí)行;

OP_SPEND用于合約余額的花費(fèi)。

為了在區(qū)塊生成過(guò)程中,識(shí)別并處理由這幾個(gè)操作碼控制的交易,在用于UTXO模型交易的類CTransaction中增加了HasCreateOrCall()和HasOpSpend()函數(shù),用于新區(qū)塊中對(duì)mempool中的交易處理,并在腳本操作碼解析的EvalScript()函數(shù)中增加了相應(yīng)的處理。

2.UTXO交易到EVM模型交易的轉(zhuǎn)換

產(chǎn)生新的區(qū)塊時(shí),除了對(duì)UTXO交易進(jìn)行常規(guī)的參數(shù)合法性、共識(shí)規(guī)則、DDOS攻擊檢查等之外,還需要使用操作碼檢查函數(shù)HasCreateOrCall()判斷交易輸出是否包含OP_CREATE或OP_CALL,分別對(duì)應(yīng)著EVM需要執(zhí)行合約創(chuàng)建或合約調(diào)用。這部分有以下的處理過(guò)程:

2.1 進(jìn)行EVM模型的賬號(hào)參數(shù)提取

合約在EVM的執(zhí)行用到了data、gasPrice、gasLimit、VM version這幾個(gè)參數(shù),這些參數(shù)是通過(guò)RPC調(diào)用sendtocontract 發(fā)送的,sendtocontract會(huì)生成一個(gè)UTXO交易,并在交易輸出中使用了OP_CALL操作碼,之后交易會(huì)廣播到區(qū)塊鏈網(wǎng)絡(luò)上。AAL中從UTXO到EVM的適配是通過(guò)QtumTxConverter類實(shí)現(xiàn)的,在這一步中該類的成員函數(shù)extracTIonQtumTransacTIons()和parseEthTXParams()完成對(duì)所有此類UTXO交易輸出的參數(shù)提取。代碼片段如下:

以上代碼首先判斷如果opcode 為OP_CALL,則說(shuō)明地址為vecAddr的合約已經(jīng)創(chuàng)建,因此直接轉(zhuǎn)換成EVM格式的地址receiveAddress,否則為OP_CREATE,對(duì)應(yīng)合約的創(chuàng)建,沒(méi)有該字段,所以不做提取。接下來(lái)依次完成了data、gasPrice、gasLimit、VM version的提取,這些都是EVM執(zhí)行bytecode時(shí)必不可少的參數(shù)。

2.2 進(jìn)行EVM賬戶模型的交易轉(zhuǎn)換

交易轉(zhuǎn)換是通過(guò)QtumTxConverter類的函數(shù) createEthTX()完成,使用前面一步提取的參數(shù)和UTXO的交易輸出vout創(chuàng)建了QtumTransacTIon類型的交易。由于QtumTransacTIon派生自EVM中的dev::eth::Transaction類,因此和EVM執(zhí)行相關(guān)的操作QtumTransaction類都支持。

首先代碼etp.receiveAddress == dev::Address()判斷該合約是EVM狀態(tài)中沒(méi)有而需要新創(chuàng)建的還是EVM狀態(tài)已經(jīng)包含的合約,差別只在于合約地址。然后,QtumTransaction()構(gòu)造函數(shù)完成了部分的交易參數(shù)構(gòu)造,接下來(lái)的語(yǔ)句提取交易的發(fā)送者(sender),之后設(shè)置交易HASH。一個(gè)UTXO交易支持多個(gè)輸入和輸出,Qtum的AAL設(shè)計(jì)考慮到了這種情況,因此AAL支持一個(gè)交易輸出包含UTXO賬號(hào)和合約賬號(hào),通過(guò)最后設(shè)置的nOut指示該交易的nOut輸出是發(fā)送到智能合約的,所以該輸出將觸發(fā)合約執(zhí)行。這樣就按照EVM的賬號(hào)模型完成了交易的轉(zhuǎn)換。

3.合約執(zhí)行及執(zhí)行結(jié)果的UTXO轉(zhuǎn)換

合約的執(zhí)行會(huì)改變狀態(tài)(由QtumState類的實(shí)例化對(duì)象globalState統(tǒng)一管理),對(duì)于合約的狀態(tài),Qtum沿用了EVM定義,所以能兼容所有的符合EVM規(guī)范的智能合約。但是賬戶金額的轉(zhuǎn)移(transfer),Qtum做了UTXO的轉(zhuǎn)換,這意味著智能合約和普通的UTXO模型賬號(hào)之間能完成交互,這是AAL實(shí)現(xiàn)UTXO支持智能合約的重要的一環(huán)。下面簡(jiǎn)要介紹一下合約執(zhí)行和狀態(tài)結(jié)果的轉(zhuǎn)換過(guò)程。

3.1 合約執(zhí)行環(huán)境構(gòu)建及合約執(zhí)行

合約的執(zhí)行是對(duì)合約處理中很關(guān)鍵的一步,直接對(duì)合約的狀態(tài)產(chǎn)生影響。通過(guò)ByteCodeExec類實(shí)現(xiàn)了EVM對(duì)合約bytecode的執(zhí)行,主要函數(shù)是performByteCode()。這一步的主要流程是使用上面提取的交易參數(shù),來(lái)進(jìn)行虛擬機(jī)執(zhí)行環(huán)境的構(gòu)建,之后完成合約的執(zhí)行,其代碼如下:

首先是構(gòu)建合約執(zhí)行環(huán)境,由BuildEVMEnvironment()完成??梢钥吹竭@個(gè)執(zhí)行環(huán)境是針對(duì)每個(gè)獨(dú)立交易進(jìn)行的,這樣就最大限度的把不同交易的合約執(zhí)行過(guò)程隔離開(kāi),避免合約執(zhí)行過(guò)程中的交叉影響。然后構(gòu)建一個(gè)新的sealEngine類,該類是EVM執(zhí)行引擎,由createSealEngine()函數(shù)具體完成。中間對(duì)出現(xiàn)的可能狀態(tài)異常進(jìn)行檢查,之后globalState-》execute()完成合約的執(zhí)行,這里使用到了構(gòu)建的執(zhí)行環(huán)境envInfo和EVM執(zhí)行引擎se。

3.2 合約執(zhí)行結(jié)果的UTXO轉(zhuǎn)換

合約執(zhí)行完成后的結(jié)果保存在vector《ResultExecute》 result,vector向量理記錄了每個(gè)合約執(zhí)行產(chǎn)生的EVM賬戶間transfer關(guān)系,AAL通過(guò)把這些transfer轉(zhuǎn)換成UTXO交易,完成了從EVM賬戶模型到UTXO模型交易的轉(zhuǎn)換。這一處理是通過(guò)processingResults()函數(shù)實(shí)現(xiàn)的,以下是代碼片段。

首先定義了ByteCodeExecResult類型的resultBCE變量,用于保存轉(zhuǎn)換的結(jié)果。使用操作碼OP_SPEND,用于實(shí)現(xiàn)交易的花費(fèi),這是因?yàn)楸忍貛诺腢TXO通過(guò)私鑰簽名在交易輸入解后來(lái)實(shí)現(xiàn)余額花費(fèi)的,而EVM執(zhí)行涉及不同賬戶之間的transfer,所以需要通過(guò)OP_SPEND實(shí)現(xiàn)這些transfer到UTXO模型交易的轉(zhuǎn)換。如果execRes.excepted不為None,即合約執(zhí)行異常,則將余額返還給合約調(diào)用者。否則,如果沒(méi)有異常,則將扣除消耗的gas之后的剩余gas返還給合約的調(diào)用者。對(duì)于合約執(zhí)行中出現(xiàn)的transfer其UTXO交易保存在result[i].tx中。因此,經(jīng)過(guò)這一步處理合約執(zhí)行產(chǎn)生的不同UTXO賬戶之間的交易就保存在valueTransfers向量中了,最終這些交易會(huì)包含進(jìn)新的區(qū)塊中。至此AAL模塊就完成了從EVM交易到UTXO的轉(zhuǎn)換。

4.總結(jié)

AAL通過(guò)新增的UTXO腳本操作碼,協(xié)助完成合約的創(chuàng)建、執(zhí)行和花費(fèi)。在合約創(chuàng)建和執(zhí)行前,需要進(jìn)行UTXO交易到EVM模型交易的轉(zhuǎn)換,之后使用構(gòu)建的EVM執(zhí)行環(huán)境和引擎,完成合約的執(zhí)行。AAL最終對(duì)合約的執(zhí)行結(jié)果進(jìn)行處理并從EVM適配至UTXO,這樣就實(shí)現(xiàn)了基于UTXO的智能合約。AAL使得Qtum兼容符合EVM規(guī)范的智能合約,為Dapp提供一個(gè)新的基礎(chǔ)平臺(tái),同時(shí)UTXO的優(yōu)點(diǎn)使得諸如并行處理、隱私性等優(yōu)點(diǎn)能得以保留。

本站聲明: 本文章由作者或相關(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)系本站刪除。
換一批
延伸閱讀

LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: 驅(qū)動(dòng)電源

在工業(yè)自動(dòng)化蓬勃發(fā)展的當(dāng)下,工業(yè)電機(jī)作為核心動(dòng)力設(shè)備,其驅(qū)動(dòng)電源的性能直接關(guān)系到整個(gè)系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動(dòng)勢(shì)抑制與過(guò)流保護(hù)是驅(qū)動(dòng)電源設(shè)計(jì)中至關(guān)重要的兩個(gè)環(huán)節(jié),集成化方案的設(shè)計(jì)成為提升電機(jī)驅(qū)動(dòng)性能的關(guān)鍵。

關(guān)鍵字: 工業(yè)電機(jī) 驅(qū)動(dòng)電源

LED 驅(qū)動(dòng)電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個(gè)照明設(shè)備的使用壽命。然而,在實(shí)際應(yīng)用中,LED 驅(qū)動(dòng)電源易損壞的問(wèn)題卻十分常見(jiàn),不僅增加了維護(hù)成本,還影響了用戶體驗(yàn)。要解決這一問(wèn)題,需從設(shè)計(jì)、生...

關(guān)鍵字: 驅(qū)動(dòng)電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動(dòng)電源的公式,電感內(nèi)電流波動(dòng)大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關(guān)鍵字: LED 設(shè)計(jì) 驅(qū)動(dòng)電源

電動(dòng)汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動(dòng)汽車的核心技術(shù)之一是電機(jī)驅(qū)動(dòng)控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機(jī)驅(qū)動(dòng)系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動(dòng)汽車的動(dòng)力性能和...

關(guān)鍵字: 電動(dòng)汽車 新能源 驅(qū)動(dòng)電源

在現(xiàn)代城市建設(shè)中,街道及停車場(chǎng)照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進(jìn)步,高亮度白光發(fā)光二極管(LED)因其獨(dú)特的優(yōu)勢(shì)逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關(guān)鍵字: 發(fā)光二極管 驅(qū)動(dòng)電源 LED

LED通用照明設(shè)計(jì)工程師會(huì)遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關(guān)鍵字: LED 驅(qū)動(dòng)電源 功率因數(shù)校正

在LED照明技術(shù)日益普及的今天,LED驅(qū)動(dòng)電源的電磁干擾(EMI)問(wèn)題成為了一個(gè)不可忽視的挑戰(zhàn)。電磁干擾不僅會(huì)影響LED燈具的正常工作,還可能對(duì)周圍電子設(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來(lái)解決L...

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動(dòng)電源

開(kāi)關(guān)電源具有效率高的特性,而且開(kāi)關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機(jī)重量也有所下降,所以,現(xiàn)在的LED驅(qū)動(dòng)電源

關(guān)鍵字: LED 驅(qū)動(dòng)電源 開(kāi)關(guān)電源

LED驅(qū)動(dòng)電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動(dòng)LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: LED 隧道燈 驅(qū)動(dòng)電源
關(guān)閉