问题描述
谁能帮我理解这三个概念之间的关系和区别? context.predecessor == context.contractName
检查似乎很常见。
解决方法
signer
- 签署初始交易的帐户。
predecessor
- 最后一个进行当前合约调用的帐户。
current
- 合约账户。
例如,考虑合同 contract.near
和用户 alice.near
。
alice.near
在 foo
上调用方法 contract.near
。在 foo 的上下文中:
signer == alice.near
predecessor == alice.near
current == contract.near
然后,如果对另一个方法(例如 faa
)进行了 Promise 调用,则其上下文为:
signer == alice.near
predecessor == contract.near
current == contract.near
因此检查 predecessor == current
或 context.predecessor == context.contractName
是为了确保合约是进行合约调用的帐户。带有此断言的方法被认为是“私有的”,因为即使它是面向公众的 API 的一部分,也只有合约可以调用它。