nearprotocol - 返回环境帐户 ID 时出错
问题描述
如果我有以下方法来测试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\")))",
"logs": []
}
解决方案
这是视图调用的预期行为。
视图调用没有特定的上下文信息,这样的调用不是实际事务的一部分。
目前,查看视图调用中禁止哪些方法的最佳选择是查看测试:https ://github.com/nearprotocol/nearcore/blob/master/runtime/near-vm-logic/tests/ test_view_method.rs#L19-L43
总结一下:
- 以前的帐户信息和密钥(签名者、前任和 signer_public_key)
- 气体信息
- 所有 promise 方法,因为它们涉及其他合约
推荐阅读
- sql - QlikView/SQL - 带有 IsNull 的 If 语句
- javascript - 试图在JS画布中获取点与鼠标之间的距离
- sql - How to read data from multiple XML files in SQL Server?
- ios - 基于数组比较更新 UICollectionView
- python - Facebook sdk python在没有登录的情况下输出访问令牌?
- vba - 是否为空返回“”
- python - 可视化 CNN 过滤器时,元组索引超出范围
- vue.js - 如何从 getPlaceDetails 获取照片位置?在 VUE 中
- python - 无法在 QTreeWidget 中添加 QTextEdit
- clojure - 你在 lisp 中看到的最优雅的一段代码是什么