43 lines
1.3 KiB
Go
43 lines
1.3 KiB
Go
package coins
|
|
|
|
import (
|
|
"blockbook/bchain"
|
|
"blockbook/bchain/coins/btc"
|
|
"blockbook/bchain/coins/zec"
|
|
"blockbook/common"
|
|
"encoding/json"
|
|
"fmt"
|
|
"io/ioutil"
|
|
"reflect"
|
|
|
|
"github.com/juju/errors"
|
|
)
|
|
|
|
type blockChainFactory func(config json.RawMessage, pushHandler func(*bchain.MQMessage), metrics *common.Metrics) (bchain.BlockChain, error)
|
|
|
|
var blockChainFactories = make(map[string]blockChainFactory)
|
|
|
|
func init() {
|
|
blockChainFactories["btc"] = btc.NewBitcoinRPC
|
|
blockChainFactories["btc-testnet"] = btc.NewBitcoinRPC
|
|
blockChainFactories["zec"] = zec.NewZCashRPC
|
|
}
|
|
|
|
// NewBlockChain creates bchain.BlockChain of type defined by parameter coin
|
|
func NewBlockChain(coin string, configfile string, pushHandler func(*bchain.MQMessage), metrics *common.Metrics) (bchain.BlockChain, error) {
|
|
bcf, ok := blockChainFactories[coin]
|
|
if !ok {
|
|
return nil, errors.New(fmt.Sprint("Unsupported coin ", coin, ". Must be one of ", reflect.ValueOf(blockChainFactories).MapKeys()))
|
|
}
|
|
data, err := ioutil.ReadFile(configfile)
|
|
if err != nil {
|
|
return nil, errors.Annotatef(err, "Error reading file %v", configfile)
|
|
}
|
|
var config json.RawMessage
|
|
err = json.Unmarshal(data, &config)
|
|
if err != nil {
|
|
return nil, errors.Annotatef(err, "Error parsing file %v", configfile)
|
|
}
|
|
return bcf(config, pushHandler, metrics)
|
|
}
|