@@ -509,22 +509,24 @@ func (s *metaState) increaseNonce(addr proto.AccountAddress) (err error) {
509509 return
510510}
511511
512- func (s * metaState ) updateProviderList (tx * types.ProvideService ) (err error ) {
512+ func (s * metaState ) updateProviderList (tx * types.ProvideService , height uint32 ) (err error ) {
513513 sender , err := crypto .PubKeyHash (tx .Signee )
514514 if err != nil {
515515 err = errors .Wrap (err , "updateProviderList failed" )
516516 return
517517 }
518518
519- // load previous provider object
520- po , loaded := s .loadProviderObject (sender )
521- if loaded {
522- // refund
523- if err = s .increaseAccountStableBalance (sender , po .Deposit ); err != nil {
524- return
525- }
519+ if height >= conf .BPHeightCIPFixProvideService {
520+ // load previous provider object
521+ po , loaded := s .loadProviderObject (sender )
522+ if loaded {
523+ // refund
524+ if err = s .increaseAccountStableBalance (sender , po .Deposit ); err != nil {
525+ return
526+ }
526527
527- s .deleteProviderObject (sender )
528+ s .deleteProviderObject (sender )
529+ }
528530 }
529531
530532 // deposit
@@ -1124,7 +1126,7 @@ func (s *metaState) transferSQLChainTokenBalance(transfer *types.Transfer) (err
11241126 return
11251127}
11261128
1127- func (s * metaState ) applyTransaction (tx pi.Transaction ) (err error ) {
1129+ func (s * metaState ) applyTransaction (tx pi.Transaction , height uint32 ) (err error ) {
11281130 switch t := tx .(type ) {
11291131 case * types.Transfer :
11301132 err = s .transferSQLChainTokenBalance (t )
@@ -1135,7 +1137,7 @@ func (s *metaState) applyTransaction(tx pi.Transaction) (err error) {
11351137 case * types.BaseAccount :
11361138 err = s .storeBaseAccount (t .Address , & t .Account )
11371139 case * types.ProvideService :
1138- err = s .updateProviderList (t )
1140+ err = s .updateProviderList (t , height )
11391141 case * types.CreateDatabase :
11401142 err = s .matchProvidersWithUser (t )
11411143 case * types.UpdatePermission :
@@ -1146,7 +1148,7 @@ func (s *metaState) applyTransaction(tx pi.Transaction) (err error) {
11461148 err = s .updateBilling (t )
11471149 case * pi.TransactionWrapper :
11481150 // call again using unwrapped transaction
1149- err = s .applyTransaction (t .Unwrap ())
1151+ err = s .applyTransaction (t .Unwrap (), height )
11501152 default :
11511153 err = ErrUnknownTransactionType
11521154 }
@@ -1170,7 +1172,7 @@ func (s *metaState) generateGenesisBlock(dbID proto.DatabaseID, tx *types.Create
11701172 return
11711173}
11721174
1173- func (s * metaState ) apply (t pi.Transaction ) (err error ) {
1175+ func (s * metaState ) apply (t pi.Transaction , height uint32 ) (err error ) {
11741176 log .Infof ("get tx: %s" , t .GetTransactionType ())
11751177 // NOTE(leventeliu): bypass pool in this method.
11761178 var (
@@ -1195,7 +1197,7 @@ func (s *metaState) apply(t pi.Transaction) (err error) {
11951197 return
11961198 }
11971199 // Try to apply transaction to metaState
1198- if err = s .applyTransaction (t ); err != nil {
1200+ if err = s .applyTransaction (t , height ); err != nil {
11991201 log .WithError (err ).Debug ("apply transaction failed" )
12001202 return
12011203 }
0 commit comments