mirror of
https://github.com/planetmint/planetmint-go.git
synced 2025-11-25 23:15:45 +00:00
* ignite scaffold map redeem-claim amount issued:bool --module dao --index beneficiary,liquid-tx-hash * revert: remove autogenerated delete redeem claim logic * fix: replace deprecated autogenerated sdkerrors with errorsmod * refactor: rename issued to confirmed on redeem claim * feat: add claim address param * test: add test for restricted msg UpdateRedeemClaim * refactor: update redeem claim key creation and messages * feat: add SendUpdateRedeemCLaim to util * feat: add RedeemClaimDecorator for ante package * ignite scaffold message confirm-redeem-claim id:uint beneficiary:string --module dao * feat: add handleConfirmRedeemClaim to ante handler * feat: add handleUpdateRedeemClaim to ante handler * feat: implement ConfirmRedeemClaim msg handler * test: add redeem claim test and adjust e2e test suite * fix: make use of uint to rddl string util in CreateRedeemClaim * fix: linter and staticcheck errors * ignite scaffold query redeem-claim-by-liquid-tx-hash liquid-tx-hash --response redeem-claim:RedeemClaim --module dao * feat: add RedeemClaimByLiquidTXHash store capabilities * test: add QueryRedeemClaimByLiquidTxHash to e2e test suite * feat: add RedeemClaimDecorator to ante handler chain * fix: remove redundant planetmint-go from service path * fix: linter and staticcheck errors * fix: go vet errors * fix: remove unused autogenerated simulation * fix: broken simulation * fix: openapi.yml * revert: remove autogenerated redundant test file that causes data race on pipeline * feat: burn claim on CreateRedeemClaim * fix: linter error * test: fix mock bankkeeper for msg server test * fix: reissuance test if statement * chore: removed TODO comment * fix: typo in redeem claim error msg * revert: remove autogenerated genesis state * fix: dao module simulation * revert: remove unused function * fix: linter errors * fix: linter error --------- Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com>
114 lines
3.1 KiB
Go
114 lines
3.1 KiB
Go
package keeper
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
|
|
errorsmod "cosmossdk.io/errors"
|
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
|
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
|
|
"github.com/planetmint/planetmint-go/util"
|
|
"github.com/planetmint/planetmint-go/x/dao/types"
|
|
)
|
|
|
|
var (
|
|
createRedeemClaimTag = "create redeem claim: "
|
|
)
|
|
|
|
func (k msgServer) CreateRedeemClaim(goCtx context.Context, msg *types.MsgCreateRedeemClaim) (*types.MsgCreateRedeemClaimResponse, error) {
|
|
ctx := sdk.UnwrapSDKContext(goCtx)
|
|
params := k.GetParams(ctx)
|
|
|
|
var redeemClaim = types.RedeemClaim{
|
|
Creator: msg.Creator,
|
|
Beneficiary: msg.Beneficiary,
|
|
Amount: msg.Amount,
|
|
}
|
|
|
|
err := k.burnClaimAmount(ctx, sdk.MustAccAddressFromBech32(msg.Creator), msg.Amount)
|
|
if err != nil {
|
|
util.GetAppLogger().Error(ctx, createRedeemClaimTag+"could not burn claim")
|
|
}
|
|
|
|
id := k.CreateNewRedeemClaim(
|
|
ctx,
|
|
redeemClaim,
|
|
)
|
|
|
|
if util.IsValidatorBlockProposer(ctx, ctx.BlockHeader().ProposerAddress) {
|
|
util.GetAppLogger().Info(ctx, fmt.Sprintf("Issuing RDDL claim: %s/%d", msg.Beneficiary, id))
|
|
txID, err := util.DistributeAsset(msg.Beneficiary, util.UintValueToRDDLTokenString(msg.Amount), params.ReissuanceAsset)
|
|
if err != nil {
|
|
util.GetAppLogger().Error(ctx, createRedeemClaimTag+"could not issue claim to beneficiary: "+msg.GetBeneficiary())
|
|
}
|
|
util.SendUpdateRedeemClaim(goCtx, msg.Beneficiary, id, txID)
|
|
}
|
|
|
|
return &types.MsgCreateRedeemClaimResponse{}, nil
|
|
}
|
|
|
|
func (k msgServer) UpdateRedeemClaim(goCtx context.Context, msg *types.MsgUpdateRedeemClaim) (*types.MsgUpdateRedeemClaimResponse, error) {
|
|
ctx := sdk.UnwrapSDKContext(goCtx)
|
|
|
|
valFound, isFound := k.GetRedeemClaim(
|
|
ctx,
|
|
msg.Beneficiary,
|
|
msg.Id,
|
|
)
|
|
if !isFound {
|
|
return nil, errorsmod.Wrap(sdkerrors.ErrKeyNotFound, "index not set")
|
|
}
|
|
|
|
var redeemClaim = types.RedeemClaim{
|
|
Creator: valFound.Creator,
|
|
Beneficiary: msg.Beneficiary,
|
|
LiquidTxHash: msg.LiquidTxHash,
|
|
Amount: valFound.Amount,
|
|
Id: valFound.Id,
|
|
}
|
|
|
|
k.SetRedeemClaim(ctx, redeemClaim)
|
|
|
|
return &types.MsgUpdateRedeemClaimResponse{}, nil
|
|
}
|
|
|
|
func (k msgServer) ConfirmRedeemClaim(goCtx context.Context, msg *types.MsgConfirmRedeemClaim) (*types.MsgConfirmRedeemClaimResponse, error) {
|
|
ctx := sdk.UnwrapSDKContext(goCtx)
|
|
|
|
valFound, isFound := k.GetRedeemClaim(
|
|
ctx,
|
|
msg.Beneficiary,
|
|
msg.Id,
|
|
)
|
|
if !isFound {
|
|
return nil, errorsmod.Wrap(sdkerrors.ErrKeyNotFound, "index not set")
|
|
}
|
|
|
|
var redeemClaim = types.RedeemClaim{
|
|
Creator: valFound.Creator,
|
|
Beneficiary: msg.Beneficiary,
|
|
LiquidTxHash: valFound.LiquidTxHash,
|
|
Amount: valFound.Amount,
|
|
Id: valFound.Id,
|
|
Confirmed: true,
|
|
}
|
|
|
|
k.SetRedeemClaim(ctx, redeemClaim)
|
|
|
|
return &types.MsgConfirmRedeemClaimResponse{}, nil
|
|
}
|
|
|
|
func (k msgServer) burnClaimAmount(ctx sdk.Context, addr sdk.AccAddress, amount uint64) (err error) {
|
|
params := k.GetParams(ctx)
|
|
burnCoins := sdk.NewCoins(sdk.NewCoin(params.ClaimDenom, sdk.NewIntFromUint64(amount)))
|
|
err = k.bankKeeper.SendCoinsFromAccountToModule(ctx, addr, types.ModuleName, burnCoins)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
err = k.bankKeeper.BurnCoins(ctx, types.ModuleName, burnCoins)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return
|
|
}
|