LogoLogo
  • Overview
    • Introduction
    • Table of Contents
  • Token Information
    • Symmio Foundation
  • Protocol Architecture
    • Protocol Introduction
    • Technical Documentation
      • Building an Application with SYMM
        • Introduction and Diamond Explainer
        • Querying Info from the SYMM Diamond
        • MultiAccount
        • Creating an Account and Depositing Funds
        • Sending a Quote
        • Closing a Quote
        • Instant Trading
          • Instant Login (EOA)
          • Instant Login (Account Abstraction)
          • Sending a Quote (Instant Open)
          • Sending a Quote (Instant Close)
        • Frequently Used Queries
      • Solver Docs
        • Solver Docs (github)
        • Solver Implementation Guide (High Level Overview)
        • Building a Solver on SYMMIO
          • 1. Intent Creation
          • 2. Seeing the Intent
          • 3. Hedging Off-Chain
          • 4. Opening/Closing a Position On-Chain
          • Creating the APIs
            • GET Contract Symbols
            • GET Open Interest
            • GET Notional Cap
            • GET Price Range
            • GET Error Codes
            • GET Get Locked Params
            • GET Get Funding Info
            • POST Position State
          • Solver Flow Summary Example
          • Recommended Architecture for Solvers
          • Glossary
        • Conditional Orders Handler
        • Rasa Solver TP/SL Implementation
        • Instant Trading
          • Instant Trading (Solvers)
          • Rasa Instant Trading Implementation
          • Instant Trading Condition Checks
        • Fetching Gas Prices Script
        • How to Add a Market as a Solver
        • Verifying Account Abstracted Instant Actions (ERC-4337)
      • Frontend Docs
        • Setting up a Frontend with SYMMIO
        • Frontend SDK Setup Guide
        • MultiAccount Deployment Guide
        • Instant Trading (Frontends)
          • Account Abstracted Instant Actions (Frontends)
        • Implement a Trading Bot on Symmio (OLD)
          • Setup
          • Creating a Sub-Account
          • Minting Collateral Tokens (Optional)
          • Depositing and Allocating Tokens
          • Obtaining Muon Signatures
          • Sending a Quote
          • Monitoring Price for Execution
      • Contract Docs
        • SYMMIO CORE v0.82
        • Contracts Documentation 0.8.2
          • Main Flow
          • The SYMM Diamond
          • Facets
            • Account Facet
            • Control Facet
            • Funding Rate Facet
            • PartyA Facet
            • PartyB Facet
            • Liquidation Facet
            • View Facet
          • MultiAccount
            • PartyA
            • PartyB
          • SYMM App (Muon)
            • LibMuon
            • MuonStorage
        • Contracts Documentation 0.8.3
          • Facets
            • Control Facet
            • Account Facet
            • PartyA Facet
            • PartyB Facet
            • View Facet
            • Bridge Facet
            • Liquidation Facet (Implementation)
          • Modified Events
          • New Events
          • MuonStorage
        • Contracts Documentation 0.8.4
          • Main Flow (0.8.4)
          • The SYMM Diamond (0.8.4)
          • Facets
            • Account Facet (0.8.4)
            • Bridge Facet (0.8.4)
            • Control Facet (0.8.4)
            • Force Actions Facet (0.8.4)
            • Funding Rate Facet (0.8.4)
            • Liquidations Facet (0.8.4)
            • PartyA Facet (0.8.4)
            • PartyB Group Actions Facet (0.8.4)
            • PartyB Quote Actions Facet (0.8.4)
            • PartyB Position Actions Facet (0.8.4)
            • Settlement Facet (0.8.4)
            • View Facet (0.8.4)
          • MultiAccount (0.8.4)
            • SymmioPartyA
            • SymmioPartyB
          • SYMM App (Muon)
            • LibMuon (0.8.4)
            • MuonStorage (0.8.4)
      • Contract Addresses / Solver Endpoints
        • Mantle
        • Mode
        • IOTA
        • Base
        • BSC
        • Arbitrum
        • Polygon
        • Berachain
        • Solver Endpoints and Addresses
          • Perps Hub
          • Rasa Capital
          • Rasa Capital (Zero Spread)
          • Zenith
      • How to Query our Contracts
      • Muon API Queries
      • Solver Error Codes
      • Interacting with SYMMIO Contracts
    • Protocol higher level architecture
      • 12-Hour Fraud Proof Window
      • PartyB
      • Solver Settings
      • Max Leverage
      • Maintenance Margin (CVA) Calculations
    • Symmio Whitepaper
  • Building on Symmio
    • Builders introduction
    • Solving for Symmio
      • Solver documentation
      • Solver - Example Flow
    • Trading Fees
      • Perps - Settlement Costs
      • Pair Trading - Settlement costs
    • Exchanges (Frontends)
      • Frontend Introduction
      • SDK - SYMM client
      • Trade on Symmio
  • Legal & Brand & Security
    • Security (Audits / Bugbounty)
      • Bug bounty / Coverage
        • How to contact ?
      • Audits
        • SYMM - V0.8 - 0.81
          • Sherlock Audit - Jun 15, 2023
          • Smart State - Jul 2, 2023
        • SYMM - 0.82
          • Sherlock Audit -Aug 30, 2023
        • SYMM - 0.83
          • Sherlock Audit - Jun 17, 2024
        • SYMM - 0.84
          • Sherlock Audit - Oct 3, 2024
        • Vaults
          • Sherlock Audit - Jan 2, 2024
    • Terms of Service & Licensing
      • TRADEMARK & COPYRIGHT NOTICE
      • CONTACT US
      • TERMS OF SERVICE
      • FRONTEND LICENSE
        • Frontend Modifications
        • Frontend Use Grants
      • CONTRACT LICENSE
        • Contract Use Grants
        • Contract Modifications
    • Brand - Assets Logos
