multi: integrate the new htlc v2 scripts to loop in/out

This commit bumps the current protocol version and integrates htlc v2
with loop in/out for new swaps, while keeping htlc v1 for any pending
swaps with previous protocol versions.
pull/291/head
Andras Banki-Horvath 4 years ago committed by András Bánki-Horváth
parent 86db43a2cb
commit 133f3cac5f

@ -175,9 +175,10 @@ func (s *Client) FetchSwaps() ([]*SwapInfo, error) {
for _, swp := range loopOutSwaps { for _, swp := range loopOutSwaps {
htlc, err := swap.NewHtlc( htlc, err := swap.NewHtlc(
swap.HtlcV1, swp.Contract.CltvExpiry, GetHtlcScriptVersion(swp.Contract.ProtocolVersion),
swp.Contract.SenderKey, swp.Contract.ReceiverKey, swp.Contract.CltvExpiry, swp.Contract.SenderKey,
swp.Hash, swap.HtlcP2WSH, s.lndServices.ChainParams, swp.Contract.ReceiverKey, swp.Hash, swap.HtlcP2WSH,
s.lndServices.ChainParams,
) )
if err != nil { if err != nil {
return nil, err return nil, err
@ -195,18 +196,20 @@ func (s *Client) FetchSwaps() ([]*SwapInfo, error) {
for _, swp := range loopInSwaps { for _, swp := range loopInSwaps {
htlcNP2WSH, err := swap.NewHtlc( htlcNP2WSH, err := swap.NewHtlc(
swap.HtlcV1, swp.Contract.CltvExpiry, GetHtlcScriptVersion(swp.Contract.ProtocolVersion),
swp.Contract.SenderKey, swp.Contract.ReceiverKey, swp.Contract.CltvExpiry, swp.Contract.SenderKey,
swp.Hash, swap.HtlcNP2WSH, s.lndServices.ChainParams, swp.Contract.ReceiverKey, swp.Hash, swap.HtlcNP2WSH,
s.lndServices.ChainParams,
) )
if err != nil { if err != nil {
return nil, err return nil, err
} }
htlcP2WSH, err := swap.NewHtlc( htlcP2WSH, err := swap.NewHtlc(
swap.HtlcV1, swp.Contract.CltvExpiry, GetHtlcScriptVersion(swp.Contract.ProtocolVersion),
swp.Contract.SenderKey, swp.Contract.ReceiverKey, swp.Contract.CltvExpiry, swp.Contract.SenderKey,
swp.Hash, swap.HtlcP2WSH, s.lndServices.ChainParams, swp.Contract.ReceiverKey, swp.Hash, swap.HtlcP2WSH,
s.lndServices.ChainParams,
) )
if err != nil { if err != nil {
return nil, err return nil, err

@ -50,7 +50,7 @@ func viewOut(swapClient *loop.Client, chainParams *chaincfg.Params) error {
for _, s := range swaps { for _, s := range swaps {
htlc, err := swap.NewHtlc( htlc, err := swap.NewHtlc(
swap.HtlcV1, loop.GetHtlcScriptVersion(s.Contract.ProtocolVersion),
s.Contract.CltvExpiry, s.Contract.CltvExpiry,
s.Contract.SenderKey, s.Contract.SenderKey,
s.Contract.ReceiverKey, s.Contract.ReceiverKey,
@ -102,7 +102,7 @@ func viewIn(swapClient *loop.Client, chainParams *chaincfg.Params) error {
for _, s := range swaps { for _, s := range swaps {
htlc, err := swap.NewHtlc( htlc, err := swap.NewHtlc(
swap.HtlcV1, loop.GetHtlcScriptVersion(s.Contract.ProtocolVersion),
s.Contract.CltvExpiry, s.Contract.CltvExpiry,
s.Contract.SenderKey, s.Contract.SenderKey,
s.Contract.ReceiverKey, s.Contract.ReceiverKey,

@ -31,13 +31,17 @@ const (
// propose a cltv expiry height for loop out. // propose a cltv expiry height for loop out.
ProtocolVersionUserExpiryLoopOut ProtocolVersion = 4 ProtocolVersionUserExpiryLoopOut ProtocolVersion = 4
// ProtocolVersionHtlcV2 indicates that the client will use the new
// HTLC v2 scrips for swaps.
ProtocolVersionHtlcV2 ProtocolVersion = 5
// ProtocolVersionUnrecorded is set for swaps were created before we // ProtocolVersionUnrecorded is set for swaps were created before we
// started saving protocol version with swaps. // started saving protocol version with swaps.
ProtocolVersionUnrecorded ProtocolVersion = math.MaxUint32 ProtocolVersionUnrecorded ProtocolVersion = math.MaxUint32
// CurrentRpcProtocolVersion defines the version of the RPC protocol // CurrentRpcProtocolVersion defines the version of the RPC protocol
// that is currently supported by the loop client. // that is currently supported by the loop client.
CurrentRPCProtocolVersion = looprpc.ProtocolVersion_USER_EXPIRY_LOOP_OUT CurrentRPCProtocolVersion = looprpc.ProtocolVersion_HTLC_V2
// CurrentInteranlProtocolVersionInternal defines the RPC current // CurrentInteranlProtocolVersionInternal defines the RPC current
// protocol in the internal representation. // protocol in the internal representation.
@ -70,6 +74,9 @@ func (p ProtocolVersion) String() string {
case ProtocolVersionUserExpiryLoopOut: case ProtocolVersionUserExpiryLoopOut:
return "User Expiry Loop Out" return "User Expiry Loop Out"
case ProtocolVersionHtlcV2:
return "HTLC V2"
default: default:
return "Unknown" return "Unknown"
} }

@ -19,6 +19,7 @@ func TestProtocolVersionSanity(t *testing.T) {
ProtocolVersionSegwitLoopIn, ProtocolVersionSegwitLoopIn,
ProtocolVersionPreimagePush, ProtocolVersionPreimagePush,
ProtocolVersionUserExpiryLoopOut, ProtocolVersionUserExpiryLoopOut,
ProtocolVersionHtlcV2,
} }
rpcVersions := [...]looprpc.ProtocolVersion{ rpcVersions := [...]looprpc.ProtocolVersion{
@ -27,6 +28,7 @@ func TestProtocolVersionSanity(t *testing.T) {
looprpc.ProtocolVersion_NATIVE_SEGWIT_LOOP_IN, looprpc.ProtocolVersion_NATIVE_SEGWIT_LOOP_IN,
looprpc.ProtocolVersion_PREIMAGE_PUSH_LOOP_OUT, looprpc.ProtocolVersion_PREIMAGE_PUSH_LOOP_OUT,
looprpc.ProtocolVersion_USER_EXPIRY_LOOP_OUT, looprpc.ProtocolVersion_USER_EXPIRY_LOOP_OUT,
looprpc.ProtocolVersion_HTLC_V2,
} }
require.Equal(t, len(versions), len(rpcVersions)) require.Equal(t, len(versions), len(rpcVersions))

@ -172,11 +172,13 @@ func newLoopInSwap(globalCtx context.Context, cfg *swapConfig,
MaxMinerFee: request.MaxMinerFee, MaxMinerFee: request.MaxMinerFee,
MaxSwapFee: request.MaxSwapFee, MaxSwapFee: request.MaxSwapFee,
Label: request.Label, Label: request.Label,
ProtocolVersion: loopdb.CurrentInternalProtocolVersion,
}, },
} }
swapKit := newSwapKit( swapKit := newSwapKit(
swapHash, swap.TypeIn, cfg, &contract.SwapContract, swapHash, swap.TypeIn,
cfg, &contract.SwapContract,
) )
swapKit.lastUpdateTime = initiationTime swapKit.lastUpdateTime = initiationTime
@ -217,7 +219,8 @@ func resumeLoopInSwap(reqContext context.Context, cfg *swapConfig,
log.Infof("Resuming loop in swap %v", hash) log.Infof("Resuming loop in swap %v", hash)
swapKit := newSwapKit( swapKit := newSwapKit(
hash, swap.TypeIn, cfg, &pend.Contract.SwapContract, hash, swap.TypeIn, cfg,
&pend.Contract.SwapContract,
) )
swap := &loopInSwap{ swap := &loopInSwap{

@ -171,12 +171,14 @@ func newLoopOutSwap(globalCtx context.Context, cfg *swapConfig,
MaxMinerFee: request.MaxMinerFee, MaxMinerFee: request.MaxMinerFee,
MaxSwapFee: request.MaxSwapFee, MaxSwapFee: request.MaxSwapFee,
Label: request.Label, Label: request.Label,
ProtocolVersion: loopdb.CurrentInternalProtocolVersion,
}, },
OutgoingChanSet: chanSet, OutgoingChanSet: chanSet,
} }
swapKit := newSwapKit( swapKit := newSwapKit(
swapHash, swap.TypeOut, cfg, &contract.SwapContract, swapHash, swap.TypeOut,
cfg, &contract.SwapContract,
) )
swapKit.lastUpdateTime = initiationTime swapKit.lastUpdateTime = initiationTime
@ -223,7 +225,8 @@ func resumeLoopOutSwap(reqContext context.Context, cfg *swapConfig,
log.Infof("Resuming loop out swap %v", hash) log.Infof("Resuming loop out swap %v", hash)
swapKit := newSwapKit( swapKit := newSwapKit(
hash, swap.TypeOut, cfg, &pend.Contract.SwapContract, hash, swap.TypeOut, cfg,
&pend.Contract.SwapContract,
) )
// Create the htlc. // Create the htlc.

@ -49,6 +49,8 @@ const (
ProtocolVersion_PREIMAGE_PUSH_LOOP_OUT ProtocolVersion = 3 ProtocolVersion_PREIMAGE_PUSH_LOOP_OUT ProtocolVersion = 3
// The client will propose a cltv expiry height for loop out. // The client will propose a cltv expiry height for loop out.
ProtocolVersion_USER_EXPIRY_LOOP_OUT ProtocolVersion = 4 ProtocolVersion_USER_EXPIRY_LOOP_OUT ProtocolVersion = 4
// The client will use the new v2 HTLC scripts.
ProtocolVersion_HTLC_V2 ProtocolVersion = 5
) )
var ProtocolVersion_name = map[int32]string{ var ProtocolVersion_name = map[int32]string{
@ -57,6 +59,7 @@ var ProtocolVersion_name = map[int32]string{
2: "NATIVE_SEGWIT_LOOP_IN", 2: "NATIVE_SEGWIT_LOOP_IN",
3: "PREIMAGE_PUSH_LOOP_OUT", 3: "PREIMAGE_PUSH_LOOP_OUT",
4: "USER_EXPIRY_LOOP_OUT", 4: "USER_EXPIRY_LOOP_OUT",
5: "HTLC_V2",
} }
var ProtocolVersion_value = map[string]int32{ var ProtocolVersion_value = map[string]int32{
@ -65,6 +68,7 @@ var ProtocolVersion_value = map[string]int32{
"NATIVE_SEGWIT_LOOP_IN": 2, "NATIVE_SEGWIT_LOOP_IN": 2,
"PREIMAGE_PUSH_LOOP_OUT": 3, "PREIMAGE_PUSH_LOOP_OUT": 3,
"USER_EXPIRY_LOOP_OUT": 4, "USER_EXPIRY_LOOP_OUT": 4,
"HTLC_V2": 5,
} }
func (x ProtocolVersion) String() string { func (x ProtocolVersion) String() string {
@ -1185,87 +1189,88 @@ func init() {
func init() { proto.RegisterFile("server.proto", fileDescriptor_ad098daeda4239f7) } func init() { proto.RegisterFile("server.proto", fileDescriptor_ad098daeda4239f7) }
var fileDescriptor_ad098daeda4239f7 = []byte{ var fileDescriptor_ad098daeda4239f7 = []byte{
// 1275 bytes of a gzipped FileDescriptorProto // 1285 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x56, 0xdd, 0x72, 0xdb, 0x44, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x56, 0xdd, 0x72, 0xdb, 0x44,
0x14, 0x46, 0xb2, 0xe3, 0xc4, 0xc7, 0x4e, 0xa2, 0x6e, 0xdb, 0xd4, 0x71, 0x9b, 0xe2, 0x08, 0x28, 0x14, 0x46, 0xf2, 0x4f, 0xe2, 0x63, 0x27, 0x51, 0xb7, 0x6d, 0xea, 0xb8, 0x4d, 0x71, 0x04, 0x94,
0x21, 0x17, 0x69, 0xa7, 0xdc, 0x71, 0xa7, 0xda, 0x4a, 0xa3, 0xa9, 0x23, 0x1b, 0x59, 0xee, 0xcf, 0x90, 0x8b, 0xb4, 0x53, 0xee, 0xb8, 0x53, 0x6d, 0xa5, 0xd1, 0xd4, 0x91, 0x8d, 0x2c, 0xa7, 0xed,
0xd5, 0xb2, 0x71, 0x96, 0x44, 0x83, 0xf5, 0x53, 0x49, 0x4e, 0x93, 0xe1, 0x0a, 0x78, 0x0e, 0x9e, 0xd5, 0xb2, 0x71, 0x96, 0x44, 0x83, 0x2d, 0xa9, 0x92, 0x9c, 0x26, 0xc3, 0x15, 0xc3, 0x03, 0xf0,
0x01, 0x6e, 0x78, 0x02, 0x66, 0x78, 0x03, 0x5e, 0x81, 0xe7, 0x60, 0x76, 0xb5, 0xb2, 0x25, 0x5b, 0x04, 0x3c, 0x03, 0xdc, 0xf0, 0x04, 0xcc, 0xf0, 0x06, 0xbc, 0x02, 0xcf, 0xc1, 0xec, 0x6a, 0x65,
0x49, 0x13, 0x26, 0xdc, 0x59, 0xe7, 0x7c, 0xda, 0x73, 0xbe, 0xef, 0xec, 0xf9, 0x64, 0xa8, 0x47, 0x4b, 0xb6, 0x92, 0xd6, 0x4c, 0xb8, 0xb3, 0xce, 0xf9, 0xb4, 0xe7, 0x7c, 0xdf, 0xd9, 0xf3, 0xc9,
0x34, 0x3c, 0xa3, 0xe1, 0x5e, 0x10, 0xfa, 0xb1, 0x8f, 0x96, 0xc7, 0xbe, 0x1f, 0x84, 0xc1, 0xa8, 0x50, 0x0b, 0x69, 0x70, 0x41, 0x83, 0x7d, 0x3f, 0xf0, 0x22, 0x0f, 0xad, 0x8c, 0x3c, 0xcf, 0x0f,
0xf9, 0xe8, 0xc4, 0xf7, 0x4f, 0xc6, 0xf4, 0x29, 0x09, 0x9c, 0xa7, 0xc4, 0xf3, 0xfc, 0x98, 0xc4, 0xfc, 0x61, 0xe3, 0xd1, 0x99, 0xe7, 0x9d, 0x8d, 0xe8, 0x53, 0xe2, 0x3b, 0x4f, 0x89, 0xeb, 0x7a,
0x8e, 0xef, 0x45, 0x09, 0x4c, 0xfd, 0x49, 0x86, 0x7b, 0x03, 0xfe, 0x5e, 0xd7, 0xf7, 0x83, 0xde, 0x11, 0x89, 0x1c, 0xcf, 0x0d, 0x63, 0x98, 0xfa, 0x93, 0x0c, 0xf7, 0xfa, 0xfc, 0xbd, 0x8e, 0xe7,
0x24, 0xb6, 0xe8, 0xfb, 0x09, 0x8d, 0x62, 0xb4, 0x0d, 0xf5, 0x90, 0x8e, 0xa8, 0x73, 0x46, 0x43, 0xf9, 0xdd, 0x49, 0x64, 0xd1, 0x77, 0x13, 0x1a, 0x46, 0x68, 0x07, 0x6a, 0x01, 0x1d, 0x52, 0xe7,
0xfc, 0x03, 0xbd, 0x68, 0x48, 0x2d, 0x69, 0xa7, 0x6e, 0xd5, 0xd2, 0xd8, 0x2b, 0x7a, 0x81, 0x1e, 0x82, 0x06, 0xf8, 0x07, 0x7a, 0x55, 0x97, 0x9a, 0xd2, 0x6e, 0xcd, 0xaa, 0x26, 0xb1, 0x57, 0xf4,
0x42, 0x35, 0xfa, 0x40, 0x02, 0x7c, 0x4a, 0xa2, 0xd3, 0x86, 0xcc, 0xf3, 0x2b, 0x2c, 0x70, 0x40, 0x0a, 0x3d, 0x84, 0x4a, 0xf8, 0x9e, 0xf8, 0xf8, 0x9c, 0x84, 0xe7, 0x75, 0x99, 0xe7, 0x57, 0x59,
0xa2, 0x53, 0xa4, 0x40, 0x89, 0xb8, 0x71, 0xa3, 0xd4, 0x92, 0x76, 0xca, 0x16, 0xfb, 0x89, 0xbe, 0xe0, 0x90, 0x84, 0xe7, 0x48, 0x81, 0x02, 0x19, 0x47, 0xf5, 0x42, 0x53, 0xda, 0x2d, 0x5a, 0xec,
0x81, 0x4d, 0x0e, 0x0f, 0x26, 0x47, 0x63, 0x67, 0xc4, 0xbb, 0xc0, 0xc7, 0x94, 0x1c, 0x8f, 0x1d, 0x27, 0xfa, 0x06, 0xb6, 0x38, 0xdc, 0x9f, 0x9c, 0x8c, 0x9c, 0x21, 0xef, 0x02, 0x9f, 0x52, 0x72,
0x8f, 0x36, 0xca, 0x2d, 0x69, 0xa7, 0x64, 0x3d, 0x60, 0x80, 0xfe, 0x2c, 0xdf, 0x11, 0x69, 0xd4, 0x3a, 0x72, 0x5c, 0x5a, 0x2f, 0x36, 0xa5, 0xdd, 0x82, 0xf5, 0x80, 0x01, 0x7a, 0xb3, 0x7c, 0x5b,
0x06, 0x85, 0xf7, 0x3b, 0xf2, 0xc7, 0xf8, 0x8c, 0x86, 0x91, 0xe3, 0x7b, 0x8d, 0xa5, 0x96, 0xb4, 0xa4, 0x51, 0x0b, 0x14, 0xde, 0xef, 0xd0, 0x1b, 0xe1, 0x0b, 0x1a, 0x84, 0x8e, 0xe7, 0xd6, 0x4b,
0xb3, 0xf6, 0xbc, 0xb1, 0x27, 0x88, 0xee, 0xf5, 0x05, 0xe0, 0x75, 0x92, 0xb7, 0xd6, 0x83, 0x7c, 0x4d, 0x69, 0x77, 0xfd, 0x79, 0x7d, 0x5f, 0x10, 0xdd, 0xef, 0x09, 0xc0, 0x71, 0x9c, 0xb7, 0x36,
0x00, 0x6d, 0x40, 0x85, 0x9e, 0x07, 0x4e, 0x78, 0xd1, 0xa8, 0xb4, 0xa4, 0x9d, 0x25, 0x4b, 0x3c, 0xfc, 0x6c, 0x00, 0x6d, 0x42, 0x99, 0x5e, 0xfa, 0x4e, 0x70, 0x55, 0x2f, 0x37, 0xa5, 0xdd, 0x92,
0xa9, 0x7f, 0x4a, 0x70, 0x7f, 0x4e, 0x83, 0x28, 0xf0, 0xbd, 0x88, 0x32, 0x11, 0x78, 0xcb, 0x8e, 0x25, 0x9e, 0xd4, 0x3f, 0x25, 0xb8, 0x3f, 0xa7, 0x41, 0xe8, 0x7b, 0x6e, 0x48, 0x99, 0x08, 0xbc,
0x77, 0xe6, 0x3b, 0x23, 0xca, 0x45, 0xa8, 0x5a, 0x35, 0x16, 0x33, 0x92, 0x10, 0xfa, 0x02, 0xd6, 0x65, 0xc7, 0xbd, 0xf0, 0x9c, 0x21, 0xe5, 0x22, 0x54, 0xac, 0x2a, 0x8b, 0x19, 0x71, 0x08, 0x7d,
0x82, 0x90, 0x06, 0xe4, 0x62, 0x0a, 0x92, 0x39, 0x68, 0x35, 0x89, 0xa6, 0xb0, 0x2d, 0x80, 0x88, 0x01, 0xeb, 0x7e, 0x40, 0x7d, 0x72, 0x35, 0x05, 0xc9, 0x1c, 0xb4, 0x16, 0x47, 0x13, 0xd8, 0x36,
0x7a, 0xc7, 0x42, 0xcc, 0x12, 0x17, 0xab, 0x9a, 0x44, 0x98, 0x94, 0xcd, 0x69, 0x6b, 0x4c, 0x88, 0x40, 0x48, 0xdd, 0x53, 0x21, 0x66, 0x81, 0x8b, 0x55, 0x89, 0x23, 0x4c, 0xca, 0xc6, 0xb4, 0x35,
0xa5, 0x17, 0x72, 0x43, 0x4a, 0xdb, 0x63, 0x15, 0x92, 0xc9, 0x62, 0x97, 0x46, 0x11, 0x39, 0xa1, 0x26, 0x44, 0xe9, 0x85, 0x5c, 0x97, 0x92, 0xf6, 0x58, 0x85, 0x78, 0xb2, 0x78, 0x4c, 0xc3, 0x90,
0x9c, 0x79, 0xd5, 0x5a, 0x4d, 0xa2, 0x87, 0x49, 0x50, 0xfd, 0x4b, 0x82, 0xcd, 0x1c, 0x8b, 0x6f, 0x9c, 0x51, 0xce, 0xbc, 0x62, 0xad, 0xc5, 0xd1, 0xa3, 0x38, 0xa8, 0xfe, 0x25, 0xc1, 0x56, 0x86,
0x27, 0x7e, 0x4c, 0xd3, 0x71, 0x8a, 0x71, 0x48, 0xd7, 0x1c, 0x87, 0x7c, 0xf3, 0x71, 0x94, 0xfe, 0xc5, 0xb7, 0x13, 0x2f, 0xa2, 0xc9, 0x38, 0xc5, 0x38, 0xa4, 0x8f, 0x1c, 0x87, 0xbc, 0xfc, 0x38,
0xfb, 0x38, 0xca, 0xb9, 0x71, 0xfc, 0x2a, 0x03, 0x5a, 0x24, 0x82, 0x76, 0xe1, 0x4e, 0xd2, 0x2f, 0x0a, 0xff, 0x7d, 0x1c, 0xc5, 0xcc, 0x38, 0x7e, 0x95, 0x01, 0x2d, 0x12, 0x41, 0x7b, 0x70, 0x27,
0xb9, 0x70, 0xa9, 0x17, 0xe3, 0x63, 0x1a, 0xc5, 0x62, 0x20, 0xeb, 0xbc, 0xcf, 0x24, 0xde, 0x61, 0xee, 0x97, 0x5c, 0x8d, 0xa9, 0x1b, 0xe1, 0x53, 0x1a, 0x46, 0x62, 0x20, 0x1b, 0xbc, 0xcf, 0x38,
0x6c, 0x37, 0x81, 0x5f, 0x44, 0xfc, 0x3d, 0x4d, 0xa9, 0x2c, 0xb3, 0xe7, 0x7d, 0x4a, 0xd1, 0x13, 0xde, 0x66, 0x6c, 0xb7, 0x80, 0x5f, 0x44, 0xfc, 0x3d, 0x4d, 0xa8, 0xac, 0xb0, 0xe7, 0x03, 0x4a,
0x58, 0x4d, 0x53, 0x38, 0x24, 0x31, 0xe5, 0x7d, 0x97, 0xb8, 0xe0, 0x35, 0x81, 0xb1, 0x48, 0xcc, 0xd1, 0x13, 0x58, 0x4b, 0x52, 0x38, 0x20, 0x11, 0xe5, 0x7d, 0x17, 0xb8, 0xe0, 0x55, 0x81, 0xb1,
0x07, 0x26, 0xe6, 0xca, 0x74, 0x2b, 0x73, 0xdd, 0xaa, 0x49, 0x44, 0x73, 0x63, 0xb4, 0x0b, 0xeb, 0x48, 0xc4, 0x07, 0x26, 0xe6, 0xca, 0x74, 0x2b, 0x72, 0xdd, 0x2a, 0x71, 0x44, 0x1b, 0x47, 0x68,
0xae, 0xe3, 0x61, 0x7e, 0x14, 0x71, 0xfd, 0x89, 0x17, 0xf3, 0xa9, 0x94, 0xf9, 0x41, 0xab, 0xae, 0x0f, 0x36, 0xc6, 0x8e, 0x8b, 0xf9, 0x51, 0x64, 0xec, 0x4d, 0xdc, 0x88, 0x4f, 0xa5, 0xc8, 0x0f,
0xe3, 0x0d, 0x3e, 0x90, 0x40, 0xe3, 0x09, 0x8e, 0x25, 0xe7, 0x39, 0x6c, 0x25, 0x83, 0x25, 0xe7, 0x5a, 0x1b, 0x3b, 0x6e, 0xff, 0x3d, 0xf1, 0x35, 0x9e, 0xe0, 0x58, 0x72, 0x99, 0xc1, 0x96, 0x53,
0x19, 0xec, 0x36, 0xc0, 0x68, 0x1c, 0x9f, 0xe1, 0x63, 0x3a, 0x8e, 0x49, 0x63, 0x79, 0x7a, 0x19, 0x58, 0x72, 0x99, 0xc2, 0xee, 0x00, 0x0c, 0x47, 0xd1, 0x05, 0x3e, 0xa5, 0xa3, 0x88, 0xd4, 0x57,
0xaa, 0x2c, 0xda, 0x61, 0x41, 0xf5, 0xbb, 0xb9, 0x39, 0xdb, 0x34, 0x74, 0xa3, 0x74, 0xce, 0x45, 0xa6, 0x97, 0xa1, 0xc2, 0xa2, 0x6d, 0x16, 0x54, 0xbf, 0x9b, 0x9b, 0xb3, 0x4d, 0x83, 0x71, 0x98,
0x93, 0x91, 0x6e, 0x38, 0x19, 0xf5, 0x77, 0x69, 0x6e, 0x02, 0xbc, 0x04, 0x7a, 0xb2, 0xc8, 0x39, 0xcc, 0x39, 0x6f, 0x32, 0xd2, 0x92, 0x93, 0x51, 0x7f, 0x97, 0xe6, 0x26, 0xc0, 0x4b, 0xa0, 0x27,
0xb9, 0x4f, 0x73, 0x7c, 0x9f, 0x2c, 0xf2, 0x95, 0x05, 0x2e, 0xc7, 0xf5, 0x73, 0x58, 0x63, 0xe7, 0x8b, 0x9c, 0xe3, 0xfb, 0x34, 0xc7, 0xf7, 0xc9, 0x22, 0x5f, 0x59, 0xe0, 0x32, 0x5c, 0x3f, 0x87,
0x65, 0xf8, 0x96, 0xf8, 0x45, 0xa8, 0xbb, 0x8e, 0xd7, 0x4e, 0xe9, 0x72, 0x14, 0x39, 0xcf, 0xa2, 0x75, 0x76, 0x5e, 0x8a, 0x6f, 0x81, 0x5f, 0x84, 0xda, 0xd8, 0x71, 0x5b, 0x09, 0x5d, 0x8e, 0x22,
0xca, 0x02, 0x45, 0xce, 0xa7, 0x28, 0xf5, 0x1f, 0x09, 0xee, 0xce, 0x5a, 0x36, 0xbc, 0x54, 0x8f, 0x97, 0x69, 0x54, 0x51, 0xa0, 0xc8, 0xe5, 0x14, 0xa5, 0xfe, 0x23, 0xc1, 0xdd, 0x59, 0xcb, 0x86,
0xfc, 0xde, 0x49, 0xf3, 0x7b, 0x77, 0x43, 0x0b, 0x9b, 0xf7, 0x83, 0xf2, 0xa2, 0x1f, 0x6c, 0xc2, 0x9b, 0xe8, 0x91, 0xdd, 0x3b, 0x69, 0x7e, 0xef, 0x96, 0xb4, 0xb0, 0x79, 0x3f, 0x28, 0x2e, 0xfa,
0xca, 0x98, 0x44, 0x31, 0x3e, 0xf5, 0x03, 0x7e, 0x23, 0xea, 0xd6, 0x32, 0x7b, 0x3e, 0xf0, 0x83, 0xc1, 0x16, 0xac, 0x8e, 0x48, 0x18, 0xe1, 0x73, 0xcf, 0xe7, 0x37, 0xa2, 0x66, 0xad, 0xb0, 0xe7,
0xc2, 0xd9, 0x54, 0x6e, 0x3a, 0x9b, 0xf3, 0xac, 0x5f, 0x33, 0x9e, 0x33, 0xab, 0xfa, 0x98, 0x5f, 0x43, 0xcf, 0xcf, 0x9d, 0x4d, 0x79, 0xd9, 0xd9, 0x5c, 0xa6, 0xfd, 0x9a, 0xf1, 0x9c, 0x59, 0xd5,
0xcf, 0x16, 0x4e, 0xce, 0x2e, 0x5c, 0x81, 0xc1, 0x94, 0x8a, 0x0c, 0xe6, 0x3d, 0x34, 0xb2, 0x95, 0x87, 0xfc, 0x7a, 0xb6, 0x70, 0x72, 0x7a, 0xe1, 0x72, 0x0c, 0xa6, 0x90, 0x67, 0x30, 0xef, 0xa0,
0x3f, 0x62, 0x2f, 0x45, 0x64, 0xe5, 0x9b, 0x92, 0xfd, 0x3b, 0xe7, 0x69, 0xd3, 0x9a, 0x82, 0x72, 0x9e, 0xae, 0xfc, 0x01, 0x7b, 0xc9, 0x23, 0x2b, 0x2f, 0x4b, 0xf6, 0xef, 0x8c, 0xa7, 0x4d, 0x6b,
0x76, 0xcb, 0xa5, 0x8f, 0x6c, 0xb9, 0x5c, 0xbc, 0xe5, 0x05, 0x6b, 0x5c, 0xbe, 0xc1, 0x1a, 0x2f, 0x0a, 0xca, 0xe9, 0x2d, 0x97, 0x3e, 0xb0, 0xe5, 0x72, 0xfe, 0x96, 0xe7, 0xac, 0x71, 0x71, 0x89,
0x5d, 0xb6, 0xc6, 0x5b, 0xb9, 0x35, 0x4e, 0x3e, 0x37, 0x99, 0x15, 0xc6, 0x79, 0x29, 0x6f, 0x7f, 0x35, 0x2e, 0x5d, 0xb7, 0xc6, 0xdb, 0x99, 0x35, 0x8e, 0x3f, 0x37, 0xa9, 0x15, 0xc6, 0x59, 0x29,
0x83, 0x47, 0x70, 0x67, 0xa1, 0xc0, 0x6d, 0xef, 0xaf, 0xfa, 0x8b, 0x04, 0xad, 0x9c, 0x4d, 0xf4, 0x6f, 0x7f, 0x83, 0x87, 0x70, 0x67, 0xa1, 0xc0, 0x6d, 0xef, 0xaf, 0xfa, 0xb3, 0x04, 0xcd, 0x8c,
0x27, 0xd1, 0x69, 0x3f, 0xa4, 0x8e, 0x4b, 0x4e, 0xe8, 0x6d, 0xd2, 0x41, 0x4d, 0x58, 0x09, 0xc4, 0x4d, 0xf4, 0x26, 0xe1, 0x79, 0x2f, 0xa0, 0xce, 0x98, 0x9c, 0xd1, 0xdb, 0xa4, 0x83, 0x1a, 0xb0,
0xb9, 0xe9, 0x96, 0xa6, 0xcf, 0xea, 0x67, 0xb0, 0x7d, 0x45, 0x13, 0xc9, 0x55, 0x51, 0x7f, 0x84, 0xea, 0x8b, 0x73, 0x93, 0x2d, 0x4d, 0x9e, 0xd5, 0xcf, 0x60, 0xe7, 0x86, 0x26, 0xe2, 0xab, 0xa2,
0x07, 0x83, 0xc9, 0x51, 0x34, 0x0a, 0x9d, 0x23, 0x3a, 0x0c, 0x8e, 0x49, 0x4c, 0x6f, 0x55, 0xef, 0xfe, 0x08, 0x0f, 0xfa, 0x93, 0x93, 0x70, 0x18, 0x38, 0x27, 0x74, 0xe0, 0x9f, 0x92, 0x88, 0xde,
0x2b, 0x7d, 0x44, 0x8d, 0xe1, 0xd3, 0x69, 0x71, 0xd1, 0xe4, 0xb4, 0x87, 0xd9, 0xf6, 0xc6, 0x8e, 0xaa, 0xde, 0x37, 0xfa, 0x88, 0x1a, 0xc1, 0xa7, 0xd3, 0xe2, 0xa2, 0xc9, 0x69, 0x0f, 0xb3, 0xed,
0x4b, 0xa3, 0x98, 0xb8, 0x01, 0xf6, 0x22, 0x71, 0x9d, 0x6b, 0xd3, 0x98, 0x19, 0xa1, 0x3d, 0x58, 0x8d, 0x9c, 0x31, 0x0d, 0x23, 0x32, 0xf6, 0xb1, 0x1b, 0x8a, 0xeb, 0x5c, 0x9d, 0xc6, 0xcc, 0x10,
0x8a, 0xe2, 0xf4, 0x2a, 0x67, 0x9b, 0x4b, 0xd8, 0xb3, 0xb9, 0x0c, 0x58, 0xde, 0x4a, 0x60, 0x6a, 0xed, 0x43, 0x29, 0x8c, 0x92, 0xab, 0x9c, 0x6e, 0x2e, 0x66, 0xcf, 0xe6, 0xd2, 0x67, 0x79, 0x2b,
0x04, 0x8f, 0x73, 0x55, 0x0d, 0xef, 0xff, 0x2f, 0xba, 0xfb, 0xb3, 0x04, 0xeb, 0x73, 0x62, 0x21, 0x86, 0xa9, 0x21, 0x3c, 0xce, 0x54, 0x35, 0xdc, 0xff, 0xbf, 0xe8, 0xde, 0x2f, 0x12, 0x6c, 0xcc,
0x80, 0x4a, 0x57, 0x7f, 0xa9, 0xb5, 0xdf, 0x29, 0x9f, 0x20, 0x04, 0x6b, 0x87, 0xc3, 0xae, 0x6d, 0x89, 0x85, 0x00, 0xca, 0x1d, 0xfd, 0xa5, 0xd6, 0x7a, 0xab, 0x7c, 0x82, 0x10, 0xac, 0x1f, 0x0d,
0xe0, 0x6e, 0xaf, 0xd7, 0xc7, 0xbd, 0xa1, 0xad, 0x48, 0x68, 0x13, 0xee, 0x9b, 0x9a, 0x6d, 0xbc, 0x3a, 0xb6, 0x81, 0x3b, 0xdd, 0x6e, 0x0f, 0x77, 0x07, 0xb6, 0x22, 0xa1, 0x2d, 0xb8, 0x6f, 0x6a,
0xd6, 0xf1, 0x40, 0x7f, 0xf9, 0xc6, 0xb0, 0x93, 0x9c, 0x61, 0x2a, 0x32, 0x6a, 0xc2, 0x46, 0xdf, 0xb6, 0x71, 0xac, 0xe3, 0xbe, 0xfe, 0xf2, 0xb5, 0x61, 0xc7, 0x39, 0xc3, 0x54, 0x64, 0xd4, 0x80,
0xd2, 0x8d, 0x43, 0xed, 0xa5, 0x8e, 0xfb, 0xc3, 0xc1, 0xc1, 0xec, 0xb5, 0x12, 0x6a, 0xc0, 0xbd, 0xcd, 0x9e, 0xa5, 0x1b, 0x47, 0xda, 0x4b, 0x1d, 0xf7, 0x06, 0xfd, 0xc3, 0xd9, 0x6b, 0x05, 0x54,
0xe1, 0x40, 0xb7, 0xb0, 0xfe, 0xb6, 0x6f, 0x58, 0xef, 0x66, 0x99, 0xf2, 0xee, 0x1f, 0x32, 0xac, 0x87, 0x7b, 0x83, 0xbe, 0x6e, 0x61, 0xfd, 0x4d, 0xcf, 0xb0, 0xde, 0xce, 0x32, 0x45, 0x54, 0x85,
0xcf, 0xf5, 0x87, 0x56, 0xa1, 0x6a, 0x98, 0x86, 0x6d, 0x68, 0xb6, 0xde, 0x49, 0xfa, 0x38, 0xb0, 0x95, 0x43, 0xbb, 0xd3, 0xc2, 0xc7, 0xcf, 0x95, 0xd2, 0xde, 0x1f, 0x32, 0x6c, 0xcc, 0x35, 0x8b,
0xbb, 0x6d, 0xdc, 0x1f, 0xbe, 0xe8, 0x1a, 0x83, 0x03, 0xbd, 0xa3, 0x48, 0xa8, 0x06, 0xcb, 0x83, 0xd6, 0xa0, 0x62, 0x98, 0x86, 0x6d, 0x68, 0xb6, 0xde, 0x8e, 0x9b, 0xe2, 0xf8, 0xde, 0xe0, 0x45,
0x61, 0xbb, 0xad, 0x0f, 0x06, 0x8a, 0xcc, 0x00, 0xfb, 0x9a, 0xd1, 0xd5, 0x3b, 0x78, 0x68, 0xbe, 0xc7, 0xe8, 0x1f, 0xea, 0x6d, 0x45, 0x62, 0x67, 0xf4, 0x07, 0xad, 0x96, 0xde, 0xef, 0x2b, 0x32,
0x32, 0x7b, 0x6f, 0x4c, 0xa5, 0x94, 0x89, 0x99, 0x3d, 0xcc, 0x5e, 0x57, 0xca, 0xe8, 0x31, 0x34, 0x03, 0x1c, 0x68, 0x46, 0x47, 0x6f, 0xe3, 0x81, 0xf9, 0xca, 0xec, 0xbe, 0x36, 0x95, 0x42, 0x2a,
0x45, 0xcc, 0x30, 0x5f, 0x6b, 0x5d, 0xa3, 0xc3, 0x13, 0x58, 0x3b, 0xec, 0x0d, 0x4d, 0x5b, 0x59, 0x66, 0x76, 0x31, 0x7b, 0x5d, 0x29, 0xa2, 0xc7, 0xd0, 0x10, 0x31, 0xc3, 0x3c, 0xd6, 0x3a, 0x46,
0x42, 0x8f, 0xa0, 0x21, 0xf2, 0xbd, 0xfd, 0x7d, 0xdc, 0x3e, 0xd0, 0x0c, 0x13, 0xdb, 0xc6, 0xa1, 0x9b, 0x27, 0xb0, 0x76, 0xd4, 0x1d, 0x98, 0xb6, 0x52, 0x42, 0x8f, 0xa0, 0x2e, 0xf2, 0xdd, 0x83,
0xce, 0x3a, 0xad, 0x64, 0x4e, 0x4c, 0x63, 0xcb, 0x8c, 0x97, 0x88, 0x0d, 0xde, 0x68, 0x7d, 0xdc, 0x03, 0xdc, 0x3a, 0xd4, 0x0c, 0x13, 0xdb, 0xc6, 0x91, 0xce, 0xda, 0x2e, 0xa7, 0x4e, 0x4c, 0x62,
0xd1, 0xb5, 0x4e, 0xd7, 0x30, 0x75, 0x65, 0x05, 0x3d, 0x84, 0x07, 0x22, 0x33, 0xeb, 0xbd, 0xad, 0x2b, 0x8c, 0xa4, 0x88, 0xf5, 0x5f, 0x6b, 0x3d, 0xdc, 0xd6, 0xb5, 0x76, 0xc7, 0x30, 0x75, 0x65,
0xd9, 0x46, 0xcf, 0x54, 0xaa, 0xe8, 0x3e, 0xdc, 0x11, 0x67, 0x64, 0x48, 0x01, 0xda, 0x00, 0x34, 0x15, 0x3d, 0x84, 0x07, 0x22, 0x33, 0xeb, 0xbd, 0xa5, 0xd9, 0x46, 0xd7, 0x54, 0x2a, 0xe8, 0x3e,
0x34, 0xf5, 0xb7, 0x7d, 0xbd, 0x6d, 0xeb, 0x1d, 0xcc, 0x5e, 0x1f, 0x5a, 0xba, 0x52, 0x9b, 0x0a, 0xdc, 0x11, 0x67, 0xa4, 0x48, 0x01, 0xda, 0x04, 0x34, 0x30, 0xf5, 0x37, 0x3d, 0xbd, 0x65, 0xeb,
0xd0, 0xee, 0x99, 0xfb, 0x86, 0x75, 0xa8, 0x77, 0x94, 0xfa, 0xf3, 0xdf, 0x2a, 0x00, 0x5c, 0x31, 0x6d, 0xcc, 0x5e, 0x1f, 0x58, 0xba, 0x52, 0x9d, 0x0a, 0xd0, 0xea, 0x9a, 0x07, 0x86, 0x75, 0xa4,
0xae, 0x1d, 0xea, 0x41, 0x3d, 0xf7, 0xf9, 0x57, 0xe7, 0x86, 0x5f, 0xf0, 0xf7, 0xa3, 0xf9, 0xf0, 0xb7, 0x95, 0xda, 0xf3, 0xdf, 0xca, 0x00, 0x5c, 0x31, 0xae, 0x1d, 0xea, 0x42, 0x2d, 0xf3, 0x5f,
0x0a, 0x0c, 0xea, 0xc1, 0x9a, 0x49, 0x3f, 0x88, 0x10, 0x2b, 0x84, 0xb6, 0x8a, 0xe1, 0xe9, 0x69, 0x40, 0x9d, 0xbb, 0x09, 0x39, 0xff, 0x45, 0x1a, 0x0f, 0x6f, 0xc0, 0xa0, 0x2e, 0xac, 0x9b, 0xf4,
0x8f, 0x2f, 0x4b, 0x8b, 0x0b, 0x3c, 0x86, 0xbb, 0x05, 0x4b, 0x8f, 0xbe, 0x2a, 0x7e, 0xad, 0xc0, 0xbd, 0x08, 0xb1, 0x42, 0x68, 0x3b, 0x1f, 0x9e, 0x9c, 0xf6, 0xf8, 0xba, 0xb4, 0xb8, 0xcd, 0x23,
0x9d, 0x9a, 0xbb, 0xd7, 0x81, 0x8a, 0x6a, 0x33, 0x3d, 0x92, 0x3f, 0xa4, 0x97, 0xe8, 0x91, 0xfd, 0xb8, 0x9b, 0xe3, 0x00, 0xe8, 0xab, 0xfc, 0xd7, 0x72, 0xac, 0xaa, 0xb1, 0xf7, 0x31, 0x50, 0x51,
0x2e, 0x5e, 0xa6, 0x47, 0x72, 0x40, 0x17, 0x6a, 0x59, 0x7b, 0xde, 0x2e, 0xc0, 0xe6, 0xbf, 0x0d, 0x6d, 0xa6, 0x47, 0xfc, 0xef, 0xf4, 0x1a, 0x3d, 0xd2, 0x1f, 0xc9, 0xeb, 0xf4, 0x88, 0x0f, 0xe8,
0xcd, 0xe6, 0xe5, 0x10, 0xd4, 0x85, 0x55, 0xa1, 0xae, 0xc1, 0xcd, 0x1c, 0x3d, 0x2a, 0x04, 0xa7, 0x40, 0x35, 0xed, 0xd5, 0x3b, 0x39, 0xd8, 0xec, 0x87, 0xa2, 0xd1, 0xb8, 0x1e, 0x82, 0x3a, 0xb0,
0x47, 0x6d, 0x5d, 0x92, 0x15, 0x64, 0xed, 0xb4, 0xb7, 0xa4, 0xd5, 0xe2, 0xde, 0x72, 0x54, 0xd5, 0x26, 0xd4, 0x35, 0xb8, 0xb3, 0xa3, 0x47, 0xb9, 0xe0, 0xe4, 0xa8, 0xed, 0x6b, 0xb2, 0x82, 0xac,
0xab, 0x20, 0xe2, 0xd4, 0x93, 0x8c, 0x0d, 0xe7, 0x9d, 0x10, 0xb5, 0x66, 0xaf, 0x17, 0x1b, 0x75, 0x9d, 0xf4, 0x16, 0xb7, 0x9a, 0xdf, 0x5b, 0x86, 0xaa, 0x7a, 0x13, 0x44, 0x9c, 0x7a, 0x96, 0xf2,
0x73, 0x67, 0x11, 0x51, 0xec, 0xa6, 0xcf, 0x24, 0x44, 0x61, 0xa3, 0xd8, 0xfc, 0xae, 0x51, 0xe7, 0xe4, 0xac, 0x2d, 0xa2, 0xe6, 0xec, 0xf5, 0x7c, 0xd7, 0x6e, 0xec, 0x2e, 0x22, 0xf2, 0xad, 0xf5,
0xcb, 0xe2, 0x3a, 0x0b, 0xfe, 0xf9, 0x4c, 0x3a, 0xaa, 0xf0, 0xef, 0xc0, 0xd7, 0xff, 0x06, 0x00, 0x99, 0x84, 0x28, 0x6c, 0xe6, 0x3b, 0xe1, 0x47, 0xd4, 0xf9, 0x32, 0xbf, 0xce, 0x82, 0x99, 0x3e,
0x00, 0xff, 0xff, 0x95, 0x8b, 0xab, 0x97, 0x7b, 0x0f, 0x00, 0x00, 0x93, 0x4e, 0xca, 0xfc, 0xa3, 0xf0, 0xf5, 0xbf, 0x01, 0x00, 0x00, 0xff, 0xff, 0xbf, 0xd7, 0x01,
0x1e, 0x88, 0x0f, 0x00, 0x00,
} }
// Reference imports to suppress errors if they are not otherwise used. // Reference imports to suppress errors if they are not otherwise used.

@ -57,6 +57,9 @@ enum ProtocolVersion {
// The client will propose a cltv expiry height for loop out. // The client will propose a cltv expiry height for loop out.
USER_EXPIRY_LOOP_OUT = 4; USER_EXPIRY_LOOP_OUT = 4;
// The client will use the new v2 HTLC scripts.
HTLC_V2 = 5;
} }
message ServerLoopOutRequest { message ServerLoopOutRequest {

@ -48,10 +48,30 @@ func newSwapKit(hash lntypes.Hash, swapType swap.Type, cfg *swapConfig,
} }
} }
// GetHtlcScriptVersion returns the correct HTLC script version for the passed
// protocol version.
func GetHtlcScriptVersion(
protocolVersion loopdb.ProtocolVersion) swap.ScriptVersion {
if protocolVersion != loopdb.ProtocolVersionUnrecorded &&
protocolVersion >= loopdb.ProtocolVersionHtlcV2 {
// Use HTLC v2 script only if we know the swap was initiated
// with a client that supports HTLC v2. Unrecorded protocol
// version implies that there was no protocol version stored
// along side a serialized swap that we're resuming in which
// case the swap was initiated with HTLC v1 script.
return swap.HtlcV2
}
return swap.HtlcV1
}
// getHtlc composes and returns the on-chain swap script. // getHtlc composes and returns the on-chain swap script.
func (s *swapKit) getHtlc(outputType swap.HtlcOutputType) (*swap.Htlc, error) { func (s *swapKit) getHtlc(outputType swap.HtlcOutputType) (*swap.Htlc, error) {
return swap.NewHtlc( return swap.NewHtlc(
swap.HtlcV1, s.contract.CltvExpiry, s.contract.SenderKey, GetHtlcScriptVersion(s.contract.ProtocolVersion),
s.contract.CltvExpiry, s.contract.SenderKey,
s.contract.ReceiverKey, s.hash, outputType, s.contract.ReceiverKey, s.hash, outputType,
s.swapConfig.lnd.ChainParams, s.swapConfig.lnd.ChainParams,
) )

Loading…
Cancel
Save