npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@okxweb3/marketplace-runes

v1.1.0

Published

OKX MarketPlace Runes SDK

Downloads

87

Readme

@okxweb3/marketplace-runes

@okxweb3/marketplace-runes is an SDK designed for Runes trading. It provides a comprehensive set of tools and interfaces to facilitate interaction with the OKX Runes marketplace.

Installation

Install the SDK using npm:

npm i @okxweb3/marketplace-runes

Usage

Initialization

import OkxRunesSDK from @okxweb3/marketplace-runes and new it. Pass in the required parameters as well.

To generate the necessary parameters, please refer to the OKX Developer Management Platform. Here's a usage example:

import { OkxRunesSDK, ADDRESS_TYPE } from '@okxweb3/marketplace-runes'

const sdk = new OkxRunesSDK({
    privateKey: '',  // Your wallet private key for signing transactions
    apikey: '',      // API Key obtained from your application
    secretKey: '',   // Secret Key obtained from your application
    passphrase: '',  // Passphrase created during key application
    addressType: ADDRESS_TYPE.SEGWIT_TAPROOT,  // Wallet address type for buying runes
    projectId: '',   // Project ID created during project application
    requestBaseUrl: '' // okx other website eg: https://www.ouyicn.com/, default is http://www.okx.com/
})

Parameter Details:

| Field Name | Type | Required | Description | | -------------- | ------ | -------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | apikey | String | Yes | API Key from your application. See how to generate it here. | | secretKey | String | Yes | Secret Key from your application. See how to generate it here. | | passphrase | String | Yes | Passphrase created during key application. See how to generate it here. | | projectId | String | Yes | Project ID created during project application. See how to generate it here. | | privateKey | String | Yes | Your wallet private key used for signing transactions. | | addressType | String | Yes | Wallet address type for buying runes.You can import ADDRESS_TYPE from @okxweb3/marketplace-runes and use it. | | requestBaseUrl | String | NO | The domain name used to request the api.okx other website eg: https://www.ouyicn.com/, default is http://www.okx.com/ |

Buying Runes

The SDK supports automatic assembly of purchase transactions, allowing you to obtain the transaction hash (txHash) and network fee. Here's how you can use it:

const buyRunes = async () => {
  const { txHash, networkFee } = await sdk.buy({
     orderIds: [orderId1, orderId2],  // OKX Runes order IDs, you can get orderId by sdk.api.getOrders()
     paymentUtxos: [{                 // UTXOs for transaction assembly
       "txid": "ca79143aea5e22f6cfe8d57c5af6be39fecc7afd5ee931a2060f3fef8754ee15",
       "vout": 3,
       "value": 175136,
     }],
     networkFeeRate: 5,  // Desired network fee rate
   });
}
await buyRunes();

Parameter Details:

| Field Name | Type | Required | Description | | -------------- | ------ | -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | orderIds | Array | Yes | Runes order id list | | paymentUtxos | Array | Yes | UTXOs used to assemble the purchase transaction. Ensure they contain no other assets and that the total amount covers the order and network fees.You can get your address utxo from here | | networkFeeRate | Number | Yes | The desired network fee rate. |

sell runes

Sell runes assets to the OKX marketplace. The detailed response interface can be found in Runes API. Here's demo:

const requestApi = async () => {
  const { result } = await sdk.sell({
    assets: [{
        utxoTxHash: 'ce302f5c946ff3ef502eade58405d64b545d59de9fcd731314b88ddadf709ca6',
        utxoValue: 546,
        utxoVout: 0, 
        unitPrice: 1000000,
        amount: 100
    }],
    runesId: '840000:3'
  })

// data structure demo

// {
//    "result": [
//       {
//          "utxo": "txHash:vout", 
//           "orderId": 123,    // orderid
//           "errMsg": "xxxxx"   // if errMsg,sell fail
//        }
//     ]
// }

}
await requestApi();

Parameter Details:

| Field Name | Type | Required | Description | | ---------- | ------ | -------- | ------------------------------------------------------------------------------------------------------------------- | | runesId | String | Yes | Unique identifier for the Runes token | | utxoVout | number | Yes | runes assets utxo location vout | | utxoTxHash | String | Yes | runes assets utxo location | | utxoValue | number | Yes | runes assets utxo value, unit: sats | | unitPrice | number | Yes | runes assets unit price, unit: sats | | amount | String | Yes | runes assets amount | | makerFee | number | No | MakerFee charged by a pending source If a makerFee is charged, the totalPrice shall include the makerFee, unit: BTC |

Cancel Runes Orders

The SDK supports automatic assembly of off-shelf transactions, allowing multiple orders to be canceled at the same time. Here's how you can use it:

await sdk.cancelSell({
  orderIds: [orderId1, orderId2],  // OKX Runes order IDs, you can get orderId by sdk.api.getOrders()
});