Powered by GitBook
LogoLogo

All rights to the people (c) 2023 Symmetry Labs A.G.

On this page
  • PartyB Position Actions Facet (0.8.4)
  • openPosition()
  • fillCloseRequest()
  • acceptCancelCloseRequest()
  • emergencyClosePosition()
  1. Protocol Architecture
  2. Technical Documentation
  3. Contract Docs
  4. Contracts Documentation 0.8.4
  5. Facets

PartyB Position Actions Facet (0.8.4)

PartyB Position Actions Facet (0.8.4)

The PartyB Position Actions Facet enables Party B users to manage the positions they have open with partyA. After locking a quote (using the PartyB Quote Actions Facet or the grouped actions facet), Party B can open a position by specifying the filled amount and open price. In addition, they can fill close requests, accept cancellation of close requests, or trigger an emergency close if required. These actions help ensure that positions are managed according to the protocol rules and that the necessary solvency checks are performed before any state changes occur.


openPosition()

Opens a position for a specified quote. Party B can choose to fill the entire requested amount or only a portion of it. This function verifies that the quote meets the necessary conditions (e.g., minimum position size and sufficient solvency after the position is opened) and then updates nonce counters for both Party A and Party B. If a residual (new) quote is generated due to partial fill, additional events are emitted based on its status.

Function Signature:

function openPosition(
    uint256 quoteId,
    uint256 filledAmount,
    uint256 openedPrice,
    PairUpnlAndPriceSig memory upnlSig
) external whenNotPartyBActionsPaused onlyPartyBOfQuote(quoteId) notLiquidated(quoteId);

Parameters:

  • quoteId: The ID of the quote for which the position is being opened.

  • filledAmount: The amount with which Party B is opening the position. This may be a fraction or the full requested amount.

  • openedPrice: The price at which the position is opened.

  • upnlSig: A PairUpnlAndPriceSig structure containing the Muon signature data for UPnL and price verification.

struct PairUpnlAndPriceSig {
	bytes reqId;
	uint256 timestamp;
	int256 upnlPartyA;
	int256 upnlPartyB;
	uint256 price;
	bytes gatewaySignature;
	SchnorrSign sigs;
}

Example Usage:

// Party B opens a position on quote ID 101 for 100 units at an open price of 1050.
PairUpnlAndPriceSig memory sig = /* obtain signature data */;
diamond.openPosition(101, 100e18, 1050e18, sig);

Events Emitted:

  • OpenPosition:

    event OpenPosition(uint256 quoteId, address partyA, address partyB, uint256 filledAmount, uint256 openedPrice);

    Emitted immediately after the position is opened.

  • SendQuote (optional): If the openPosition call returns a new quote (i.e. a residual quote), and its status is PENDING, a SendQuote event is emitted with full quote details.

  • AcceptCancelRequest (optional): If the new quote is canceled, an AcceptCancelRequest event is emitted (for backward compatibility).


