mirror of
https://github.com/lightningnetwork/lnd.git
synced 2025-02-23 14:40:30 +01:00
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.
221 lines
6.1 KiB
Go
221 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
|
|
}
|