# Signing All executes are signed using [EIP712](https://eips.ethereum.org/EIPS/eip-712). Each execute request contains: 1. A piece of structured data that includes the sender address i.e: the `primaryType` that needs to be signed. 2. A signature of the hash of that structured data, signed by the sender. ## Domain The following is the domain required as part of the EIP712 structure: ```json { name: 'Nado', version: '0.0.1', chainId: chainId, verifyingContract: contractAddress } ``` You can retrieve the corresponding chain id and verifying contract via the [contracts](https://docs.nado.xyz/developer-resources/api/gateway/queries/contracts) query. {% hint style="warning" %} **Note**: make sure to use the correct verifying contract for each execute: * For place order: should use `address(producId)` i.e: the 20 bytes hex representation of the `productId` for the order. For example, the verify contract of product `18` is `0x0000000000000000000000000000000000000012` . * For everything else: should use the endpoint address. See more details in the [contracts](https://docs.nado.xyz/developer-resources/api/gateway/queries/contracts) query page. {% endhint %} ```python def gen_order_verifying_contract(product_id: int) -> str: """ Generates the order verifying contract address based on the product ID. Args: product_id (int): The product ID for which to generate the verifying contract address. Returns: str: The generated order verifying contract address in hexadecimal format. """ be_bytes = product_id.to_bytes(20, byteorder="big", signed=False) return "0x" + be_bytes.hex() ``` ## EIP712 Types See below the EIP712 type for each execute: {% hint style="info" %} See more details in the **Signing** section of each execute's page. {% endhint %} ### [Place Order](https://docs.nado.xyz/developer-resources/api/gateway/executes/place-order) **Primary Type**: `Order` Solidity struct that needs to be signed: ```solidity struct Order { bytes32 sender; int128 priceX18; int128 amount; uint64 expiration; uint64 nonce; uint128 appendix; } ``` **JSON representation:** ```typescript { Order: [ { name: 'sender', type: 'bytes32' }, { name: 'priceX18', type: 'int128' }, { name: 'amount', type: 'int128' }, { name: 'expiration', type: 'uint64' }, { name: 'nonce', type: 'uint64' }, { name: 'appendix', type: 'uint128' } ], } ``` ### [Cancel Orders](https://docs.nado.xyz/developer-resources/api/gateway/executes/cancel-orders) **Primary Type:** `Cancellation` Solidity struct that needs to be signed: ```solidity struct Cancellation { bytes32 sender; uint32[] productIds; bytes32[] digests; uint64 nonce; } ``` **JSON representation:** ```typescript { Cancellation: [ { name: 'sender', type: 'bytes32' }, { name: 'productIds', type: 'uint32[]' }, { name: 'digests', type: 'bytes32[]' }, { name: 'nonce', type: 'uint64' }, ], } ``` ### [Cancel Product Orders](https://docs.nado.xyz/developer-resources/api/gateway/executes/cancel-product-orders) **Primary Type**: `CancellationProducts` Solidity struct that needs to be signed: ```solidity struct CancellationProducts { bytes32 sender; uint32[] productIds; uint64 nonce; } ``` **JSON representation:** ```typescript { CancellationProducts: [ { name: 'sender', type: 'bytes32' }, { name: 'productIds', type: 'uint32[]' }, { name: 'nonce', type: 'uint64' }, ], } ``` ### [Withdraw Collateral](https://docs.nado.xyz/developer-resources/api/gateway/executes/withdraw-collateral) **Primary Type:** `WithdrawCollateral` Solidity struct that needs to be signed: ```solidity struct WithdrawCollateral { bytes32 sender; uint32 productId; uint128 amount; uint64 nonce; } ``` **JSON representation:** ```typescript { WithdrawCollateral: [ { name: 'sender', type: 'bytes32' }, { name: 'productId', type: 'uint32' }, { name: 'amount', type: 'uint128' }, { name: 'nonce', type: 'uint64' }, ], } ``` ### [Liquidate Subaccount](https://docs.nado.xyz/developer-resources/api/gateway/executes/liquidate-subaccount) **Primary Type:** `LiquidateSubaccount` Solidity struct that needs to be signed: ```solidity struct LiquidateSubaccount { bytes32 sender; bytes32 liquidatee; uint32 productId; bool isEncodedSpread; int128 amount; uint64 nonce; } ``` **JSON representation:** ```typescript { LiquidateSubaccount: [ { name: 'sender', type: 'bytes32' }, { name: 'liquidatee', type: 'bytes32' }, { name: 'productId', type: 'uint32' }, { name: 'isEncodedSpread', type: 'bool' }, { name: 'amount', type: 'int128' }, { name: 'nonce', type: 'uint64' }, ], } ``` ### [Mint NLP](https://docs.nado.xyz/developer-resources/api/gateway/executes/mint-nlp) **Primary Type**: `MintNlp` Solidity struct that needs to be signed: ```solidity struct MintNlp { bytes32 sender; uint32 productId; uint128 quoteAmount; uint64 nonce; } ``` **JSON representation:** ```typescript { MintLp: [ { name: 'sender', type: 'bytes32' }, { name: 'quoteAmount', type: 'uint128' }, { name: 'nonce', type: 'uint64' }, ], } ``` ## [Burn NLP](https://docs.nado.xyz/developer-resources/api/gateway/executes/burn-nlp) **Primary Type:** `BurnNlp` Solidity struct that needs to be signed: ```solidity struct BurnLp { bytes32 sender; uint128 nlpAmount; uint64 nonce; } ``` **JSON representation:** ```typescript { BurnLp: [ { name: 'sender', type: 'bytes32' }, { name: 'nlpAmount', type: 'uint128' }, { name: 'nonce', type: 'uint64' }, ], } ``` ## [Link Signer](https://docs.nado.xyz/developer-resources/api/gateway/executes/link-signer) **Primary Type**: `LinkSigner` Solidity struct that needs to be signed: ```solidity struct LinkSigner { bytes32 sender; bytes32 signer; uint64 nonce; } ``` **JSON representation:** ```typescript { LinkSigner: [ { name: 'sender', type: 'bytes32' }, { name: 'signer', type: 'bytes32' }, { name: 'nonce', type: 'uint64' }, ], } ``` ## [List Trigger Orders](https://docs.nado.xyz/developer-resources/api/trigger/queries/list-trigger-orders) **Primary Type**: `ListTriggerOrders` Solidity struct that needs to be signed: ```solidity struct ListTriggerOrders { bytes32 sender; uint64 recvTime; } ``` **JSON representation:** ```typescript { ListTriggerOrders: [ { name: 'sender', type: 'bytes32' }, { name: 'recvTime', type: 'uint64' }, ], } ``` ## [Authenticate Subscription Streams](https://docs.nado.xyz/developer-resources/subscriptions#authentication) **Primary Type**: `StreamAuthentication` Struct that needs to be signed: ```solidity struct StreamAuthentication { bytes32 sender; uint64 expiration; } ``` **JSON representation:** ```typescript { StreamAuthentication: [ { name: 'sender', type: 'bytes32' }, { name: 'expiration', type: 'uint64' }, ], } ```