You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
204 lines
6.6 KiB
204 lines
6.6 KiB
var fs = require('fs');
|
|
var crypto = require('crypto');
|
|
var url = require('url');
|
|
|
|
var coins = require("./coins.js");
|
|
var credentials = require("./credentials.js");
|
|
|
|
var currentCoin = process.env.BTCEXP_COIN || "BTC";
|
|
|
|
var rpcCred = credentials.rpc;
|
|
|
|
if (rpcCred.cookie && !rpcCred.username && !rpcCred.password && fs.existsSync(rpcCred.cookie)) {
|
|
console.log(`Loading RPC cookie file: ${rpcCred.cookie}`);
|
|
|
|
[ rpcCred.username, rpcCred.password ] = fs.readFileSync(rpcCred.cookie).toString().split(':', 2);
|
|
|
|
if (!rpcCred.password) {
|
|
throw new Error(`Cookie file ${rpcCred.cookie} in unexpected format`);
|
|
}
|
|
}
|
|
|
|
var cookieSecret = process.env.BTCEXP_COOKIE_SECRET
|
|
|| (rpcCred.password && crypto.createHmac('sha256', JSON.stringify(rpcCred))
|
|
.update('btc-rpc-explorer-cookie-secret').digest('hex'))
|
|
|| "0x000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f";
|
|
|
|
|
|
var electrumXServerUriStrings = (process.env.BTCEXP_ELECTRUMX_SERVERS || "").split(',').filter(Boolean);
|
|
var electrumXServers = [];
|
|
for (var i = 0; i < electrumXServerUriStrings.length; i++) {
|
|
var uri = url.parse(electrumXServerUriStrings[i]);
|
|
|
|
electrumXServers.push({protocol:uri.protocol.substring(0, uri.protocol.length - 1), host:uri.hostname, port:parseInt(uri.port)});
|
|
}
|
|
|
|
["BTCEXP_DEMO", "BTCEXP_PRIVACY_MODE", "BTCEXP_NO_INMEMORY_RPC_CACHE"].forEach(function(item) {
|
|
if (process.env[item] === undefined) {
|
|
process.env[item] = "false";
|
|
}
|
|
});
|
|
|
|
["BTCEXP_NO_RATES", "BTCEXP_UI_SHOW_TOOLS_SUBHEADER", "BTCEXP_SLOW_DEVICE_MODE"].forEach(function(item) {
|
|
if (process.env[item] === undefined) {
|
|
process.env[item] = "true";
|
|
}
|
|
});
|
|
|
|
module.exports = {
|
|
coin: currentCoin,
|
|
|
|
cookieSecret: cookieSecret,
|
|
|
|
privacyMode: (process.env.BTCEXP_PRIVACY_MODE.toLowerCase() == "true"),
|
|
slowDeviceMode: (process.env.BTCEXP_SLOW_DEVICE_MODE.toLowerCase() == "true"),
|
|
demoSite: (process.env.BTCEXP_DEMO.toLowerCase() == "true"),
|
|
queryExchangeRates: (process.env.BTCEXP_NO_RATES.toLowerCase() != "true"),
|
|
noInmemoryRpcCache: (process.env.BTCEXP_NO_INMEMORY_RPC_CACHE.toLowerCase() == "true"),
|
|
|
|
rpcConcurrency: (process.env.BTCEXP_RPC_CONCURRENCY || 10),
|
|
|
|
rpcBlacklist:
|
|
process.env.BTCEXP_RPC_ALLOWALL ? []
|
|
: process.env.BTCEXP_RPC_BLACKLIST ? process.env.BTCEXP_RPC_BLACKLIST.split(',').filter(Boolean)
|
|
: [
|
|
"addnode",
|
|
"backupwallet",
|
|
"bumpfee",
|
|
"clearbanned",
|
|
"createmultisig",
|
|
"createwallet",
|
|
"disconnectnode",
|
|
"dumpprivkey",
|
|
"dumpwallet",
|
|
"encryptwallet",
|
|
"generate",
|
|
"generatetoaddress",
|
|
"getaccountaddrss",
|
|
"getaddressesbyaccount",
|
|
"getbalance",
|
|
"getnewaddress",
|
|
"getrawchangeaddress",
|
|
"getreceivedbyaccount",
|
|
"getreceivedbyaddress",
|
|
"gettransaction",
|
|
"getunconfirmedbalance",
|
|
"getwalletinfo",
|
|
"importaddress",
|
|
"importmulti",
|
|
"importprivkey",
|
|
"importprunedfunds",
|
|
"importpubkey",
|
|
"importwallet",
|
|
"invalidateblock",
|
|
"keypoolrefill",
|
|
"listaccounts",
|
|
"listaddressgroupings",
|
|
"listlockunspent",
|
|
"listreceivedbyaccount",
|
|
"listreceivedbyaddress",
|
|
"listsinceblock",
|
|
"listtransactions",
|
|
"listunspent",
|
|
"listwallets",
|
|
"lockunspent",
|
|
"logging",
|
|
"move",
|
|
"preciousblock",
|
|
"pruneblockchain",
|
|
"reconsiderblock",
|
|
"removeprunedfunds",
|
|
"rescanblockchain",
|
|
"savemempool",
|
|
"sendfrom",
|
|
"sendmany",
|
|
"sendtoaddress",
|
|
"sendrawtransaction",
|
|
"setaccount",
|
|
"setban",
|
|
"setmocktime",
|
|
"setnetworkactive",
|
|
"signmessage",
|
|
"signmessagewithprivatekey",
|
|
"signrawtransaction",
|
|
"signrawtransactionwithkey",
|
|
"stop",
|
|
"submitblock",
|
|
"syncwithvalidationinterfacequeue",
|
|
"verifychain",
|
|
"waitforblock",
|
|
"waitforblockheight",
|
|
"waitfornewblock",
|
|
"walletlock",
|
|
"walletpassphrase",
|
|
"walletpassphrasechange",
|
|
],
|
|
|
|
addressApi:process.env.BTCEXP_ADDRESS_API,
|
|
electrumXServers:electrumXServers,
|
|
|
|
redisUrl:process.env.BTCEXP_REDIS_URL,
|
|
|
|
site: {
|
|
homepage:{
|
|
recentBlocksCount:10
|
|
},
|
|
blockTxPageSize:20,
|
|
addressTxPageSize:10,
|
|
txMaxInput:15,
|
|
browseBlocksPageSize:50,
|
|
addressPage:{
|
|
txOutputMaxDefaultDisplay:10
|
|
},
|
|
valueDisplayMaxLargeDigits: 4,
|
|
header:{
|
|
showToolsSubheader:(process.env.BTCEXP_UI_SHOW_TOOLS_SUBHEADER == "true"),
|
|
dropdowns:[
|
|
{
|
|
title:"Related Sites",
|
|
links:[
|
|
{name: "Bitcoin Explorer", url:"https://explorer.btc21.org", imgUrl:"/img/logo/btc.svg"},
|
|
{name: "LND Admin", url:"https://lnd-admin.chaintools.io", imgUrl:"/img/logo/lnd-admin.png"},
|
|
//{name: "Litecoin Explorer", url:"https://ltc.chaintools.io", imgUrl:"/img/logo/ltc.svg"},
|
|
//{name: "Lightning Explorer", url:"https://lightning.chaintools.io", imgUrl:"/img/logo/lightning.svg"},
|
|
]
|
|
}
|
|
]
|
|
},
|
|
subHeaderToolsList:[0, 1, 4, 9, 6, 7], // indexes in "siteTools" below that are shown in the site "sub menu" (visible on all pages except homepage)
|
|
toolsDropdownIndexList: [0, 1, 4, 9, 3, 2, 5, 6, 7, 8],
|
|
},
|
|
|
|
credentials: credentials,
|
|
|
|
siteTools:[
|
|
/* 0 */ {name:"Node Status", url:"/node-status", desc:"Summary of this node: version, network, uptime, etc.", fontawesome:"fas fa-broadcast-tower"},
|
|
/* 1 */ {name:"Peers", url:"/peers", desc:"Detailed info about the peers connected to this node.", fontawesome:"fas fa-sitemap"},
|
|
|
|
/* 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"},
|
|
|
|
/* 4 */ {name:"Mempool Summary", url:"/mempool-summary", desc:"Detailed summary of the current mempool for this node.", fontawesome:"fas fa-clipboard-list"},
|
|
/* 5 */ {name:"Pending Transactions", url:"/unconfirmed-tx", desc:"Browse unconfirmed/pending transactions.", fontawesome:"fas fa-unlock-alt"},
|
|
|
|
/* 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"},
|
|
|
|
/* 8 */ {name:(coins[currentCoin].name + " Fun"), url:"/fun", desc:"See fun/interesting historical blockchain data.", fontawesome:"fas fa-certificate"},
|
|
|
|
/* 9 */ {name:"Mining Summary", url:"/mining-summary", desc:"Summary of recent data about miners.", fontawesome:"fas fa-chart-pie"},
|
|
],
|
|
|
|
donations:{
|
|
addresses:{
|
|
coins:["BTC"],
|
|
sites:{"BTC":"https://explorer.btc21.org"}
|
|
},
|
|
btcpayserver:{
|
|
host:"https://donate.btc21.org",
|
|
storeId:"26k74KRh7RYmJcMDqvmdKTb2h3991FMTZSM4GJHnX6st",
|
|
notifyEmail:"chaintools.io@gmail.com",
|
|
customAmountUrl: "https://donate.btc21.org/apps/2TBP2GuQnYXGBiHQkmf4jNuMh6eN/pos"
|
|
}
|
|
}
|
|
};
|
|
|