В чем разница между свободным балансом, зарезервированным балансом, заблокированным балансом, балансом передачи и т. Д ...? - PullRequest
0 голосов
/ 02 июня 2019

В структуре разработки блокчейна Substrate модуль SRML Balances ссылается на 4 различных вида баланса:

  • Свободный баланс
  • Резервный баланс
  • Locked Balance
  • Vesting Balance

В чем различия между этими различными типами весов, когда они используются в Субстрате и как их использовать в моих собственных модулях времени выполнения?

1 Ответ

2 голосов
/ 02 июня 2019

Модуль «Сальдо» представляет собой комплексную валюту цепочки, которая обладает гибкостью для предоставления ряда различных функций.

В хранилище модуля «Сальдо» непосредственно хранятся только два сальдо:

  1. Свободный баланс
  2. Зарезервированный баланс

Сумма этих двух остатков используется для расчета общего баланса учетной записи.

Дополнительные уровни логики помещаются поверх свободного баланса для создания абстракций, таких как:

  • Locked Balance
  • Vesting Balance

Итак, давайте пройдемся по различным типам балансов, управляемых модулем Балансы.

Свободный баланс

Из раздела терминологии справочной документации:

Свободный баланс: Часть баланса, которая не зарезервирована.Свободный баланс является единственным балансом, который имеет значение для большинства операций.Когда этот баланс падает ниже существующего депозита, большая часть функциональности учетной записи удаляется.Когда и он, и зарезервированный баланс удаляются, считается, что аккаунт мертв.

Свободный баланс аккаунта используется всякий раз, когда transfer, withdraw или reserveинициируется.Прежде чем эти операции могут быть успешно завершены, ensure_can_withdraw вызывается с некоторыми WithdrawReason и проверяет, что снятие не мешает некоторому переходному балансу или заблокированному остатку .

Это не препятствует выполнению других операций, таких как slash, которые не заботятся о каких-либо абстракциях по свободному балансу.

Баланс передачи

счетаналожение баланса - это абстракция над свободным балансом.В частности, учетная запись, имеющая надёжный баланс, не может тратить со своего свободного баланса ниже этой суммы.Баланс на передачу не заботится о WithdrawReason.

amount_spendable = free_balance - vesting_balance

Так что, даже если на счету может показаться, что у него много ликвидных средств, которые можно потратить при запросе свободного баланса, баланс наложения счетов может предотвратитьсредства от снятия.

Баланс наделения может быть установлен только в начале цепочки субстратов и уменьшается с линейной скоростью на блок с целью обеспечения полного баланса аккаунта на счете вопределенный номер блока.Баланс наделения может быть больше, чем свободный баланс в ситуациях, таких как задержка начала наложения или когда свободный баланс уменьшается путем сокращения.В этих случаях amount_spendable насыщается до нуля.

Locked Balance

Блокированный баланс аккаунта - это еще одна абстракция над свободным балансом.В этом случае это определенная сумма, заблокированная для снятия по определенной причине.

Различные причины снятия средств:

  • Транзакция Оплата: Для оплаты (система) транзакционные расходы.
  • Передача: для передачи права собственности.
  • Резерв: для резервирования некоторых средств для последующего возвращения или репатриации.
  • Плата: дляоплатить некоторые другие (более высокого уровня) сборы.

Таким образом, если учетная запись имеет блокировку на 100 единиц с WithdrawReasons::Transfer, она не может сделать перевод, который приносит ее свободный балансниже 100 единиц.Однако эта учетная запись сможет выполнять другие операции, такие как reserve, с свободным балансом менее 100 единиц.С блокировкой может быть связано несколько причин, и в этом случае эти средства могут быть потрачены только по другим причинам.

На учетную запись можно установить несколько разных блокировок, но эти блокировки накладываются друг на друга, а не на стек,Это означает, что если у учетной записи есть 3 блокировки на 100 единиц, она может по любой причине потратить свои средства до 100 единиц, после чего блокировки начнут действовать.

Закрытый баланс также накладывается наналожение баланса, поскольку эти два проверяются независимо, но обе проверки должны пройти для ensure_can_withdraw, чтобы быть успешным.

Зарезервированный баланс

Из раздела :

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

Условно говоря, резервный баланс проще, чем свободный баланс, потому что над ним нет абстракций.Средства, зарезервированные от пользователя, не предназначены для непосредственного прикосновения к какой-либо другой логике за пределами модуля сальдо.Вместо этого средства сначала должны быть unreserved, а затем изменены в free_balance.

Зарезервированный баланс против заблокированного баланса

Зарезервированный баланс и заблокированный баланс выглядят одинаково, но принципиально отличаются.У заблокированного баланса есть идентификатор с точки зрения идентификатора блокировки, причин, по которым средства заблокированы, и на какой срок они заблокированы.Зарезервированный баланс не имеет ни одной из этих черт и не может быть недоступен без явного действия среды выполнения, чтобы отменить резервирование этих средств.

Кроме того, могут существовать последствия наличия свободного баланса по сравнению с отсутствием такового.Например, если вы установите блокировку для полного свободного остатка на счете, он все равно будет иметь свободный остаток, и OnFreeBalanceZero не будет вызываться.Однако, если вы reserve все средства, свободный остаток упадет ниже существующего депозита и OnFreeBalanceZero будет запущен для модулей, которые реализовали эту функцию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...