Wire up proposal handlers

This commit is contained in:
Ethan Frey
2022-01-21 14:37:53 +01:00
parent d227112cc3
commit 53a44eb4d7
3 changed files with 49 additions and 48 deletions

View File

@@ -17,6 +17,7 @@ type decoratedKeeper interface {
pinCode(ctx sdk.Context, codeID uint64) error
unpinCode(ctx sdk.Context, codeID uint64) error
execute(ctx sdk.Context, contractAddress sdk.AccAddress, caller sdk.AccAddress, msg []byte, coins sdk.Coins) ([]byte, error)
Sudo(ctx sdk.Context, contractAddress sdk.AccAddress, msg []byte) ([]byte, error)
setContractInfoExtension(ctx sdk.Context, contract sdk.AccAddress, extra types.ContractInfoExtension) error
}
@@ -53,6 +54,10 @@ func (p PermissionedKeeper) Migrate(ctx sdk.Context, contractAddress sdk.AccAddr
return p.nested.migrate(ctx, contractAddress, caller, newCodeID, msg, p.authZPolicy)
}
func (p PermissionedKeeper) Sudo(ctx sdk.Context, contractAddress sdk.AccAddress, msg []byte) ([]byte, error) {
return p.nested.Sudo(ctx, contractAddress, msg)
}
func (p PermissionedKeeper) UpdateContractAdmin(ctx sdk.Context, contractAddress sdk.AccAddress, caller sdk.AccAddress, newAdmin sdk.AccAddress) error {
return p.nested.setContractAdmin(ctx, contractAddress, caller, newAdmin, p.authZPolicy)
}

View File

@@ -2,8 +2,6 @@ package keeper
import (
"encoding/hex"
"fmt"
sdk "github.com/cosmos/cosmos-sdk/types"
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
govtypes "github.com/cosmos/cosmos-sdk/x/gov/types"
@@ -121,55 +119,50 @@ func handleMigrateProposal(ctx sdk.Context, k types.ContractOpsKeeper, p types.M
}
func handleSudoProposal(ctx sdk.Context, k types.ContractOpsKeeper, p types.SudoContractProposal) error {
return fmt.Errorf("Not implemented")
//if err := p.ValidateBasic(); err != nil {
// return err
//}
//
//contractAddr, err := sdk.AccAddressFromBech32(p.Contract)
//if err != nil {
// return sdkerrors.Wrap(err, "contract")
//}
//runAsAddr, err := sdk.AccAddressFromBech32(p.RunAs)
//if err != nil {
// return sdkerrors.Wrap(err, "run as address")
//}
//data, err := k.Migrate(ctx, contractAddr, runAsAddr, p.CodeID, p.Msg)
//if err != nil {
// return err
//}
//
//ctx.EventManager().EmitEvent(sdk.NewEvent(
// types.EventTypeGovContractResult,
// sdk.NewAttribute(types.AttributeKeyResultDataHex, hex.EncodeToString(data)),
//))
//return nil
if err := p.ValidateBasic(); err != nil {
return err
}
contractAddr, err := sdk.AccAddressFromBech32(p.Contract)
if err != nil {
return sdkerrors.Wrap(err, "contract")
}
data, err := k.Sudo(ctx, contractAddr, p.Msg)
if err != nil {
return err
}
ctx.EventManager().EmitEvent(sdk.NewEvent(
types.EventTypeGovContractResult,
sdk.NewAttribute(types.AttributeKeyResultDataHex, hex.EncodeToString(data)),
))
return nil
}
func handleExecuteProposal(ctx sdk.Context, k types.ContractOpsKeeper, p types.ExecuteContractProposal) error {
return fmt.Errorf("Not implemented")
//if err := p.ValidateBasic(); err != nil {
// return err
//}
//
//contractAddr, err := sdk.AccAddressFromBech32(p.Contract)
//if err != nil {
// return sdkerrors.Wrap(err, "contract")
//}
//runAsAddr, err := sdk.AccAddressFromBech32(p.RunAs)
//if err != nil {
// return sdkerrors.Wrap(err, "run as address")
//}
//data, err := k.Migrate(ctx, contractAddr, runAsAddr, p.CodeID, p.Msg)
//if err != nil {
// return err
//}
//
//ctx.EventManager().EmitEvent(sdk.NewEvent(
// types.EventTypeGovContractResult,
// sdk.NewAttribute(types.AttributeKeyResultDataHex, hex.EncodeToString(data)),
//))
//return nil
if err := p.ValidateBasic(); err != nil {
return err
}
contractAddr, err := sdk.AccAddressFromBech32(p.Contract)
if err != nil {
return sdkerrors.Wrap(err, "contract")
}
runAsAddr, err := sdk.AccAddressFromBech32(p.RunAs)
if err != nil {
return sdkerrors.Wrap(err, "run as address")
}
// we currently don't support sending tokens as part of an execute proposal. should we? from which account?
data, err := k.Execute(ctx, contractAddr, runAsAddr, p.Msg, nil)
if err != nil {
return err
}
ctx.EventManager().EmitEvent(sdk.NewEvent(
types.EventTypeGovContractResult,
sdk.NewAttribute(types.AttributeKeyResultDataHex, hex.EncodeToString(data)),
))
return nil
}
func handleUpdateAdminProposal(ctx sdk.Context, k types.ContractOpsKeeper, p types.UpdateAdminProposal) error {

View File

@@ -36,6 +36,9 @@ type ContractOpsKeeper interface {
// Migrate allows to upgrade a contract to a new code with data migration.
Migrate(ctx sdk.Context, contractAddress sdk.AccAddress, caller sdk.AccAddress, newCodeID uint64, msg []byte) ([]byte, error)
// Sudo allows to call privileged entry point of a contract.
Sudo(ctx sdk.Context, contractAddress sdk.AccAddress, msg []byte) ([]byte, error)
// UpdateContractAdmin sets the admin value on the ContractInfo. It must be a valid address (use ClearContractAdmin to remove it)
UpdateContractAdmin(ctx sdk.Context, contractAddress sdk.AccAddress, caller sdk.AccAddress, newAdmin sdk.AccAddress) error