Why do Env variables like signer_account_id cause error: ProhibitedInView?
Why do Env variables like signer_account_id cause error: ProhibitedInView?
执行以下操作的简单视图函数出现 ProhibitedInView 错误
export function getInfo(): Info {
const caller = context.sender
return infos.getSome(caller)
}
并意识到这是因为 context.sender
调用。
我的assumption/understanding是只要tx不改变状态,就可以认为是ViewFunctions。
我在 Potential Gotchas 上发现了针对此的警告,但为什么以下函数会导致视图函数失败? “从近核暴露的绑定方法”是什么意思?
- signer_account_id
- signer_account_pk
- predecessor_account_id
在 view
函数的上下文中,没有这样的东西:
signer_account_id
signer_account_pk
predecessor_account_id
不需要向运行视图函数签名任何消息,而且不允许。它更像是匿名检查合同,不需要为此支付任何费用,而且结果独立于调用者。因此没有 signer_account_id
和 signer_account_pk
.
另一方面,如果您在视图模式下发起此调用,则无法进行跨合约调用。因此,没有 predecessor_account_id
可用,因为 signer_account_id
不可用,并且不可能从另一个合约调用它。
执行以下操作的简单视图函数出现 ProhibitedInView 错误
export function getInfo(): Info {
const caller = context.sender
return infos.getSome(caller)
}
并意识到这是因为 context.sender
调用。
我的assumption/understanding是只要tx不改变状态,就可以认为是ViewFunctions。
我在 Potential Gotchas 上发现了针对此的警告,但为什么以下函数会导致视图函数失败? “从近核暴露的绑定方法”是什么意思?
- signer_account_id
- signer_account_pk
- predecessor_account_id
在 view
函数的上下文中,没有这样的东西:
signer_account_id
signer_account_pk
predecessor_account_id
不需要向运行视图函数签名任何消息,而且不允许。它更像是匿名检查合同,不需要为此支付任何费用,而且结果独立于调用者。因此没有 signer_account_id
和 signer_account_pk
.
另一方面,如果您在视图模式下发起此调用,则无法进行跨合约调用。因此,没有 predecessor_account_id
可用,因为 signer_account_id
不可用,并且不可能从另一个合约调用它。