转移政策 - share vs public_share, freeze vs public_freeze

类似于 transfer::transfertransfer::public_transfer 函数,transfer 模块还提供以下功能:

  • sharepublic_share
  • freezepublic_freeze

这些函数的工作方式与 transferpublic_transfer 类似——只有当传递给它们的对象具有 store 能力时,才能使用 public 版本。 这为开发人员提供了更多的灵活性来控制他们的对象如何被使用。

使用 sharepublic_share,开发人员可以允许他们的对象仅仅被拥有或者也可以被共享。例如:

  • 一个开发人员创建了一个 PunchCard 对象,每次用户购买珍珠奶茶时可以打一个孔。开发人员希望 PunchCard 可以在用户之间共享, 这样不同用户可以使用同一个 PunchCard。他们只需要为 PunchCard 添加 store 能力。
  • 另一个开发人员为他们的健身房创建了一个 GymMembership 对象,但不希望会员资格被多个用户共享。 他们只需要不给 GymMembership 添加 store 能力。

使用 freezepublic_freeze,开发人员同样可以决定是否希望所有者能够使他们的对象变为不可变:

  • 之前提到的 PunchCard 对象如果用户想放弃,可以将其变为不可变。
  • GymMembership 对象不能变为不可变,因为会员资格到期后应该被删除。