合同前任 vs 签署者 vs 当前合同

j00*_*0yn 5 smartcontracts nearprotocol

有人能帮我理解这三个概念之间的关系和区别吗?看来context.predecessor == context.contractName支票很常见。

sir*_*lem 6

signer- 签署初始交易的帐户。

predecessor- 发出当前合约调用的最后一个帐户。

current- 合约账户。

例如,考虑 Contractcontract.near和 user alice.near

alice.nearfoo调用上的方法contract.near。在 foo 的上下文中:

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

然后,如果对另一个方法 say 进行 Promise 调用faa,则其上下文为:

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

所以检查predecessor == current或是context.predecessor == context.contractName为了确保合约是发出合约调用的账户。具有此断言的方法被视为“私有”,因为即使它是面向公众的 API 的一部分,也只有合约可以调用它。