Skip to content

Commit

Permalink
feat: add ratio scale
Browse files Browse the repository at this point in the history
  • Loading branch information
shaojunda committed Jan 2, 2020
1 parent cb31d1c commit 3b68742
Showing 1 changed file with 11 additions and 5 deletions.
16 changes: 11 additions & 5 deletions app/models/dao_contract.rb
Original file line number Diff line number Diff line change
Expand Up @@ -21,22 +21,28 @@ def ckb_transactions
def estimated_apc(deposit_epoch, deposited_epochs = EPOCHS_IN_ONE_NATURAL_YEAR)
start_epoch_number = deposit_epoch.number
end_epoch_number = start_epoch_number + deposited_epochs - 1
checkpoint_start =(start_epoch_number / EPOCHS_IN_PERIOD).ceil * EPOCHS_IN_PERIOD
checkpoint_end = (end_epoch_number / EPOCHS_IN_PERIOD).floor * EPOCHS_IN_PERIOD
scaled_end_epoch_number = end_epoch_number
ratio = (end_epoch_number - start_epoch_number) / EPOCHS_IN_ONE_NATURAL_YEAR
if ratio < 1
scaled_end_epoch_number = start_epoch_number + EPOCHS_IN_ONE_NATURAL_YEAR - 1
ratio = 1
end
checkpoint_start = ((start_epoch_number + 1) / EPOCHS_IN_PERIOD).ceil * EPOCHS_IN_PERIOD
checkpoint_end = ((scaled_end_epoch_number + 1) / EPOCHS_IN_PERIOD).floor * EPOCHS_IN_PERIOD
checkpoints_size = (checkpoint_end - checkpoint_start) / EPOCHS_IN_PERIOD + 1
checkpoints = checkpoints_size.to_i.times.map { |index| (index * EPOCHS_IN_PERIOD + checkpoint_start - 1).to_i }

checkpoints.unshift(start_epoch_number.to_i) if checkpoints.empty? || checkpoints[0] > start_epoch_number
checkpoints.push(end_epoch_number.to_i) if checkpoints.last < end_epoch_number
checkpoints.push(scaled_end_epoch_number.to_i) if checkpoints.last < scaled_end_epoch_number
end_epoch_numbers = checkpoints[1..-1]
rates = end_epoch_numbers.each_with_index.map do |inner_end_epoch_number, index|
epoch_index = deposit_epoch.index * 1800 / deposit_epoch.length
start_epoch = OpenStruct.new(number: checkpoints[index], index: epoch_index, length: 1800)
end_epoch = OpenStruct.new(number: inner_end_epoch_number, index: epoch_index, length: 1800)
rate(start_epoch, end_epoch)
end

rates.reduce(1) { |memo, rate| memo * (1 + rate) } - 1
rate = rates.reduce(1) { |memo, rate| memo * (1 + rate) } - 1
(rate * 100) / ratio
end

private
Expand Down

0 comments on commit 3b68742

Please sign in to comment.