为啥像 signer_account_id 这样的环境变量会导致错误:ProhibitedInView?

Posted

技术标签:

【中文标题】为啥像 signer_account_id 这样的环境变量会导致错误:ProhibitedInView?【英文标题】:Why do Env variables like signer_account_id cause error: ProhibitedInView?为什么像 signer_account_id 这样的环境变量会导致错误:ProhibitedInView? 【发布时间】:2021-07-22 13:36:33 【问题描述】:

执行以下操作的简单视图函数出现 ProhibitedInView 错误

export function getInfo(): Info 
   const caller = context.sender
   return infos.getSome(caller)

并意识到这是因为context.sender 调用。

我的假设/理解是,只要 tx 不改变状态,它们就可以被视为 ViewFunctions。

我在Potential Gotchas 上发现了一个警告,但是为什么下面的函数会导致视图函数失败? “从近核暴露的绑定方法”是什么意思?

signer_account_id signer_account_pk predecessor_account_id

【问题讨论】:

【参考方案1】:

view 函数的上下文中,没有这样的东西:

signer_account_id signer_account_pk predecessor_account_id

运行视图功能不需要对任何消息进行签名,而且是不允许的。这更像是匿名检查合同,不应该为此支付任何费用,并且结果与调用者无关。因此没有signer_account_idsigner_account_pk

另一方面,如果您在查看模式下发起此调用,则无法进行跨合约调用。因此没有可用的predecessor_account_id,因为signer_account_id 不可用,并且不可能从另一个合约调用它。

【讨论】:

以上是关于为啥像 signer_account_id 这样的环境变量会导致错误:ProhibitedInView?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我不能像这样实例化一个对象? [复制]

为啥我不能像这样覆盖变量的值?

为啥这个组合框看起来像这样?

为啥我不能使用像 $(document) 这样的 iframe 文档

如果我们可以使用 Selenium,为啥还需要像 BeautifulSoup 这样的解析器?

为啥 NSArray 有方法 indexOfObjectPassingTest 而不是像 NSSet 这样的 objectsPassingTest?