合同前任 vs 签署者 vs 现任
Contract Predecessor vs Signer vs Current
谁能帮我理解一下这三个概念的关系和区别?似乎 context.predecessor == context.contractName
检查很常见。
signer
- 签署初始交易的帐户。
predecessor
- 调用当前合约的最后一个账户。
current
- 合约的账户。
例如,考虑合同 contract.near
和用户 alice.near
。
alice.near
在 contract.near
上调用方法 foo
。在 foo 的上下文中:
signer == alice.near
predecessor == alice.near
current == contract.near
然后如果对另一个方法进行承诺调用 faa
,那么它的上下文是:
signer == alice.near
predecessor == contract.near
current == contract.near
所以检查predecessor == current
或context.predecessor == context.contractName
是为了确保合约是调用合约的账户。具有此断言的方法被认为是“私有的”,因为即使它是面向 API.
的 public 的一部分,也只有合约可以调用它
sirwillem 的回答 解释的很好
只要记住像 context.predecessor == context.contractName
这样的断言背后的想法可以是:
- 间接调用合约中的私有方法(只能由合约自身调用)
- 调用只有合约 ID(合约所有者)应该调用的管理级方法
谁能帮我理解一下这三个概念的关系和区别?似乎 context.predecessor == context.contractName
检查很常见。
signer
- 签署初始交易的帐户。
predecessor
- 调用当前合约的最后一个账户。
current
- 合约的账户。
例如,考虑合同 contract.near
和用户 alice.near
。
alice.near
在 contract.near
上调用方法 foo
。在 foo 的上下文中:
signer == alice.near
predecessor == alice.near
current == contract.near
然后如果对另一个方法进行承诺调用 faa
,那么它的上下文是:
signer == alice.near
predecessor == contract.near
current == contract.near
所以检查predecessor == current
或context.predecessor == context.contractName
是为了确保合约是调用合约的账户。具有此断言的方法被认为是“私有的”,因为即使它是面向 API.
sirwillem 的回答
只要记住像 context.predecessor == context.contractName
这样的断言背后的想法可以是:
- 间接调用合约中的私有方法(只能由合约自身调用)
- 调用只有合约 ID(合约所有者)应该调用的管理级方法