From 8444cd69a632544e6e3bfcda24226ce7afe61a3f Mon Sep 17 00:00:00 2001 From: Dan Janosik Date: Fri, 21 Jul 2017 19:42:13 -0400 Subject: [PATCH] version 1.0 --- app.js | 130 +++++++++ app/env.js | 15 + app/rpcApi.js | 198 +++++++++++++ app/utils.js | 55 ++++ bin/www | 9 + package.json | 30 ++ public/css/styling.css | 37 +++ public/img/favicons/android-icon-144x144.png | Bin 0 -> 6771 bytes public/img/favicons/android-icon-192x192.png | Bin 0 -> 8109 bytes public/img/favicons/android-icon-36x36.png | Bin 0 -> 2057 bytes public/img/favicons/android-icon-48x48.png | Bin 0 -> 2553 bytes public/img/favicons/android-icon-72x72.png | Bin 0 -> 3427 bytes public/img/favicons/android-icon-96x96.png | Bin 0 -> 4469 bytes public/img/favicons/apple-icon-114x114.png | Bin 0 -> 5298 bytes public/img/favicons/apple-icon-120x120.png | Bin 0 -> 5574 bytes public/img/favicons/apple-icon-144x144.png | Bin 0 -> 6771 bytes public/img/favicons/apple-icon-152x152.png | Bin 0 -> 7220 bytes public/img/favicons/apple-icon-180x180.png | Bin 0 -> 9075 bytes public/img/favicons/apple-icon-57x57.png | Bin 0 -> 2881 bytes public/img/favicons/apple-icon-60x60.png | Bin 0 -> 2912 bytes public/img/favicons/apple-icon-72x72.png | Bin 0 -> 3427 bytes public/img/favicons/apple-icon-76x76.png | Bin 0 -> 3620 bytes .../img/favicons/apple-icon-precomposed.png | Bin 0 -> 8683 bytes public/img/favicons/apple-icon.png | Bin 0 -> 8683 bytes public/img/favicons/browserconfig.xml | 2 + public/img/favicons/favicon-16x16.png | Bin 0 -> 1501 bytes public/img/favicons/favicon-32x32.png | Bin 0 -> 1863 bytes public/img/favicons/favicon-96x96.png | Bin 0 -> 4469 bytes public/img/favicons/favicon.ico | Bin 0 -> 1150 bytes public/img/favicons/manifest.json | 41 +++ public/img/favicons/ms-icon-144x144.png | Bin 0 -> 6771 bytes public/img/favicons/ms-icon-150x150.png | Bin 0 -> 7165 bytes public/img/favicons/ms-icon-310x310.png | Bin 0 -> 19705 bytes public/img/favicons/ms-icon-70x70.png | Bin 0 -> 3411 bytes public/img/icon.png | Bin 0 -> 693 bytes public/img/logo-256.png | Bin 0 -> 8240 bytes public/img/logo.psd | Bin 0 -> 82480 bytes public/img/logo/logo-64.png | Bin 0 -> 2483 bytes routes/baseActionsRouter.js | 209 ++++++++++++++ views/block-height.pug | 19 ++ views/block.pug | 19 ++ views/connect.pug | 37 +++ views/error.pug | 21 ++ views/includes/block-content.pug | 227 +++++++++++++++ views/includes/pagination.pug | 26 ++ views/index.pug | 46 +++ views/layout.pug | 63 ++++ views/terminal.pug | 54 ++++ views/transaction.pug | 271 ++++++++++++++++++ 49 files changed, 1509 insertions(+) create mode 100755 app.js create mode 100644 app/env.js create mode 100644 app/rpcApi.js create mode 100644 app/utils.js create mode 100644 bin/www create mode 100644 package.json create mode 100755 public/css/styling.css create mode 100644 public/img/favicons/android-icon-144x144.png create mode 100644 public/img/favicons/android-icon-192x192.png create mode 100644 public/img/favicons/android-icon-36x36.png create mode 100644 public/img/favicons/android-icon-48x48.png create mode 100644 public/img/favicons/android-icon-72x72.png create mode 100644 public/img/favicons/android-icon-96x96.png create mode 100644 public/img/favicons/apple-icon-114x114.png create mode 100644 public/img/favicons/apple-icon-120x120.png create mode 100644 public/img/favicons/apple-icon-144x144.png create mode 100644 public/img/favicons/apple-icon-152x152.png create mode 100644 public/img/favicons/apple-icon-180x180.png create mode 100644 public/img/favicons/apple-icon-57x57.png create mode 100644 public/img/favicons/apple-icon-60x60.png create mode 100644 public/img/favicons/apple-icon-72x72.png create mode 100644 public/img/favicons/apple-icon-76x76.png create mode 100644 public/img/favicons/apple-icon-precomposed.png create mode 100644 public/img/favicons/apple-icon.png create mode 100644 public/img/favicons/browserconfig.xml create mode 100644 public/img/favicons/favicon-16x16.png create mode 100644 public/img/favicons/favicon-32x32.png create mode 100644 public/img/favicons/favicon-96x96.png create mode 100644 public/img/favicons/favicon.ico create mode 100644 public/img/favicons/manifest.json create mode 100644 public/img/favicons/ms-icon-144x144.png create mode 100644 public/img/favicons/ms-icon-150x150.png create mode 100644 public/img/favicons/ms-icon-310x310.png create mode 100644 public/img/favicons/ms-icon-70x70.png create mode 100644 public/img/icon.png create mode 100644 public/img/logo-256.png create mode 100644 public/img/logo.psd create mode 100644 public/img/logo/logo-64.png create mode 100644 routes/baseActionsRouter.js create mode 100644 views/block-height.pug create mode 100644 views/block.pug create mode 100644 views/connect.pug create mode 100644 views/error.pug create mode 100644 views/includes/block-content.pug create mode 100644 views/includes/pagination.pug create mode 100644 views/index.pug create mode 100644 views/layout.pug create mode 100644 views/terminal.pug create mode 100644 views/transaction.pug diff --git a/app.js b/app.js new file mode 100755 index 0000000..cc23c4b --- /dev/null +++ b/app.js @@ -0,0 +1,130 @@ +#!/usr/bin/env node + +'use strict'; + +var express = require('express'); +var path = require('path'); +var favicon = require('serve-favicon'); +var logger = require('morgan'); +var cookieParser = require('cookie-parser'); +var bodyParser = require('body-parser'); +var session = require("express-session"); +var env = require("./app/env.js"); +var md5 = require("md5"); +var simpleGit = require('simple-git'); +var utils = require("./app/utils.js"); +var moment = require("moment"); +var Decimal = require('decimal.js'); +var bitcoin = require("bitcoin"); + + +var baseActionsRouter = require('./routes/baseActionsRouter'); + +var app = express(); + +// view engine setup +app.set('views', path.join(__dirname, 'views')); +app.set('view engine', 'pug'); + +// uncomment after placing your favicon in /public +//app.use(favicon(__dirname + '/public/favicon.ico')); +app.use(logger('dev')); +app.use(bodyParser.json()); +app.use(bodyParser.urlencoded({ extended: false })); +app.use(cookieParser()); +app.use(session({ + secret: env.cookiePassword, + resave: false, + saveUninitialized: false +})); +app.use(express.static(path.join(__dirname, 'public'))); + + +// Make our db accessible to our router +app.use(function(req, res, next) { + // make session available in templates + res.locals.session = req.session; + + if (env.bitcoind && env.bitcoind.rpc) { + req.session.host = env.bitcoind.host; + req.session.port = env.bitcoind.port; + req.session.username = env.bitcoind.rpc.username; + + global.client = new bitcoin.Client({ + host: env.bitcoind.host, + port: env.bitcoind.port, + user: env.bitcoind.rpc.username, + pass: env.bitcoind.rpc.password, + timeout: 30000 + }); + } + + res.locals.host = req.session.host; + res.locals.port = req.session.port; + + if (!["/", "/connect"].includes(req.originalUrl)) { + if (utils.redirectToConnectPageIfNeeded(req, res)) { + return; + } + } + + if (req.session.userMessage) { + res.locals.userMessage = req.session.userMessage; + + if (req.session.userMessageType) { + res.locals.userMessageType = req.session.userMessageType; + + } else { + res.locals.userMessageType = "info"; + } + } + + req.session.userMessage = null; + req.session.userMessageType = null; + + // make some var available to all request + // ex: req.cheeseStr = "cheese"; + + next(); +}); + +app.use('/', baseActionsRouter); + +/// catch 404 and forwarding to error handler +app.use(function(req, res, next) { + var err = new Error('Not Found'); + err.status = 404; + next(err); +}); + +/// error handlers + +// development error handler +// will print stacktrace +if (app.get('env') === 'development') { + app.use(function(err, req, res, next) { + res.status(err.status || 500); + res.render('error', { + message: err.message, + error: err + }); + }); +} + +// production error handler +// no stacktraces leaked to user +app.use(function(err, req, res, next) { + res.status(err.status || 500); + res.render('error', { + message: err.message, + error: {} + }); +}); + +app.locals.moment = moment; +app.locals.Decimal = Decimal; +app.locals.utils = utils; + + + +module.exports = app; diff --git a/app/env.js b/app/env.js new file mode 100644 index 0000000..55abaf4 --- /dev/null +++ b/app/env.js @@ -0,0 +1,15 @@ +module.exports = { + cookiePassword: "0x000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f", + + // Uncomment "bitcoind" below to automatically connect via RPC. + // Otherwise, you can manually connect via the UI. + + //bitcoind:{ + // host:"192.168.1.100", + // port:8332, + // rpc: { + // username:"username", + // password:"password" + // } + //} +}; \ No newline at end of file diff --git a/app/rpcApi.js b/app/rpcApi.js new file mode 100644 index 0000000..e4666d6 --- /dev/null +++ b/app/rpcApi.js @@ -0,0 +1,198 @@ +var genesisCoinbaseTransactionTxid = "4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b"; +var genesisCoinbaseTransaction = { + "hex": "01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0804ffff001d02fd04ffffffff0100f2052a01000000434104f5eeb2b10c944c6b9fbcfff94c35bdeecd93df977882babc7f3a2cf7f5c81d3b09a68db7f0e04f21de5d4230e75e6dbe7ad16eefe0d4325a62067dc6f369446aac00000000", + "txid": "4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b", + "hash": "4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b", + "size": 204, + "vsize": 204, + "version": 1, + "confirmations":475000, + "vin": [ + { + "coinbase": "04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73", + "sequence": 4294967295 + } + ], + "vout": [ + { + "value": 50, + "n": 0, + "scriptPubKey": { + "asm": "04f5eeb2b10c944c6b9fbcfff94c35bdeecd93df977882babc7f3a2cf7f5c81d3b09a68db7f0e04f21de5d4230e75e6dbe7ad16eefe0d4325a62067dc6f369446a OP_CHECKSIG", + "hex": "4104f5eeb2b10c944c6b9fbcfff94c35bdeecd93df977882babc7f3a2cf7f5c81d3b09a68db7f0e04f21de5d4230e75e6dbe7ad16eefe0d4325a62067dc6f369446aac", + "reqSigs": 1, + "type": "pubkey", + "addresses": [ + "1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa" + ] + } + } + ], + "blockhash": "000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f", + "time": 1230988505, + "blocktime": 1230988505 +}; + +function getBlockByHeight(blockHeight) { + console.log("getBlockByHeight: " + blockHeight); + + return new Promise(function(resolve, reject) { + var client = global.client; + + client.cmd('getblockhash', blockHeight, function(err, result, resHeaders) { + if (err) { + return console.log("Error 0928317yr3w: " + err); + } + + client.cmd('getblock', result, function(err2, result2, resHeaders2) { + if (err2) { + return console.log("Error 320fh7e0hg: " + err2); + } + + resolve({ success:true, getblockhash:result, getblock:result2 }); + }); + }); + }); +} + +function getTransactionInputs(rpcClient, transaction) { + console.log("getTransactionInputs: " + transaction.txid); + + return new Promise(function(resolve, reject) { + var txids = []; + for (var i = 0; i < transaction.vin.length; i++) { + txids.push(transaction.vin[i].txid); + } + + getRawTransactions(txids).then(function(inputTransactions) { + resolve({ txid:transaction.txid, inputTransactions:inputTransactions }); + }); + }); +} + +function getRawTransaction(txid) { + return new Promise(function(resolve, reject) { + if (txid == genesisCoinbaseTransactionTxid) { + getBlockByHeight(0).then(function(blockZeroResult) { + var result = genesisCoinbaseTransaction; + result.confirmations = blockZeroResult.getblock.confirmations; + + resolve(result); + }); + + return; + } + + client.cmd('getrawtransaction', txid, 1, function(err, result, resHeaders) { + if (err) { + console.log("Error 329813yre823: " + err); + } + + resolve(result); + }); + }); +} + +function getRawTransactions(txids) { + console.log("getRawTransactions: " + txids); + + return new Promise(function(resolve, reject) { + if (!txids || txids.length == 0) { + resolve([]); + + return; + } + + if (txids.length == 1 && txids[0] == "4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b") { + // copy the "confirmations" field from genesis block to the genesis-coinbase tx + getBlockByHeight(0).then(function(blockZeroResult) { + var result = genesisCoinbaseTransaction; + result.confirmations = blockZeroResult.getblock.confirmations; + + resolve([result]); + }); + + return; + } + + var batch = []; + for (var i = 0; i < txids.length; i++) { + var txid = txids[i]; + + batch.push({ + method: 'getrawtransaction', + params: [ txid, 1 ] + }); + } + + var results = []; + + var count = batch.length; + client.cmd(batch, function(err, result, resHeaders) { + if (err) { + console.log("Error 10238rhwefyhd: " + err); + } + + results.push(result); + + count--; + + if (count == 0) { + resolve(results); + } + }); + }); +} + +function getBlockData(rpcClient, blockHash, txLimit, txOffset) { + console.log("getBlockData: " + blockHash); + + return new Promise(function(resolve, reject) { + client.cmd('getblock', blockHash, function(err2, result2, resHeaders2) { + if (err2) { + console.log("Error 3017hfwe0f: " + err2); + + reject(err2); + + return; + } + + var txids = []; + for (var i = txOffset; i < Math.min(txOffset + txLimit, result2.tx.length); i++) { + txids.push(result2.tx[i]); + } + + getRawTransactions(txids).then(function(transactions) { + var txInputsByTransaction = {}; + + var promises = []; + for (var i = 0; i < transactions.length; i++) { + var transaction = transactions[i]; + + if (transaction) { + promises.push(getTransactionInputs(client, transaction)); + } + } + + Promise.all(promises).then(function() { + var results = arguments[0]; + for (var i = 0; i < results.length; i++) { + var resultX = results[i]; + + txInputsByTransaction[resultX.txid] = resultX.inputTransactions; + } + + resolve({ getblock:result2, transactions:transactions, txInputsByTransaction:txInputsByTransaction }); + }); + }); + }); + }); +} + +module.exports = { + getBlockByHeight: getBlockByHeight, + getTransactionInputs: getTransactionInputs, + getBlockData: getBlockData, + getRawTransaction: getRawTransaction, + getRawTransactions: getRawTransactions +}; \ No newline at end of file diff --git a/app/utils.js b/app/utils.js new file mode 100644 index 0000000..9310e5a --- /dev/null +++ b/app/utils.js @@ -0,0 +1,55 @@ +var Decimal = require("decimal.js"); +Decimal8 = Decimal.clone({ precision:8, rounding:8 }); + +function doSmartRedirect(req, res, defaultUrl) { + if (req.session.redirectUrl) { + res.redirect(req.session.redirectUrl); + req.session.redirectUrl = null; + + } else { + res.redirect(defaultUrl); + } + + res.end(); +} + +function redirectToConnectPageIfNeeded(req, res) { + if (!req.session.host) { + req.session.redirectUrl = req.originalUrl; + + res.redirect("/"); + res.end(); + + return true; + } + + return false; +} + +function hex2ascii(hex) { + var str = ""; + for (var i = 0; i < hex.length; i += 2) { + str += String.fromCharCode(parseInt(hex.substr(i, 2), 16)); + } + + return str; +} + +function getBlockReward(blockHeight) { + var eras = [ new Decimal8(50) ]; + for (var i = 1; i < 34; i++) { + var previous = eras[i - 1]; + eras.push(new Decimal8(previous).dividedBy(2)); + } + + var index = Math.floor(blockHeight / 210000); + + return eras[index]; +} + +module.exports = { + doSmartRedirect: doSmartRedirect, + redirectToConnectPageIfNeeded: redirectToConnectPageIfNeeded, + hex2ascii: hex2ascii, + getBlockReward: getBlockReward +}; diff --git a/bin/www b/bin/www new file mode 100644 index 0000000..52ced52 --- /dev/null +++ b/bin/www @@ -0,0 +1,9 @@ +#!/usr/bin/env node +var debug = require('debug')('my-application'); +var app = require('../app'); + +app.set('port', process.env.PORT || 3002); + +var server = app.listen(app.get('port'), function() { + debug('Express server listening on port ' + server.address().port); +}); diff --git a/package.json b/package.json new file mode 100644 index 0000000..492b3e0 --- /dev/null +++ b/package.json @@ -0,0 +1,30 @@ +{ + "name": "btc-rpc-explorer", + "version": "1.0.0", + "private": false, + "scripts": { + "start": "node ./bin/www" + }, + "dependencies": { + "body-parser": "~1.16.0", + "cookie-parser": "~1.4.3", + "bitcoin": "3.0.1", + "crypto-js": "3.1.9-1", + "debug": "~2.6.0", + "decimal.js":"7.2.3", + "express": "~4.14.1", + "express-session": "1.15.2", + "jstransformer-markdown-it": "^2.0.0", + "md5":"2.2.1", + "moment": "^2.18.1", + "monk": "^4.0.0", + "morgan": "~1.7.0", + "mysql": "2.13.0", + "nodemailer": "4.0.1", + "pug": "2.0.0-rc.2", + "scrypt": "6.0.3", + "sequelize": "3.30.4", + "serve-favicon": "~2.3.2", + "simple-git": "1.73.0" + } +} diff --git a/public/css/styling.css b/public/css/styling.css new file mode 100755 index 0000000..e43de15 --- /dev/null +++ b/public/css/styling.css @@ -0,0 +1,37 @@ +body { + font: 14px 'Open Sans', "Lucida Grande", Helvetica, Arial, sans-serif; +} + +hr { + margin: 15px 0; +} + +img.header-image { + margin-top: -10px; + margin-bottom: -5px; + width: 30px; + height: 30px; + margin-right: 10px; +} + +.monospace { + font-family: monospace; +} + +.properties-header { + width: 180px; + text-align: right; +} + +.word-wrap { + word-wrap: break-word; + word-break: break-all; +} + +.tag { + border-radius: 4px; + background-color: #0275d8; + color: white; + padding: 2px 5px; + margin-right: 4px; +} \ No newline at end of file diff --git a/public/img/favicons/android-icon-144x144.png b/public/img/favicons/android-icon-144x144.png new file mode 100644 index 0000000000000000000000000000000000000000..742028798ba5fa3612f29228eac434774c0410e2 GIT binary patch literal 6771 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 NFw`~GsnK$c{4dnb&F}yK literal 0 HcmV?d00001 diff --git a/public/img/favicons/android-icon-192x192.png b/public/img/favicons/android-icon-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..58f5bd07b8d505be3216efc613cc5ab36ea8001c GIT binary patch literal 8109 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 Di0S2) literal 0 HcmV?d00001 diff --git a/public/img/favicons/android-icon-36x36.png b/public/img/favicons/android-icon-36x36.png new file mode 100644 index 0000000000000000000000000000000000000000..4363df2a54e89115597dc1eeb4c089b17e6dee02 GIT binary patch literal 2057 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 YX28MmP2{`{11kWwCml~TSokFT8_@D|LjV8( literal 0 HcmV?d00001 diff --git a/public/img/favicons/android-icon-72x72.png b/public/img/favicons/android-icon-72x72.png new file mode 100644 index 0000000000000000000000000000000000000000..00298c25032f5ad1f30c16da3969f75134412d17 GIT binary patch literal 3427 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 R-h>JOZFPOMDi!O9{{YaDCCmT- literal 0 HcmV?d00001 diff --git a/public/img/favicons/apple-icon-114x114.png b/public/img/favicons/apple-icon-114x114.png new file mode 100644 index 0000000000000000000000000000000000000000..f17049fb2a094671e565b2a5b4ba479ad28761e1 GIT binary patch literal 5298 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 Ta?Z-%jwAq~ZwhPFb;17^!|bxT literal 0 HcmV?d00001 diff --git a/public/img/favicons/apple-icon-120x120.png b/public/img/favicons/apple-icon-120x120.png new file mode 100644 index 0000000000000000000000000000000000000000..adb005e2df1e37d484269ec15cd7ada2739ba9a3 GIT binary patch literal 5574 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 NFw`~GsnK$c{4dnb&F}yK literal 0 HcmV?d00001 diff --git a/public/img/favicons/apple-icon-152x152.png b/public/img/favicons/apple-icon-152x152.png new file mode 100644 index 0000000000000000000000000000000000000000..b54ddc2667611d937ac12f8b039bfa6c40bd069a GIT binary patch literal 7220 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�V8DLE==e^18KSVly8V<=oI{-%mzufLSa6_<-gW>HRCVjA*IIpgGD=J;5C1^bF&m?eE-g-Zb84 zO6Rj_EMeE-S;>c-zI!PI-TP7}flu3FRO%&$9g*4WAAiEZMEI)4`6a*S&Cw2qk8Et{ zY7fHSOzD-X&VO>*V_E_ZaPd7B!&wfjT+pS}tB*`qX%6RL7aVW3+;?{Wp+);T)O+%f zz>9|`%1n@q=OM|Nv-`6lFI}adB}&AE_pLjUJNJQ;4boG&Yf?b5s{EZ8obgPTYPjD! z@VrG7Pj=r{ocCzso=X;Y(&h`to9?#cL$YlPA#Mej3{%}fHyiFV32_EHve>Kjk?_kl z+2h!BwR#OOJR@n~M(>DzW4J=poQsMzW(iPRb9+@~Ekv2W)L1PXEXN(kbC+7i``&aa zbe<`{m{hSNyFl;2*!WdD)`|!-WTQ`r>I;8S-$>poA(VprYk5ZVZoGWSqy*v3haw4f zo7{cVlCLjhbQCS`j&uB){=Uv)4vQBFPhdIe)#avltE9->W_Le<5u@E*z#$7)_OvQ% zGe#B=|5QStn+Z^J9s)JT>@E)=j$G|h=hpopO($o03)k#-^~)Jq%7ac=)8|-?M>c!+ z%E(ky)pQF{ssWGJw^sKrzw)W7t7k%-KOIW*cQ}wiOY&w8Oq`d^KJEB%HpBgkkq-ao zV6zUJXj|BNr34P*b)aC^Ea_4eN1kwQeSMlwU+FRuO5}e|j(Gn6dON)+GzDS#;WY9>TDs zu#eLle>76QKg9H4&b;s|myU^hs$K|gTe@8}^Ul?+7Szk_$7pAac}w?$SL0aOACA4%XlzzAlD(1#)PjbK^21CJMWv`Wg{7*tyL=ZXn z?Eg>rn8xIHVu0Px3Q-Zk)YyPX0^kr9KqNQ?5XtxuO;ZDeftfy1lV8$A9|qSqG}3f4 zG}RkVdjZYgyL=tDxKJo($H+Q|9k4XQf<3T=00AN;Dd6kDh@I%Lc z3wgRb0Kw!?0{{BZuyAT<1Q8k>5JSdCghxUD`!G<$U>H2W7;lOTh1OE9YaygOw3V?&HvklAYRPw(8V?X({ literal 0 HcmV?d00001 diff --git a/public/img/favicons/apple-icon-60x60.png b/public/img/favicons/apple-icon-60x60.png new file mode 100644 index 0000000000000000000000000000000000000000..c8e08578a43c7eefd70fa1a49967704fcb1db28d GIT binary patch literal 2912 zcmZ{mcTm&Y632faUaOHwj|Y0G!zvP=N4kxu%4fV0LGUm3}38()^aiwWTLkF3jgxu`<$WDbpGuGd z&AvzPd{Mp>odB8ARNBR8vmHQ>D(FUE%{;Td*L<7GK6RH!?U6;-jyIOzRL@S8p%KCh zfnb85V^Vz7yNZyHf+%9(uWXe#?>E)=N>ZO#fKy*8NOp=iO0&=l?>ltm5+1lzv`b$( zf;smsfV$J-^;4%CbvY_g2XYM^krur!TF~#x^69ag9@DLZLLF0`-yTRN#78uWOo}dB zrT2Ef?EiVNGWiDZZiZ_pDgyeh@8v0{kaS0PqTL>u0i32QXpL_7S$YNNece6VAj)Nn zIy{e>!s`=oX3S(IBqnwTy}NJ01}S!DWp_O>oDmm>1a-r=OOt zCT@C23;9=C9X;yFtYVvT-}lU=R+Y2T)}}MUH&iQ4w0g22T&upC;>YFJYs_Ak?uLy# zvgT5qN(O%wnR@0JZLD4iY(17@q6v0#IqsCBrTe`086nm-LUmd}r9IT+P<3;_I6O~W zC>d(oc%*YE4yuj16z!epRe}dS|`9Ci*8MrmYn;;K19^WwE88-O4f+DvM?*{ZlfP z_?oT*(0SkFTlw|vbKO%&Uh0V{QRsEW_?!lgJJOFNEOF0}9Jg&sD}^PeIxJHwUl6TS z(ar($C_#UL=XC`4I`E!5lfS#?*X9-wsXK;jBJQGtG7u<{O)SXzr?_~bTj`gH(#&eK zUe6Wqo=ajyRdP^E)&ne6WyC1WZhvOS^YgsRBdkjE%(p(SVO4$Noq{qS+7#44f`Kt%idF$ZiC%z>qxKW^j;=+t9o5Ef}E5MNSyo@PXBoUOKZ>Ll(s!7Y_nF3 z)4lXIHIdfeM`**7Oz4;+)+R8S56)t``39ve7#o?a6W~t{yfbxeqhi$^C8y=&yguYC z#HtrxBe#S?=iM|vXubpyS0+1?J8Y1=Z^fi1qiOjBtaSfNnB!i7#j}#kn^f68KgN@n zey}}5eW(9Ws^f6Nl6mcgS|(JaOo_ZQ`?w|i58qv(7Gv@A9zts|&>jc0rnV@vALeK@ z2sxt5TA*8i@+}s!)05;Oyl2}uGo0{!?+-0Kty7=(%@w!xLr*r_p^sa&9V7L;4klLd zRHofyDp#Zwe3E%;y^(cF5(S$ARnG6@s>EaLheZ}I2yN=axD~;yX8t#xBV}D%t`8q- zw4jsG8$K%U-XS74aOvHrOM-1uO>X=OETlgus<*+)zF9A7J|$!spL!vjuH`Za~tGN63S2^y3jPh~)H2(l8 z@e78#a#xnqgQKQ*xqM14_#~OlWvf-Rj~gVc%YS<>-I)@thQbw=xaI_z(dn`eK2K){ zU!?RdgH|DiPfY2XD%e4B>76T$r8hYgZM}M_3=RC?d$zs&55eZ!)sI)zk1FRSPZ^W2 z68j@1$G*#MtnE2`q?TR!!x9@DH`L8CrI*4M>{IgBxc1q2m5!oXp@K+-=C85m&sWR2 z)Ej?R?~1!J=108-^(T!Twqn?5L^YY_VV%fsB*`%7-Hn(-zPD^;OV$!fIuyruNYrU$ zNwdX2wG6}Wr&a}-S6_A=`nga=7rAKa~-tz?_zD zO0o#ogf!14z1bA~am}gDHCRCN8PBPtzxiQ#t;S$F^ud0Dl*8U(-9%}(B$E0NMZSH> zX1e`)Jq8*I8^O6Pl4s|+p{l?s^|%s9R-u_(RFk&e>g)Li@s{x2>mtIFO9_&F7Q$gM z2i7vA6V%GwXvfp{$?rVfKbw`3F?$#q>%Bkml8)S&R7C1{zJ=NtDk@qwR8h){bt3Pf zdckpJOHTNBT7amA>rGp2pP)9&%8bu9<#<$4>*0w?eM#Y%y1wJHQs+Qh}h)(rE+7nzY0 z1~bfrL!w%5B@7~^f_E@Ko{Vi^OvL-8am2X&WZi8%)zR7gZ#0p~&3Bx+V`{Lnxm^jE z+*QBp!fIn_duI%KvDF8eoxifpx$!}z9uMpPw7M?Loe1peHs*ZYd-FN&b zc}$(mQ+j(36k^hT=0{dmJ=myoP+^Ox9M zomTZ0W`teyEoka8p)umeP~>O5z?N#}Uyr{p89Z{P@A9$3xANzlLo`zo&4Wzy#8E;# z`3^uKklHYWHVlP0iPXU%u{ad!C<1{)Ao51!e*RB_f1n4|EByZ_EF=~22Q|QKtHQZJ zFIpHm#1kO+lf6BOWN#|PS4m4lTLTNzQR0`>gds36BudE^siovYqXpsM@UXBj4eA!n zH$JTq7~=glX@M^Y$ZaW}^f~YEj>F*tDd+t?186v$4Ie!RAj>wJ;QwO&sfok+cv8K6 zXaG_NB>{va@|oSg>HLRrpnA}JwvhfRWe^|P^BY2>`g_vCgFJzMx`GD=yqwae@+V literal 0 HcmV?d00001 diff --git a/public/img/favicons/apple-icon-72x72.png b/public/img/favicons/apple-icon-72x72.png new file mode 100644 index 0000000000000000000000000000000000000000..00298c25032f5ad1f30c16da3969f75134412d17 GIT binary patch literal 3427 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 literal 0 HcmV?d00001 diff --git a/public/img/favicons/apple-icon.png b/public/img/favicons/apple-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..5d56c66dd963ce915b98a9dada88b86cf184b2e5 GIT binary patch literal 8683 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 literal 0 HcmV?d00001 diff --git a/public/img/favicons/browserconfig.xml b/public/img/favicons/browserconfig.xml new file mode 100644 index 0000000..c554148 --- /dev/null +++ b/public/img/favicons/browserconfig.xml @@ -0,0 +1,2 @@ + +#ffffff \ No newline at end of file diff --git a/public/img/favicons/favicon-16x16.png b/public/img/favicons/favicon-16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..25d0ad96582f45fbdd2b3c9c0aae5557c68422ef GIT binary patch literal 1501 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 D&yoD3 literal 0 HcmV?d00001 diff --git a/public/img/favicons/favicon-96x96.png b/public/img/favicons/favicon-96x96.png new file mode 100644 index 0000000000000000000000000000000000000000..32e1d36e837409cb4596e05d5cfd311689e174c1 GIT binary patch literal 4469 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 R-h>JOZFPOMDi!O9{{YaDCCmT- literal 0 HcmV?d00001 diff --git a/public/img/favicons/favicon.ico b/public/img/favicons/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..5f2221aad69f984ba093b1daba4839f95e04106c GIT binary patch literal 1150 zcmbu8OGwmF6vn?$A`nWl%!~QB!XI75BDdCsygE6C1O#L&P@5sG;fdmQ>)(%e$t+mXPDRRzC08Gtur-j z2CedMNvXW(CAQ1I$K^-!c3+x|*X_JFHGW{rUE&&4+4-fN;JqM404f0@V3>*iJK tAu6qRyg@ZmQ+?Q8Y#ugKe@foay$vRXo&m+o>vmu4&V{7$N&BCFe*sFbQ(*uA literal 0 HcmV?d00001 diff --git a/public/img/favicons/manifest.json b/public/img/favicons/manifest.json new file mode 100644 index 0000000..013d4a6 --- /dev/null +++ b/public/img/favicons/manifest.json @@ -0,0 +1,41 @@ +{ + "name": "App", + "icons": [ + { + "src": "\/android-icon-36x36.png", + "sizes": "36x36", + "type": "image\/png", + "density": "0.75" + }, + { + "src": "\/android-icon-48x48.png", + "sizes": "48x48", + "type": "image\/png", + "density": "1.0" + }, + { + "src": "\/android-icon-72x72.png", + "sizes": "72x72", + "type": "image\/png", + "density": "1.5" + }, + { + "src": "\/android-icon-96x96.png", + "sizes": "96x96", + "type": "image\/png", + "density": "2.0" + }, + { + "src": "\/android-icon-144x144.png", + "sizes": "144x144", + "type": "image\/png", + "density": "3.0" + }, + { + "src": "\/android-icon-192x192.png", + "sizes": "192x192", + "type": "image\/png", + "density": "4.0" + } + ] +} \ No newline at end of file diff --git a/public/img/favicons/ms-icon-144x144.png b/public/img/favicons/ms-icon-144x144.png new file mode 100644 index 0000000000000000000000000000000000000000..742028798ba5fa3612f29228eac434774c0410e2 GIT binary patch literal 6771 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 NFw`~GsnK$c{4dnb&F}yK literal 0 HcmV?d00001 diff --git a/public/img/favicons/ms-icon-150x150.png b/public/img/favicons/ms-icon-150x150.png new file mode 100644 index 0000000000000000000000000000000000000000..70907d72f1ea4e262ed3ab86fd74575591881e62 GIT binary patch literal 7165 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 OK&(!k`?bWv?dso5pkoLC literal 0 HcmV?d00001 diff --git a/public/img/favicons/ms-icon-70x70.png b/public/img/favicons/ms-icon-70x70.png new file mode 100644 index 0000000000000000000000000000000000000000..b4bf3791ba83c4c6100f1278a60dd2ddfdc57afe GIT binary patch literal 3411 zcmZ{mc{J4f8^^zvEMv`B%X(!iX2upXc4ZBXp&`aH7-M9{Uv=!V=Y0P8+(tTB34l(3000oM zu|AJtdCQ;1!^PS|Aae;U$B8$yHv@pWG`=6$W2~4h3}s~w)V!BoW(D%T)+l=bxTXvM zaV+?NbriP*08|(Ntat+eA{PK8$ayV}hO7ja&jqXVz|qfD)Lx#+I^iW-Uk+n=>%YzN z%@tz+0QK0MH*=00U(CB2B>hn)?vZ2H%GwE+nnP zErBuc{3G5#T=09yP|~t1_Y2kW8J^iK$Ir_fv&%WtC6%RY>vsj@(HM3kD;|$bza zyghq-(1%A=p7YjT>ooM)sAK5bxqD$6f@bFg#1>02NMY}-zf5+pGc}78&*AsM`PX4auRhrQvJ+{kB_z6y7FrpoboRa{H?{;At_A)rtzUCJ{*Oh!#otC-!=~re+PzD9&g;Oo_ zRdVW9yOD9N0POKqPt;f1cEoIdxeZ>;Jc&$Ptt^mMW7e6@y&Ex>pBL%Bkeg>H!*}d% zNX@6wzJ)tqK;1g`hfO6@- zvk-VfCSLLNY<>Gy-?a)zQtH*(ozNyfI>v%fm&2#}r8?{Kev6TDckwEj0*ute%YEiB ziRBmE&8*p+>~R63)#OH&bo#dyBA1k!n8%motRFl+sj6HTu@#h>!bg7zI`NbqA~Jl* z-0}CR-{wfKdf6g%xMHt?3*7ix)DRKJx}|YZi9TzuE1?M%VK^Oi&O25!DV~uFa<$jp z|9m4V(RnwgYxD#-#!5#Dmz37E0mXj3t{?sO!CY#<*5s9~_EPc}XORz0+$q`C@JPz% zl}h?c>OsdV^kX;%N zirZ#adc(9AYb0G)UlgOkHDEEef7&crD?Oyt%;r?ERj4P0`7>6sx86d%(J4l`x40g? ztQ~WJ^lwn^q+BXhEpvxCboWtu9+yOZXs%tk_Mqu`W&r~xzAdOEV^>hrbbq)ykKVQr zl%j=$P>;bqN-4e6$DI`&tihso`GbIq+ASVCyTT6}dY{abBSzjCHZ z=ZYL7J0EVUX+u&l6GQ@BRx=yrBI2jY`g2vpwWUpxv?|3m+NB^~K6?(~^tdTZg4A2J zM3J13cOFq^mgV9k{!-cuy&iR3XXM_YXPaW!x%2WHI_2aG184LU&^^W?oNI&jWLK_uz`NpE6to<&m zRRCfvg!bf}2xpYU(j=zsUWxfCoowt(TqiI4$R}5B8wl}6??lfxqBE*)k*--Ny(pH? z)8>}N9BahPtCxoONE%N%9H2vC7x4;asryduAuZXyNHnO?lW%<}pW0qN+68}cvb;Ad zyjLulPqsnq$)cp)llatd{HUa~1Ka!<#y}>^NtJXcAv7w?R#6!qBG9_(Djk(l!~8YS z&{I)dn^Xf&&q${khmt+MS1*VqpR?}TI1ne?Du}P$0OJq!M&5jlm`ZgD`SrI+QfV~) z4|Xkx8&f)Hxnc9EDeXb^DOrUO&Cy9CFYGpCp}s{$X72=8Ui%MlL`$OO%>2OYtO;ZM z+hcHm3iTs-#BMMXEhrC9sUh~MycS66*H1k^TeymyC|Khdr9Oz2lF~#8^zx=zc@J+z zM+q_RdxWkAO+t*^$_JZ)vc~kkhH3HXmb=n|xi3F`^-RKh<$Q}ZbqE|_`~KVR4A0~) z%=x}lQJnSp9veo<;IJV7g-Ftlw!BM!a;3cJFUS7^b6T&455ee#0iyM@r#|MBBMUKlYRd*sBaql(b?>Z;){XwLvwL3p^hv_Rv&_uF;z5wnfykQP z6p>%N|^klmxeAqXHBoW$)J$L2)6 zTvzwQ9p`10*8jLc>duKc3+C*jZNE%-1bAR{fv3~$btFv$Y9O5_dtq9+WgGtCEfLmu z+wG71VAa(4UJQrzy~ujLe8WZj4sZ9V&!|Tv#SnwjmQ&{+4rvrcn`y?B?X{zJl*@&a zIl)K2LscEvc!k{GsHpP7NGeO>$uJ{2;eOM!&$#V<5JKYBZyH%m@#Xlytby#}3qsWG zPdx)Eci%YF+&iiiE_Xx%d|#C}>~2Q;RWmskcj=HVI%W2|Qy)711?p@$0AlCjn)R03JU!KJ zI5c%3E$0#Hs@`&W=fPv;sg`da>cgNHxkrd}{O1Qti%Jyd9I$iV#^RBRsyT@+6D8@^ zc-!k}$IKH{wFfz{G8mI~hTrgZs7Oy{*S+`ZodKuGjmUr!i`g+CXv*f|sPabCE>U(9 z)7u2NhRd!Alz4u$v6^s3pSAO`xoneYvbl4jaUpDn)ZwRpky}TANX{iUrA4%S+xesa zh+bLByMFiEY;4&BPQ&aG8zk#%t3~m=e6TN-h$B%D2qX&)12oHzTA}~L{M{3Q2*45W0Te(Jt|bJ7(pZedKXm@hxDfm( z0Y8zUDg_=EBJ~f%o_$3tgp5%9ILAb)AjR#!+o{%wDkS;eEj^hA*>1rYrc<}UqV?O02>R3^EKw)H~$3^ Cd;(_x literal 0 HcmV?d00001 diff --git a/public/img/icon.png b/public/img/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..1b55ea79a1f417a13dc2456d953c837897095d54 GIT binary patch literal 693 zcmV;m0!safP)d zGJ9F5U`2tLLD8au0%=hSJwT`y3GH$fM9`*1WCRriLbd2YQMOXBC{a+#S_DNTdmjID|K~=owb9YCleVZ&4#A07$VvwfEwoGeL!q!5l@ zf}sy^?iSpAE?=oj&Y%=3PeuH>T+b%|7=?R}VM)|Ne%J?}zFNC~0JhZx9Tn@)nxIgs z3uAgEeVDg5FcpcQww2r{W@%Yy@2bZn6=#O6OblSW%%h=>byb?V3z`}&(#xmdbGN!* zhhmM^`x5$I=^{6L?6827h`7klwFQcllplxnl^R3-9KlbNIXs?~MFoO0Ypg!o3H41- zxgWld=?yjrWvydl5dv>$*!Is5P)IM`|# zYP<@^&O^^2j0;UkB2!>N$3UlkOD3&3nuO#CjC_OcLF-GDKwja3eMt3)l77h$X5+2U>!eT(Zjva(&}I297!=Y`~Rv*rblJ zVik_bH|AE@b)M6KTDzQOYgVw)7_!phcTV(;>$LX;`qEW`T&|BaH5uMbOHZYl?&{_C be*p#nSDe4i`M2WT00000NkvXXu0mjfT{b}b literal 0 HcmV?d00001 diff --git a/public/img/logo-256.png b/public/img/logo-256.png new file mode 100644 index 0000000000000000000000000000000000000000..4bd12703a72787b9417dfb76e2699768d0fd4a28 GIT binary patch literal 8240 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 R;7(Ib~ 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 Q5`T?>KQ!(rx#k@De;06s<^TWy literal 0 HcmV?d00001 diff --git a/public/img/logo/logo-64.png b/public/img/logo/logo-64.png new file mode 100644 index 0000000000000000000000000000000000000000..1f8064fbcc4f7b60cb4652e54d906b581bb7bca2 GIT binary patch literal 2483 zcmV;k2~75hP)2=xOOmSg>G*We)nAIQtqHDCw46)2_%j47TEaerU{IC313O@F}~f7^{! zIev8dCX5CynvC^N--M?sry6QM2##*G}(Q)w6p(M4Orhj2#DdWi@7Z zoW)o7H)D&hstgMrT!y-eY49VYdr)QCyFClMIFA6n+}Mnt(YPNcd^gr&!}2R}v5$QT zz_Y}xC@2EXb)w8aha6sRuCRb^2~EyS=3QjaJYDky&hJZY zI>(>vZ}LYZ-;Z50k4D~bu6gS4m<4H3B~LDaPs{+XyuBS@PV2h}KJKI4@c~Q$q}2@Z z7`#{lc1OuY@GL&}nBe2XG4k zi$M7Vpt6h(3XA2XbR!^1RG&NGV>9sm=Mb%(lP2Dp8H0c305x|3|7?QirKo@e+f-oj zJYe}EGDu|_Ht7^R^}p$$-Um3H34Dg^Ha&8RZgKMrQZotTc36TC(ZzE9YQeKDLeNAzxo}p z<`%l>QjG$t439c_?LvbINmk$dO<=)l;N;n%JHCSIJaL~8LwbYqwSKf6`0GyKl|NE+ zXtOrL#xCZXH}i?t6hGfYTYzDt5R2TUgq9g8X^B@&P8{qm48zKD3kB~`!! zD}hE*gV)wr8{orc3Y*7-S65jAn(Il*h*WzfB|22zF(QrH35*#Hy!I$CX}oz`{banB zle&b8aui^2Cyf;qM@G5)jR0=bLYc2*3QkdJi!@QaKvw^a511(ls0$Btf zQ-5(asL4Eircsg`0hiJ@|u)&KTcsY84#gtj64La_+!w;CZ^EideZ`9IBk9vRogHti;QXbBRFQ3NC*Bi)`LVx|ku>?+^6NhRk8A}}}*4c3!_)4jq0a3O7YMv|skJaKXa*jWE z7^o&K^4u>)!f22QDiI+!cVMz8mD@>(t=j-By-&zw$8U^N&(mo! zM@UYwlQhK{qQU3RJ2S*vt5%!vi z+c!1=e|jHi*kjKKb#DQ;EFoSnPZt%2WeGSTLU92kdy-!OloJ1+e<^S;Y5eUQfwzA_ zM5n}Flbg2cyqc06&Jy@2(x}0RJiD2lDFC|oV7L_ zOTcy;+%UuqsxKq2e~oo>Cy7V}gEnS?X&B5FcqhL}j%~pl>t=Xvpf7A6d_oMdEYAXk z-?Wos;9K!Ieh1PXpZ6sYKPO-fyRDlWO$xHG07Jj)#Im#m7;_0cAI;Ig-zgma<{j%M zXOb-T2ax`CALi8(ko$y#@|HMyBw|Aj>z|E3pCg_}fyf8&^<1|JSaQE)dKTsC%M1~~ z78A^r_C^I@4vKGv{*R{W_B}QRKMtG;Cl?9}kX#WSY7^Oo_65#%iuabCmOH)= zOy)0MbvYAk$@u^$vw%kX)G1(Fqj=ZYN#VOc{BWyWei87*JrF5%hiX+l3eem+dcrw) zx64&?Ni)0*1d44WMooQyLTEa4Z1{kW9|Nqu5mk$sbr{Frb_^#1COmVQC<-7 z{GDyU;x)-%uP3Ryas?TwOKg;0`a?3(p~U?PA~f4xMe6DaKfga@a8`O{RlwNpm4d5Z^tiF!d;N|DhHneFw_Tl9t$K^JmJ zP2_|sYpQWE|3{_jHuDz=JU=$qcRSAFl3C@bC@ePQ__BTOpH~;_u002ovPDHLkV1kPao2dW* literal 0 HcmV?d00001 diff --git a/routes/baseActionsRouter.js b/routes/baseActionsRouter.js new file mode 100644 index 0000000..68c08af --- /dev/null +++ b/routes/baseActionsRouter.js @@ -0,0 +1,209 @@ +var express = require('express'); +var router = express.Router(); +var util = require('util'); +var moment = require('moment'); +var utils = require('./../app/utils'); +var md5 = require("md5"); +var env = require("./../app/env"); +var bitcoin = require("bitcoin"); +var rpcApi = require("./../app/rpcApi") + +router.get("/", function(req, res) { + if (!req.session.host) { + if (req.cookies['rpc-host']) { + res.locals.host = req.cookies['rpc-host']; + } + + if (req.cookies['rpc-port']) { + res.locals.port = req.cookies['rpc-port']; + } + + if (req.cookies['rpc-username']) { + res.locals.username = req.cookies['rpc-username']; + } + + res.render("connect"); + res.end(); + + return; + } + + var client = global.client; + + client.cmd('getinfo', function(err, result, resHeaders) { + if (err) { + return console.log(err); + } + + res.locals.result = result; + + var promises = []; + if (result.blocks) { + for (var i = 0; i < 10; i++) { + promises.push(rpcApi.getBlockByHeight(result.blocks - i)); + } + } + + Promise.all(promises).then(function() { + res.locals.latestBlocks = arguments[0]; + + res.render("index"); + }); + }); +}); + +router.post("/connect", function(req, res) { + var host = req.body.host; + var port = req.body.port; + var username = req.body.username; + var password = req.body.password; + + res.cookie('rpc-host', host); + res.cookie('rpc-port', port); + res.cookie('rpc-username', username); + + req.session.host = host; + req.session.port = port; + req.session.username = username; + + var client = new bitcoin.Client({ + host: host, + port: port, + user: username, + pass: password, + timeout: 30000 + }); + + console.log("created client: " + client); + + global.client = client; + + req.session.userMessage = "Connected via RPC: " + username + " @ " + host + ":" + port; + req.session.userMessageType = "success"; + + res.redirect("/"); +}); + +router.get("/block-height/:blockHeight", function(req, res) { + var client = global.client; + + var blockHeight = parseInt(req.params.blockHeight); + + res.locals.blockHeight = blockHeight; + + res.locals.result = {}; + + var limit = 20; + var offset = 0; + + if (req.query.limit) { + limit = parseInt(req.query.limit); + } + + if (req.query.offset) { + offset = parseInt(req.query.offset); + } + + res.locals.limit = limit; + res.locals.offset = offset; + res.locals.paginationBaseUrl = "/block-height/" + blockHeight; + + client.cmd('getblockhash', blockHeight, function(err, result, resHeaders) { + if (err) { + return console.log(err); + } + + res.locals.result.getblockhash = result; + + rpcApi.getBlockData(client, result, limit, offset).then(function(result) { + res.locals.result.getblock = result.getblock; + res.locals.result.transactions = result.transactions; + res.locals.result.txInputsByTransaction = result.txInputsByTransaction; + + res.render("block-height"); + }); + }); +}); + +router.get("/block/:blockHash", function(req, res) { + var blockHash = req.params.blockHash; + + res.locals.blockHash = blockHash; + + res.locals.result = {}; + + var limit = 20; + var offset = 0; + + if (req.query.limit) { + limit = parseInt(req.query.limit); + } + + if (req.query.offset) { + offset = parseInt(req.query.offset); + } + + res.locals.limit = limit; + res.locals.offset = offset; + res.locals.paginationBaseUrl = "/block/" + blockHash; + + rpcApi.getBlockData(client, blockHash, limit, offset).then(function(result) { + res.locals.result.getblock = result.getblock; + res.locals.result.transactions = result.transactions; + res.locals.result.txInputsByTransaction = result.txInputsByTransaction; + + res.render("block"); + }); +}); + +router.get("/tx/:transactionId", function(req, res) { + var txid = req.params.transactionId; + + var output = -1; + if (req.query.output) { + output = parseInt(req.query.output); + } + + res.locals.txid = txid; + res.locals.output = output; + + res.locals.result = {}; + + rpcApi.getRawTransaction(txid).then(function(rawTxResult) { + res.locals.result.getrawtransaction = rawTxResult; + + client.cmd('getblock', rawTxResult.blockhash, function(err3, result3, resHeaders3) { + res.locals.result.getblock = result3; + + var txids = []; + for (var i = 0; i < rawTxResult.vin.length; i++) { + if (!rawTxResult.vin[i].coinbase) { + txids.push(rawTxResult.vin[i].txid); + } + } + + rpcApi.getRawTransactions(txids).then(function(txInputs) { + res.locals.result.txInputs = txInputs; + + res.render("transaction"); + }); + }); + }); +}); + +router.get("/terminal", function(req, res) { + res.render("terminal"); +}); + +router.post("/terminal", function(req, res) { + client.cmd(req.body.cmd, function(err, result, resHeaders) { + console.log(result); + console.log(err); + console.log(resHeaders); + + res.send(JSON.stringify(result, null, 4)); + }); +}); + + +module.exports = router; diff --git a/views/block-height.pug b/views/block-height.pug new file mode 100644 index 0000000..17f58d1 --- /dev/null +++ b/views/block-height.pug @@ -0,0 +1,19 @@ +extends layout + +block headContent + title Block #{blockHeight} + +block content + ol(class="breadcrumb") + li(class="breadcrumb-item") + a(href="/") + strong #{host} + span :#{port} + li(class="breadcrumb-item active") + a(href=("/block-height/" + blockHeight)) Block #{blockHeight} + + h1(class="h2") Block + small ##{blockHeight} + hr + + include includes/block-content.pug \ No newline at end of file diff --git a/views/block.pug b/views/block.pug new file mode 100644 index 0000000..db145c5 --- /dev/null +++ b/views/block.pug @@ -0,0 +1,19 @@ +extends layout + +block headContent + title Block #{blockHash} + +block content + ol(class="breadcrumb") + li(class="breadcrumb-item") + a(href="/") + strong #{host} + span :#{port} + li(class="breadcrumb-item active") + a(href=("/block/" + blockHash)) Block #{result.getblock.height} + + h1 Block + small(style="width: 100%;") ##{result.getblock.height} + hr + + include includes/block-content.pug \ No newline at end of file diff --git a/views/connect.pug b/views/connect.pug new file mode 100644 index 0000000..14267b0 --- /dev/null +++ b/views/connect.pug @@ -0,0 +1,37 @@ +extends layout + +block content + h1 BTC RPC Explorer + hr + + :markdown-it + This tool is intended to be a simple, stateless, self-hosted explorer for the Bitcoin blockchain, driven by RPC calls to your own bitcoind node. Because it is stateless, it is easy to run but lacks some (many?) of the features of other explorers. + + Start by connecting to your full, archiving bitcoind node. Make sure that the node you'll be connecting to has `txindex=1` set. + + form(method="post", action="/connect") + div(class="card") + div(class="card-block") + h4(class="card-title") RPC Connect + + hr + + div(class="form-group") + label(for="input-host") Host / IP + input(type="text", name="host", class="form-control", value=host) + + div(class="form-group") + label(for="input-host") Port + input(type="text", name="port", class="form-control", value=port) + + div(class="form-group") + label(for="input-host") Username + input(type="text", name="username", class="form-control", value=username) + + div(class="form-group") + label(for="input-host") Password + input(type="password", name="password", class="form-control") + + hr + + input(type="submit", class="btn btn-primary btn-block" value="Connect") \ No newline at end of file diff --git a/views/error.pug b/views/error.pug new file mode 100644 index 0000000..bd325bd --- /dev/null +++ b/views/error.pug @@ -0,0 +1,21 @@ +extends layout + +block content + ol(class="breadcrumb") + li(class="breadcrumb-item") + a(href="/") + strong #{host} + span :#{port} + li(class="breadcrumb-item active") Error + + h1 Error + hr + + if (message) + p !{message} + else + p Unknown error + + if (error) + h2 #{error.status} + pre #{error.stack} diff --git a/views/includes/block-content.pug b/views/includes/block-content.pug new file mode 100644 index 0000000..445eec2 --- /dev/null +++ b/views/includes/block-content.pug @@ -0,0 +1,227 @@ +ul(class='nav nav-tabs') + li(class="nav-item") + a(data-toggle="tab", href="#tab-summary", class="nav-link active", role="tab") Summary + li(class="nav-item") + a(data-toggle="tab", href="#tab-raw", class="nav-link", role="tab") Raw + +hr + +- var txCount = result.getblock.tx.length; + +div(class="tab-content") + div(id="tab-summary", class="tab-pane active", role="tabpanel") + if (result.getblock.hash == "000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f") + div(class="alert alert-success", style="padding-bottom: 0;") + h4(class="alert-heading h5") This is the Bitcoin Genesis Block! + :markdown-it + This is the first block in the Bitcoin blockchain. This block was mined by Bitcoin's anonymous/pseudonymous creator Satoshi Nakamoto. If you're interested, you can [read more about the genesis block](https://en.bitcoin.it/wiki/Genesis_block). + + table(class="table") + tr + th(class="table-active properties-header") Block Hash + td + a(href=("/block/" + result.getblock.hash)) #{result.getblock.hash} + + tr + th(class="table-active properties-header") Previous Block Hash + td + if (result.getblock.previousblockhash) + a(href=("/block/" + result.getblock.previousblockhash)) #{result.getblock.previousblockhash} + + else if (result.getblock.hash == "000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f") + span N/A - This is the + a(href="https://en.bitcoin.it/wiki/Genesis_block") Bitcoin Genesis Block + + tr + th(class="table-active properties-header") Next Block Hash + td + if (result.getblock.nextblockhash) + a(href=("/block/" + result.getblock.nextblockhash)) #{result.getblock.nextblockhash} + else + span None + span(class="text-muted") (latest block) + + tr + th(class="table-active properties-header") Block Height + td + a(href=("/block-height/" + result.getblock.height)) #{result.getblock.height} + + tr + th(class="table-active properties-header") Timestamp + td #{moment.utc(new Date(result.getblock.time * 1000)).format("Y-MM-DD HH:mm:ss")} (utc) + + tr + th(class="table-active properties-header") Transaction Count + td #{result.getblock.tx.length.toLocaleString()} + + tr + th(class="table-active properties-header") Size + td + span #{result.getblock.size.toLocaleString()} bytes + br + span(class="text-muted") (weight: #{result.getblock.weight.toLocaleString()}) + + tr + th(class="table-active properties-header") Confirmations + td + if (result.getblock.confirmations < 6) + strong(class="text-warning") #{result.getblock.confirmations} + else + strong(class="text-success") #{result.getblock.confirmations.toLocaleString()} + + tr + - var scales = [ {val:1000000000000000, name:"quadrillion"}, {val:1000000000000, name:"trillion"}, {val:1000000000, name:"billion"}, {val:1000000, name:"million"} ]; + - var scaleDone = false; + th(class="table-active properties-header") Difficulty + td + span #{result.getblock.difficulty.toLocaleString()} + each item in scales + if (!scaleDone) + - var fraction = Math.floor(result.getblock.difficulty / item.val); + if (fraction >= 1) + - scaleDone = true; + span(class="text-muted") (#{fraction} #{item.name}) + + + tr + th(class="table-active text-right") Version + td 0x#{result.getblock.versionHex} + span(class="text-muted") (decimal: #{result.getblock.version}) + + tr + th(class="table-active text-right") Nonce + td #{result.getblock.nonce} + + tr + th(class="table-active text-right") Bits + td #{result.getblock.bits} + + tr + th(class="table-active text-right") Merkle Root + td #{result.getblock.merkleroot} + + tr + th(class="table-active text-right") Chainwork + td #{result.getblock.chainwork} + + hr + h2(class="h4") Transactions (#{txCount.toLocaleString()}) + small - Showing + if (txCount <= limit) + span all + else + span #{(offset + 1)} - #{Math.min(offset + limit, txCount)} + + each tx, txIndex in result.transactions + //pre + // code #{JSON.stringify(tx, null, 4)} + div(class="card mb-3") + div(class="card-header") + if (tx && tx.txid) + a(href=("/tx/" + tx.txid), class="monospace") #{tx.txid} + div(class="card-block") + //pre + // code #{JSON.stringify(result.txInputsByTransaction[tx.txid], null, 4)} + if (true) + div(class="row") + div(class="col-md-6") + h6 Input (#{tx.vin.length.toLocaleString()}) + if (result.txInputsByTransaction[tx.txid]) + - var totalInputValue = new Decimal(0); + table(class="table mb-0") + thead + tr + th(style="width: 40px;") + th Input + th Amount + tbody + + if (tx.vin[0].coinbase) + - totalInputValue = totalInputValue.plus(new Decimal(utils.getBlockReward(result.getblock.height))); + tr + th 1 + td + span(class="tag monospace") coinbase + span(class="monospace") Newly minted BTC + td #{utils.getBlockReward(result.getblock.height)} + + each txInput, txInputIndex in result.txInputsByTransaction[tx.txid] + if (txInput) + - var vout = txInput.vout[tx.vin[txInputIndex].vout]; + + tr + th #{(txInputIndex + 1)} + //pre + // code #{JSON.stringify(txInput)} + + td + if (vout.scriptPubKey && vout.scriptPubKey.addresses) + span(class="monospace") #{vout.scriptPubKey.addresses[0]} + br + span(class="monospace text-muted") via tx + a(href=("/tx/" + txInput.txid + "#output-" + tx.vin[txInputIndex].vout), class="monospace") #{txInput.txid.substring(0, 14)}..., Output ##{tx.vin[txInputIndex].vout + 1} + td + if (vout.value) + - totalInputValue = totalInputValue.plus(new Decimal(vout.value)); + span(class="monospace") #{vout.value} + + tr + td + td + td + strong(class="monospace") #{totalInputValue} + + + div(class="col-md-6") + h6 Output (#{tx.vout.length.toLocaleString()}) + - var totalOutputValue = new Decimal(0); + table(class="table mb-0") + thead + tr + th + th Output + th Amount + + tbody + each vout, voutIndex in tx.vout + tr + th #{(voutIndex + 1)} + td + if (vout.scriptPubKey) + if (vout.scriptPubKey.addresses) + a(id="output-" + voutIndex) + span(class="monospace") #{vout.scriptPubKey.addresses[0]} + + else if (vout.scriptPubKey.hex && vout.scriptPubKey.hex.startsWith('6a24aa21a9ed')) + span(class="monospace") Segregated Witness committment - + a(href="https://github.com/bitcoin/bips/blob/master/bip-0141.mediawiki#commitment-structure") docs + i(class="fa fa-external-link") + td + span(class="monospace") #{vout.value} + - totalOutputValue = totalOutputValue.plus(vout.value); + + tr + td + td + td + strong(class="monospace") #{totalOutputValue} + //pre + // code #{JSON.stringify(tx, null, 4)} + + if (txCount > limit) + - var pageNumber = offset / limit + 1; + - var pageCount = Math.floor(txCount / limit); + - if (pageCount * limit < txCount) { + - pageCount++; + - } + - var paginationUrlFunction = function(x) { + - return paginationBaseUrl + "?limit=" + limit + "&offset=" + ((x - 1) * limit); + - } + + hr + + include ./pagination.pug + + div(id="tab-raw", class="tab-pane", role="tabpanel") + pre + code #{JSON.stringify(result.getblock, null, 4)} \ No newline at end of file diff --git a/views/includes/pagination.pug b/views/includes/pagination.pug new file mode 100644 index 0000000..4f216a8 --- /dev/null +++ b/views/includes/pagination.pug @@ -0,0 +1,26 @@ +- var pageNumbers = []; +- for (var x = 1; x <= pageCount; x++) { + - pageNumbers.push(x); +- } + +nav(aria-label="Page navigation") + ul(class="pagination pagination-lg justify-content-center") + li(class="page-item", class=(pageNumber == 1 ? "disabled" : false)) + a(class="page-link", href=(pageNumber == 1 ? "javascript:void(0)" : paginationUrlFunction(pageNumber - 1)), aria-label="Previous") + span(aria-hidden="true") « + each x, xIndex in pageNumbers + if (x >= (pageNumber - 4) && x <= (pageNumber + 4) || xIndex == 0 || xIndex == (pageNumbers.length - 1)) + li(class="page-item", class=(x == pageNumber ? "active" : false)) + a(class="page-link", href=(paginationUrlFunction(x))) #{x} + + if (x == 1 && pageNumber > 6) + li(class="page-item disabled") + a(class="page-link", href="javascript:void(0)") ... + + else if (x == (pageCount - 1) && pageNumber < (pageCount - 5)) + li(class="page-item disabled") + a(class="page-link", href="javascript:void(0)") ... + + li(class="page-item", class=(pageNumber == pageCount ? "disabled" : false)) + a(class="page-link", href=(pageNumber == pageCount ? "javascript:void(0)" : paginationUrlFunction(pageNumber + 1)), aria-label="Next") + span(aria-hidden="true") » \ No newline at end of file diff --git a/views/index.pug b/views/index.pug new file mode 100644 index 0000000..d4672c7 --- /dev/null +++ b/views/index.pug @@ -0,0 +1,46 @@ +extends layout + +block headContent + title Home + +block content + ol(class="breadcrumb") + li(class="breadcrumb-item") + a(href="/") + strong #{host} + span :#{port} + + h1 BTC RPC Explorer + hr + + ul(class='nav nav-tabs') + li(class="nav-item") + a(data-toggle="tab", href="#tab-latest-tx", class="nav-link active", role="tab") Latest Blocks + li(class="nav-item") + a(data-toggle="tab", href="#tab-getinfo", class="nav-link", role="tab") Node Info + + hr + + div(class="tab-content") + div(id="tab-latest-tx", class="tab-pane active", role="tabpanel") + h3 Latest Blocks + table(class="table table-striped") + thead + tr + th Height + th Timestamp (utc) + th Transactions + th Size (bytes) + tbody + each block in latestBlocks + tr + td + a(href=("/block-height/" + block.getblock.height)) #{block.getblock.height} + td #{moment.utc(new Date(parseInt(block.getblock.time) * 1000)).format("Y-MM-DD HH:mm:ss")} + td #{block.getblock.tx.length.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",")} + td #{block.getblock.size.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",")} + + div(id="tab-getinfo", class="tab-pane", role="tabpanel") + h3 Node Info (getinfo) + pre + code #{JSON.stringify(result, null, 4)} \ No newline at end of file diff --git a/views/layout.pug b/views/layout.pug new file mode 100644 index 0000000..a236a92 --- /dev/null +++ b/views/layout.pug @@ -0,0 +1,63 @@ +doctype html +html + head + meta(charset="utf-8") + meta(name="viewport", content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=0, shrink-to-fit=no") + + //link(rel="stylesheet", href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css") + link(rel="stylesheet", href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/css/bootstrap.min.css", integrity="sha384-rwoIResjU2yc3z8GV/NPeZWAv56rSmLldC3R/AZzGRnGxQQKnKkoFVhFQhNUwEyJ", crossorigin="anonymous") + link(rel="stylesheet", href="https://netdna.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css") + link(rel="stylesheet", href="https://fonts.googleapis.com/css?family=Lato|Open+Sans") + link(rel="stylesheet", href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css") + link(rel='stylesheet', href='/css/styling.css') + + link(rel="icon", type="image/png", sizes="32x32", href="/img/favicons/favicon-32x32.png") + link(rel="icon", type="image/png", sizes="96x96", href="/img/favicons/favicon-96x96.png") + link(rel="icon", type="image/png", sizes="16x16", href="/img/favicons/favicon-16x16.png") + + block headContent + title BTC RPC Explorer + + body + nav(class="navbar navbar-toggleable-md navbar-inverse bg-inverse mb-4") + div(class="container") + div(class="navbar-header") + button(type="button", class="navbar-toggler navbar-toggler-right", data-toggle="collapse", data-target="#navbarNav") + span(class="navbar-toggler-icon") + a(class="navbar-brand", href="/") + span + img(src="/img/logo/logo-64.png", class="header-image") + span BTC RPC Explorer + div(class="collapse navbar-collapse", id="navbarNav") + if (client) + ul(class="navbar-nav") + li(class="nav-item") + a(href="/terminal", class="nav-link") RPC Terminal + + div(class="container") + if (userMessage) + div(class="alert", class=(userMessageType ? ("alert-" + userMessageType) : "alert-info"), role="alert") + span !{userMessage} + + block content + + div(style="margin-bottom: 30px;") + + script(src="https://code.jquery.com/jquery-3.2.1.min.js", integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4=", crossorigin="anonymous") + script(src="https://cdnjs.cloudflare.com/ajax/libs/tether/1.4.0/js/tether.min.js", integrity="sha384-DztdAPBWPRXSA/3eYEEUWrWCy7G5KFbe8fFjk5JAIxUYHKkDx6Qin1DkWx51bBrb", crossorigin="anonymous") + script(src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/js/bootstrap.min.js", integrity="sha384-vBWWzlZJ8ea9aCX4pEW3rVHjgjt7zpkNpZk+02D9phzyeVkE+jo0ieGizqPLForn", crossorigin="anonymous") + + script(src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/highlight.min.js") + + script(src="https://cdn.ravenjs.com/3.9.1/raven.min.js") + script. + Raven.config('https://0bf20e8357a748cab8aa9d35c0f790dd@sentry.io/130800').install(); + + $(document).ready(function() { + $('[data-toggle="tooltip"]').tooltip(); + $('[data-toggle="popover"]').popover({html:true}); + }); + + hljs.initHighlightingOnLoad(); + + block endOfBody diff --git a/views/terminal.pug b/views/terminal.pug new file mode 100644 index 0000000..991dfdd --- /dev/null +++ b/views/terminal.pug @@ -0,0 +1,54 @@ +extends layout + +block content + h1 Terminal + hr + + :markdown-it + Use this interactive terminal to send RPC commands to your node. Results will be shown inline. + + div(class="card mb-3") + div(class="card-block") + form(id="terminal-form") + div(class="form-group") + label(for="input-cmd") Command + input(type="text", id="input-cmd", name="cmd", class="form-control") + + input(type="submit", class="btn btn-primary btn-block", value="Send") + + hr + + div(id="terminal-output") + +block endOfBody + script. + $(document).ready(function() { + $("#terminal-form").submit(function(e) { + e.preventDefault(); + + var cmd = $("#input-cmd").val() + + var postData = {}; + postData.cmd = cmd; + + $.post( + "/terminal", + postData, + function(response, textStatus, jqXHR) { + var t = new Date().getTime(); + + $("#terminal-output").prepend("

