OSDN Git Service

rename dir (#283)
[bytom/vapor.git] / toolbar / federation / config / config.go
diff --git a/toolbar/federation/config/config.go b/toolbar/federation/config/config.go
new file mode 100644 (file)
index 0000000..5cf4edd
--- /dev/null
@@ -0,0 +1,53 @@
+package config
+
+import (
+       "encoding/json"
+       "os"
+
+       log "github.com/sirupsen/logrus"
+
+       vaporJson "github.com/vapor/encoding/json"
+       "github.com/vapor/toolbar/common"
+)
+
+func NewConfig() *Config {
+       if len(os.Args) <= 1 {
+               log.Fatal("Please setup the config file path")
+       }
+
+       return NewConfigWithPath(os.Args[1])
+}
+
+func NewConfigWithPath(path string) *Config {
+       configFile, err := os.Open(path)
+       if err != nil {
+               log.WithFields(log.Fields{"err": err, "file_path": os.Args[1]}).Fatal("fail to open config file")
+       }
+       defer configFile.Close()
+
+       cfg := &Config{}
+       if err := json.NewDecoder(configFile).Decode(cfg); err != nil {
+               log.WithField("err", err).Fatal("fail to decode config file")
+       }
+
+       return cfg
+}
+
+type Config struct {
+       API            API                `json:"api"`
+       MySQLConfig    common.MySQLConfig `json:"mysql"`
+       FederationProg vaporJson.HexBytes `json:"federation_prog"`
+       Mainchain      Chain              `json:"mainchain"`
+       Sidechain      Chain              `json:"sidechain"`
+}
+
+type API struct {
+       IsReleaseMode bool `json:"is_release_mode"`
+}
+
+type Chain struct {
+       Name          string `json:"name"`
+       Upstream      string `json:"upstream"`
+       SyncSeconds   uint64 `json:"sync_seconds"`
+       Confirmations uint64 `json:"confirmations"`
+}