7569cca19b
To avoid code changing underneath the static migrations, we copy the lnwire dependency in its current form into the migration directory. Ideally the migrations doesn't depend on any code that might change, this takes us a step closer.
222 lines
6.1 KiB
Go
222 lines
6.1 KiB
Go
package migration_01_to_11
|
|
|
|
import (
|
|
"bytes"
|
|
"io/ioutil"
|
|
"math/rand"
|
|
"os"
|
|
|
|
"github.com/btcsuite/btcd/btcec"
|
|
"github.com/btcsuite/btcd/chaincfg/chainhash"
|
|
"github.com/btcsuite/btcd/wire"
|
|
"github.com/btcsuite/btcutil"
|
|
_ "github.com/btcsuite/btcwallet/walletdb/bdb"
|
|
lnwire "github.com/lightningnetwork/lnd/channeldb/migration/lnwire21"
|
|
"github.com/lightningnetwork/lnd/keychain"
|
|
"github.com/lightningnetwork/lnd/shachain"
|
|
)
|
|
|
|
var (
|
|
key = [chainhash.HashSize]byte{
|
|
0x81, 0xb6, 0x37, 0xd8, 0xfc, 0xd2, 0xc6, 0xda,
|
|
0x68, 0x59, 0xe6, 0x96, 0x31, 0x13, 0xa1, 0x17,
|
|
0xd, 0xe7, 0x93, 0xe4, 0xb7, 0x25, 0xb8, 0x4d,
|
|
0x1e, 0xb, 0x4c, 0xf9, 0x9e, 0xc5, 0x8c, 0xe9,
|
|
}
|
|
rev = [chainhash.HashSize]byte{
|
|
0x51, 0xb6, 0x37, 0xd8, 0xfc, 0xd2, 0xc6, 0xda,
|
|
0x48, 0x59, 0xe6, 0x96, 0x31, 0x13, 0xa1, 0x17,
|
|
0x2d, 0xe7, 0x93, 0xe4,
|
|
}
|
|
testTx = &wire.MsgTx{
|
|
Version: 1,
|
|
TxIn: []*wire.TxIn{
|
|
{
|
|
PreviousOutPoint: wire.OutPoint{
|
|
Hash: chainhash.Hash{},
|
|
Index: 0xffffffff,
|
|
},
|
|
SignatureScript: []byte{0x04, 0x31, 0xdc, 0x00, 0x1b, 0x01, 0x62},
|
|
Sequence: 0xffffffff,
|
|
},
|
|
},
|
|
TxOut: []*wire.TxOut{
|
|
{
|
|
Value: 5000000000,
|
|
PkScript: []byte{
|
|
0x41, // OP_DATA_65
|
|
0x04, 0xd6, 0x4b, 0xdf, 0xd0, 0x9e, 0xb1, 0xc5,
|
|
0xfe, 0x29, 0x5a, 0xbd, 0xeb, 0x1d, 0xca, 0x42,
|
|
0x81, 0xbe, 0x98, 0x8e, 0x2d, 0xa0, 0xb6, 0xc1,
|
|
0xc6, 0xa5, 0x9d, 0xc2, 0x26, 0xc2, 0x86, 0x24,
|
|
0xe1, 0x81, 0x75, 0xe8, 0x51, 0xc9, 0x6b, 0x97,
|
|
0x3d, 0x81, 0xb0, 0x1c, 0xc3, 0x1f, 0x04, 0x78,
|
|
0x34, 0xbc, 0x06, 0xd6, 0xd6, 0xed, 0xf6, 0x20,
|
|
0xd1, 0x84, 0x24, 0x1a, 0x6a, 0xed, 0x8b, 0x63,
|
|
0xa6, // 65-byte signature
|
|
0xac, // OP_CHECKSIG
|
|
},
|
|
},
|
|
},
|
|
LockTime: 5,
|
|
}
|
|
privKey, pubKey = btcec.PrivKeyFromBytes(btcec.S256(), key[:])
|
|
)
|
|
|
|
// makeTestDB creates a new instance of the ChannelDB for testing purposes. A
|
|
// callback which cleans up the created temporary directories is also returned
|
|
// and intended to be executed after the test completes.
|
|
func makeTestDB() (*DB, func(), error) {
|
|
// First, create a temporary directory to be used for the duration of
|
|
// this test.
|
|
tempDirName, err := ioutil.TempDir("", "channeldb")
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
|
|
// Next, create channeldb for the first time.
|
|
cdb, err := Open(tempDirName)
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
|
|
cleanUp := func() {
|
|
cdb.Close()
|
|
os.RemoveAll(tempDirName)
|
|
}
|
|
|
|
return cdb, cleanUp, nil
|
|
}
|
|
|
|
func createTestChannelState(cdb *DB) (*OpenChannel, error) {
|
|
// Simulate 1000 channel updates.
|
|
producer, err := shachain.NewRevocationProducerFromBytes(key[:])
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
store := shachain.NewRevocationStore()
|
|
for i := 0; i < 1; i++ {
|
|
preImage, err := producer.AtIndex(uint64(i))
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
if err := store.AddNextEntry(preImage); err != nil {
|
|
return nil, err
|
|
}
|
|
}
|
|
|
|
localCfg := ChannelConfig{
|
|
ChannelConstraints: ChannelConstraints{
|
|
DustLimit: btcutil.Amount(rand.Int63()),
|
|
MaxPendingAmount: lnwire.MilliSatoshi(rand.Int63()),
|
|
ChanReserve: btcutil.Amount(rand.Int63()),
|
|
MinHTLC: lnwire.MilliSatoshi(rand.Int63()),
|
|
MaxAcceptedHtlcs: uint16(rand.Int31()),
|
|
CsvDelay: uint16(rand.Int31()),
|
|
},
|
|
MultiSigKey: keychain.KeyDescriptor{
|
|
PubKey: privKey.PubKey(),
|
|
},
|
|
RevocationBasePoint: keychain.KeyDescriptor{
|
|
PubKey: privKey.PubKey(),
|
|
},
|
|
PaymentBasePoint: keychain.KeyDescriptor{
|
|
PubKey: privKey.PubKey(),
|
|
},
|
|
DelayBasePoint: keychain.KeyDescriptor{
|
|
PubKey: privKey.PubKey(),
|
|
},
|
|
HtlcBasePoint: keychain.KeyDescriptor{
|
|
PubKey: privKey.PubKey(),
|
|
},
|
|
}
|
|
remoteCfg := ChannelConfig{
|
|
ChannelConstraints: ChannelConstraints{
|
|
DustLimit: btcutil.Amount(rand.Int63()),
|
|
MaxPendingAmount: lnwire.MilliSatoshi(rand.Int63()),
|
|
ChanReserve: btcutil.Amount(rand.Int63()),
|
|
MinHTLC: lnwire.MilliSatoshi(rand.Int63()),
|
|
MaxAcceptedHtlcs: uint16(rand.Int31()),
|
|
CsvDelay: uint16(rand.Int31()),
|
|
},
|
|
MultiSigKey: keychain.KeyDescriptor{
|
|
PubKey: privKey.PubKey(),
|
|
KeyLocator: keychain.KeyLocator{
|
|
Family: keychain.KeyFamilyMultiSig,
|
|
Index: 9,
|
|
},
|
|
},
|
|
RevocationBasePoint: keychain.KeyDescriptor{
|
|
PubKey: privKey.PubKey(),
|
|
KeyLocator: keychain.KeyLocator{
|
|
Family: keychain.KeyFamilyRevocationBase,
|
|
Index: 8,
|
|
},
|
|
},
|
|
PaymentBasePoint: keychain.KeyDescriptor{
|
|
PubKey: privKey.PubKey(),
|
|
KeyLocator: keychain.KeyLocator{
|
|
Family: keychain.KeyFamilyPaymentBase,
|
|
Index: 7,
|
|
},
|
|
},
|
|
DelayBasePoint: keychain.KeyDescriptor{
|
|
PubKey: privKey.PubKey(),
|
|
KeyLocator: keychain.KeyLocator{
|
|
Family: keychain.KeyFamilyDelayBase,
|
|
Index: 6,
|
|
},
|
|
},
|
|
HtlcBasePoint: keychain.KeyDescriptor{
|
|
PubKey: privKey.PubKey(),
|
|
KeyLocator: keychain.KeyLocator{
|
|
Family: keychain.KeyFamilyHtlcBase,
|
|
Index: 5,
|
|
},
|
|
},
|
|
}
|
|
|
|
chanID := lnwire.NewShortChanIDFromInt(uint64(rand.Int63()))
|
|
|
|
return &OpenChannel{
|
|
ChanType: SingleFunder,
|
|
ChainHash: key,
|
|
FundingOutpoint: wire.OutPoint{Hash: key, Index: rand.Uint32()},
|
|
ShortChannelID: chanID,
|
|
IsInitiator: true,
|
|
IsPending: true,
|
|
IdentityPub: pubKey,
|
|
Capacity: btcutil.Amount(10000),
|
|
LocalChanCfg: localCfg,
|
|
RemoteChanCfg: remoteCfg,
|
|
TotalMSatSent: 8,
|
|
TotalMSatReceived: 2,
|
|
LocalCommitment: ChannelCommitment{
|
|
CommitHeight: 0,
|
|
LocalBalance: lnwire.MilliSatoshi(9000),
|
|
RemoteBalance: lnwire.MilliSatoshi(3000),
|
|
CommitFee: btcutil.Amount(rand.Int63()),
|
|
FeePerKw: btcutil.Amount(5000),
|
|
CommitTx: testTx,
|
|
CommitSig: bytes.Repeat([]byte{1}, 71),
|
|
},
|
|
RemoteCommitment: ChannelCommitment{
|
|
CommitHeight: 0,
|
|
LocalBalance: lnwire.MilliSatoshi(3000),
|
|
RemoteBalance: lnwire.MilliSatoshi(9000),
|
|
CommitFee: btcutil.Amount(rand.Int63()),
|
|
FeePerKw: btcutil.Amount(5000),
|
|
CommitTx: testTx,
|
|
CommitSig: bytes.Repeat([]byte{1}, 71),
|
|
},
|
|
NumConfsRequired: 4,
|
|
RemoteCurrentRevocation: privKey.PubKey(),
|
|
RemoteNextRevocation: privKey.PubKey(),
|
|
RevocationProducer: producer,
|
|
RevocationStore: store,
|
|
Db: cdb,
|
|
FundingTxn: testTx,
|
|
}, nil
|
|
}
|