mirror of
https://github.com/planetmint/planetmint-go.git
synced 2025-06-02 04:06:38 +00:00

* add mint address to config file * ignite scaffold type mint-request beneficiary amount liquid-tx-hash --module dao * add mintrequest stores * rename mint_request.go * add unit tests for mint request store * ignite scaffold message mint-token mint-request:MintRequest --module dao * add ante handler for mint address * add msg validation for mint request * fix staticcheck error * ignite scaffold query get-mint-requests-by-hash hash --response mint-request:MintRequest --module dao * add a query for mint request and additional validation for msg server * add mock for mint unit testing * add unit test for mint token msg server * add unit tests for query mint requests by hash * ignite scaffold query mint-requests-by-address address --response mint-requests:MintRequests --module dao * implement query mint requests by address and unit tests * add e2e test for token mint --------- Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com>
44 lines
1.5 KiB
Go
44 lines
1.5 KiB
Go
package keeper
|
|
|
|
import (
|
|
"context"
|
|
|
|
errorsmod "cosmossdk.io/errors"
|
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
|
"github.com/planetmint/planetmint-go/config"
|
|
"github.com/planetmint/planetmint-go/x/dao/types"
|
|
)
|
|
|
|
func (k msgServer) MintToken(goCtx context.Context, msg *types.MsgMintToken) (*types.MsgMintTokenResponse, error) {
|
|
ctx := sdk.UnwrapSDKContext(goCtx)
|
|
cfg := config.GetConfig()
|
|
|
|
_, found := k.GetMintRequestByHash(ctx, msg.GetMintRequest().GetLiquidTxHash())
|
|
if found {
|
|
return nil, errorsmod.Wrapf(types.ErrAlreadyMinted, "liquid tx hash %s has already been minted", msg.GetMintRequest().GetLiquidTxHash())
|
|
}
|
|
|
|
amt := msg.GetMintRequest().GetAmount()
|
|
beneficiary := msg.GetMintRequest().GetBeneficiary()
|
|
beneficiaryAddr, err := sdk.AccAddressFromBech32(beneficiary)
|
|
if err != nil {
|
|
return nil, errorsmod.Wrapf(types.ErrInvalidAddress, "for provided address %s", beneficiary)
|
|
}
|
|
|
|
coin := sdk.NewCoin(cfg.TokenDenom, sdk.NewIntFromUint64(amt))
|
|
coins := sdk.NewCoins(coin)
|
|
err = k.bankKeeper.MintCoins(ctx, types.ModuleName, coins)
|
|
if err != nil {
|
|
return nil, errorsmod.Wrapf(types.ErrMintFailed, "error while minting %v token for address %s", amt, beneficiary)
|
|
}
|
|
|
|
err = k.bankKeeper.SendCoinsFromModuleToAccount(ctx, types.ModuleName, beneficiaryAddr, coins)
|
|
if err != nil {
|
|
return nil, errorsmod.Wrapf(types.ErrTransferFailed, "error while transferring %v token to address %s", amt, beneficiary)
|
|
}
|
|
|
|
k.StoreMintRequest(ctx, *msg.MintRequest)
|
|
|
|
return &types.MsgMintTokenResponse{}, nil
|
|
}
|