OSDN Git Service

sort
authorHAOYUatHZ <haoyu@protonmail.com>
Mon, 17 Jun 2019 02:39:16 +0000 (10:39 +0800)
committerHAOYUatHZ <haoyu@protonmail.com>
Mon, 17 Jun 2019 02:39:16 +0000 (10:39 +0800)
cmd/fedd/main.go
federation/federation.go [new file with mode: 0644]
federation/synchron/mainchain_keeper.go

index 2afa397..a3c22d3 100644 (file)
@@ -18,7 +18,7 @@ func main() {
                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()
 
diff --git a/federation/federation.go b/federation/federation.go
new file mode 100644 (file)
index 0000000..7c68202
--- /dev/null
@@ -0,0 +1,18 @@
+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{}
+}
index 4928d98..55af07d 100644 (file)
@@ -14,6 +14,7 @@ import (
        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"
@@ -22,24 +23,23 @@ import (
        "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),
        }
 }
 
@@ -136,7 +136,7 @@ func (m *mainchainKeeper) processBlock(chain *orm.Chain, block *types.Block, txS
 
 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
                }
        }
@@ -145,7 +145,7 @@ func (m *mainchainKeeper) isDepositTx(tx *types.Tx) bool {
 
 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
                }
        }
@@ -210,7 +210,7 @@ func (m *mainchainKeeper) getCrossChainReqs(crossTransactionID uint64, tx *types
        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
                }