Чью подпись проверить перед учётом Lightning-запа в Nostr
К публикации пришла квитанция о переводе 21 сатоши. Совпадения суммы недостаточно: произвольный пользователь может подписать событие с ID публикации и нужным числом.
Определите ожидаемого издателя квитанции
Получите из LNURL-pay получателя объявленный открытый ключ Nostr и убедитесь, что сервис поддерживает запы. Сравните его с проверенным ключом подписи квитанции вида 9735. В примере ключи сокращены, а сумма инвойса уже декодирована. Суммы в миллисатоши совпадают, однако квитанция подписана другим сервисом. В счётчик такой перевод не включают.
const provider = { nostrPubkey: "service-A" };
const receipt = { kind: 9735, pubkey: "service-B", invoiceMsat: 21000n };
const request = { amountMsat: 21000n };
console.log(receipt.invoiceMsat === request.amountMsat);
console.log(receipt.pubkey === provider.nostrPubkey);
Свяжите инвойс с подписанным запросом
Разберите BOLT11 и возьмите исходную строку запроса из description. Сверьте её хеш с хешем описания в инвойсе, а сумму инвойса — с суммой запроса, если она задана. Перед группировкой по публикациям проверьте получателя и ссылку на событие. Квитанция представляет собой свидетельство платёжного сервиса получателя. Для сверки собственного узла используйте записи о платежах.