mirror of
https://github.com/planetmint/planetmint-go.git
synced 2025-11-27 15:53:41 +00:00
feat: implement burn-consumption
Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com>
This commit is contained in:
parent
7b658121ee
commit
20d5c24fe0
@ -31,16 +31,21 @@ func (cm CheckMachineDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simulate
|
|||||||
if ok {
|
if ok {
|
||||||
ctx, err = cm.handleAttestMachine(ctx, attestMsg)
|
ctx, err = cm.handleAttestMachine(ctx, attestMsg)
|
||||||
}
|
}
|
||||||
case "planetmintgo.dao.MsgReportPoPResult":
|
case "/planetmintgo.dao.MsgReportPoPResult":
|
||||||
popMsg, ok := msg.(*daotypes.MsgReportPopResult)
|
popMsg, ok := msg.(*daotypes.MsgReportPopResult)
|
||||||
if ok {
|
if ok {
|
||||||
ctx, err = cm.handlePopResult(ctx, popMsg)
|
ctx, err = cm.handlePopResult(ctx, popMsg)
|
||||||
}
|
}
|
||||||
case "planetmintgo.machine.MsgMintProduction":
|
case "/planetmintgo.machine.MsgMintProduction":
|
||||||
mintProdMsg, ok := msg.(*machinetypes.MsgMintProduction)
|
mintProdMsg, ok := msg.(*machinetypes.MsgMintProduction)
|
||||||
if ok {
|
if ok {
|
||||||
ctx, err = cm.handleMintProduction(ctx, mintProdMsg)
|
ctx, err = cm.handleMintProduction(ctx, mintProdMsg)
|
||||||
}
|
}
|
||||||
|
case "/planetmintgo.machine.MsgBurnConsumption":
|
||||||
|
burnConsMsg, ok := msg.(*machinetypes.MsgBurnConsumption)
|
||||||
|
if ok {
|
||||||
|
ctx, err = cm.handleBurnConsumption(ctx, burnConsMsg)
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
@ -90,3 +95,11 @@ func (cm CheckMachineDecorator) handleMintProduction(ctx sdk.Context, mintProdMs
|
|||||||
}
|
}
|
||||||
return ctx, nil
|
return ctx, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (cm CheckMachineDecorator) handleBurnConsumption(ctx sdk.Context, burnConsMsg *machinetypes.MsgBurnConsumption) (sdk.Context, error) {
|
||||||
|
_, found := cm.mk.GetMachineIndexByAddress(ctx, burnConsMsg.GetCreator())
|
||||||
|
if !found {
|
||||||
|
return ctx, errorsmod.Wrapf(machinetypes.ErrMachineNotFound, ErrorAnteContext)
|
||||||
|
}
|
||||||
|
return ctx, nil
|
||||||
|
}
|
||||||
|
|||||||
@ -3,6 +3,7 @@ package keeper
|
|||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
|
||||||
|
errorsmod "cosmossdk.io/errors"
|
||||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||||
"github.com/planetmint/planetmint-go/x/machine/types"
|
"github.com/planetmint/planetmint-go/x/machine/types"
|
||||||
)
|
)
|
||||||
@ -10,8 +11,20 @@ import (
|
|||||||
func (k msgServer) BurnConsumption(goCtx context.Context, msg *types.MsgBurnConsumption) (*types.MsgBurnConsumptionResponse, error) {
|
func (k msgServer) BurnConsumption(goCtx context.Context, msg *types.MsgBurnConsumption) (*types.MsgBurnConsumptionResponse, error) {
|
||||||
ctx := sdk.UnwrapSDKContext(goCtx)
|
ctx := sdk.UnwrapSDKContext(goCtx)
|
||||||
|
|
||||||
// TODO: Handling the message
|
addr, err := sdk.AccAddressFromBech32(msg.GetCreator())
|
||||||
_ = ctx
|
if err != nil {
|
||||||
|
return nil, errorsmod.Wrapf(types.ErrInvalidAddress, "invalid address: %s", msg.GetCreator())
|
||||||
|
}
|
||||||
|
|
||||||
|
err = k.bankKeeper.SendCoinsFromAccountToModule(ctx, addr, types.ModuleName, msg.GetConsumption())
|
||||||
|
if err != nil {
|
||||||
|
return nil, errorsmod.Wrapf(types.ErrTransferFailed, "error while transferring %v consumption from address %s", msg.GetConsumption(), msg.GetCreator())
|
||||||
|
}
|
||||||
|
|
||||||
|
err = k.bankKeeper.BurnCoins(ctx, types.ModuleName, msg.GetConsumption())
|
||||||
|
if err != nil {
|
||||||
|
return nil, errorsmod.Wrapf(types.ErrBurnFailed, "error while burning consumption %v for address %s", msg.GetConsumption(), msg.GetCreator())
|
||||||
|
}
|
||||||
|
|
||||||
return &types.MsgBurnConsumptionResponse{}, nil
|
return &types.MsgBurnConsumptionResponse{}, nil
|
||||||
}
|
}
|
||||||
|
|||||||
@ -100,6 +100,20 @@ func (mr *MockBankKeeperMockRecorder) MintCoins(ctx, moduleName, amt interface{}
|
|||||||
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MintCoins", reflect.TypeOf((*MockBankKeeper)(nil).MintCoins), ctx, moduleName, amt)
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MintCoins", reflect.TypeOf((*MockBankKeeper)(nil).MintCoins), ctx, moduleName, amt)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SendCoinsFromAccountToModule mocks base method.
|
||||||
|
func (m *MockBankKeeper) SendCoinsFromAccountToModule(ctx types.Context, senderAddr types.AccAddress, recipientModule string, amt types.Coins) error {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "SendCoinsFromAccountToModule", ctx, senderAddr, recipientModule, amt)
|
||||||
|
ret0, _ := ret[0].(error)
|
||||||
|
return ret0
|
||||||
|
}
|
||||||
|
|
||||||
|
// SendCoinsFromAccountToModule indicates an expected call of SendCoinsFromAccountToModule.
|
||||||
|
func (mr *MockBankKeeperMockRecorder) SendCoinsFromAccountToModule(ctx, senderAddr, recipientModule, amt interface{}) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SendCoinsFromAccountToModule", reflect.TypeOf((*MockBankKeeper)(nil).SendCoinsFromAccountToModule), ctx, senderAddr, recipientModule, amt)
|
||||||
|
}
|
||||||
|
|
||||||
// SendCoinsFromModuleToAccount mocks base method.
|
// SendCoinsFromModuleToAccount mocks base method.
|
||||||
func (m *MockBankKeeper) SendCoinsFromModuleToAccount(ctx types.Context, senderModule string, recipientAddr types.AccAddress, amt types.Coins) error {
|
func (m *MockBankKeeper) SendCoinsFromModuleToAccount(ctx types.Context, senderModule string, recipientAddr types.AccAddress, amt types.Coins) error {
|
||||||
m.ctrl.T.Helper()
|
m.ctrl.T.Helper()
|
||||||
|
|||||||
@ -24,4 +24,5 @@ var (
|
|||||||
ErrInvalidAddress = errorsmod.Register(ModuleName, 16, "invalid address")
|
ErrInvalidAddress = errorsmod.Register(ModuleName, 16, "invalid address")
|
||||||
ErrTransferFailed = errorsmod.Register(ModuleName, 17, "transfer failed")
|
ErrTransferFailed = errorsmod.Register(ModuleName, 17, "transfer failed")
|
||||||
ErrMintFailed = errorsmod.Register(ModuleName, 18, "minting failed")
|
ErrMintFailed = errorsmod.Register(ModuleName, 18, "minting failed")
|
||||||
|
ErrBurnFailed = errorsmod.Register(ModuleName, 19, "burning failed")
|
||||||
)
|
)
|
||||||
|
|||||||
@ -17,5 +17,6 @@ type BankKeeper interface {
|
|||||||
MintCoins(ctx sdk.Context, moduleName string, amt sdk.Coins) error
|
MintCoins(ctx sdk.Context, moduleName string, amt sdk.Coins) error
|
||||||
BurnCoins(ctx sdk.Context, moduleName string, amt sdk.Coins) error
|
BurnCoins(ctx sdk.Context, moduleName string, amt sdk.Coins) error
|
||||||
SendCoinsFromModuleToAccount(ctx sdk.Context, senderModule string, recipientAddr sdk.AccAddress, amt sdk.Coins) error
|
SendCoinsFromModuleToAccount(ctx sdk.Context, senderModule string, recipientAddr sdk.AccAddress, amt sdk.Coins) error
|
||||||
|
SendCoinsFromAccountToModule(ctx sdk.Context, senderAddr sdk.AccAddress, recipientModule string, amt sdk.Coins) error
|
||||||
// Methods imported from bank should be defined here
|
// Methods imported from bank should be defined here
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user