如果我有以下方法来测试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();
我得到以下错误:
未捕获(承诺中(错误:查询调用/flux protocol/get_account_id失败:wasm执行失败,返回错误:FunctionCallError(HostError(ProhibitedInView("precedesser_account_id"((
{"error":"wasm执行失败,错误为:FunctionCallError(HostError(ProhibitedInView(\"presidents_account_id\"((",
"logs":[]
}
这是视图调用的预期行为。
视图调用没有特定的上下文信息,这样的调用不是实际事务的一部分。
目前,查看视图调用中禁止哪些方法的最佳选择是查看测试:https://github.com/nearprotocol/nearcore/blob/master/runtime/near-vm-logic/tests/test_view_method.rs#L19-L43
总结:
- 以前的帐户信息和密钥(签名者、前任和签名者公钥(
- 气体信息
- 所有承诺方法,因为它们涉及其他合同