fillCloseRequest()

Fills a close request for an open position. Party B can partially fill a close request (especially for LIMIT orders, which may be filled in multiple steps) by specifying the amount to fill and the closed price. This function verifies the provided UPnL and price signature, checks that closing the position maintains solvency, and then updates nonce counters for both parties.

Function Signature:

function fillCloseRequest(
    uint256 quoteId,
    uint256 filledAmount,
    uint256 closedPrice,
    PairUpnlAndPriceSig memory upnlSig
) external whenNotPartyBActionsPaused onlyPartyBOfQuote(quoteId) notLiquidated(quoteId);

Parameters:

  • quoteId: The ID of the quote whose close request is being filled.

  • filledAmount: The amount by which the close request is being filled.

  • closedPrice: The price at which the position is being closed.

  • upnlSig: A PairUpnlAndPriceSig structure with UPnL and price signature data for verification.

struct PairUpnlAndPriceSig {
	bytes reqId;
	uint256 timestamp;
	int256 upnlPartyA;
	int256 upnlPartyB;
	uint256 price;
	bytes gatewaySignature;
	SchnorrSign sigs;
}

Example Usage:

// Party B fills a close request on quote ID 101 for 50 units at a closed price of 1020.
PairUpnlAndPriceSig memory sig = /* obtain signature data */;
diamond.fillCloseRequest(101, 50e18, 1020e18, sig);

Events Emitted:

event FillCloseRequest(uint256 quoteId, address partyA, address partyB, uint256 filledAmount, uint256 closedPrice, QuoteStatus quoteStatus, uint256 closeId);

Also, a backward compatibility version is emitted without the closeId.


acceptCancelCloseRequest()

Accepts a cancel close request for a specified quote. This function updates the quote’s status from CANCEL_CLOSE_PENDING to OPENED, effectively canceling the close request and reopening the position.

Function Signature:

function acceptCancelCloseRequest(uint256 quoteId) external whenNotPartyBActionsPaused onlyPartyBOfQuote(quoteId) notLiquidated(quoteId);

Parameters:

  • quoteId: The ID of the quote for which the close request cancellation is accepted.

Example Usage:

// Party B accepts the cancel close request for quote ID 101.
diamond.acceptCancelCloseRequest(101);

Events Emitted:

  • AcceptCancelCloseRequest:

    event AcceptCancelCloseRequest(uint256 quoteId, QuoteStatus quoteStatus, uint256 closeId);

    Also emits a backward compatibility event without the closeId.


emergencyClosePosition()

Allows Party B to emergency close a position for a specified quote. This function is typically used during emergency scenarios (e.g., when the system is in emergency mode, Party B is in emergency status, or if the symbol is delisted). It verifies that emergency conditions are met, checks the solvency of both parties based on the provided UPnL signature, and then closes the quote at the specified price.

Function Signature:

function emergencyClosePosition(
    uint256 quoteId,
    PairUpnlAndPriceSig memory upnlSig
) external whenNotPartyBActionsPaused onlyPartyBOfQuote(quoteId) notLiquidated(quoteId);

Parameters:

  • quoteId: The ID of the quote for which the emergency close is executed.

  • upnlSig: A PairUpnlAndPriceSig structure containing the Muon signature for UPnL and the closing price.

struct PairUpnlAndPriceSig {
	bytes reqId;
	uint256 timestamp;
	int256 upnlPartyA;
	int256 upnlPartyB;
	uint256 price;
	bytes gatewaySignature;
	SchnorrSign sigs;
}

Example Usage:

// Party B triggers an emergency close on quote ID 101 using a valid signature.
PairUpnlAndPriceSig memory sig = /* obtain signature data */;
diamond.emergencyClosePosition(101, sig);

Events Emitted:

  • EmergencyClosePosition:

    event EmergencyClosePosition(uint256 quoteId, address partyA, address partyB, uint256 filledAmount, uint256 closedPrice, QuoteStatus quoteStatus, uint256 closeId);

    Also, a backward compatibility event is emitted without the closeId.

PreviousPartyB Quote Actions Facet (0.8.4)NextSettlement Facet (0.8.4)

Last updated 4 months ago