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.
Direct Known Subclasses
Instance Attribute Summary collapse
-
#id ⇒ Object
readonly
Returns the value of attribute id.
-
#network ⇒ Object
readonly
Returns the value of attribute network.
Instance Method Summary collapse
-
#balance(asset_id) ⇒ BigDecimal
Returns the balance of the provided Asset.
-
#balances ⇒ BalanceMap
Returns the balances of the Address.
-
#build_claim_stake_operation(amount, asset_id, mode: :default, options: {}) ⇒ Coinbase::StakingOperation
Builds a claim_stake operation for the supplied asset.
-
#build_stake_operation(amount, asset_id, mode: :default, options: {}) ⇒ Coinbase::StakingOperation
Builds a stake operation for the supplied asset.
-
#build_unstake_operation(amount, asset_id, mode: :default, options: {}) ⇒ Coinbase::StakingOperation
Builds an unstake operation for the supplied asset.
-
#can_sign? ⇒ Boolean
Returns true if the Address can sign transactions.
-
#claimable_balance(asset_id, mode: :default, options: {}) ⇒ BigDecimal
Retrieves the claimable balance for the supplied asset.
-
#faucet(asset_id: nil) ⇒ Coinbase::FaucetTransaction
Requests funds for the address from the faucet and returns the faucet transaction.
-
#historical_balances(asset_id) ⇒ Enumerable<Coinbase::HistoricalBalance>
Enumerates the historical balances for a given asset belonging of address.
-
#historical_staking_balances(asset_id, start_time: DateTime.now.prev_week(1), end_time: DateTime.now) ⇒ Enumerable<Coinbase::StakingBalance>
Fetches the historical staking balances for the address.
-
#initialize(network, id) ⇒ Address
constructor
Returns a new Address object.
-
#inspect ⇒ String
Same as to_s.
-
#reputation ⇒ Coinbase::AddressReputation
Returns the reputation of the Address.
-
#risky? ⇒ Boolean
Returns wheth the Address’s reputation is risky.
-
#stakeable_balance(asset_id, mode: :default, options: {}) ⇒ BigDecimal
Retrieves the stakeable balance for the supplied asset.
-
#staking_balances(asset_id, mode: :default, options: {}) ⇒ Hash, BigDecimal
Retrieves the balances used for staking for the supplied asset.
-
#staking_rewards(asset_id, start_time: DateTime.now.prev_week(1), end_time: DateTime.now, format: :usd) ⇒ Enumerable<Coinbase::StakingReward>
Lists the staking rewards for the address.
-
#to_s ⇒ String
Returns a String representation of the Address.
-
#transactions ⇒ Enumerable<Coinbase::HistoricalBalance>
Enumerates the transactions of address.
-
#unstakeable_balance(asset_id, mode: :default, options: {}) ⇒ BigDecimal
Retrieves the unstakeable balance for the supplied asset.
Constructor Details
Instance Attribute Details
#id ⇒ Object (readonly)
Returns the value of attribute id.
7 8 9 |
# File 'lib/coinbase/address.rb', line 7 def id @id end |
#network ⇒ Object (readonly)
Returns the value of attribute network.
7 8 9 |
# File 'lib/coinbase/address.rb', line 7 def network @network end |
Instance Method Details
#balance(asset_id) ⇒ BigDecimal
Returns the balance of the provided Asset.
68 69 70 71 72 73 74 75 76 77 78 79 80 |
# File 'lib/coinbase/address.rb', line 68 def balance(asset_id) response = Coinbase.call_api do addresses_api.get_external_address_balance( network.normalized_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.
57 58 59 60 61 62 63 |
# File 'lib/coinbase/address.rb', line 57 def balances response = Coinbase.call_api do addresses_api.list_external_address_balances(network.normalized_id, id) end Coinbase::BalanceMap.from_balances(response.data) end |
#build_claim_stake_operation(amount, asset_id, mode: :default, options: {}) ⇒ Coinbase::StakingOperation
Builds a claim_stake operation for the supplied asset.
159 160 161 162 163 |
# File 'lib/coinbase/address.rb', line 159 def build_claim_stake_operation(amount, asset_id, mode: :default, options: {}) validate_can_perform_staking_action!(amount, asset_id, 'claimable_balance', mode, ) StakingOperation.build(amount, network, asset_id, id, 'claim_stake', mode, ) end |
#build_stake_operation(amount, asset_id, mode: :default, options: {}) ⇒ Coinbase::StakingOperation
Builds a stake operation for the supplied asset. The stake operation may take a few minutes to complete in the case when infrastructure is spun up.
134 135 136 137 138 |
# File 'lib/coinbase/address.rb', line 134 def build_stake_operation(amount, asset_id, mode: :default, options: {}) validate_can_perform_staking_action!(amount, asset_id, 'stakeable_balance', mode, ) StakingOperation.build(amount, network, asset_id, id, 'stake', mode, ) end |
#build_unstake_operation(amount, asset_id, mode: :default, options: {}) ⇒ Coinbase::StakingOperation
Builds an unstake operation for the supplied asset.
146 147 148 149 150 |
# File 'lib/coinbase/address.rb', line 146 def build_unstake_operation(amount, asset_id, mode: :default, options: {}) validate_can_perform_staking_action!(amount, asset_id, 'unstakeable_balance', mode, ) StakingOperation.build(amount, network, asset_id, id, 'unstake', mode, ) end |
#can_sign? ⇒ Boolean
Returns true if the Address can sign transactions.
38 39 40 |
# File 'lib/coinbase/address.rb', line 38 def can_sign? false end |
#claimable_balance(asset_id, mode: :default, options: {}) ⇒ BigDecimal
Retrieves the claimable balance for the supplied asset.
228 229 230 |
# File 'lib/coinbase/address.rb', line 228 def claimable_balance(asset_id, mode: :default, options: {}) staking_balances(asset_id, mode: mode, options: )[:claimable_balance] end |
#faucet(asset_id: nil) ⇒ Coinbase::FaucetTransaction
Requests funds for the address from the faucet and returns the faucet transaction. This is only supported on testnet networks.
112 113 114 115 116 117 118 119 120 121 122 123 124 125 |
# File 'lib/coinbase/address.rb', line 112 def faucet(asset_id: nil) Coinbase.call_api do Coinbase::FaucetTransaction.new( addresses_api.request_external_faucet_funds( network.normalized_id, id, { asset_id: asset_id, skip_wait: true }.compact ) ) end end |
#historical_balances(asset_id) ⇒ Enumerable<Coinbase::HistoricalBalance>
Enumerates the historical balances for a given asset belonging of address. The result is an enumerator that lazily fetches from the server, and can be iterated over, converted to an array, etc…
86 87 88 89 90 91 92 |
# File 'lib/coinbase/address.rb', line 86 def historical_balances(asset_id) Coinbase::Pagination.enumerate( ->(page) { list_historical_balance_page(asset_id, page) } ) do |historical_balance| Coinbase::HistoricalBalance.from_model(historical_balance) end end |
#historical_staking_balances(asset_id, start_time: DateTime.now.prev_week(1), end_time: DateTime.now) ⇒ Enumerable<Coinbase::StakingBalance>
Fetches the historical staking balances for the address.
254 255 256 257 258 259 260 261 262 |
# File 'lib/coinbase/address.rb', line 254 def historical_staking_balances(asset_id, start_time: DateTime.now.prev_week(1), end_time: DateTime.now) StakingBalance.list( network, asset_id, id, start_time: start_time, end_time: end_time ) end |
#inspect ⇒ String
Same as to_s.
32 33 34 |
# File 'lib/coinbase/address.rb', line 32 def inspect to_s end |
#reputation ⇒ Coinbase::AddressReputation
Returns the reputation of the Address.
44 45 46 |
# File 'lib/coinbase/address.rb', line 44 def reputation @reputation ||= Coinbase::AddressReputation.fetch(network: network, address_id: id) end |
#risky? ⇒ Boolean
Returns wheth the Address’s reputation is risky.
50 51 52 |
# File 'lib/coinbase/address.rb', line 50 def risky? reputation.risky? end |
#stakeable_balance(asset_id, mode: :default, options: {}) ⇒ BigDecimal
Retrieves the stakeable balance for the supplied asset.
210 211 212 |
# File 'lib/coinbase/address.rb', line 210 def stakeable_balance(asset_id, mode: :default, options: {}) staking_balances(asset_id, mode: mode, options: )[:stakeable_balance] end |
#staking_balances(asset_id, mode: :default, options: {}) ⇒ Hash, BigDecimal
Retrieves the balances used for staking for the supplied asset.
175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 |
# File 'lib/coinbase/address.rb', line 175 def staking_balances(asset_id, mode: :default, options: {}) context_model = Coinbase.call_api do stake_api.get_staking_context( { asset_id: asset_id, network_id: network.normalized_id, address_id: id, options: { mode: mode }.merge() } ) end.context { stakeable_balance: Coinbase::Balance.from_model_and_asset_id( context_model.stakeable_balance, asset_id ).amount, unstakeable_balance: Coinbase::Balance.from_model_and_asset_id( context_model.unstakeable_balance, asset_id ).amount, claimable_balance: Coinbase::Balance.from_model_and_asset_id( context_model.claimable_balance, asset_id ).amount } end |
#staking_rewards(asset_id, start_time: DateTime.now.prev_week(1), end_time: DateTime.now, format: :usd) ⇒ Enumerable<Coinbase::StakingReward>
Lists the staking rewards for the address.
238 239 240 241 242 243 244 245 246 247 |
# File 'lib/coinbase/address.rb', line 238 def staking_rewards(asset_id, start_time: DateTime.now.prev_week(1), end_time: DateTime.now, format: :usd) StakingReward.list( network, asset_id, [id], start_time: start_time, end_time: end_time, format: format ) end |
#to_s ⇒ String
Returns a String representation of the Address.
19 20 21 22 23 24 25 26 27 28 |
# File 'lib/coinbase/address.rb', line 19 def to_s Coinbase.pretty_print_object( self.class, **{ id: id, network_id: network.id, reputation_score: @reputation.nil? ? nil : reputation.score }.compact ) end |
#transactions ⇒ Enumerable<Coinbase::HistoricalBalance>
Enumerates the transactions of address. The result is an enumerator that lazily fetches from the server, and can be iterated over, converted to an array, etc…
98 99 100 101 102 103 104 |
# File 'lib/coinbase/address.rb', line 98 def transactions Coinbase::Pagination.enumerate( ->(page) { list_transaction_page(page) } ) do |transaction| Coinbase::Transaction.new(transaction) end end |
#unstakeable_balance(asset_id, mode: :default, options: {}) ⇒ BigDecimal
Retrieves the unstakeable balance for the supplied asset.
219 220 221 |
# File 'lib/coinbase/address.rb', line 219 def unstakeable_balance(asset_id, mode: :default, options: {}) staking_balances(asset_id, mode: mode, options: )[:unstakeable_balance] end |