mirror of
https://github.com/planetmint/planetmint-go.git
synced 2025-03-30 15:08:28 +00:00

* refactor(clients): into sub-packages * refactor(clients): improve readability - add some error cases * refactor(client): align naming with rddl claim client - rddl claim client is `RCClient` Signed-off-by: Julian Strobl <jmastr@mailbox.org>
71 lines
3.0 KiB
Go
71 lines
3.0 KiB
Go
package keeper
|
|
|
|
import (
|
|
"context"
|
|
|
|
errorsmod "cosmossdk.io/errors"
|
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
|
"github.com/planetmint/planetmint-go/clients/shamir/coordinator"
|
|
"github.com/planetmint/planetmint-go/errormsg"
|
|
"github.com/planetmint/planetmint-go/util"
|
|
"github.com/planetmint/planetmint-go/x/dao/types"
|
|
)
|
|
|
|
var (
|
|
distributionRequestTag = "distribution request: "
|
|
)
|
|
|
|
func (k msgServer) DistributionRequest(goCtx context.Context, msg *types.MsgDistributionRequest) (*types.MsgDistributionRequestResponse, error) {
|
|
ctx := sdk.UnwrapSDKContext(goCtx)
|
|
|
|
lastReissuance, found := k.GetLastReissuance(ctx)
|
|
if !found {
|
|
return nil, errorsmod.Wrap(types.ErrReissuanceNotFound, "for last reissuance height")
|
|
}
|
|
|
|
if lastReissuance.TxID == "" {
|
|
return nil, errorsmod.Wrap(types.ErrReissuanceTxIDMissing, "for last reissuance height")
|
|
}
|
|
|
|
util.GetAppLogger().Info(ctx, distributionRequestTag+"storing distribution: "+msg.GetDistribution().String())
|
|
k.StoreDistributionOrder(ctx, *msg.GetDistribution())
|
|
|
|
validatorIdentity, err := util.GetValidatorCometBFTIdentity(ctx, k.RootDir)
|
|
if err != nil {
|
|
util.GetAppLogger().Error(ctx, err, distributionRequestTag+errormsg.CouldNotGetValidatorIdentity)
|
|
return nil, err
|
|
}
|
|
if msg.Distribution.GetProposer() != validatorIdentity {
|
|
util.GetAppLogger().Info(ctx, distributionRequestTag+"Not the proposer. proposer: %s validator identity: %s", msg.Distribution.GetProposer(), validatorIdentity)
|
|
return &types.MsgDistributionRequestResponse{}, nil
|
|
}
|
|
|
|
reissuanceAsset := k.GetParams(ctx).ReissuanceAsset
|
|
util.GetAppLogger().Info(ctx, distributionRequestTag+"entering asset distribution mode")
|
|
// issue 5 distributions:
|
|
earlyInvestorTx, err := coordinator.SendTokens(goCtx, msg.Distribution.EarlyInvAddr, msg.Distribution.EarlyInvAmount, reissuanceAsset)
|
|
if err != nil {
|
|
util.GetAppLogger().Error(ctx, err, distributionRequestTag+"could not distribute asset to early investors")
|
|
}
|
|
investorTx, err := coordinator.SendTokens(goCtx, msg.Distribution.InvestorAddr, msg.Distribution.InvestorAmount, reissuanceAsset)
|
|
if err != nil {
|
|
util.GetAppLogger().Error(ctx, err, distributionRequestTag+"could not distribute asset to investors")
|
|
}
|
|
strategicTx, err := coordinator.SendTokens(goCtx, msg.Distribution.StrategicAddr, msg.Distribution.StrategicAmount, reissuanceAsset)
|
|
if err != nil {
|
|
util.GetAppLogger().Error(ctx, err, distributionRequestTag+"could not distribute asset to strategic investments")
|
|
}
|
|
popTx, err := coordinator.SendTokens(goCtx, msg.Distribution.PopAddr, msg.Distribution.PopAmount, reissuanceAsset)
|
|
if err != nil {
|
|
util.GetAppLogger().Error(ctx, err, distributionRequestTag+"could not distribute asset to PoP")
|
|
}
|
|
daoTx, err := coordinator.SendTokens(goCtx, msg.Distribution.DaoAddr, msg.Distribution.DaoAmount, reissuanceAsset)
|
|
if err != nil {
|
|
util.GetAppLogger().Error(ctx, err, distributionRequestTag+"could not distribute asset to DAO")
|
|
}
|
|
|
|
util.SendDistributionResult(goCtx, msg.Distribution.LastPop, daoTx, investorTx, popTx, earlyInvestorTx, strategicTx)
|
|
|
|
return &types.MsgDistributionRequestResponse{}, nil
|
|
}
|