Class: Coinbase::Address
- Inherits:
-
Object
- Object
- Coinbase::Address
- Defined in:
- lib/coinbase/address.rb
Overview
A representation of a blockchain Address, which is a user-controlled account on a Network. 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 Method Summary collapse
-
#balance(asset_id) ⇒ BigDecimal
Returns the balance of the provided Asset.
-
#balances ⇒ BalanceMap
Returns the balances of the Address.
-
#export ⇒ String
Exports the Address’s private key to a hex string.
-
#faucet ⇒ Coinbase::FaucetTransaction
Requests funds for the address from the faucet and returns the faucet transaction.
-
#id ⇒ String
Returns the Address ID.
-
#initialize(model, key) ⇒ Address
constructor
Returns a new Address object.
-
#inspect ⇒ String
Same as to_s.
-
#network_id ⇒ Symbol
Returns the Network ID of the Address.
-
#to_s ⇒ String
Returns a String representation of the Address.
-
#transfer(amount, asset_id, destination) ⇒ String
Transfers the given amount of the given Asset to the given address.
-
#transfers ⇒ Array<Coinbase::Transfer>
Returns all of the transfers associated with the address.
-
#wallet_id ⇒ String
Returns the Wallet ID of the Address.
Constructor Details
#initialize(model, key) ⇒ Address
Returns a new Address object. Do not use this method directly. Instead, use Wallet#create_address, or use the Wallet’s default_address.
19 20 21 22 |
# File 'lib/coinbase/address.rb', line 19 def initialize(model, key) @model = model @key = key end |
Instance Method Details
#balance(asset_id) ⇒ BigDecimal
Returns the balance of the provided Asset.
56 57 58 59 60 61 62 63 64 |
# File 'lib/coinbase/address.rb', line 56 def balance(asset_id) response = Coinbase.call_api do addresses_api.get_address_balance(wallet_id, id, Coinbase::Asset.primary_denomination(asset_id).to_s) end return BigDecimal('0') if response.nil? Coinbase::Balance.from_model_and_asset_id(response, asset_id).amount end |
#balances ⇒ BalanceMap
Returns the balances of the Address.
45 46 47 48 49 50 51 |
# File 'lib/coinbase/address.rb', line 45 def balances response = Coinbase.call_api do addresses_api.list_address_balances(wallet_id, id) end Coinbase::BalanceMap.from_balances(response.data) end |
#export ⇒ String
Exports the Address’s private key to a hex string.
144 145 146 |
# File 'lib/coinbase/address.rb', line 144 def export @key.private_hex end |
#faucet ⇒ Coinbase::FaucetTransaction
Requests funds for the address from the faucet and returns the faucet transaction. This is only supported on testnet networks.
136 137 138 139 140 |
# File 'lib/coinbase/address.rb', line 136 def faucet Coinbase.call_api do Coinbase::FaucetTransaction.new(addresses_api.request_faucet_funds(wallet_id, id)) end end |
#id ⇒ String
Returns the Address ID.
38 39 40 |
# File 'lib/coinbase/address.rb', line 38 def id @model.address_id end |
#inspect ⇒ String
Same as to_s.
127 128 129 |
# File 'lib/coinbase/address.rb', line 127 def inspect to_s end |
#network_id ⇒ Symbol
Returns the Network ID of the Address.
26 27 28 |
# File 'lib/coinbase/address.rb', line 26 def network_id Coinbase.to_sym(@model.network_id) end |
#to_s ⇒ String
Returns a String representation of the Address.
121 122 123 |
# File 'lib/coinbase/address.rb', line 121 def to_s "Coinbase::Address{id: '#{id}', network_id: '#{network_id}', wallet_id: '#{wallet_id}'}" end |
#transfer(amount, asset_id, destination) ⇒ String
Transfers the given amount of the given Asset to the given address. Only same-Network Transfers are supported.
72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 |
# File 'lib/coinbase/address.rb', line 72 def transfer(amount, asset_id, destination) raise ArgumentError, "Unsupported asset: #{asset_id}" unless Coinbase::Asset.supported?(asset_id) if destination.is_a?(Wallet) raise ArgumentError, 'Transfer must be on the same Network' if destination.network_id != network_id destination = destination.default_address.id elsif destination.is_a?(Address) raise ArgumentError, 'Transfer must be on the same Network' if destination.network_id != network_id destination = destination.id end current_balance = balance(asset_id) if current_balance < amount raise ArgumentError, "Insufficient funds: #{amount} requested, but only #{current_balance} available" end create_transfer_request = { amount: Coinbase::Asset.to_atomic_amount(amount, asset_id).to_i.to_s, network_id: network_id, asset_id: Coinbase::Asset.primary_denomination(asset_id).to_s, destination: destination } transfer_model = Coinbase.call_api do transfers_api.create_transfer(wallet_id, id, create_transfer_request) end transfer = Coinbase::Transfer.new(transfer_model) transaction = transfer.transaction transaction.sign(@key) signed_payload = transaction.hex broadcast_transfer_request = { signed_payload: signed_payload } transfer_model = Coinbase.call_api do transfers_api.broadcast_transfer(wallet_id, id, transfer.id, broadcast_transfer_request) end Coinbase::Transfer.new(transfer_model) end |
#transfers ⇒ Array<Coinbase::Transfer>
Returns all of the transfers associated with the address.
150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 |
# File 'lib/coinbase/address.rb', line 150 def transfers transfers = [] page = nil loop do puts "fetch transfers page: #{page}" response = Coinbase.call_api do transfers_api.list_transfers(wallet_id, id, { limit: 100, page: page }) end transfers.concat(response.data.map { |transfer| Coinbase::Transfer.new(transfer) }) if response.data break unless response.has_more page = response.next_page end transfers end |
#wallet_id ⇒ String
Returns the Wallet ID of the Address.
32 33 34 |
# File 'lib/coinbase/address.rb', line 32 def wallet_id @model.wallet_id end |