Module: RailsCryptoPayment
- Defined in:
- lib/rails_crypto_payment.rb,
lib/rails_crypto_payment/evm_rpc.rb,
lib/rails_crypto_payment/exchange_clients.rb
Defined Under Namespace
Classes: BinanceDepositClient, BybitDepositClient, Error, EvmRpc
Constant Summary
collapse
- MAX_UNIQUE_CODE =
9999
- CODE_UNIT =
BigDecimal("0.000001")
Class Method Summary
collapse
Class Method Details
.amount(base:, code:) ⇒ Object
18
19
20
21
22
23
|
# File 'lib/rails_crypto_payment.rb', line 18
def self.amount(base:, code:)
number = Integer(code)
raise ArgumentError, "code must be between 1 and #{MAX_UNIQUE_CODE}" unless (1..MAX_UNIQUE_CODE).cover?(number)
BigDecimal(base.to_s) + number * CODE_UNIT
end
|
.available_codes(base:, reserved_amounts:) ⇒ Object
25
26
27
28
29
30
31
32
|
# File 'lib/rails_crypto_payment.rb', line 25
def self.available_codes(base:, reserved_amounts:)
baseline = BigDecimal(base.to_s)
reserved = reserved_amounts.each_with_object({}) do |value, codes|
code = (BigDecimal(value.to_s) - baseline) / CODE_UNIT
codes[code.to_i] = true if code.frac.zero? && (1..MAX_UNIQUE_CODE).cover?(code.to_i)
end
(1..MAX_UNIQUE_CODE).reject { |code| reserved.key?(code) }
end
|
.base_amount(idr:, rate:) ⇒ Object
11
12
13
14
15
16
|
# File 'lib/rails_crypto_payment.rb', line 11
def self.base_amount(idr:, rate:)
exchange_rate = BigDecimal(rate.to_s)
raise ArgumentError, "rate must be positive" unless exchange_rate.positive?
(BigDecimal(idr.to_s) / exchange_rate).ceil(2)
end
|