mirror of
https://github.com/lightninglabs/pool.git
synced 2026-08-15 12:50:29 +02:00
A sidecar ticket will always use the minimum version needed to encode all the relavant information for that offer. In that way the tickets from a provider with a newer version can be redeemed by recipeients using older versions as long as the ticket does not encode new functionalities.
101 lines
2.5 KiB
Go
101 lines
2.5 KiB
Go
package sidecar
|
|
|
|
import (
|
|
"bytes"
|
|
"encoding/hex"
|
|
"testing"
|
|
|
|
"github.com/btcsuite/btcd/btcec/v2"
|
|
"github.com/lightninglabs/pool/internal/test"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
var (
|
|
testPubKeyRaw, _ = hex.DecodeString(
|
|
"02d52e6e60001ed587b784bf3f18dc2905d83b2f36e496263f283b1a7589" +
|
|
"2879c7",
|
|
)
|
|
testPubKeyRaw2, _ = hex.DecodeString(
|
|
"0319d616f6a373b24fe5d45fb2964bea4054196820f41ef1a093a9c8e234" +
|
|
"e57cf7",
|
|
)
|
|
testPubKey, _ = btcec.ParsePubKey(testPubKeyRaw)
|
|
testPubKey2, _ = btcec.ParsePubKey(testPubKeyRaw2)
|
|
)
|
|
|
|
func TestSerializeTicket(t *testing.T) {
|
|
var buf bytes.Buffer
|
|
|
|
// Test serialization of nil struct members.
|
|
ticketMinimal := &Ticket{
|
|
ID: [8]byte{7, 6, 5, 4, 3, 2, 1, 0},
|
|
Version: Version(99),
|
|
State: StateRegistered,
|
|
}
|
|
err := SerializeTicket(&buf, ticketMinimal)
|
|
require.NoError(t, err)
|
|
|
|
deserializedTicket, err := DeserializeTicket(
|
|
bytes.NewReader(buf.Bytes()),
|
|
)
|
|
require.NoError(t, err)
|
|
require.Equal(t, ticketMinimal, deserializedTicket)
|
|
|
|
buf.Reset()
|
|
|
|
// Test serialization of nil sub struct members.
|
|
ticketEmptySubStructs := &Ticket{
|
|
ID: [8]byte{7, 6, 5, 4, 3, 2, 1, 0},
|
|
Version: Version(99),
|
|
State: StateRegistered,
|
|
Offer: Offer{},
|
|
Recipient: &Recipient{},
|
|
Order: &Order{},
|
|
Execution: &Execution{},
|
|
}
|
|
err = SerializeTicket(&buf, ticketEmptySubStructs)
|
|
require.NoError(t, err)
|
|
|
|
deserializedTicket, err = DeserializeTicket(
|
|
bytes.NewReader(buf.Bytes()),
|
|
)
|
|
require.NoError(t, err)
|
|
require.Equal(t, ticketEmptySubStructs, deserializedTicket)
|
|
|
|
buf.Reset()
|
|
|
|
// Test with all struct members set.
|
|
ticketMaximal := &Ticket{
|
|
ID: [8]byte{7, 6, 5, 4, 3, 2, 1, 0},
|
|
Version: Version(99),
|
|
State: StateRegistered,
|
|
Offer: Offer{
|
|
Capacity: 777,
|
|
PushAmt: 888,
|
|
SignPubKey: testPubKey,
|
|
SigOfferDigest: test.NewSignatureFromInt(22, 55),
|
|
Auto: true,
|
|
UnannouncedChannel: true,
|
|
ZeroConfChannel: true,
|
|
},
|
|
Recipient: &Recipient{
|
|
NodePubKey: testPubKey,
|
|
MultiSigPubKey: testPubKey2,
|
|
},
|
|
Order: &Order{
|
|
BidNonce: [32]byte{11, 22, 33, 44},
|
|
SigOrderDigest: test.NewSignatureFromInt(99, 33),
|
|
},
|
|
Execution: &Execution{
|
|
PendingChannelID: [32]byte{99, 88, 77},
|
|
},
|
|
}
|
|
err = SerializeTicket(&buf, ticketMaximal)
|
|
require.NoError(t, err)
|
|
|
|
deserializedTicket, err = DeserializeTicket(
|
|
bytes.NewReader(buf.Bytes()),
|
|
)
|
|
require.NoError(t, err)
|
|
require.Equal(t, ticketMaximal, deserializedTicket)
|
|
}
|