All pages
Powered by GitBook
1 of 1

Loading...

Create an order

POST /nft/orders/:chainId/

Examples

The process of composing an NFT order and the payload to POST to API endpoint is pretty much the .

The only differences are:

  • slightly different endpoint route (/nft/orders/... instead of /ft/orders/... )

  • makerAssetType and takerAssetType fields are required

  • makerAsset

Query parameters:

  • chainId:network id (Ethereum Mainnet = 1)

Body parameters

  • nonceAndMeta: needs to be encoded as described in:

  • makerAsset and takerAsset needs to be encode as packed field containing address of an ERC20/721/1155 token that maker want to sell to the taker (between 0-19 bits). Token type encoded as show above on 20-21 bits.

Example encoding in JavaScript:

Response

Understand the response by checking our dedicated page:

and
takerAsset
contain not plain token addresses, but token address and token type encoded as described in
  • takerAssetId and makerAssetId will contain NFT tokenId . If it's "NFT to fungible" order, takerAssetId = 0 and makerAssetId = tokenID. If it's "fungible to NFT", then the opposite.

  • same as with usual "fungible to fungible token" orders
    Data structure in our centralized system
    Data structure in our centralized system
    curl -X POST \
      'https://api.paraswap.io/nft/orders/137' \
      --header 'Content-Type: application/json' \
      --data-raw '{
    	"nonceAndMeta": "6696393496368457207383969069655254624825140823245405670718046208",
    	"expiry": 1664716033,
    	"makerAsset": "4094980474276800865989028098863468306593436022900",
    	"makerAssetId": "1027",
    	"takerAsset": "990092240248101882666250324982272499898038834061",
    	"takerAssetId": "0",
    	"maker": "0x05182E579FDfCf69E4390c3411D8FeA1fb6467cf",
    	"taker": "0x0000000000000000000000000000000000000000",
    	"makerAmount": "1",
    	"takerAmount": "50",
    	"signature": "0x762dd1eb9447d10a24adff2c16dd2a6a4f6abdeff2e51fc1df0428129e4b7c1a00100a35f936e591956a5c86d3d502ecb591134bc8c0f32f12fd7533c199975e1c"
    }'
    Body parameters
    /* eslint-disable @typescript-eslint/no-unused-vars */
    import * as dotenv from 'dotenv';
    import axios from 'axios';
    import { ethers } from 'ethers';
    
    import {
      constructPartialSDK,
      constructEthersContractCaller,
      constructAxiosFetcher,
      constructBuildNFTOrder,
      constructSignNFTOrder,
      constructPostNFTOrder,
      BuildNFTOrderInput,
      SignableNFTOrderData,
      NFTOrderToSend,
      AssetType,
    } from '..';
    dotenv.config();
    
    const randomPK = ethers.Wallet.createRandom().privateKey;
    
    const wallet = new ethers.Wallet(process.env.PK || randomPK);
    
    const fetcher = constructAxiosFetcher(axios);
    
    const provider = wallet.connect(ethers.getDefaultProvider(137));
    const contractCaller = constructEthersContractCaller(
      {
        ethersProviderOrSigner: provider,
        EthersContract: ethers.Contract,
      },
      wallet.address
    );
    
    const paraSwapLimitOrderSDK = constructPartialSDK(
      {
        chainId: 137,
        fetcher,
        contractCaller,
      },
      constructBuildNFTOrder,
      constructSignNFTOrder,
      constructPostNFTOrder
    );
    
    const DAI = '0x6B175474E89094C44Da98b954EedeAC495271d0F';
    const NFT = '0x2953399124f0cbb46d2cbacd8a89cf0599974963';
    const NFT_ID =
      '7772759950848685723459796247330971791008072228632493699501910275462086524929';
    
    const orderInput: BuildNFTOrderInput = {
      nonce: 1,
      expiry: Math.floor(Date.now() / 1000) + 60 * 60 * 24 * 7, // week from now, in sec
      makerAsset: NFT,
      makerAssetType: AssetType.ERC1155,
      makerAssetId: NFT_ID,
      takerAssetType: AssetType.ERC20,
      takerAsset: DAI,
      makerAmount: (1).toString(10),
      takerAmount: (8e18).toString(10),
      maker: wallet.address,
    };
    
    async function run() {
      const signableOrderData: SignableNFTOrderData =
        await paraSwapLimitOrderSDK.buildNFTOrder(orderInput);
    
      const signature: string = await paraSwapLimitOrderSDK.signNFTOrder(
        signableOrderData
      );
    
      const orderToPostToApi: NFTOrderToSend = {
        ...signableOrderData.data,
        signature,
      };
    
      const newOrder = await paraSwapLimitOrderSDK.postNFTLimitOrder(
        orderToPostToApi
      );
      console.log(newOrder);
    }
    
    run();
    {
    	"nonceAndMeta": "6696393496368457207383969069655254624825140823245405670718046208",
    	"expiry": 1664716033,
    	"makerAsset": "4094980474276800865989028098863468306593436022900",
    	"makerAssetId": "1027",
    	"takerAsset": "990092240248101882666250324982272499898038834061",
    	"takerAssetId": "0",
    	"maker": "0x05182E579FDfCf69E4390c3411D8FeA1fb6467cf",
    	"taker": "0x0000000000000000000000000000000000000000",
    	"makerAmount": "1",
    	"takerAmount": "50",
    	"signature": "0x762dd1eb9447d10a24adff2c16dd2a6a4f6abdeff2e51fc1df0428129e4b7c1a00100a35f936e591956a5c86d3d502ecb591134bc8c0f32f12fd7533c199975e1c"
    }
    const ERC20 = 0;
    const ERC721 = 2;
    const ERC1155 = 1;
    
    const encodeAddress = (address, assetType) => BigInt(address) | (BigInt(assetType) << BigInt(160));
    encodedAddress = encodeAddress('0xcd494673999194365033d7a287af9f0a3b163874', ERC721);
    {
    	"order": {
    		"expiry": 1664716033,
    		"createdAt": 1663852073,
    		"transactionHash": null,
    		"chainId": 137,
    		"nonceAndMeta": "6696393496368457207383969069655254624825140823245405670718046208",
    		"maker": "0x05182e579fdfcf69e4390c3411d8fea1fb6467cf",
    		"taker": "0x0000000000000000000000000000000000000000",
    		"takerFromMeta": "0x0000000000000000000000000000000000000000",
    		"makerAsset": "0xcd494673999194365033d7a287af9f0a3b163874",
    		"makerAssetId": "1027",
    		"makerAssetType": 2,
    		"takerAsset": "0xad6d458402f60fd3bd25163575031acdce07538d",
    		"takerAssetId": "0",
    		"takerAssetType": 0,
    		"makerAmount": "1",
    		"fillableBalance": "1",
    		"takerAmount": "50",
    		"signature": "0x762dd1eb9447d10a24adff2c16dd2a6a4f6abdeff2e51fc1df0428129e4b7c1a00100a35f936e591956a5c86d3d502ecb591134bc8c0f32f12fd7533c199975e1c",
    		"orderHash": "0xe40182a75563c4c84e2ff4f2b4b44045fc94f66c929780ee82560d30cbadeb83",
    		"permitMakerAsset": null,
    		"type": "LIMIT",
    		"state": "PENDING"
    	}
    }