From 9642338b3b27c3a8f748e7a746bef04821d72fe6 Mon Sep 17 00:00:00 2001 From: Poseidon Date: Wed, 11 Sep 2019 13:53:28 +0800 Subject: [PATCH 1/1] fix mainchain keeper (#398) * fix mainchain keeper * opt code * opt code * remove config --- toolbar/federation/synchron/mainchain_keeper.go | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/toolbar/federation/synchron/mainchain_keeper.go b/toolbar/federation/synchron/mainchain_keeper.go index e07b066d..8bb13d0f 100644 --- a/toolbar/federation/synchron/mainchain_keeper.go +++ b/toolbar/federation/synchron/mainchain_keeper.go @@ -125,10 +125,8 @@ func (m *mainchainKeeper) isWithdrawalTx(tx *types.Tx) bool { } } - if sourceTxHash := locateSideChainTx(tx.Outputs[len(tx.Outputs)-1]); sourceTxHash == "" { - return false - } - return true + sourceTxHash := locateSideChainTx(tx.Outputs[len(tx.Outputs)-1]) + return sourceTxHash != "" } func locateSideChainTx(output *types.TxOutput) string { @@ -145,7 +143,11 @@ func locateSideChainTx(output *types.TxOutput) string { return "" } - return string(insts[1].Data) + sourceTxHash := string(insts[1].Data) + if _, err = hex.DecodeString(sourceTxHash); err == nil && len(sourceTxHash) == 64 { + return sourceTxHash + } + return "" } func (m *mainchainKeeper) processBlock(db *gorm.DB, block *types.Block, txStatus *bc.TransactionStatus) error { @@ -257,10 +259,11 @@ func (m *mainchainKeeper) processWithdrawalTx(db *gorm.DB, block *types.Block, t blockHash := block.Hash() tx := block.Transactions[txIndex] - stmt := db.Model(&orm.CrossTransaction{}).Where(&orm.CrossTransaction{ + crossTx := &orm.CrossTransaction{ SourceTxHash: locateSideChainTx(tx.Outputs[len(tx.Outputs)-1]), Status: common.CrossTxPendingStatus, - }).UpdateColumn(&orm.CrossTransaction{ + } + stmt := db.Model(&orm.CrossTransaction{}).Where(crossTx).UpdateColumn(&orm.CrossTransaction{ DestBlockHeight: sql.NullInt64{int64(block.Height), true}, DestBlockTimestamp: sql.NullInt64{int64(block.Timestamp), true}, DestBlockHash: sql.NullString{blockHash.String(), true}, @@ -273,7 +276,7 @@ func (m *mainchainKeeper) processWithdrawalTx(db *gorm.DB, block *types.Block, t } if stmt.RowsAffected != 1 { - return ErrInconsistentDB + log.WithFields(log.Fields{"sourceTxHash": crossTx.SourceTxHash, "destTxHash": tx.ID.String()}).Error("fail to update withdrawal transaction") } return nil } -- 2.11.0