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 Group Actions Facet (0.8.4)
  • lockAndOpenQuote()
  1. Protocol Architecture
  2. Technical Documentation
  3. Contract Docs
  4. Contracts Documentation 0.8.4
  5. Facets

PartyB Group Actions Facet (0.8.4)

PartyB Group Actions Facet (0.8.4)

The PartyB Group Actions Facet allows Party B users to secure a quote by locking it and then immediately opening a position using that locked quote. This atomic operation simplifies the process by combining two sequential steps—locking and opening—into a single transaction.

Context:

  • Lock Quote: Once a user submits a quote, any Party B may lock the quote by providing sufficient funds based on their expected profit and loss. This reserves the quote so that no other Party B can act on it until the lock is released.

  • Open Position: After locking a quote, Party B may open a position. In doing so, they can choose to fill the entire requested amount or only a fraction. The process checks that the open portion of the quote meets the minimum value requirements, and it emits events based on the outcome (e.g., if a new quote is generated or if a cancellation request is accepted).


lockAndOpenQuote()

The lockAndOpenQuote function is an atomic operation that first locks a specified quote and then opens a position for that quote. The function requires the caller to provide appropriate Muon signatures for both the locking and the opening steps.

Upon execution, it performs the following steps:

  1. Locking the Quote: It calls the internal lockQuote function (from the PartyBQuoteActionsFacetImpl) with a SingleUpnlSig signature to secure the quote. This step reserves the funds needed to open the position and prevents other Party B users from accepting the same quote.

    • Emits a LockQuote event with the Party B address and the quote ID.

  2. Opening the Position: It then calls the internal openPosition function (from the PartyBPositionActionsFacetImpl) with:

    • filledAmount: The amount with which Party B chooses to open the position. This can be the full amount requested or only a fraction.

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

    • A PairUpnlAndPriceSig signature that includes both UPnL and price data for verification.

    • Emits an OpenPosition event with details including the quote ID, Party A and Party B addresses, the filled amount, and the opened price.

  3. Handling New Quotes: If the openPosition call returns a new quote ID (i.e. if a residual or new quote is generated due to partial filling), the function:

    • Emits a SendQuote event if the new quote remains in the pending state.

    • Otherwise, if the new quote has been canceled (indicating Party B accepted a cancel request), it emits an AcceptCancelRequest event.

Function Signature:

function lockAndOpenQuote(
    uint256 quoteId,
    uint256 filledAmount,
    uint256 openedPrice,
    SingleUpnlSig memory upnlSig,
    PairUpnlAndPriceSig memory pairUpnlSig
) external whenNotPartyBActionsPaused onlyPartyB notLiquidated(quoteId);

Parameters:

  • quoteId: The identifier of the quote to be locked and used for opening the position.

  • filledAmount: The amount (or fraction) of the position that Party B chooses to open.

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

  • upnlSig: A SingleUpnlSig structure containing the Muon signature for UPnL data, used during the locking step.

struct SingleUpnlSig {
	bytes reqId;
	uint256 timestamp;
	int256 upnl;
	bytes gatewaySignature;
	SchnorrSign sigs;
}
  • pairUpnlSig: A PairUpnlAndPriceSig structure containing the Muon signature for both UPnL and price data, used during the opening step.

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

Example Usage:

// Example: Party B locks and opens a quote in one atomic operation.
uint256 quoteId = 101;
uint256 filledAmount = 100;  // Party B chooses to fill 100 units (can be a fraction of the requested amount)
uint256 openedPrice = 1050;  // The price at which the position is opened

// Assume upnlSig and pairUpnlSig are obtained through off-chain signing processes.
SingleUpnlSig memory upnlSig = /* obtain UPnL signature data */;
PairUpnlAndPriceSig memory pairUpnlSig = /* obtain UPnL and price signature data */;

diamond.lockAndOpenQuote(quoteId, filledAmount, openedPrice, upnlSig, pairUpnlSig);
struct PairUpnlAndPriceSig {
	bytes reqId;
	uint256 timestamp;
	int256 upnlPartyA;
	int256 upnlPartyB;
	uint256 price;
	bytes gatewaySignature;
	SchnorrSign sigs;
}

Events Emitted:

  • LockQuote: Emitted immediately after the quote is successfully locked.

    event LockQuote(address indexed partyB, uint256 quoteId);
  • OpenPosition: Emitted after opening the position, providing details such as the quote ID, Party A, Party B, filled amount, and opened price.

    event OpenPosition(uint256 quoteId, address partyA, address partyB, uint256 filledAmount, uint256 openedPrice);
  • SendQuote (optional): If a new quote is generated 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 indicating that the cancellation was accepted.

PreviousPartyA Facet (0.8.4)NextPartyB Quote Actions Facet (0.8.4)

Last updated 4 months ago