如何正确使用 LockableCurrency 特性?

How to properly use the LockableCurrency trait?

我想知道 LockableCurrency 是如何工作的?或者更具体地说,WithdrawReasons 是什么?它只是一个标记还是此处指定的值对于实际释放锁很重要? 我的用例是我想锁定转账资金一段时间,然后转账这些资金或释放锁定。那么我应该只使用 WithdrawReasons:all() 吗?

附带说明 - 我想我可以使用 substring(hash(AccountId)) 作为锁标识符,以这种方式为每个帐户创建锁是个好主意吗?

如果你想禁止转账,那么你应该使用只禁止撤回原因转账的锁,也就是。 WithdrawReason::Transfer。虽然,请注意,用户很可能会找到一种方法来解决这个问题,因为他们可以给区块作者小费或用锁定的资金支付交易费用,所以如果他们碰巧与区块作者勾结,他们可以有效欺骗系统。

很可能你真正想要的是WithdrawReason::all()


And as a side note - I thought I could use a substring(hash(AccountId)) for the lock identifier, is it a good idea create the lock per each account this way?

我不会那样做。每个锁都已经链接到一个帐户,并且用于添加和删除锁的 API 已经要求一个帐户进行操作。因此,在我看来,使用帐户哈希作为键是重复的(也可能对性能产生不良影响)。您应该遵循 substrate 中的约定,使用托盘中的唯一标识符作为您的锁定标识符(简单地说:托盘名称即可)。这将确保此 pallet 创建的锁不会被另一个 pallet 意外移除。