如果我采用以下方法测试predecessor_account_id
的行为
pub fn get_pred_acc(&self) -> (String {
let prev_acc = env::predecessor_account_id().to_string();
return prev_acc;
}
并尝试从前端调用此
const contract = await this.near.loadContract(window.nearConfig.contractName, {
viewMethods: ["get_pred_acc", ],
changeMethods: [],
sender: this.accountId,
});
const acc = await contract.get_pred_acc();
我收到以下错误:
未捕获(承诺)错误:查询呼叫/通行协议/ get_account_id失败:wasm执行失败,并出现错误:FunctionCallError(HostError(ProhibitedInView(“ predecessor_account_id”)))))。
{“ error”:“ wasm执行失败,并出现错误:FunctionCallError(HostError(ProhibitedInView(\” predecessor_account_id \“))))”,
“日志”:[]
}
答案 0 :(得分:2)
这是视图调用的预期行为。
view调用没有某些上下文信息,因此这些调用不是实际事务的一部分。
当前,查看视图调用中禁止使用哪些方法的最佳选择是查看测试:https://github.com/nearprotocol/nearcore/blob/master/runtime/near-vm-logic/tests/test_view_method.rs#L19-L43
总结: