-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
This commit is contained in:
Dan Janosik 2022-04-29 17:46:48 -04:00
parent 9ace01d958
commit ef8e589d81
No known key found for this signature in database
GPG key ID: 70C0B166321C0AF8
94 changed files with 2014 additions and 263 deletions

View file

@ -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
View file

@ -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);
}
};

View file

@ -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",

View file

@ -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"
},

View file

@ -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"},
]
};

View file

@ -6,6 +6,7 @@ const dirs = [
"public/js/",
"public/style/",
"public/leaflet/",
"public/font/",
];
const filetypeMatch = /^.*\.(js|css)$/;

48
npm-shrinkwrap.json generated
View file

@ -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",

View file

@ -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",

Binary file not shown.

Binary file not shown.

View file

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 5.6 KiB

After

Width:  |  Height:  |  Size: 5.6 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 2 KiB

After

Width:  |  Height:  |  Size: 2 KiB

Before After
Before After

View file

@ -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>

View file

Before

Width:  |  Height:  |  Size: 956 B

After

Width:  |  Height:  |  Size: 956 B

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 519 B

After

Width:  |  Height:  |  Size: 519 B

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 791 B

After

Width:  |  Height:  |  Size: 791 B

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Before After
Before After

View 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

View file

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 3.9 KiB

After

Width:  |  Height:  |  Size: 3.9 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 9 KiB

After

Width:  |  Height:  |  Size: 9 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 3.6 KiB

After

Width:  |  Height:  |  Size: 3.6 KiB

Before After
Before After

View file

@ -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>

View 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

View file

Before

Width:  |  Height:  |  Size: 700 B

After

Width:  |  Height:  |  Size: 700 B

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Before After
Before After

View 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

View file

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 2.8 KiB

After

Width:  |  Height:  |  Size: 2.8 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 4 KiB

After

Width:  |  Height:  |  Size: 4 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 9.4 KiB

After

Width:  |  Height:  |  Size: 9.4 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 3.8 KiB

After

Width:  |  Height:  |  Size: 3.8 KiB

Before After
Before After

View file

@ -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>

View file

Before

Width:  |  Height:  |  Size: 956 B

After

Width:  |  Height:  |  Size: 956 B

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 738 B

After

Width:  |  Height:  |  Size: 738 B

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Before After
Before After

View 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

View file

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 3.1 KiB

After

Width:  |  Height:  |  Size: 3.1 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 4.5 KiB

After

Width:  |  Height:  |  Size: 4.5 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 4 KiB

After

Width:  |  Height:  |  Size: 4 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 9.5 KiB

After

Width:  |  Height:  |  Size: 9.5 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 3.8 KiB

After

Width:  |  Height:  |  Size: 3.8 KiB

Before After
Before After

View file

@ -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>

View file

Before

Width:  |  Height:  |  Size: 956 B

After

Width:  |  Height:  |  Size: 956 B

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 736 B

After

Width:  |  Height:  |  Size: 736 B

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Before After
Before After

View 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

View file

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 3.2 KiB

After

Width:  |  Height:  |  Size: 3.2 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 4.5 KiB

After

Width:  |  Height:  |  Size: 4.5 KiB

Before After
Before After

View file

@ -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"
}

File diff suppressed because one or more lines are too long

View file

@ -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

File diff suppressed because it is too large Load diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View 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"
}

View file

@ -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();

View file

@ -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

View file

@ -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
|.

View file

@ -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

View file

@ -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)}

View file

@ -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

View file

@ -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;

View file

@ -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

View file

@ -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)

View file

@ -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)

View file

@ -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}

View file

@ -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

View file

@ -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)

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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"])

View file

@ -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")

View file

@ -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}

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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