mirror of
https://github.com/Retropex/umbrel-bitcoin.git
synced 2025-05-12 19:20:49 +02:00
138 lines
5.8 KiB
JavaScript
138 lines
5.8 KiB
JavaScript
function validateSettingsRequest(settings) {
|
|
const errors = [];
|
|
|
|
// PEER SETTINGS
|
|
|
|
// outgoing connections to clearnet peers
|
|
checkBooleanSetting({ setting: settings.clearnet, settingName: "Outgoing connections to clearnet peers" });
|
|
|
|
// outgoing connections to tor peers
|
|
checkBooleanSetting({ setting: settings.tor, settingName: "Outgoing connections to tor peers" });
|
|
|
|
// Make All Outgoing Connections to Clearnet Peers Over Tor
|
|
checkBooleanSetting({ setting: settings.torProxyForClearnet, settingName: "Make All Outgoing Connections to Clearnet Peers Over Tor" });
|
|
|
|
// Outgoing Connections to I2P Peers
|
|
checkBooleanSetting({ setting: settings.i2p, settingName: "Outgoing Connections to I2P Peers" });
|
|
|
|
// We check that at least one source of outgoing connections is set (Clearnet, Tor, or I2P).
|
|
if (!settings.clearnet && !settings.tor && !settings.i2p) {
|
|
errors.push("You must enable at least one source of outgoing connections (Clearnet, Tor, or I2P).");
|
|
}
|
|
|
|
// Incoming Connections
|
|
checkBooleanSetting({ setting: settings.incomingConnections, settingName: "Incoming Connections" });
|
|
|
|
// Peer Block Filters
|
|
checkBooleanSetting({ setting: settings.peerblockfilters, settingName: "Peer Block Filters" });
|
|
// blockfilterindex must be enabled if peerblockfilters is enabled for bitcoind to start
|
|
if (settings.peerblockfilters && !settings.blockfilterindex) {
|
|
errors.push("You must enable Block Filter Index if Peer Block Filters is enabled.");
|
|
}
|
|
|
|
// Peer Bloom Filters
|
|
checkBooleanSetting({ setting: settings.peerbloomfilters, settingName: "Peer Bloom Filters" });
|
|
|
|
// Peer Ban Time
|
|
// min of 1. No max specified
|
|
checkNumberSetting({ setting: settings.bantime, settingName: "Peer Ban Time", min: 1 });
|
|
|
|
// Max Peer Connections
|
|
// min of 0 (no connections allowed). No max specified.
|
|
checkNumberSetting({ setting: settings.maxconnections, settingName: "Max Peer Connections", min: 0 });
|
|
|
|
// Max Receive Buffer
|
|
// min of 1. No max specified
|
|
checkNumberSetting({ setting: settings.maxreceivebuffer, settingName: "Max Receive Buffer", min: 1 });
|
|
|
|
// Max Send Buffer
|
|
// min of 1. No max specified.
|
|
checkNumberSetting({ setting: settings.maxsendbuffer, settingName: "Max Send Buffer", min: 1 });
|
|
|
|
// Max Time Adjustment
|
|
// min of 0 (no adjustment allowed). No max specified.
|
|
checkNumberSetting({ setting: settings.maxtimeadjustment, settingName: "Max Time Adjustment", min: 0 });
|
|
|
|
// Peer Timeout
|
|
// min of 1. No max specified.
|
|
checkNumberSetting({ setting: settings.peertimeout, settingName: "Peer Timeout", min: 1 });
|
|
|
|
// Connection Timeout
|
|
// min of 1. No max specified.
|
|
checkNumberSetting({ setting: settings.timeout, settingName: "Connection Timeout", min: 1 });
|
|
|
|
// Max Upload Target
|
|
// min of 0 (no limit). No max specified.
|
|
checkNumberSetting({ setting: settings.maxuploadtarget, settingName: "Max Upload Target", min: 0 });
|
|
|
|
// OPTIMIZATION SETTINGS
|
|
|
|
// Cache Size
|
|
// min of 4 (no limit). No max specified.
|
|
checkNumberSetting({ setting: settings.cacheSizeMB, settingName: "Cache Size", min: 4 });
|
|
|
|
// Replace-By-Fee (RBF)
|
|
checkBooleanSetting({ setting: settings.mempoolFullRbf, settingName: "Replace-By-Fee" });
|
|
|
|
// Prune Old Blocks
|
|
checkBooleanSetting({ setting: settings.prune.enabled, settingName: "Prune Old Blocks" });
|
|
// min of 550 MiB (0.5767168 GB). No max specified.
|
|
checkNumberSetting({ setting: settings.prune.pruneSizeGB, settingName: "Prune Target Size", min: 0.6 });
|
|
|
|
// Block Filter Index
|
|
checkBooleanSetting({ setting: settings.blockfilterindex, settingName: "Block Filter Index" });
|
|
|
|
// Maximum Mempool Size
|
|
// 5 MiB when blocksonly mode is set, and 300 MiB when blocksonly mode is not set. No max specified.
|
|
checkNumberSetting({ setting: settings.maxmempool, settingName: "Maximum Mempool Size", min: 300 });
|
|
|
|
// Mempool Expiration
|
|
// No min or max specified. We have set a practical min of 1 hour.
|
|
checkNumberSetting({ setting: settings.mempoolexpiry, settingName: "Mempool Expiration", min: 1 });
|
|
|
|
// Persist Mempool
|
|
checkBooleanSetting({ setting: settings.persistmempool, settingName: "Persist Mempool" });
|
|
|
|
// Datacarrier
|
|
checkBooleanSetting({ setting: settings.datacarrier, settingName: "datacarrier" });
|
|
|
|
// Datacarriersize
|
|
checkNumberSetting({ setting: settings.datacarriersize, settingName: "datacarriersize", min: 0 });
|
|
|
|
// Datacarriersize
|
|
checkBooleanSetting({ setting: settings.permitbaremultisig, settingName: "permitbaremultisig" });
|
|
|
|
// Max Orphan Transactions
|
|
// No min or max specified.
|
|
checkNumberSetting({ setting: settings.maxorphantx, settingName: "Max Orphan Transactions", min: 0 });
|
|
|
|
// Public REST API
|
|
checkBooleanSetting({ setting: settings.rest, settingName: "Public REST API" });
|
|
|
|
// RPC Work Queue Size
|
|
// No min or max specified. We have set a practical min of 1.
|
|
checkNumberSetting({ setting: settings.rpcworkqueue, settingName: "RPC Work Queue Size", min: 1 });
|
|
|
|
// NETWORK SELECTION
|
|
// custom. settings.network MUST BE one of the following strings: "mainnet", "testnet", "regtest", "signet"
|
|
if (settings.network !== "main" && settings.network !== "test" && settings.network !== "regtest" && settings.network !== "signet") {
|
|
errors.push(`Invalid value for Network chain. Please try toggling it to a different value.`);
|
|
}
|
|
|
|
return errors;
|
|
|
|
function checkBooleanSetting({ setting, settingName }) {
|
|
if (typeof setting !== "boolean") {
|
|
errors.push(`Invalid value for ${settingName}. Please try toggling it on/off again.`);
|
|
}
|
|
}
|
|
|
|
function checkNumberSetting({ setting, settingName, min, max }) {
|
|
if (typeof setting !== "number" || setting < min || (max !== undefined && setting > max)) {
|
|
errors.push(`${settingName} must be ${max ? `between ${min} and ${max}` : `at least ${min}`}.`);
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
module.exports = validateSettingsRequest; |