@@ -41,7 +41,6 @@ func InitGenesis(ctx sdk.Context, keeper *Keeper, data types.GenesisState) ([]ab
41
41
}
42
42
}
43
43
44
- var maxContractID int
45
44
for i , contract := range data .Contracts {
46
45
contractAddr , err := sdk .AccAddressFromBech32 (contract .ContractAddress )
47
46
if err != nil {
@@ -51,7 +50,6 @@ func InitGenesis(ctx sdk.Context, keeper *Keeper, data types.GenesisState) ([]ab
51
50
if err != nil {
52
51
return nil , errorsmod .Wrapf (err , "contract number %d" , i )
53
52
}
54
- maxContractID = i + 1 // not ideal but max(contractID) is not persisted otherwise
55
53
}
56
54
57
55
for i , seq := range data .Sequences {
@@ -66,9 +64,12 @@ func InitGenesis(ctx sdk.Context, keeper *Keeper, data types.GenesisState) ([]ab
66
64
if seqVal <= maxCodeID {
67
65
return nil , errorsmod .Wrapf (types .ErrInvalid , "seq %s with value: %d must be greater than: %d " , string (types .KeySequenceCodeID ), seqVal , maxCodeID )
68
66
}
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 ))
72
73
}
73
74
return nil , nil
74
75
}
0 commit comments