Some checks failed
CodeQL / Analyze (push) Waiting to run
Docker Build & Push Simapp (main) / docker-build (push) Waiting to run
golangci-lint / lint (push) Waiting to run
Tests / Code Coverage / build (amd64) (push) Waiting to run
Tests / Code Coverage / build (arm64) (push) Waiting to run
Tests / Code Coverage / unit-tests (map[additional-args:-tags="test_e2e" name:e2e path:./e2e]) (push) Waiting to run
Tests / Code Coverage / unit-tests (map[name:08-wasm path:./modules/light-clients/08-wasm]) (push) Waiting to run
Tests / Code Coverage / unit-tests (map[name:ibc-go path:.]) (push) Waiting to run
Deploy to GitHub Pages / Deploy to GitHub Pages (push) Has been cancelled
Buf-Push / push (push) Has been cancelled
79 lines
2.4 KiB
Go
79 lines
2.4 KiB
Go
package keeper
|
|
|
|
import (
|
|
"context"
|
|
"encoding/hex"
|
|
|
|
errorsmod "cosmossdk.io/errors"
|
|
|
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
|
|
|
"github.com/cosmos/ibc-go/modules/light-clients/08-wasm/v10/types"
|
|
ibcerrors "github.com/cosmos/ibc-go/v10/modules/core/errors"
|
|
)
|
|
|
|
var _ types.MsgServer = (*Keeper)(nil)
|
|
|
|
// StoreCode defines a rpc handler method for MsgStoreCode
|
|
func (k Keeper) StoreCode(goCtx context.Context, msg *types.MsgStoreCode) (*types.MsgStoreCodeResponse, error) {
|
|
if k.GetAuthority() != msg.Signer {
|
|
return nil, errorsmod.Wrapf(ibcerrors.ErrUnauthorized, "expected %s, got %s", k.GetAuthority(), msg.Signer)
|
|
}
|
|
|
|
ctx := sdk.UnwrapSDKContext(goCtx)
|
|
checksum, err := k.storeWasmCode(ctx, msg.WasmByteCode, k.GetVM().StoreCode)
|
|
if err != nil {
|
|
return nil, errorsmod.Wrap(err, "failed to store wasm bytecode")
|
|
}
|
|
|
|
emitStoreWasmCodeEvent(ctx, checksum)
|
|
|
|
return &types.MsgStoreCodeResponse{
|
|
Checksum: checksum,
|
|
}, nil
|
|
}
|
|
|
|
// RemoveChecksum defines a rpc handler method for MsgRemoveChecksum
|
|
func (k Keeper) RemoveChecksum(goCtx context.Context, msg *types.MsgRemoveChecksum) (*types.MsgRemoveChecksumResponse,
|
|
error,
|
|
) {
|
|
if k.GetAuthority() != msg.Signer {
|
|
return nil, errorsmod.Wrapf(ibcerrors.ErrUnauthorized, "expected %s, got %s", k.GetAuthority(), msg.Signer)
|
|
}
|
|
|
|
ctx := sdk.UnwrapSDKContext(goCtx)
|
|
|
|
if !k.HasChecksum(ctx, msg.Checksum) {
|
|
return nil, types.ErrWasmChecksumNotFound
|
|
}
|
|
|
|
err := k.GetChecksums().Remove(goCtx, msg.Checksum)
|
|
if err != nil {
|
|
return nil, errorsmod.Wrap(err, "failed to remove checksum")
|
|
}
|
|
|
|
// unpin the code from the vm in-memory cache
|
|
if err := k.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))
|
|
}
|
|
|
|
return &types.MsgRemoveChecksumResponse{}, nil
|
|
}
|
|
|
|
// MigrateContract defines a rpc handler method for MsgMigrateContract
|
|
func (k Keeper) MigrateContract(goCtx context.Context, msg *types.MsgMigrateContract) (*types.MsgMigrateContractResponse, error) {
|
|
if k.GetAuthority() != msg.Signer {
|
|
return nil, errorsmod.Wrapf(ibcerrors.ErrUnauthorized, "expected %s, got %s", k.GetAuthority(), msg.Signer)
|
|
}
|
|
|
|
ctx := sdk.UnwrapSDKContext(goCtx)
|
|
|
|
err := k.migrateContractCode(ctx, msg.ClientId, msg.Checksum, msg.Msg)
|
|
if err != nil {
|
|
return nil, errorsmod.Wrap(err, "failed to migrate contract")
|
|
}
|
|
|
|
// event emission is handled in migrateContractCode
|
|
|
|
return &types.MsgMigrateContractResponse{}, nil
|
|
}
|