1

如果我有以下方法来测试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": []
}

4

1 回答 1

2

这是视图调用的预期行为。

视图调用没有特定的上下文信息,这样的调用不是实际事务的一部分。

目前,查看视图调用中禁止哪些方法的最佳选择是查看测试:https ://github.com/nearprotocol/nearcore/blob/master/runtime/near-vm-logic/tests/ test_view_method.rs#L19-L43

总结一下:

  • 以前的帐户信息和密钥(签名者、前任和 signer_public_key)
  • 气体信息
  • 所有 promise 方法,因为它们涉及其他合约
于 2019-10-31T15:21:52.423 回答