Как правильно использовать свойство LockableCurrency?

#rust #blockchain #substrate #polkadot

#Ржавчина #блокчейн #подложка #polkadot

Вопрос:

Мне интересно, как работает LockableCurrency? Или, более конкретно, каковы WithdrawReasons ? Это просто маркер или указанное здесь значение важно для фактического снятия блокировки? Мой вариант использования заключается в том, что я хочу заблокировать средства для перевода на определенное время, а затем либо перевести эти средства, либо снять блокировку. Так я должен просто использовать WithdrawReasons:all() ?

И в качестве примечания — я подумал, что мог бы использовать a substring(hash(AccountId)) для идентификатора блокировки, стоит ли создавать блокировку для каждой учетной записи таким образом?

Комментарии:

1. Я думаю, что этот вопрос довольно ясен для всех, кто использует Substrate фреймворк — я могу только улучшить его, добавив ссылку на документы Rust.

Ответ №1:

Если вы хотите запретить только переводы, то вам следует использовать блокировку, которая запрещает только вывод средств по причинам перевода, иначе говоря. WithdrawReason::Transfer . Хотя, имейте в виду, что пользователь, вероятно, может найти способ обойти это, поскольку он может дать чаевые автору блока или оплатить комиссию за транзакцию заблокированными средствами, поэтому, если они вступят в сговор с автором блока, они могут эффективно обмануть систему.

Вполне вероятно , что именно этого вы на самом деле и хотите WithdrawReason::all() .


И в качестве примечания — я подумал, что мог бы использовать подстроку (хэш (идентификатор учетной записи)) для идентификатора блокировки, стоит ли создавать блокировку для каждой учетной записи таким образом?

Я бы не стал этого делать. Каждая блокировка уже связана с учетной записью, и API для добавления и удаления блокировок уже запрашивает учетную запись для работы. Таким образом, использование хэша учетной записи в качестве ключа, на мой взгляд, является дублирующим (что также может плохо сказаться на производительности). Вы должны следовать соглашению в рамках substrate, используя уникальный идентификатор из поддона в качестве идентификатора блокировки (просто: подойдет имя поддона). Это гарантирует, что замки, созданные этим поддоном, не будут случайно сняты другим поддоном.