NEO改进协议的方法是什么

发布时间:2022-01-11 15:59:25 作者:iii
来源:亿速云 阅读:113

本文小编为大家详细介绍“NEO改进协议的方法是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“NEO改进协议的方法是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

摘要

本NEP提议NeoVM计算栈堆栈隔离,以确保动态调用的安全性,并为将来的新功能提供支持。

动机

现在已经实现了NEP-4(动态调用),但由于NeoVM计算栈未被隔离,动态调用的合约可能会在运行时中打断调用者的堆栈,从而导致合约未按预期执行。
另一方面,某些功能(例如异常处理)也需要实现堆栈隔离。

原理

我们需要一组新的指令,以便每次调用都创建一个单独的计算栈,并自动将函数的参数复制到新堆栈。函数运行完毕后,返回值将自动复制到调用者的堆栈中。这样,调用的合约对栈的修改,不会影响调用者的行为。

详述

我们添加了五条用于启动堆栈隔离调用的新指令:
CALL_I,CALL_E,CALL_ED,CALL_ET,CALL_EDT。

CALL_I

指令CALL_I与老指令CALL很类似。不同之处在于CALL_I需要在其之后跟随一个操作数来表示参数的数量和返回的要拷贝的值。

CALL_E

指令CALL_E与老指令APPCALL很类似在用于静态调用时。不同之处在于CALL_E需要在其之后跟随一个操作数来表示参数的数量和返回的要拷贝的值。

CALL_ED

指令CALL_ED与老指令APPCALL很类似在用于动态调用时。不同之处在于CALL_ED需要在其之后跟随一个操作数来表示参数的数量和返回的要拷贝的值。

CALL_ET

指令CALL_ET与指令CALL_E很类似。不同之处在于CALL_ET会开启一个尾调用。

CALL_EDT

指令CALL_EDT与指令CALL_ED很类似。不同之处在于CALL_EDT会开启一个尾调用。

向后兼容性

所有旧合约都可以在原始指令集中正确执行,但是不建议新合约继续使用旧指令。当新合约需要动态调用时,应避免使用旧指令。

读到这里,这篇“NEO改进协议的方法是什么”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注亿速云行业资讯频道。

推荐阅读:
  1. FTP协议是什么协议
  2. 改进WordPress主题加载速度的方法

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

neo

上一篇:为什么要加final关键字

下一篇:MybatisPlus LambdaQueryWrapper使用int默认值的坑及解决方法是什么

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》