{"id":27111951,"url":"https://github.com/concealnetwork/conceal-api","last_synced_at":"2025-10-15T09:42:21.622Z","repository":{"id":57205133,"uuid":"138053916","full_name":"ConcealNetwork/conceal-api","owner":"ConcealNetwork","description":"Conceal API - JavaScript Interface (RPC/API)","archived":false,"fork":false,"pushed_at":"2024-02-28T14:50:44.000Z","size":165,"stargazers_count":19,"open_issues_count":0,"forks_count":12,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-03-11T21:07:21.516Z","etag":null,"topics":["api","ccx","conceal","concealx","cryptocurrency","daemon","daemon-rpc","javascript","js","privacy","rpc-server","wallet-rpc"],"latest_commit_sha":null,"homepage":"https://explorer.conceal.network/","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ConcealNetwork.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2018-06-20T15:47:04.000Z","updated_at":"2023-05-08T04:02:57.000Z","dependencies_parsed_at":"2024-02-28T16:05:22.834Z","dependency_job_id":null,"html_url":"https://github.com/ConcealNetwork/conceal-api","commit_stats":{"total_commits":114,"total_committers":7,"mean_commits":"16.285714285714285","dds":0.5614035087719298,"last_synced_commit":"7737be7b82a99903d800fff3e6cde9f7adeba856"},"previous_names":["thecirclefoundation/conceal-js"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ConcealNetwork%2Fconceal-api","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ConcealNetwork%2Fconceal-api/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ConcealNetwork%2Fconceal-api/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ConcealNetwork%2Fconceal-api/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ConcealNetwork","download_url":"https://codeload.github.com/ConcealNetwork/conceal-api/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247575718,"owners_count":20960820,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["api","ccx","conceal","concealx","cryptocurrency","daemon","daemon-rpc","javascript","js","privacy","rpc-server","wallet-rpc"],"created_at":"2025-04-07T01:25:31.794Z","updated_at":"2025-10-15T09:42:16.573Z","avatar_url":"https://github.com/ConcealNetwork.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Conceal-API: Javascript/Node.js interface (RPC/API)\nJavascript/Node.js interface to Conceal cryptocurrency RPC/API.\n\nThere are three RPC servers built in to the three programs *conceald*, *concealwallet* and *walletd*.\nThey can each be started with the argument `--help` to display command line options.\n\n### conceald\nA node on the P2P network (daemon) with no wallet functions; console interactive. To launch:\n```\n$ ./conceald\n```\nThe default daemon RPC port is 16000 and the default P2P port is 15000.\n### walletd\nA node on the P2P network (daemon) with wallet functions; console non-interactive. To launch, assuming that your `my.wallet` file is in the current directory:\n```\n$ ./walletd --container-file my.wallet --container-password PASSWD --local --bind-port 3333\n```\nThe wallet functions RPC port is 3333. The default daemon P2P port is 15000. The default daemon RPC port is 16000. The `--local` option activates the daemon; otherwise, a remote daemon can be used.\n### concealwallet\nA simple wallet; console interactive unless RPC server is running; requires access to a node daemon for full functionality. To launch, assuming that your `my.wallet` file is in the current directory:\n```\n$ ./concealwallet --rpc-bind-port 3333 --wallet-file my --password PASSWORD\n```\nThe wallet functions RPC port is 3333. By default the wallet connects with the daemon on port 16000. It is possible to run several instances simultaneously using different wallets and ports.\n## Quick start for node.js\n```\n$ npm install conceal-api\n$ ./conceald # launch the network daemon\n$ ./concealwallet --rpc-bind-port PORT --wallet-file my --password PASSWORD # launch the simple wallet\n```\nCreate and run a test program.\n```\n$ node test.js\n```\nThe test program could contain, for example, a payment via the simple wallet's RPC server\n```\nconst CCX = require('conceal-api')\nconst ccx = new CCX({\n  daemonHost: 'http://localhost', \n  walletHost: 'http://localhost', \n  daemonRpcPort: 16000,\n  walletRpcPort: 3333\n})\n\nccx.send([{\n  address: 'ccx7Xd3NBbBiQNvv7vMLXmGMHyS8AVB6EhWoHo5EbGfR2Ki9pQnRTfEBt3YxYEVqpUCyJgvPjBYHp8N2yZwA7dqb4PjaGWuvs4',\n  amount: 1234567\n}])\n.then((res) =\u003e { console.log(res) }) // display tx hash upon success\n.catch((err) =\u003e { console.log(err) }) // display error message upon failure\n```\n## API\n```\nconst CCX = require('conceal-api')\nconst ccx = new CCX({\n  daemonHost: \u003cdaemonHost\u003e, \n  walletHost: \u003cwalletHost\u003e,\n  walletPath: \u003cwalletPath\u003e,\n  daemonRpcPort: \u003cdaemonRpcPort\u003e, // port for daemon\n  walletRpcPort: \u003cwalletRpcPort\u003e, // port for walletd\n  walletRpcUser: \u003cwalletRpcUser\u003e, // optional, if not set no authentication will be made\n  walletRpcPass: \u003cwalletRpcPass\u003e, // optional, if not set no authentication will be made\n  timeout: \u003ctimeout\u003e // timeout for RPC calls\n})\n```\nccx.rpc returns a promise, where *rpc* is any of the methods below:\n\n* [Wallet RPC (must provide walletRpcPort)](#wallet)\n  * concealwallet\n    * [Get height](#height)\n    * [Get balance](#balance)\n    * [Get messages](#messages)\n    * [Get incoming payments](#payments)\n    * [Get transfers](#transfers)\n    * [Get number of unlocked outputs](#outputs)\n    * [Reset wallet](#reset)\n    * [Store wallet](#store)\n    * [Export wallet](#export-wallet-concealwallet)\n    * [Export wallet keys](#export-wallet-keys-concealwallet)\n    * [Optimize wallet](#optimize)\n    * [Send transfers](#send)\n  * walletd\n    * [Reset or replace wallet](#resetOrReplace)\n    * [Get status](#status)\n    * [Get balance](#get-balance-walletd)\n    * [Create address](#create-address-walletd)\n    * [Create address list](#create-address-list-walletd)\n    * [Delete address](#delete-address-walletd)\n    * [Get addresses](#get-addresses-walletd)\n    * [Create integrated](#create-integrated-address-walletd)\n    * [Split integrated](#split-integrated-address-walletd)\n    * [Get view secret Key](#get-view-secret-key-walletd)\n    * [Get spend keys](#get-spend-keys-walletd)\n    * [Get block hashes](#get-block-hashes-walletd)\n    * [Get transaction](#get-transaction-walletd)\n    * [Get unconfirmed transactions](#get-unconfirmed-transactions-walletd)\n    * [Get transaction hashes](#get-transaction-hashes-walletd)\n    * [Get transactions](#get-transactions-walletd)\n    * [Send transaction](#send-transaction-walletd)\n    * [Create delayed transaction](#create-delayed-transaction-walletd)\n    * [Get delayed transaction hashes](#get-delayed-transaction-hashes-walletd)\n    * [Delete delayed transaction](#delete-delayed-transaction-walletd)\n    * [Send delayed transaction](#send-delayed-transation-walletd)\n    * [Get incoming messages from transaction extra field](#get-incoming-messages-from-transaction-extra-field-walletd)\n    * [Create Deposit](#create-deposit-walletd)\n    * [Send Deposit](#send-deposit-walletd)\n    * [Get Deposit](#get-deposit-walletd)\n    * [Withdraw Deposit](#withdraw-deposit-walletd)\n* [Daemon RPC (must provide daemonRpcPort)](#daemon)\n  * [Get info](#info)\n  * [Get index](#index)\n  * [Get count](#count)\n  * [Get currency ID](#currencyId)\n  * [Get block hash by height](#blockHashByHeight)\n  * [Get block header by height](#blockHeaderByHeight)\n  * [Get block header by hash](#blockHeaderByHash)\n  * [Get last block header](#lastBlockHeader)\n  * [Get block](#block)\n  * [Get blocks](#blocks)\n  * [Get block template](#blockTemplate)\n  * [Submit block](#submitBlock)\n  * [Get transaction](#transaction)\n  * [Get transactions](#transactions)\n  * [Get transaction pool](#transactionPool)\n  * [Send raw transaction](#sendRawTransaction)\n\n### \u003ca name=\"wallet\"\u003e\u003c/a\u003eWallet RPC (must provide walletRpcPort)\n\n#### \u003ca name=\"height\"\u003e\u003c/a\u003eGet height (concealwallet)\n```\nccx.height() // get last block height\n```\n#### \u003ca name=\"balance\"\u003eGet balance (concealwallet)\n```\nccx.balance() // get wallet balances\n```\n#### \u003ca name=\"messages\"\u003eGet messages (concealwallet)\n```\nconst opts = {\n  firstTxId: FIRST_TX_ID, // (integer, optional), ex: 10\n  txLimit: TX_LIMIT // maximum number of messages (integer, optional), ex: 10\n}\nccx.messages(opts) // opts can be omitted\n```\n#### \u003ca name=\"payments\"\u003eGet incoming payments (concealwallet)\n```\nconst paymentId = PAYMENT_ID // (64-digit hex string, required), ex: '0ab1...3f4b'\nccx.payments(paymentId)\n```\n#### \u003ca name=\"transfers\"\u003eGet transfers (concealwallet)\n```\nccx.transfers() // gets all transfers\n```\n#### \u003ca name=\"outputs\"\u003eGet number of unlocked outputs (concealwallet)\n```\nccx.outputs() // gets outputs available as inputs for a new transaction\n```\n#### \u003ca name=\"reset\"\u003eReset wallet (concealwallet)\n```\nccx.reset() // discard wallet cache and resync with block chain\n```\n#### \u003ca name=\"store\"\u003eStore wallet (concealwallet)\n```\nccx.store() // save wallet cache to disk\n```\n#### \u003ca name=\"exportWallet\"\u003eExport wallet (concealwallet)\n```\nconst exportFilename = FILE_NAME // (string, required), ex: 'wallet.dat'\nccx.exportWallet(exportFilename) // save wallet cache to disk\n```  \n#### \u003ca name=\"exportWalletKeys\"\u003eExport wallet keys (concealwallet)\n```\nconst exportFilename = FILE_NAME // (string, required), ex: 'walletKeys.dat'\nccx.exportWalletKeys(exportFilename) // save wallet cache to disk\n```\n#### \u003ca name=\"optimize\"\u003eOptimize wallet (concealwallet)\n```\nccx.optimize() // combines many available outputs into a few by sending to self\n```\n#### \u003ca name=\"send\"\u003eSend transfers (concealwallet)\n```\nconst transfers = [{ address: ADDRESS, amount: AMOUNT, message: MESSAGE }, ...] // ADDRESS = destination address (string, required), AMOUNT = raw CCX (integer, required), MESSAGE = transfer message to be encrypted (string, optional)\nconst opts = {\n  transfers: transfers, // (array, required), ex: [{ address: 'ccx7Xd...', amount: 1000, message: 'refund' }]\n  fee: FEE, // (raw CCX integer, optional, default is minimum required), ex: 10\n  anonimity: MIX_IN, // input mix count (integer, optional, default 2), ex: 6\n  paymentId: PAYMENT_ID, // (64-digit hex string, optional), ex: '0ab1...3f4b'\n  unlockHeight: UNLOCK_HEIGHT // block height to unlock payment (integer, optional), ex: 12750\n}\nccx.send(opts)\n```\n#### \u003ca name=\"resetOrReplace\"\u003eReset or replace wallet (walletd)\n```\nconst viewSecretKey = VIEW_SECRET_KEY // (64-digit hex string, optional), ex: '0ab1...3f4b'\nccx.resetOrReplace(viewSecretKey) // If no key, wallet is re-synced. If key, a new address is created from the key for a new wallet.\n```\n#### \u003ca name=\"status\"\u003eGet status (walletd)\n```\nccx.status()\n```\n#### \u003ca name=\"getBalance\"\u003eGet balance (walletd)\n```\nconst address = ADDRESS // (string, required), ex: 'ccx7Xd...'\nccx.getBalance(address)\n```\n#### \u003ca name=\"createAddress\"\u003eCreate address (walletd)\n```\nccx.createAddress()\n```\n#### \u003ca name=\"createAddressList\"\u003eCreate address (walletd)\n```\nconst opts = {\n  privateSpendKeys: [PRIVATE_SPEND_KEY], // Private spend keys to import (array, 64-digit hex string), ex: '0ab1...3f4b'\n  reset: RESET, //Determines whether reset wallet or not. Defaults to false\n}\nccx.createAddressList(opts)\n```\n#### \u003ca name=\"deleteAddress\"\u003eDelete address (walletd)\n```\nconst address = ADDRESS // (string, required), ex: 'ccx7Xd...'\nccx.deleteAddress(address)\n```\n#### \u003ca name=\"getAddresses\"\u003eGet addresses (walletd)\n```\nccx.getAddresses()\n```\n#### \u003ca name=\"createIntegrated\"\u003eCreate integrated address (walletd)\n```\nconst address = ADDRESS // (string, required), ex: 'ccx7Xd...'\nconst paymentId = PAYMENT_ID // (64-digit hex string, optional), ex: '0ab1...3f4b'\nccx.createIntegrated(address,paymentId) // If no key, wallet is re-synced. If key, a new address is created from the key for a new wallet.\n```\n#### \u003ca name=\"splitIntegrated\"\u003eSplit integrated address (walletd)\n```\nconst address = ADDRESS // (string, required), ex: 'ccx7Xd...'\nccx.splitIntegrated(address) // If no key, wallet is re-synced. If key, a new address is created from the key for a new wallet.\n```\n#### \u003ca name=\"getViewSecretKey\"\u003eGet view secret key (walletd)\n```\nccx.getViewSecretKey()\n```\n#### \u003ca name=\"getSpendKeys\"\u003eGet spend keys (walletd)\n```\nconst address = ADDRESS // (string, required), ex: 'ccx7Xd...'\nccx.getSpendKeys(address)\n```\n#### \u003ca name=\"getBlockHashes\"\u003eGet block hashes (walletd)\n```\nconst firstBlockIndex = FIRST_BLOCK_INDEX // index of first block (integer, required), ex: 12750\nconst blockCount = BLOCK_COUNT // number of blocks to include (integer, required), ex: 30\nccx.getBlockHashes(firstBlockIndex, blockCount)\n```\n#### \u003ca name=\"getTransaction\"\u003eGet transaction (walletd)\n```\nconst hash = HASH // (64-digit hex string, required), ex: '0ab1...3f4b'\nccx.getTransaction(hash) // get transaction details given hash\n```\n#### \u003ca name=\"getUnconfirmedTransactions\"\u003eGet unconfirmed transactions (walletd)\n```\nconst addresses = [ADDRESS1, ADDRESS2, ...] // ADDRESS = address string; address to include\nccx.getUnconfirmedTransactions(addresses) // addresses can be omitted\n```\n#### \u003ca name=\"getTransactionHashes\"\u003eGet transactionHashes (walletd)\n```\nconst opts = { // either blockHash or firstBlockIndex is required\n  blockHash: BLOCK_HASH, // hash of first block (64-digit hex string, see comment above), ex: '0ab1...3f4b'\n  firstBlockIndex: FIRST_BLOCK_INDEX, // index of first block (integer, see comment above), ex: 12750\n  blockCount: BLOCK_COUNT, // number of blocks to include (integer, required), ex: 30\n  addresses: [ADDRESS, ...], filter (array of address strings, optional), ex: ['ccx7Xd...']\n  paymentId: PAYMENT_ID // filter (64-digit hex string, optional), ex: '0ab1...3f4b'\n}\nccx.getTransactionHashes(opts)\n```\n#### \u003ca name=\"getTransactions\"\u003eGet transactions (walletd)\n```\nconst opts = { // either blockHash or firstBlockIndex is required\n  blockHash: BLOCK_HASH, // hash of first block (64-digit hex string, see comment above), ex: '0ab1...3f4b'\n  firstBlockIndex: FIRST_BLOCK_INDEX, // index of first block (integer, see comment above), ex: 12750\n  blockCount: BLOCK_COUNT, // number of blocks to include (integer, required), ex: 30\n  addresses: [ADDRESS, ...], filter (array of address strings, optional), ex: ['ccx7Xd...']\n  paymentId: PAYMENT_ID // filter (64-digit hex string, optional), ex: '0ab1...3f4b'\n}\nccx.getTransactions(opts)\n```\n#### \u003ca name=\"sendTransaction\"\u003eSend transaction (walletd)\n```\nconst transfers = [{ address: ADDRESS, amount: AMOUNT, message: MESSAGE }, ...] // ADDRESS = destination address (string, required), AMOUNT = raw CCX (integer, required), MESSAGE = transfer message to be encrypted (string, optional)\nconst addresses = [ADDRESS1, ADDRESS2, ...] // ADDRESS = source address string; address in wallet to take funds from\nconst opts = {\n  transfers: transfers, // (array, required), ex: [{ address: 'ccx7Xd...', amount: 1000, message: 'tip' }]\n  addresses: addresses, // (array, optional), ex: ['ccx7Xd...', 'ccx7Xe...']\n  changeAddress: ADDRESS, // change return address (address string, optional if only one address in wallet or only one source address given), ex: 'ccx7Xd...'\n  paymentId: PAYMENT_ID, // filter (64-digit hex string, optional), ex: '0ab1...3f4b'\n  anonimity: MIX_IN, // input mix count (integer, optional, default 2), ex: 6\n  fee: FEE, // (raw CCX integer, optional, default is minimum required), ex: 10\n  unlockHeight: UNLOCK_HEIGHT, // block height to unlock payment (integer, optional), ex: 12750\n  extra: EXTRA // (variable length string, optional), ex: '123abc'\n}\nccx.sendTransaction(opts)\n```\n#### \u003ca name=\"createDelayedTransaction\"\u003eCreate delayed transaction (walletd)\n```\nconst transfers = [{ address: ADDRESS, amount: AMOUNT, message: MESSAGE }, ...] // ADDRESS = destination address (string, required), AMOUNT = raw CCX (integer, required), MESSAGE = transfer message to be encrypted (string, optional)\nconst addresses = [ADDRESS1, ADDRESS2, ...] // ADDRESS = source address string; address in wallet to take funds from\nconst opts = {\n  transfers: transfers, // (array, required), ex: [{ address: 'ccx7Xd...', amount: 1000, message: 'tip' }]\n  addresses: addresses, // (array, optional), ex: ['ccx7Xd...', 'ccx7Xe...']\n  changeAddress: ADDRESS, // change return address (address string, optional if only one address in wallet or only one source address given), ex: 'ccx7Xd...'\n  paymentId: PAYMENT_ID, // filter (64-digit hex string, optional), ex: '0ab1...3f4b'\n  anonimity: MIX_IN, // input mix count (integer, optional, default 2), ex: 6\n  fee: FEE, // (raw CCX integer, optional, default is minimum required), ex: 10\n  unlockHeight: UNLOCK_HEIGHT, // block height to unlock payment (integer, optional), ex: 12750\n  extra: EXTRA // (variable length string, optional), ex: '123abc'\n}\nccx.createDelayedTransaction(opts) // create but do not send transaction\n```\n#### \u003ca name=\"getDelayedTransactionHashes\"\u003eGet delayed transaction hashes (walletd)\n```\nccx.getDelayedTransactionHashes()\n```\n#### \u003ca name=\"deleteDelayedTransaction\"\u003eDelete delayed transaction (walletd)\n```\nconst hash = HASH // (64-digit hex string, required), ex: '0ab1...3f4b'\nccx.deleteDelayedTransaction(hash)\n```\n#### \u003ca name=\"sendDelayedTransaction\"\u003eSend delayed transaction (walletd)\n```\nconst hash = HASH // (64-digit hex string, required), ex: '0ab1...3f4b'\nccx.sendDelayedTransaction(hash)\n```\n#### \u003ca name=\"getMessagesFromExtra\"\u003eGet incoming messages from transaction extra field (walletd)\n```\nconst extra = EXTRA // (hex string, required), ex: '0199...c3ca'\nccx.getMessagesFromExtra(extra)\n```\n#### \u003ca name=\"createDeposit\"\u003eCreate Deposit (walletd)\n```\nconst opts = {\n  sourceAddress: ADDRESS, // Wallet address (string), ex: 'ccx7Xd...'\n  amount: AMOUNT, //The amount to deposit (integer), ex: 12750\n  term: TERM, // The length of the deposit (integer, minimum 21,900) ex: 5600\n}\nccx.createDeposit(opts)\n```\n#### \u003ca name=\"sendDeposit\"\u003eSend Deposit (walletd)\n```\nconst opts = {\n  sourceAddress: ADDRESS, // Wallet address (string), ex: 'ccx7Xd...'\n  amount: AMOUNT, //The amount to deposit (integer), ex: 12750\n  term: TERM, // The length of the deposit (integer, minimum 21,900) ex: 5600,\n  destinationAddress: ADDRESS // Wallet address of receiver (string), ex: 'ccx7Xd...'\n}\nccx.sendDeposit(opts)\n```\n#### \u003ca name=\"getDeposit\"\u003eGet Deposit (walletd)\n```\nconst id = DEPOSIT_ID // Id of the deposit (integer, required), ex: '1'\nccx.getDeposit(id)\n```\n#### \u003ca name=\"withdrawDeposit\"\u003eWithdraw Deposit (walletd)\n```\nconst id = DEPOSIT_ID // Id of the deposit (integer, required), ex: '1'\nccx.withdrawDeposit(id)\n```\n### \u003ca name=\"daemon\"\u003eDaemon RPC (must provide daemonRpcPort)\n\n#### \u003ca name=\"info\"\u003eGet info\n```\nccx.info() // get information about the block chain, including next block height\n```\n#### \u003ca name=\"index\"\u003eGet index\n```\nccx.index() // get next block height\n```\n#### \u003ca name=\"count\"\u003eGet count\n```\nccx.count() // get next block height\n```\n#### \u003ca name=\"currencyId\"\u003eGet currency ID\n```\nccx.currencyId()\n```\n#### \u003ca name=\"blockHashByHeight\"\u003eGet block hash by height\n```\nconst height = HEIGHT // (integer, required), ex: 12750\nccx.blockHashByHeight(height) // get block hash given height\n```\n#### \u003ca name=\"blockHeaderByHeight\"\u003eGet block header by height\n```\nconst height = HEIGHT // (integer, required), ex: 12750\nccx.blockHeaderByHeight(height) // get block header given height\n```\n#### \u003ca name=\"blockHeaderByHash\"\u003eGet block header by hash\n```\nconst hash = HASH // (64-digit hex string, required), ex: '0ab1...3f4b'\nccx.blockHeaderByHash(hash) // get block header given hash\n```\n#### \u003ca name=\"lastBlockHeader\"\u003eGet last block header\n```\nccx.lastBlockHeader()\n```\n#### \u003ca name=\"block\"\u003eGet block\n```\nconst hash = HASH // (64-digit hex string, required), ex: '0ab1...3f4b'\nccx.block(hash)\n```\n#### \u003ca name=\"blocks\"\u003eGet blocks\n```\nconst height = HEIGHT // (integer, required), ex: 12750\nccx.blocks(height) // returns 31 blocks up to and including HEIGHT\n```\n#### \u003ca name=\"blockTemplate\"\u003eGet block template\n```\nconst address = ADDRESS // destination address (string, required), ex: 'ccx7Xd...'\nconst reserveSize = RESERVE_SIZE // bytes to reserve in block for work, etc. (integer \u003c 256, optional, default 14), ex: 255\nconst opts = {\n  address: address,\n  reserveSize: reserveSize\n}\nccx.blockTemplate(opts)\n```\n#### \u003ca name=\"submitBlock\"\u003eSubmit block\n```\nconst block = BLOCK // block blob (hex string, required), ex: '0300cb9eb...'\nccx.submitBlock(block)\n```\n#### \u003ca name=\"transaction\"\u003eGet transaction\n```\nconst hash = HASH // (64-digit hex string, required), ex: '0ab1...3f4b'\nccx.transaction(hash)\n```\n#### \u003ca name=\"transactions\"\u003eGet transactions\n```\nconst arr = [HASH1, HASH2, ...] // (array of 64-digit hex strings, required), ex: ['0ab1...3f4b']\nccx.transactions(arr)\n```\n#### \u003ca name=\"transactionPool\"\u003eGet transaction pool\n```\nccx.transactionPool()\n```\n#### \u003ca name=\"sendRawTransaction\"\u003eSend raw transaction\n```\nconst transaction = TRANSACTION // transaction blob (hex string, required), ex: ''01d86301...'\nccx.sendRawTransaction(transaction)\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fconcealnetwork%2Fconceal-api","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fconcealnetwork%2Fconceal-api","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fconcealnetwork%2Fconceal-api/lists"}