合同前任 vs 签署者 vs 现任

Contract Predecessor vs Signer vs Current

谁能帮我理解一下这三个概念的关系和区别?似乎 context.predecessor == context.contractName 检查很常见。

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

predecessor - 调用当前合约的最后一个账户。

current - 合约的账户。

例如,考虑合同 contract.near 和用户 alice.near

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

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

然后如果对另一个方法进行承诺调用 faa,那么它的上下文是:

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

所以检查predecessor == currentcontext.predecessor == context.contractName是为了确保合约是调用合约的账户。具有此断言的方法被认为是“私有的”,因为即使它是面向 API.

的 public 的一部分,也只有合约可以调用它

sirwillem 的回答 解释的很好

只要记住像 context.predecessor == context.contractName 这样的断言背后的想法可以是:

  • 间接调用合约中的私有方法(只能由合约自身调用)
  • 调用只有合约 ID(合约所有者)应该调用的管理级方法