From 7c421bfac10d49c5eadbd75543b94b21af82bcc9 Mon Sep 17 00:00:00 2001 From: DimitrisJim Date: Tue, 21 Nov 2023 15:59:01 +0200 Subject: [PATCH 1/2] Use global wasm VM instead of keeping an additional reference in keeper. (#5146) (cherry picked from commit 595e1a938db8769c3d07b4fd0dded694bbdd109c) # Conflicts: # modules/light-clients/08-wasm/keeper/genesis.go # modules/light-clients/08-wasm/keeper/keeper.go # modules/light-clients/08-wasm/keeper/snapshotter.go --- modules/light-clients/08-wasm/keeper/genesis.go | 7 ++++++- modules/light-clients/08-wasm/keeper/grpc_query.go | 4 ++-- modules/light-clients/08-wasm/keeper/keeper.go | 12 +++++++----- modules/light-clients/08-wasm/keeper/msg_server.go | 2 +- modules/light-clients/08-wasm/keeper/snapshotter.go | 9 +++++++-- 5 files changed, 23 insertions(+), 11 deletions(-) diff --git a/modules/light-clients/08-wasm/keeper/genesis.go b/modules/light-clients/08-wasm/keeper/genesis.go index de88b457cb2..59e279e7c7a 100644 --- a/modules/light-clients/08-wasm/keeper/genesis.go +++ b/modules/light-clients/08-wasm/keeper/genesis.go @@ -5,6 +5,7 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/ibc-go/modules/light-clients/08-wasm/internal/ibcwasm" "github.com/cosmos/ibc-go/modules/light-clients/08-wasm/types" ) @@ -22,7 +23,7 @@ func (k Keeper) InitGenesis(ctx sdk.Context, gs types.GenesisState) error { // ExportGenesis returns the 08-wasm module's exported genesis. This includes the code // for all contracts previously stored. -func (k Keeper) ExportGenesis(ctx sdk.Context) types.GenesisState { +func (Keeper) ExportGenesis(ctx sdk.Context) types.GenesisState { checksums, err := types.GetAllChecksums(ctx) if err != nil { panic(err) @@ -31,7 +32,11 @@ func (k Keeper) ExportGenesis(ctx sdk.Context) types.GenesisState { // Grab code from wasmVM and add to genesis state. var genesisState types.GenesisState for _, checksum := range checksums { +<<<<<<< HEAD code, err := k.wasmVM.GetCode(wasmvmtypes.Checksum(checksum)) +======= + code, err := ibcwasm.GetVM().GetCode(checksum) +>>>>>>> 595e1a93 (Use global wasm VM instead of keeping an additional reference in keeper. (#5146)) if err != nil { panic(err) } diff --git a/modules/light-clients/08-wasm/keeper/grpc_query.go b/modules/light-clients/08-wasm/keeper/grpc_query.go index 7332246445d..44216fd2454 100644 --- a/modules/light-clients/08-wasm/keeper/grpc_query.go +++ b/modules/light-clients/08-wasm/keeper/grpc_query.go @@ -20,7 +20,7 @@ import ( var _ types.QueryServer = (*Keeper)(nil) // Code implements the Query/Code gRPC method -func (k Keeper) Code(goCtx context.Context, req *types.QueryCodeRequest) (*types.QueryCodeResponse, error) { +func (Keeper) Code(goCtx context.Context, req *types.QueryCodeRequest) (*types.QueryCodeResponse, error) { if req == nil { return nil, status.Error(codes.InvalidArgument, "empty request") } @@ -35,7 +35,7 @@ func (k Keeper) Code(goCtx context.Context, req *types.QueryCodeRequest) (*types return nil, status.Error(codes.NotFound, errorsmod.Wrap(types.ErrWasmChecksumNotFound, req.Checksum).Error()) } - code, err := k.wasmVM.GetCode(checksum) + code, err := ibcwasm.GetVM().GetCode(checksum) if err != nil { return nil, status.Error(codes.NotFound, errorsmod.Wrap(types.ErrWasmChecksumNotFound, req.Checksum).Error()) } diff --git a/modules/light-clients/08-wasm/keeper/keeper.go b/modules/light-clients/08-wasm/keeper/keeper.go index 3fb6bec81a6..927038c971c 100644 --- a/modules/light-clients/08-wasm/keeper/keeper.go +++ b/modules/light-clients/08-wasm/keeper/keeper.go @@ -26,8 +26,7 @@ type Keeper struct { // implements gRPC QueryServer interface types.QueryServer - cdc codec.BinaryCodec - wasmVM ibcwasm.WasmEngine + cdc codec.BinaryCodec clientKeeper types.ClientKeeper @@ -65,7 +64,6 @@ func NewKeeperWithVM( return Keeper{ cdc: cdc, - wasmVM: vm, clientKeeper: clientKeeper, authority: authority, } @@ -94,12 +92,16 @@ func (k Keeper) GetAuthority() string { return k.authority } +<<<<<<< HEAD func generateWasmChecksum(code []byte) []byte { hash := sha256.Sum256(code) return hash[:] } func (k Keeper) storeWasmCode(ctx sdk.Context, code []byte) ([]byte, error) { +======= +func (Keeper) storeWasmCode(ctx sdk.Context, code []byte) ([]byte, error) { +>>>>>>> 595e1a93 (Use global wasm VM instead of keeping an additional reference in keeper. (#5146)) var err error if types.IsGzip(code) { ctx.GasMeter().ConsumeGas(types.VMGasRegister.UncompressCosts(len(code)), "Uncompress gzip bytecode") @@ -122,7 +124,7 @@ func (k Keeper) storeWasmCode(ctx sdk.Context, code []byte) ([]byte, error) { // create the code in the vm ctx.GasMeter().ConsumeGas(types.VMGasRegister.CompileCosts(len(code)), "Compiling wasm bytecode") - vmChecksum, err := k.wasmVM.StoreCode(code) + vmChecksum, err := ibcwasm.GetVM().StoreCode(code) if err != nil { return nil, errorsmod.Wrap(err, "failed to store contract") } @@ -133,7 +135,7 @@ func (k Keeper) storeWasmCode(ctx sdk.Context, code []byte) ([]byte, error) { } // pin the code to the vm in-memory cache - if err := k.wasmVM.Pin(vmChecksum); err != nil { + if err := ibcwasm.GetVM().Pin(vmChecksum); err != nil { return nil, errorsmod.Wrapf(err, "failed to pin contract with checksum (%s) to vm cache", hex.EncodeToString(vmChecksum)) } diff --git a/modules/light-clients/08-wasm/keeper/msg_server.go b/modules/light-clients/08-wasm/keeper/msg_server.go index d63d5ded4bb..83ea4879202 100644 --- a/modules/light-clients/08-wasm/keeper/msg_server.go +++ b/modules/light-clients/08-wasm/keeper/msg_server.go @@ -50,7 +50,7 @@ func (k Keeper) RemoveChecksum(goCtx context.Context, msg *types.MsgRemoveChecks } // unpin the code from the vm in-memory cache - if err := k.wasmVM.Unpin(msg.Checksum); err != nil { + if err := ibcwasm.GetVM().Unpin(msg.Checksum); err != nil { return nil, errorsmod.Wrapf(err, "failed to unpin contract with checksum (%s) from vm cache", hex.EncodeToString(msg.Checksum)) } diff --git a/modules/light-clients/08-wasm/keeper/snapshotter.go b/modules/light-clients/08-wasm/keeper/snapshotter.go index 91540d27aad..bf312ef3dd3 100644 --- a/modules/light-clients/08-wasm/keeper/snapshotter.go +++ b/modules/light-clients/08-wasm/keeper/snapshotter.go @@ -14,6 +14,7 @@ import ( tmproto "github.com/cometbft/cometbft/proto/tendermint/types" + "github.com/cosmos/ibc-go/modules/light-clients/08-wasm/internal/ibcwasm" "github.com/cosmos/ibc-go/modules/light-clients/08-wasm/types" ) @@ -74,7 +75,11 @@ func (ws *WasmSnapshotter) SnapshotExtension(height uint64, payloadWriter snapsh } for _, checksum := range checksums { +<<<<<<< HEAD wasmCode, err := ws.keeper.wasmVM.GetCode(wasmvmtypes.Checksum(checksum)) +======= + wasmCode, err := ibcwasm.GetVM().GetCode(checksum) +>>>>>>> 595e1a93 (Use global wasm VM instead of keeping an additional reference in keeper. (#5146)) if err != nil { return err } @@ -113,12 +118,12 @@ func restoreV1(ctx sdk.Context, k *Keeper, compressedCode []byte) error { return errorsmod.Wrap(err, "failed to uncompress wasm code") } - checksum, err := k.wasmVM.StoreCode(wasmCode) + checksum, err := ibcwasm.GetVM().StoreCode(wasmCode) if err != nil { return errorsmod.Wrap(err, "failed to store wasm code") } - if err := k.wasmVM.Pin(checksum); err != nil { + if err := ibcwasm.GetVM().Pin(checksum); err != nil { return errorsmod.Wrapf(err, "failed to pin checksum: %s to in-memory cache", hex.EncodeToString(checksum)) } From 11b6fc58864a346e2b7f7ac9c9cedee51aff5f35 Mon Sep 17 00:00:00 2001 From: Carlos Rodriguez Date: Wed, 29 Nov 2023 21:55:25 +0100 Subject: [PATCH 2/2] fix conflicts --- modules/light-clients/08-wasm/keeper/genesis.go | 6 ------ modules/light-clients/08-wasm/keeper/keeper.go | 10 ---------- modules/light-clients/08-wasm/keeper/snapshotter.go | 6 ------ 3 files changed, 22 deletions(-) diff --git a/modules/light-clients/08-wasm/keeper/genesis.go b/modules/light-clients/08-wasm/keeper/genesis.go index 59e279e7c7a..c09dd96c254 100644 --- a/modules/light-clients/08-wasm/keeper/genesis.go +++ b/modules/light-clients/08-wasm/keeper/genesis.go @@ -1,8 +1,6 @@ package keeper import ( - wasmvmtypes "github.com/CosmWasm/wasmvm/types" - sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/ibc-go/modules/light-clients/08-wasm/internal/ibcwasm" @@ -32,11 +30,7 @@ func (Keeper) ExportGenesis(ctx sdk.Context) types.GenesisState { // Grab code from wasmVM and add to genesis state. var genesisState types.GenesisState for _, checksum := range checksums { -<<<<<<< HEAD - code, err := k.wasmVM.GetCode(wasmvmtypes.Checksum(checksum)) -======= code, err := ibcwasm.GetVM().GetCode(checksum) ->>>>>>> 595e1a93 (Use global wasm VM instead of keeping an additional reference in keeper. (#5146)) if err != nil { panic(err) } diff --git a/modules/light-clients/08-wasm/keeper/keeper.go b/modules/light-clients/08-wasm/keeper/keeper.go index 927038c971c..3b2a7b1ea6a 100644 --- a/modules/light-clients/08-wasm/keeper/keeper.go +++ b/modules/light-clients/08-wasm/keeper/keeper.go @@ -2,7 +2,6 @@ package keeper import ( "bytes" - "crypto/sha256" "encoding/hex" "errors" "fmt" @@ -92,16 +91,7 @@ func (k Keeper) GetAuthority() string { return k.authority } -<<<<<<< HEAD -func generateWasmChecksum(code []byte) []byte { - hash := sha256.Sum256(code) - return hash[:] -} - -func (k Keeper) storeWasmCode(ctx sdk.Context, code []byte) ([]byte, error) { -======= func (Keeper) storeWasmCode(ctx sdk.Context, code []byte) ([]byte, error) { ->>>>>>> 595e1a93 (Use global wasm VM instead of keeping an additional reference in keeper. (#5146)) var err error if types.IsGzip(code) { ctx.GasMeter().ConsumeGas(types.VMGasRegister.UncompressCosts(len(code)), "Uncompress gzip bytecode") diff --git a/modules/light-clients/08-wasm/keeper/snapshotter.go b/modules/light-clients/08-wasm/keeper/snapshotter.go index bf312ef3dd3..0d0eb564f0a 100644 --- a/modules/light-clients/08-wasm/keeper/snapshotter.go +++ b/modules/light-clients/08-wasm/keeper/snapshotter.go @@ -4,8 +4,6 @@ import ( "encoding/hex" "io" - wasmvmtypes "github.com/CosmWasm/wasmvm/types" - errorsmod "cosmossdk.io/errors" snapshot "cosmossdk.io/store/snapshots/types" storetypes "cosmossdk.io/store/types" @@ -75,11 +73,7 @@ func (ws *WasmSnapshotter) SnapshotExtension(height uint64, payloadWriter snapsh } for _, checksum := range checksums { -<<<<<<< HEAD - wasmCode, err := ws.keeper.wasmVM.GetCode(wasmvmtypes.Checksum(checksum)) -======= wasmCode, err := ibcwasm.GetVM().GetCode(checksum) ->>>>>>> 595e1a93 (Use global wasm VM instead of keeping an additional reference in keeper. (#5146)) if err != nil { return err }