oxen-electron-gui-wallet/src/mixins/service_node_mixin.js

44 lines
1.7 KiB
JavaScript

export default {
methods: {
// Returns the atomic, unfilled, reserved contributions for the given wallet
getUnfilledReservedContribution(node, addr) {
for (const contributor of node.contributors)
if (contributor.address === addr && contributor.amount === 0 && contributor.reserved > 0)
return contributor.reserved;
return 0;
},
getMinContribution(node, myaddr) {
if (node.funded)
return 0;
const MAX_NUMBER_OF_CONTRIBUTORS = 4;
// If we have a reserved spot then that is our minimum:
let minContributionAtomicUnits = this.getUnfilledReservedContribution(node, myaddr);
// Otherwise we can contribute our fair share of whatever amount is left (i.e. REMAINING/N
// when there are N available spots).
if (minContributionAtomicUnits === 0 && node.contributors.length < MAX_NUMBER_OF_CONTRIBUTORS) {
const openContributionRemaining = this.openForContribution(node);
minContributionAtomicUnits = openContributionRemaining /
(MAX_NUMBER_OF_CONTRIBUTORS - node.contributors.length);
}
const minContributionOxen = minContributionAtomicUnits / 1e9;
// ceiling to 4 decimal places
return minContributionOxen.toFixed(4);
},
openForContribution(node, addr = null) {
let openContributionRemaining =
node.staking_requirement > node.total_reserved
? node.staking_requirement - node.total_reserved
: 0;
if (addr)
openContributionRemaining += this.getUnfilledReservedContribution(node, addr);
return openContributionRemaining;
},
openForContributionOxen(node, addr = null) {
return (this.openForContribution(node, addr) / 1e9).toFixed(4);
}
}
};