Parameter Details:

| Field Name | Type | Required | Description | | ---------- | ----- | -------- | ------------------- | | orderIds | Array | Yes | Runes order id list |

API

The SDK provides several APIs to query transaction-related information. For detailed parameter usage, please refer to the Runes API.

getOrders

Retrieve orders from the OKX marketplace using this API. The detailed response interface can be found in Runes API. Here's demo:

import { ORDERS_SORT_RULES } from '@okxweb3/marketplace-runes'

const requestApi = async () => {
  const data = await sdk.api.getOrders({
    runesId: '840000:3',  // Desired Runes ID
    sortBy: ORDERS_SORT_RULES.UNIT_PRICE_ASC  // Sorting rule
  });

  // data structure demo, you can get orderId

  // {
  //     "cursor": "1",
  //     "items": [
  //         {
  //           "amount": "889806",
  //           "orderId": 201268,
  //           "ticker": "DOG•GO•TO•THE•MOON",
  //           "tickerId": "840000:3",
  //           "totalPrice": {
  //               "price": "0.05472306",
  //               "satPrice": "5472306",
  //           },
  //           "unitPrice": {
  //               "price": "0.0000000615",
  //               "satPrice": "6.15",
  //           },
  //         }
  //     ]
  //   }

}
await requestApi();

Parameter Details:

| Field Name | Type | Required | Description | | ---------- | ------ | -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | runesId | String | Yes | Unique identifier for the Runes token | | cursor | String | No | Cursor for retrieving order sequence numbers (max 1000) | | limit | Number | No | Page size, default 10, max 100. Specifies the maximum number of orders returned. | | sortBy | String | No | Sorting rule, default is ascending by unit price.Options include: unitPriceAsc, unitPriceDesc, totalPriceAsc, totalPriceDesc, listedTimeAsc, listedTimeDesc.  You can importORDERS_SORT_RULES from @okxweb3/marketplace-runes and use it. |

getSellersPsbt

Use this API to obtain seller PSBTs for OKX marketplace orders. Note that the PSBTs do not include the seller's signature. The detailed response interface can be found in Runes API. Here's demo:

const requestApi = async () => {
  // you can get orderId by sdk.api.getOrders()
  const data = await sdk.api.getSellersPsbt([orderId1, orderId2]);

  // data structure demo, you can get seller PSBT from sellerPSBT

  // {
  //   "orderInfos":[
  //     {
  //       "orderId": 11111,
  //       "sellerPSBT": "cHNidP8BAPW+W04EtAAAAAA=",
  //       "orderSource": 34,   //34 - OKX  82-Xverse
  //       "makerFeeAddress": "feeAddress", //platform makerFee address
  //       "makerFee": "0.003", // 0.003 BTC
  //       "takerFeeAddress": "feeAddress", //platform takerFee address
  //       "takerFee": "0.003", // 0.003 BTC
  //     }
  //   ],
  // }

}
await requestApi();

Parameter Details:

| Field Name | Type | Required | Description | | ---------- | ----- | -------- | ----------- | | orderIds | Array | Yes | Order IDs |

sendTransations

Broadcast Runes purchase transactions with this API to obtain the transaction hash (txHash). The detailed response interface can be found in Runes API. Here's demo:

const requestApi = async () => {
  const data = await sdk.api.sendTransations({ 
    buyerPSBT: psbt, 
    fromAddress: address, 
    orderIds 
  });
  // data structure demo, you can get buy transation txHash

  // {
  //   "txHash": "1",
  // }
}
await requestApi();

Parameter Details:

| Field Name | Type | Required | Description | | ----------- | ------ | -------- | ----------------------------------------------------------------------------------------------------------- | | fromAddress | String | Yes | Buyer's payment address | | orderIds | Array | Yes | IDs of the orders to purchase | | buyerPSBT | String | Yes | Signed buyer PSBT, must be in base64 format, and assembled according to the specified transaction structure |

getOwnedAsserts

Get the runes assets from the OKX marketplace using this API. The detailed response interface can be found in Runes API. Here's demo:

