| 89 | } |
| 90 | |
| 91 | func (k msgServer) Close(goCtx context.Context, msg *types.MsgClose) (*types.MsgCloseResponse, error) { |
| 92 | ctx := sdk.UnwrapSDKContext(goCtx) |
| 93 | |
| 94 | mtp, err := k.GetMTP(ctx, msg.Signer, msg.Id) |
| 95 | if err != nil { |
| 96 | return nil, err |
| 97 | } |
| 98 | |
| 99 | var closedMtp *types.MTP |
| 100 | var repayAmount sdk.Uint |
| 101 | switch mtp.Position { |
| 102 | case types.Position_LONG: |
| 103 | closedMtp, repayAmount, err = k.CloseLong(ctx, msg) |
| 104 | if err != nil { |
| 105 | return nil, err |
| 106 | } |
| 107 | default: |
| 108 | return nil, sdkerrors.Wrap(types.ErrInvalidPosition, mtp.Position.String()) |
| 109 | } |
| 110 | |
| 111 | ctx.EventManager().EmitEvent(sdk.NewEvent(types.EventClose, |
| 112 | sdk.NewAttribute("id", strconv.FormatInt(int64(closedMtp.Id), 10)), |
| 113 | sdk.NewAttribute("position", closedMtp.Position.String()), |
| 114 | sdk.NewAttribute("address", closedMtp.Address), |
| 115 | sdk.NewAttribute("collateral_asset", closedMtp.CollateralAsset), |
| 116 | sdk.NewAttribute("collateral_amount", closedMtp.CollateralAmount.String()), |
| 117 | sdk.NewAttribute("custody_asset", closedMtp.CustodyAsset), |
| 118 | sdk.NewAttribute("custody_amount", closedMtp.CustodyAmount.String()), |
| 119 | sdk.NewAttribute("repay_amount", repayAmount.String()), |
| 120 | sdk.NewAttribute("leverage", closedMtp.Leverage.String()), |
| 121 | sdk.NewAttribute("liabilities", closedMtp.Liabilities.String()), |
| 122 | sdk.NewAttribute("interest_paid_collateral", mtp.InterestPaidCollateral.String()), |
| 123 | sdk.NewAttribute("interest_paid_custody", mtp.InterestPaidCustody.String()), |
| 124 | sdk.NewAttribute("interest_unpaid_collateral", closedMtp.InterestUnpaidCollateral.String()), |
| 125 | sdk.NewAttribute("health", closedMtp.MtpHealth.String()), |
| 126 | )) |
| 127 | |
| 128 | return &types.MsgCloseResponse{}, nil |
| 129 | } |
| 130 | |
| 131 | func (k msgServer) OpenLong(ctx sdk.Context, msg *types.MsgOpen) (*types.MTP, error) { |
| 132 | maxLeverage := k.GetMaxLeverageParam(ctx) |