Misc:
-switch from fontawesome to bootstrap icons (FA is too heavy) -url change: /mining-template -> /next-block -/node-details: split out interfaces into separate section; split out upload/download -new fun item: value burned in OP_RETURN output -reorganize img files -minor ui/text tweaks
|
|
@ -2,9 +2,11 @@
|
|||
###### Unreleased
|
||||
|
||||
* Minor fixes for running against Bitcoin Core v23
|
||||
* URL change: /mining-template -> /next-block (redirect is included for compatibility)
|
||||
* Support for serving static assets via a configurable CDN
|
||||
* Misc fixes for erroneous data display on non-mainnet nodes
|
||||
* UI/UX tweak, especially on homepage
|
||||
* Switch from fontawesome to bootstrap-icons v1.8.0
|
||||
* UI/UX tweaks
|
||||
* Updated dependencies
|
||||
|
||||
|
||||
|
|
|
|||
34
app.js
|
|
@ -223,10 +223,10 @@ const cdnItems = [
|
|||
[`style/light.css`, `text/css`, "utf8"],
|
||||
[`style/highlight.min.css`, `text/css`, "utf8"],
|
||||
[`style/dataTables.bootstrap4.min.css`, `text/css`, "utf8"],
|
||||
[`style/bootstrap-icons.css`, `text/css`, "utf8"],
|
||||
|
||||
[`js/bootstrap.bundle.min.js`, `text/javascript`, "utf8"],
|
||||
[`js/chart.min.js`, `text/javascript`, "utf8"],
|
||||
[`js/fontawesome.min.js`, `text/javascript`, "utf8"],
|
||||
[`js/jquery.min.js`, `text/javascript`, "utf8"],
|
||||
[`js/site.js`, `text/javascript`, "utf8"],
|
||||
[`js/highlight.pack.js`, `text/javascript`, "utf8"],
|
||||
|
|
@ -237,19 +237,25 @@ const cdnItems = [
|
|||
[`js/sentry.min.js`, `text/javascript`, "utf8"],
|
||||
[`js/decimal.js`, `text/javascript`, "utf8"],
|
||||
|
||||
[`img/logo/logo.svg`, `image/svg+xml`, "utf8"],
|
||||
[`img/logo/mainnet/logo.svg`, `image/svg+xml`, "utf8"],
|
||||
[`img/logo/mainnet/apple-touch-icon.png`, `image/png`, "binary"],
|
||||
[`img/logo/mainnet/favicon-16x16.png`, `image/png`, "binary"],
|
||||
[`img/logo/mainnet/favicon-32x32.png`, `image/png`, "binary"],
|
||||
[`img/logo/testnet/logo.svg`, `image/svg+xml`, "utf8"],
|
||||
[`img/logo/signet/logo.svg`, `image/svg+xml`, "utf8"],
|
||||
[`img/logo/regtest/logo.svg`, `image/svg+xml`, "utf8"],
|
||||
[`img/network-mainnet/logo.svg`, `image/svg+xml`, "utf8"],
|
||||
[`img/network-mainnet/coin-icon.svg`, `image/svg+xml`, "utf8"],
|
||||
[`img/network-mainnet/apple-touch-icon.png`, `image/png`, "binary"],
|
||||
[`img/network-mainnet/favicon-16x16.png`, `image/png`, "binary"],
|
||||
[`img/network-mainnet/favicon-32x32.png`, `image/png`, "binary"],
|
||||
[`img/network-testnet/logo.svg`, `image/svg+xml`, "utf8"],
|
||||
[`img/network-testnet/coin-icon.svg`, `image/svg+xml`, "utf8"],
|
||||
[`img/network-signet/logo.svg`, `image/svg+xml`, "utf8"],
|
||||
[`img/network-signet/coin-icon.svg`, `image/svg+xml`, "utf8"],
|
||||
[`img/network-regtest/logo.svg`, `image/svg+xml`, "utf8"],
|
||||
[`img/network-regtest/coin-icon.svg`, `image/svg+xml`, "utf8"],
|
||||
|
||||
[`img/logo/mainnet/favicon.ico`, `image/x-icon`, "binary"],
|
||||
[`img/logo/testnet/favicon.ico`, `image/x-icon`, "binary"],
|
||||
[`img/logo/signet/favicon.ico`, `image/x-icon`, "binary"],
|
||||
[`img/logo/regtest/favicon.ico`, `image/x-icon`, "binary"],
|
||||
[`img/network-mainnet/favicon.ico`, `image/x-icon`, "binary"],
|
||||
[`img/network-testnet/favicon.ico`, `image/x-icon`, "binary"],
|
||||
[`img/network-signet/favicon.ico`, `image/x-icon`, "binary"],
|
||||
[`img/network-regtest/favicon.ico`, `image/x-icon`, "binary"],
|
||||
|
||||
[`font/bootstrap-icons.woff`, `font/woff`, "binary"],
|
||||
[`font/bootstrap-icons.woff2`, `font/woff2`, "binary"],
|
||||
|
||||
[`leaflet/leaflet.js`, `text/javascript`, "utf8"],
|
||||
[`leaflet/leaflet.css`, `text/css`, "utf8"],
|
||||
|
|
@ -748,7 +754,7 @@ expressApp.onStartup = async () => {
|
|||
} catch (e) {
|
||||
errorItems.push(filepath);
|
||||
|
||||
debugErrorLog(`Error uploading asset to S3: ${JSON.stringify(item)}`, e);
|
||||
debugErrorLog(`Error uploading asset to S3: ${JSON.stringify(filepath)}`, e);
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -63,15 +63,16 @@ module.exports = {
|
|||
name:"Bitcoin",
|
||||
ticker:"BTC",
|
||||
logoUrlsByNetwork:{
|
||||
"main":"./img/logo/mainnet/logo.svg",
|
||||
"test":"./img/logo/testnet/logo.svg",
|
||||
"regtest":"./img/logo/regtest/logo.svg",
|
||||
"signet":"./img/logo/signet/logo.svg"
|
||||
"main":"./img/network-mainnet/logo.svg",
|
||||
"test":"./img/network-testnet/logo.svg",
|
||||
"regtest":"./img/network-regtest/logo.svg",
|
||||
"signet":"./img/network-signet/logo.svg"
|
||||
},
|
||||
coinIconUrlsByNetwork:{
|
||||
"main":"./img/logo/mainnet/coin-icon.svg",
|
||||
"test":"./img/logo/testnet/coin-icon.svg",
|
||||
"signet":"./img/logo/signet/coin-icon.svg"
|
||||
"main":"./img/network-mainnet/coin-icon.svg",
|
||||
"test":"./img/network-testnet/coin-icon.svg",
|
||||
"signet":"./img/network-signet/coin-icon.svg",
|
||||
"regtest":"./img/network-regtest/coin-icon.svg"
|
||||
},
|
||||
coinColorsByNetwork: {
|
||||
"main": "#F7931A",
|
||||
|
|
|
|||
|
|
@ -440,6 +440,16 @@ module.exports = {
|
|||
summary: "Far-future dated Locktime value.",
|
||||
alertBodyHtml: "The 'locktime' value of a transaction usually specifies the earliest time that a transaction may be mined (included in a block). The value can take one of two forms: a block height (if the value is ≤ 500M), or a unix timestamp. The locktime value of this transaction seemingly indicates that the transaction cannot be mined until the year 2076. But, because this is a coinbase transaction (created by a miner in the process of mining a block), its locktime value does not need to honor the usual purpose, and may instead be representing some other data from the miner. This situation arises fairly regularly in coinbase transactions."
|
||||
},
|
||||
{
|
||||
type: "tx",
|
||||
date: "2015-06-21",
|
||||
chain: "main",
|
||||
txid: "71c3da4e13f5b61c2cf05e9b5a22f3be989142b870c1cf7779a1d7b3f139d422",
|
||||
blockHeight: 361935,
|
||||
summary: "Value provably destroyed in OP_RETURN output.",
|
||||
alertBodyHtml: "OP_RETURN outputs are special-case outputs that immediately abort script evaluation with a failure result. Therefore, any value assigned to an OP_RETURN output is provably unspendable. In fact, as an optimization, such values are purged from node software's databases since they are certain to be unspendable in all future transactions.",
|
||||
referenceUrl: "https://bitcoin.stackexchange.com/a/109748/3397"
|
||||
},
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -236,35 +236,35 @@ module.exports = {
|
|||
credentials: credentials,
|
||||
|
||||
siteTools:[
|
||||
/* 0 */ {name:"Node Details", url:"./node-details", desc:"Node basics (version, uptime, etc)", fontawesome:"fas fa-info-circle"},
|
||||
/* 1 */ {name:"Peers", url:"./peers", desc:"Details about the peers connected to this node.", fontawesome:"fas fa-sitemap"},
|
||||
/* 0 */ {name:"Node Details", url:"./node-details", desc:"Node basics (version, uptime, etc)", iconClass:"bi-info-circle"},
|
||||
/* 1 */ {name:"Peers", url:"./peers", desc:"Details about the peers connected to this node.", iconClass:"bi-diagram-3"},
|
||||
|
||||
/* 2 */ {name:"Browse Blocks", url:"./blocks", desc:"Browse all blocks in the blockchain.", fontawesome:"fas fa-cubes"},
|
||||
/* 3 */ {name:"Transaction Stats", url:"./tx-stats", desc:"See graphs of total transaction volume and transaction rates.", fontawesome:"fas fa-chart-bar"},
|
||||
/* 2 */ {name:"Browse Blocks", url:"./blocks", desc:"Browse all blocks in the blockchain.", iconClass:"bi-boxes"},
|
||||
/* 3 */ {name:"Transaction Stats", url:"./tx-stats", desc:"See graphs of total transaction volume and transaction rates.", iconClass:"bi-graph-up"},
|
||||
|
||||
/* 4 */ {name:"Mempool Summary", url:"./mempool-summary", desc:"Detailed summary of the current mempool for this node.", fontawesome:"fas fa-hourglass-half"},
|
||||
/* 5 */ {name:"Browse Mempool", url:"./mempool-transactions", desc:"Browse unconfirmed/pending transactions.", fontawesome:"fas fa-book-open"},
|
||||
/* 4 */ {name:"Mempool Summary", url:"./mempool-summary", desc:"Detailed summary of the current mempool for this node.", iconClass:"bi-hourglass-split"},
|
||||
/* 5 */ {name:"Browse Mempool", url:"./mempool-transactions", desc:"Browse unconfirmed/pending transactions.", iconClass:"bi-book"},
|
||||
|
||||
/* 6 */ {name:"RPC Browser", url:"./rpc-browser", desc:"Browse the RPC functionality of this node. See docs and execute commands.", fontawesome:"fas fa-book"},
|
||||
/* 7 */ {name:"RPC Terminal", url:"./rpc-terminal", desc:"Directly execute RPCs against this node.", fontawesome:"fas fa-terminal"},
|
||||
/* 6 */ {name:"RPC Browser", url:"./rpc-browser", desc:"Browse the RPC functionality of this node. See docs and execute commands.", iconClass:"bi-journal-text"},
|
||||
/* 7 */ {name:"RPC Terminal", url:"./rpc-terminal", desc:"Directly execute RPCs against this node.", iconClass:"bi-terminal"},
|
||||
|
||||
/* 8 */ {name:(coins[currentCoin].name + " Fun"), url:"./fun", desc:"Curated fun/interesting historical blockchain data.", fontawesome:"fas fa-flag"},
|
||||
/* 8 */ {name:(coins[currentCoin].name + " Fun"), url:"./fun", desc:"Curated fun/interesting historical blockchain data.", iconClass:"bi-flag"},
|
||||
|
||||
/* 9 */ {name:"Mining Summary", url:"./mining-summary", desc:"Summary of recent data about miners.", fontawesome:"fas fa-chart-pie"},
|
||||
/* 10 */ {name:"Block Stats", url:"./block-stats", desc:"Summary data for blocks in configurable range.", fontawesome:"fas fa-layer-group"},
|
||||
/* 11 */ {name:"Block Analysis", url:"./block-analysis", desc:"Summary analysis for all transactions in a block.", fontawesome:"fas fa-angle-double-down"},
|
||||
/* 12 */ {name:"Difficulty History", url:"./difficulty-history", desc:"Details of difficulty changes over time.", fontawesome:"fas fa-chart-line"},
|
||||
/* 9 */ {name:"Mining Summary", url:"./mining-summary", desc:"Summary of recent data about miners.", iconClass:"bi-hammer"},
|
||||
/* 10 */ {name:"Block Stats", url:"./block-stats", desc:"Summary data for blocks in configurable range.", iconClass:"bi-stack"},
|
||||
/* 11 */ {name:"Block Analysis", url:"./block-analysis", desc:"Summary analysis for all transactions in a block.", iconClass:"bi-chevron-double-down"},
|
||||
/* 12 */ {name:"Difficulty History", url:"./difficulty-history", desc:"Details of difficulty changes over time.", iconClass:"bi-graph-up-arrow"},
|
||||
|
||||
/* 13 */ {name:"Whitepaper Extractor", url:"./bitcoin-whitepaper", desc:"Extract the Bitcoin whitepaper from data embedded within the blockchain.", fontawesome:"far fa-file-alt"},
|
||||
/* 13 */ {name:"Whitepaper Extractor", url:"./bitcoin-whitepaper", desc:"Extract the Bitcoin whitepaper from data embedded within the blockchain.", iconClass:"bi-file-earmark-text"},
|
||||
|
||||
/* 14 */ {name:"Predicted Blocks", url:"./predicted-blocks", desc:"View predicted future blocks based on the current mempool.", fontawesome:"fas fa-arrow-circle-right"},
|
||||
/* 14 */ {name:"Predicted Blocks", url:"./predicted-blocks", desc:"View predicted future blocks based on the current mempool.", iconClass:"bi-arrow-right-circle"},
|
||||
|
||||
/* 15 */ {name:"API", url:"./api/docs", desc:"View docs for the public API.", fontawesome:"fas fa-toolbox"},
|
||||
/* 15 */ {name:"API", url:"./api/docs", desc:"View docs for the public API.", iconClass:"bi-braces-asterisk"},
|
||||
|
||||
/* 16 */ {name:"Mining Template", url:"./mining-template", desc:"View a template for the the next block based on the current mempool.", fontawesome:"fas fa-filter"},
|
||||
/* 17 */ {name:"Quotes", url:"./quotes", desc:"Curated list of Bitcoin-related quotes.", fontawesome:"fas fa-comment-dots"},
|
||||
/* 16 */ {name:"Next Block", url:"./next-block", desc:"View a prediction for the the next block, based on the current mempool.", iconClass:"bi-minecart-loaded"},
|
||||
/* 17 */ {name:"Quotes", url:"./quotes", desc:"Curated list of Bitcoin-related quotes.", iconClass:"bi-chat-quote"},
|
||||
|
||||
/* 18 */ {name:"UTXO Set", url:"./utxo-set", desc:"View the latest UTXO Set.", fontawesome:"fas fa-coins"},
|
||||
/* 18 */ {name:"UTXO Set", url:"./utxo-set", desc:"View the latest UTXO Set.", iconClass:"bi-list-columns"},
|
||||
]
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@ const dirs = [
|
|||
"public/js/",
|
||||
"public/style/",
|
||||
"public/leaflet/",
|
||||
"public/font/",
|
||||
];
|
||||
|
||||
const filetypeMatch = /^.*\.(js|css)$/;
|
||||
|
|
|
|||
48
npm-shrinkwrap.json
generated
|
|
@ -93,9 +93,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/@babel/parser": {
|
||||
"version": "7.17.9",
|
||||
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.9.tgz",
|
||||
"integrity": "sha512-vqUSBLP8dQHFPdPi9bc5GK9vRkYHJ49fsZdtoJ8EQ8ibpwk5rPKfvNIwChB0KVXcIjcepEBBd2VHC5r9Gy8ueg==",
|
||||
"version": "7.17.10",
|
||||
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.10.tgz",
|
||||
"integrity": "sha512-n2Q6i+fnJqzOaq2VkdXxy2TCPCWQZHiCo0XqmrCvDWcZQKRyZzYi4Z0yxlBuN0w+r2ZHmre+Q087DSrw3pbJDQ==",
|
||||
"bin": {
|
||||
"parser": "bin/babel-parser.js"
|
||||
},
|
||||
|
|
@ -104,9 +104,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/@babel/types": {
|
||||
"version": "7.17.0",
|
||||
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz",
|
||||
"integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==",
|
||||
"version": "7.17.10",
|
||||
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.10.tgz",
|
||||
"integrity": "sha512-9O26jG0mBYfGkUYCYZRnBwbVLd1UZOICEr2Em6InB6jVfsAv1GKgwXHmrSg+WFWDmeKTA6vyTZiN8tCSM5Oo3A==",
|
||||
"dependencies": {
|
||||
"@babel/helper-validator-identifier": "^7.16.7",
|
||||
"to-fast-properties": "^2.0.0"
|
||||
|
|
@ -374,9 +374,9 @@
|
|||
"integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
|
||||
},
|
||||
"node_modules/aws-sdk": {
|
||||
"version": "2.1124.0",
|
||||
"resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1124.0.tgz",
|
||||
"integrity": "sha512-LIj2EmvduQmyjpSLoDPe2TvRBrGWhJKlCuC7lungN4f+qYPOfVWg6/c9GdP99W0q5p2IqhDkCmQ/ZZBpO1Z/Fg==",
|
||||
"version": "2.1125.0",
|
||||
"resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1125.0.tgz",
|
||||
"integrity": "sha512-2syNkKDqDcDmB/chc61a5xx+KYzaarLs1/KshE0b1Opp2oSq2FARyUBbk59HgwKaDUB61uPF33ZG9sHiIVx2hQ==",
|
||||
"dependencies": {
|
||||
"buffer": "4.9.2",
|
||||
"events": "1.1.1",
|
||||
|
|
@ -1695,9 +1695,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/express": {
|
||||
"version": "4.18.0",
|
||||
"resolved": "https://registry.npmjs.org/express/-/express-4.18.0.tgz",
|
||||
"integrity": "sha512-EJEXxiTQJS3lIPrU1AE2vRuT7X7E+0KBbpm5GSoK524yl0K8X+er8zS2P14E64eqsVNoWbMCT7MpmQ+ErAhgRg==",
|
||||
"version": "4.18.1",
|
||||
"resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz",
|
||||
"integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==",
|
||||
"dependencies": {
|
||||
"accepts": "~1.3.8",
|
||||
"array-flatten": "1.1.1",
|
||||
|
|
@ -5308,14 +5308,14 @@
|
|||
}
|
||||
},
|
||||
"@babel/parser": {
|
||||
"version": "7.17.9",
|
||||
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.9.tgz",
|
||||
"integrity": "sha512-vqUSBLP8dQHFPdPi9bc5GK9vRkYHJ49fsZdtoJ8EQ8ibpwk5rPKfvNIwChB0KVXcIjcepEBBd2VHC5r9Gy8ueg=="
|
||||
"version": "7.17.10",
|
||||
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.10.tgz",
|
||||
"integrity": "sha512-n2Q6i+fnJqzOaq2VkdXxy2TCPCWQZHiCo0XqmrCvDWcZQKRyZzYi4Z0yxlBuN0w+r2ZHmre+Q087DSrw3pbJDQ=="
|
||||
},
|
||||
"@babel/types": {
|
||||
"version": "7.17.0",
|
||||
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz",
|
||||
"integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==",
|
||||
"version": "7.17.10",
|
||||
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.10.tgz",
|
||||
"integrity": "sha512-9O26jG0mBYfGkUYCYZRnBwbVLd1UZOICEr2Em6InB6jVfsAv1GKgwXHmrSg+WFWDmeKTA6vyTZiN8tCSM5Oo3A==",
|
||||
"requires": {
|
||||
"@babel/helper-validator-identifier": "^7.16.7",
|
||||
"to-fast-properties": "^2.0.0"
|
||||
|
|
@ -5542,9 +5542,9 @@
|
|||
"integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
|
||||
},
|
||||
"aws-sdk": {
|
||||
"version": "2.1124.0",
|
||||
"resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1124.0.tgz",
|
||||
"integrity": "sha512-LIj2EmvduQmyjpSLoDPe2TvRBrGWhJKlCuC7lungN4f+qYPOfVWg6/c9GdP99W0q5p2IqhDkCmQ/ZZBpO1Z/Fg==",
|
||||
"version": "2.1125.0",
|
||||
"resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1125.0.tgz",
|
||||
"integrity": "sha512-2syNkKDqDcDmB/chc61a5xx+KYzaarLs1/KshE0b1Opp2oSq2FARyUBbk59HgwKaDUB61uPF33ZG9sHiIVx2hQ==",
|
||||
"requires": {
|
||||
"buffer": "4.9.2",
|
||||
"events": "1.1.1",
|
||||
|
|
@ -6568,9 +6568,9 @@
|
|||
"integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg=="
|
||||
},
|
||||
"express": {
|
||||
"version": "4.18.0",
|
||||
"resolved": "https://registry.npmjs.org/express/-/express-4.18.0.tgz",
|
||||
"integrity": "sha512-EJEXxiTQJS3lIPrU1AE2vRuT7X7E+0KBbpm5GSoK524yl0K8X+er8zS2P14E64eqsVNoWbMCT7MpmQ+ErAhgRg==",
|
||||
"version": "4.18.1",
|
||||
"resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz",
|
||||
"integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==",
|
||||
"requires": {
|
||||
"accepts": "~1.3.8",
|
||||
"array-flatten": "1.1.1",
|
||||
|
|
|
|||
|
|
@ -28,6 +28,7 @@
|
|||
"url": "git+https://github.com/janoside/btc-rpc-explorer.git"
|
||||
},
|
||||
"dependencies": {
|
||||
"@janoside/app-utils": "github:janoside/app-utils#148cd2fb1ff3c002f15ae99a2548c87cfb4b3514",
|
||||
"async": "^3.2.2",
|
||||
"axios": "^0.27.2",
|
||||
"basic-auth": "^2.0.1",
|
||||
|
|
@ -49,7 +50,6 @@
|
|||
"express": "^4.17.1",
|
||||
"express-async-handler": "^1.1.4",
|
||||
"express-session": "^1.17.2",
|
||||
"@janoside/app-utils": "github:janoside/app-utils#148cd2fb1ff3c002f15ae99a2548c87cfb4b3514",
|
||||
"jstransformer-markdown-it": "^2.1.0",
|
||||
"lru-cache": "^6.0.0",
|
||||
"markdown-it": "^13.0.0",
|
||||
|
|
|
|||
BIN
public/font/bootstrap-icons.woff
Normal file
BIN
public/font/bootstrap-icons.woff2
Normal file
|
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 2.3 KiB |
|
Before Width: | Height: | Size: 5.6 KiB After Width: | Height: | Size: 5.6 KiB |
|
Before Width: | Height: | Size: 2 KiB After Width: | Height: | Size: 2 KiB |
|
|
@ -2,7 +2,7 @@
|
|||
<browserconfig>
|
||||
<msapplication>
|
||||
<tile>
|
||||
<square150x150logo src="./img/logo/mainnet/mstile-150x150.png"/>
|
||||
<square150x150logo src="./img/network-mainnet/mstile-150x150.png"/>
|
||||
<TileColor>#022e70</TileColor>
|
||||
</tile>
|
||||
</msapplication>
|
||||
|
Before Width: | Height: | Size: 956 B After Width: | Height: | Size: 956 B |
|
Before Width: | Height: | Size: 519 B After Width: | Height: | Size: 519 B |
|
Before Width: | Height: | Size: 791 B After Width: | Height: | Size: 791 B |
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
7
public/img/network-mainnet/icon.svg
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
<svg aria-hidden="true" focusable="false" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 384">
|
||||
<circle fill="#F7931A" cx="192" cy="192" r="192" />
|
||||
|
||||
<g transform="translate(-35, -30) rotate(0 0 0) scale(14 14)">
|
||||
<path fill="#FFF" fill-rule="nonzero" d="M23.189 14.02c.314-2.096-1.283-3.223-3.465-3.975l.708-2.84-1.728-.43-.69 2.765c-.454-.114-.92-.22-1.385-.326l.695-2.783L15.596 6l-.708 2.839c-.376-.086-.746-.17-1.104-.26l.002-.009-2.384-.595-.46 1.846s1.283.294 1.256.312c.7.175.826.638.805 1.006l-.806 3.235c.048.012.11.03.18.057l-.183-.045-1.13 4.532c-.086.212-.303.531-.793.41.018.025-1.256-.313-1.256-.313l-.858 1.978 2.25.561c.418.105.828.215 1.231.318l-.715 2.872 1.727.43.708-2.84c.472.127.93.245 1.378.357l-.706 2.828 1.728.43.715-2.866c2.948.558 5.164.333 6.097-2.333.752-2.146-.037-3.385-1.588-4.192 1.13-.26 1.98-1.003 2.207-2.538zm-3.95 5.538c-.533 2.147-4.148.986-5.32.695l.95-3.805c1.172.293 4.929.872 4.37 3.11zm.535-5.569c-.487 1.953-3.495.96-4.47.717l.86-3.45c.975.243 4.118.696 3.61 2.733z"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1 KiB |
|
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB |
|
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 3.9 KiB After Width: | Height: | Size: 3.9 KiB |
|
Before Width: | Height: | Size: 9 KiB After Width: | Height: | Size: 9 KiB |
|
Before Width: | Height: | Size: 3.6 KiB After Width: | Height: | Size: 3.6 KiB |
|
|
@ -2,7 +2,7 @@
|
|||
<browserconfig>
|
||||
<msapplication>
|
||||
<tile>
|
||||
<square150x150logo src="./img/logo/signet/mstile-150x150.png"/>
|
||||
<square150x150logo src="./img/network-regtest/mstile-150x150.png"/>
|
||||
<TileColor>#da532c</TileColor>
|
||||
</tile>
|
||||
</msapplication>
|
||||
1
public/img/network-regtest/coin-icon.svg
Normal file
|
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32"><g fill="none" fill-rule="evenodd"><circle cx="16" cy="16" r="16" fill="#777"/><path fill="#FFF" fill-rule="nonzero" d="M23.189 14.02c.314-2.096-1.283-3.223-3.465-3.975l.708-2.84-1.728-.43-.69 2.765c-.454-.114-.92-.22-1.385-.326l.695-2.783L15.596 6l-.708 2.839c-.376-.086-.746-.17-1.104-.26l.002-.009-2.384-.595-.46 1.846s1.283.294 1.256.312c.7.175.826.638.805 1.006l-.806 3.235c.048.012.11.03.18.057l-.183-.045-1.13 4.532c-.086.212-.303.531-.793.41.018.025-1.256-.313-1.256-.313l-.858 1.978 2.25.561c.418.105.828.215 1.231.318l-.715 2.872 1.727.43.708-2.84c.472.127.93.245 1.378.357l-.706 2.828 1.728.43.715-2.866c2.948.558 5.164.333 6.097-2.333.752-2.146-.037-3.385-1.588-4.192 1.13-.26 1.98-1.003 2.207-2.538zm-3.95 5.538c-.533 2.147-4.148.986-5.32.695l.95-3.805c1.172.293 4.929.872 4.37 3.11zm.535-5.569c-.487 1.953-3.495.96-4.47.717l.86-3.45c.975.243 4.118.696 3.61 2.733z"/></g></svg>
|
||||
|
After Width: | Height: | Size: 953 B |
|
Before Width: | Height: | Size: 700 B After Width: | Height: | Size: 700 B |
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB |
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
7
public/img/network-regtest/icon.svg
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
<svg aria-hidden="true" focusable="false" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 384">
|
||||
<circle fill="#777" cx="192" cy="192" r="192" />
|
||||
|
||||
<g transform="translate(-35, -30) rotate(0 0 0) scale(14 14)">
|
||||
<path fill="#FFF" fill-rule="nonzero" d="M23.189 14.02c.314-2.096-1.283-3.223-3.465-3.975l.708-2.84-1.728-.43-.69 2.765c-.454-.114-.92-.22-1.385-.326l.695-2.783L15.596 6l-.708 2.839c-.376-.086-.746-.17-1.104-.26l.002-.009-2.384-.595-.46 1.846s1.283.294 1.256.312c.7.175.826.638.805 1.006l-.806 3.235c.048.012.11.03.18.057l-.183-.045-1.13 4.532c-.086.212-.303.531-.793.41.018.025-1.256-.313-1.256-.313l-.858 1.978 2.25.561c.418.105.828.215 1.231.318l-.715 2.872 1.727.43.708-2.84c.472.127.93.245 1.378.357l-.706 2.828 1.728.43.715-2.866c2.948.558 5.164.333 6.097-2.333.752-2.146-.037-3.385-1.588-4.192 1.13-.26 1.98-1.003 2.207-2.538zm-3.95 5.538c-.533 2.147-4.148.986-5.32.695l.95-3.805c1.172.293 4.929.872 4.37 3.11zm.535-5.569c-.487 1.953-3.495.96-4.47.717l.86-3.45c.975.243 4.118.696 3.61 2.733z"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1 KiB |
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB |
|
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 2.8 KiB |
|
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 4 KiB After Width: | Height: | Size: 4 KiB |
|
Before Width: | Height: | Size: 9.4 KiB After Width: | Height: | Size: 9.4 KiB |
|
Before Width: | Height: | Size: 3.8 KiB After Width: | Height: | Size: 3.8 KiB |
|
|
@ -2,7 +2,7 @@
|
|||
<browserconfig>
|
||||
<msapplication>
|
||||
<tile>
|
||||
<square150x150logo src="./img/logo/regtest/mstile-150x150.png"/>
|
||||
<square150x150logo src="./img/network-signet/mstile-150x150.png"/>
|
||||
<TileColor>#da532c</TileColor>
|
||||
</tile>
|
||||
</msapplication>
|
||||
|
Before Width: | Height: | Size: 956 B After Width: | Height: | Size: 956 B |
|
Before Width: | Height: | Size: 738 B After Width: | Height: | Size: 738 B |
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
7
public/img/network-signet/icon.svg
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
<svg aria-hidden="true" focusable="false" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 384">
|
||||
<circle fill="#af008c" cx="192" cy="192" r="192" />
|
||||
|
||||
<g transform="translate(-35, -30) rotate(0 0 0) scale(14 14)">
|
||||
<path fill="#FFF" fill-rule="nonzero" d="M23.189 14.02c.314-2.096-1.283-3.223-3.465-3.975l.708-2.84-1.728-.43-.69 2.765c-.454-.114-.92-.22-1.385-.326l.695-2.783L15.596 6l-.708 2.839c-.376-.086-.746-.17-1.104-.26l.002-.009-2.384-.595-.46 1.846s1.283.294 1.256.312c.7.175.826.638.805 1.006l-.806 3.235c.048.012.11.03.18.057l-.183-.045-1.13 4.532c-.086.212-.303.531-.793.41.018.025-1.256-.313-1.256-.313l-.858 1.978 2.25.561c.418.105.828.215 1.231.318l-.715 2.872 1.727.43.708-2.84c.472.127.93.245 1.378.357l-.706 2.828 1.728.43.715-2.866c2.948.558 5.164.333 6.097-2.333.752-2.146-.037-3.385-1.588-4.192 1.13-.26 1.98-1.003 2.207-2.538zm-3.95 5.538c-.533 2.147-4.148.986-5.32.695l.95-3.805c1.172.293 4.929.872 4.37 3.11zm.535-5.569c-.487 1.953-3.495.96-4.47.717l.86-3.45c.975.243 4.118.696 3.61 2.733z"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1 KiB |
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB |
|
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 3.1 KiB |
|
Before Width: | Height: | Size: 4.5 KiB After Width: | Height: | Size: 4.5 KiB |
|
Before Width: | Height: | Size: 4 KiB After Width: | Height: | Size: 4 KiB |
|
Before Width: | Height: | Size: 9.5 KiB After Width: | Height: | Size: 9.5 KiB |
|
Before Width: | Height: | Size: 3.8 KiB After Width: | Height: | Size: 3.8 KiB |
|
|
@ -2,7 +2,7 @@
|
|||
<browserconfig>
|
||||
<msapplication>
|
||||
<tile>
|
||||
<square150x150logo src="./img/logo/testnet/mstile-150x150.png"/>
|
||||
<square150x150logo src="./img/network-testnet/mstile-150x150.png"/>
|
||||
<TileColor>#da532c</TileColor>
|
||||
</tile>
|
||||
</msapplication>
|
||||
|
Before Width: | Height: | Size: 956 B After Width: | Height: | Size: 956 B |
|
Before Width: | Height: | Size: 736 B After Width: | Height: | Size: 736 B |
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
7
public/img/network-testnet/icon.svg
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
<svg aria-hidden="true" focusable="false" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 384">
|
||||
<circle fill="#1daf00" cx="192" cy="192" r="192" />
|
||||
|
||||
<g transform="translate(-35, -30) rotate(0 0 0) scale(14 14)">
|
||||
<path fill="#FFF" fill-rule="nonzero" d="M23.189 14.02c.314-2.096-1.283-3.223-3.465-3.975l.708-2.84-1.728-.43-.69 2.765c-.454-.114-.92-.22-1.385-.326l.695-2.783L15.596 6l-.708 2.839c-.376-.086-.746-.17-1.104-.26l.002-.009-2.384-.595-.46 1.846s1.283.294 1.256.312c.7.175.826.638.805 1.006l-.806 3.235c.048.012.11.03.18.057l-.183-.045-1.13 4.532c-.086.212-.303.531-.793.41.018.025-1.256-.313-1.256-.313l-.858 1.978 2.25.561c.418.105.828.215 1.231.318l-.715 2.872 1.727.43.708-2.84c.472.127.93.245 1.378.357l-.706 2.828 1.728.43.715-2.866c2.948.558 5.164.333 6.097-2.333.752-2.146-.037-3.385-1.588-4.192 1.13-.26 1.98-1.003 2.207-2.538zm-3.95 5.538c-.533 2.147-4.148.986-5.32.695l.95-3.805c1.172.293 4.929.872 4.37 3.11zm.535-5.569c-.487 1.953-3.495.96-4.47.717l.86-3.45c.975.243 4.118.696 3.61 2.733z"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1 KiB |
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB |
|
Before Width: | Height: | Size: 3.2 KiB After Width: | Height: | Size: 3.2 KiB |
|
Before Width: | Height: | Size: 4.5 KiB After Width: | Height: | Size: 4.5 KiB |
|
|
@ -3,12 +3,12 @@
|
|||
"short_name": "@BitcoinExplorer",
|
||||
"icons": [
|
||||
{
|
||||
"src": "/img/logo/android-chrome-192x192.png",
|
||||
"src": "/img/network-mainnet/android-chrome-192x192.png",
|
||||
"sizes": "192x192",
|
||||
"type": "image/png"
|
||||
},
|
||||
{
|
||||
"src": "/img/logo/android-chrome-512x512.png",
|
||||
"src": "/img/network-mainnet/android-chrome-512x512.png",
|
||||
"sizes": "512x512",
|
||||
"type": "image/png"
|
||||
}
|
||||
5
public/js/fontawesome.min.js
vendored
|
|
@ -90,11 +90,11 @@ code {
|
|||
background-color: $body-bg !important;
|
||||
}
|
||||
|
||||
.fontawesome-shadow {
|
||||
.icon-shadow {
|
||||
filter: drop-shadow(1px 1px 1px #666);
|
||||
}
|
||||
|
||||
.fontawesome-shadow-dark {
|
||||
.icon-shadow-dark {
|
||||
filter: drop-shadow(1px 1px 1px #262626);
|
||||
}
|
||||
|
||||
|
|
|
|||
1698
public/style/bootstrap-icons.css
vendored
Normal file
|
|
@ -4,17 +4,17 @@
|
|||
"chartjs-adapter-moment.min.js": "sha384-Z9r2EsEmivx0l8T8TvYoqqGcpO0cCjKbqVXB8tYUa0hIWKtGVl0TmaF263CjS6XR",
|
||||
"dataTables.bootstrap4.min.js": "sha384-uiSTMvD1kcI19sAHJDVf68medP9HA2E2PzGis9Efmfsdb8p9+mvbQNgFhzii1MEX",
|
||||
"decimal.js": "sha384-AZER8B64Ei3MdcUsKj9o83PHYCWb4dY9wJz58HzSDLat+G/QlGUdXhIlNOH56LUe",
|
||||
"fontawesome.min.js": "sha384-haqrlim99xjfMxRP6EWtafs0sB1WKcMdynwZleuUSwJR0mDeRYbhtY+KPMr+JL6f",
|
||||
"highlight.pack.js": "sha384-OGoFdvlhYqw3L+BFpHxdz5136RO9tUlt7OZ2qQZ0N6Z9Qqx0rCQBsg9ko7X4vC64",
|
||||
"jquery.dataTables.min.js": "sha384-rgWRqC0OFPisxlUvl332tiM/qmaNxnlY46eksSZD84t+s2vZlqGeHrncwIRX7CGp",
|
||||
"jquery.min.js": "sha384-vtXRMe3mGCbOeY7l30aIg8H9p3GdeSe4IFlP6G8JMa7o7lXvnz3GFKzPxzJdPfGK",
|
||||
"moment.min.js": "sha384-CJyhAlbbRZX14Q8KxKBt0na1ad4KBs9PklAiNk2Efxs9sgimbIZm9kYLJQeNMUfM",
|
||||
"sentry.min.js": "sha384-da/Bo2Ah6Uw3mlhl6VINMblg2SyGbSnULKrukse3P5D9PTJi4np9HoKvR19D7zOL",
|
||||
"site.js": "sha384-RNCa5sCPh1hkJyKAu8z5Hai8r9IxpVBF2W6GFhSb2JSuSlECW8d85ufzyXBSRwLZ",
|
||||
"dark.css": "sha384-A2fwoNoA4lHJfgim7XUOLsWNI5V2MKx17vQ1Wn0vPdwVjhNZ21jWAh3KYxq2gsKG",
|
||||
"bootstrap-icons.css": "sha384-F2hGAg3VbKKichOp5qwbhbe1e56ymDT49EQWyH5rqCb0qNewcTpB+wJ9Ayrw7tKQ",
|
||||
"dark.css": "sha384-cbyBi/NO0/dmZ3u3CIAl6fgTWzV4mbneKcZkYuTdwuipj4DYou1zkCpAzp75XY/0",
|
||||
"dataTables.bootstrap4.min.css": "sha384-EkHEUZ6lErauT712zSr0DZ2uuCmi3DoQj6ecNdHQXpMpFNGAQ48WjfXCE5n20W+R",
|
||||
"highlight.min.css": "sha384-s4RLYRjGGbVqKOyMGGwfxUTMOO6D7r2eom7hWZQ6BjK2Df4ZyfzLXEkonSm0KLIQ",
|
||||
"light.css": "sha384-pVyltRErny1kThw+BcjtLDkOEpGLSf8/1bsyqimIIA7fuoAobGDW8UfstUY8uWYZ",
|
||||
"light.css": "sha384-3CgKfbPgdn/RUkPGKfYkSy7jgoxqcupuIUhfcQGN0tFNCPMtk7O9wS2xjaaRewTQ",
|
||||
"leaflet.css": "sha384-6wKUKNzA6h/S6gZ1lWQppeGaVXvK1AUAsEznGBghzlEu1fNcxJGYVRiroSHr+OwU",
|
||||
"leaflet.js": "sha384-RFZC58YeKApoNsIbBxf4z6JJXmh+geBSgkCQXFyh+4tiFSJmJBt+2FbjxW7Ar16M"
|
||||
}
|
||||
|
|
@ -885,6 +885,11 @@ router.get("/block-stats", asyncHandler(async (req, res, next) => {
|
|||
}));
|
||||
|
||||
router.get("/mining-template", asyncHandler(async (req, res, next) => {
|
||||
// url changed
|
||||
res.redirect("./next-block");
|
||||
}));
|
||||
|
||||
router.get("/next-block", asyncHandler(async (req, res, next) => {
|
||||
const blockTemplate = await coreApi.getBlockTemplate();
|
||||
|
||||
res.locals.minFeeRate = 1000000;
|
||||
|
|
@ -935,8 +940,8 @@ router.get("/mining-template", asyncHandler(async (req, res, next) => {
|
|||
res.locals.blockTemplate = blockTemplate;
|
||||
|
||||
|
||||
await utils.timePromise("mining-template.render", async () => {
|
||||
res.render("mining-template");
|
||||
await utils.timePromise("next-block.render", async () => {
|
||||
res.render("next-block");
|
||||
});
|
||||
|
||||
next();
|
||||
|
|
|
|||
|
|
@ -57,7 +57,7 @@ block content
|
|||
.float-end
|
||||
if (`${userSettings["addressPageShowTechDetails"]}` == "false")
|
||||
a.btn.btn-primary.btn-sm.me-2(href=`./changeSetting?name=addressPageShowTechDetails&value=true`, title="Display technical details for this address.", data-bs-toggle="tooltip")
|
||||
i.far.fa-plus-square.me-2
|
||||
i.bi-plus-square.me-2
|
||||
| Technical Details
|
||||
|
||||
|
||||
|
|
@ -187,11 +187,11 @@ block content
|
|||
div.dropdown-menu.dropdown-menu-end
|
||||
a.dropdown-item(href=`./address/${address}`)
|
||||
if (sort == "desc")
|
||||
i.fa.fa-check
|
||||
i.bi-check2
|
||||
span Newest First
|
||||
a.dropdown-item(href=`./address/${address}?sort=asc`)
|
||||
if (sort != "desc")
|
||||
i.fa.fa-check
|
||||
i.bi-check2
|
||||
span Oldest First
|
||||
|
||||
else if (txids && txids.length > 1 && addressApiSupport.sortDesc && !addressApiSupport.sortAsc)
|
||||
|
|
@ -202,7 +202,7 @@ block content
|
|||
if (conflictedTxidResults)
|
||||
div.alert.alert-warning.pb-0
|
||||
div.float-start(style="width: 55px; height: 50px; font-size: 18px;")
|
||||
i.fas.fa-exclamation-triangle.fa-2x(style="margin-top: 10px;")
|
||||
i.bi-exclamation-triangle(style="margin-top: 10px;")
|
||||
h4.alert-heading.h6.fw-bold Trust Warning
|
||||
p
|
||||
span The transaction history for this address was requested from mulitple Electrum servers and the results did not match. The results below were obtained only from
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ block content
|
|||
a(href="./tx/54e48e5f5c656b26c3bca14a8c95aa583d07ebe84dde3b7dd4a78f4e4186e713") 54e48e5f5c6…
|
||||
span.ms-2 to be precise), served by your <b>Bitcoin Core</b> node.
|
||||
|
||||
p The data has been decoded by this tool and is displayed in an iframe below. You can view it directly and/or download it at
|
||||
div The data has been decoded by this tool and is displayed in an iframe below. You can view it directly and/or download it at
|
||||
a(href="./bitcoin.pdf") /bitcoin.pdf
|
||||
|.
|
||||
|
||||
|
|
|
|||
|
|
@ -30,7 +30,7 @@ block content
|
|||
|
||||
if (result.getblock.tx != null && result.getblock.tx.length > 0)
|
||||
a.btn.btn-primary.btn-sm.d-none.d-md-inline-block.ms-3(href=`./block-analysis/${result.getblock.hash}`, title="See a summary analysis of all transactions in this block.", data-bs-toggle="tooltip")
|
||||
i.fas.fa-angle-double-down.me-2
|
||||
i.bi-chevron-double-down.me-2
|
||||
| Block Analysis
|
||||
|
||||
|
||||
|
|
@ -54,12 +54,12 @@ block content
|
|||
.float-end
|
||||
if (`${userSettings["blockPageShowFeeSummary"]}` == "false")
|
||||
a.btn.btn-primary.btn-sm.me-2.mb-2(href=`./changeSetting?name=blockPageShowFeeSummary&value=true`, title="Display fee details for this block.", data-bs-toggle="tooltip")
|
||||
i.far.fa-plus-square.me-2
|
||||
i.bi-plus-square.me-2
|
||||
| Fee Details
|
||||
|
||||
if (`${userSettings["blockPageShowTechSummary"]}` == "false")
|
||||
a.btn.btn-primary.btn-sm.me-2.mb-2(href=`./changeSetting?name=blockPageShowTechSummary&value=true`, title="Display technical details for this block.", data-bs-toggle="tooltip")
|
||||
i.far.fa-plus-square.me-2
|
||||
i.bi-plus-square.me-2
|
||||
| Technical Details
|
||||
|
||||
|
||||
|
|
@ -251,7 +251,7 @@ block content
|
|||
if (!result.getblock.tx || result.getblock.tx.length == 0)
|
||||
+contentSection(`${txCount.toLocaleString()} Transaction${txCount>1?'s':''}`)
|
||||
span.me-2(title="This data is unavailable due to blockchain pruning", data-bs-toggle="tooltip")
|
||||
i.fas.fa-backspace.text-danger
|
||||
i.bi-backspace.text-danger
|
||||
|
||||
| Transaction details unavailable due to blockchain pruning
|
||||
|
||||
|
|
|
|||
|
|
@ -51,7 +51,7 @@ block content
|
|||
td #{item.keyType}
|
||||
if (item.key == extendedPubkey)
|
||||
span(title="The current extended public key", data-bs-toggle="tooltip")
|
||||
i.fas.fa-arrow-left.text-warning.ms-2
|
||||
i.bi-arrow-left.text-warning.ms-2
|
||||
|
||||
td
|
||||
a(href=`./xyzpub/${item.key}`, class=((item.key == extendedPubkey) ? "text-info" : false)) #{utils.ellipsizeMiddle(item.key, 16)}
|
||||
|
|
|
|||
|
|
@ -53,7 +53,7 @@ block content
|
|||
|
||||
if (domain)
|
||||
a(href=item.referenceUrl, rel="nofollow") #{domain}
|
||||
i.fas.fa-external-link-alt
|
||||
i.bi-box-arrow-up-right
|
||||
else
|
||||
a(href=item.referenceUrl, rel="nofollow") Reference
|
||||
else
|
||||
|
|
|
|||
|
|
@ -48,7 +48,7 @@
|
|||
tr
|
||||
td.text-center(colspan="100%")
|
||||
h6.my-3
|
||||
i.fas.fa-backspace.text-danger.me-2
|
||||
i.bi-backspace.text-danger.me-2
|
||||
| Blocks older than this point have been
|
||||
i pruned
|
||||
| , meaning that some or all data that is non-essential for blockchain verification has been deleted.
|
||||
|
|
@ -64,7 +64,7 @@
|
|||
|
||||
if (block.height % 2016 == 0)
|
||||
span.me-1(title=`This is the first block of difficulty era #${(block.height / 2016).toLocaleString()}`, data-bs-toggle="tooltip")
|
||||
i.fas.fa-info-circle
|
||||
i.bi-info-circle
|
||||
|
||||
a(href=`./block-height/${block.height}`) #{block.height.toLocaleString()}
|
||||
|
||||
|
|
@ -142,7 +142,7 @@
|
|||
|
||||
else if (block.height < global.pruneHeight)
|
||||
span(title="This data is unavailable due to blockchain pruning", data-bs-toggle="tooltip")
|
||||
i.fas.fa-backspace.text-danger
|
||||
i.bi-backspace.text-danger
|
||||
|
||||
else
|
||||
span.badge.bg-secondary Unknown
|
||||
|
|
@ -185,7 +185,7 @@
|
|||
|
||||
else
|
||||
span(title="This data is unavailable due to blockchain pruning", data-bs-toggle="tooltip")
|
||||
i.fas.fa-backspace.text-danger
|
||||
i.bi-backspace.text-danger
|
||||
|
||||
// idea: show typical tx fee, maybe also optimized fee if not segwit
|
||||
if (false)
|
||||
|
|
@ -205,7 +205,7 @@
|
|||
|
||||
else
|
||||
span(title="This data is unavailable due to blockchain pruning", data-bs-toggle="tooltip")
|
||||
i.fas.fa-backspace.text-danger
|
||||
i.bi-backspace.text-danger
|
||||
|
||||
|
||||
|
||||
|
|
@ -238,13 +238,13 @@
|
|||
|
||||
- var bSizeK = parseInt(block.size / 1000);
|
||||
span.ms-1(data-bs-toggle="tooltip", title=`Size: ${bSizeK.toLocaleString()} kB`)
|
||||
i.fas.fa-ellipsis-h.text-muted
|
||||
i.bi-three-dots.text-muted
|
||||
|
||||
div.progress(style="height: 4px;")
|
||||
div.progress-bar(role="progressbar", style=`width: ${fullPercent}%;`, aria-valuenow=parseInt(100 * block.weight / coinConfig.maxBlockWeight), aria-valuemin="0" ,aria-valuemax="100")
|
||||
else
|
||||
span(title="This data is unavailable due to blockchain pruning", data-bs-toggle="tooltip")
|
||||
i.fas.fa-backspace.text-danger
|
||||
i.bi-backspace.text-danger
|
||||
|
||||
else if (block.size)
|
||||
td.text-end
|
||||
|
|
@ -260,6 +260,6 @@
|
|||
else
|
||||
td.text-end
|
||||
span(title="This data is unavailable due to blockchain pruning", data-bs-toggle="tooltip")
|
||||
i.fas.fa-backspace.text-danger
|
||||
i.bi-backspace.text-danger
|
||||
|
||||
- var lastBlock = block;
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
span
|
||||
span(data-bs-toggle="tooltip", title="This data is at least partially generated from the Electrum servers currently configured: ")
|
||||
i.fas.fa-exclamation-triangle.text-warning
|
||||
i.bi-exclamation-triangle.text-warning
|
||||
|
|
@ -72,11 +72,12 @@ if (exchangeRates)
|
|||
.float-end
|
||||
if (userSettings.homepageShowTechDetails == "true")
|
||||
a.me-2(href="./changeSetting?name=homepageShowTechDetails&value=false", title="Hide technical network details", data-bs-toggle="tooltip", data-bs-placement="bottom")
|
||||
i.fas.fa-server.text-muted
|
||||
i.bi-hdd-stack.text-muted
|
||||
|
||||
else
|
||||
a.me-2(href="./changeSetting?name=homepageShowTechDetails&value=true", title="Show technical network details", data-bs-toggle="tooltip", data-bs-placement="bottom")
|
||||
i.fas.fa-server.text-muted
|
||||
i.bi-hdd-stack.text-muted
|
||||
|
||||
|
||||
+contentSection
|
||||
+summaryRow(2 + (hashrate7d ? 1 : 0) + (chainTxStats && chainTxStats[7 * targetBlocksPerDay] ? 1 : 0) + (difficultyAdjustmentData ? 1 : 0))
|
||||
|
|
@ -141,7 +142,7 @@ if (exchangeRates)
|
|||
|
||||
else
|
||||
small.border-dotted.text-muted(title="Estimate pending...<br/>A new difficulty epoch just started. Difficulty adjustment estimates made with too little data can be very unreliable, so are not calculated.", data-bs-toggle="tooltip", data-bs-html="true")
|
||||
i.fas.fa-hourglass-half
|
||||
i.bi-hourglass-split
|
||||
|
||||
+summaryItem("Coins", utxoSetSummary ? null : (config.slowDeviceMode ? `Because this app is configured to conserve resources (SLOW_DEVICE_MODE=true), this value is estimated, using a checkpoint.` : `This value is estimated, using a checkpoint.`))
|
||||
- var maxSupply = coinConfig.maxSupplyByNetwork[activeBlockchain];
|
||||
|
|
@ -214,10 +215,10 @@ if (exchangeRates)
|
|||
+summaryItem("Next Block (est.)")
|
||||
| #{new Decimal(nextBlockMinFeeRate).toDP(0)}
|
||||
a(href=`./tx/${nextBlockMinFeeTxid}`)
|
||||
i.fas.fa-circle
|
||||
i.bi-circle
|
||||
| - #{new Decimal(nextBlockMaxFeeRate).toDP(0)}
|
||||
a(href=`./tx/${nextBlockMaxFeeTxid}`)
|
||||
i.fas.fa-circle
|
||||
i.bi-circle
|
||||
small.ms-2.text-muted sat/vB
|
||||
|
||||
if (smartFeeEstimateStrings.length > 0)
|
||||
|
|
|
|||
|
|
@ -2,12 +2,21 @@ mixin themeCss
|
|||
link(id="light-theme-link-tag", rel=(userSettings.uiTheme != "dark" ? "stylesheet" : false), href=assetUrl(`./style/light.css`), integrity=assetIntegrity("light.css"), crossorigin="anonymous")
|
||||
link(id="dark-theme-link-tag", rel=(userSettings.uiTheme == "dark" ? "stylesheet" : false), href=assetUrl(`./style/dark.css`), integrity=assetIntegrity("dark.css"), crossorigin="anonymous")
|
||||
|
||||
style.
|
||||
@font-face {
|
||||
font-family: "bootstrap-icons";
|
||||
|
||||
src: url("!{assetUrl("./font/bootstrap-icons.woff2")}") format("woff2"),
|
||||
url("!{assetUrl("./font/bootstrap-icons.woff")}") format("woff");
|
||||
}
|
||||
|
||||
link(rel="stylesheet", href=assetUrl(`./style/bootstrap-icons.css`), integrity=assetIntegrity("bootstrap-icons.css"), crossorigin="anonymous")
|
||||
|
||||
|
||||
mixin sharedScriptTags
|
||||
script(src=assetUrl(`./js/jquery.min.js`), integrity=assetIntegrity("jquery.min.js"), crossorigin="anonymous")
|
||||
script(src=assetUrl(`./js/bootstrap.bundle.min.js`), integrity=assetIntegrity("bootstrap.bundle.min.js"), crossorigin="anonymous")
|
||||
script(defer, src=assetUrl(`./js/fontawesome.min.js`), integrity=assetIntegrity("fontawesome.min.js"), crossorigin="anonymous")
|
||||
|
||||
|
||||
script(src=assetUrl(`./js/site.js`), integrity=assetIntegrity("site.js"), crossorigin="anonymous")
|
||||
|
||||
|
||||
|
|
@ -49,7 +58,7 @@ mixin sectionTitle(text, toggle=false, toggleUniqueClass, toggleUserSettingName,
|
|||
if (toggle)
|
||||
small(title=`Toggle ${text}`, data-bs-toggle="tooltip")
|
||||
a.text-card-highlight.fs-6(href=`./changeSetting?name=${toggleUserSettingName}&value=false`)
|
||||
i.toggle-plus-minus.far.ms-2(class=(toggleOpen ? "fa-minus-square" : "fa-plus-square"))
|
||||
i.toggle-plus-minus.ms-2(class=(toggleOpen ? "bi-dash-square" : "bi-plus-square"))
|
||||
|
||||
|
||||
mixin contentSection(title, toggleable=false, toggleUserSettingName, defaultOpen=true, cardUi=true)
|
||||
|
|
@ -177,8 +186,8 @@ mixin txList(visibleTxs, txCount, limit, offset, inputsByTxid, options={})
|
|||
if (hasInputAddresses)
|
||||
.float-end
|
||||
.d-block.d-sm-none
|
||||
a(href="javascript:void(0)", onclick=`$(this).find(".toggle-icon").toggleClass("fa-plus-square").toggleClass("fa-minus-square"); $(".tx-input-address-${tx.txid}").toggle();`)
|
||||
i.toggle-icon.far.fa-plus-square.text-card-highlight.text-end.fa-lg
|
||||
a(href="javascript:void(0)", onclick=`$(this).find(".toggle-icon").toggleClass("bi-plus-square").toggleClass("bi-dash-square"); $(".tx-input-address-${tx.txid}").toggle();`)
|
||||
i.toggle-icon.bi-plus-square.text-card-highlight.text-end
|
||||
|
||||
|
||||
.float-start.float-sm-end.mt-n2.mt-sm-0.mb-2.mb-sm-0
|
||||
|
|
@ -210,7 +219,7 @@ mixin txList(visibleTxs, txCount, limit, offset, inputsByTxid, options={})
|
|||
+darkBadge
|
||||
if (txBlockHeight)
|
||||
span(title=`${(options.currentBlockHeight - txBlockHeight + 1).toLocaleString()} confirmation${(options.currentBlockHeight - txBlockHeight > 1) ? "s" :""}`, data-bs-toggle="tooltip")
|
||||
i.fas.fa-lock.fa-sm.me-1
|
||||
i.bi-lock.me-1
|
||||
- var confCount = options.currentBlockHeight - txBlockHeight + 1;
|
||||
- var confData = utils.formatLargeNumber(confCount);
|
||||
|
||||
|
|
@ -222,7 +231,7 @@ mixin txList(visibleTxs, txCount, limit, offset, inputsByTxid, options={})
|
|||
|
||||
else
|
||||
span(title=`Unconfirmed`, data-bs-toggle="tooltip")
|
||||
i.fas.fa-unlock.fa-sm.text-danger.me-1
|
||||
i.bi-unlock.text-danger.me-1
|
||||
span.fw-light.text-danger 0
|
||||
|
||||
if (options.showDates && tx.time)
|
||||
|
|
@ -231,7 +240,7 @@ mixin txList(visibleTxs, txCount, limit, offset, inputsByTxid, options={})
|
|||
|
||||
.d-none.d-md-inline
|
||||
+darkBadge
|
||||
i.far.fa-clock.fa-sm.me-1
|
||||
i.bi-clock.me-1
|
||||
|
||||
span.fw-light(title=titleStr, data-bs-toggle="tooltip")
|
||||
+timeAgo(tx.time, true)
|
||||
|
|
@ -417,11 +426,11 @@ mixin valueDisplaySpecial(val, maxDecimals=-1, summarizeAlways=false, summarizeM
|
|||
mixin confirmations(confirmations, abbreviated=true)
|
||||
if (confirmations < 6)
|
||||
span.text-warning.border-dotted(title="Fewer than 6 confirmations is generally considered <b>unsettled</b> for high-value transactions because block <b>re-organizations</b> that could affect them have reasonable probability.", data-bs-toggle="tooltip", data-bs-html="true") #{confirmations.toLocaleString()}
|
||||
i.fas.fa-unlock-alt.fa-sm.ms-1
|
||||
i.bi-unlock.ms-1
|
||||
else
|
||||
span.border-dotted.text-success(title="6 confirmations is generally considered <b>settled</b>. High-value transactions may require more;<br/>Low-value transactions may require fewer.", data-bs-toggle="tooltip", data-bs-html="true")
|
||||
| #{abbreviated && confirmations > 1000 ? `${Math.floor(confirmations/1000)}k` : confirmations.toLocaleString()}
|
||||
i.fas.fa-check.ms-1
|
||||
i.bi-check2.ms-1
|
||||
|
||||
|
||||
|
||||
|
|
@ -463,8 +472,8 @@ mixin hexDataDisplay(hex, order="utf8,ascii,hex")
|
|||
|
||||
|
||||
div
|
||||
a.text-muted.ms-2(href="javascript:void(0)", onclick=`$('#hex-display-expanded-${uniqueId}').toggle(); $(this).find(".toggle-plus-minus").toggleClass("fa-plus-square"); $(this).find(".toggle-plus-minus").toggleClass("fa-minus-square"); return false;`, title="Toggle More Encodings")
|
||||
i.toggle-plus-minus.far.fa-plus-square.text-card-highlight
|
||||
a.text-muted.ms-2(href="javascript:void(0)", onclick=`$('#hex-display-expanded-${uniqueId}').toggle(); $(this).find(".toggle-plus-minus").toggleClass("bi-plus-square"); $(this).find(".toggle-plus-minus").toggleClass("bi-dash-square"); return false;`, title="Toggle More Encodings")
|
||||
i.toggle-plus-minus.bi-plus-square.text-card-highlight
|
||||
|
||||
|
||||
|
||||
|
|
@ -567,7 +576,7 @@ mixin primaryBadge(text, endMargin=true)
|
|||
|
||||
mixin funAlert(html, text, referenceUrl)
|
||||
.alert.alert-primary.shadow-sm.pb-0(role="alert", style="padding-left: 4rem;")
|
||||
i.fas.fa-flag.fa-2x.fontawesome-shadow.text-warning.d-inline-block(style="position: absolute; top: 0; left: 0; width: 40px; margin-left: 0.8rem; margin-top: 1.2rem;")
|
||||
i.bi-flag.fs-4.text-warning.d-inline-block(style="position: absolute; top: 0; left: 0; width: 40px; margin-left: 1.2rem; margin-top: 1.2rem;")
|
||||
|
||||
h5.mb-2.fw-light #{coinConfig.name} Fun
|
||||
|
||||
|
|
@ -593,7 +602,7 @@ mixin funAlert(html, text, referenceUrl)
|
|||
|
||||
|
||||
mixin funItemIcon
|
||||
i.fas.fa-flag.text-warning
|
||||
i.bi-flag.text-warning
|
||||
|
||||
|
||||
mixin timeAgo(timeAgoTime, only1Element=false)
|
||||
|
|
@ -669,8 +678,8 @@ mixin blockCountdown(title, blocksLeft)
|
|||
|
||||
if (block)
|
||||
a.text-body(href="javascript:void(0);", onclick=`$("#countdown-block-${countdownId}").toggle(); $(".countdown-togglers-${countdownId}").toggle();`)
|
||||
i.far.fa-plus-square(class=`countdown-togglers-${countdownId}`)
|
||||
i.far.fa-minus-square(class=`countdown-togglers-${countdownId}`, style="display: none;")
|
||||
i.bi-plus-square(class=`countdown-togglers-${countdownId}`)
|
||||
i.bi-dash-square(class=`countdown-togglers-${countdownId}`, style="display: none;")
|
||||
|
||||
if (block)
|
||||
div(id=`countdown-block-${countdownId}`, style="display: none;")
|
||||
|
|
@ -684,11 +693,11 @@ mixin copyTextButton(text)
|
|||
small.ms-2
|
||||
if (false)
|
||||
a(href="javascript:void(0)", title="Copy", data-clipboard-text=text, data-bs-toggle="tooltip", onclick=`copyTextToClipboard("${text}"); $(".icon-copy").toggle(); $(this).find(".icon-copied").toggle(); setTimeout(() => { $(this).find(".icon-copy").toggle(); $(this).find(".icon-copied").toggle(); }, 2000); return false;`)
|
||||
i.far.fa-copy.text-info.icon-copy
|
||||
i.fas.fa-check.text-success.icon-copied(style="display: none;")
|
||||
i.bi-clipboard2.text-info.icon-copy
|
||||
i.bi-clipboard2-check.text-success.icon-copied(style="display: none;")
|
||||
|
||||
a(href="javascript:void(0)", title="Copy", data-clipboard-text=text, data-bs-toggle="tooltip", onclick=`copyTextToClipboard("${text}"); $(this).attr("title", "Copied!").tooltip("_fixTitle").tooltip("show"); $(this).mouseleave(function() { $(this).tooltip("hide"); $(this).attr("data-bs-original-title", "Copy"); });`)
|
||||
i.far.fa-copy.text-info
|
||||
i.bi-clipboard2.text-info
|
||||
|
||||
|
||||
mixin dismissableInfoAlert(userSettingDismissedName, textToShowWhenClosed)
|
||||
|
|
@ -696,7 +705,7 @@ mixin dismissableInfoAlert(userSettingDismissedName, textToShowWhenClosed)
|
|||
if (!hiddenByEnvVar && (!userSettings.hideInfoNotes || userSettings.hideInfoNotes == "false"))
|
||||
if (userSettings[userSettingDismissedName] != "true")
|
||||
.alert.alert-primary.alert-dismissible.shadow-sm.mb-4.ps-3.ps-md-7(role="alert")
|
||||
i.d-none.d-md-inline.fas.fa-info-circle.fa-lg.d-inline-block(style="position: absolute; top: 0; left: 0; width: 36px; margin-left: 0.4rem; margin-top: 1.3rem;")
|
||||
i.d-none.d-md-inline.bi-info-circle.fs-5.d-inline-block(style="position: absolute; top: 0; left: 0; width: 36px; margin-left: 0.75rem; margin-top: 1.0rem;")
|
||||
|
||||
block
|
||||
|
||||
|
|
@ -707,12 +716,12 @@ mixin dismissableInfoAlert(userSettingDismissedName, textToShowWhenClosed)
|
|||
.alert.alert-primary.shadow-sm.mb-4(role="alert")
|
||||
.clearfix
|
||||
.float-start
|
||||
i.fas.fa-info-circle.fa-lg.me-3
|
||||
i.bi-info-circle.me-3
|
||||
| #{textToShowWhenClosed}
|
||||
|
||||
.float-end
|
||||
a.text-muted(href=`./changeSetting?name=${userSettingDismissedName}&value=false`, aria-label="Close", style="text-decoration: none;", title="Open this note", data-bs-toggle="tooltip")
|
||||
i.far.fa-plus-square.fa-lg
|
||||
i.bi-plus-square
|
||||
|
||||
|
||||
mixin dismissableAlert(userSettingDismissedName, textToShowWhenClosed)
|
||||
|
|
@ -728,17 +737,17 @@ mixin dismissableAlert(userSettingDismissedName, textToShowWhenClosed)
|
|||
.alert.alert-primary.shadow-sm.mb-4(role="alert")
|
||||
.clearfix
|
||||
.float-start
|
||||
i.fas.fa-info-circle.fa-lg.me-3
|
||||
i.bi-info-circle.me-3
|
||||
| #{textToShowWhenClosed}
|
||||
|
||||
.float-end
|
||||
a.text-muted(href=`./changeSetting?name=${userSettingDismissedName}&value=false`, aria-label="Close", style="text-decoration: none;", title="Open this note", data-bs-toggle="tooltip")
|
||||
i.far.fa-plus-square.fa-lg
|
||||
i.bi-plus-square
|
||||
|
||||
|
||||
mixin warningAlert
|
||||
.alert.alert-warning.shadow-sm.mb-4.ps-3.ps-md-7(role="alert")
|
||||
i.d-none.d-md-inline.fas.fa-exclamation-triangle.fa-lg.d-inline-block(style="position: absolute; top: 0; left: 0; width: 36px; margin-left: 0.4rem; margin-top: 1.3rem;")
|
||||
i.d-none.d-md-inline.bi-exclamation-triangle.fs-5.d-inline-block(style="position: absolute; top: 0; left: 0; width: 36px; margin-left: 0.7rem; margin-top: 1.0rem;")
|
||||
|
||||
block
|
||||
|
||||
|
|
@ -881,7 +890,7 @@ mixin quote(quote, quoteIndex=-1)
|
|||
if (quote.url)
|
||||
small.text-muted.ms-2 (
|
||||
a(href=quote.url, target="_blank") ref
|
||||
i.fas.fa-external-link-alt.fa-sm.ms-1
|
||||
i.bi-box-arrow-up-right.ms-2
|
||||
| )
|
||||
|
||||
if (quote.context)
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
- var siteTool = config.siteTools[toolsItemIndex];
|
||||
li.mb-2
|
||||
span(title=siteTool.desc, data-bs-toggle="tooltip")
|
||||
i.me-1.fa-sm(class=siteTool.fontawesome, style="width: 24px;")
|
||||
i.me-1(class=siteTool.iconClass, style="width: 24px;")
|
||||
a(href=siteTool.url)
|
||||
span #{siteTool.name}
|
||||
|
|
@ -13,7 +13,7 @@ if (false)
|
|||
li
|
||||
div.float-start(style="height: 50px; width: 40px; margin-right: 10px;")
|
||||
span
|
||||
i.fa-2x.me-2(class=siteTool.fontawesome, style="margin-top: 6px;")
|
||||
i.me-2(class=siteTool.iconClass, style="margin-top: 6px;")
|
||||
|
||||
a(href=siteTool.url) #{siteTool.name}
|
||||
br
|
||||
|
|
@ -28,7 +28,7 @@ if (false)
|
|||
- var siteTool = config.siteTools[listItem];
|
||||
li.mb-2
|
||||
span(title=siteTool.desc, data-bs-toggle="tooltip")
|
||||
i.me-2.fa-lg(class=siteTool.fontawesome, style="width: 30px;")
|
||||
i.me-2(class=siteTool.iconClass, style="width: 30px;")
|
||||
a(href=siteTool.url)
|
||||
span #{siteTool.name}
|
||||
|
||||
|
|
@ -41,7 +41,7 @@ if (false)
|
|||
- var siteTool = config.siteTools[listItem];
|
||||
li.mb-2
|
||||
span(title=siteTool.desc, data-bs-toggle="tooltip")
|
||||
i.me-2.fa-sm(class=siteTool.fontawesome, style="width: 30px;")
|
||||
i.me-2(class=siteTool.iconClass, style="width: 30px;")
|
||||
a(href=siteTool.url)
|
||||
span #{siteTool.name}
|
||||
|
||||
|
|
@ -63,7 +63,7 @@ if (false)
|
|||
|
||||
div.clearfix
|
||||
div.float-start.pt-1(style="width: 38px;")
|
||||
i.fa-lg(class=item.fontawesome, style="width: 20px; margin-right: 10px;")
|
||||
i(class=item.iconClass, style="width: 20px; margin-right: 10px;")
|
||||
|
||||
div.float-start
|
||||
div
|
||||
|
|
@ -83,7 +83,7 @@ if (false)
|
|||
|
||||
div.clearfix
|
||||
div.float-start.pt-1(style="width: 38px;")
|
||||
i.fa-lg(class=item.fontawesome, style="width: 20px; margin-right: 10px;")
|
||||
i(class=item.iconClass, style="width: 20px; margin-right: 10px;")
|
||||
|
||||
div.float-start
|
||||
div
|
||||
|
|
@ -103,7 +103,7 @@ if (false)
|
|||
|
||||
div.clearfix
|
||||
div.float-start.pt-1(style="width: 38px;")
|
||||
i.fa-lg(class=item.fontawesome, style="width: 20px; margin-right: 10px;")
|
||||
i(class=item.iconClass, style="width: 20px; margin-right: 10px;")
|
||||
|
||||
div.float-start
|
||||
div
|
||||
|
|
@ -133,7 +133,7 @@ mixin toolSections(sectionsData)
|
|||
|
||||
.clearfix
|
||||
div.float-start.pt-1(style="width: 38px;")
|
||||
i.fa-lg(class=item.fontawesome, style="width: 20px; margin-right: 10px;")
|
||||
i(class=item.iconClass, style="width: 20px; margin-right: 10px;")
|
||||
|
||||
.float-start
|
||||
div
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@
|
|||
mixin inputValueDisplay(tx, txVin, vout)
|
||||
if (txVin.coinbase)
|
||||
span.border-dotted.me-1(title="This is the <b>block subsidy</b> - newly created coins awarded (automatically, by the network protocol) to the miner that found this block.", data-bs-toggle="tooltip", data-bs-html="true")
|
||||
i.fas.fa-asterisk.text-success
|
||||
i.bi-asterisk.text-success
|
||||
|
||||
span(class=(tx.vin.length == 1 ? "fw-bold" : false))
|
||||
- var currencyValue = coinConfig.blockRewardFunction(blockHeight, activeBlockchain);
|
||||
|
|
@ -18,13 +18,13 @@ mixin inputValueDisplay(tx, txVin, vout)
|
|||
|
||||
else if (!global.txindexAvailable)
|
||||
span(title="This data is unavailable. Your node must have its transaction index (txindex) setting enabled to view it.", data-bs-toggle="tooltip")
|
||||
i.fas.fa-backspace.text-danger
|
||||
i.bi-backspace.text-danger
|
||||
|
||||
|
||||
mixin outputValueDisplay(tx, vout, voutIndex)
|
||||
if (vout.value > 0 && vout.scriptPubKey.asm.startsWith('OP_RETURN '))
|
||||
span(title="Burned output - as an OP_RETURN output, this value is provably unspendable." data-bs-toggle="tooltip")
|
||||
i.fas.fa-fire.text-danger.me-2
|
||||
i.bi-trash3.text-danger.me-2
|
||||
|
||||
if (vout.value > 0)
|
||||
span(class=(nonZeroVoutValueCount == 1 ? "fw-bold" : "fw-light"))
|
||||
|
|
@ -34,16 +34,16 @@ mixin outputValueDisplay(tx, vout, voutIndex)
|
|||
if (utxos)
|
||||
if (utxos[voutIndex])
|
||||
span(title="This output remains unspent (a valid UTXO)." data-bs-toggle="tooltip")
|
||||
i.far.fa-check-circle.fa-sm.text-success.ms-2
|
||||
i.bi-check-circle.text-success.ms-2
|
||||
|
||||
else if (utxos[voutIndex] == null)
|
||||
if (tx.txid == "4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b")
|
||||
span(title="This output is UNSPENDABLE, and therefore these coins do not exist!" data-bs-toggle="tooltip")
|
||||
i.fas.fa-flag.fa-sm.text-warning.ms-2
|
||||
i.bi-flag.text-warning.ms-2
|
||||
|
||||
else
|
||||
span(title="This output has been spent (destroyed)." data-bs-toggle="tooltip")
|
||||
i.far.fa-times-circle.fa-sm.text-danger.ms-2
|
||||
i.bi-x-circle.text-danger.ms-2
|
||||
|
||||
|
||||
.row
|
||||
|
|
@ -64,12 +64,12 @@ mixin outputValueDisplay(tx, vout, voutIndex)
|
|||
if (txVin.coinbase || vout || !global.txindexAvailable)
|
||||
.clearfix
|
||||
a.sz-xs-hidden.d-none.d-sm-inline.badge.fw-normal.card-highlight.border.text-decoration-none.me-2(data-bs-toggle="tooltip", title=`Input #${txVinIndex.toLocaleString()}`, style="white-space: nowrap;")
|
||||
i.d-inline.fas.fa-arrow-right.text-danger
|
||||
i.d-inline.bi-arrow-right.text-danger
|
||||
|
||||
span.d-none.d-sm-inline.font-monospace.ms-1 #{txVinIndex.toLocaleString()}
|
||||
|
||||
a.sz-xs-only.d-inline.d-sm-none.text-decoration-none.me-1(data-bs-toggle="tooltip", title=`Input #${txVinIndex.toLocaleString()}`, style="white-space: nowrap;")
|
||||
i.d-inline.fas.fa-arrow-right.fa-sm.text-danger
|
||||
i.d-inline.bi-arrow-right.text-danger
|
||||
|
||||
|
||||
if (vout && vout.scriptPubKey && vout.scriptPubKey.type)
|
||||
|
|
@ -125,7 +125,7 @@ mixin outputValueDisplay(tx, vout, voutIndex)
|
|||
|
||||
if (txIOHighlightAddress == voutAddresses[0])
|
||||
span(title="Current address", data-bs-toggle="tooltip")
|
||||
i.fas.fa-arrow-left.text-warning.ms-1.text-info
|
||||
i.bi-arrow-left.text-warning.ms-1.text-info
|
||||
|
||||
if (global.specialAddresses[voutAddresses[0]])
|
||||
- var specialAddressInfo = global.specialAddresses[voutAddresses[0]];
|
||||
|
|
@ -140,7 +140,7 @@ mixin outputValueDisplay(tx, vout, voutIndex)
|
|||
|
||||
if (txIOHighlightAddress == voutAddresses[0])
|
||||
span(title="Current address", data-bs-toggle="tooltip")
|
||||
i.fas.fa-arrow-left.text-warning.ms-1.text-info
|
||||
i.bi-arrow-left.text-warning.ms-1.text-info
|
||||
|
||||
if (tx.vin.length > 1 || txVinIndex > 0)
|
||||
hr.mb-1
|
||||
|
|
@ -163,11 +163,11 @@ mixin outputValueDisplay(tx, vout, voutIndex)
|
|||
if (extraInputCount > 0)
|
||||
.clearfix.mb-sm-2
|
||||
a.sz-md-plus.d-none.d-sm-inline.badge.fw-normal.card-highlight.border.text-decoration-none(data-bs-toggle="tooltip", title=`Input #${(tx.vin.length - extraInputCount + 1).toLocaleString()} - ${tx.vin.length.toLocaleString()}`, style="white-space: nowrap;")
|
||||
i.fas.fa-arrow-right.text-danger.me-sm-2
|
||||
i.bi-arrow-right.text-danger.me-sm-2
|
||||
span.d-none.d-sm-inline …
|
||||
|
||||
a.sz-xs-only.d-inline.d-sm-none.text-decoration-none.me-1(data-bs-toggle="tooltip", title=`Input #${(tx.vin.length - extraInputCount + 1).toLocaleString()} - ${tx.vin.length.toLocaleString()}`, style="white-space: nowrap;")
|
||||
i.d-inline.fas.fa-arrow-right.fa-sm.text-danger
|
||||
i.d-inline.bi-arrow-right.text-danger
|
||||
|
||||
small.text-muted.border-dotted.ms-0.ms-sm-2(data-bs-toggle="tooltip", title="The details for the remaining inputs were truncated for performance purposes. Click through to the transaction details to see all inputs.") (#{extraInputCount.toLocaleString()} truncated)
|
||||
|
||||
|
|
@ -183,12 +183,12 @@ mixin outputValueDisplay(tx, vout, voutIndex)
|
|||
.col
|
||||
.text-end.mt-1.mt-sm-n1
|
||||
if (totalIOValues.input > 0 && extraInputCount == 0)
|
||||
i.d-inline.d-lg-none.fas.fa-arrow-right.text-danger.me-2
|
||||
i.d-inline.d-lg-none.bi-arrow-right.text-danger.me-2
|
||||
span.fw-bold
|
||||
+valueDisplay(totalIOValues.input)
|
||||
|
||||
else if (extraInputCount > 0)
|
||||
i.d-inline.d-lg-none.fas.fa-arrow-right.text-danger.me-2
|
||||
i.d-inline.d-lg-none.bi-arrow-right.text-danger.me-2
|
||||
span.border-dotted.me-1(title="The total input amount for this transaction is approximately equal to this value, plus the mining fee paid.", data-bs-toggle="tooltip") ~+
|
||||
span.fw-bold
|
||||
+valueDisplay(totalIOValues.output)
|
||||
|
|
@ -233,12 +233,12 @@ mixin outputValueDisplay(tx, vout, voutIndex)
|
|||
div(data-txid=tx.txid, class=(hiddenRow ? "d-none" : ""))
|
||||
.clearfix.mb-0.mb-sm-2.mb-md-3
|
||||
a.xs-hidden.d-none.d-sm-inline.badge.card-highlight.border.text-decoration-none.fw-normal.me-2(data-bs-toggle="tooltip", title=`Output #${voutIndex.toLocaleString()}`, style="white-space: nowrap;")
|
||||
i.d-inline.fas.fa-arrow-right.text-success
|
||||
i.d-inline.bi-arrow-right.text-success
|
||||
|
||||
span.d-none.d-sm-inline.font-monospace.ms-1 #{voutIndex.toLocaleString()}
|
||||
|
||||
a.xs-only.d-inline.d-sm-none.text-decoration-none.fw-normal.me-1(data-bs-toggle="tooltip", title=`Output #${voutIndex.toLocaleString()}`, style="white-space: nowrap;")
|
||||
i.d-inline.fas.fa-arrow-right.fa-sm.text-success
|
||||
i.d-inline.bi-arrow-right.text-success
|
||||
|
||||
if (vout && vout.scriptPubKey)
|
||||
if (vout.scriptPubKey.hex && vout.scriptPubKey.hex.startsWith('6a24aa21a9ed'))
|
||||
|
|
@ -248,7 +248,7 @@ mixin outputValueDisplay(tx, vout, voutIndex)
|
|||
a(href="https://github.com/bitcoin/bips/blob/master/bip-0141.mediawiki#commitment-structure", data-bs-toggle="tooltip", title="Read about the SegWit Commitment", target="_blank")
|
||||
+darkBadge
|
||||
span.small SegWit
|
||||
i.fas.fa-external-link-alt.fa-sm.ms-1
|
||||
i.bi-box-arrow-up-right.ms-1
|
||||
|
||||
.my-2
|
||||
+hexDataDisplay(vout.scriptPubKey.asm.substring("OP_RETURN ".length))
|
||||
|
|
@ -308,7 +308,7 @@ mixin outputValueDisplay(tx, vout, voutIndex)
|
|||
|
||||
if (highlightRow)
|
||||
span(title="Current address", data-bs-toggle="tooltip")
|
||||
i.fas.fa-arrow-left.ms-1.text-warning
|
||||
i.bi-arrow-left.ms-1.text-warning
|
||||
|
||||
if (global.specialAddresses[addr])
|
||||
- var specialAddressInfo = global.specialAddresses[addr];
|
||||
|
|
@ -341,7 +341,7 @@ mixin outputValueDisplay(tx, vout, voutIndex)
|
|||
|
||||
if (hiddenRowCount > 0)
|
||||
a.small(href="javascript:void(0)", onclick=("showAllTxOutputs(this, '" + tx.txid + "');"))
|
||||
i.far.fa-plus-square.text-card-highlight.me-1
|
||||
i.bi-plus-square.text-card-highlight.me-1
|
||||
| Show remaining #{hiddenRowCount.toLocaleString()} outputs
|
||||
|
||||
if (nonZeroVoutValueCount > 1)
|
||||
|
|
@ -349,7 +349,7 @@ mixin outputValueDisplay(tx, vout, voutIndex)
|
|||
.col
|
||||
.text-end.mt-1.mt-sm-n1(style=(utxos ? "margin-right: 1.39rem !important;" : false))
|
||||
span.fw-bold
|
||||
i.d-inline.d-lg-none.fas.fa-arrow-right.text-success.me-2
|
||||
i.d-inline.d-lg-none.bi-arrow-right.text-success.me-2
|
||||
+valueDisplay(totalIOValues.output)
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -28,18 +28,18 @@ block content
|
|||
|
||||
hr
|
||||
|
||||
.fa-lg.mt-2
|
||||
.mt-2
|
||||
if (global.sourcecodeProjectMetadata)
|
||||
a.btn.btn-sm.btn-primary.mb-2.mb-md-1.me-3(href="https://github.com/janoside/btc-rpc-explorer", title="View source code on Github", data-bs-toggle="tooltip", data-bs-placement="bottom")
|
||||
i.fab.fa-github.fa-lg.text-white.me-2
|
||||
a.btn.btn-sm.btn-primary.mb-2.mb-md-1.me-3(href="https://github.com/janoside/btc-rpc-explorer", title="View source code", data-bs-toggle="tooltip", data-bs-placement="bottom")
|
||||
i.bi-git.fs-6.text-white.me-2
|
||||
| View Source
|
||||
|
||||
a.btn.btn-sm.btn-primary.mb-2.mb-md-1.me-3(href="https://donate.bitcoinexplorer.org", target="_blank", title="Support this project with a donation", data-bs-toggle="tooltip", data-bs-placement="bottom")
|
||||
i.fas.fa-heart.fa-lg.text-danger.me-2
|
||||
i.bi-heart-fill.fs-6.text-danger.me-2
|
||||
| Donate
|
||||
|
||||
a.btn.btn-sm.btn-primary.mb-2.mb-md-1.me-3(href="https://twitter.com/BitcoinExplorer", target="_blank", title="Follow @BitcoinExplorer on Twitter", data-bs-toggle="tooltip", data-bs-placement="bottom")
|
||||
i.fab.fa-twitter.fa-lg.text-twitter.me-2
|
||||
i.bi-twitter.fs-6.text-twitter.me-2
|
||||
| @BitcoinExplorer
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -32,16 +32,16 @@ html(lang="en")
|
|||
meta(property="twitter:image:src" content=(metaImgUrl != undefined ? metaImgUrl : "https://bitcoinexplorer.org/img/preview.png"))
|
||||
meta(property="twitter:domain" content="bitcoinexplorer.org")
|
||||
|
||||
link(rel="apple-touch-icon", sizes="180x180", href=assetUrl("./img/logo/apple-touch-icon.png"))
|
||||
link(rel="icon", type="image/png", sizes="32x32", href=assetUrl("./img/logo/favicon-32x32.png"))
|
||||
link(rel="icon", type="image/png", sizes="16x16", href=assetUrl("./img/logo/favicon-16x16.png"))
|
||||
link(rel="manifest", href="./img/logo/site.webmanifest")
|
||||
link(rel="mask-icon", href="./img/logo/safari-pinned-tab.svg", color="#f7931a")
|
||||
link(rel="shortcut icon", href="./img/logo/favicon.ico")
|
||||
link(rel="apple-touch-icon", sizes="180x180", href=assetUrl("./img/network-mainnet/apple-touch-icon.png"))
|
||||
link(rel="icon", type="image/png", sizes="32x32", href=assetUrl("./img/network-mainnet/favicon-32x32.png"))
|
||||
link(rel="icon", type="image/png", sizes="16x16", href=assetUrl("./img/network-mainnet/favicon-16x16.png"))
|
||||
link(rel="manifest", href="./img/network-mainnet/site.webmanifest")
|
||||
link(rel="mask-icon", href="./img/network-mainnet/safari-pinned-tab.svg", color="#f7931a")
|
||||
link(rel="shortcut icon", href="./img/network-mainnet/favicon.ico")
|
||||
meta(name="apple-mobile-web-app-title", content="BTC Explorer")
|
||||
meta(name="application-name", content="BTC Explorer")
|
||||
meta(name="msapplication-TileColor", content="#022e70")
|
||||
meta(name="msapplication-config", content="./img/logo/browserconfig.xml")
|
||||
meta(name="msapplication-config", content="./img/network-mainnet/browserconfig.xml")
|
||||
meta(name="theme-color" content="#022e70")
|
||||
|
||||
include includes/debug-overrides.pug
|
||||
|
|
|
|||
|
|
@ -35,16 +35,16 @@ html(lang="en")
|
|||
if (!network.endsWith("net") && network != "regtest")
|
||||
- network = (network + "net"); // handles "main" -> "mainnet" and "test" -> "testnet"
|
||||
|
||||
link(rel="apple-touch-icon", sizes="180x180", href=assetUrl(`./img/logo/${network}/apple-touch-icon.png`))
|
||||
link(rel="icon", type="image/png", sizes="32x32", href=assetUrl(`./img/logo/${network}/favicon-32x32.png`))
|
||||
link(rel="icon", type="image/png", sizes="16x16", href=assetUrl(`./img/logo/${network}/favicon-16x16.png`))
|
||||
link(rel="manifest", href=`./img/logo/${network}/site.webmanifest`)
|
||||
link(rel="mask-icon", href=`./img/logo/${network}/safari-pinned-tab.svg`, color="#f7931a")
|
||||
link(rel="shortcut icon", href=assetUrl(`./img/logo/${network}/favicon.ico`))
|
||||
link(rel="apple-touch-icon", sizes="180x180", href=assetUrl(`./img/network-${network}/apple-touch-icon.png`))
|
||||
link(rel="icon", type="image/png", sizes="32x32", href=assetUrl(`./img/network-${network}/favicon-32x32.png`))
|
||||
link(rel="icon", type="image/png", sizes="16x16", href=assetUrl(`./img/network-${network}/favicon-16x16.png`))
|
||||
link(rel="manifest", href=`./img/network-${network}/site.webmanifest`)
|
||||
link(rel="mask-icon", href=`./img/network-${network}/safari-pinned-tab.svg`, color="#f7931a")
|
||||
link(rel="shortcut icon", href=assetUrl(`./img/network-${network}/favicon.ico`))
|
||||
meta(name="apple-mobile-web-app-title", content="BTC Explorer")
|
||||
meta(name="application-name", content="BTC Explorer")
|
||||
meta(name="msapplication-TileColor", content="#022e70")
|
||||
meta(name="msapplication-config", content=`./img/logo/${network}/browserconfig.xml`)
|
||||
meta(name="msapplication-config", content=`./img/network-${network}/browserconfig.xml`)
|
||||
meta(name="theme-color" content="#022e70")
|
||||
|
||||
include includes/debug-overrides.pug
|
||||
|
|
@ -60,7 +60,7 @@ html(lang="en")
|
|||
if (coinConfig.logoUrlsByNetwork && coinConfig.logoUrlsByNetwork[activeBlockchain])
|
||||
img.header-image(src=assetUrl(coinConfig.logoUrlsByNetwork[activeBlockchain]), alt="logo")
|
||||
else
|
||||
img.header-image(src=assetUrl("./img/logo/mainnet/logo.svg"), alt="logo")
|
||||
img.header-image(src=assetUrl("./img/network-mainnet/logo.svg"), alt="logo")
|
||||
|
||||
if (coinConfig.siteTitlesByNetwork && coinConfig.siteTitlesByNetwork[activeBlockchain])
|
||||
span.fw-light #{coinConfig.siteTitlesByNetwork[activeBlockchain]}
|
||||
|
|
@ -92,14 +92,11 @@ html(lang="en")
|
|||
|
||||
|
||||
|
||||
|
||||
ul.navbar-nav
|
||||
if (config.demoSite && homepage)
|
||||
li.nav-item.dropdown.me-0.me-md-2.mt-2.mt-md-0.text-center.text-md-start
|
||||
a.nav-link.dropdown-toggle.bg-header-footer-highlight.rounded(href="javascript:void(0)", role="button", data-bs-toggle="dropdown", aria-haspopup="true", aria-expanded="false")
|
||||
span.fa-layers.fa-fw.me-2.ms-1
|
||||
i.fas.fa-circle.fa-lg.text-white(data-fa-transform="shrink-2")
|
||||
i.fab.fa-bitcoin.fa-lg(style=`color: ${coinConfig.coinColorsByNetwork[activeBlockchain]}`)
|
||||
img.align-text-top.me-1(src=assetUrl(coinConfig.coinIconUrlsByNetwork[activeBlockchain]), style="width: 20px;")
|
||||
|
||||
div.dropdown-menu.dropdown-menu-end.shadow(aria-label="Demo Sites")
|
||||
span.dropdown-header Public Demo Sites
|
||||
|
|
@ -108,17 +105,14 @@ html(lang="en")
|
|||
|
||||
each demoSite in demoSites
|
||||
a.dropdown-item(href=coinConfig.demoSiteUrlsByNetwork[demoSite])
|
||||
span.fa-layers.fa-fw.ms-2
|
||||
i.fas.fa-circle.fa-lg.me-2.text-white(data-fa-transform="shrink-2")
|
||||
i.fab.fa-bitcoin.fa-lg.me-2(style=`color: ${coinConfig.coinColorsByNetwork[demoSite]}`)
|
||||
img.align-text-top.me-2(src=assetUrl(coinConfig.coinIconUrlsByNetwork[demoSite]), style="width: 20px;")
|
||||
|
||||
| #{coinConfig.siteTitlesByNetwork[demoSite].replace("Explorer", "").replace("Bitcoin", "Mainnet")}
|
||||
|
||||
if (config.siteTools)
|
||||
li.nav-item.dropdown.me-0.me-md-2.mt-2.mt-md-0.text-center.text-md-start
|
||||
a.nav-link.rounded.bg-header-footer-highlight.text-white.dropdown-toggle(href="javascript:void(0)", role="button", data-bs-toggle="dropdown", aria-haspopup="true", aria-expanded="false")
|
||||
i.fas.fa-tools.me-2.ms-1
|
||||
| Tools
|
||||
i.bi-tools.me-2.ms-1
|
||||
|
||||
div.dropdown-menu.dropdown-menu-end.shadow(aria-label="Tools Items")
|
||||
each section, sectionIndex in config.site.toolSections
|
||||
|
|
@ -131,12 +125,12 @@ html(lang="en")
|
|||
- var item = config.siteTools[itemIndex];
|
||||
|
||||
a.dropdown-item(href=item.url)
|
||||
i(class=item.fontawesome, style="width: 20px; margin-right: 10px;")
|
||||
i(class=item.iconClass, style="width: 20px; margin-right: 10px;")
|
||||
span #{item.name}
|
||||
|
||||
li.nav-item.dropdown.me-0.me-md-3.mt-2.mt-md-0.text-center.text-md-start
|
||||
a.nav-link.rounded.bg-header-footer-highlight.text-white.dropdown-toggle(href="javascript:void(0)", id="navbarDropdown", role="button", data-bs-toggle="dropdown", aria-haspopup="true", aria-expanded="false")
|
||||
i.fas.fa-cog.me-2.ms-1
|
||||
i.bi-gear.me-2.ms-1
|
||||
|
||||
.dropdown-menu.dropdown-menu-end.shadow(aria-labelledby="navbarDropdown")
|
||||
span.dropdown-header Display Currency
|
||||
|
|
@ -167,7 +161,7 @@ html(lang="en")
|
|||
span #{item}
|
||||
.float-end
|
||||
if (userSettings.localCurrency == item.toLowerCase())
|
||||
i.fas.fa-check
|
||||
i.bi-check2
|
||||
|
||||
hr.dropdown-divider.mt-2.mb-2
|
||||
span.dropdown-header Theme
|
||||
|
|
@ -178,9 +172,9 @@ html(lang="en")
|
|||
|
||||
.btn-group.ms-3
|
||||
a.btn.btn-sm.px-3(id="theme-toggler-light", href=`javascript:void(0);` onclick=`toggleTheme(); return false;`, class=(userSettings.uiTheme == "light" ? "btn-primary" : "btn-outline-primary"))
|
||||
i.fas.fa-sun.text-warning
|
||||
i.bi-sun-fill.text-warning
|
||||
a.btn.btn-sm.px-3(id="theme-toggler-dark",href=`javascript:void(0);` onclick=`toggleTheme(); return false;`, class=(userSettings.uiTheme == "light" ? "btn-outline-primary" : "btn-primary"))
|
||||
i.fas.fa-moon
|
||||
i.bi-moon
|
||||
|
||||
hr.dropdown-divider.mt-2.mb-2
|
||||
span.dropdown-header Dislay Timezone
|
||||
|
|
@ -195,7 +189,7 @@ html(lang="en")
|
|||
|
||||
p.px-3.pt-2.small.text-muted "Local" uses your browser's default offset:
|
||||
span#browser-tz-offset.badge.bg-light.text-dark.ms-1.border
|
||||
i.fas.fa-info-circle.ms-1(title="This value comes from your brower. If you wish to set a custom offset, you can do so below, in 'More settings...'", data-bs-toggle="tooltip")
|
||||
i.bi-info-circle.ms-1(title="This value comes from your brower. If you wish to set a custom offset, you can do so below, in 'More settings...'", data-bs-toggle="tooltip")
|
||||
|
||||
hr.dropdown-divider.mt-2.mb-2
|
||||
|
||||
|
|
@ -211,7 +205,7 @@ html(lang="en")
|
|||
input.form-control(type="text", name="query", placeholder="block height/hash, txid, address", value=(query))
|
||||
|
||||
button.btn.btn-primary(type="submit")
|
||||
i.fas.fa-search
|
||||
i.bi-search
|
||||
|
||||
form.form-inline.d-lg-none.w-100.mt-2.mt-md-0(method="post", action="./search")
|
||||
input(type="hidden", name="_csrf", value=csrfToken)
|
||||
|
|
@ -219,7 +213,7 @@ html(lang="en")
|
|||
input.form-control(type="text", name="query", placeholder="height/hash/txid...", value=(query))
|
||||
|
||||
button.btn.btn-primary(type="submit")
|
||||
i.fas.fa-search
|
||||
i.bi-search
|
||||
|
||||
|
||||
|
||||
|
|
@ -267,11 +261,11 @@ html(lang="en")
|
|||
if (global.sourcecodeProjectMetadata)
|
||||
div.mt-2
|
||||
a.btn.btn-primary.btn-sm.me-3.mb-1.text-decoration-none(href="https://github.com/janoside/btc-rpc-explorer")
|
||||
i.fas.fa-star.fontawesome-shadow.text-warning.me-2
|
||||
i.bi-star-fill.text-warning.me-2
|
||||
span.badge.bg-white.text-dark #{global.sourcecodeProjectMetadata.stargazers_count}
|
||||
|
||||
a.btn.btn-primary.btn-sm.me-3.mb-1.text-decoration-none(href="https://github.com/janoside/btc-rpc-explorer/fork")
|
||||
i.fas.fa-code-branch.fontawesome-shadow.me-2
|
||||
i.bi-bezier2.me-2
|
||||
span.badge.bg-white.text-dark #{global.sourcecodeProjectMetadata.forks_count}
|
||||
|
||||
.col-lg-3
|
||||
|
|
@ -322,14 +316,14 @@ html(lang="en")
|
|||
.ms-2
|
||||
span(style="font-size: 1.5rem;")
|
||||
if (global.sourcecodeProjectMetadata)
|
||||
a.text-white.mb-1.me-3(href="https://github.com/janoside/btc-rpc-explorer", title="View source code on Github", data-bs-toggle="tooltip")
|
||||
i.fab.fa-github
|
||||
a.text-white.mb-1.me-3(href="https://github.com/janoside/btc-rpc-explorer", title="View source code", data-bs-toggle="tooltip")
|
||||
i.bi-git
|
||||
|
||||
a.text-danger.mb-1.me-3(href="https://donate.bitcoinexplorer.org", target="_blank", title="Support this project with a donation", data-bs-toggle="tooltip")
|
||||
i.fas.fa-heart.text-danger
|
||||
i.bi-heart-fill.text-danger
|
||||
|
||||
a.text-white.mb-1(href="https://twitter.com/BitcoinExplorer", target="_blank", title="Follow @BitcoinExplorer on Twitter", data-bs-toggle="tooltip")
|
||||
i.fab.fa-twitter.text-twitter
|
||||
i.bi-twitter.text-twitter
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -68,7 +68,7 @@ block content
|
|||
input.form-control.form-control(id="mempoolquery", type="text", name="mempoolquery", placeholder="txid", value=(mempoolquery), title="<span class='text-warning'>Transaction not found</span>", data-bs-trigger="manual", data-bs-html="true", data-bs-placement="bottom")
|
||||
|
||||
button.btn.btn-primary(type="submit")
|
||||
i.fas.fa-search
|
||||
i.bi-search
|
||||
|
||||
.me-4.d-inline-block.mb-3
|
||||
h6.text-card-highlight.fw-light
|
||||
|
|
@ -80,7 +80,7 @@ block content
|
|||
input.form-control.form-control(id="customFeeRate", type="text", name="customFeeRate", placeholder="sat/vB", value=(customFeeRate))
|
||||
|
||||
button.btn.btn-primary(type="submit")
|
||||
i.fas.fa-search
|
||||
i.bi-search
|
||||
|
||||
hr.mt-1.mb-3
|
||||
|
||||
|
|
|
|||
|
|
@ -1,13 +1,13 @@
|
|||
extends layout
|
||||
|
||||
block headContent
|
||||
title Mining Template
|
||||
title Next Block
|
||||
|
||||
block content
|
||||
+pageTitle("Mining Template")
|
||||
+pageTitle("Next Block")
|
||||
|
||||
+dismissableInfoAlert("miningTemplatePageNoteDismissed", "About Mining Template...")
|
||||
.mb-2 The Mining Template tool displays the output from the <b>getblocktemplate</b> command which is often used by miners for building a candidate for the "next block". The transactions shown here were selected from your node's mempool and generally represent those with the highest (effective) fees.
|
||||
+dismissableInfoAlert("miningTemplatePageNoteDismissed", "About Next Block...")
|
||||
.mb-2 The Next Block tool displays the output from the <b>getblocktemplate</b> command which is often used by miners for building a candidate for the next block. The transactions shown here were selected from your node's mempool and generally represent those with the highest (effective) fees.
|
||||
div These details are just a best-guess based on the current mempool and will change with each refresh.
|
||||
|
||||
+pageTabs(["Details", "JSON"])
|
||||
|
|
@ -101,24 +101,24 @@ block content
|
|||
li
|
||||
span.me-2 txindex
|
||||
if (global.txindexAvailable)
|
||||
i.fas.fa-check.text-success
|
||||
i.bi-check2.text-success
|
||||
else
|
||||
span.border-dotted(title="Your node's lack of a 'transaction index' means this explorer will be unable to show all blockchain data. See the project README for more details.", data-bs-toggle="tooltip")
|
||||
i.fas.fa-times.text-danger
|
||||
i.bi-x.text-danger
|
||||
|
||||
li
|
||||
span.me-2 coinstatsindex
|
||||
if (getindexinfo && getindexinfo["coinstatsindex"])
|
||||
i.fas.fa-check.text-success
|
||||
i.bi-check2.text-success
|
||||
else
|
||||
i.fas.fa-times.text-danger
|
||||
i.bi-x.text-danger
|
||||
|
||||
li
|
||||
span.me-2 blockfilterindex
|
||||
if (getindexinfo && getindexinfo["basic block filter index"])
|
||||
i.fas.fa-check.text-success
|
||||
i.bi-check2.text-success
|
||||
else
|
||||
i.fas.fa-times.text-danger
|
||||
i.bi-x.text-danger
|
||||
|
||||
|
||||
if (getdeploymentinfo && getdeploymentinfo.deployments)
|
||||
|
|
@ -167,7 +167,7 @@ block content
|
|||
if (forkUrls[itemName])
|
||||
small
|
||||
a(href=forkUrls[itemName], title=`More info about ${itemName}`, data-bs-toggle="tooltip", target="_blank")
|
||||
i.fas.fa-external-link-alt.small
|
||||
i.bi-box-arrow-up-right.small
|
||||
|
||||
|
||||
// deprecated, as of v23.0, which now has this data in getdeploymentinfo.deployments (see above)
|
||||
|
|
@ -221,7 +221,7 @@ block content
|
|||
if (forkUrls[itemName])
|
||||
small
|
||||
a(href=forkUrls[itemName], title=`More info about ${itemName}`, data-bs-toggle="tooltip", target="_blank")
|
||||
i.fas.fa-external-link-alt.small
|
||||
i.bi-box-arrow-up-right.small
|
||||
|
||||
if (item.type == "bip9" && item.bip9 && (item.bip9.start_time || item.bip9.timeout))
|
||||
div.small.text-muted
|
||||
|
|
@ -246,7 +246,7 @@ block content
|
|||
|
||||
|
||||
+contentSection("Network")
|
||||
+summaryRow(3 + (getnetworkinfo.networks ? 1 : 0))
|
||||
+summaryRow(4)
|
||||
+summaryItem("Host")
|
||||
| #{global.rpcClient.host}
|
||||
span.text-muted :#{global.rpcClient.port}
|
||||
|
|
@ -258,41 +258,43 @@ block content
|
|||
br
|
||||
span.text-muted (#{getnetworkinfo.connections_in.toLocaleString()} in; #{getnetworkinfo.connections_out.toLocaleString()} out)
|
||||
|
||||
+summaryItem("Traffic")
|
||||
- var downData = utils.formatLargeNumber(getnettotals.totalbytesrecv, 1);
|
||||
- var downRateData = utils.formatLargeNumber(getnettotals.totalbytesrecv / uptimeSeconds, 1);
|
||||
+summaryItem("Upload")
|
||||
- var upData = utils.formatLargeNumber(getnettotals.totalbytessent, 1);
|
||||
- var upRateData = utils.formatLargeNumber(getnettotals.totalbytessent / uptimeSeconds, 1);
|
||||
|
||||
i.fas.fa-arrow-down.me-2
|
||||
span.me-2 #{downData[0]} #{downData[1].abbreviation}B
|
||||
small.text-muted (#{downRateData[0]} #{downRateData[1].abbreviation}B/s)
|
||||
br
|
||||
i.fas.fa-arrow-up.me-2
|
||||
i.bi-arrow-up.me-2
|
||||
span.me-2 #{upData[0]} #{upData[1].abbreviation}B
|
||||
small.text-muted (#{upRateData[0]} #{upRateData[1].abbreviation}B/s)
|
||||
|
||||
if (getnetworkinfo.networks)
|
||||
+summaryItem("Interfaces")
|
||||
each item, index in getnetworkinfo.networks
|
||||
div
|
||||
div.d-inline-block.text-end(style="width: 75px;")
|
||||
span.me-2 #{item.name}
|
||||
+summaryItem("Download")
|
||||
- var downData = utils.formatLargeNumber(getnettotals.totalbytesrecv, 1);
|
||||
- var downRateData = utils.formatLargeNumber(getnettotals.totalbytesrecv / uptimeSeconds, 1);
|
||||
|
||||
i.bi-arrow-down.me-2
|
||||
span.me-2 #{downData[0]} #{downData[1].abbreviation}B
|
||||
small.text-muted (#{downRateData[0]} #{downRateData[1].abbreviation}B/s)
|
||||
|
||||
if (getnetworkinfo.networks)
|
||||
hr.my-4
|
||||
|
||||
+summaryRow(getnetworkinfo.networks.length)
|
||||
each item, index in getnetworkinfo.networks
|
||||
+summaryItem(item.name)
|
||||
div
|
||||
if (item.proxy)
|
||||
small.text-muted.me-2 (#{item.proxy})
|
||||
|
||||
if (item.reachable)
|
||||
span.border-dotted(title="Reachable", data-bs-toggle="tooltip")
|
||||
i.fas.fa-check.text-success
|
||||
i.bi-check2.text-success
|
||||
|
||||
else
|
||||
span.border-dotted(title="Unreachable", data-bs-toggle="tooltip")
|
||||
i.fas.fa-times.text-danger
|
||||
i.bi-x.text-danger
|
||||
|
||||
|
||||
if (getnetworkinfo.localaddresses)
|
||||
hr
|
||||
hr.my-4
|
||||
|
||||
.ms-3
|
||||
+summaryTitle("Addresses")
|
||||
|
|
|
|||
|
|
@ -174,8 +174,8 @@ block content
|
|||
each item, index in peerSummary.getpeerinfo
|
||||
div.border-bottom.p-1
|
||||
a.me-2(href="javascript:void(0)" onclick=`$("#peerinfo_${index}").toggle(); $(this).find(".toggle-buttons").toggle();`)
|
||||
i.far.fa-plus-square.text-muted.toggle-buttons
|
||||
i.far.fa-minus-square.text-muted.toggle-buttons(style="display: none;")
|
||||
i.bi-plus-square.text-muted.toggle-buttons
|
||||
i.bi-dash-square.text-muted.toggle-buttons(style="display: none;")
|
||||
|
||||
span #{item.addr}
|
||||
|
||||
|
|
|
|||
|
|
@ -25,14 +25,14 @@ block content
|
|||
.float-start.ms-2
|
||||
if (session.favoriteRpcCommands && session.favoriteRpcCommands.includes(method))
|
||||
a.me-2(href=`./session-data?action=remove-rpc-favorite&data=${method}`, title="Remove from Favorites", data-bs-toggle="tooltip")
|
||||
i.fas.fa-star.text-warning
|
||||
i.bi-star-fill.text-warning
|
||||
else
|
||||
a.me-2(href=`./session-data?action=add-rpc-favorite&data=${method}`, title="Add as a Favorite", data-bs-toggle="tooltip")
|
||||
i.far.fa-star.text-warning
|
||||
i.bi-star.text-warning
|
||||
|
||||
span.small.text-muted (
|
||||
a(href=`https://developer.bitcoin.org/reference/rpc/${method}.html`, target="_blank") Developer Docs
|
||||
i.fas.fa-external-link-alt.ms-2
|
||||
i.bi-box-arrow-up-right.ms-2
|
||||
| )
|
||||
|
||||
|
||||
|
|
@ -80,7 +80,7 @@ block content
|
|||
- var detailsLines = "";
|
||||
each detailsLine in argX.detailsLines
|
||||
- detailsLines = (detailsLines + "<br/>" + detailsLine);
|
||||
i.fas.fa-info-circle(data-bs-toggle="tooltip", title=detailsLines)
|
||||
i.bi-info-circle(data-bs-toggle="tooltip", title=detailsLines)
|
||||
|
||||
|
||||
|
||||
|
|
@ -132,7 +132,7 @@ block content
|
|||
if (session.favoriteRpcCommands && session.favoriteRpcCommands.length > 0)
|
||||
.clearfix
|
||||
.float-start
|
||||
i.fas.fa-star.me-2
|
||||
i.bi-star.me-2
|
||||
.float-start
|
||||
+sectionTitle(`Favorites (${session.favoriteRpcCommands.length.toLocaleString()})`)
|
||||
+contentSection
|
||||
|
|
@ -144,7 +144,7 @@ block content
|
|||
if (session.recentRpcCommands && session.recentRpcCommands.length > 0)
|
||||
.clearfix
|
||||
.float-start
|
||||
i.fas.fa-history.me-2
|
||||
i.bi-clock-history.me-2
|
||||
.float-start
|
||||
+sectionTitle(`Recent (${session.recentRpcCommands.length.toLocaleString()})`)
|
||||
+contentSection
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@ mixin toolSections(sectionsData)
|
|||
|
||||
.clearfix
|
||||
.float-start.pt-1(style="width: 38px;")
|
||||
i.fa-lg(class=item.fontawesome, style="width: 20px; margin-right: 10px;")
|
||||
i.fs-5(class=item.iconClass, style="width: 20px; margin-right: 10px;")
|
||||
|
||||
.float-start
|
||||
div
|
||||
|
|
|
|||
|
|
@ -63,7 +63,7 @@ block content
|
|||
|
||||
#alert-included-next-block.alert.alert-primary(style="display: none;")
|
||||
h6 Confirmation: Predicted in Next Block
|
||||
i.fas.fa-check.text-success.ms-1
|
||||
i.bi-check2.text-success.ms-1
|
||||
.mb-2 This transaction is currently unconfirmed but, with the current mempool, it's predicted to be confirmed in the next block.
|
||||
span It's currently transaction #<span id='next-block-index'></span> of <span id='next-block-count'></span>.
|
||||
|
||||
|
|
@ -77,7 +77,7 @@ block content
|
|||
.float-end
|
||||
if (`${userSettings["txPageShowTechDetails"]}` == "false")
|
||||
a.btn.btn-primary.btn-sm.me-2(href=`./changeSetting?name=txPageShowTechDetails&value=true`, title="Display technical details for this transaction.", data-bs-toggle="tooltip")
|
||||
i.far.fa-plus-square.me-2
|
||||
i.bi-plus-square.me-2
|
||||
| Technical Details
|
||||
|
||||
|
||||
|
|
@ -110,7 +110,7 @@ block content
|
|||
else if (mempoolDetails.ancestors.length > 0)
|
||||
span.border-dotted(title="RBF may be signaled explicitly or implicitly. This transaction does not explicitly opt in, but if any of its unconfirmed ancestor transactions are replaceable then this one is too.", data-bs-toggle="tooltip") Not explicit…
|
||||
a.ms-2(href="https://github.com/bitcoin/bips/blob/master/bip-0125.mediawiki#summary", data-bs-toggle="tooltip", title="More info about RBF", target="_blank")
|
||||
i.fas.fa-info-circle
|
||||
i.bi-info-circle
|
||||
else
|
||||
span No
|
||||
|
||||
|
|
@ -152,7 +152,7 @@ block content
|
|||
+summaryItem("Fee Rate", null, "sat/vB")
|
||||
if (!mempoolDetails && !global.txindexAvailable)
|
||||
span.border-dotted(title="Determining the fee of confirmed transactions requires txindex to be enabled", data-bs-toggle="tooltip")
|
||||
i.fas.fa-backspace.text-danger.me-2
|
||||
i.bi-backspace.text-danger.me-2
|
||||
| ?
|
||||
|
||||
else
|
||||
|
|
@ -163,7 +163,7 @@ block content
|
|||
+summaryItem("Total Fee")
|
||||
if (!mempoolDetails && !global.txindexAvailable)
|
||||
span.border-dotted(title="Determining the fee of confirmed transactions requires txindex to be enabled", data-bs-toggle="tooltip")
|
||||
i.fas.fa-backspace.text-danger.me-2
|
||||
i.bi-backspace.text-danger.me-2
|
||||
| ?
|
||||
|
||||
else
|
||||
|
|
@ -233,7 +233,7 @@ block content
|
|||
+timestamp(result.getrawtransaction.locktime)
|
||||
if (result.getrawtransaction.locktime > (new Date().getTime() / 1000))
|
||||
span.border-dotted.ms-1(title=`This future-dated 'locktime' value is only possible because this is a coinbase transaction. Normally, locktime specifies the earliest that a transaction may be mined (included in a block). But, because this transaction was created by the miner in the process of mining a block, it is able to bypass some of the normal validity checks that nodes on the network perform on transactions.`, data-bs-toggle="tooltip")
|
||||
i.fas.fa-flag.fa-sm.text-warning
|
||||
i.bi-flag.text-tiny.text-warning
|
||||
|
||||
if (parseInt(daysDestroyed) > 0)
|
||||
- var daysDestroyedDesc = `The sum of all input values multiplied by the number of days that input's UTXO existed before being spent. Large values can sometimes be interesting, indicating the spending of long-dormant coins. A 1 ${coinConfig.ticker} UTXO spent after 7 days dormant results in 7 days destroyed, as does a 7 ${coinConfig.ticker} UTXO spent after 1 day dormant.`;
|
||||
|
|
@ -263,8 +263,8 @@ block content
|
|||
|
||||
if (hasInputAddresses)
|
||||
.d-inline.d-sm-none
|
||||
a(href="javascript:void(0)", onclick=`$(this).find(".toggle-icon").toggleClass("fa-plus-square").toggleClass("fa-minus-square"); $(".tx-input-address-${tx.txid}").toggle();`)
|
||||
i.toggle-icon.far.fa-plus-square.text-muted.text-end.fa-lg
|
||||
a(href="javascript:void(0)", onclick=`$(this).find(".toggle-icon").toggleClass("bi-plus-square").toggleClass("bi-dash-square"); $(".tx-input-address-${tx.txid}").toggle();`)
|
||||
i.toggle-icon.bi-plus-square.text-muted.text-end
|
||||
|
||||
+contentSection
|
||||
- var tx = result.getrawtransaction;
|
||||
|
|
@ -310,7 +310,7 @@ block content
|
|||
tr
|
||||
th
|
||||
a.badge.card-highlight.border(data-bs-toggle="tooltip", title=`Input #${vinIndex}`, style="white-space: nowrap;")
|
||||
i.fas.fa-arrow-right.text-danger.me-1
|
||||
i.bi-arrow-right.text-danger.me-1
|
||||
span.font-monospace #{vinIndex.toLocaleString()}
|
||||
|
||||
td.word-wrap.text-break
|
||||
|
|
@ -352,7 +352,7 @@ block content
|
|||
tr
|
||||
th
|
||||
a.badge.card-highlight.border.fw-normal(data-bs-toggle="tooltip", title=`Output #${(voutIndex + 1)}`, style="white-space: nowrap;")
|
||||
i.fas.fa-arrow-right.text-success.me-1
|
||||
i.bi-arrow-right.text-success.me-1
|
||||
span.font-monospace #{voutIndex.toLocaleString()}
|
||||
|
||||
td.word-wrap
|
||||
|
|
|
|||
|
|
@ -16,12 +16,12 @@ block content
|
|||
if (userSettings.hideInfoNotes && userSettings.hideInfoNotes == "true")
|
||||
div Yes
|
||||
a(href=`./changeSetting?name=hideInfoNotes&value=false`)
|
||||
i.fas.fa-toggle-on.fa-2x
|
||||
i.bi-toggle2-on.fs-3
|
||||
|
||||
else
|
||||
div No
|
||||
a(href=`./changeSetting?name=hideInfoNotes&value=true`)
|
||||
i.fas.fa-toggle-off.fa-2x
|
||||
i.bi-toggle2-off.fs-3
|
||||
|
||||
|
||||
.row
|
||||
|
|
|
|||
|
|
@ -7,8 +7,6 @@ block content
|
|||
+pageTitle("UTXO Set", "\"Run the Numbers\"")
|
||||
|
||||
+dismissableInfoAlert("utxoSetPageNoteDismissed", "About the UTXO Set...")
|
||||
h6.mb-2 About the UTXO Set
|
||||
|
||||
.mb-2 A <b>UTXO</b>, or Unspent Transaction Output, defines a spendable unit of BTC. Every UTXO, when spent, is effectively destroyed and replaced with multiple other UTXOs of different values (see simplified example below), a process analogous to smelting and re-forging physical coins each time they are spent (impractical in the physical world, but easy when working with bits of data).
|
||||
|
||||
.my-4
|
||||
|
|
|
|||