"); + console.log(response); + + $("#output-" + t + " pre code").each(function(i, block) { + hljs.highlightBlock(block); + }); + + return false; + }) + .done(function(data) { + }); + + return false; + }); + }); \ No newline at end of file diff --git a/views/transaction.pug b/views/transaction.pug new file mode 100644 index 0000000..a73f4f2 --- /dev/null +++ b/views/transaction.pug @@ -0,0 +1,271 @@ +extends layout + +block headContent + title Transaction #{txid} + style. + .field { + word-wrap: break-word; + } + + +block content + ol(class="breadcrumb") + li(class="breadcrumb-item") + a(href="/") + strong #{host} + span :#{port} + li(class="breadcrumb-item") + a(href=("/block/" + result.getrawtransaction.blockhash)) Block #{result.getblock.height} + li(class="breadcrumb-item active") Transaction + + h1(class="h2") Transaction + br + small #{txid} + hr + + ul(class='nav nav-tabs') + li(class="nav-item") + a(data-toggle="tab", href="#tab-summary", class="nav-link active", role="tab") Summary + li(class="nav-item") + a(data-toggle="tab", href="#tab-scripts", class="nav-link", role="tab") Scripts + li(class="nav-item") + a(data-toggle="tab", href="#tab-raw", class="nav-link", role="tab") Raw + + div(class="mb-3") + + - DecimalRounded = Decimal.clone({ precision: 4, rounding: 2 }) + + - var totalInputValue = new Decimal(0); + if (result.getrawtransaction.vin[0].coinbase) + - totalInputValue = totalInputValue.plus(new Decimal(utils.getBlockReward(result.getblock.height))); + each txInput, txInputIndex in result.txInputs + if (txInput) + - var vout = txInput.vout[result.getrawtransaction.vin[txInputIndex].vout]; + if (vout.value) + - totalInputValue = totalInputValue.plus(new Decimal(vout.value)); + + - var totalOutputValue = new Decimal(0); + each vout, voutIndex in result.getrawtransaction.vout + - totalOutputValue = totalOutputValue.plus(new Decimal(vout.value)); + + div(class="tab-content") + div(id="tab-summary", class="tab-pane active", role="tabpanel") + if (txid == "4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b") + div(class="alert alert-warning", style="padding-bottom: 0;") + h4(class="alert-heading h5") This transaction doesn't really exist! + :markdown-it + This is the coinbase transaction of the [Bitcoin Genesis Block](/block/000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f). For more background about this special-case transaction, you can read [this brief discussion](https://github.com/bitcoin/bitcoin/issues/3303) among some of the [Bitcoin Core](https://bitcoin.org) developers. + + table(class="table") + tr + th(class="table-active properties-header") Included in Block + td + a(href=("/block/" + result.getrawtransaction.blockhash)) #{result.getrawtransaction.blockhash} + span(class="text-muted") (#{result.getblock.height}) + + tr + th(class="table-active properties-header") Timestamp + td #{moment.utc(new Date(result.getrawtransaction["time"] * 1000)).format("Y-MM-DD HH:mm:ss")} (utc) + + //tr + // th(class="table-active properties-header") Transaction ID + // td #{txid} + + tr + th(class="table-active properties-header") Version + td #{result.getrawtransaction.version} + + tr + th(class="table-active properties-header") Size + td + span #{result.getrawtransaction.size.toLocaleString()} bytes + if (result.getrawtransaction.vsize != result.getrawtransaction.size) + span ( + a(href="https://github.com/bitcoin/bips/blob/master/bip-0141.mediawiki#Transaction_size_calculations") virtual size + span : #{result.getrawtransaction.vsize}) + + if (result.getrawtransaction.locktime > 0) + tr + th(class="table-active properties-header") + span Locktime + td + if (result.getrawtransaction.locktime < 500000000) + span Spendable in block + a(href=("/block-height/" + result.getrawtransaction.locktime)) #{result.getrawtransaction.locktime} + span or later - ( + a(href="https://bitcoin.org/en/developer-guide#locktime-and-sequence-number", title="Locktime documentation") + span docs + i(class="fa fa-external-link") + span ) + else + span Spendable after #{moment.utc(new Date(result.getrawtransaction.locktime * 1000)).format("Y-MM-DD HH:mm:ss")} (utc) - ( + a(href="https://bitcoin.org/en/developer-guide#locktime-and-sequence-number", title="Locktime documentation") + span docs + i(class="fa fa-external-link") + span ) + + tr + th(class="table-active properties-header") Confirmations + td + if (result.getrawtransaction.confirmations == 0) + strong(class="text-danger") #{result.getrawtransaction.confirmations} (Unconfirmed!) + else if (result.getrawtransaction.confirmations < 6) + strong(class="text-warning") #{result.getrawtransaction.confirmations} + else + strong(class="text-success") #{result.getrawtransaction.confirmations.toLocaleString()} + + if (result.getrawtransaction.vin[0].coinbase) + tr + th(class="table-active properties-header") Total Network Fees + td #{new Decimal(totalOutputValue).minus(totalInputValue)} + else + tr + th(class="table-active properties-header") Network Fee Paid + td + strong #{new Decimal(totalInputValue).minus(totalOutputValue)} + span(class="text-muted") (#{totalInputValue} - #{totalOutputValue}) + br + span ~#{new DecimalRounded(totalInputValue).minus(totalOutputValue).dividedBy(result.getrawtransaction.size).times(100000000)} sat/B + + if (result.getrawtransaction.vin[0].coinbase) + div(class="card mb-3") + div(class="card-header") + h2(class="h5 mb-0") Coinbase + div(class="card-block") + h6 Hex + div(style="background-color: #f0f0f0; padding: 5px 10px;", class="mb-3") + span(class="monospace word-wrap") #{result.getrawtransaction.vin[0].coinbase} + + h6 Decoded + div(style="background-color: #f0f0f0; padding: 5px 10px;", class="mb-3") + span(class="monospace word-wrap") #{utils.hex2ascii(result.getrawtransaction.vin[0].coinbase)} + + div(class="card mb-3") + div(class="card-header") + div(class="row") + div(class="col-md-6") + h2(class="h5 mb-0") Input (#{result.getrawtransaction.vin.length.toLocaleString()}) + div(class="col-md-6") + h2(class="h5 mb-0") Output (#{result.getrawtransaction.vout.length.toLocaleString()}) + div(class="card-block") + div(class="row") + div(class="col-md-6") + if (result.txInputs) + table(class="table mb-0") + thead + tr + th(style="width: 40px;") + th Input + th Amount + tbody + + if (result.getrawtransaction.vin[0].coinbase) + tr + th 1 + td + span(class="tag monospace") coinbase + span(class="monospace") Newly minted BTC + td #{utils.getBlockReward(result.getblock.height)} + + each txInput, txInputIndex in result.txInputs + if (txInput) + - var vout = txInput.vout[result.getrawtransaction.vin[txInputIndex].vout]; + + tr + th #{(txInputIndex + 1)} + //pre + // code #{JSON.stringify(txInput)} + + td + if (vout.scriptPubKey && vout.scriptPubKey.addresses) + span(class="monospace") #{vout.scriptPubKey.addresses[0]} + br + span(class="monospace text-muted") via tx + a(href=("/tx/" + txInput.txid + "#output-" + result.getrawtransaction.vin[txInputIndex].vout), class="monospace") #{txInput.txid.substring(0, 14)}..., Output ##{result.getrawtransaction.vin[txInputIndex].vout + 1} + td + if (vout.value) + span(class="monospace") #{vout.value} + + tr + td + td + td + strong(class="monospace") #{totalInputValue} + + + div(class="col-md-6") + table(class="table mb-0") + thead + tr + th + th Output + th Amount + + tbody + each vout, voutIndex in result.getrawtransaction.vout + tr + th #{(voutIndex + 1)} + td + if (vout.scriptPubKey) + if (vout.scriptPubKey.addresses) + a(id="output-" + voutIndex) + span(class="monospace") #{vout.scriptPubKey.addresses[0]} + + else if (vout.scriptPubKey.hex && vout.scriptPubKey.hex.startsWith('6a24aa21a9ed')) + span(class="monospace") Segregated Witness committment - + a(href="https://github.com/bitcoin/bips/blob/master/bip-0141.mediawiki#commitment-structure") docs + i(class="fa fa-external-link") + td + span(class="monospace") #{vout.value} + + tr + td + td + td + strong(class="monospace") #{totalOutputValue} + + div(id="tab-scripts", class="tab-pane", role="tabpanel") + h3 Input Scripts + table(class="table table-striped") + thead + tr + th(style="width: 50px;") + th Script Sig (asm) + tbody + each vin, vinIndex in result.getrawtransaction.vin + tr + th #{vinIndex + 1} + td + if (vin.scriptSig && vin.scriptSig.asm) + span(class="word-wrap monospace") #{vin.scriptSig.asm} + + else if (vin.coinbase) + div(style="line-height: 1.75em;") + span(class="tag") coinbase + br + span(class="word-wrap monospace") #{vin.coinbase} + br + span(class="word-wrap monospace text-muted") (decoded) #{utils.hex2ascii(vin.coinbase)} + + h3 Output Scripts + table(class="table table-striped") + thead + tr + th(style="width: 50px;") + th Script Pub Key (asm) + tbody + each vout, voutIndex in result.getrawtransaction.vout + tr + th #{voutIndex + 1} + td + if (vout.scriptPubKey && vout.scriptPubKey.asm) + span(class="word-wrap monospace") #{vout.scriptPubKey.asm} + + div(id="tab-raw", class="tab-pane", role="tabpanel") + div(class="highlight") + pre + code(class="language-json", data-lang="json") #{JSON.stringify(result.getrawtransaction, null, 4)} + + //pre #{JSON.stringify(result.txInputs, null, 4)} + + \ No newline at end of file