68 lines
2.0 KiB
Ruby
68 lines
2.0 KiB
Ruby
module OpendaxCloud
|
|
class Wallet < Peatio::Wallet::Abstract
|
|
Error = Class.new(StandardError)
|
|
DEFAULT_FEATURES = { skip_deposit_collection: true }.freeze
|
|
|
|
def initialize(custom_features = {})
|
|
@features = DEFAULT_FEATURES.merge(custom_features).slice(*SUPPORTED_FEATURES)
|
|
@settings = {}
|
|
end
|
|
|
|
def configure(settings = {})
|
|
# Clean client state during configure.
|
|
@client = nil
|
|
|
|
@settings.merge!(settings.slice(*SUPPORTED_SETTINGS))
|
|
|
|
@wallet = @settings.fetch(:wallet) do
|
|
raise Peatio::Wallet::MissingSettingError, :wallet
|
|
end.slice(:uri, :address)
|
|
|
|
@currency = @settings.fetch(:currency) do
|
|
raise Peatio::Wallet::MissingSettingError, :currency
|
|
end.slice(:id, :base_factor, :options)
|
|
end
|
|
|
|
def create_address!(_options = {})
|
|
response = client.rest_api(:post, '/address/new', {
|
|
currency_id: currency_id
|
|
})
|
|
|
|
{ address: response['address'], details: response.except('address') }
|
|
rescue OpendaxCloud::Client::Error => e
|
|
raise Peatio::Wallet::ClientError, e
|
|
end
|
|
|
|
def create_transaction!(transaction)
|
|
response = client.rest_api(:post, '/tx/send', {
|
|
currency_id: currency_id,
|
|
to: transaction.to_address,
|
|
amount: transaction.amount,
|
|
options: transaction.options
|
|
})
|
|
transaction.options = response['options']
|
|
transaction
|
|
rescue OpendaxCloud::Client::Error => e
|
|
raise Peatio::Wallet::ClientError, e
|
|
end
|
|
|
|
def load_balance!
|
|
response = client.rest_api(:post, '/address/balance', {
|
|
currency_id: currency_id
|
|
}.compact).fetch('balance')
|
|
|
|
response.to_d
|
|
rescue OpendaxCloud::Client::Error => e
|
|
raise Peatio::Wallet::ClientError, e
|
|
end
|
|
|
|
def currency_id
|
|
@currency.fetch(:id)
|
|
end
|
|
|
|
def client
|
|
@client ||= Client.new(@wallet.fetch(:uri), idle_timeout: 1)
|
|
end
|
|
end
|
|
end
|