JSFiddle - React, Tailwind, and code Playground
JavaScript
var relaysToTokensMultiplier = 1;
var validatorStakeFloorMultiplier = 15000;
var validatorStakeWeightMultiplier = 5;
var servicerStakeWeightCeiling = validatorStakeFloorMultiplier * validatorStakeWeightMultiplier;
var unconsolidatedNodes = [{
entity: 'A',
stake: 15000
}, {
entity: 'A',
stake: 15000
}, {
entity: 'A',
stake: 15000
},
{
entity: 'B',
stake: 15000
}, {
entity: 'B',
stake: 15000
}, {
entity: 'B',
stake: 15000
},
{
entity: 'B',
stake: 15000
}, {
entity: 'B',
stake: 15000
}, {
entity: 'B',
stake: 15000
},
{
entity: 'B',
stake: 15000
}, {
entity: 'B',
stake: 15000
}, {
entity: 'B',
stake: 15000
},
{
entity: 'C',
stake: 15000
},
{
entity: 'D',
stake: 15000
}, {
entity: 'D',
stake: 15000
}, {
entity: 'D',
stake: 15000
}
];
var consolidatedNodes = [{
entity: 'A',
stake: 45000
}, {
entity: 'B',
stake: 75000
}, {
entity: 'B',
stake: 60000
},
{
entity: 'C',
stake: 15000
}, {
entity: 'D',
stake: 45000
}
];
//# 1. Grab validator data
//Validator := k.GetValidator(ctx,address)
//# 2. Grab staked amount
//Stake := validator.getTokens()
//# 3. Floor the staked amount to the lowest multiple of ValidatorStakeFloorMultiplier or the ServicerStakeWeightCeiling, which ever is smaller
//flooredStake := Min(stake.Sub(stake.Mod(ValidatorStakeFloorMultiplier)),(ServicerStakeWeightCeiling))
//# 4. Calculate the weight
//weight := flooredStake.Div(ValidatorStakeFloorMultiplier).Div(ValidatorStakeWeightMultiplier)
//# 5. Calculate the coin emissions for the work done
//coins := k.RelaysToTokensMultiplier(ctx).Mul(relays).Mul(weight)
function calculateRewardsPIP22(node, relays) {
var stake = node.stake;
var flooredStake = Math.min(stake - (stake % validatorStakeFloorMultiplier), servicerStakeWeightCeiling);
var weight = (flooredStake /...