paymentModelFunction = function(gbHours, downloadedBytes) {
HOURS_IN_MONTH = (24 * 365) / 12
## Average number of hours in a month
STORJ_USD_RATE = 0.81671
## This is determined by value reported on https://coinmarketcap.com/ at time
## of payout calculation.
gbHoursScaled = sapply((gbHours - median(gbHours)) / sd(gbHours),
function(x) ifelse(x < 0, 0, x))
downloadedBytesScaled = sapply((downloadedBytes - median(downloadedBytes)) / sd(downloadedBytes),
function(x) ifelse(x < 0, 0, x))
## Both gbHoursScaled and downloadedBytesScaled can not be less than 0 to
## ensure everyone gets at least the base payout amount.
downloadedBytesFlag = as.numeric(downloadedBytes > 0)
gbHoursFlag = as.numeric(gbHours >= 730)
isQualifiedFlag = sapply(gbHoursFlag + downloadedBytesFlag,
function(x) ifelse(x > 0, 1, 0))
## At least one of the above criteria must be met to qualify for a payment.
basePayout = (1.50 / STORJ_USD_RATE) * isQualifiedFlag
## The current base payout is set to $1.50 USD.
ghHourPayout = 11.45 * gbHoursScaled * isQualifiedFlag
downloadedBytesPayout = 3.0060 * downloadedBytesScaled * isQualifiedFlag
payoutAmountSTORJ = ghHourPayout + downloadedBytesPayout + basePayout
payoutAmountUsd = payoutAmountSTORJ * STORJ_USD_RATE
cbind(payoutAmountSTORJ, payoutAmountUsd)
}
- Nodes that have not been seen in the past week (from the time first preliminary payouts are calculated) are not included in the metric totals
- Each component (gbHours and downloaded bytes) is scaled so that each metric ends up being a measurement of how far away you are from the median
- Those values are multiplied by certain weights and summed to arrive at a final value
@BlackDuck888 Thanks for the feedback. I've put thought into this and I have a few points/conclusions.
The idea behind freezing at the initial calculation is to protect both farmers and Storj from market risk. With a floating exchange rate either party may lose value depending on whether the price increases or decreases.
I agree that our payout calculation needs work. The current formulation is a holdover from when we were in beta and learning from the process month to month. It no longer meets the expectations, rightfully, placed on it by our community.
Given the time constraints for June payments I don't think it prudent to make any immediate changes to the process. That being said I do plan in the coming weeks to work on improving it and soliciting feedback from the community.
I want all of our community to know that I genuinely appreciate their support, even when it comes in the form of criticism.
Without you guys we wouldn't be in the place we are today.