Search code examples
nearprotocol

Error on returning environmental account id's


If I have the following method to test predecessor_account_id behaviour

pub fn get_pred_acc(&self) -> (String {
    let prev_acc = env::predecessor_account_id().to_string();
    return prev_acc;
}

And try to call this from frontend

const contract = await this.near.loadContract(window.nearConfig.contractName, {
  viewMethods: ["get_pred_acc", ],
  changeMethods: [],
  sender: this.accountId,
});

const acc = await contract.get_pred_acc();

I get the following error:

Uncaught (in promise) Error: Querying call/flux-protocol/get_account_id failed: wasm execution failed with error: FunctionCallError(HostError(ProhibitedInView("predecessor_account_id"))).
{ "error": "wasm execution failed with error: FunctionCallError(HostError(ProhibitedInView(\"predecessor_account_id\")))",
"logs": []
}


Solution

  • That's expected behavior for the view calls.

    The view calls don't have certain context information such calls are not part of an actual transaction.

    Currently, the best option to see which methods are prohibited in the view calls is to take a look at the test: https://github.com/nearprotocol/nearcore/blob/master/runtime/near-vm-logic/tests/test_view_method.rs#L19-L43

    To summarize:

    • previous account information and keys (signer, predecessor and signer_public_key)
    • gas information
    • all promise methods, cause they involve other contracts