ForceClose is deprecated replaced by AdminClose
(goCtx context.Context, msg *types.MsgForceClose)
| 393 | |
| 394 | // ForceClose is deprecated replaced by AdminClose |
| 395 | func (k msgServer) ForceClose(goCtx context.Context, msg *types.MsgForceClose) (*types.MsgForceCloseResponse, error) { |
| 396 | ctx := sdk.UnwrapSDKContext(goCtx) |
| 397 | |
| 398 | signer, err := sdk.AccAddressFromBech32(msg.Signer) |
| 399 | if err != nil { |
| 400 | return nil, err |
| 401 | } |
| 402 | if !k.AdminKeeper().IsAdminAccount(ctx, admintypes.AdminType_MARGIN, signer) { |
| 403 | return nil, sdkerrors.Wrap(admintypes.ErrPermissionDenied, fmt.Sprintf("signer not authorised: %s", msg.Signer)) |
| 404 | } |
| 405 | |
| 406 | mtpToClose, err := k.GetMTP(ctx, msg.MtpAddress, msg.Id) |
| 407 | if err != nil { |
| 408 | return nil, err |
| 409 | } |
| 410 | |
| 411 | var repayAmount sdk.Uint |
| 412 | switch mtpToClose.Position { |
| 413 | case types.Position_LONG: |
| 414 | var pool clptypes.Pool |
| 415 | |
| 416 | nativeAsset := types.GetSettlementAsset() |
| 417 | if types.StringCompare(mtpToClose.CollateralAsset, nativeAsset) { |
| 418 | pool, err = k.ClpKeeper().GetPool(ctx, mtpToClose.CustodyAsset) |
| 419 | if err != nil { |
| 420 | return nil, sdkerrors.Wrap(clptypes.ErrPoolDoesNotExist, mtpToClose.CustodyAsset) |
| 421 | } |
| 422 | } else { |
| 423 | pool, err = k.ClpKeeper().GetPool(ctx, mtpToClose.CollateralAsset) |
| 424 | if err != nil { |
| 425 | return nil, sdkerrors.Wrap(clptypes.ErrPoolDoesNotExist, mtpToClose.CollateralAsset) |
| 426 | } |
| 427 | } |
| 428 | repayAmount, err = k.Keeper.ForceCloseLong(ctx, &mtpToClose, &pool, true, false) |
| 429 | if err != nil { |
| 430 | return nil, err |
| 431 | } |
| 432 | default: |
| 433 | return nil, sdkerrors.Wrap(types.ErrInvalidPosition, mtpToClose.Position.String()) |
| 434 | } |
| 435 | |
| 436 | k.EmitAdminClose(ctx, &mtpToClose, repayAmount, msg.Signer) |
| 437 | |
| 438 | // if types.StringCompare(mtpToClose.CollateralAsset, types.GetSettlementAsset()) { |
| 439 | // res, stop := k.ClpKeeper().SingleExternalBalanceModuleAccountCheck(mtpToClose.CustodyAsset)(ctx) |
| 440 | // if stop { |
| 441 | // return nil, sdkerrors.Wrap(clptypes.ErrBalanceModuleAccountCheck, res) |
| 442 | // } |
| 443 | // } else { |
| 444 | // res, stop := k.ClpKeeper().SingleExternalBalanceModuleAccountCheck(mtpToClose.CollateralAsset)(ctx) |
| 445 | // if stop { |
| 446 | // return nil, sdkerrors.Wrap(clptypes.ErrBalanceModuleAccountCheck, res) |
| 447 | // } |
| 448 | // } |
| 449 | |
| 450 | return &types.MsgForceCloseResponse{}, nil |
| 451 | } |
nothing calls this directly
no test coverage detected