OSDN Git Service

redesign
authorHAOYUatHZ <haoyu@protonmail.com>
Fri, 21 Jun 2019 06:38:02 +0000 (14:38 +0800)
committerHAOYUatHZ <haoyu@protonmail.com>
Fri, 21 Jun 2019 06:38:02 +0000 (14:38 +0800)
federation/warder.go

index a7689fd..d5ff5b5 100644 (file)
@@ -121,25 +121,29 @@ func (w *warder) processCrossTx(ormTx *orm.CrossTransaction) error {
                return err
        }
 
-       signs, err := w.getSigns(destTx, ormTx)
+       var signersSigns [][][]byte
+
+       signerSigns, err := w.getSigns(destTx, ormTx)
        if err != nil {
                log.WithFields(log.Fields{"err": err, "cross-chain tx": ormTx}).Warnln("getSigns")
                return err
        }
 
-       w.attachSignsForTx(destTx, ormTx, w.position, signs)
+       signersSigns = w.attachSignsForTx(destTx, ormTx, w.position, signs)
 
        for _, remote := range w.remotes {
-               signs, err := remote.RequestSigns(destTx, ormTx)
+               signerSigns, err := remote.RequestSigns(destTx, ormTx)
                if err != nil {
                        log.WithFields(log.Fields{"err": err, "remote": remote, "cross-chain tx": ormTx}).Warnln("RequestSign")
                        return err
                }
 
-               w.attachSignsForTx(destTx, ormTx, remote.Position, signs)
+               signersSigns = w.attachSignsForTx(destTx, ormTx, remote.Position, signerSigns)
        }
 
-       if w.isTxSignsReachQuorum(destTx) && w.isLeader() {
+       if w.isTxSignsReachQuorum(signersSigns) && w.isLeader() {
+               destTx := w.finalizeTx(destTx, signersSigns)
+
                submittedTxID, err := w.submitTx(destTx)
                if err != nil {
                        log.WithFields(log.Fields{"err": err, "cross-chain tx": ormTx, "dest tx": destTx}).Warnln("submitTx")
@@ -341,6 +345,8 @@ func (w *warder) attachSignsForTx(destTx interface{}, ormTx *orm.CrossTransactio
                return errUnknownTxType
        }
 
+       // finalize tx?
+
        signWitness := make([][]string, inputsLen)
 
        b, err := json.Marshal(signs)