This commit modifies the code to use params based on the active network which paves the way for supporting the special rules and different genesis blocks used by the test networks.
68 lines
2 KiB
Go
68 lines
2 KiB
Go
// Copyright (c) 2013 Conformal Systems LLC.
|
|
// Use of this source code is governed by an ISC
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package btcchain
|
|
|
|
import (
|
|
"github.com/conformal/btcwire"
|
|
"math/big"
|
|
)
|
|
|
|
// params is used to group parameters for various networks such as the main
|
|
// network and test networks.
|
|
type params struct {
|
|
genesisBlock *btcwire.MsgBlock
|
|
genesisHash *btcwire.ShaHash
|
|
powLimit *big.Int
|
|
}
|
|
|
|
// mainNetParams contains parameters specific to the main network
|
|
// (btcwire.MainNet).
|
|
var mainNetParams = params{
|
|
genesisBlock: &btcwire.GenesisBlock,
|
|
genesisHash: &btcwire.GenesisHash,
|
|
|
|
// powLimit is the highest proof of work value a bitcoin block can have.
|
|
// It is the value 2^224 - 1 for the main network.
|
|
powLimit: new(big.Int).Sub(new(big.Int).Lsh(bigOne, 224), bigOne),
|
|
}
|
|
|
|
// regressionParams contains parameters specific to the regression test network
|
|
// (btcwire.TestNet).
|
|
var regressionParams = params{
|
|
genesisBlock: &btcwire.TestNetGenesisBlock,
|
|
genesisHash: &btcwire.TestNetGenesisHash,
|
|
|
|
// powLimit is the highest proof of work value a bitcoin block can have.
|
|
// It is the value 2^256 - 1 for the regression test network.
|
|
powLimit: new(big.Int).Sub(new(big.Int).Lsh(bigOne, 255), bigOne),
|
|
}
|
|
|
|
// testNet3Params contains parameters specific to the test network (version 3)
|
|
// (btcwire.TestNet3).
|
|
var testNet3Params = params{
|
|
genesisBlock: &btcwire.TestNet3GenesisBlock,
|
|
genesisHash: &btcwire.TestNet3GenesisHash,
|
|
|
|
// powLimit is the highest proof of work value a bitcoin block can have.
|
|
// It is the value 2^224 - 1 for the test network (version 3).
|
|
powLimit: new(big.Int).Sub(new(big.Int).Lsh(bigOne, 224), bigOne),
|
|
}
|
|
|
|
// netParams returns parameters specific to the passed bitcoin network.
|
|
func (b *BlockChain) netParams() *params {
|
|
switch b.btcnet {
|
|
case btcwire.TestNet:
|
|
return ®ressionParams
|
|
|
|
case btcwire.TestNet3:
|
|
return &testNet3Params
|
|
|
|
// Return main net by default.
|
|
case btcwire.MainNet:
|
|
fallthrough
|
|
default:
|
|
return &mainNetParams
|
|
}
|
|
}
|