log.WithField("err", err).Panic("initialize mysql db error")
}
- go synchron.NewMainchainKeeper(db, &cfg.Mainchain).Run()
+ go synchron.NewMainchainKeeper(db, &cfg.Mainchain, cfg.Warders).Run()
go synchron.NewSidechainKeeper(db, &cfg.Sidechain).Run()
go federation.NewWarder(cfg, db).Run()
--- /dev/null
+package federation
+
+import (
+ "sort"
+
+ "github.com/vapor/federation/config"
+)
+
+type ByPosition []config.Warder
+
+func (w ByPosition) Len() int { return len(w) }
+func (w ByPosition) Swap(i, j int) { w[i], w[j] = w[j], w[i] }
+func (w ByPosition) Less(i, j int) bool { return w[i].Position < w[j].Position }
+
+func ParseFedProg(warders []config.Warder) []byte {
+ sort.Sort(ByPosition(warders))
+ return []byte{}
+}
log "github.com/sirupsen/logrus"
"github.com/vapor/errors"
+ "github.com/vapor/federation"
"github.com/vapor/federation/common"
"github.com/vapor/federation/config"
"github.com/vapor/federation/database"
"github.com/vapor/protocol/bc"
)
-// TODO:
-var fedProg = []byte{}
-
type mainchainKeeper struct {
cfg *config.Chain
db *gorm.DB
node *service.Node
chainName string
assetCache *database.AssetCache
+ fedProg []byte
}
-func NewMainchainKeeper(db *gorm.DB, chainCfg *config.Chain) *mainchainKeeper {
+func NewMainchainKeeper(db *gorm.DB, chainCfg *config.Chain, warders []config.Warder) *mainchainKeeper {
return &mainchainKeeper{
cfg: chainCfg,
db: db,
node: service.NewNode(chainCfg.Upstream),
chainName: chainCfg.Name,
assetCache: database.NewAssetCache(),
+ fedProg: federation.ParseFedProg(warders),
}
}
func (m *mainchainKeeper) isDepositTx(tx *types.Tx) bool {
for _, output := range tx.Outputs {
- if bytes.Equal(output.OutputCommitment.ControlProgram, fedProg) {
+ if bytes.Equal(output.OutputCommitment.ControlProgram, m.fedProg) {
return true
}
}
func (m *mainchainKeeper) isWithdrawalTx(tx *types.Tx) bool {
for _, input := range tx.Inputs {
- if bytes.Equal(input.ControlProgram(), fedProg) {
+ if bytes.Equal(input.ControlProgram(), m.fedProg) {
return true
}
}
inputs := []*orm.CrossTransactionReq{}
for i, rawOutput := range tx.Outputs {
// check valid deposit
- if !bytes.Equal(rawOutput.OutputCommitment.ControlProgram, fedProg) {
+ if !bytes.Equal(rawOutput.OutputCommitment.ControlProgram, m.fedProg) {
continue
}