NewExchange creates new exchange process object.
(cfg *ExchangeConfig)
| 87 | |
| 88 | // NewExchange creates new exchange process object. |
| 89 | func NewExchange(cfg *ExchangeConfig) (e *Exchange, err error) { |
| 90 | e = &Exchange{ |
| 91 | cfg: cfg, |
| 92 | receivedBlockMap: make(map[uint64]bool), |
| 93 | receiveAddrMap: make(map[string]bool), |
| 94 | } |
| 95 | |
| 96 | // init keys |
| 97 | e.vaultPrivateKey, err = kms.GetLocalPrivateKey() |
| 98 | if err != nil { |
| 99 | return |
| 100 | } |
| 101 | e.vaultAddress, err = crypto.PubKeyHash(e.vaultPrivateKey.PubKey()) |
| 102 | if err != nil { |
| 103 | return |
| 104 | } |
| 105 | |
| 106 | // init meta database |
| 107 | var db *sql.DB |
| 108 | if cfg.UseLocalDatabase { |
| 109 | db, err = sql.Open("sqlite3", cfg.Database) |
| 110 | } else { |
| 111 | dsnCfg := client.Config{} |
| 112 | dsnCfg.DatabaseID = cfg.Database |
| 113 | db, err = sql.Open("covenantsql", dsnCfg.FormatDSN()) |
| 114 | } |
| 115 | |
| 116 | e.metaDatabase = &gorp.DbMap{Db: db, Dialect: gorp.SqliteDialect{}} |
| 117 | e.metaDatabase.AddTableWithName(TxRecord{}, "record"). |
| 118 | SetKeys(false, "Hash") |
| 119 | e.metaDatabase.AddTableWithName(AuditRecord{}, "audit"). |
| 120 | SetKeys(true, "ID") |
| 121 | if err = e.metaDatabase.CreateTablesIfNotExists(); err != nil { |
| 122 | return |
| 123 | } |
| 124 | |
| 125 | for _, addr := range cfg.ReceiveAddresses { |
| 126 | e.receiveAddrMap[addr.String()] = true |
| 127 | } |
| 128 | |
| 129 | return |
| 130 | } |
| 131 | |
| 132 | // Start connects to server and listen to new blocks for token exchanges. |
| 133 | func (e *Exchange) Start(ctx context.Context) (err error) { |
no test coverage detected