Can someone help me understand the relationship and distinction amongst these three concepts? It seems like context.predecessor == context.contractName checks are common.
Can someone help me understand the relationship and distinction amongst these three concepts? It seems like context.predecessor == context.contractName checks are common.
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.nearpredecessor == alice.nearcurrent == contract.nearThen if a promise call is made to another method say faa, then its context is:
signer == alice.nearpredecessor == contract.nearcurrent == contract.nearSo 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.
The answer from sirwillem above explains it well
Just remember the idea behind assertions like context.predecessor == context.contractName can be: