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

Method Open

x/margin/keeper/msg_server.go:27–89  ·  view source on GitHub ↗
(goCtx context.Context, msg *types.MsgOpen)

Source from the content-addressed store, hash-verified

25}
26
27func (k msgServer) Open(goCtx context.Context, msg *types.MsgOpen) (*types.MsgOpenResponse, error) {
28 ctx := sdk.UnwrapSDKContext(goCtx)
29
30 if k.IsWhitelistingEnabled(ctx) && !k.IsWhitelisted(ctx, msg.Signer) {
31 return nil, sdkerrors.Wrap(types.ErrUnauthorised, "unauthorised")
32 }
33
34 if k.GetOpenMTPCount(ctx) >= k.GetMaxOpenPositions(ctx) {
35 return nil, sdkerrors.Wrap(types.ErrMaxOpenPositions, "cannot open new positions")
36 }
37
38 var externalAsset string
39 nativeAsset := types.GetSettlementAsset()
40
41 if types.StringCompare(msg.CollateralAsset, nativeAsset) {
42 externalAsset = msg.BorrowAsset
43 } else {
44 externalAsset = msg.CollateralAsset
45 }
46
47 pool, err := k.ClpKeeper().GetPool(ctx, externalAsset)
48 if err != nil {
49 return nil, sdkerrors.Wrap(clptypes.ErrPoolDoesNotExist, externalAsset)
50 }
51
52 if !k.IsPoolEnabled(ctx, externalAsset) || k.IsPoolClosed(ctx, externalAsset) {
53 return nil, sdkerrors.Wrap(types.ErrMTPDisabled, externalAsset)
54 }
55
56 if !pool.Health.IsNil() && pool.Health.LTE(k.GetPoolOpenThreshold(ctx)) {
57 return nil, sdkerrors.Wrap(types.ErrMTPDisabled, "pool health too low to open new positions")
58 }
59
60 var mtp *types.MTP
61
62 switch msg.Position {
63 case types.Position_LONG:
64 mtp, err = k.OpenLong(ctx, msg)
65 if err != nil {
66 return nil, err
67 }
68 default:
69 return nil, sdkerrors.Wrap(types.ErrInvalidPosition, msg.Position.String())
70 }
71
72 ctx.EventManager().EmitEvent(sdk.NewEvent(types.EventOpen,
73 sdk.NewAttribute("id", strconv.FormatInt(int64(mtp.Id), 10)),
74 sdk.NewAttribute("position", mtp.Position.String()),
75 sdk.NewAttribute("address", mtp.Address),
76 sdk.NewAttribute("collateral_asset", mtp.CollateralAsset),
77 sdk.NewAttribute("collateral_amount", mtp.CollateralAmount.String()),
78 sdk.NewAttribute("custody_asset", mtp.CustodyAsset),
79 sdk.NewAttribute("custody_amount", mtp.CustodyAmount.String()),
80 sdk.NewAttribute("leverage", mtp.Leverage.String()),
81 sdk.NewAttribute("liabilities", mtp.Liabilities.String()),
82 sdk.NewAttribute("interest_paid_collateral", mtp.InterestPaidCollateral.String()),
83 sdk.NewAttribute("interest_paid_custody", mtp.InterestPaidCustody.String()),
84 sdk.NewAttribute("interest_unpaid_collateral", mtp.InterestUnpaidCollateral.String()),

Callers

nothing calls this directly

Calls 11

OpenLongMethod · 0.95
IsWhitelistingEnabledMethod · 0.65
IsWhitelistedMethod · 0.65
GetOpenMTPCountMethod · 0.65
GetMaxOpenPositionsMethod · 0.65
GetPoolMethod · 0.65
ClpKeeperMethod · 0.65
IsPoolEnabledMethod · 0.65
IsPoolClosedMethod · 0.65
GetPoolOpenThresholdMethod · 0.65
StringMethod · 0.45

Tested by

no test coverage detected