coinbase-sdk 0.0.16 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/coinbase/address/wallet_address.rb +24 -17
- data/lib/coinbase/address.rb +17 -19
- data/lib/coinbase/asset.rb +11 -8
- data/lib/coinbase/client/api/addresses_api.rb +1 -1
- data/lib/coinbase/client/api/assets_api.rb +1 -1
- data/lib/coinbase/client/api/contract_events_api.rb +18 -10
- data/lib/coinbase/client/api/external_addresses_api.rb +1 -1
- data/lib/coinbase/client/api/networks_api.rb +1 -1
- data/lib/coinbase/client/api/server_signers_api.rb +1 -1
- data/lib/coinbase/client/api/stake_api.rb +1 -242
- data/lib/coinbase/client/api/trades_api.rb +1 -1
- data/lib/coinbase/client/api/transfers_api.rb +1 -1
- data/lib/coinbase/client/api/users_api.rb +1 -1
- data/lib/coinbase/client/api/validators_api.rb +3 -3
- data/lib/coinbase/client/api/wallet_stake_api.rb +263 -0
- data/lib/coinbase/client/api/wallets_api.rb +1 -1
- data/lib/coinbase/client/api/webhooks_api.rb +1 -1
- data/lib/coinbase/client/api_client.rb +1 -1
- data/lib/coinbase/client/api_error.rb +1 -1
- data/lib/coinbase/client/configuration.rb +11 -1
- data/lib/coinbase/client/models/address.rb +22 -5
- data/lib/coinbase/client/models/address_balance_list.rb +1 -1
- data/lib/coinbase/client/models/address_historical_balance_list.rb +1 -1
- data/lib/coinbase/client/models/address_list.rb +1 -1
- data/lib/coinbase/client/models/asset.rb +1 -1
- data/lib/coinbase/client/models/balance.rb +1 -1
- data/lib/coinbase/client/models/broadcast_staking_operation_request.rb +1 -1
- data/lib/coinbase/client/models/broadcast_trade_request.rb +1 -1
- data/lib/coinbase/client/models/broadcast_transfer_request.rb +1 -1
- data/lib/coinbase/client/models/build_staking_operation_request.rb +1 -1
- data/lib/coinbase/client/models/contract_event.rb +100 -9
- data/lib/coinbase/client/models/contract_event_list.rb +1 -1
- data/lib/coinbase/client/models/create_address_request.rb +15 -5
- data/lib/coinbase/client/models/create_server_signer_request.rb +1 -1
- data/lib/coinbase/client/models/create_staking_operation_request.rb +1 -1
- data/lib/coinbase/client/models/create_trade_request.rb +1 -1
- data/lib/coinbase/client/models/create_transfer_request.rb +1 -1
- data/lib/coinbase/client/models/create_wallet_request.rb +1 -1
- data/lib/coinbase/client/models/create_wallet_request_wallet.rb +1 -1
- data/lib/coinbase/client/models/create_webhook_request.rb +1 -1
- data/lib/coinbase/client/models/error.rb +1 -1
- data/lib/coinbase/client/models/ethereum_validator_metadata.rb +12 -12
- data/lib/coinbase/client/models/faucet_transaction.rb +1 -1
- data/lib/coinbase/client/models/feature.rb +3 -2
- data/lib/coinbase/client/models/feature_set.rb +1 -1
- data/lib/coinbase/client/models/fetch_historical_staking_balances200_response.rb +1 -1
- data/lib/coinbase/client/models/fetch_staking_rewards200_response.rb +1 -1
- data/lib/coinbase/client/models/fetch_staking_rewards_request.rb +1 -1
- data/lib/coinbase/client/models/get_staking_context_request.rb +1 -1
- data/lib/coinbase/client/models/historical_balance.rb +1 -1
- data/lib/coinbase/client/models/network.rb +15 -5
- data/lib/coinbase/client/models/network_identifier.rb +1 -1
- data/lib/coinbase/client/models/seed_creation_event.rb +1 -1
- data/lib/coinbase/client/models/seed_creation_event_result.rb +1 -1
- data/lib/coinbase/client/models/server_signer.rb +1 -1
- data/lib/coinbase/client/models/server_signer_event.rb +1 -1
- data/lib/coinbase/client/models/server_signer_event_event.rb +1 -1
- data/lib/coinbase/client/models/server_signer_event_list.rb +1 -1
- data/lib/coinbase/client/models/server_signer_list.rb +1 -1
- data/lib/coinbase/client/models/signature_creation_event.rb +1 -1
- data/lib/coinbase/client/models/signature_creation_event_result.rb +1 -1
- data/lib/coinbase/client/models/signed_voluntary_exit_message_metadata.rb +1 -1
- data/lib/coinbase/client/models/sponsored_send.rb +1 -1
- data/lib/coinbase/client/models/staking_balance.rb +1 -1
- data/lib/coinbase/client/models/staking_context.rb +1 -1
- data/lib/coinbase/client/models/staking_context_context.rb +1 -1
- data/lib/coinbase/client/models/staking_operation.rb +3 -3
- data/lib/coinbase/client/models/staking_operation_metadata.rb +1 -1
- data/lib/coinbase/client/models/staking_reward.rb +1 -1
- data/lib/coinbase/client/models/staking_reward_format.rb +1 -1
- data/lib/coinbase/client/models/staking_reward_usd_value.rb +1 -1
- data/lib/coinbase/client/models/trade.rb +1 -1
- data/lib/coinbase/client/models/trade_list.rb +1 -1
- data/lib/coinbase/client/models/transaction.rb +16 -6
- data/lib/coinbase/client/models/transaction_type.rb +1 -1
- data/lib/coinbase/client/models/transfer.rb +1 -1
- data/lib/coinbase/client/models/transfer_list.rb +1 -1
- data/lib/coinbase/client/models/update_webhook_request.rb +1 -1
- data/lib/coinbase/client/models/user.rb +1 -1
- data/lib/coinbase/client/models/validator.rb +24 -3
- data/lib/coinbase/client/models/validator_details.rb +1 -1
- data/lib/coinbase/client/models/validator_list.rb +1 -1
- data/lib/coinbase/client/models/validator_status.rb +52 -0
- data/lib/coinbase/client/models/wallet.rb +1 -1
- data/lib/coinbase/client/models/wallet_list.rb +1 -1
- data/lib/coinbase/client/models/webhook.rb +1 -1
- data/lib/coinbase/client/models/webhook_event_filter.rb +1 -1
- data/lib/coinbase/client/models/webhook_event_type.rb +1 -1
- data/lib/coinbase/client/models/webhook_list.rb +1 -1
- data/lib/coinbase/client/version.rb +1 -1
- data/lib/coinbase/client.rb +3 -1
- data/lib/coinbase/constants.rb +0 -10
- data/lib/coinbase/contract_event.rb +104 -0
- data/lib/coinbase/correlation.rb +30 -0
- data/lib/coinbase/destination.rb +11 -9
- data/lib/coinbase/errors.rb +7 -0
- data/lib/coinbase/middleware.rb +2 -0
- data/lib/coinbase/network.rb +103 -20
- data/lib/coinbase/smart_contract.rb +106 -0
- data/lib/coinbase/staking_balance.rb +11 -5
- data/lib/coinbase/staking_operation.rb +134 -36
- data/lib/coinbase/staking_reward.rb +1 -1
- data/lib/coinbase/trade.rb +10 -9
- data/lib/coinbase/transaction.rb +6 -0
- data/lib/coinbase/transfer.rb +11 -10
- data/lib/coinbase/validator.rb +18 -10
- data/lib/coinbase/version.rb +5 -0
- data/lib/coinbase/wallet.rb +137 -145
- data/lib/coinbase/webhook.rb +181 -0
- data/lib/coinbase.rb +50 -19
- metadata +9 -9
- data/lib/coinbase/client/models/ethereum_validator.rb +0 -374
- data/lib/coinbase/client/models/get_validator200_response.rb +0 -221
- data/lib/coinbase/client/models/get_validator200_response_validator.rb +0 -214
- data/lib/coinbase/client/models/native_eth_staking_context.rb +0 -254
- data/lib/coinbase/client/models/partial_eth_staking_context.rb +0 -254
- data/lib/coinbase/client/models/validator_list_data.rb +0 -216
- data/lib/coinbase/user.rb +0 -65
|
@@ -11,22 +11,24 @@ module Coinbase
|
|
|
11
11
|
|
|
12
12
|
# Builds an ephemeral staking operation this is intended to be called via an Address or Wallet.
|
|
13
13
|
# @param amount [BigDecimal] The amount to stake, in the primary denomination of the asset
|
|
14
|
-
# @param
|
|
14
|
+
# @param network [Coinbase::Network, Symbol] The Network or Network ID
|
|
15
15
|
# @param asset_id [Symbol] The Asset ID
|
|
16
16
|
# @param address_id [String] The Address ID
|
|
17
17
|
# @param action [Symbol] The action to perform
|
|
18
18
|
# @param mode [Symbol] The staking mode
|
|
19
19
|
# @param options [Hash] Additional options
|
|
20
20
|
# @return [Coinbase::StakingOperation] The staking operation
|
|
21
|
-
def self.build(amount,
|
|
21
|
+
def self.build(amount, network, asset_id, address_id, action, mode, options)
|
|
22
|
+
network = Coinbase::Network.from_id(network)
|
|
23
|
+
asset = network.get_asset(asset_id)
|
|
24
|
+
|
|
22
25
|
model = Coinbase.call_api do
|
|
23
|
-
asset = Coinbase::Asset.fetch(network_id, asset_id)
|
|
24
26
|
stake_api.build_staking_operation(
|
|
25
27
|
{
|
|
26
28
|
asset_id: asset.primary_denomination.to_s,
|
|
27
29
|
address_id: address_id,
|
|
28
30
|
action: action,
|
|
29
|
-
network_id: Coinbase.normalize_network(
|
|
31
|
+
network_id: Coinbase.normalize_network(network),
|
|
30
32
|
options: {
|
|
31
33
|
amount: asset.to_atomic_amount(amount).to_i.to_s,
|
|
32
34
|
mode: mode
|
|
@@ -40,7 +42,7 @@ module Coinbase
|
|
|
40
42
|
|
|
41
43
|
# Creates a persisted staking operation this is intended to be called via an Address or Wallet.
|
|
42
44
|
# @param amount [BigDecimal] The amount to stake, in the primary denomination of the asset
|
|
43
|
-
# @param
|
|
45
|
+
# @param network [Coinbase::Network, Symbol] The Network or Network ID
|
|
44
46
|
# @param asset_id [Symbol] The Asset ID
|
|
45
47
|
# @param address_id [String] The Address ID
|
|
46
48
|
# @param wallet_id [String] The Wallet ID
|
|
@@ -48,17 +50,19 @@ module Coinbase
|
|
|
48
50
|
# @param mode [Symbol] The staking mode
|
|
49
51
|
# @param options [Hash] Additional options
|
|
50
52
|
# @return [Coinbase::StakingOperation] The staking operation
|
|
51
|
-
def self.create(amount,
|
|
53
|
+
def self.create(amount, network, asset_id, address_id, wallet_id, action, mode, options)
|
|
54
|
+
network = Coinbase::Network.from_id(network)
|
|
55
|
+
asset = network.get_asset(asset_id)
|
|
56
|
+
|
|
52
57
|
model = Coinbase.call_api do
|
|
53
|
-
|
|
54
|
-
stake_api.create_staking_operation(
|
|
58
|
+
wallet_stake_api.create_staking_operation(
|
|
55
59
|
wallet_id,
|
|
56
60
|
address_id,
|
|
57
61
|
{
|
|
58
62
|
asset_id: asset.primary_denomination.to_s,
|
|
59
63
|
address_id: address_id,
|
|
60
64
|
action: action,
|
|
61
|
-
network_id: Coinbase.normalize_network(
|
|
65
|
+
network_id: Coinbase.normalize_network(network),
|
|
62
66
|
options: {
|
|
63
67
|
amount: asset.to_atomic_amount(amount).to_i.to_s,
|
|
64
68
|
mode: mode
|
|
@@ -70,10 +74,24 @@ module Coinbase
|
|
|
70
74
|
new(model)
|
|
71
75
|
end
|
|
72
76
|
|
|
77
|
+
def self.stake_api
|
|
78
|
+
Coinbase::Client::StakeApi.new(Coinbase.configuration.api_client)
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
private_class_method :stake_api
|
|
82
|
+
|
|
83
|
+
def self.wallet_stake_api
|
|
84
|
+
Coinbase::Client::WalletStakeApi.new(Coinbase.configuration.api_client)
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
private_class_method :wallet_stake_api
|
|
88
|
+
|
|
73
89
|
# Returns a new StakingOperation object.
|
|
74
90
|
# @param model [Coinbase::Client::StakingOperation] The underlying StakingOperation object
|
|
75
91
|
def initialize(model)
|
|
76
|
-
|
|
92
|
+
@model = model
|
|
93
|
+
@transactions ||= []
|
|
94
|
+
update_transactions(model.transactions)
|
|
77
95
|
end
|
|
78
96
|
|
|
79
97
|
# Returns the Staking Operation ID.
|
|
@@ -82,10 +100,10 @@ module Coinbase
|
|
|
82
100
|
@model.id
|
|
83
101
|
end
|
|
84
102
|
|
|
85
|
-
# Returns the Network
|
|
86
|
-
# @return [
|
|
87
|
-
def
|
|
88
|
-
Coinbase.
|
|
103
|
+
# Returns the Network of the Staking Operation.
|
|
104
|
+
# @return [Coinbase::Network] The Network
|
|
105
|
+
def network
|
|
106
|
+
@network ||= Coinbase::Network.from_id(@model.network_id)
|
|
89
107
|
end
|
|
90
108
|
|
|
91
109
|
# Returns the Address ID of the Staking Operation.
|
|
@@ -100,18 +118,48 @@ module Coinbase
|
|
|
100
118
|
@model.status
|
|
101
119
|
end
|
|
102
120
|
|
|
121
|
+
# Returns whether the Staking Operation is in a terminal state.
|
|
122
|
+
# @return [Boolean] Whether the Staking Operation is in a terminal state
|
|
123
|
+
def terminal_state?
|
|
124
|
+
failed? || completed?
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
# Returns whether the Staking Operation is in a failed state.
|
|
128
|
+
# @return [Boolean] Whether the Staking Operation is in a failed state
|
|
129
|
+
def failed?
|
|
130
|
+
status == 'failed'
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
# Returns whether the Staking Operation is in a complete state.
|
|
134
|
+
# @return [Boolean] Whether the Staking Operation is in a complete state
|
|
135
|
+
def completed?
|
|
136
|
+
status == 'complete'
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
# Returns a String representation of the Staking Operation.
|
|
140
|
+
# @return [String] a String representation of the Staking Operation
|
|
141
|
+
def to_s
|
|
142
|
+
Coinbase.pretty_print_object(
|
|
143
|
+
self.class,
|
|
144
|
+
id: id,
|
|
145
|
+
status: status,
|
|
146
|
+
network_id: network.id,
|
|
147
|
+
address_id: address_id
|
|
148
|
+
)
|
|
149
|
+
end
|
|
150
|
+
|
|
103
151
|
# Returns the Wallet ID of the Staking Operation.
|
|
104
152
|
# @return [String] The Wallet ID
|
|
105
153
|
def wallet_id
|
|
106
154
|
@model.wallet_id
|
|
107
155
|
end
|
|
108
156
|
|
|
109
|
-
# Waits until the Staking Operation is completed or failed by polling its status at the given interval.
|
|
110
|
-
# Timeout::Error if the Staking Operation takes longer than the given timeout.
|
|
157
|
+
# Waits until the Staking Operation is completed or failed by polling its status at the given interval.
|
|
111
158
|
# @param interval_seconds [Integer] The interval at which to poll, in seconds
|
|
112
159
|
# @param timeout_seconds [Integer] The maximum amount of time
|
|
113
160
|
# to wait for the StakingOperation to complete, in seconds
|
|
114
161
|
# @return [StakingOperation] The completed StakingOperation object
|
|
162
|
+
# @raise [Timeout::Error] if the Staking Operation takes longer than the given timeout.
|
|
115
163
|
def wait!(interval_seconds = 5, timeout_seconds = 3600)
|
|
116
164
|
start_time = Time.now
|
|
117
165
|
|
|
@@ -119,7 +167,7 @@ module Coinbase
|
|
|
119
167
|
reload
|
|
120
168
|
|
|
121
169
|
# Wait for the Staking Operation to be in a terminal state.
|
|
122
|
-
break if
|
|
170
|
+
break if terminal_state?
|
|
123
171
|
|
|
124
172
|
raise Timeout::Error, 'Staking Operation timed out' if Time.now - start_time > timeout_seconds
|
|
125
173
|
|
|
@@ -129,18 +177,58 @@ module Coinbase
|
|
|
129
177
|
self
|
|
130
178
|
end
|
|
131
179
|
|
|
180
|
+
# Complete helps the Staking Operation reach complete state, by polling its status at the given interval, signing
|
|
181
|
+
# and broadcasting any available transaction.
|
|
182
|
+
# @param key [Eth::Key] The key to sign the Staking Operation transactions with
|
|
183
|
+
# @param interval_seconds [Integer] The interval at which to poll, in seconds
|
|
184
|
+
# @param timeout_seconds [Integer] The maximum amount of time
|
|
185
|
+
# to wait for the StakingOperation to complete, in seconds
|
|
186
|
+
# @return [StakingOperation] The completed StakingOperation object
|
|
187
|
+
# @raise [Timeout::Error] if the Staking Operation takes longer than the given timeout.
|
|
188
|
+
def complete(key, interval_seconds: 5, timeout_seconds: 600)
|
|
189
|
+
start_time = Time.now
|
|
190
|
+
|
|
191
|
+
loop do
|
|
192
|
+
@transactions.each_with_index do |transaction, i|
|
|
193
|
+
next if transaction.signed?
|
|
194
|
+
|
|
195
|
+
transaction.sign(key)
|
|
196
|
+
@model = Coinbase.call_api do
|
|
197
|
+
stake_api.broadcast_staking_operation(
|
|
198
|
+
wallet_id,
|
|
199
|
+
address_id,
|
|
200
|
+
id,
|
|
201
|
+
{ signed_payload: transaction.raw.hex, transaction_index: i }
|
|
202
|
+
)
|
|
203
|
+
end
|
|
204
|
+
end
|
|
205
|
+
|
|
206
|
+
return self if terminal_state?
|
|
207
|
+
|
|
208
|
+
reload
|
|
209
|
+
|
|
210
|
+
raise Timeout::Error, 'Staking Operation timed out' if Time.now - start_time > timeout_seconds
|
|
211
|
+
|
|
212
|
+
sleep interval_seconds
|
|
213
|
+
end
|
|
214
|
+
|
|
215
|
+
self
|
|
216
|
+
end
|
|
217
|
+
|
|
132
218
|
# Fetch the StakingOperation with the provided network, address and staking operation ID.
|
|
133
|
-
# @param
|
|
219
|
+
# @param network [Coinbase::Network, Symbol] The Network or Network ID
|
|
134
220
|
# @param address_id [Symbol] The Address ID
|
|
135
221
|
# @param id [String] The ID of the StakingOperation
|
|
136
222
|
# @param wallet_id [String] The optional Wallet ID
|
|
137
223
|
# @return [Coinbase::StakingOperation] The staking operation
|
|
138
|
-
def self.fetch(
|
|
224
|
+
def self.fetch(network, address_id, id, wallet_id: nil)
|
|
225
|
+
network = Coinbase::Network.from_id(network)
|
|
226
|
+
|
|
139
227
|
staking_operation_model = Coinbase.call_api do
|
|
140
228
|
if wallet_id.nil?
|
|
141
|
-
stake_api.get_external_staking_operation(
|
|
229
|
+
stake_api.get_external_staking_operation(network.id, address_id, id)
|
|
142
230
|
else
|
|
143
|
-
|
|
231
|
+
wallet_stake_api.get_staking_operation(wallet_id, address_id, id)
|
|
144
232
|
end
|
|
145
233
|
end
|
|
146
234
|
|
|
@@ -160,13 +248,15 @@ module Coinbase
|
|
|
160
248
|
def reload
|
|
161
249
|
@model = Coinbase.call_api do
|
|
162
250
|
if wallet_id.nil?
|
|
163
|
-
stake_api.get_external_staking_operation(
|
|
251
|
+
stake_api.get_external_staking_operation(network.id, address_id, id)
|
|
164
252
|
else
|
|
165
|
-
|
|
253
|
+
wallet_stake_api.get_staking_operation(wallet_id, address_id, id)
|
|
166
254
|
end
|
|
167
255
|
end
|
|
168
256
|
|
|
169
|
-
|
|
257
|
+
update_transactions(@model.transactions)
|
|
258
|
+
|
|
259
|
+
self
|
|
170
260
|
end
|
|
171
261
|
|
|
172
262
|
# Fetches the presigned_voluntary exit messages for the staking operation
|
|
@@ -191,7 +281,7 @@ module Coinbase
|
|
|
191
281
|
raise TransactionNotSignedError unless transaction.signed?
|
|
192
282
|
|
|
193
283
|
Coinbase.call_api do
|
|
194
|
-
|
|
284
|
+
wallet_stake_api.broadcast_staking_operation(
|
|
195
285
|
wallet_id,
|
|
196
286
|
address_id,
|
|
197
287
|
id,
|
|
@@ -203,24 +293,32 @@ module Coinbase
|
|
|
203
293
|
self
|
|
204
294
|
end
|
|
205
295
|
|
|
206
|
-
def self.stake_api
|
|
207
|
-
Coinbase::Client::StakeApi.new(Coinbase.configuration.api_client)
|
|
208
|
-
end
|
|
209
|
-
|
|
210
296
|
private
|
|
211
297
|
|
|
212
298
|
def stake_api
|
|
213
|
-
@stake_api ||=
|
|
299
|
+
@stake_api ||= Coinbase::Client::StakeApi.new(Coinbase.configuration.api_client)
|
|
214
300
|
end
|
|
215
301
|
|
|
216
|
-
def
|
|
217
|
-
@
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
302
|
+
def wallet_stake_api
|
|
303
|
+
@wallet_stake_api ||= Coinbase::Client::WalletStakeApi.new(Coinbase.configuration.api_client)
|
|
304
|
+
end
|
|
305
|
+
|
|
306
|
+
def update_transactions(transactions)
|
|
307
|
+
# Only overwrite the transactions if the response is populated.
|
|
308
|
+
return unless transactions && !transactions.empty?
|
|
309
|
+
|
|
310
|
+
# Create a set of existing unsigned payloads to avoid duplicates.
|
|
311
|
+
existing_unsigned_payloads = Set.new
|
|
312
|
+
@transactions.each do |transaction|
|
|
313
|
+
existing_unsigned_payloads.add(transaction.unsigned_payload)
|
|
221
314
|
end
|
|
222
315
|
|
|
223
|
-
|
|
316
|
+
# Add transactions that are not already in the transactions array.
|
|
317
|
+
transactions.each do |transaction_model|
|
|
318
|
+
unless existing_unsigned_payloads.include?(transaction_model.unsigned_payload)
|
|
319
|
+
@transactions << Transaction.new(transaction_model)
|
|
320
|
+
end
|
|
321
|
+
end
|
|
224
322
|
end
|
|
225
323
|
end
|
|
226
324
|
end
|
|
@@ -62,7 +62,7 @@ module Coinbase
|
|
|
62
62
|
# Returns the USD conversion price of the StakingReward.
|
|
63
63
|
# @return [BigDecimal] The USD conversion price
|
|
64
64
|
def usd_conversion_price
|
|
65
|
-
BigDecimal(@model.usd_value.conversion_price.to_i)
|
|
65
|
+
BigDecimal(@model.usd_value.conversion_price.to_i)
|
|
66
66
|
end
|
|
67
67
|
|
|
68
68
|
# Returns the USD conversion time of the StakingReward.
|
data/lib/coinbase/trade.rb
CHANGED
|
@@ -15,12 +15,13 @@ module Coinbase
|
|
|
15
15
|
# @param from_asset_id [Symbol] The Asset ID of the Asset to trade from
|
|
16
16
|
# @param to_asset_id [Symbol] The Asset ID of the Asset to trade to
|
|
17
17
|
# @param amount [BigDecimal] The amount of the Asset to send
|
|
18
|
-
# @param
|
|
18
|
+
# @param network [Coinbase::Network, Symbol] The Network or Network ID of the Asset
|
|
19
19
|
# @param wallet_id [String] The Wallet ID of the sending Wallet
|
|
20
20
|
# @return [Send] The new pending Send object
|
|
21
|
-
def create(address_id:, from_asset_id:, to_asset_id:, amount:,
|
|
22
|
-
|
|
23
|
-
|
|
21
|
+
def create(address_id:, from_asset_id:, to_asset_id:, amount:, network:, wallet_id:)
|
|
22
|
+
network = Coinbase::Network.from_id(network)
|
|
23
|
+
from_asset = network.get_asset(from_asset_id)
|
|
24
|
+
to_asset = network.get_asset(to_asset_id)
|
|
24
25
|
|
|
25
26
|
model = Coinbase.call_api do
|
|
26
27
|
trades_api.create_trade(
|
|
@@ -75,10 +76,10 @@ module Coinbase
|
|
|
75
76
|
@model.trade_id
|
|
76
77
|
end
|
|
77
78
|
|
|
78
|
-
# Returns the Network
|
|
79
|
-
# @return [
|
|
80
|
-
def
|
|
81
|
-
Coinbase.
|
|
79
|
+
# Returns the Network of the Trade.
|
|
80
|
+
# @return [Coinbase::Network] The Network the Trade is on
|
|
81
|
+
def network
|
|
82
|
+
@network ||= Coinbase::Network.from_id(@model.network_id)
|
|
82
83
|
end
|
|
83
84
|
|
|
84
85
|
# Returns the Wallet ID of the Trade.
|
|
@@ -198,7 +199,7 @@ module Coinbase
|
|
|
198
199
|
# Returns a String representation of the Trade.
|
|
199
200
|
# @return [String] a String representation of the Trade
|
|
200
201
|
def to_s
|
|
201
|
-
"Coinbase::Trade{transfer_id: '#{id}', network_id: '#{
|
|
202
|
+
"Coinbase::Trade{transfer_id: '#{id}', network_id: '#{network.id}', " \
|
|
202
203
|
"address_id: '#{address_id}', from_asset_id: '#{from_asset_id}', " \
|
|
203
204
|
"to_asset_id: '#{to_asset_id}', from_amount: '#{from_amount}', " \
|
|
204
205
|
"to_amount: '#{to_amount}' status: '#{status}'}"
|
data/lib/coinbase/transaction.rb
CHANGED
|
@@ -68,6 +68,12 @@ module Coinbase
|
|
|
68
68
|
@model.from_address_id
|
|
69
69
|
end
|
|
70
70
|
|
|
71
|
+
# Returns the to address for the Transaction.
|
|
72
|
+
# @return [String] The to address
|
|
73
|
+
def to_address_id
|
|
74
|
+
@model.to_address_id
|
|
75
|
+
end
|
|
76
|
+
|
|
71
77
|
# Returns whether the Transaction is in a terminal state.
|
|
72
78
|
# @return [Boolean] Whether the Transaction is in a terminal state
|
|
73
79
|
def terminal_state?
|
data/lib/coinbase/transfer.rb
CHANGED
|
@@ -20,12 +20,13 @@ module Coinbase
|
|
|
20
20
|
# If the destination is a Wallet, it uses the default Address of the Wallet.
|
|
21
21
|
# If the destination is an Address, it uses the Address's ID.
|
|
22
22
|
# If the destination is a String, it uses it as the Address ID.
|
|
23
|
-
# @param
|
|
23
|
+
# @param network [Coinbase::Network, Symbol] The Network or Network ID of the Asset
|
|
24
24
|
# @param wallet_id [String] The Wallet ID of the sending Wallet
|
|
25
25
|
# @return [Transfer] The new pending Transfer object
|
|
26
26
|
# @raise [Coinbase::ApiError] If the Transfer fails
|
|
27
|
-
def create(address_id:, amount:, asset_id:, destination:,
|
|
28
|
-
|
|
27
|
+
def create(address_id:, amount:, asset_id:, destination:, network:, wallet_id:, gasless: false)
|
|
28
|
+
network = Coinbase::Network.from_id(network)
|
|
29
|
+
asset = network.get_asset(asset_id)
|
|
29
30
|
|
|
30
31
|
model = Coinbase.call_api do
|
|
31
32
|
transfers_api.create_transfer(
|
|
@@ -34,8 +35,8 @@ module Coinbase
|
|
|
34
35
|
{
|
|
35
36
|
amount: asset.to_atomic_amount(amount).to_i.to_s,
|
|
36
37
|
asset_id: asset.primary_denomination.to_s,
|
|
37
|
-
destination: Coinbase::Destination.new(destination,
|
|
38
|
-
network_id:
|
|
38
|
+
destination: Coinbase::Destination.new(destination, network: network).address_id,
|
|
39
|
+
network_id: network.normalized_id,
|
|
39
40
|
gasless: gasless
|
|
40
41
|
}
|
|
41
42
|
)
|
|
@@ -82,10 +83,10 @@ module Coinbase
|
|
|
82
83
|
@model.transfer_id
|
|
83
84
|
end
|
|
84
85
|
|
|
85
|
-
# Returns the Network
|
|
86
|
-
# @return [Symbol] The Network
|
|
87
|
-
def
|
|
88
|
-
Coinbase.
|
|
86
|
+
# Returns the Network of the Transfer.
|
|
87
|
+
# @return [Symbol] The Network
|
|
88
|
+
def network
|
|
89
|
+
@network ||= Coinbase::Network.from_id(@model.network_id)
|
|
89
90
|
end
|
|
90
91
|
|
|
91
92
|
# Returns the Wallet ID of the Transfer.
|
|
@@ -229,7 +230,7 @@ module Coinbase
|
|
|
229
230
|
# Returns a String representation of the Transfer.
|
|
230
231
|
# @return [String] a String representation of the Transfer
|
|
231
232
|
def to_s
|
|
232
|
-
"Coinbase::Transfer{transfer_id: '#{id}', network_id: '#{
|
|
233
|
+
"Coinbase::Transfer{transfer_id: '#{id}', network_id: '#{network.id}', " \
|
|
233
234
|
"from_address_id: '#{from_address_id}', destination_address_id: '#{destination_address_id}', " \
|
|
234
235
|
"asset_id: '#{asset_id}', amount: '#{amount}', transaction_link: '#{transaction_link}', " \
|
|
235
236
|
"status: '#{status}'}"
|
data/lib/coinbase/validator.rb
CHANGED
|
@@ -10,27 +10,31 @@ module Coinbase
|
|
|
10
10
|
end
|
|
11
11
|
|
|
12
12
|
# Returns a list of Validators for the provided network and asset.
|
|
13
|
-
# @param
|
|
13
|
+
# @param network [Coinbase::Nework, Symbol] The Network or Network ID
|
|
14
14
|
# @param asset_id [Symbol] The asset ID
|
|
15
15
|
# @param status [Symbol] The status of the validator. Defaults to nil.
|
|
16
16
|
# @return [Enumerable<Coinbase::Validator>] The validators
|
|
17
|
-
def self.list(
|
|
18
|
-
Coinbase::
|
|
19
|
-
|
|
20
|
-
|
|
17
|
+
def self.list(network, asset_id, status: nil)
|
|
18
|
+
network = Coinbase::Network.from_id(network)
|
|
19
|
+
|
|
20
|
+
Coinbase::Pagination.enumerate(lambda { |page|
|
|
21
|
+
list_page(network, asset_id, status, page)
|
|
22
|
+
}) do |validator|
|
|
21
23
|
new(validator)
|
|
22
24
|
end
|
|
23
25
|
end
|
|
24
26
|
|
|
25
27
|
# Returns a Validator for the provided network, asset, and validator.
|
|
26
|
-
# @param
|
|
28
|
+
# @param network [Coinbase::Network, Symbol] The Network or Network ID
|
|
27
29
|
# @param asset_id [Symbol] The asset ID
|
|
28
30
|
# @param validator_id [String] The validator ID
|
|
29
31
|
# @return [Coinbase::Validator] The validator
|
|
30
|
-
def self.fetch(
|
|
32
|
+
def self.fetch(network, asset_id, validator_id)
|
|
33
|
+
network = Coinbase::Network.from_id(network)
|
|
34
|
+
|
|
31
35
|
validator = Coinbase.call_api do
|
|
32
36
|
validators_api.get_validator(
|
|
33
|
-
|
|
37
|
+
network.normalized_id,
|
|
34
38
|
asset_id,
|
|
35
39
|
validator_id
|
|
36
40
|
)
|
|
@@ -62,10 +66,10 @@ module Coinbase
|
|
|
62
66
|
to_s
|
|
63
67
|
end
|
|
64
68
|
|
|
65
|
-
def self.list_page(
|
|
69
|
+
def self.list_page(network, asset_id, status, page)
|
|
66
70
|
Coinbase.call_api do
|
|
67
71
|
validators_api.list_validators(
|
|
68
|
-
|
|
72
|
+
network.normalized_id,
|
|
69
73
|
asset_id,
|
|
70
74
|
{
|
|
71
75
|
status: status,
|
|
@@ -75,8 +79,12 @@ module Coinbase
|
|
|
75
79
|
end
|
|
76
80
|
end
|
|
77
81
|
|
|
82
|
+
private_class_method :list_page
|
|
83
|
+
|
|
78
84
|
def self.validators_api
|
|
79
85
|
Coinbase::Client::ValidatorsApi.new(Coinbase.configuration.api_client)
|
|
80
86
|
end
|
|
87
|
+
|
|
88
|
+
private_class_method :validators_api
|
|
81
89
|
end
|
|
82
90
|
end
|