溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

NEO改進(jìn)協(xié)議的方法是什么

發(fā)布時(shí)間:2022-01-11 15:59:25 來源:億速云 閱讀:130 作者:iii 欄目:互聯(lián)網(wǎng)科技

本文小編為大家詳細(xì)介紹“NEO改進(jìn)協(xié)議的方法是什么”,內(nèi)容詳細(xì),步驟清晰,細(xì)節(jié)處理妥當(dāng),希望這篇“NEO改進(jìn)協(xié)議的方法是什么”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學(xué)習(xí)新知識(shí)吧。

摘要

本NEP提議NeoVM計(jì)算棧堆棧隔離,以確保動(dòng)態(tài)調(diào)用的安全性,并為將來的新功能提供支持。

動(dòng)機(jī)

現(xiàn)在已經(jīng)實(shí)現(xiàn)了NEP-4(動(dòng)態(tài)調(diào)用),但由于NeoVM計(jì)算棧未被隔離,動(dòng)態(tài)調(diào)用的合約可能會(huì)在運(yùn)行時(shí)中打斷調(diào)用者的堆棧,從而導(dǎo)致合約未按預(yù)期執(zhí)行。
另一方面,某些功能(例如異常處理)也需要實(shí)現(xiàn)堆棧隔離。

原理

我們需要一組新的指令,以便每次調(diào)用都創(chuàng)建一個(gè)單獨(dú)的計(jì)算棧,并自動(dòng)將函數(shù)的參數(shù)復(fù)制到新堆棧。函數(shù)運(yùn)行完畢后,返回值將自動(dòng)復(fù)制到調(diào)用者的堆棧中。這樣,調(diào)用的合約對(duì)棧的修改,不會(huì)影響調(diào)用者的行為。

詳述

我們添加了五條用于啟動(dòng)堆棧隔離調(diào)用的新指令:
CALL_I,CALL_E,CALL_ED,CALL_ET,CALL_EDT。

CALL_I

指令CALL_I與老指令CALL很類似。不同之處在于CALL_I需要在其之后跟隨一個(gè)操作數(shù)來表示參數(shù)的數(shù)量和返回的要拷貝的值。

CALL_E

指令CALL_E與老指令A(yù)PPCALL很類似在用于靜態(tài)調(diào)用時(shí)。不同之處在于CALL_E需要在其之后跟隨一個(gè)操作數(shù)來表示參數(shù)的數(shù)量和返回的要拷貝的值。

CALL_ED

指令CALL_ED與老指令A(yù)PPCALL很類似在用于動(dòng)態(tài)調(diào)用時(shí)。不同之處在于CALL_ED需要在其之后跟隨一個(gè)操作數(shù)來表示參數(shù)的數(shù)量和返回的要拷貝的值。

CALL_ET

指令CALL_ET與指令CALL_E很類似。不同之處在于CALL_ET會(huì)開啟一個(gè)尾調(diào)用。

CALL_EDT

指令CALL_EDT與指令CALL_ED很類似。不同之處在于CALL_EDT會(huì)開啟一個(gè)尾調(diào)用。

向后兼容性

所有舊合約都可以在原始指令集中正確執(zhí)行,但是不建議新合約繼續(xù)使用舊指令。當(dāng)新合約需要?jiǎng)討B(tài)調(diào)用時(shí),應(yīng)避免使用舊指令。

讀到這里,這篇“NEO改進(jìn)協(xié)議的方法是什么”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識(shí)點(diǎn)還需要大家自己動(dòng)手實(shí)踐使用過才能領(lǐng)會(huì),如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

neo
AI