关于NEAR view方法调用changeable方法的一些问题和想法

新手上路,请多包涵

在研究官方的示例代码Place中,同时课程中Marco老师也介绍过near的这个特点.
image.png
即可以使用标记为view的合约方法,并在方法里面调用changeable方法.关于这个特性我迷惑了很久.
现在有一些想法想要得到指点,我看near的协议介绍有说near协议分为了区块链层和runtime层,区块链层并不会操作账户的存储.所以我有一个猜想:
假设alice调用合约A的a方法,而a方法是view的,a方法中调用了合约B的b方法,而b方法是changeable的.即alice->A.a()->B.b()
在这个过程中,真正的存储发生的时间,或者说区块链层把数据发送给runtime层的时间实际上是调用栈已经执行完B的内容,已经回退到A.a()的栈帧中,并准备退出时,此时才准备将数据传入runtime层,而此时区块链层发现a()方法是一个view方法,所以并没有传入runtime,而是将计算好的数据直接返回.

如果我的猜想是正确的话,那么最开始的问题我就能理解了.在Place的get_account_by_id实现中,
image.png这里实际上调用touch的是一个可变对象,所以能够正常执行,当执行完成返回account时,也就是方法get_account_by_id的栈帧即将退出时发现,不能写入存储,所以没有通知runtime层,直接将account数据返回了回去.

阅读 691
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进