feat: implement mint-production

Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com>
This commit is contained in:
Lorenz Herzberger 2024-08-05 15:16:09 +02:00
parent 6a53c4e3f2
commit c473ccc252
No known key found for this signature in database
GPG Key ID: FA5EE906EB55316A
4 changed files with 31 additions and 2 deletions

View File

@ -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) MintProduction(goCtx context.Context, msg *types.MsgMintProduction) (*types.MsgMintProductionResponse, error) { func (k msgServer) MintProduction(goCtx context.Context, msg *types.MsgMintProduction) (*types.MsgMintProductionResponse, 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.MintCoins(ctx, types.ModuleName, msg.GetProduction())
if err != nil {
return nil, errorsmod.Wrapf(types.ErrMintFailed, "error while minting production %v for address %s", msg.GetProduction(), msg.GetCreator())
}
err = k.bankKeeper.SendCoinsFromModuleToAccount(ctx, types.ModuleName, addr, msg.GetProduction())
if err != nil {
return nil, errorsmod.Wrapf(types.ErrTransferFailed, "error while transferring %v production to address %s", msg.GetProduction(), msg.GetCreator())
}
return &types.MsgMintProductionResponse{}, nil return &types.MsgMintProductionResponse{}, nil
} }

View File

@ -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)
} }
// SendCoinsFromModuleToAccount mocks base method.
func (m *MockBankKeeper) SendCoinsFromModuleToAccount(ctx types.Context, senderModule string, recipientAddr types.AccAddress, amt types.Coins) error {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "SendCoinsFromModuleToAccount", ctx, senderModule, recipientAddr, amt)
ret0, _ := ret[0].(error)
return ret0
}
// SendCoinsFromModuleToAccount indicates an expected call of SendCoinsFromModuleToAccount.
func (mr *MockBankKeeperMockRecorder) SendCoinsFromModuleToAccount(ctx, senderModule, recipientAddr, amt interface{}) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SendCoinsFromModuleToAccount", reflect.TypeOf((*MockBankKeeper)(nil).SendCoinsFromModuleToAccount), ctx, senderModule, recipientAddr, amt)
}
// SpendableCoins mocks base method. // SpendableCoins mocks base method.
func (m *MockBankKeeper) SpendableCoins(ctx types.Context, addr types.AccAddress) types.Coins { func (m *MockBankKeeper) SpendableCoins(ctx types.Context, addr types.AccAddress) types.Coins {
m.ctrl.T.Helper() m.ctrl.T.Helper()

View File

@ -23,4 +23,5 @@ var (
ErrAssetRegistryRepsonse = errorsmod.Register(ModuleName, 15, "request response issue") ErrAssetRegistryRepsonse = errorsmod.Register(ModuleName, 15, "request response issue")
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")
) )

View File

@ -16,5 +16,6 @@ type BankKeeper interface {
SpendableCoins(ctx sdk.Context, addr sdk.AccAddress) sdk.Coins SpendableCoins(ctx sdk.Context, addr sdk.AccAddress) sdk.Coins
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
// Methods imported from bank should be defined here // Methods imported from bank should be defined here
} }