diff --git a/frontend/package-lock.json b/frontend/package-lock.json
index 9f8042624..34006f189 100644
--- a/frontend/package-lock.json
+++ b/frontend/package-lock.json
@@ -5040,7 +5040,6 @@
"integrity": "sha512-ctjwuntPfZZT2mNj2NDIVu51t9cvbhl/16epc5xEwyzyDt76pX9UgwvY+MbXrf/C/FWwdtmNtfP698BKI+9leQ==",
"dev": true,
"license": "MIT",
- "peer": true,
"peerDependencies": {
"tslib": "^1.10.0"
}
@@ -5050,7 +5049,6 @@
"resolved": "https://registry.npmjs.org/@angular/core/-/core-9.0.0.tgz",
"integrity": "sha512-6Pxgsrf0qF9iFFqmIcWmjJGkkCaCm6V5QNnxMy2KloO3SDq6QuMVRbN9RtC8Urmo25LP+eZ6ZgYqFYpdD8Hd9w==",
"dev": true,
- "peer": true,
"peerDependencies": {
"rxjs": "^6.5.3",
"tslib": "^1.10.0",
@@ -24159,6 +24157,8 @@
"integrity": "sha512-cOyGQgMdhnRYtW2xrJUNrNYDjEgwQ+BrE2y93Bwz3h4DJ6vJRLfupemU5N3pbYsUlBHJf0u1j1UGk+NLW4d97g==",
"dev": true,
"requires": {
+ "@angular/compiler": "9.0.0",
+ "@angular/core": "9.0.0",
"app-root-path": "^3.0.0",
"aria-query": "^3.0.0",
"axobject-query": "2.0.2",
@@ -24174,17 +24174,17 @@
},
"dependencies": {
"@angular/compiler": {
- "version": "https://registry.npmjs.org/@angular/compiler/-/compiler-9.0.0.tgz",
+ "version": "9.0.0",
+ "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-9.0.0.tgz",
"integrity": "sha512-ctjwuntPfZZT2mNj2NDIVu51t9cvbhl/16epc5xEwyzyDt76pX9UgwvY+MbXrf/C/FWwdtmNtfP698BKI+9leQ==",
"dev": true,
- "peer": true,
"requires": {}
},
"@angular/core": {
- "version": "https://registry.npmjs.org/@angular/core/-/core-9.0.0.tgz",
+ "version": "9.0.0",
+ "resolved": "https://registry.npmjs.org/@angular/core/-/core-9.0.0.tgz",
"integrity": "sha512-6Pxgsrf0qF9iFFqmIcWmjJGkkCaCm6V5QNnxMy2KloO3SDq6QuMVRbN9RtC8Urmo25LP+eZ6ZgYqFYpdD8Hd9w==",
"dev": true,
- "peer": true,
"requires": {}
},
"source-map": {
diff --git a/frontend/src/app/app.module.ts b/frontend/src/app/app.module.ts
index 1410af51d..a61a02cbe 100644
--- a/frontend/src/app/app.module.ts
+++ b/frontend/src/app/app.module.ts
@@ -47,6 +47,7 @@ import { FontAwesomeModule, FaIconLibrary } from '@fortawesome/angular-fontaweso
import { faAngleDown, faAngleUp, faBolt, faChartArea, faCogs, faCubes, faDatabase, faExchangeAlt, faInfoCircle,
faLink, faList, faSearch, faTachometerAlt, faThList, faTint, faTv, faAngleDoubleDown, faAngleDoubleUp, faChevronDown, faFileAlt } from '@fortawesome/free-solid-svg-icons';
import { ApiDocsComponent } from './components/api-docs/api-docs.component';
+import { CodeTemplateComponent } from './components/api-docs/code-template.component';
import { TermsOfServiceComponent } from './components/terms-of-service/terms-of-service.component';
import { StorageService } from './services/storage.service';
import { HttpCacheInterceptor } from './services/http-cache.interceptor';
@@ -85,6 +86,7 @@ import { SponsorComponent } from './components/sponsor/sponsor.component';
FeesBoxComponent,
DashboardComponent,
ApiDocsComponent,
+ CodeTemplateComponent,
TermsOfServiceComponent,
SponsorComponent,
],
diff --git a/frontend/src/app/components/api-docs/api-docs.component.html b/frontend/src/app/components/api-docs/api-docs.component.html
index a727bbb88..908baa3f4 100644
--- a/frontend/src/app/components/api-docs/api-docs.component.html
+++ b/frontend/src/app/components/api-docs/api-docs.component.html
@@ -5,279 +5,832 @@
+
- Websocket
+ Addresses
+
+
+
+ GET Address
+
+
-
-
- Endpoint
- Description
-
-
- wss://{{ hostname }}{{ network.val === '' ? '' : '/' + network.val }}/api/v1/ws
- Default push: {{ '{' }} action: 'want', data: ['blocks', ...] {{ '}' }}
to express what you want pushed. Available: blocks
, mempool-blocks
, live-2h-chart
, and stats
. Push transactions related to address: {{ '{' }} 'track-address': '3PbJ...bF9B' {{ '}' }}
to receive all new transactions containing that address as input or output. Returns an array of transactions. address-transactions
for new mempool transactions, and block-transactions
for new block confirmed transactions.
-
-
+
+
+
+
Description
+
Returns details about an address. Available fields: address
, chain_stats
, and mempool_stats
. {{ '{' }}chain,mempool{{ '}' }}_stats each contain an object with tx_count
, funded_txo_count
, funded_txo_sum
, spent_txo_count
, and spent_txo_sum
.
+
+
+
+
+
+
+ GET Address Transactions
+
+
+
+
+
+
Description
+
Get transaction history for the specified address/scripthash, sorted with newest first. Returns up to 50 mempool transactions plus the first 25 confirmed transactions. You can request more confirmed transactions using :last_seen_txid
(see below).
+
+
+
+
+
+
+
+ GET Address Transactions Chain
+
+
+
+
+
Description
+
Get confirmed transaction history for the specified address/scripthash, sorted with newest first. Returns 25 transactions per page. More can be requested by specifying the last txid seen by the previous query.
+
+
+
+
+
+
+
+ GET Address Transactions Mempool
+
+
+
+
+
+
+
Description
+
Get unconfirmed transaction history for the specified address/scripthash. Returns up to 50 transactions (no paging).
+
+
+
+
+
+
+
+
+ GET Address UTXO
+
+
+
+
+
+
+
Description
+
Get the list of unspent transaction outputs associated with the address/scripthash. Available fields: txid
, vout
, value
, and status
(with the status of the funding tx).There is also a valuecommitment
field that may appear in place of value
, plus the following additional fields: asset
/assetcommitment
, nonce
/noncecommitment
, surjection_proof
, and range_proof
.
+
+
+
+
+
+
-
- Fees
+
+ Assets
+
+
+
+ GET Assets
+
+
+
+
+
Description
+
Returns information about a Liquid asset.
+
+
+
+
+
-
+
+
+ GET Asset Transactions
+
+
+
+
+
Description
+
Returns transactions associated with the specified Liquid asset. For the network's native asset, returns a list of peg in, peg out, and burn transactions. For user-issued assets, returns a list of issuance, reissuance, and burn transactions. Does not include regular transactions transferring this asset.
+
+
+
+
+
+
+
+
+ GET Asset Supply
+
+
+
+
+
+
Description
+
Get the current total supply of the specified asset. For the native asset (L-BTC), this is calculated as [chain,mempool]_stats.peg_in_amount - [chain,mempool]_stats.peg_out_amount - [chain,mempool]_stats.burned_amount. For issued assets, this is calculated as [chain,mempool]_stats.issued_amount - [chain,mempool]_stats.burned_amount. Not available for assets with blinded issuances. If /decimal is specified, returns the supply as a decimal according to the asset's divisibility. Otherwise, returned in base units.
+
+
+
+
+
+
- Mempool
+ Blocks
+
+
+
+ GET Block
+
+
+
+
+
Description
+
Returns details about a block. Available fields: id
, height
, version
, timestamp
, bits
, nonce
, merkle_root
, tx_count
, size
, weight
, proof
, and previousblockhash
.
+
+
+
+
-
+
+
+ GET Block Height
+
+
+
+
+
Description
+
Returns the hash of the block currently at :height
.
+
+
+
+
+
+
+ GET Block Raw
+
+
+
+
+
Description
+
Returns the raw block representation in binary.
+
+
+
+
+
+
+
+
+ GET Block Status
+
+
+ Get Block Status
+
+
+
Description
+
Returns the confirmation status of a block. Available fields: in_best_chain
(boolean, false for orphaned blocks), next_best
(the hash of the next block, only available for blocks in the best chain).
+
+
+
+
+
+
+
+
+ GET Block Tip Height
+
+
+
+
+
+
+
Description
+
Returns the height of the last block.
+
+
+
+
+
+
+
+
+ GET Block Tip Hash
+
+
+
+
+
+
Description
+
Returns the hash of the last block.
+
+
+
+
+
+
+
+
+ GET Block Transaction ID
+
+
+
+
+
+
+
Description
+
Returns the transaction at index :index
within the specified block.
+
+
+
+
+
+
+
+
+
+ GET Block Transaction IDs
+
+
+
+
+
+
Description
+
Returns a list of all txids in the block.
+
+
+
+
+
+
+
+
+
+ GET Block Transactions
+
+
+
+
+
Description
+
Returns a list of transactions in the block (up to 25 transactions beginning at start_index
). Transactions returned here do not have the status
field, since all the transactions share the same block and confirmation status.
+
+
+
+
+
+
+
+
+ GET Blocks
+
+
+
+
+
+
+
Description
+
Returns the 10 newest blocks starting at the tip or at :start_height
if specified.
+
+
+
+
+
+
-
- Blocks
+
+ BSQ
+
-
-
- Endpoint
- Description
-
-
- GET {{ network.val === '' ? '' : '/' + network.val }}/api/block/:hash
- Returns details about a block. Available fields: id
, height
, version
, timestamp
, bits
, nonce
, merkle_root
, tx_count
, size
, weight
, proof
, and previousblockhash
.
-
-
- GET {{ network.val === '' ? '' : '/' + network.val }}/api/block/:hash/status
- Returns the confirmation status of a block. Available fields: in_best_chain
(boolean, false for orphaned blocks), next_best
(the hash of the next block, only available for blocks in the best chain).
-
-
- GET {{ network.val === '' ? '' : '/' + network.val }}/api/block/:hash/txs[/:start_index]
- Returns a list of transactions in the block (up to 25 transactions beginning at start_index
). Transactions returned here do not have the status
field, since all the transactions share the same block and confirmation status.
-
-
- GET {{ network.val === '' ? '' : '/' + network.val }}/api/block/:hash/txids
- Returns a list of all txids in the block.
-
-
- GET {{ network.val === '' ? '' : '/' + network.val }}/api/block/:hash/txid/:index
- Returns the transaction at index :index
within the specified block.
-
-
- GET {{ network.val === '' ? '' : '/' + network.val }}/api/block/:hash/raw
- Returns the raw block representation in binary.
-
-
- GET {{ network.val === '' ? '' : '/' + network.val }}/api/block-height/:height
- Returns the hash of the block currently at :height
.
-
-
- GET {{ network.val === '' ? '' : '/' + network.val }}/api/blocks[/:start_height]
- Returns the 10 newest blocks starting at the tip or at :start_height
if specified.
-
-
- GET {{ network.val === '' ? '' : '/' + network.val }}/api/blocks/tip/height
- Returns the height of the last block.
-
-
- GET {{ network.val === '' ? '' : '/' + network.val }}/api/blocks/tip/hash
- Returns the hash of the last block.
-
-
+
+
+ GET Address
+
+
+
+
+
+
Description
+
Returns all Bisq transactions belonging to a Bitcoin address, with 'B' prefixed in front of the address.
+
+
+
+
+
+
+
+
+ GET Block
+
+
+
+
+
+
+
Description
+
Returns all Bisq transactions that exist in a Bitcoin block.
+
+
+
+
+
+
+
+
+ GET Block Tip Height
+
+
+
+
+
+
Description
+
Returns the most recently processed Bitcoin block height processed by Bisq.
+
+
+
+
+
+
+
+
+ GET Blocks
+
+
+
+
+
+
+
Description
+
Returns :length Bitcoin blocks that contain Bisq transactions, starting from :index.
+
+
+
+
+
+
+
+
+
+ GET Stats
+
+
+
+
+
+
+
Description
+
Returns statistics about all Bisq transactions.
+
+
+
+
+
+
+
+
+ GET Transaction
+
+
+
+
+
+
+
Description
+
Returns details about a Bisq transaction.
+
+
+
+
+
+
+
+
+ GET Transactions
+
+
+
+ Get Mempool Txids
+
+
+
+
Description
+
Returns :length of latest Bisq transactions, starting from :index.
+
+
+
+
+
+
- Transactions
+ Fees
-
-
-
- Endpoint
- Description
-
-
- GET {{ network.val === '' ? '' : '/' + network.val }}/api/tx/:txid
- Returns details about a transaction. Available fields: txid
, version
, locktime
, size
, weight
, fee
, vin
, vout
, and status
.
-
-
- GET {{ network.val === '' ? '' : '/' + network.val }}/api/tx/:txid/status
- Returns the confirmation status of a transaction. Available fields: confirmed
(boolean), block_height
(optional), and block_hash
(optional).
-
-
- GET {{ network.val === '' ? '' : '/' + network.val }}/api/tx/:txid/hex
- Returns a transaction serialized as hex.
-
-
- GET {{ network.val === '' ? '' : '/' + network.val }}/api/tx/:txid/raw
- Returns a transaction as binary data.
-
-
- GET {{ network.val === '' ? '' : '/' + network.val }}/api/tx/:txid/merkleblock-proof
- Returns a merkle inclusion proof for the transaction using bitcoind's merkleblock format.
-
-
- GET {{ network.val === '' ? '' : '/' + network.val }}/api/tx/:txid/merkle-proof
- Returns a merkle inclusion proof for the transaction using Electrum's blockchain.transaction.get_merkle format.
-
-
- GET {{ network.val === '' ? '' : '/' + network.val }}/api/tx/:txid/outspend/:vout
- Returns the spending status of a transaction output. Available fields: spent
(boolean), txid
(optional), vin
(optional), and status
(optional, the status of the spending tx).
-
-
- GET {{ network.val === '' ? '' : '/' + network.val }}/api/tx/:txid/outspends
- Returns the spending status of all transaction outputs.
-
-
- POST {{ network.val === '' ? '' : '/' + network.val }}/api/tx
- Broadcast a raw transaction to the network. The transaction should be provided as hex in the request body. The txid
will be returned on success.
-
-
-
+
+
+
+ GET Recommended Fees
+
+
+
+
+
Description
+
+ Returns our currently suggested fees for new transactions.
+
+
+
+
+
+
+
+ GET Mempool Blocks
+
+
+
+
+
Description
+
+ Returns current mempool as projected blocks.
+
+
+
+
+
+
+
+ GET Children Pay for Parent
+
+
+
+
+
Description
+
+ Returns the ancestors and the best descendant fees for a transaction.
+
+
+
+
+
+
- Addresses
+ Mempool
+
+
+
+ GET Mempool
+
+
+
-
-
- Endpoint
- Description
-
-
- GET {{ network.val === '' ? '' : '/' + network.val }}/api/address/:address
- Returns details about an address. Available fields: address
, chain_stats
, and mempool_stats
. {{ '{' }}chain,mempool{{ '}' }}_stats each contain an object with tx_count
, funded_txo_count
, funded_txo_sum
, spent_txo_count
, and spent_txo_sum
.
-
-
- GET {{ network.val === '' ? '' : '/' + network.val }}/api/address/:address/txs
- Get transaction history for the specified address/scripthash, sorted with newest first. Returns up to 50 mempool transactions plus the first 25 confirmed transactions. You can request more confirmed transactions using :last_seen_txid
(see below).
-
-
- GET {{ network.val === '' ? '' : '/' + network.val }}/api/address/:address/txs/chain
- Get confirmed transaction history for the specified address/scripthash, sorted with newest first. Returns 25 transactions per page. More can be requested by specifying the last txid seen by the previous query.
-
-
- GET {{ network.val === '' ? '' : '/' + network.val }}/api/address/:address/txs/mempool
- Get unconfirmed transaction history for the specified address/scripthash. Returns up to 50 transactions (no paging).
-
-
- GET {{ network.val === '' ? '' : '/' + network.val }}/api/address/:address/utxo
- Get the list of unspent transaction outputs associated with the address/scripthash. Available fields: txid
, vout
, value
, and status
(with the status of the funding tx).There is also a valuecommitment
field that may appear in place of value
, plus the following additional fields: asset
/assetcommitment
, nonce
/noncecommitment
, surjection_proof
, and range_proof
.
-
-
+
+
Description
+
Returns current mempool backlog statistics.
+
+
+
+
+
+
+ GET Mempool Transactions IDs
+
+
+
+
+
Description
+
+ Get the full list of txids in the mempool as an array. The order of the txids is arbitrary and does not match bitcoind.
+
+
+
+
+
+
+
+
+ GET Mempool Recent
+
+
+
+
+
Description
+
Get a list of the last 10 transactions to enter the mempool. Each transaction object contains simplified overview data, with the following fields: txid
, fee
, vsize
, and value
.
+
+
+
+
+
+
-
- Assets
+
+ Transactions
+
+
+
+ GET Transaction
+
+
-
-
- Endpoint
- Description
-
-
- GET /liquid/api/asset/:asset_id
- Returns information about a Liquid asset.
-
-
- GET /liquid/api/asset/:asset_id/txs[/mempool|/chain]
- Returns transactions associated with the specified Liquid asset. For the network's native asset, returns a list of peg in, peg out, and burn transactions. For user-issued assets, returns a list of issuance, reissuance, and burn transactions. Does not include regular transactions transferring this asset.
-
-
- GET /liquid/api/asset/:asset_id/supply[/decimal]
- Get the current total supply of the specified asset. For the native asset (L-BTC), this is calculated as [chain,mempool]_stats.peg_in_amount - [chain,mempool]_stats.peg_out_amount - [chain,mempool]_stats.burned_amount. For issued assets, this is calculated as [chain,mempool]_stats.issued_amount - [chain,mempool]_stats.burned_amount. Not available for assets with blinded issuances. If /decimal is specified, returns the supply as a decimal according to the asset's divisibility. Otherwise, returned in base units.
-
-
+
+
+
Description
+
Returns details about a transaction. Available fields: txid
, version
, locktime
, size
, weight
, fee
, vin
, vout
, and status
.
+
+
+
+
+
+
+
+
+ GET Transaction Hex
+
+
+
+
+
+
Description
+
Returns a transaction serialized as hex.
+
+
+
+
+
+
+
+
+ GET Transaction Merkleblock Proof
+
+
+
+
+
+
+
+
+
+
+
+ GET Transaction Merkle Proof
+
+
+
+
+
+
+
+
+
+
+
+
+
+ GET Transaction Outspend
+
+
+
+
+
+
Description
+
Returns the spending status of a transaction output. Available fields: spent
(boolean), txid
(optional), vin
(optional), and status
(optional, the status of the spending tx).
+
+
+
+
+
+
+
+
+ GET Transaction Outspends
+
+
+
+
+
+
Description
+
Returns the spending status of all transaction outputs.
+
+
+
+
+
+
+
+
+ GET Transaction Raw
+
+
+
+
+
+
Description
+
Returns a transaction as binary data.
+
+
+
+
+
+
+
+
+ GET Transaction Status
+
+
+
+
+
+
Description
+
Returns the confirmation status of a transaction. Available fields: confirmed
(boolean), block_height
(optional), and block_hash
(optional).
+
+
+
+
+
+
+
+
+ POST Transaction
+
+
+
+
+
Endpoint
+
POST {{ network.val === '' ? '' : '/' + network.val }}/api/tx
+
+
+
+
Description
+
Broadcast a raw transaction to the network. The transaction should be provided as hex in the request body. The txid
will be returned on success.
+
+
+
+
+
-
- BSQ
-
-
-
+
+ Websocket
+
+
+
+
Endpoint
+ wss://{{ hostname }}{{ network.val === '' ? '' : '/' + network.val }}/api/v1/ws
+
+
+
Description
+
Default push: {{ '{' }} action: 'want', data: ['blocks', ...] {{ '}' }}
to express what you want pushed. Available: blocks
, mempool-blocks
, live-2h-chart
, and stats
. Push transactions related to address: {{ '{' }} 'track-address': '3PbJ...bF9B' {{ '}' }}
to receive all new transactions containing that address as input or output. Returns an array of transactions. address-transactions
for new mempool transactions, and block-transactions
for new block confirmed transactions.
+
+
+
+
@@ -289,4 +842,4 @@
-
+
\ No newline at end of file
diff --git a/frontend/src/app/components/api-docs/api-docs.component.scss b/frontend/src/app/components/api-docs/api-docs.component.scss
index c7e756b1e..c8a938e66 100644
--- a/frontend/src/app/components/api-docs/api-docs.component.scss
+++ b/frontend/src/app/components/api-docs/api-docs.component.scss
@@ -14,3 +14,59 @@ tr {
.nowrap {
white-space: nowrap;
}
+
+li.nav-item {
+ width: 100%;
+ @media (min-width: 676px){
+ width: auto;
+ }
+}
+
+.nav-tabs .nav-link.active {
+ border-bottom: 1px solid #fff;
+ @media (min-width: 676px){
+ border-bottom: 1px solid #11131f;
+ }
+}
+
+.code-tab {
+ width: auto;
+ margin: 20px auto 10px;
+ li.nav-item {
+ width: auto;
+ }
+
+}
+
+.code {
+ .tab-content {
+ padding: 0px;
+ }
+ .nav-tabs .nav-link.active {
+ border-bottom: 1px solid #11131f;
+ }
+ .subtitle {
+ display: flex;
+ justify-content: space-between;
+ }
+}
+.description {
+ margin-top: 20px;
+}
+.title {
+ font-weight: bold;
+ color: #ffffff;
+ font-size: 1.25rem;
+}
+.subtitle {
+ font-weight: bold;
+}
+.divider {
+ width: 100%;
+ margin: 30px auto;
+ height: 1px;
+ background: #333;
+}
+.websocket {
+ padding: 15px;
+}
\ No newline at end of file
diff --git a/frontend/src/app/components/api-docs/api-docs.component.ts b/frontend/src/app/components/api-docs/api-docs.component.ts
index cfd8b6b6f..ce40a8adb 100644
--- a/frontend/src/app/components/api-docs/api-docs.component.ts
+++ b/frontend/src/app/components/api-docs/api-docs.component.ts
@@ -12,7 +12,1121 @@ import { SeoService } from 'src/app/services/seo.service';
export class ApiDocsComponent implements OnInit {
hostname = document.location.hostname;
network$: Observable;
- active = 1;
+ active = 0;
+
+ code = {
+ recommendedFees: {
+ codeSample: {
+ esModule: `const { %{1}: { fees } } = mempoolJS();
+
+ const feesRecommended = await fees.getFeesRecommended();
+ console.log(feesRecommended);`,
+ commonJS: `const { %{1}: { fees } } = mempoolJS();
+
+ const feesRecommended = await fees.getFeesRecommended();
+ console.log(feesRecommended);`,
+ curl: `curl -X GET "https://mempool.space/api/v1/fees/recommended"`,
+ },
+ responseSample: `{
+ fastestFee: 60,
+ halfHourFee: 35,
+ hourFee: 20,
+ minimumFee: 1
+}`,
+ },
+ mempoolBlocks: {
+ codeSample: {
+ esModule: `const { %{1}: { fees } } = mempoolJS();
+
+ const feesMempoolBlocks = await fees.getFeesMempoolBlocks();
+ console.log(feesMempoolBlocks);`,
+ commonJS: `const { %{1}: { fees } } = mempoolJS();
+
+ const feesMempoolBlocks = await fees.getFeesMempoolBlocks();
+ console.log(feesMempoolBlocks);`,
+ curl: `curl -X GET "https://mempool.space/api/v1/fees/mempool-blocks"`,
+ },
+ responseSample: `[
+ {
+ blockSize: 1325044,
+ blockVSize: 974920,
+ nTx: 2314,
+ totalFees: 57600850,
+ medianFee: 59.73444413716814,
+ feeRange: [
+ 14.091264667535855,
+ 27.88170055452865,
+ 50.123893805309734,
+ 59,
+ 60.267857142857146,
+ 65.47085201793722,
+ 100,
+ 474.934036939314
+ ]
+ },
+ ...
+]`,
+ },
+ cpfp: {
+ codeSample: {
+ esModule: `const { %{1}: { fees } } = mempoolJS();
+ const txid = 'txid';
+
+ const feesCPFP = await fees.getCPFP({ txid });
+ console.log(feesCPFP);`,
+ commonJS: `const { %{1}: { fees } } = mempoolJS();
+ const txid = 'txid';
+
+ const feesCPFP = await fees.getCPFP({ txid });`,
+ curl: `curl -X GET "https://mempool.space/api/v1/cpfp/:txid"`,
+ },
+ responseSample: ``,
+ },
+ mempool: {
+ codeSample: {
+ esModule: `const { %{1}: { mempool } } = mempoolJS();
+
+ const getMempool = await mempool.getMempool();
+ console.log(getMempool);`,
+ commonJS: `const { %{1}: { mempool } } = mempoolJS();
+
+ const getMempool = await mempool.getMempool();
+ console.log(getMempool);`,
+ curl: `curl -X GET "https://mempool.space/api/mempool"`,
+ },
+ responseSample: `{
+ count: 12262,
+ vsize: 18726518,
+ total_fee: 99943359,
+ fee_histogram: [
+ [ 121.72455, 50049 ],
+ ... 142 more items
+ ]
+}`,
+ },
+ mempoolTxs: {
+ codeSample: {
+ esModule: `const { %{1}: { mempool } } = mempoolJS();
+
+ const getMempoolTxids = await mempool.getMempoolTxids();
+ console.log(getMempoolTxids);`,
+ commonJS: `const { %{1}: { mempool } } = mempoolJS();
+
+ const getMempoolTxids = await mempool.getMempoolTxids();
+ console.log(getMempoolTxids);`,
+ curl: `curl -X GET "https://mempool.space/api/mempool/txids"`,
+ },
+ responseSample: `[
+ '0873cc5e6c63704a27c63d5b86231db2a688d1e8dee466c8162aa6a398e719c5',
+ ... 12308 more items
+]`,
+ },
+ mempoolRecent: {
+ codeSample: {
+ esModule: `const { %{1}: { mempool } } = mempoolJS();
+
+ const getMempoolRecent = await mempool.getMempoolRecent();
+ console.log(getMempoolRecent);`,
+ commonJS: `
+ const { %{1}: { mempool } } = mempoolJS();
+
+ const getMempoolRecent = await mempool.getMempoolRecent();
+ console.log(getMempoolRecent);`,
+ curl: `curl -X GET "https://mempool.space/api/mempool/recent"`,
+ },
+ responseSample: `[
+ {
+ txid: '4ab126bfde126a7824336080cbad0e6c3db0d39873b2093080ec5dc09205dca6',
+ fee: 8520,
+ vsize: 141,
+ value: 3428127849
+ },
+ ...
+]`,
+ },
+ block: {
+ codeSample: {
+ esModule: `const { %{1}: { blocks } } = mempoolJS();
+ const hash =
+ '000000000000000015dc777b3ff2611091336355d3f0ee9766a2cf3be8e4b1ce';
+
+ const block = await blocks.getBlock({ hash });
+ console.log(block);`,
+ commonJS: `const { %{1}: { blocks } } = mempoolJS();
+ const hash =
+ '000000000000000015dc777b3ff2611091336355d3f0ee9766a2cf3be8e4b1ce';
+
+ const block = await blocks.getBlock({ hash });
+ console.log(block);`,
+ curl: `curl -X GET "https://mempool.space/api/block/:hash"`,
+ },
+ responseSample: `{
+ id: "000000000000000015dc777b3ff2611091336355d3f0ee9766a2cf3be8e4b1ce",
+ height: 363366,
+ version: 2,
+ timestamp: 1435766771,
+ tx_count: 494,
+ size: 286494,
+ weight: 1145976,
+ merkle_root: "9d3cb87bf05ebae366b4262ed5f768ce8c62fc385c3886c9cb097647b04b686c",
+ previousblockhash: "000000000000000010c545b6fa3ef1f7cf45a2a8760b1ee9f2e89673218207ce",
+ mediantime: 1435763435,
+ nonce: 2892644888,
+ bits: 404111758,
+ difficulty: 49402014931
+ }`,
+ },
+ blockHeight: {
+ codeSample: {
+ esModule: `const { %{1}: { blocks } } = mempoolJS();
+
+ const blockHeight = await blocks.getBlockHeight({ height: 0 });
+ console.log(blockHeight);
+`,
+ commonJS: `const { %{1}: { blocks } } = mempoolJS();
+
+ const blockHeight = await blocks.getBlockHeight({ height: 0 });
+ console.log(blockHeight);`,
+ curl: `curl -X GET "https://mempool.space/api/block-height/:height"`,
+ },
+ responseSample: `000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f`,
+ },
+ blockRaw: {
+ codeSample: {
+ esModule: `const { %{1}: { blocks } } = mempoolJS();
+ const hash =
+ '000000000000000015dc777b3ff2611091336355d3f0ee9766a2cf3be8e4b1ce';
+
+ const blockRaw = await blocks.getBlockRaw({ hash });
+ console.log(blockRaw);
+`,
+ commonJS: `const { %{1}: { blocks } } = mempoolJS();
+ const hash =
+ '000000000000000015dc777b3ff2611091336355d3f0ee9766a2cf3be8e4b1ce';
+
+ const blockRaw = await blocks.getBlockRaw({ hash });
+ console.log(blockRaw);`,
+ curl: `curl -X GET "https://mempool.space/api/block/:hash/raw"`,
+ },
+ responseSample: ``,
+ },
+ blockStatus: {
+ codeSample: {
+ esModule: `const { %{1}: { blocks } } = mempoolJS();
+ const hash =
+ '000000000000000015dc777b3ff2611091336355d3f0ee9766a2cf3be8e4b1ce';
+
+ const blockStatus = await blocks.getBlockStatus({ hash });
+ console.log(blockStatus);
+`,
+ commonJS: `const { %{1}: { blocks } } = mempoolJS();
+ const hash =
+ '000000000000000015dc777b3ff2611091336355d3f0ee9766a2cf3be8e4b1ce';
+
+ const blockStatus = await blocks.getBlockStatus({ hash });
+ console.log(blockStatus);`,
+ curl: `curl -X GET "https://mempool.space/api/block/:hash/status"`,
+ },
+ responseSample: `{
+ in_best_chain: true,
+ height: 363366,
+ next_best: "000000000000000015eb17c390eb4a920fc745332fda6a62179a6afe0d6a6548"
+}`,
+ },
+ blockTipHeight: {
+ codeSample: {
+ esModule: `const { %{1}: { blocks } } = mempoolJS();
+ const blocksTipHeight = await blocks.getBlocksTipHeight();
+ console.log(blocksTipHeight);
+`,
+ commonJS: `const { %{1}: { blocks } } = mempoolJS();
+
+ const blocksTipHeight = await blocks.getBlocksTipHeight();
+ console.log(blocksTipHeight);`,
+ curl: `curl -X GET "https://mempool.space/api/blocks/tip/height"`,
+ },
+ responseSample: `685442`,
+ },
+ blockTipHash: {
+ codeSample: {
+ esModule: `const { %{1}: { blocks } } = mempoolJS();
+ const blocksTipHash = await blocks.getBlocksTipHash();
+ console.log(blocksTipHash);
+`,
+ commonJS: `const { %{1}: { blocks } } = mempoolJS();
+
+ const blocksTipHash = await blocks.getBlocksTipHash();
+ console.log(blocksTipHash);`,
+ curl: `curl -X GET "https://mempool.space/api/blocks/tip/hash"`,
+ },
+ responseSample: `00000000000000000009165c5600f52cb7436b40f3ad48e996de63d63e1a124e`,
+ },
+ blockTxId: {
+ codeSample: {
+ esModule: `const { %{1}: { blocks } } = mempoolJS();
+ const hash =
+ '000000000000000015dc777b3ff2611091336355d3f0ee9766a2cf3be8e4b1ce';
+
+ const blockTxid = await blocks.getBlockTxid({ hash, index: 218 });
+ console.log(blockTxid);
+`,
+ commonJS: `const { %{1}: { blocks } } = mempoolJS();
+ const hash =
+ '000000000000000015dc777b3ff2611091336355d3f0ee9766a2cf3be8e4b1ce';
+
+ const blockTxid = await blocks.getBlockTxid({ hash, index: 218 });
+ console.log(blockTxid);`,
+ curl: `curl -X GET "https://mempool.space/api/block/:hash/txid/:index"`,
+ },
+ responseSample: `0fa6da60e484941f255cbb025c3d6440e5a7e970119e899b4065c7999360e406`,
+ },
+ blockTxIds: {
+ codeSample: {
+ esModule: `const { %{1}: { blocks } } = mempoolJS();
+ const hash =
+ '000000000000000015dc777b3ff2611091336355d3f0ee9766a2cf3be8e4b1ce';
+
+ const blockTxids = await blocks.getBlockTxids({ hash });
+ console.log(blockTxids);
+`,
+ commonJS: `const { %{1}: { blocks } } = mempoolJS();
+ const hash =
+ '000000000000000015dc777b3ff2611091336355d3f0ee9766a2cf3be8e4b1ce';
+
+ const blockTxids = await blocks.getBlockTxids({ hash });
+ console.log(blockTxids);`,
+ curl: `curl -X GET "https://mempool.space/api/block/:hash/txids"`,
+ },
+ responseSample: `[
+ "cfe624ccdd8010cf78dbedd1b25e1ff601b470c4d7d90fa9fc8c1bcc5cdc6e0e",
+ "a5ef89881bd5103f223a0fa285dfc75f4718974cb792cf85e623a7de05801bc9",
+ "94e8c35414db17cd10efa0ac4115e086edb168ba7bd86e737e5b8cab96821580",
+ ...
+]`,
+ },
+ blockTxs: {
+ codeSample: {
+ esModule: `const { %{1}: { blocks } } = mempoolJS();
+ const hash =
+ '000000000000000015dc777b3ff2611091336355d3f0ee9766a2cf3be8e4b1ce';
+
+ const blockTxs = await blocks.getBlockTxs({ hash });
+ console.log(blockTxs);
+`,
+ commonJS: `const { %{1}: { blocks } } = mempoolJS();
+ const hash =
+ '000000000000000015dc777b3ff2611091336355d3f0ee9766a2cf3be8e4b1ce';
+
+ const blockTxs = await blocks.getBlockTxs({ hash });
+ console.log(blockTxs);`,
+ curl: `curl -X GET "https://mempool.space/api/block/:hash/txs[/:start_index]"`,
+ },
+ responseSample: `[
+ {
+ txid: "cfe624ccdd8010cf78dbedd1b25e1ff601b470c4d7d90fa9fc8c1bcc5cdc6e0e",
+ version: 1,
+ locktime: 0,
+ vin: [ [Object] ],
+ vout: [ [Object] ],
+ size: 102,
+ weight: 408,
+ fee: 0,
+ status: {
+ confirmed: true,
+ block_height: 363366,
+ block_hash: "000000000000000015dc777b3ff2611091336355d3f0ee9766a2cf3be8e4b1ce",
+ block_time: 1435766771
+ }
+ },
+ ...
+]`,
+ },
+ blocks: {
+ codeSample: {
+ esModule: `const { %{1}: { blocks } } = mempoolJS();
+
+ const getBlocks = await blocks.getBlocks({ start_height: 9999 });
+ console.log(getBlocks);
+`,
+ commonJS: `const { %{1}: { blocks } } = mempoolJS();
+
+ const getBlocks = await blocks.getBlocks({ start_height: 9999 });
+ console.log(getBlocks);`,
+ curl: `curl -X GET "https://mempool.space/api/blocks[/:start_height]"`,
+ },
+ responseSample: `[
+ {
+ id: '00000000fbc97cc6c599ce9c24dd4a2243e2bfd518eda56e1d5e47d29e29c3a7',
+ height: 9999,
+ version: 1,
+ timestamp: 1238987491,
+ tx_count: 1,
+ size: 216,
+ weight: 864,
+ merkle_root: '5012c1d2a46d5684aa0331f0d8a900767c86c0fd83bb632f357b1ea11fa69179',
+ previousblockhash: '000000003dd32df94cfafd16e0a8300ea14d67dcfee9e1282786c2617b8daa09',
+ mediantime: 1238984702,
+ nonce: 3568610608,
+ bits: 486604799,
+ difficulty: 1
+ },
+ ...
+]`,
+ },
+ transaction: {
+ codeSample: {
+ esModule: `const { %{1}: { transactions } } = mempoolJS();
+ const txid =
+ '15e10745f15593a899cef391191bdd3d7c12412cc4696b7bcb669d0feadc8521';
+
+ const tx = await transactions.getTx({ txid });
+ console.log(tx);
+`,
+ commonJS: `const { %{1}: { transactions } } = mempoolJS();
+ const txid =
+ '15e10745f15593a899cef391191bdd3d7c12412cc4696b7bcb669d0feadc8521';
+
+ const tx = await transactions.getTx({ txid });
+ console.log(tx);`,
+ curl: `curl -X GET "https://mempool.space/api/tx/:txid"`,
+},
+responseSample: `{
+ txid: "15e10745f15593a899cef391191bdd3d7c12412cc4696b7bcb669d0feadc8521",
+ version: 1,
+ locktime: 0,
+ vin: [
+ {
+ txid: "1fdfed84588cb826b876cd761ecebcf1726453437f0a6826e82ed54b2807a036",
+ vout: 12,
+ prevout: [Object],
+ scriptsig: "483045022100bcdf40fb3b5ebfa2c158ac8d1a41c03eb3dba4e180b00e81836bafd56d946efd022005cc40e35022b614275c1e485c409599667cbd41f6e5d78f421cb260a020a24f01210255ea3f53ce3ed1ad2c08dfc23b211b15b852afb819492a9a0f3f99e5747cb5f0",
+ scriptsig_asm: "OP_PUSHBYTES_72 3045022100bcdf40fb3b5ebfa2c158ac8d1a41c03eb3dba4e180b00e81836bafd56d946efd022005cc40e35022b614275c1e485c409599667cbd41f6e5d78f421cb260a020a24f01 OP_PUSHBYTES_33 0255ea3f53ce3ed1ad2c08dfc23b211b15b852afb819492a9a0f3f99e5747cb5f0",
+ is_coinbase: false,
+ sequence: 4294967295
+ },
+ ...
+ ],
+ vout: [
+ {
+ scriptpubkey: "76a91472d52e2f5b88174c35ee29844cce0d6d24b921ef88ac",
+ scriptpubkey_asm: "OP_DUP OP_HASH160 OP_PUSHBYTES_20 72d52e2f5b88174c35ee29844cce0d6d24b921ef OP_EQUALVERIFY OP_CHECKSIG",
+ scriptpubkey_type: "p2pkh",
+ scriptpubkey_address: "1BUBQuPV3gEV7P2XLNuAJQjf5t265Yyj9t",
+ value: 1240000000
+ },
+ ...
+ ],
+ size: 884,
+ weight: 3536,
+ fee: 20000,
+ status: {
+ confirmed: true,
+ block_height: 363348,
+ block_hash: "0000000000000000139385d7aa78ffb45469e0c715b8d6ea6cb2ffa98acc7171",
+ block_time: 1435754650
+ }
+}`,
+ },
+ transactionHex: {
+ codeSample: {
+ esModule: `const { %{1}: { transactions } } = mempoolJS();
+ const txid =
+ '15e10745f15593a899cef391191bdd3d7c12412cc4696b7bcb669d0feadc8521';
+
+ const txHex = await transactions.getTxHex({ txid });
+ console.log(txHex);
+`,
+ commonJS: `const { %{1}: { transactions } } = mempoolJS();
+ const txid =
+ '15e10745f15593a899cef391191bdd3d7c12412cc4696b7bcb669d0feadc8521';
+
+ const txHex = await transactions.getTxHex({ txid });
+ console.log(txHex);`,
+ curl: `curl -X GET "https://mempool.space/api/tx/:txid/hex"`,
+ },
+ responseSample: `010000000536a007284bd52ee826680a7f43536472f1bcce1e76cd76b826b88c5884eddf1f0c0000006b483045022100bcdf40fb3b5ebfa2c158ac8d1a41c03eb3dba4e180b00e81836bafd56d946efd022005cc40e35022b614275c1e485c409599667cbd41f6e5d78f421cb260a020a24f01210255ea3f53ce3ed1ad2c08dfc23b211b15b852afb819492a9a0f3f99e5747cb5f0ffffffffee08cb90c4e84dd7952b2cfad81ed3b088f5b32183da2894c969f6aa7ec98405020000006a47304402206332beadf5302281f88502a53cc4dd492689057f2f2f0f82476c1b5cd107c14a02207f49abc24fc9d94270f53a4fb8a8fbebf872f85fff330b72ca91e06d160dcda50121027943329cc801a8924789dc3c561d89cf234082685cbda90f398efa94f94340f2ffffffff36a007284bd52ee826680a7f43536472f1bcce1e76cd76b826b88c5884eddf1f060000006b4830450221009c97a25ae70e208b25306cc870686c1f0c238100e9100aa2599b3cd1c010d8ff0220545b34c80ed60efcfbd18a7a22f00b5f0f04cfe58ca30f21023b873a959f1bd3012102e54cd4a05fe29be75ad539a80e7a5608a15dffbfca41bec13f6bf4a32d92e2f4ffffffff73cabea6245426bf263e7ec469a868e2e12a83345e8d2a5b0822bc7f43853956050000006b483045022100b934aa0f5cf67f284eebdf4faa2072345c2e448b758184cee38b7f3430129df302200dffac9863e03e08665f3fcf9683db0000b44bf1e308721eb40d76b180a457ce012103634b52718e4ddf125f3e66e5a3cd083765820769fd7824fd6aa38eded48cd77fffffffff36a007284bd52ee826680a7f43536472f1bcce1e76cd76b826b88c5884eddf1f0b0000006a47304402206348e277f65b0d23d8598944cc203a477ba1131185187493d164698a2b13098a02200caaeb6d3847b32568fd58149529ef63f0902e7d9c9b4cc5f9422319a8beecd50121025af6ba0ccd2b7ac96af36272ae33fa6c793aa69959c97989f5fa397eb8d13e69ffffffff0400e6e849000000001976a91472d52e2f5b88174c35ee29844cce0d6d24b921ef88ac20aaa72e000000001976a914c15b731d0116ef8192f240d4397a8cdbce5fe8bc88acf02cfa51000000001976a914c7ee32e6945d7de5a4541dd2580927128c11517488acf012e39b000000001976a9140a59837ccd4df25adc31cdad39be6a8d97557ed688ac00000000`,
+ },
+ transactionMerkleblockProof: {
+ codeSample: {
+ esModule: `const { %{1}: { transactions } } = mempoolJS();
+ const txid =
+ '15e10745f15593a899cef391191bdd3d7c12412cc4696b7bcb669d0feadc8521';
+
+ const txMerkleBlockProof = await transactions.getTxMerkleBlockProof({ txid });
+ console.log(txMerkleBlockProof);
+`,
+ commonJS: `const { %{1}: { transactions } } = mempoolJS();
+ const txid =
+ '15e10745f15593a899cef391191bdd3d7c12412cc4696b7bcb669d0feadc8521';
+
+ const txMerkleBlockProof = await transactions.getTxMerkleBlockProof({ txid });
+ console.log(txMerkleBlockProof);`,
+ curl: `curl -X GET "https://mempool.space/api/tx/:txid/merkleblock-proof"`,
+ },
+ responseSample: `0300000058f6dd09ac5aea942c01d12e75b351e73f4304cc442741000000000000000000ef0c2fa8517414b742094a020da7eba891b47d660ef66f126ad01e5be99a2fd09ae093558e411618c14240df820700000ce4d15e17594f257b22d1ddf47d07b3b88779a8374fcd515ad883d79726c6027da6abfcbc1341a049b30277d3bf14e4663ecaa55b76cb638bb92b028e9bdeeeba65a06adaae75df61e79677b13b5d45523d5ab4067f6f3c89e27458b9c1072910436afdd26b9b89489d89f2a7daaad6d375e3ebafb169bfa3cf266b9605964debb72a79a6491481295dc5ed5198b989c6126c8b4d354c274f115a91b7d01d878c01c9a70ba5d78e11c38d1f7b94692afb177e63a9371b60665ee4cfc49cd9cffa78244de209537d97b19d5938a67078af79f7258d7afe325b16c68089fe31f9ac2185dcea0f9d66cb7b6b69c42c41127c3ddd1b1991f3ce99a89355f14507e115f92356b4c0984e291567cf9d869918726b0e650274a6c692682320257c9925eeb7240c4ced055b8b8cf804d33bbec407b4058b1e1f7c5a7127770f7cac890879706e1e34ef8e1b715e182cc691524135bc78da898afc89b401862af259dca1da9065dad015d747181e12ffb73ea0ba0480a0b89ff33fb3884514554be97bf0b603add505`,
+ },
+ tramsactionMerkleProof: {
+ codeSample: {
+ esModule: `const { %{1}: { transactions } } = mempoolJS();
+ const txid =
+ '15e10745f15593a899cef391191bdd3d7c12412cc4696b7bcb669d0feadc8521';
+
+ const txMerkleProof = await transactions.getTxMerkleProof({ txid });
+ console.log(txMerkleProof);
+`,
+ commonJS: `const { %{1}: { transactions } } = mempoolJS();
+ const txid =
+ '15e10745f15593a899cef391191bdd3d7c12412cc4696b7bcb669d0feadc8521';
+
+ const txMerkleProof = await transactions.getTxMerkleProof({ txid });
+ console.log(txMerkleProof);`,
+ curl: `curl -X GET "https://mempool.space/api/tx/:txid/merkle-proof"`,
+ },
+ responseSample: `{
+ block_height: 363348,
+ merkle: [
+ "acf931fe8980c6165b32fe7a8d25f779af7870a638599db1977d5309e24d2478",
+ ...
+ ],
+ pos: 1465
+}`,
+ },
+ transactionOutspend: {
+ codeSample: {
+ esModule: `const { %{1}: { transactions } } = mempoolJS();
+ const txid =
+ '15e10745f15593a899cef391191bdd3d7c12412cc4696b7bcb669d0feadc8521';
+
+ const txOutspend = await transactions.getTxOutspend({
+ txid,
+ vout: 3,
+ });
+ console.log(txOutspend);
+`,
+ commonJS: `const { %{1}: { transactions } } = mempoolJS();
+ const txid =
+ '15e10745f15593a899cef391191bdd3d7c12412cc4696b7bcb669d0feadc8521';
+
+ const txOutspend = await transactions.getTxOutspend({
+ txid,
+ vout: 3,
+ });
+ console.log(txOutspend);`,
+ curl: `curl -X GET "https://mempool.space/api/tx/:txid/outspend/:vout"`,
+ },
+ responseSample: `{
+ spent: true,
+ txid: "2a1b8ec06d68096911da82b02806c3848c415b0044a0046850c4a97cbffac7b1",
+ vin: 1,
+ status: {
+ confirmed: true,
+ block_height: 363354,
+ block_hash: "000000000000000012e6130dec174ca877bf39ead6e3d04a8ba3b0cd683c1661",
+ block_time: 1435758032
+ }
+}`,
+ },
+ transactionOutspends: {
+ codeSample: {
+ esModule: `const { %{1}: { transactions } } = mempoolJS();
+ const txid =
+ '15e10745f15593a899cef391191bdd3d7c12412cc4696b7bcb669d0feadc8521';
+
+ const txOutspends = await transactions.getTxOutspends({ txid });
+ console.log(txOutspends);
+`,
+ commonJS: `const { %{1}: { transactions } } = mempoolJS();
+ const txid =
+ '15e10745f15593a899cef391191bdd3d7c12412cc4696b7bcb669d0feadc8521';
+
+ const txOutspends = await transactions.getTxOutspends({ txid });
+ console.log(txOutspends);`,
+ curl: `curl -X GET "https://mempool.space/api/tx/:txid/outspends"`,
+ },
+ responseSample: `[
+ {
+ spent: true,
+ txid: "34de8ba520eb846da8831fa47c06eef9b4eb4a2ff6a3271165fd6b9aafc5a20c",
+ vin: 12,
+ status: {
+ confirmed: true,
+ block_height: 363349,
+ block_hash: "000000000000000012ad81b3ea2cb1c4ba115901bd1b41cd05a6a8d736691322",
+ block_time: 1435754897
+ }
+ },
+ ...
+]`,
+ },
+ transactionRaw: {
+ codeSample: {
+ esModule: `const { %{1}: { transactions } } = mempoolJS();
+ const txid =
+ '15e10745f15593a899cef391191bdd3d7c12412cc4696b7bcb669d0feadc8521';
+
+ const txRaw = await transactions.getTxRaw({ txid });
+ console.log(txRaw);
+`,
+ commonJS: `const { %{1}: { transactions } } = mempoolJS();
+ const txid =
+ '15e10745f15593a899cef391191bdd3d7c12412cc4696b7bcb669d0feadc8521';
+
+ const txRaw = await transactions.getTxRaw({ txid });
+ console.log(txRaw);`,
+ curl: `curl -X GET "https://mempool.space/api/tx/:txid/raw"`,
+ },
+ responseSample: ``,
+ },
+ transactionStatus: {
+ codeSample: {
+ esModule: `const { %{1}: { transactions } } = mempoolJS();
+ const txid =
+ '15e10745f15593a899cef391191bdd3d7c12412cc4696b7bcb669d0feadc8521';
+
+ const txStatus = await transactions.getTxStatus({ txid });
+ console.log(txStatus);
+`,
+ commonJS: `const { %{1}: { transactions } } = mempoolJS();
+ const txid =
+ '15e10745f15593a899cef391191bdd3d7c12412cc4696b7bcb669d0feadc8521';
+
+ const txStatus = await transactions.getTxStatus({ txid });
+ console.log(txStatus);`,
+ curl: `curl -X GET "https://mempool.space/api/tx/:txid/status"`,
+ },
+ responseSample: `{
+ confirmed: true,
+ block_height: 363348,
+ block_hash: "0000000000000000139385d7aa78ffb45469e0c715b8d6ea6cb2ffa98acc7171",
+ block_time: 1435754650
+}`,
+ },
+ postTransaction: {
+ codeSample: {
+ esModule: `const { %{1}: { transactions } } = mempoolJS();
+ const txid =
+ '15e10745f15593a899cef391191bdd3d7c12412cc4696b7bcb669d0feadc8521';
+
+ const postTx = await transactions.postTx({ txid });
+ console.log(postTx);
+`,
+ commonJS: `const { %{1}: { transactions } } = mempoolJS();
+ const txid =
+ '15e10745f15593a899cef391191bdd3d7c12412cc4696b7bcb669d0feadc8521';
+
+ const postTx = await transactions.postTx({ txid });
+ console.log(postTx);`,
+ curl: `curl -X POST "https://mempool.space/api/tx"`,
+ },
+ responseSample: ``,
+ },
+ address: {
+ codeSample: {
+ esModule: `const { %{1}: { addresses } } = mempoolJS();
+ const address = '1wizSAYSbuyXbt9d8JV8ytm5acqq2TorC';
+
+ const myAddress = await addresses.getAddress({ address });
+ console.log(myAddress);
+`,
+ commonJS: `const { %{1}: { addresses } } = mempoolJS();
+ const address = '1wizSAYSbuyXbt9d8JV8ytm5acqq2TorC';
+
+ const myAddress = await addresses.getAddress({ address });
+ console.log(myAddress);`,
+ curl: `curl -X GET "https://mempool.space/api/address/:address"`,
+ },
+ responseSample: `{
+ address: "1wizSAYSbuyXbt9d8JV8ytm5acqq2TorC",
+ chain_stats: {
+ funded_txo_count: 765,
+ funded_txo_sum: 87749875807,
+ spent_txo_count: 765,
+ spent_txo_sum: 87749875807,
+ tx_count: 875
+ },
+ mempool_stats: {
+ funded_txo_count: 0,
+ funded_txo_sum: 0,
+ spent_txo_count: 0,
+ spent_txo_sum: 0,
+ tx_count: 0
+ }
+}`,
+ },
+ addressTransactions: {
+ codeSample: {
+ esModule: `const { %{1}: { addresses } } = mempoolJS();
+ const address = '1wizSAYSbuyXbt9d8JV8ytm5acqq2TorC';
+
+ const addressTxs = await addresses.getAddressTxs({ address });
+ console.log(addressTxs);
+`,
+ commonJS: `const { %{1}: { addresses } } = mempoolJS();
+ const address = '1wizSAYSbuyXbt9d8JV8ytm5acqq2TorC';
+
+ const addressTxs = await addresses.getAddressTxs({ address });
+ console.log(addressTxs);`,
+ curl: `curl -X GET "https://mempool.space/api/address/:address/txs"`,
+ },
+ responseSample: `[
+ {
+ txid: "f39fbfd2482ac8a7174fe27caddd66aec05eec0d0e988ddf0de2136a416394c4",
+ version: 2,
+ locktime: 0,
+ vin: [ [Object] ],
+ vout: [ [Object], [Object] ],
+ size: 251,
+ weight: 1004,
+ fee: 8212,
+ status: {
+ confirmed: true,
+ block_height: 684536,
+ block_hash: "00000000000000000008df08f428ca4e8251ba9171d9060b056f1f94d4fefbc7",
+ block_time: 1621687336
+ }
+ },
+ ...
+]`,
+ },
+ addressTransactionsChain: {
+ codeSample: {
+ esModule: `const { %{1}: { addresses } } = mempoolJS();
+ const address = '1wizSAYSbuyXbt9d8JV8ytm5acqq2TorC';
+
+ const addressTxsChain = await addresses.getAddressTxsChain({ address });
+ console.log(addressTxsChain);
+`,
+ commonJS: `const { %{1}: { addresses } } = mempoolJS();
+ const address = '1wizSAYSbuyXbt9d8JV8ytm5acqq2TorC';
+
+ const addressTxsChain = await addresses.getAddressTxsChain({ address });
+ console.log(addressTxsChain);`,
+ curl: `curl -X GET "https://mempool.space/api/address/:address/txs/chain"`,
+ },
+ responseSample: `[
+ {
+ txid: "f39fbfd2482ac8a7174fe27caddd66aec05eec0d0e988ddf0de2136a416394c4",
+ version: 2,
+ locktime: 0,
+ vin: [ [Object] ],
+ vout: [ [Object], [Object] ],
+ size: 251,
+ weight: 1004,
+ fee: 8212,
+ status: {
+ confirmed: true,
+ block_height: 684536,
+ block_hash: "00000000000000000008df08f428ca4e8251ba9171d9060b056f1f94d4fefbc7",
+ block_time: 1621687336
+ }
+ },
+ ...
+]`,
+ },
+ addressTransactionsMempool: {
+ codeSample: {
+ esModule: `const { %{1}: { addresses } } = mempoolJS();
+ const address = '1EnX7FFCzdBjpYnErSTaxaWyTND4m86ebK';
+
+ const addressTxsMempool = await addresses.getAddressTxsMempool({ address });
+ console.log(addressTxsMempool);`,
+ commonJS: `const { %{1}: { addresses } } = mempoolJS();
+ const address = '1EnX7FFCzdBjpYnErSTaxaWyTND4m86ebK';
+
+ const addressTxsMempool = await addresses.getAddressTxsMempool({ address });
+ console.log(addressTxsMempool);`,
+ curl: `curl -X GET "https://mempool.space/api/address/:address/txs/mempool"`,
+ },
+ responseSample: `[
+ {
+ txid: "16cd9bbc6b62313a22d16671fa559aec6bf581df8b5853d37775c84b0fddfa90",
+ version: 2,
+ locktime: 0,
+ vin: [ [Object] ],
+ vout: [ [Object], [Object] ],
+ size: 226,
+ weight: 904,
+ fee: 6720,
+ status: { confirmed: false }
+ }
+]`,
+ },
+ addressUTXO: {
+ codeSample: {
+ esModule: `const { %{1}: { addresses } } = mempoolJS();
+ const address = '1PQwtwajfHWyAkedss5utwBvULqbGocRpu';
+
+ const addressTxsUtxo = await addresses.getAddressTxsUtxo({ address });
+ console.log(addressTxsUtxo);
+`,
+ commonJS: `const { %{1}: { addresses } } = mempoolJS();
+ const address = '1PQwtwajfHWyAkedss5utwBvULqbGocRpu';
+
+ const addressTxsUtxo = await addresses.getAddressTxsUtxo({ address });
+ console.log(addressTxsUtxo);`,
+ curl: `curl -X GET "https://mempool.space/api/address/:address/utxo"`,
+ },
+ responseSample: `[
+ {
+ txid: 'a3e4a5ce88c9a73983aaba34243472377e478c3ca77258018222b813e1256307',
+ vout: 0,
+ status: {
+ confirmed: true,
+ block_height: 685094,
+ block_hash: '00000000000000000002af00dc86cfc99c8843c7a4906a1ec3b0a79712334d81',
+ block_time: 1622081201
+ },
+ value: 723191295
+ },
+ ...
+]`,
+ },
+ bisqAddress: {
+ codeSample: {
+ esModule: `const { bisq: { addresses } } = mempoolJS();
+ const address = 'B1DgwRN92rdQ9xpEVCdXRfgeqGw9X4YtrZz';
+
+ const myAddress = await addresses.getAddress({ address });
+ console.log(myAddress);
+`,
+ commonJS: `const { bisq: { addresses } } = mempoolJS();
+ const address = 'B1DgwRN92rdQ9xpEVCdXRfgeqGw9X4YtrZz';
+
+ const myAddress = await addresses.getAddress({ address });
+ console.log(myAddress);`,
+ curl: `curl -X GET "https://mempool.space/api/address/:address"`,
+ },
+ responseSample: `[]
+ {
+ "txVersion": "1",
+ "id": "d6f0a6fd191ac907ff88fc51af91cae8d50e596a846952ffa0ad0cea84eedc9a",
+ "blockHeight": 679129,
+ "blockHash": "00000000000000000001328850b0482312325f7f4abd5457e45d37cad664675d",
+ "time": 1618369311000,
+ "inputs": [ ... ],
+ "outputs": [ ... ],
+ "txType": "PAY_TRADE_FEE",
+ "txTypeDisplayString": "Pay trade fee",
+ "burntFee": 6,
+ "invalidatedBsq": 0,
+ "unlockBlockHeight": 0
+ },
+ ...
+]`,
+ },
+ bisqBlock: {
+ codeSample: {
+ esModule: `const { bisq: { blocks } } = mempoolJS();
+ const hash = '000000000000000000079aa6bfa46eb8fc20474e8673d6e8a123b211236bf82d';
+
+ const block = await blocks.getBlock({ hash });
+ console.log(block);
+`,
+ commonJS: `const { bisq: { blocks } } = mempoolJS();
+ const hash = '000000000000000000079aa6bfa46eb8fc20474e8673d6e8a123b211236bf82d';
+
+ const block = await blocks.getBlock({ hash });
+ console.log(block);`,
+ curl: `curl -X GET "https://mempool.space/api/block/:hash"`,
+ },
+ responseSample: `{
+ height: 571747,
+ time: 1555340856000,
+ hash: "000000000000000000079aa6bfa46eb8fc20474e8673d6e8a123b211236bf82d",
+ previousBlockHash: "0000000000000000001b8c271a4477a28d4ea7d4d4d1add6d96f386e3f151709",
+ txs: [
+ {
+ txVersion: "1",
+ id: "4b5417ec5ab6112bedf539c3b4f5a806ed539542d8b717e1c4470aa3180edce5",
+ blockHeight: 571747,
+ blockHash: "000000000000000000079aa6bfa46eb8fc20474e8673d6e8a123b211236bf82d",
+ time: 1555340856000,
+ inputs: [],
+ outputs: [Array],
+ txType: "GENESIS",
+ txTypeDisplayString: "Genesis",
+ burntFee: 0,
+ invalidatedBsq: 0,
+ unlockBlockHeight: 0
+ }
+ ]
+}`,
+ },
+ bisqBlockTipHeight: {
+ codeSample: {
+ esModule: `const { bisq: { blocks } } = mempoolJS();
+ const hash = '000000000000000000079aa6bfa46eb8fc20474e8673d6e8a123b211236bf82d';
+
+ const myBlocksHeight = await blocks.getBlocksTipHeight({
+ index: 0,
+ length: 1,
+ });
+ console.log(myBlocksHeight);
+`,
+ commonJS: `const { bisq: { blocks } } = mempoolJS();
+ const hash = '000000000000000000079aa6bfa46eb8fc20474e8673d6e8a123b211236bf82d';
+
+ const myBlocksHeight = await blocks.getBlocksTipHeight({
+ index: 0,
+ length: 1,
+ });
+ console.log(myBlocksHeight);`,
+ curl: `curl -X GET "https://mempool.space/api/blocks/tip/height"`,
+ },
+ responseSample: `685657`,
+ },
+ bisqBlockIndex: {
+ codeSample: {
+ esModule: `const { bisq: { blocks } } = mempoolJS();
+
+ const myBlocks = await blocks.getBlocks({ index: 0, length: 1 });
+ console.log(myBlocks);
+`,
+ commonJS: `const { bisq: { blocks } } = mempoolJS();
+
+ const myBlocks = await blocks.getBlocks({ index: 0, length: 1 });
+ console.log(myBlocks);`,
+ curl: `curl -X GET "https://mempool.space/api/blocks/:index/:length"`,
+ },
+ responseSample: `[
+ {
+ height: 685656,
+ time: 1622468887000,
+ hash: "00000000000000000004c7046979024bd8e8f07389ca53f4f1d7dcf84eefdb21",
+ previousBlockHash: "0000000000000000000bf982d024e5afa38be8fc08c3a9b6a2bd89dbd18de832",
+ txs: [
+ [Object], [Object],
+ [Object], [Object],
+ [Object], [Object],
+ [Object], [Object],
+ [Object], [Object],
+ [Object]
+ ]
+ }
+]`,
+ },
+ bisqStats: {
+ codeSample: {
+ esModule: `const { bisq: { statistics } } = mempoolJS();
+ const hash = '000000000000000000079aa6bfa46eb8fc20474e8673d6e8a123b211236bf82d';
+
+ const stats = await statistics.getStats();
+ console.log(stats);
+`,
+ commonJS: `const { bisq: { statistics } } = mempoolJS();
+ const hash = '000000000000000000079aa6bfa46eb8fc20474e8673d6e8a123b211236bf82d';
+
+ const stats = await statistics.getStats();
+ console.log(stats);`,
+ curl: `curl -X GET "https://mempool.space/api/stats"`,
+ },
+ responseSample: `{
+ fastestFee: 88,
+ halfHourFee: 49,
+ hourFee: 29,
+ minimumFee: 1
+}`,
+ },
+ bisqTransaction: {
+ codeSample: {
+ esModule: `const { bisq: { transactions } } = mempoolJS();
+ const txid = '4b5417ec5ab6112bedf539c3b4f5a806ed539542d8b717e1c4470aa3180edce5';
+
+ const tx = await transactions.getTx({ txid });
+ console.log(tx);
+`,
+ commonJS: `const { bisq: { transactions } } = mempoolJS();
+ const txid = '4b5417ec5ab6112bedf539c3b4f5a806ed539542d8b717e1c4470aa3180edce5';
+
+ const tx = await transactions.getTx({ txid });
+ console.log(tx);`,
+ curl: `curl -X GET "https://mempool.space/api/tx/:txid"`,
+ },
+ responseSample: `{
+ "txVersion":"1",
+ "id":"4b5417ec5ab6112bedf539c3b4f5a806ed539542d8b717e1c4470aa3180edce5",
+ "blockHeight":571747,
+ "blockHash":"000000000000000000079aa6bfa46eb8fc20474e8673d6e8a123b211236bf82d",
+ "time":1555340856000,
+ "inputs": [ [Object], [Object] ],
+ "outputs": [ [Object], [Object] ],
+ "txType":"GENESIS",
+ "txTypeDisplayString":"Genesis",
+ "burntFee":0,
+ "invalidatedBsq":0,
+ "unlockBlockHeight":0
+}`,
+ },
+ bisqTransactions: {
+ codeSample: {
+ esModule: `const { bisq: { transactions } } = mempoolJS();
+
+ const txs = await transactions.getTxs({ index: 0, length: 1 });
+ console.log(txs);
+`,
+ commonJS: `const { bisq: { transactions } } = mempoolJS();
+
+ const txs = await transactions.getTxs({ index: 0, length: 1 });
+ console.log(txs);`,
+ curl: `curl -X GET "https://mempool.space/api/txs/:index/:length"`,
+ },
+ responseSample: `[
+ {
+ txVersion: "1",
+ id: "084e94afb67df0e6dff2e9ae6913d5ccb58f3b2dab0c4543a7c90c33b70c9bed",
+ blockHeight: 685656,
+ blockHash: "00000000000000000004c7046979024bd8e8f07389ca53f4f1d7dcf84eefdb21",
+ time: 1622468887000,
+ inputs: [ [Object], [Object] ],
+ outputs: [ [Object], [Object], [Object] ],
+ txType: "PAY_TRADE_FEE",
+ txTypeDisplayString: "Pay trade fee",
+ burntFee: 57,
+ invalidatedBsq: 0,
+ unlockBlockHeight: 0
+ }
+]`,
+ },
+ assets: {
+ codeSample: {
+ esModule: `const { liquid: { assets } } = mempoolJS();
+ const asset_id =
+ '6f0279e9ed041c3d710a9f57d0c02928416460c4b722ae3457a11eec381c526d';
+
+ const txs = await assets.getAsset({ asset_id });
+ console.log(txs);`,
+ commonJS: `const { liquid: { assets } } = mempoolJS();
+ const asset_id =
+ '6f0279e9ed041c3d710a9f57d0c02928416460c4b722ae3457a11eec381c526d';
+
+ const asset = await assets.getAsset({ asset_id });
+ console.log(asset);`,
+ curl: `curl -X GET "https://mempool.space/api/asset/:asset_id"`,
+ },
+ responseSample: `{
+ asset_id: "6f0279e9ed041c3d710a9f57d0c02928416460c4b722ae3457a11eec381c526d",
+ chain_stats: {
+ tx_count: 3013,
+ peg_in_count: 1832,
+ peg_in_amount: 298054170045,
+ peg_out_count: 982,
+ peg_out_amount: 3905921326,
+ burn_count: 199,
+ burned_amount: 516003151
+ },
+ mempool_stats: {
+ tx_count: 0,
+ peg_in_count: 0,
+ peg_in_amount: 0,
+ peg_out_count: 0,
+ peg_out_amount: 0,
+ burn_count: 0,
+ burned_amount: 0
+ }
+}`,
+ },
+ assetTransactions: {
+ codeSample: {
+ esModule: `const { liquid: { assets } } = mempoolJS();
+ const asset_id =
+ '6f0279e9ed041c3d710a9f57d0c02928416460c4b722ae3457a11eec381c526d';
+
+ const assetTxs = await assets.getAssetTxs({ asset_id, is_mempool: false });
+ console.log(asset);`,
+ commonJS: `const { liquid: { assets } } = mempoolJS();
+ const asset_id =
+ '6f0279e9ed041c3d710a9f57d0c02928416460c4b722ae3457a11eec381c526d';
+
+ const assetTxs = await assets.getAssetTxs({ asset_id, is_mempool: false });
+ console.log(asset);`,
+ curl: `curl -X GET "https://mempool.space/api/asset/:asset_id/txs[/mempool|/chain]"`,
+ },
+ responseSample: `[
+ {
+ txid: "74057c98274a5e529bd3fcf5b906b235937cea5aed7e43132856b402006068e5",
+ version: 2,
+ locktime: 0,
+ vin: [ [Object] ],
+ vout: [ [Object], [Object] ],
+ size: 975,
+ weight: 1461,
+ fee: 42,
+ status: {
+ confirmed: true,
+ block_height: 1337495,
+ block_hash: "e73bfee19c8e1b59967cb035f835347a78818f8639ee7ccd157d3372cdcd236e",
+ block_time: 1622328838
+ }
+ },
+ ...
+]`,
+ },
+ assetSupply: {
+ codeSample: {
+ esModule: `const { liquid: { assets } } = mempoolJS();
+
+ const txs = await transactions.getTxs({ index: 0, length: 1 });
+ console.log(txs);
+`,
+ commonJS: `const { liquid: { assets } } = mempoolJS();
+ const asset_id =
+ '6f0279e9ed041c3d710a9f57d0c02928416460c4b722ae3457a11eec381c526d';
+
+ const assetSupply = await assets.getAssetSupply({ asset_id, decimal: false });
+ console.log(assetSupply);`,
+ curl: `curl -X GET "https://mempool.space/api/asset/:asset_id/supply[/decimal]"`,
+ },
+ responseSample: `293689745913`,
+ },
+ websocket: {
+ codeSample: {
+ esModule: `const { bitcoin: { websocket } } = mempoolJS();
+
+ const ws = websocket.initServer({
+ options: ["blocks", "stats", "mempool-blocks", "live-2h-chart"],
+ });
+
+ ws.on("message", function incoming(data) {
+ const res = JSON.parse(data.toString());
+ if (res.blocks) {
+ console.log(res.blocks);
+ }
+ if (res.mempoolInfo) {
+ console.log(res.mempoolInfo);
+ }
+ if (res.transactions) {
+ console.log(res.transactions);
+ }
+ if (res.mempoolBlocks) {
+ console.log(res.mempoolBlocks);
+ }
+ });`,
+ commonJS: `const { bitcoin: { websocket } } = mempoolJS();
+
+ const ws = websocket.initClient({
+ options: ['blocks', 'stats', 'mempool-blocks', 'live-2h-chart'],
+ });
+
+ ws.addEventListener('message', function incoming({data}) {
+ const res = JSON.parse(data.toString());
+ if (res.blocks) {
+ console.log(res.blocks);
+ }
+ if (res.mempoolInfo) {
+ console.log(res.mempoolInfo);
+ }
+ if (res.transactions) {
+ console.log(res.transactions);
+ }
+ if (res.mempoolBlocks) {
+ console.log(res.mempoolBlocks);
+ }
+ });`,
+ curl: ``,
+ },
+ responseSample: ``,
+ }
+ };
constructor(
private stateService: StateService,
diff --git a/frontend/src/app/components/api-docs/code-template.component.html b/frontend/src/app/components/api-docs/code-template.component.html
new file mode 100644
index 000000000..8a987909e
--- /dev/null
+++ b/frontend/src/app/components/api-docs/code-template.component.html
@@ -0,0 +1,39 @@
+
\ No newline at end of file
diff --git a/frontend/src/app/components/api-docs/code-template.component.scss b/frontend/src/app/components/api-docs/code-template.component.scss
new file mode 100644
index 000000000..714f7325c
--- /dev/null
+++ b/frontend/src/app/components/api-docs/code-template.component.scss
@@ -0,0 +1,91 @@
+.text-small {
+ font-size: 12px;
+}
+
+code {
+ background-color: #1d1f31;
+ font-family: Consolas,Monaco,Lucida Console,Liberation Mono,DejaVu Sans Mono,Bitstream Vera Sans Mono,Courier New;
+}
+
+tr {
+ white-space: inherit;
+}
+
+.nowrap {
+ white-space: nowrap;
+}
+
+li.nav-item {
+ width: 100%;
+ @media (min-width: 676px){
+ width: auto;
+ }
+}
+
+.nav-tabs .nav-link.active {
+ border-bottom: 1px solid #fff;
+ @media (min-width: 676px){
+ border-bottom: 1px solid #11131f;
+ }
+}
+
+.code-tab {
+ width: auto;
+ margin: 20px auto 10px;
+ li.nav-item {
+ width: auto;
+ }
+
+}
+
+.code {
+ .tab-content {
+ padding: 0px;
+ }
+ .nav-tabs .nav-link.active {
+ border-bottom: 1px solid #11131f;
+ }
+ .subtitle {
+ display: flex;
+ justify-content: space-between;
+ }
+}
+.description {
+ margin-top: 20px;
+}
+.title {
+ font-weight: bold;
+ color: #ffffff;
+ font-size: 1.25rem;
+}
+.subtitle {
+ font-weight: bold;
+}
+.divider {
+ width: 100%;
+ margin: 30px auto;
+ height: 1px;
+ background: #333;
+}
+.websocket {
+ padding: 15px;
+}
+
+.links {
+ margin-bottom: 5px;
+ a {
+ font-size: 14px;
+ margin: 0px 10px 0px 0px;
+ }
+}
+
+pre {
+ display: block;
+ font-size: 87.5%;
+ color: #f18920;
+ background-color: #1d1f31;
+ padding: 30px;
+ code{
+ background-color: transparent;
+ }
+}
\ No newline at end of file
diff --git a/frontend/src/app/components/api-docs/code-template.component.ts b/frontend/src/app/components/api-docs/code-template.component.ts
new file mode 100644
index 000000000..e7c8d9915
--- /dev/null
+++ b/frontend/src/app/components/api-docs/code-template.component.ts
@@ -0,0 +1,84 @@
+import { Component, Input } from '@angular/core';
+
+@Component({
+ selector: 'app-code-template',
+ templateUrl: './code-template.component.html',
+ styleUrls: ['./code-template.component.scss']
+})
+export class CodeTemplateComponent {
+ @Input() network: string;
+ @Input() code: {
+ codeSample: {
+ esModule: string;
+ commonJS: string;
+ curl: string;
+ },
+ responseSample: string;
+ };
+ hostname = document.location.hostname;
+ esModuleInstall = `# npm
+npm install @mempool/mempool.js --save
+
+# yarn
+yarn add @mempool/mempool.js`;
+
+ constructor(
+ ) { }
+
+ normalizeCodeHostname(code: string) {
+ let codeText: string;
+ if (this.network === 'bisq' || this.network === 'liquid'){
+ codeText = code.replace('%{1}', this.network);
+ }else{
+ codeText = code.replace('%{1}', 'bitcoin');
+ }
+ return codeText;
+ }
+
+ wrapESmodule(code: string) {
+ let codeText = this.normalizeCodeHostname(code);
+
+ if (this.network && this.network !== 'mainnet') {
+ codeText = codeText.replace('mempoolJS();', `mempoolJS({
+ hostname: '${this.hostname}/${this.network}'
+ });` );
+ }
+
+ return `import mempoolJS from "@mempool/mempool.js";
+
+const init = async () => {
+ ${codeText}
+};
+init();`;
+ }
+
+ wrapCommonJS(code: string) {
+ let codeText = this.normalizeCodeHostname(code);
+
+ if (this.network && this.network !== 'mainnet') {
+ codeText = codeText.replace('mempoolJS();', `mempoolJS({
+ hostname: '${this.hostname}/${this.network}'
+ });` );
+ }
+ return `
+
+
+
+
+
+
+`;
+ }
+ wrapCurl(code: string) {
+ if (this.network && this.network !== 'mainnet') {
+ return code.replace('mempool.space/', `mempool.space/${this.network}/`);
+ }
+ return code;
+ }
+
+}
diff --git a/frontend/src/app/shared/shared.module.ts b/frontend/src/app/shared/shared.module.ts
index ac0efca35..61c57a92d 100644
--- a/frontend/src/app/shared/shared.module.ts
+++ b/frontend/src/app/shared/shared.module.ts
@@ -14,7 +14,7 @@ import { TimeSinceComponent } from '../components/time-since/time-since.componen
import { ClipboardComponent } from '../components/clipboard/clipboard.component';
import { QrcodeComponent } from '../components/qrcode/qrcode.component';
import { FiatComponent } from '../fiat/fiat.component';
-import { NgbNavModule, NgbTooltipModule, NgbButtonsModule, NgbPaginationModule, NgbDropdownModule } from '@ng-bootstrap/ng-bootstrap';
+import { NgbNavModule, NgbTooltipModule, NgbButtonsModule, NgbPaginationModule, NgbDropdownModule, NgbAccordionModule } from '@ng-bootstrap/ng-bootstrap';
import { TxFeaturesComponent } from '../components/tx-features/tx-features.component';
import { TxFeeRatingComponent } from '../components/tx-fee-rating/tx-fee-rating.component';
import { ReactiveFormsModule } from '@angular/forms';
@@ -50,11 +50,13 @@ import { ColoredPriceDirective } from './directives/colored-price.directive';
NgbButtonsModule,
NgbPaginationModule,
NgbDropdownModule,
+ NgbAccordionModule,
],
providers: [
VbytesPipe,
],
exports: [
+ NgbAccordionModule,
NgbNavModule,
CommonModule,
ReactiveFormsModule,
diff --git a/frontend/src/index.html b/frontend/src/index.html
index 10d7ee1ea..88c1ab9f8 100644
--- a/frontend/src/index.html
+++ b/frontend/src/index.html
@@ -17,7 +17,7 @@
-
+
diff --git a/frontend/src/styles.scss b/frontend/src/styles.scss
index f03ec1b79..9a985bbba 100644
--- a/frontend/src/styles.scss
+++ b/frontend/src/styles.scss
@@ -54,7 +54,7 @@ html, body {
body {
background-color: #11131f;
- min-width: 320px;
+ min-width: 375px;
padding-bottom: 60px;
}
@@ -630,4 +630,42 @@ th {
@media (min-width: 1200px) {
max-width: 480px;
}
-}
\ No newline at end of file
+}
+
+.tab-pane {
+ .card {
+ background-color: transparent;
+ padding: 0;
+
+ button {
+ text-align: left;
+ display: block;
+ width: 100%;
+ padding: 1rem 2rem;
+ color: #fff;
+ font-weight: bold;
+ &:focus, &:hover, &:active {
+ text-decoration: none;
+ outline: none;
+ box-shadow: none;
+ }
+ }
+
+ .card-header {
+ padding: 0;
+ }
+
+ .collapsed{
+ background-color: #2d3348;
+ color: #1bd8f4;
+ }
+ }
+
+ .subtitle {
+ font-weight: bold;
+ margin-bottom: 3px;
+ button {
+ padding: 0px !important;
+ }
+ }
+}