# Лизинг
В блокчейне Waves используется алгоритм консенсуса Leased Proof of Stake (LPoS, дословно — арендованное доказательство доли владения).
Как и в других разновидностях Proof of Stake, шанс участника сети сгенерировать следующий блок пропорционален его экономической доле. В отличие от Proof of Work, Proof of Stake не требует больших вычислительных мощностей и затрат электроэнергии, а также делает атаку на сеть невыгодной для участников.
Отличие LPoS от PoS — в том, что обычные пользователи могут участвовать в генерации блоков, сдавая токены WAVES в лизинг (аренду) генерирующим нодам. По сути, лизингодатель передает ноде право генерировать блоки, используя принадлежащие ему WAVES. Сами токены остаются «замороженными» на балансе лизингодателя, пока он не отменит лизинг.
Полученные в лизинг токены увеличивают шанс ноды сгенерировать очередной блок и получить вознаграждение. Генерирующая нода может делиться вознаграждением с теми, кто предоставил ему WAVES в лизинг. Однако протокол Waves не регулирует выплаты по лизингу, это остается на усмотрение владельца ноды.
# Преимущества лизинга для владельца WAVES
- Возможность участвовать в генерации блоков и получать доход, не запуская собственную ноду.
- Безопасность: токены WAVES не передаются получателю лизинга, а остаются под полным контролем владельца.
- Лизинг можно отменить мгновенно, в одностороннем порядке.
Генерирующие ноды могут работать с разной эффективностью и отсылать в качестве вознаграждения разные проценты. Выбрать ноду и сдать WAVES в лизинг можно, например, в приложении WX Network, разработанном сторонней командой из сообщества.
# Преимущества лизинга для владельца ноды
- Возможность использовать арендованные токены WAVES для генерации блоков и получения вознаграждения.
- Возможность самостоятельно устанавливать условия выплат лизингодателям.
Если вы хотите запустить генерирующую ноду и привлекать средства в лизинг, ознакомьтесь с инструкцией.
# Создание и отмена лизинга
Протокол Waves предусматривает два способа отправить WAVES в лизинг:
- Любой аккаунт может отправить транзакцию лизинга.
- dApp может создать лизинг с помощью действия Lease, выполняемого вызываемой функцией в рамках транзакции вызова скрипта или Ethereum-like транзакции.
Отправитель лизинга может отменить его:
- Любой аккаунт — с помощью транзакции отмены лизинга.
- dApp — c помощью действия LeaseCancel, выполняемого вызываемой функцией.
Изменение суммы лизинга не предусмотрено: можно только отменить его и создать новый.
Необходимо учитывать, что генерирующий баланс аккаунта рассчитывается как наименьший эффективный баланс (то есть баланс с учетом лизинга) за последние 1000 блоков (подробнее о расчете генерирующего баланса). Транзакция отмены предыдущего лизинга и новая транзакция лизинга могут попасть в разные блоки.
Пример. Допустим, на высоте 3500000 генерирующий баланс ноды A и ее эффективный баланс составляют 5000 WAVES.
В блоке 3500001 был отменен лизинг в адрес ноды A на сумму 100 WAVES. Теперь ее генерирующий баланс — 4900 WAVES.
В блоке 3500002 в адрес ноды A поступил новый лизинг на сумму 70 WAVES. Однако генерирующий баланс ноды остается равным 4900 WAVES, а увеличиться может только на высоте 3501001, когда блок 3500001 выбывает из тысячи последних блоков.
Действия Lease
и LeaseCancel
, выполняемые в одном вызове скрипта, не могут попасть в разные блоки, и поэтому позволяют, в частности, извлечь часть средств из лизинга. Если в одном вызове отменить лизинг на 100 WAVES и создать новый лизинг на 70 WAVES с тем же получателем, генерирующий баланс получателя уменьшится на разницу — 30 WAVES.
# Параметры лизинга
Получить параметры лизинга можно с помощью методов Node REST API:
- GET /leasing/active/{address} — возвращает список действующих лизингов по адресу (входящих и исходящих)
- GET /leasing/info/{id} — возвращает параметры лизинга по идентификатору
- GET /leasing/info, POST /leasing/info — возвращают параметры лизингов по списку идентификаторов
Пример лизинга:
{
"id": "CcqcGx5iWd6xvxzJnoVQHD91R5jYZAZHvZq2DMVuWKx1",
"originTransactionId": "CcqcGx5iWd6xvxzJnoVQHD91R5jYZAZHvZq2DMVuWKx1",
"sender": "3PD9TqtXN9tC1tg5TFUC2BNukebfLaYUsdy",
"recipient": "3PEjdMgnR7a48RnZoW8RF8TeEqidue28Wgm",
"amount": 268100000000,
"height": 3516046,
"status": "canceled",
"cancelHeight": 3519182,
"cancelTransactionId": "4mHhTVKJoQ4jTF828eBRrXZzy1ni2N2yQLwVhunp4agb"
}
Поле | Описание |
---|---|
id | Идентификатор лизинга. Если лизинг создан с помощью транзакции лизинга, его идентификатор совпадает с ID транзакции |
originTransactionId | Идентификатор транзакции лизинга, или транзакции вызова скрипта, или Ethereum-like транзакции, в которой был создан лизинг |
sender | Адрес лизингодателя |
recipient | Адрес лизингополучателя |
amount | Количество WAVELET, передаваемое в лизинг (то есть количество WAVES, умноженное на 108) |
height | Порядковый номер блока, в котором лизинг был создан |
status | Статус лизинга: active или canceled |
cancelHeight | Порядковый номер блока, в котором лизинг был отменен. null , если лизинг действует |
cancelTransactionId | Идентификатор транзакции отмены лизинга, или транзакции вызова скрипта, или Ethereum-like транзакции, в которой был отменен лизинг. null , если лизинг действующий |