Commit graph

109 commits

Author SHA1 Message Date
Jeffrey Czyz
3e17e7f9bb
Remove unused mut from OfferBuilder::amount_msats
Seen when removing `#[allow(unused)]` from `offers` module.
2022-12-02 15:28:02 -08:00
Jeffrey Czyz
4b8b17d72f
Reduce visibility for offer auxiliary types 2022-12-02 15:26:27 -08:00
Jeffrey Czyz
1e26a2bc19
Expose the default Quantity::one as pub 2022-11-18 11:33:07 -06:00
Jeffrey Czyz
94a07d9cae
Limit TLV stream decoding to type ranges
BOLT 12 messages are limited to a range of TLV record types. Refactor
decode_tlv_stream into a decode_tlv_stream_range macro for limiting
which types are parsed. Requires a SeekReadable trait for rewinding when
a type outside of the range is seen. This allows for composing TLV
streams of different ranges.

Updates offer parsing accordingly and adds a test demonstrating failure
if a type outside of the range is included.
2022-11-18 11:33:07 -06:00
Jeffrey Czyz
03d0a4b497
Offer parsing tests
Test semantic errors when parsing offer bytes.
2022-11-18 11:33:07 -06:00
Jeffrey Czyz
3a6d7b867e
Use SemanticError in OfferBuilder::build 2022-11-18 11:33:06 -06:00
Jeffrey Czyz
60d7ffce10
Offer parsing from bech32 strings
Add common bech32 parsing for BOLT 12 messages. The encoding is similar
to bech32 only without a checksum and with support for continuing
messages across multiple parts.

Messages implementing Bech32Encode are parsed into a TLV stream, which
is converted to the desired message content while performing semantic
checks. Checking after conversion allows for more elaborate checks of
data composed of multiple TLV records and for more meaningful error
messages.

The parsed bytes are also saved to allow creating messages with mirrored
data, even if TLV records are unknown.
2022-11-18 11:33:06 -06:00
Jeffrey Czyz
8ba09e068b
Builder for creating offers
Add a builder for creating offers given a required description and
node_id. Other settings are optional and duplicative settings will
override previous settings for non-Vec fields.
2022-11-08 13:18:15 -06:00
Jeffrey Czyz
24b63de10c
Offer message interface and data format
Define an interface for BOLT 12 `offer` messages. The underlying format
consists of the original bytes and the parsed contents.

The bytes are later needed when constructing an `invoice_request`
message. This is because it must mirror all the `offer` TLV records,
including unknown ones, which aren't represented in the contents.

The contents will be used in `invoice_request` messages to avoid
duplication. Some fields while required in a typical user-pays-merchant
flow may not be necessary in the merchant-pays-user flow (i.e., refund).
2022-11-04 15:07:01 -05:00