class Nis::Fee::Transfer
Constants
- FEE_FACTOR
Public Class Methods
new(transaction)
click to toggle source
# File lib/nis/fee/transfer.rb, line 5 def initialize(transaction) @transaction = transaction end
Public Instance Methods
testnet?()
click to toggle source
@return [Boolean]
# File lib/nis/fee/transfer.rb, line 26 def testnet? @transaction.network == :testnet end
to_i()
click to toggle source
@return [Integer] fee in micro XEM
# File lib/nis/fee/transfer.rb, line 21 def to_i value.to_i end
value()
click to toggle source
@return [Integer] fee in micro XEM
# File lib/nis/fee/transfer.rb, line 10 def value tmp = if @transaction.has_mosaics? mosaics_fee else FEE_FACTOR * minimum_fee(@transaction.amount / 1_000_000) end tmp += message_fee if @transaction.has_message? tmp * 1_000_000 end
Private Instance Methods
message_fee()
click to toggle source
# File lib/nis/fee/transfer.rb, line 37 def message_fee FEE_FACTOR * [1, (@transaction.message.bytesize / 2 / 32) + 1].max end
minimum_fee(base)
click to toggle source
# File lib/nis/fee/transfer.rb, line 32 def minimum_fee(base) tmp = [1, base / 10_000].max tmp > 25 ? 25 : tmp end
mosaics_fee()
click to toggle source
# File lib/nis/fee/transfer.rb, line 41 def mosaics_fee FEE_FACTOR * @transaction.mosaics.inject(0) do |sum, mo_attachment| mo = mo_attachment.mosaic_definition quantity = mo_attachment.quantity tmp_fee = 0 if mo.divisibility == 0 && mo.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 = mo.initial_supply * (10**mo.divisibility) supply_related_adjustment = (0.8 * (Math.log(max_mosaic_quantity / total_mosaic_quantity))).floor num_nem = if mo.initial_supply == 0 0 else 8_999_999_999.to_f * quantity * 1_000_000 / mo.initial_supply / (10**(mo.divisibility + 6)) end tmp_fee = minimum_fee(num_nem.ceil) end sum + [1, tmp_fee - supply_related_adjustment].max end end