f4fe76aaf1
Creates a Config that initializes the chainregistry struct in the lnd package. Also moves all of chainparams.go to the chainreg package.
146 lines
4.6 KiB
Go
146 lines
4.6 KiB
Go
package chainreg
|
|
|
|
import (
|
|
"github.com/btcsuite/btcd/chaincfg"
|
|
bitcoinCfg "github.com/btcsuite/btcd/chaincfg"
|
|
"github.com/btcsuite/btcd/chaincfg/chainhash"
|
|
bitcoinWire "github.com/btcsuite/btcd/wire"
|
|
"github.com/lightningnetwork/lnd/keychain"
|
|
litecoinCfg "github.com/ltcsuite/ltcd/chaincfg"
|
|
litecoinWire "github.com/ltcsuite/ltcd/wire"
|
|
)
|
|
|
|
// BitcoinNetParams couples the p2p parameters of a network with the
|
|
// corresponding RPC port of a daemon running on the particular network.
|
|
type BitcoinNetParams struct {
|
|
*bitcoinCfg.Params
|
|
RPCPort string
|
|
CoinType uint32
|
|
}
|
|
|
|
// LitecoinNetParams couples the p2p parameters of a network with the
|
|
// corresponding RPC port of a daemon running on the particular network.
|
|
type LitecoinNetParams struct {
|
|
*litecoinCfg.Params
|
|
RPCPort string
|
|
CoinType uint32
|
|
}
|
|
|
|
// BitcoinTestNetParams contains parameters specific to the 3rd version of the
|
|
// test network.
|
|
var BitcoinTestNetParams = BitcoinNetParams{
|
|
Params: &bitcoinCfg.TestNet3Params,
|
|
RPCPort: "18334",
|
|
CoinType: keychain.CoinTypeTestnet,
|
|
}
|
|
|
|
// BitcoinMainNetParams contains parameters specific to the current Bitcoin
|
|
// mainnet.
|
|
var BitcoinMainNetParams = BitcoinNetParams{
|
|
Params: &bitcoinCfg.MainNetParams,
|
|
RPCPort: "8334",
|
|
CoinType: keychain.CoinTypeBitcoin,
|
|
}
|
|
|
|
// BitcoinSimNetParams contains parameters specific to the simulation test
|
|
// network.
|
|
var BitcoinSimNetParams = BitcoinNetParams{
|
|
Params: &bitcoinCfg.SimNetParams,
|
|
RPCPort: "18556",
|
|
CoinType: keychain.CoinTypeTestnet,
|
|
}
|
|
|
|
// LitecoinSimNetParams contains parameters specific to the simulation test
|
|
// network.
|
|
var LitecoinSimNetParams = LitecoinNetParams{
|
|
Params: &litecoinCfg.TestNet4Params,
|
|
RPCPort: "18556",
|
|
CoinType: keychain.CoinTypeTestnet,
|
|
}
|
|
|
|
// LitecoinTestNetParams contains parameters specific to the 4th version of the
|
|
// test network.
|
|
var LitecoinTestNetParams = LitecoinNetParams{
|
|
Params: &litecoinCfg.TestNet4Params,
|
|
RPCPort: "19334",
|
|
CoinType: keychain.CoinTypeTestnet,
|
|
}
|
|
|
|
// LitecoinMainNetParams contains the parameters specific to the current
|
|
// Litecoin mainnet.
|
|
var LitecoinMainNetParams = LitecoinNetParams{
|
|
Params: &litecoinCfg.MainNetParams,
|
|
RPCPort: "9334",
|
|
CoinType: keychain.CoinTypeLitecoin,
|
|
}
|
|
|
|
// LitecoinRegTestNetParams contains parameters specific to a local litecoin
|
|
// regtest network.
|
|
var LitecoinRegTestNetParams = LitecoinNetParams{
|
|
Params: &litecoinCfg.RegressionNetParams,
|
|
RPCPort: "18334",
|
|
CoinType: keychain.CoinTypeTestnet,
|
|
}
|
|
|
|
// BitcoinRegTestNetParams contains parameters specific to a local bitcoin
|
|
// regtest network.
|
|
var BitcoinRegTestNetParams = BitcoinNetParams{
|
|
Params: &bitcoinCfg.RegressionNetParams,
|
|
RPCPort: "18334",
|
|
CoinType: keychain.CoinTypeTestnet,
|
|
}
|
|
|
|
// ApplyLitecoinParams applies the relevant chain configuration parameters that
|
|
// differ for litecoin to the chain parameters typed for btcsuite derivation.
|
|
// This function is used in place of using something like interface{} to
|
|
// abstract over _which_ chain (or fork) the parameters are for.
|
|
func ApplyLitecoinParams(params *BitcoinNetParams,
|
|
litecoinParams *LitecoinNetParams) {
|
|
|
|
params.Name = litecoinParams.Name
|
|
params.Net = bitcoinWire.BitcoinNet(litecoinParams.Net)
|
|
params.DefaultPort = litecoinParams.DefaultPort
|
|
params.CoinbaseMaturity = litecoinParams.CoinbaseMaturity
|
|
|
|
copy(params.GenesisHash[:], litecoinParams.GenesisHash[:])
|
|
|
|
// Address encoding magics
|
|
params.PubKeyHashAddrID = litecoinParams.PubKeyHashAddrID
|
|
params.ScriptHashAddrID = litecoinParams.ScriptHashAddrID
|
|
params.PrivateKeyID = litecoinParams.PrivateKeyID
|
|
params.WitnessPubKeyHashAddrID = litecoinParams.WitnessPubKeyHashAddrID
|
|
params.WitnessScriptHashAddrID = litecoinParams.WitnessScriptHashAddrID
|
|
params.Bech32HRPSegwit = litecoinParams.Bech32HRPSegwit
|
|
|
|
copy(params.HDPrivateKeyID[:], litecoinParams.HDPrivateKeyID[:])
|
|
copy(params.HDPublicKeyID[:], litecoinParams.HDPublicKeyID[:])
|
|
|
|
params.HDCoinType = litecoinParams.HDCoinType
|
|
|
|
checkPoints := make([]chaincfg.Checkpoint, len(litecoinParams.Checkpoints))
|
|
for i := 0; i < len(litecoinParams.Checkpoints); i++ {
|
|
var chainHash chainhash.Hash
|
|
copy(chainHash[:], litecoinParams.Checkpoints[i].Hash[:])
|
|
|
|
checkPoints[i] = chaincfg.Checkpoint{
|
|
Height: litecoinParams.Checkpoints[i].Height,
|
|
Hash: &chainHash,
|
|
}
|
|
}
|
|
params.Checkpoints = checkPoints
|
|
|
|
params.RPCPort = litecoinParams.RPCPort
|
|
params.CoinType = litecoinParams.CoinType
|
|
}
|
|
|
|
// IsTestnet tests if the givern params correspond to a testnet
|
|
// parameter configuration.
|
|
func IsTestnet(params *BitcoinNetParams) bool {
|
|
switch params.Params.Net {
|
|
case bitcoinWire.TestNet3, bitcoinWire.BitcoinNet(litecoinWire.TestNet4):
|
|
return true
|
|
default:
|
|
return false
|
|
}
|
|
}
|