4 // "github.com/bytom/protocol/bc"
5 btmTypes "github.com/bytom/protocol/bc/types"
6 "github.com/jinzhu/gorm"
8 "github.com/vapor/errors"
9 "github.com/vapor/federation/config"
10 "github.com/vapor/federation/database/orm"
11 vaporTypes "github.com/vapor/protocol/bc/types"
14 type detachBlockProcessor struct {
19 // txStatus *bc.TransactionStatus
22 func (p *detachBlockProcessor) getCfg() *config.Chain {
26 func (p *detachBlockProcessor) getBlock() interface{} {
30 func (p *detachBlockProcessor) processWithdrawalToMainchain(txIndex uint64, tx *btmTypes.Tx) error {
31 return p.db.Delete(&orm.CrossTransaction{ChainID: p.chain.ID, TxHash: tx.ID.String()}).Error
34 func (p *detachBlockProcessor) processDepositFromMainchain(txIndex uint64, tx *btmTypes.Tx) error {
35 ormTx := &orm.CrossTransaction{ChainID: p.chain.ID, TxHash: tx.ID.String()}
36 if err := p.db.Where(tx).First(tx).Error; err != nil {
37 return errors.Wrap(err, "db query transaction")
40 if err := p.db.Delete(&orm.CrossTransactionInput{}, "MainchainTxID = ?", ormTx.ID).Error; err != nil {
41 return errors.Wrap(err, "db delete CrossTransactionInput")
44 return p.db.Delete(ormTx).Error
47 func (p *detachBlockProcessor) processIssuing(db *gorm.DB, txs []*btmTypes.Tx) error {
51 func (p *detachBlockProcessor) processChainInfo() error {
52 var oldBlockHashStr string
55 case p.cfg.IsMainchain:
56 p.chain.BlockHash = p.block.(*btmTypes.Block).PreviousBlockHash.String()
57 p.chain.BlockHeight = p.block.(*btmTypes.Block).Height - 1
58 oldBlockHash := p.block.(*btmTypes.Block).Hash()
59 oldBlockHashStr = oldBlockHash.String()
61 p.chain.BlockHash = p.block.(*vaporTypes.Block).PreviousBlockHash.String()
62 p.chain.BlockHeight = p.block.(*vaporTypes.Block).Height - 1
63 oldBlockHash := p.block.(*vaporTypes.Block).Hash()
64 oldBlockHashStr = oldBlockHash.String()
67 db := p.db.Model(p.chain).Where("block_hash = ?", oldBlockHashStr).Updates(p.chain)
68 if err := db.Error; err != nil {
72 if db.RowsAffected != 1 {
73 return ErrInconsistentDB