Search code examples
smartcontractsnearprotocol

Contract Predecessor vs Signer vs Current


Can someone help me understand the relationship and distinction amongst these three concepts? It seems like context.predecessor == context.contractName checks are common.


Solution

  • signer - account that signed the initial transaction.

    predecessor - the last account who made the current contract call.

    current - the account of the contract.

    For an example, consider contract contract.near and a user alice.near.

    alice.near calls method foo on contract.near. In the context of foo:

    • signer == alice.near
    • predecessor == alice.near
    • current == contract.near

    Then if a promise call is made to another method say faa, then its context is:

    • signer == alice.near
    • predecessor == contract.near
    • current == contract.near

    So the check predecessor == current or context.predecessor == context.contractName is to make sure that the contract was the account that made the contract call. A method with this assertion is considered "private" because only the contract can call it even though it is part of a public facing API.