const requestApi = async () => {
  const data = await sdk.api.getOwnedAsserts({
    runesId: '840000:3',  // Desired Runes ID
  });

  // data structure demo

  // {
  //   "cursor": "1",
  //   "items": [
  //     {
  //       "amount": "500000",
  //       "assetId": "28912795273673038",
  //       "chain": 0,
  //       "confirmations": null,
  //       "inscriptionNum": "",
  //       "listTime": 1714399069,
  //       "name": "DOG•GO•TO•THE•MOON",
  //       "orderId": 201296,
  //       "ownerAddress": "bc1p3fj806enwnmz04444mpm42ykgdcta9p5mvzx46hp8wmg2knpwxpq0k46x9",
  //       "status": 1,
  //       "symbol": "🐕",
  //       "ticker": "DOG•GO•TO•THE•MOON",
  //       "tickerIcon": "https://static.coinall.ltd/cdn/web3/currency/token/1714125941761.png/type=png_350_0",
  //       "tickerId": "840000:3",
  //       "tickerType": 4,
  //       "totalPrice": {
  //       "currency": "BTC",
  //       "currencyUrl": "https://static.coinall.ltd/cdn/nft/4834651a-7c4e-4249-91c1-cf680af39dc0.png",
  //       "price": "0.031895",
  //       "satPrice": "3189500",
  //       "usdPrice": "1979.7003235"
  //     },
  //       "txHash": "",
  //       "unavailable": null,
  //       "unitPrice": {
  //       "currency": "BTC",
  //       "currencyUrl": "https://static.coinall.ltd/cdn/nft/4834651a-7c4e-4249-91c1-cf680af39dc0.png",
  //       "price": "0.00000006379",
  //       "satPrice": "6.379",
  //       "usdPrice": "0.003959400647"
  //     },
  //       "utxoTxHash": "ce302f5c946ff3ef502eade58405d64b545d59de9fcd731314b88ddadf709ca6",
  //       "utxoValue": "546",
  //       "utxoVout": 2
  //     }
  //   ]
  // }

}
await requestApi();

Parameter Details:

| Field Name | Type | Required | Description | | ---------- | ------ | -------- | ------------------------------------- | | runesId | String | Yes | Unique identifier for the Runes token |

sellRunes

Sell runes assets to the OKX marketplace using this API. The detailed response interface can be found in Runes API. Here's demo:

const requestApi = async () => {
  const { result } = await sdk.api.sellRunes({
    items: [{
        utxo: 'ce302f5c946ff3ef502eade58405d64b545d59de9fcd731314b88ddadf709ca6:0',
        totalPrice: 0.1,
        psbt: 'cHNidP8BALICAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/////uiAcc6RHA+aers8xRS3pcg6QslcZrjUYkUDOf0F0aJAAAAAAAP////8CAAAAAAAAAAAiUSDBJU2tQKrqEh5T4M7AmYY2L2zUIieW0ZSMlHkbNSgctbi5ZQAAAAAAIlEgOalwW0bhaMYRYpVC76AtqEx3l3po000r2GHSSfEYIhIAAAAAAAEBKwAAAAAAAAAAIlEgwSVNrUCq6hIeU+DOwJmGNi9s1CInltGUjJR5GzUoHLUBAwQBAAAAARcgYW4nMjhA7gwq5DTZmCZ/gRcJiLqUd/eNzQD8JHon20AAAQErSgEAAAAAAAAiUSA5qXBbRuFoxhFilULvoC2oTHeXemjTTSvYYdJJ8RgiEgEDBIMAAAABE0Hc/KUEmP4rXEeBdm7pJk2MtthYBFWG5TuVYI0Vcg85JshzH5hTxhJCsJBYI12FgMSDw7MSzBxIaZ4IEPI8qCj+gwEXIOHNunNxyMsNjrfkS7IpiwDSn9zL1jV8kgNEu4MLntyoAAABBSDhzbpzccjLDY635EuyKYsA0p/cy9Y1fJIDRLuDC57cqAA=';
        unitPrice: 1000000
    }],
    runesId: '840000:3',
    walletAddress: 'bc1p3fj806enwnmz04444mpm42ykgdcta9p5mvzx46hp8wmg2knpwxpq0k46x9'
  })

  // data structure demo

// {
//    "result": [
//       {
//          "utxo": "txHash:vout", 
//           "orderId": 123,    // orderid
//           "errMsg": "xxxxx"   // if errMsg,sell fail
//        }
//     ]
// }

}
await requestApi();

Parameter Details:

| Field Name | Type | Required | Description | | ------------- | ------ | -------- | ------------------------------------------------------------------------------------------------------------------- | | runesId | String | Yes | Unique identifier for the Runes token | | walletAddress | String | Yes | wallet address | | utxo | String | Yes | runes assets utxo location | | totalPrice | number | Yes | runes assets total price, unit: BTC | | unitPrice | number | Yes | runes assets unit price, unit: sats | | psbt | String | Yes | runes assets sell psbt | | makerFee | number | No | MakerFee charged by a pending source If a makerFee is charged, the totalPrice shall include the makerFee, unit: BTC |

Middleware

Middleware allows you to access wallet addresses derived from the private key and public key for transaction assembly. It also provides pre-purchase parameters and post-purchase results, enabling actions throughout the purchase lifecycle.

import { OkxRunesSDK } from '@okxweb3/marketplace-runes'

const sdk = new OkxRunesSDK()

// Register middleware
sdk.use(async (ctx, next) => {
  console.log(`Calling ${ctx.type} with params: `, ctx)
  await next()
  console.log(`Result of ${ctx.type}: `, ctx)
})