class Multichain::Client

Public Class Methods

new() click to toggle source
# File lib/multichain/client.rb, line 4
def initialize
  @username = config['rpc']['user']
  @password = config['rpc']['password']
  @host = config['rpc']['host']
  @port = config['rpc']['port']
end

Public Instance Methods

asset() click to toggle source
# File lib/multichain/client.rb, line 36
def asset
  config['asset']
end
auth() click to toggle source
# File lib/multichain/client.rb, line 11
def auth
  "#{@username}:#{@password}"
end
config() click to toggle source
# File lib/multichain/client.rb, line 19
def config
  config_file = "#{ENV['HOME']}/.multichain/config.yml"
  config_file = 'spec/support/fixtures/config.yml' if ENV['TEST']
  @config ||= begin
    c = YAML.load_file config_file
    if ENV['TEST']
      c['rpc'] = {}
      c['rpc']['user'] = ENV['RPC_USER']
      c['rpc']['password'] = ENV['RPC_PASSWORD']
      c['rpc']['host'] = ENV['RPC_HOST']
      c['rpc']['port'] = ENV['RPC_PORT']
    end

    c
  end
end
method_missing(sym, params = []) click to toggle source
# File lib/multichain/client.rb, line 100
def method_missing(sym, params = [])
  request = build_request(sym.to_s, params)
  send_request(request)
end
send_asset(recipient, amount) click to toggle source
# File lib/multichain/client.rb, line 44
def send_asset recipient, amount
  params = [
    wallets.fetch(recipient),
    asset,
    amount
  ]

  s = sendassettoaddress params

  {
    recipient: recipient,
    asset: asset,
    amount: amount,
    id: s['result']
  }
end
send_asset_with_data(recipient, amount, data) click to toggle source
# File lib/multichain/client.rb, line 61
def send_asset_with_data recipient, amount, data
  params = [
    wallets.fetch(recipient),
    {asset => amount},
    data
  ]

  s = sendwithmetadata params

  {
    recipient: recipient,
    asset: asset,
    amount: amount,
    data: data,
    id: s['result']
  }
end
send_url(recipient, url) click to toggle source
# File lib/multichain/client.rb, line 79
def send_url recipient, url
  hex = Encoder.hexify url
  params = [
    wallets.fetch(recipient),
    {asset => 0},
    hex
  ]

  s = sendwithmetadata params
  data = Encoder.extract Encoder.decode hex

  {
    recipient: recipient,
    url: url,
    hash: data[:hash],
    timestamp: data[:timestamp],
    hex: hex,
    id: s['result']
  }
end
url() click to toggle source
# File lib/multichain/client.rb, line 15
def url
  "http://#{auth}@#{@host}:#{@port}"
end
wallets() click to toggle source
# File lib/multichain/client.rb, line 40
def wallets
  @wallets ||= Wallets.new
end

Private Instance Methods

build_request(method, params) click to toggle source
# File lib/multichain/client.rb, line 107
def build_request(method, params)
  {
    method: method,
    params: params,
    id: ::SecureRandom.uuid
  }.to_json
end
send_request(request) click to toggle source
# File lib/multichain/client.rb, line 115
def send_request(request)
  post = HTTParty.post(url, body: request, headers: {"Content-Type" => "application/json"})
  response = post.body
  JSON.parse(response)
end