Add Salvium fork mechanics: config schema and utility functions
Co-authored-by: t1amak <57602242+t1amak@users.noreply.github.com>
This commit is contained in:
85
lib/utils.js
85
lib/utils.js
@@ -46,6 +46,13 @@ exports.getAddressPrefix = getAddressPrefix;
|
||||
|
||||
// Validate miner address
|
||||
exports.validateMinerAddress = function (address) {
|
||||
// First check if this is a Salvium pool and use Salvium validation
|
||||
if (isSalviumEnabled()) {
|
||||
return validateSalviumAddress(address, 'cryptonote') ||
|
||||
validateSalviumAddress(address, 'carrot');
|
||||
}
|
||||
|
||||
// Default validation for other coins
|
||||
let addressPrefix = getAddressPrefix(address);
|
||||
if (addressPrefix === addressBase58Prefix) return true;
|
||||
else if (addressPrefix === integratedAddressBase58Prefix) return true;
|
||||
@@ -183,3 +190,81 @@ exports.ringBuffer = function (maxSize) {
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
/**
|
||||
* Salvium-specific utility functions
|
||||
**/
|
||||
|
||||
// Check if Salvium functionality is enabled
|
||||
function isSalviumEnabled() {
|
||||
return config.salvium && config.salvium.enabled === true &&
|
||||
(config.coin === 'Salvium' || config.symbol === 'SAL' || config.symbol === 'SAL1');
|
||||
}
|
||||
exports.isSalviumEnabled = isSalviumEnabled;
|
||||
|
||||
// Get current Salvium state based on block height
|
||||
function getSalviumState(height) {
|
||||
if (!isSalviumEnabled() || !height) return 'disabled';
|
||||
|
||||
if (height >= config.salvium.heights.carrot) return 'carrot_payouts';
|
||||
if (height >= config.salvium.heights.require_dual_login) return 'dual_required';
|
||||
if (height >= config.salvium.heights.audit_complete) return 'payout_resume';
|
||||
if (height >= config.salvium.heights.audit_phase1) return 'payout_blackout';
|
||||
return 'normal';
|
||||
}
|
||||
exports.getSalviumState = getSalviumState;
|
||||
|
||||
// Validate Salvium address with specific prefixes
|
||||
function validateSalviumAddress(address, type) {
|
||||
if (!isSalviumEnabled() || !address) return false;
|
||||
|
||||
let addressPrefix = getAddressPrefix(address);
|
||||
if (!addressPrefix) return false;
|
||||
|
||||
let prefixes = config.salvium.addressPrefixes[type];
|
||||
if (!prefixes) return false;
|
||||
|
||||
return addressPrefix === parseInt(prefixes.public, 16) ||
|
||||
addressPrefix === parseInt(prefixes.integrated, 16) ||
|
||||
addressPrefix === parseInt(prefixes.subaddress, 16);
|
||||
}
|
||||
exports.validateSalviumAddress = validateSalviumAddress;
|
||||
|
||||
// Parse dual address for Salvium
|
||||
function parseSalviumDualAddress(login) {
|
||||
if (!isSalviumEnabled()) return null;
|
||||
|
||||
let separator = config.salvium.addressSeparator || config.poolServer.paymentId.addressSeparator;
|
||||
let parts = login.split(separator);
|
||||
|
||||
if (parts.length < 2) return null;
|
||||
|
||||
let cryptonoteAddress = parts[0];
|
||||
let carrotAddress = parts[1];
|
||||
|
||||
// Validate both addresses
|
||||
if (!validateSalviumAddress(cryptonoteAddress, 'cryptonote') ||
|
||||
!validateSalviumAddress(carrotAddress, 'carrot')) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return {
|
||||
cryptonote: cryptonoteAddress,
|
||||
carrot: carrotAddress,
|
||||
original: login
|
||||
};
|
||||
}
|
||||
exports.parseSalviumDualAddress = parseSalviumDualAddress;
|
||||
|
||||
// Get appropriate pool address based on current height
|
||||
function getSalviumPoolAddress(height) {
|
||||
if (!isSalviumEnabled()) return config.poolServer.poolAddress;
|
||||
|
||||
let state = getSalviumState(height);
|
||||
if (state === 'carrot_payouts' && config.salvium.carrotPoolAddress) {
|
||||
return config.salvium.carrotPoolAddress;
|
||||
}
|
||||
|
||||
return config.poolServer.poolAddress;
|
||||
}
|
||||
exports.getSalviumPoolAddress = getSalviumPoolAddress;
|
||||
|
||||
Reference in New Issue
Block a user