class Nem::Fee::Transfer
Constants
- FEE_FACTOR
Public Class Methods
new(transaction)
click to toggle source
# File lib/nem/fee/transfer.rb, line 6 def initialize(transaction) @transaction = transaction end
Public Instance Methods
testnet?()
click to toggle source
@return [Boolean]
# File lib/nem/fee/transfer.rb, line 27 def testnet? @transaction.network == :testnet end
to_i()
click to toggle source
@return [Integer] fee in micro XEM
# File lib/nem/fee/transfer.rb, line 22 def to_i value.to_i end
value()
click to toggle source
@return [Integer] fee in micro XEM
# File lib/nem/fee/transfer.rb, line 11 def value tmp = if @transaction.has_mosaics? mosaics_fee else FEE_FACTOR * minimum_fee(@transaction.amount).to_i end tmp += message_fee if @transaction.has_message? tmp * 1_000_000 end
Private Instance Methods
message_fee()
click to toggle source
# File lib/nem/fee/transfer.rb, line 38 def message_fee FEE_FACTOR * [1, (@transaction.message.bytesize / 2 / 32) + 1].max end
minimum_fee(base)
click to toggle source
# File lib/nem/fee/transfer.rb, line 33 def minimum_fee(base) tmp = [1, base / 10_000].max tmp > 25 ? 25 : tmp end
mosaics_fee()
click to toggle source
# File lib/nem/fee/transfer.rb, line 47 def mosaics_fee multiplier = @transaction.amount * 1_000_000 FEE_FACTOR * @transaction.mosaics.inject(0) do |sum, moa| tmp_fee = 0 if moa.divisibility == 0 && moa.initial_supply <= 10_000 # It is called *Small Business Mosaic Fee* supply_related_adjustment = 0 tmp_fee = 1 else # custom mosaic fee, Max is 1.25. max_mosaic_quantity = 9_000_000_000_000_000 total_mosaic_quantity = moa.initial_supply * (10**moa.divisibility) supply_related_adjustment = (0.8 * (Math.log(max_mosaic_quantity / total_mosaic_quantity))).to_i num_nem = xem_equivalent( multiplier, moa.amount, moa.initial_supply, moa.divisibility ) tmp_fee = minimum_fee(num_nem.to_i) end sum + [1, tmp_fee - supply_related_adjustment].max end end
xem_equivalent(multiplier, quantity, supply, divisibility)
click to toggle source
# File lib/nem/fee/transfer.rb, line 42 def xem_equivalent(multiplier, quantity, supply, divisibility) return 0 if supply == 0 multiplier * 8_999_999_999 * quantity / supply / 10**(divisibility + 6) end