Class: Coinbase::WalletAddress

Inherits:
Address
  • Object
show all
Defined in:
lib/coinbase/address/wallet_address.rb

Overview

A representation of a blockchain Address that belongs to a Coinbase::Wallet. Addresses are used to send and receive Assets, and should be created using Wallet#create_address. Addresses require an Eth::Key to sign transaction data.

Instance Attribute Summary

Attributes inherited from Address

#id, #network_id

Instance Method Summary collapse

Methods inherited from Address

#balance, #balances, #faucet, #inspect

Constructor Details

#initialize(model, key) ⇒ WalletAddress

Returns a new Address object. Do not use this method directly. Instead, use Wallet#create_address, or use the Wallet’s default_address.

Parameters:

  • model (Coinbase::Client::Address)

    The underlying Address object

  • key (Eth::Key)

    The key backing the Address. Can be nil.



15
16
17
18
19
20
# File 'lib/coinbase/address/wallet_address.rb', line 15

def initialize(model, key)
  @model = model
  @key = key

  super(model.network_id, model.address_id)
end

Instance Method Details

#can_sign?Boolean

Returns whether the Address has a private key backing it to sign transactions.

Returns:

  • (Boolean)

    Whether the Address has a private key backing it to sign transactions.



97
98
99
# File 'lib/coinbase/address/wallet_address.rb', line 97

def can_sign?
  !@key.nil?
end

#exportString

Exports the Address’s private key to a hex string.

Returns:

  • (String)

    The Address’s private key as a hex String



103
104
105
106
107
# File 'lib/coinbase/address/wallet_address.rb', line 103

def export
  raise 'Cannot export key without private key loaded' if @key.nil?

  @key.private_hex
end

#key=(key) ⇒ Object

Sets the private key backing the Address. This key is used to sign transactions.

Parameters:

  • key (Eth::Key)

    The key backing the Address



30
31
32
33
34
# File 'lib/coinbase/address/wallet_address.rb', line 30

def key=(key)
  raise 'Private key is already set' unless @key.nil?

  @key = key
end

#to_sString

Returns a String representation of the WalletAddress.

Returns:

  • (String)

    a String representation of the WalletAddress



127
128
129
# File 'lib/coinbase/address/wallet_address.rb', line 127

def to_s
  "Coinbase::Address{id: '#{id}', network_id: '#{network_id}', wallet_id: '#{wallet_id}'}"
end

#trade(amount, from_asset_id, to_asset_id) ⇒ Coinbase::Trade

Trades the given amount of the given Asset for another Asset. Only same-network Trades are supported.

Parameters:

  • amount (Integer, Float, BigDecimal)

    The amount of the Asset to send.

  • from_asset_id (Symbol)

    The ID of the Asset to trade from. For Ether, :eth, :gwei, and :wei are supported.

  • to_asset_id (Symbol)

    The ID of the Asset to trade to. For Ether, :eth, :gwei, and :wei are supported.

Returns:



71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
# File 'lib/coinbase/address/wallet_address.rb', line 71

def trade(amount, from_asset_id, to_asset_id)
  ensure_can_sign!
  ensure_sufficient_balance!(amount, from_asset_id)

  trade = Trade.create(
    address_id: id,
    amount: amount,
    from_asset_id: from_asset_id,
    to_asset_id: to_asset_id,
    network_id: network_id,
    wallet_id: wallet_id
  )

  # If a server signer is managing keys, it will sign and broadcast the underlying trade transaction out of band.
  return trade if Coinbase.use_server_signer?

  trade.transactions.each do |tx|
    tx.sign(@key)
  end

  trade.broadcast!
  trade
end

#tradesEnumerable<Coinbase::Trade>

Enumerates the trades associated with the address. The result is an enumerator that lazily fetches from the server, and can be iterated over, converted to an array, etc…

Returns:

  • (Enumerable<Coinbase::Trade>)

    Enumerator that returns the address’s trades



121
122
123
# File 'lib/coinbase/address/wallet_address.rb', line 121

def trades
  Trade.list(wallet_id: wallet_id, address_id: id)
end

#transfer(amount, asset_id, destination) ⇒ Coinbase::Transfer

Transfers the given amount of the given Asset to the specified address or wallet. Only same-network Transfers are supported.

Parameters:

  • amount (Integer, Float, BigDecimal)

    The amount of the Asset to send.

  • asset_id (Symbol)

    The ID of the Asset to send. For Ether, :eth, :gwei, and :wei are supported.

  • destination (Wallet | Address | String)

    The destination of the transfer. If a Wallet, sends to the Wallet’s default address. If a String, interprets it as the address ID.

Returns:



43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/coinbase/address/wallet_address.rb', line 43

def transfer(amount, asset_id, destination)
  ensure_can_sign!
  ensure_sufficient_balance!(amount, asset_id)

  transfer = Transfer.create(
    address_id: id,
    amount: amount,
    asset_id: asset_id,
    destination: destination,
    network_id: network_id,
    wallet_id: wallet_id
  )

  # If a server signer is managing keys, it will sign and broadcast the underlying transfer transaction out of band.
  return transfer if Coinbase.use_server_signer?

  transfer.transaction.sign(@key)

  transfer.broadcast!
  transfer
end

#transfersEnumerable<Coinbase::Transfer>

Enumerates the transfers associated with the address. The result is an enumerator that lazily fetches from the server, and can be iterated over, converted to an array, etc…

Returns:



113
114
115
# File 'lib/coinbase/address/wallet_address.rb', line 113

def transfers
  Transfer.list(wallet_id: wallet_id, address_id: id)
end

#wallet_idString

Returns the Wallet ID of the Address.

Returns:

  • (String)

    The Wallet ID



24
25
26
# File 'lib/coinbase/address/wallet_address.rb', line 24

def wallet_id
  @model.wallet_id
end