diff --git a/bitcoin/config.go b/bitcoin/config.go new file mode 100644 index 0000000000..f898da24ef --- /dev/null +++ b/bitcoin/config.go @@ -0,0 +1,42 @@ +package bitcoin + +import ( + "github.com/btcsuite/btcd/chaincfg" + "github.com/btcsuite/btcd/rpcclient" + "github.com/evmos/ethermint/server/config" +) + +// Config this param use for holding bitcoin rpc config +var Config RpcConfig + +// RpcConfig this struct use for storing bitcoin rpc config +type RpcConfig struct { + ConnConfig rpcclient.ConnConfig + Params chaincfg.Params +} + +// SetBitcoinConfig this method uses for setting bitcoin rpc +func SetBitcoinConfig(config config.BITCOINConfig) RpcConfig { + var params chaincfg.Params + switch config.NetworkName { + case chaincfg.SigNetParams.Name: + params = chaincfg.SigNetParams + case chaincfg.MainNetParams.Name: + params = chaincfg.MainNetParams + case chaincfg.TestNet3Params.Name: + params = chaincfg.TestNet3Params + case chaincfg.SimNetParams.Name: + params = chaincfg.SimNetParams + case chaincfg.RegressionNetParams.Name: + params = chaincfg.RegressionNetParams + default: + params = chaincfg.MainNetParams + } + Config = RpcConfig{ + ConnConfig: rpcclient.ConnConfig{ + Host: config.RpcHost, + }, + Params: params, + } + return Config +} diff --git a/server/config/config.go b/server/config/config.go index 5f814537f7..cc5f038071 100644 --- a/server/config/config.go +++ b/server/config/config.go @@ -77,6 +77,11 @@ const ( DefaultMaxOpenConnections = 0 DefaultBitcoinNetworkName = "mainnet" + + DefaultBitcoinRpchost = "localhost:8332" + DefaultBitcoinRpcUser = "b2node" + DefaultBitcoinRpcPass = "b2node" + DefaultBitcoinWalletName = "b2node" ) var evmTracers = []string{"json", "markdown", "struct", "access_list"} @@ -365,6 +370,10 @@ func GetConfig(v *viper.Viper) (Config, error) { }, BITCOIN: BITCOINConfig{ NetworkName: v.GetString("bitcoin.network-name"), + RpcHost: v.GetString("bitcoin.rpc-host"), + RpcUser: v.GetString("bitcoin.rpc-user"), + RpcPass: v.GetString("bitcoin.rpc-pass"), + WalletName: v.GetString("bitcoin.wallet-name"), }, }, nil } @@ -403,12 +412,20 @@ func (c Config) ValidateBasic() error { type BITCOINConfig struct { // NetworkName defines the bitcoin network name NetworkName string `mapstructure:"network-name"` + RpcHost string `mapstructure:"rpc-host"` + RpcUser string `mapstructure:"rpc-user"` + RpcPass string `mapstructure:"rpc-pass"` + WalletName string `mapstructrue:"wallet-name"` } // DefaultBitcoinConfig returns the default Bitcon configuration func DefaultBitcoinConfig() *BITCOINConfig { return &BITCOINConfig{ NetworkName: DefaultBitcoinNetworkName, + RpcHost: DefaultBitcoinRpchost, + RpcUser: DefaultBitcoinRpcUser, + RpcPass: DefaultBitcoinRpcPass, + WalletName: DefaultBitcoinWalletName, } } @@ -417,6 +434,14 @@ func (c BITCOINConfig) Validate() error { if c.NetworkName != "" && !strings.StringInSlice(c.NetworkName, bitcoinNetworkNames) { return fmt.Errorf("invalid network name %s, available names: %v", c.NetworkName, bitcoinNetworkNames) } - + if c.RpcHost != "" { + return fmt.Errorf("rpc host is not allowed empty") + } + if c.RpcPass != "" { + return fmt.Errorf("rpc pass is not allowed empty") + } + if c.WalletName != "" { + return fmt.Errorf("rpc wallet name is not allowed empty") + } return nil } diff --git a/server/config/toml.go b/server/config/toml.go index a8c5b88565..aad0f7deb4 100644 --- a/server/config/toml.go +++ b/server/config/toml.go @@ -116,4 +116,8 @@ key-path = "{{ .TLS.KeyPath }}" # Network defines the bitcoin network name to use. # Names: "mainnet", "testnet", "regtest", "simnet", "testnet3", "signet" network-name = "{{ .BITCOIN.NetworkName }}" +rpc-host = "{{ .BITCOIN.RpcHost }}" +rpc-user = "{{ .BITCOIN.RpcUser }}" +rpc-pass = "{{ .BITCOIN.RpcPass }}" +wallet-name = "{{ .BITCOIN.WalletName }}" ` diff --git a/server/flags/flags.go b/server/flags/flags.go index 5f3d9c7112..1f11b1c609 100644 --- a/server/flags/flags.go +++ b/server/flags/flags.go @@ -84,6 +84,15 @@ const ( TLSKeyPath = "tls.key-path" ) +// BITCOIN flags +const ( + BITCOINNetworkName = "bitcoin.network-name" + BITCOINRpcHost = "bitcoin.rpc-host" + BITCOINRpcUser = "bitcoin.rpc-user" + BITCOINRpcPass = "bitcoin.rpc-pass" + BITCOINWalletName = "bitcoin.wallet-name" +) + // AddTxFlags adds common flags for commands to post tx func AddTxFlags(cmd *cobra.Command) (*cobra.Command, error) { cmd.PersistentFlags().String(flags.FlagChainID, "testnet", "Specify Chain ID for sending Tx") diff --git a/server/start.go b/server/start.go index dfcf6e7079..fde0e3a701 100644 --- a/server/start.go +++ b/server/start.go @@ -18,6 +18,7 @@ package server import ( "context" "fmt" + "github.com/evmos/ethermint/bitcoin" "io" "net" "net/http" @@ -217,6 +218,11 @@ which accepts a path for the resulting pprof file. cmd.Flags().String(srvflags.TLSCertPath, "", "the cert.pem file path for the server TLS configuration") cmd.Flags().String(srvflags.TLSKeyPath, "", "the key.pem file path for the server TLS configuration") + cmd.Flags().String(srvflags.BITCOINNetworkName, config.DefaultBitcoinNetworkName, "Sets the bitcoin network type") + cmd.Flags().String(srvflags.BITCOINRpcHost, config.DefaultBitcoinRpchost, "Sets the bitcoin network rpc host") + cmd.Flags().String(srvflags.BITCOINRpcUser, config.DefaultBitcoinRpcUser, "Sets the bitcoin network rpc user") + cmd.Flags().String(srvflags.BITCOINRpcPass, config.DefaultBitcoinRpcPass, "Sets the bitcoin network rpc password") + cmd.Flags().Uint64(server.FlagStateSyncSnapshotInterval, 0, "State sync snapshot interval") cmd.Flags().Uint32(server.FlagStateSyncSnapshotKeepRecent, 2, "State sync snapshot to keep") @@ -645,6 +651,8 @@ func startInProcess(ctx *server.Context, clientCtx client.Context, opts StartOpt // bitcoin indexer run go routine handle bitcoin transaction // or bitcoin commiter logic + // construct bitcoin rpc params + bitcoin.SetBitcoinConfig(config.BITCOIN) // Wait for SIGINT or SIGTERM signal return server.WaitForQuitSignals() }