@@ -41,7 +41,6 @@ func InitGenesis(ctx sdk.Context, keeper *Keeper, data types.GenesisState) ([]ab
4141 }
4242 }
4343
44- var maxContractID int
4544 for i , contract := range data .Contracts {
4645 contractAddr , err := sdk .AccAddressFromBech32 (contract .ContractAddress )
4746 if err != nil {
@@ -51,7 +50,6 @@ func InitGenesis(ctx sdk.Context, keeper *Keeper, data types.GenesisState) ([]ab
5150 if err != nil {
5251 return nil , errorsmod .Wrapf (err , "contract number %d" , i )
5352 }
54- maxContractID = i + 1 // not ideal but max(contractID) is not persisted otherwise
5553 }
5654
5755 for i , seq := range data .Sequences {
@@ -66,9 +64,12 @@ func InitGenesis(ctx sdk.Context, keeper *Keeper, data types.GenesisState) ([]ab
6664 if seqVal <= maxCodeID {
6765 return nil , errorsmod .Wrapf (types .ErrInvalid , "seq %s with value: %d must be greater than: %d " , string (types .KeySequenceCodeID ), seqVal , maxCodeID )
6866 }
69- seqVal = keeper .PeekAutoIncrementID (ctx , types .KeySequenceInstanceID )
70- if seqVal <= uint64 (maxContractID ) {
71- return nil , errorsmod .Wrapf (types .ErrInvalid , "seq %s with value: %d must be greater than: %d " , string (types .KeySequenceInstanceID ), seqVal , maxContractID )
67+ // ensure next classic address is unused so that we know the sequence is good
68+ rCtx , _ := ctx .CacheContext ()
69+ seqVal = keeper .PeekAutoIncrementID (rCtx , types .KeySequenceInstanceID )
70+ addr := keeper .ClassicAddressGenerator ()(rCtx , seqVal , nil )
71+ if keeper .HasContractInfo (ctx , addr ) {
72+ return nil , errorsmod .Wrapf (types .ErrInvalid , "value: %d for seq %s was used already" , seqVal , string (types .KeySequenceInstanceID ))
7273 }
7374 return nil , nil
7475}
0 commit comments