Глоссарий / Lightning и layer 2
Миллисатоши
Другие названия: msat.
- Что такое миллисатоши?
- Миллисатоши представляет собой одну тысячную сатоши, единицу, в которой Lightning считает балансы каналов и комиссии за маршрутизацию, и сумму, которую сам блокчейн биткоина записать не может.
Lightning ведет учет на один шаг мельче, чем блокчейн, в тысячных долях сатоши. BOLT 2 прямо фиксирует соотношение: push_msat не может превышать funding_satoshis более чем в 1000 раз, а ончейн-исполнение возможно только для целых сумм в сатоши. Любой остаток в миллисатоши в вашем балансе реально существует внутри канала и отбрасывается округлением в момент закрытия этого канала.
Как это работает
Миллисатоши является единицей учета внутри канала Lightning, а не единицей расчетов в блокчейне.
Каждая сумма платежа внутри канала записывается в миллисатоши, и это видно по имени ее поля. Сообщение, добавляющее платеж в канал, update_add_htlc, несет 64-битное поле amount_msat, а при открытии канала согласуются push_msat, htlc_minimum_msat и max_htlc_value_in_flight_msat в той же единице. BOLT 2 указывает оговорку рядом с определением: суммы выражены в миллисатоши, "though on-chain enforcement is only possible for whole satoshi amounts greater than the dust limit" (хотя ончейн-исполнение возможно только для целых сумм в сатоши, превышающих предел пыли), и транзакция обязательства округляет их вниз.
Коэффициент пересчета не является фольклором. Узел, открывающий канал, должен задать push_msat не более чем в 1000 раз больше funding_satoshis, а принимающий пир должен отклонить канал, если push_msat больше funding_satoshis, умноженных на 1000. Соотношение 1000 к 1 записано в рукопожатии с обеих сторон.
Счета наследуют тот же минимум. Сумма по BOLT 11 выражается в биткоине с буквой-множителем, и самая маленькая из них, p (пико), несет правило, которого нет у остальных: последняя цифра суммы должна быть нулем. Один пикобиткоин составляет одну десятую миллисатоши, поэтому завершающий ноль вынуждает запрашивать целое число миллисатоши. Спецификация прямо объясняет причину: суммы меньше миллисатоши не могут передаваться по сети, поскольку суммы HTLC выражены в миллисатоши, а тестовые векторы включают счет, отклоненный под заголовком "Invalid sub-millisatoshi precision".
Три дополнительных знака после запятой оправдывают себя в арифметике комиссий. Пересылающий узел взимает пропорциональную ставку, выраженную в миллионных долях сатоши за каждый пересланный сатоши, поэтому ставка 1 на платеж в 1000 сатоши дает ровно один миллисатоши. Округлите это до целого сатоши, и вы либо увеличите комиссию в тысячу раз, либо вовсе ее потеряете.
Где это видно
Значения в миллисатоши появляются везде, где инструмент Lightning показывает свои реальные числа, а не округленное отображение.
Декодируйте счет BOLT 11, и подсказки маршрута появятся в этой единице. Собственный разобранный пример из спецификации перечисляет два перехода с базовой комиссией 1 миллисатоши и 2 миллисатоши, а ее образец счета для заказа в магазине Blockstream несет подсказку маршрута с базовой комиссией 1000, то есть один целый сатоши. Обновление gossip канала публикует htlc_minimum_msat и fee_base_msat в той же единице, поэтому панель, читающая эти поля, показывает число в тысячу раз больше стоящего рядом значения в сатоши.
Потребительские кошельки скрывают единицу, но не арифметику. Phoenix публикует таблицу комиссий, а не выясняет их в момент платежа, и его отправка через Lightning стоит 0,4 процента плюс 4 сатоши; при платеже в 137 сатоши процентная часть составляет 548 миллисатоши, величину, не имеющую ончейн-представления вообще. Muun представляет ончейн и Lightning как один баланс, что полностью скрывает границу, не устраняя ее.
Миллисатоши vs сатоши
Сатоши является наименьшей суммой, которую может записать блокчейн биткоина, тогда как миллисатоши составляет одну тысячную от нее и существует только в сообщениях Lightning и в книгах учета, которые ведут два его пира.
Разница дает о себе знать при закрытии. Баланс канала в 1 234 567 миллисатоши исполним как 1234 сатоши и не более, поскольку транзакция обязательства, рассчитывающая канал ончейн, платит целые сатоши; оставшимся 567 миллисатоши негде жить в ончейн-выходе, и их можно потратить только пока канал остается открытым. Этот разрыв стоит долю цента, и все же именно из-за него две единицы нельзя подменять друг другом нигде, где задействован блокчейн.