MCPcopy Create free account
hub / github.com/Sifchain/sifnode / ForceClose

Method ForceClose

x/margin/keeper/msg_server.go:395–451  ·  view source on GitHub ↗

ForceClose is deprecated replaced by AdminClose

(goCtx context.Context, msg *types.MsgForceClose)

Source from the content-addressed store, hash-verified

393
394// ForceClose is deprecated replaced by AdminClose
395func (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}

Callers

nothing calls this directly

Calls 8

IsAdminAccountMethod · 0.65
AdminKeeperMethod · 0.65
GetMTPMethod · 0.65
GetPoolMethod · 0.65
ClpKeeperMethod · 0.65
ForceCloseLongMethod · 0.65
EmitAdminCloseMethod · 0.65
StringMethod · 0.45

Tested by

no test coverage detected