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
          • 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
  • Changes:
  • Introduced an Enhanced ForceClose Process
  • sendQuote()
  • requestToClosePosition()
  1. Protocol Architecture
  2. Technical Documentation
  3. Contract Docs
  4. Contracts Documentation 0.8.3
  5. Facets

PartyA Facet

Changes:

Introduced an Enhanced ForceClose Process

The previous implementation of force close was limited, allowing users to force close their positions only if the price at that moment was higher or lower than the requested price, depending on the type of position. The new version introduces a new signature from Muon called HighLowPriceSig, which specifies a timeframe with startTime and endTime. This period must align with specified cooldown periods to ensure that the data represents a stable and acceptable range for partyB to act upon. Additionally, for this timeframe, the minimum, maximum, and average prices of the symbol are required.

The calculation of the close price within the forceClosePosition function depends on the type of position (LONG or SHORT) and the prices provided in the HighLowPriceSig. For a LONG position, the function checks if the highest price achieved is sufficient to cover the requested close price plus a gap ratio. If this condition is met, the close price is set as the requested close price plus a penalty ratio, ensuring that partyB incurs a cost for not closing the position themselves on time. This close price is then compared against the average price, and the higher of these two prices is chosen as the final price for executing the close.

Conversely, for a SHORT position, the function evaluates whether the lowest price is less than or equal to the requested close price minus the gap ratio. If this condition is met, the close price is determined as the requested close price minus the penalty ratio. This price is then compared against the average price, and the lower of these two prices is selected as the close price.

Changed Methods:

// From
function forceClosePosition(uint256 quoteId, PairUpnlAndPriceSig memory upnlSig)
// To
function forceClosePosition(uint256 quoteId, HighLowPriceSig memory sig)

sendQuote()

Before:

function sendQuote(
    address[] memory partyBsWhiteList,
    uint256 symbolId,
    PositionType positionType,
    OrderType orderType,
    uint256 price,
    uint256 quantity,
    uint256 cva,
    uint256 lf,
    uint256 partyAmm,
    uint256 partyBmm,
    uint256 maxFundingRate,
    uint256 deadline,
    SingleUpnlAndPriceSig memory upnlSig
) internal returns (uint256 currentId) {
    ...
    accountLayout.allocatedBalances[msg.sender] -= LibQuote.getTradingFee(currentId);
}

After:

function sendQuote(
    address[] memory partyBsWhiteList,
    uint256 symbolId,
    PositionType positionType,
    OrderType orderType,
    uint256 price,
    uint256 quantity,
    uint256 cva,
    uint256 lf,
    uint256 partyAmm,
    uint256 partyBmm,
    uint256 maxFundingRate,
    uint256 deadline,
    address affiliate,
    SingleUpnlAndPriceSig memory upnlSig
) internal returns (uint256 currentId) {
    ...
    require(maLayout.affiliateStatus[affiliate], "PartyAFacet: Invalid affiliate");
    ...
    uint256 fee = LibQuote.getTradingFee(currentId);
    accountLayout.allocatedBalances[msg.sender] -= fee;
    emit SharedEvents.BalanceChangePartyA(msg.sender, fee, SharedEvents.BalanceChangeType.PLATFORM_FEE_OUT);
}

Explanation:

  • Added affiliate parameter to the sendQuote function.

  • Added a validation step to check the status of the affiliate.

  • Emitted BalanceChangePartyA event after deducting the trading fee.

requestToClosePosition()

Before:

function requestToClosePosition(
    uint256 quoteId,
    uint256 closePrice,
    uint256 quantityToClose,
    OrderType orderType,
    uint256 deadline
) internal {
    ...
}

After:

function requestToClosePosition(
    uint256 quoteId,
    uint256 closePrice,
    uint256 quantityToClose,
    OrderType orderType,
    uint256 deadline
) internal {
    SymbolStorage.Layout storage symbolLayout = SymbolStorage.layout();
    QuoteStorage.Layout storage quoteLayout = QuoteStorage.layout();
    Quote storage quote = quoteLayout.quotes[quoteId];
    ...
    quoteLayout.closeIds[quoteId] = ++quoteLayout.lastCloseId;
}

Explanation: To simplify tracking for partyBs, every close request now includes an ID. This ID is included in all types of close events. Note that this ID is not stored historically; each new close request will overwrite the previous ID.

Events Updated with closeId

The closeId is now added to the following events:

  • FillCloseRequest

  • ExpireQuote

  • AcceptCancelCloseRequest

  • EmergencyClosePosition

  • RequestToClosePosition

  • RequestToCancelCloseRequest

  • ForceCancelCloseRequest

  • ForceClosePosition

  • LiquidatePositionsPartyA

  • LiquidatePositionsPartyB

PreviousAccount FacetNextPartyB Facet

Last updated 9 months ago