2
0
mirror of https://github.com/lightninglabs/loop synced 2024-11-13 13:10:30 +00:00
loop/swapserverrpc/instantout.proto
2024-02-07 16:08:14 +01:00

152 lines
4.6 KiB
Protocol Buffer

syntax = "proto3";
// We can't change this to swapserverrpc, it would be a breaking change because
// the package name is also contained in the HTTP URIs and old clients would
// call the wrong endpoints. Luckily with the go_package option we can have
// different golang and RPC package names to fix protobuf namespace conflicts.
package looprpc;
option go_package = "github.com/lightninglabs/loop/swapserverrpc";
service InstantSwapServer {
// RequestInstantLoopOut initiates an instant loop out swap.
rpc RequestInstantLoopOut (InstantLoopOutRequest)
returns (InstantLoopOutResponse);
// PollPaymentAccepted polls the server to see if the payment has been
// accepted.
rpc PollPaymentAccepted (PollPaymentAcceptedRequest)
returns (PollPaymentAcceptedResponse);
// InitHtlcSig is called by the client to initiate the htlc sig exchange.
rpc InitHtlcSig (InitHtlcSigRequest) returns (InitHtlcSigResponse);
// PushHtlcSig is called by the client to push the htlc sigs to the server.
rpc PushHtlcSig (PushHtlcSigRequest) returns (PushHtlcSigResponse);
// PushPreimage is called by the client to push the preimage to the server.
// This returns the musig2 signatures that the client needs to sweep the
// htlc.
rpc PushPreimage (PushPreimageRequest) returns (PushPreimageResponse);
// CancelInstantSwap tries to cancel the instant swap. This can only be
// called if the swap has not been accepted yet.
rpc CancelInstantSwap (CancelInstantSwapRequest)
returns (CancelInstantSwapResponse);
// GetInstantOutQuote returns the absolute fee in satoshis for the swap and
// the pubkey to query the route to estimate offchain payment fees.
rpc GetInstantOutQuote (GetInstantOutQuoteRequest)
returns (GetInstantOutQuoteResponse);
}
message InstantLoopOutRequest {
// Htlc related fields:
// The key for the htlc preimage spending path.
bytes receiver_key = 1;
// The hash of the preimage that will be used to settle the htlc.
bytes swap_hash = 2;
// The requested absolute block height of the on-chain htlc.
int32 expiry = 3;
// The fee rate in sat/kw that should be used for the htlc.
uint64 htlc_fee_rate = 4;
// The reservations used as the inputs.
repeated bytes reservation_ids = 5;
// The protocol version to use for the swap.
InstantOutProtocolVersion protocol_version = 6;
}
message InstantLoopOutResponse {
// The swap invoice that the client should pay.
string swap_invoice = 1;
// the key for the htlc expiry path.
bytes sender_key = 2;
};
message PollPaymentAcceptedRequest {
// The hash of the swap invoice.
bytes swap_hash = 1;
}
message PollPaymentAcceptedResponse {
// Whether the payment has been accepted.
bool accepted = 1;
}
message InitHtlcSigRequest {
// The hash of the swap invoice.
bytes swap_hash = 1;
// The nonces that the client will use to generate the htlc sigs.
repeated bytes htlc_client_nonces = 2;
}
message InitHtlcSigResponse {
// The nonces that the server will use to generate the htlc sigs.
repeated bytes htlc_server_nonces = 2;
}
message PushHtlcSigRequest {
// The hash of the swap invoice.
bytes swap_hash = 1;
// The sigs that the client generated for the reservation inputs.
repeated bytes client_sigs = 2;
}
message PushHtlcSigResponse {
// The sigs that the server generated for the reservation inputs.
repeated bytes server_sigs = 1;
}
message PushPreimageRequest {
// The preimage that the client generated for the swap.
bytes preimage = 1;
// The nonces that the client used to generate the sweepless sweep sigs.
repeated bytes client_nonces = 2;
// The address that the client wants to sweep the htlc to.
string client_sweep_addr = 3;
// The fee rate in sat/kw that the client wants to use for the sweep.
uint64 musig_tx_fee_rate = 4;
}
message PushPreimageResponse {
// The sweep sigs that the server generated for the htlc.
repeated bytes musig2_sweep_sigs = 1;
// The nonces that the server used to generate the sweepless sweep sigs.
repeated bytes server_nonces = 2;
}
message CancelInstantSwapRequest {
// The hash of the swap invoice.
bytes swap_hash = 1;
}
message CancelInstantSwapResponse {
}
message GetInstantOutQuoteRequest {
// The amount to swap in satoshis.
uint64 amount = 1;
}
message GetInstantOutQuoteResponse {
// The swap fee in satoshis.
uint64 swap_fee = 1;
}
enum InstantOutProtocolVersion {
INSTANTOUT_NONE = 0;
INSTANTOUT_FULL_RESERVATION = 1;
};