Сеть Lightning была названа ответом на дебаты о масштабировании биткойнов, которые обещают миллионы tps. Говоря о реальных сценариях использования, в настоящее время нужно думать как об уровне протокола, так и о уровне приложений.

На уровне протокола существует несколько проектов, работающих над реализациями Lightning, включая c-lightning (Blockstream), Eclair (ACINQ) и lnd (Lightning Labs); в этой статье речь пойдет о последнем.

Несколько ранних примеров приложений Lightning были созданы для демонстрации технологии; из них тот (по моему скромному мнению), который больше всего демонстрирует необработанный, нефильтрованный контент раннего Интернета, - это satoshis.place. Satoshi’s Place напоминает раннюю версию MS Paint и позволяет рисовать все, что вы хотите (и я имею в виду что угодно) по низкой цене в 1 сатоши за пиксель.

В этой статье описывается, как оплачивать ваши изображения Satoshi’s Place через узел Lightning lnd. Предполагается, что вы используете полностью синхронизированный узел с достаточным количеством BTC для покрытия комиссии + транзакционных издержек.

Создавать

Зайдите на https://satoshis.place и сделайте что-нибудь!

Отправить запрос на оплату

Проверить баланс кошелька

Запишите текущий баланс кошелька, чтобы вы могли рассчитать окончательную стоимость:

$ lncli walletbalance
{
    "total_balance": "150977",
    "confirmed_balance": "150977",
    "unconfirmed_balance": "0"
}

Подключиться к узлу Lightning

Подключитесь, используя pubkey@ip:port, отображаемый в разделе Информация об узле запроса платежа:

$ lncli connect [email protected]:9735
{
}

Подтвердите соединение с помощью listpeers:

$ lncli listpeers
{
    "peers": [
        ...
        {
            "pub_key": "0246...92ca",
            "address": "88.98.213.235:9735",
            "bytes_sent": "4094603",
            "bytes_recv": "7",
            "sat_sent": "0",
            "sat_recv": "0",
            "inbound": false,
            "ping_time": "0"
        }
    ]
}

Открытый платежный канал

Откройте платежный канал, используя pub_key и сумму финансирования в сатоши:

$ lncli openchannel 0246...92ca 60000
{
	"funding_txid": "2183...157a"
}

Примечание: это займет некоторое время, поскольку транзакция создания канала должна быть подтверждена в цепочке блоков. Вы можете просмотреть статус транзакции в проводнике блоков биткойнов: https://www.blockchain.com/btc/tx/2183… 157а.

Проверить статус с помощью pendingchannels:

$ lncli pendingchannels
{
    "total_limbo_balance": "0",
    "pending_open_channels": [
        {
            "channel": {
                "remote_node_pub": "0246...92ca",
                "channel_point": "2183...157a:1",
                "capacity": "60000",
                "local_balance": "55656",
                "remote_balance": "0"
            },
            "confirmation_height": 0,
            "commit_fee": "4344",
            "commit_weight": "600",
            "fee_per_kw": "6000"
        }
    ],
    "pending_closing_channels": [
    ],
    "pending_force_closing_channels": [
    ],
    "waiting_close_channels": [
    ]
}

Все открытые каналы отображаются с использованием listchannels:

$ lncli listchannels
{
    "channels": [
        {
            "active": true,
            "remote_pubkey": "0246...92ca",
            "channel_point": "2183...157a:1",
            "chan_id": "5",
            "capacity": "60000",
            "local_balance": "55656",
            "remote_balance": "0",
            "commit_fee": "4344",
            "commit_weight": "600",
            "fee_per_kw": "6000",
            "unsettled_balance": "0",
            "total_satoshis_sent": "0",
            "total_satoshis_received": "0",
            "num_updates": "0",
            "pending_htlcs": [
            ],
            "csv_delay": 144,
            "private": false
        }
    ]
}

Примечание. За открытие канала взимается комиссия в размере 4344 сатоши.

Отправьте обновленный запрос на оплату (необязательно)

У платежных запросов есть предполагаемый срок действия; на Satoshi’s Place - 10 минут. Возможно, вам придется повторно создать новый запрос в зависимости от того, сколько времени потребуется, чтобы открыть платежный канал.

Проверить запрос на оплату

Убедитесь, что вы отправляете нужную сумму на правильный адрес:

$ lncli decodepayreq lnbc...f8xq
{
    "destination": "0246...92ca",
    "payment_hash": "0883...0c12",
    "num_satoshis": "387",
    "timestamp": "1234567890",
    "expiry": "600",
    "description": "Payment for 387 pixels at satoshis.place.",
    "description_hash": "",
    "fallback_addr": "",
    "cltv_expiry": "10",
    "route_hints": [
    ]
}

Отправить платеж

$ lncli sendpayment --pay_req=lnbc...f8xq
{
	"payment_error": "",
	"payment_preimage": "63e3...4d64",
	"payment_route": {
		"total_time_lock": 540132,
		"total_amt": 387,
		"hops": [
			{
				"chan_id": 5,
				"chan_capacity": 55056,
				"amt_to_forward": 387,
				"expiry": 540132,
				"amt_to_forward_msat": 387000
			}
		],
		"total_amt_msat": 387000
	}
}

Все платежи отображаются с использованием listpayments:

$ lncli listpayments
{
    "payments": [
        {
            "payment_hash": "0883...0c12",
            "value": "387",
            "creation_date": "1234567890",
            "path": [
                "0246...92ca"
            ],
            "fee": "0",
            "payment_preimage": "63e3...4d64"
        }
    ]
}

Платеж подтвержден :)

Закрыть канал

Определите точку канала:

$ lncli listchannels
{
    "channels": [
        {
            "active": true,
            "remote_pubkey": "0246...92ca",
            "channel_point": "2183...157a:1",
            "chan_id": "5",
            "capacity": "60000",
            "local_balance": "55269",
            "remote_balance": "387",
            "commit_fee": "4731",
            "commit_weight": "600",
            "fee_per_kw": "6000",
            "unsettled_balance": "0",
            "total_satoshis_sent": "387",
            "total_satoshis_received": "0",
            "num_updates": "2",
            "pending_htlcs": [
            ],
            "csv_delay": 144,
            "private": false
        }
    ]
}

channel_point состоит из двух чисел, разделенных двоеточием; первый - funding_txid, второй - output_index.

Идите и закройте канал, используя funding_txid и output_index:

$ lncli closechannel 2183...157a 1
{
	"closing_txid": "89cf...1159"
}

Подтвердите, что канал был закрыт:

$ lncli listchannels
{
    "channels": [
    ]
}

Подтвердите, что неизрасходованные сатоши возвращаются в ваш кошелек:

$ lncli walletbalance
{
    "total_balance": "142574",
    "confirmed_balance": "87305",
    "unconfirmed_balance": "55269"
}

Общая стоимость: 4344 сатоши на открытие канала * + 387 сатоши на сохранение искусства = 4731 сатоши (~ 0,29 доллара США на момент написания)

* Следует отметить, что плата за канал является единовременной. как только канал открыт, у вас есть дешевые, почти мгновенные транзакции. Например, если я внесу второе изменение стоимостью примерно такое же количество сатоши, оно составит ~ 0,026 доллара США.

Заключение

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

Архив этого сообщения можно найти по адресу https://ipfs.io/ipfs/QmPQUnrnquN6LJBVAxNGz5cUMLYeUJLEvQp18pXtqDitVb