diff --git a/x/wasm/keeper/keeper.go b/x/wasm/keeper/keeper.go index c1d7416b3b8..6c1117309d5 100644 --- a/x/wasm/keeper/keeper.go +++ b/x/wasm/keeper/keeper.go @@ -745,7 +745,7 @@ func (k Keeper) InitializePinnedCodes(ctx sdk.Context) error { store := prefix.NewStore(ctx.KVStore(k.storeKey), types.PinnedCodeIndexPrefix) iter := store.Iterator(nil, nil) for ; iter.Valid(); iter.Next() { - codeInfo := k.GetCodeInfo(ctx, types.ParsePinnedCodeIndex(iter.Value())) + codeInfo := k.GetCodeInfo(ctx, types.ParsePinnedCodeIndex(iter.Key())) if codeInfo == nil { return sdkerrors.Wrap(types.ErrNotFound, "code info") } diff --git a/x/wasm/keeper/keeper_test.go b/x/wasm/keeper/keeper_test.go index 582a2eaf026..65844fec6ea 100644 --- a/x/wasm/keeper/keeper_test.go +++ b/x/wasm/keeper/keeper_test.go @@ -1278,3 +1278,34 @@ func TestClearContractAdmin(t *testing.T) { }) } } + +func TestInitializePinnedCodes(t *testing.T) { + ctx, keepers := CreateTestInput(t, false, SupportedFeatures) + k := keepers.WasmKeeper + + var capturedChecksums []wasmvm.Checksum + mock := wasmtesting.MockWasmer{PinFn: func(checksum wasmvm.Checksum) error { + capturedChecksums = append(capturedChecksums, checksum) + return nil + }} + wasmtesting.MakeIBCInstantiable(&mock) + + const testItems = 3 + myCodeIDs := make([]uint64, testItems) + for i := 0; i < testItems; i++ { + myCodeIDs[i] = StoreRandomContract(t, ctx, keepers, &mock).CodeID + require.NoError(t, k.pinCode(ctx, myCodeIDs[i])) + } + capturedChecksums = nil + + // when + gotErr := k.InitializePinnedCodes(ctx) + + // then + require.NoError(t, gotErr) + require.Len(t, capturedChecksums, testItems) + for i, c := range myCodeIDs { + var exp wasmvm.Checksum = k.GetCodeInfo(ctx, c).CodeHash + assert.Equal(t, exp, capturedChecksums[i]) + } +}