}
}
- 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 {
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 {
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},
}
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
}