|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
|
|
|
"encoding/hex"
|
|
|
|
"testing"
|
|
|
|
|
|
|
|
"github.com/btcsuite/btcd/btcec/v2"
|
|
|
|
"github.com/btcsuite/btcd/btcutil/hdkeychain"
|
|
|
|
"github.com/btcsuite/btcd/chaincfg"
|
|
|
|
"github.com/lightninglabs/chantools/lnd"
|
|
|
|
"github.com/lightninglabs/pool/poolscript"
|
|
|
|
"github.com/lightningnetwork/lnd/keychain"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
|
|
)
|
|
|
|
|
|
|
|
type testAccount struct {
|
|
|
|
name string
|
|
|
|
rootKey string
|
|
|
|
pkScript string
|
|
|
|
minExpiry uint32
|
|
|
|
}
|
|
|
|
|
|
|
|
var (
|
|
|
|
auctioneerKeyBytes, _ = hex.DecodeString(
|
|
|
|
"0353c7c0d3258c4957331b86af335568232e9af8df61330cee3a7488b61c" +
|
|
|
|
"f6c298",
|
|
|
|
)
|
|
|
|
auctioneerKey, _ = btcec.ParsePubKey(auctioneerKeyBytes)
|
|
|
|
|
|
|
|
testAccounts = []testAccount{{
|
|
|
|
name: "regtest taproot (v1)",
|
|
|
|
rootKey: "tprv8ZgxMBicQKsPdkvdLKn7HG2hhZ9Ewsgze1Yj3KDEcvb6H5U" +
|
|
|
|
"519UtfoPPP3hYVgFTn7hXmvE41qaugbaYiZN8wM1HoQHhs3AzSwg" +
|
|
|
|
"xGYdD8gM",
|
|
|
|
pkScript: "512001e8d17b83358476534aae4eae2062ea9025dfd858cd81" +
|
|
|
|
"7bac5f439969da92a6",
|
|
|
|
minExpiry: 1600,
|
|
|
|
}, {
|
|
|
|
name: "regtest taproot (v2)",
|
|
|
|
rootKey: "tprv8ZgxMBicQKsPdkvdLKn7HG2hhZ9Ewsgze1Yj3KDEcvb6H5U" +
|
|
|
|
"519UtfoPPP3hYVgFTn7hXmvE41qaugbaYiZN8wM1HoQHhs3AzSwg" +
|
|
|
|
"xGYdD8gM",
|
|
|
|
pkScript: "51209dfee24b87f5c35d5a310496a64fab70641bd03d40d5cc" +
|
|
|
|
"3720f6061f7435778a",
|
|
|
|
minExpiry: 2060,
|
|
|
|
}, {
|
|
|
|
name: "regtest segwit (v0)",
|
|
|
|
rootKey: "tprv8ZgxMBicQKsPdkvdLKn7HG2hhZ9Ewsgze1Yj3KDEcvb6H5U" +
|
|
|
|
"519UtfoPPP3hYVgFTn7hXmvE41qaugbaYiZN8wM1HoQHhs3AzSwg" +
|
|
|
|
"xGYdD8gM",
|
|
|
|
pkScript: "00201acfd449370aca0f744141bc6fe1f9fe326aa57a9cd35f" +
|
|
|
|
"bc2f8f15af4c0f4597",
|
|
|
|
minExpiry: 1600,
|
|
|
|
}}
|
|
|
|
)
|
|
|
|
|
|
|
|
func TestClosePoolAccount(t *testing.T) {
|
|
|
|
t.Parallel()
|
|
|
|
|
|
|
|
path := []uint32{
|
|
|
|
lnd.HardenedKeyStart + uint32(keychain.BIP0043Purpose),
|
|
|
|
lnd.HardenedKeyStart + chaincfg.RegressionNetParams.HDCoinType,
|
|
|
|
lnd.HardenedKeyStart + uint32(poolscript.AccountKeyFamily),
|
|
|
|
0,
|
|
|
|
}
|
|
|
|
const (
|
|
|
|
maxBlocks = 50
|
|
|
|
maxAccounts = 5
|
|
|
|
maxBatchKeys = 10
|
|
|
|
)
|
|
|
|
|
|
|
|
for _, tc := range testAccounts {
|
|
|
|
tc := tc
|
|
|
|
|
|
|
|
t.Run(tc.name, func(tt *testing.T) {
|
|
|
|
tt.Parallel()
|
|
|
|
|
|
|
|
extendedKey, err := hdkeychain.NewKeyFromString(
|
|
|
|
tc.rootKey,
|
|
|
|
)
|
|
|
|
require.NoError(tt, err)
|
|
|
|
accountBaseKey, err := lnd.DeriveChildren(
|
|
|
|
extendedKey, path,
|
|
|
|
)
|
|
|
|
require.NoError(tt, err)
|
|
|
|
targetScriptBytes, err := hex.DecodeString(tc.pkScript)
|
|
|
|
require.NoError(tt, err)
|
|
|
|
|
|
|
|
acct, err := bruteForceAccountScript(
|
|
|
|
accountBaseKey, auctioneerKey, tc.minExpiry,
|
|
|
|
tc.minExpiry+maxBlocks, maxAccounts,
|
|
|
|
maxBatchKeys, targetScriptBytes,
|
|
|
|
)
|
|
|
|
require.NoError(tt, err)
|
|
|
|
t.Logf("Found account: %v", acct)
|
|
|
|
})
|
|
|
|
}
|
|
|
|
}
|