Description
Parent issue: #683
In this issue we finalise the RFQ wire messages golang package. Here's what we currently have in the BLIP:
Request For Quote (tap_rfq
)
When a receiver wishes to receive N
units of TAP asset ID asset_id
, a new
p2p message tap_rfq
is sent with the following structure:
- type: ?? (
tap_rfq
) - data:
- [
32*byte
:rfq_id
] - [
32*byte
:asset_id
] - [
BigSize
:asset_amt
] - [
BigSize
:suggested_rate_tick
]
- [
where:
rfq_id
is a randomly generate 32-byte value to uniquely identify this RFQ
requestasset_id
is the asset ID of the asset the receiver intends to receiveasset_amt
is the amount of units of said assetsuggested_rate_tick
is the internal unit used for asset conversions. A tick
is 1/10000th of a currency unit. It gives us up to 4 decimal places of
precision (0.0001 or 0.01% or 1 bps). As an example, if the BTC/USD rate was
$61,234.95, then we multiply that by 10,000 to arrive at theusd_rate_tick
:
$61,234.95 * 10000 = 612,349,500
. To convert back to our normal rate, we
decide by10,000
to arrive back at$61,234.95
.
Given valid rfq_id
, we then define an tap_rfq_scid
by taking the last 8
bytes of the rfq_id
and interpreting them as a 64-bit integer.
Accepting Quotes (tap_rfq_accept
)
If it can, then it should send tap_rfq_accept
that returns the quote amount
the edge node is willing to observe to move N
units of asset asset_id
:
- type: ?? (
tap_req_accept
) - data:
- [
32*byte
:rfq_id
] - [
BigSize
:`accepted_rate_tick] - [
BigSize
:expiry_seconds
] - [
64*byte
:rfq_sig
]
- [
TODO(roasbeef): tlv err where?
where:
-
rfq_id
matches the existingrfq_id
of a settap_rfq
-
accepted_rate_tick
is the proposed rate for the volume unit expressed in
the internal unit of atick
. -
expiry_seconds
is the amount of seconds to use for the expiry of both the
quote and the invoice -
rfq_sig
is a signature over the serialized contents of the message
Rejecting Quotes (tap_rfq_reject
)
In the event that an edge node is unable to satisfy a quote request, then they
should send tap_rfq_reject
, identifying the rejected quote ID. A quote might
be rejected if the channel cannot accommodate the proposed volume, or if the
edge node is unwilling to carry any HTLCs for that asset_id
.
- type: ?? (
tap_req_accept
) - data:
- [
32*byte
:rfq_id
]
- [
where:
rfq_id
is the quote ID that they wish to reject
Metadata
Metadata
Assignees
Labels
Type
Projects
Status