enzyofficial / bitcoin-bolt11
一个库,用于解码按照 BOLT #11 定义的闪电网络支付请求
v1.0.1
2023-07-04 08:30 UTC
Requires
- php: ^7.4|^8.0
- ext-bcmath: *
- ext-gmp: *
- bitwasp/bech32: ^0.0.1
- protonlabs/bitcoin: ^1.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.10
- phpunit/phpunit: ^9
This package is auto-updated.
Last update: 2024-09-04 11:12:17 UTC
README
此库旨在将 BOLT #11 支付请求解码为可用的 PHP 对象。目前只支持解码。
BOLT #11 是一个简单、可扩展、适用于 QR 码的协议,用于在闪电网络中请求支付。
安装
$ composer require enzyofficial/bitcoin-bolt11
用法
$invoice = 'lnbc9678785340p1pwmna7lpp5gc3xfm08u9qy06djf8dfflhugl6p7lgza6dsjxq454gxhj9t7a0sd8dgfkx7cmtwd68yetpd5s9xar0wfjn5gpc8qhrsdfq24f5ggrxdaezqsnvda3kkum5wfjkzmfqf3jkgem9wgsyuctwdus9xgrcyqcjcgpzgfskx6eqf9hzqnteypzxz7fzypfhg6trddjhygrcyqezcgpzfysywmm5ypxxjemgw3hxjmn8yptk7untd9hxwg3q2d6xjcmtv4ezq7pqxgsxzmnyyqcjqmt0wfjjq6t5v4khxxqyjw5qcqp2rzjq0gxwkzc8w6323m55m4jyxcjwmy7stt9hwkwe2qxmy8zpsgg7jcuwz87fcqqeuqqqyqqqqlgqqqqn3qq9qn07ytgrxxzad9hc4xt3mawjjt8znfv8xzscs7007v9gh9j569lencxa8xeujzkxs0uamak9aln6ez02uunw6rd2ht2sqe4hz8thcdagpleym0j'; $decoder = new \Jorijn\Bitcoin\Bolt11\Encoder\PaymentRequestDecoder(); $denormalizer = new \Jorijn\Bitcoin\Bolt11\Normalizer\PaymentRequestDenormalizer(); $paymentRequest = $denormalizer->denormalize($decoder->decode($invoice)); // satoshis: 967878 echo 'satoshis: ' . $paymentRequest->getSatoshis(); // description: Blockstream Store: 88.85 USD for Blockstream Ledger Nano S x 1, "Back In My Day" Sticker x 2, "I Got Lightning Working" Sticker x 2 and 1 more items echo 'description: ' . $paymentRequest->findTagByName(\Jorijn\Bitcoin\Bolt11\Model\Tag::DESCRIPTION)->getData(); // timestamp: DateTime Object // ( // [date] => 2019-10-30 20:51:43.000000 // [timezone_type] => 1 // [timezone] => +00:00 // ) echo 'timestamp: ' . print_r($paymentRequest->getTimestampDateTime(), true); // hop: 0 // public key: 029e03a901b85534ff1e92c43c74431f7ce72046060fcf7a95c37e148f78c77255 // short channel id: 0102030405060708 // fee base msat: 1 // fee proportional millionths 20 // cltv expiry delta: 3 foreach ($paymentRequest->findTagByName(\Jorijn\Bitcoin\Bolt11\Model\Tag::ROUTING_INFO)->getData() as $hop => $routingInfo) { echo 'hop: ' . $hop; echo 'public key: ' . $routingInfo->getPubKey(); echo 'short channel id: ' . $routingInfo->getShortChannelId(); echo 'fee base msat: ' . $routingInfo->getFeeBaseMsat(); echo 'fee proportional millionths ' . $routingInfo->getFeeProportionalMillionths(); echo 'cltv expiry delta: ' . $routingInfo->getCltvExpiryDelta(); }
更多示例可在 示例 目录中找到。
警告
如果发票是 satoshis 的整数倍,则 ->getSatoshis()
方法将仅返回有效的数字。如果是 satoshis 的分数,并且该方法返回 NULL,则必须使用 ->getMilliSatoshis()
方法。1000 个毫 satoshis 等于 1 satoshi。
感谢
此库基于其他编程语言的 BOLT #11 库。特别感谢
- https://github.com/lightningnetwork/lnd/blob/master/zpay32/decode.go
- https://github.com/bitcoinjs/bolt11
- https://github.com/nievk/bolt11
CLI 工具
基于此库有一个 CLI 工具。它允许轻松地将支付请求解码并转换为 JSON、XML、YAML & CSV。下载和使用方法请参阅:https://github.com/Jorijn/bitcoin-bolt11-cli