coinbase-sdk 0.0.14 → 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.
Files changed (62) hide show
  1. checksums.yaml +4 -4
  2. data/lib/coinbase/address/wallet_address.rb +31 -21
  3. data/lib/coinbase/address.rb +51 -17
  4. data/lib/coinbase/asset.rb +11 -8
  5. data/lib/coinbase/client/api/contract_events_api.rb +17 -9
  6. data/lib/coinbase/client/api/external_addresses_api.rb +85 -0
  7. data/lib/coinbase/client/api/networks_api.rb +85 -0
  8. data/lib/coinbase/client/api/stake_api.rb +74 -195
  9. data/lib/coinbase/client/api/validators_api.rb +2 -2
  10. data/lib/coinbase/client/api/wallet_stake_api.rb +263 -0
  11. data/lib/coinbase/client/models/address.rb +21 -4
  12. data/lib/coinbase/client/models/{native_eth_staking_context.rb → address_historical_balance_list.rb} +39 -35
  13. data/lib/coinbase/client/models/contract_event.rb +99 -8
  14. data/lib/coinbase/client/models/create_address_request.rb +14 -4
  15. data/lib/coinbase/client/models/create_transfer_request.rb +14 -4
  16. data/lib/coinbase/client/models/ethereum_validator_metadata.rb +11 -11
  17. data/lib/coinbase/client/models/feature.rb +2 -1
  18. data/lib/coinbase/client/models/feature_set.rb +307 -0
  19. data/lib/coinbase/client/models/{partial_eth_staking_context.rb → fetch_historical_staking_balances200_response.rb} +39 -35
  20. data/lib/coinbase/client/models/historical_balance.rb +273 -0
  21. data/lib/coinbase/client/models/network.rb +365 -0
  22. data/lib/coinbase/client/models/network_identifier.rb +44 -0
  23. data/lib/coinbase/client/models/sponsored_send.rb +338 -0
  24. data/lib/coinbase/client/models/staking_balance.rb +289 -0
  25. data/lib/coinbase/client/models/staking_context_context.rb +222 -74
  26. data/lib/coinbase/client/models/staking_operation.rb +2 -2
  27. data/lib/coinbase/client/models/staking_reward.rb +22 -6
  28. data/lib/coinbase/client/models/staking_reward_format.rb +2 -1
  29. data/lib/coinbase/client/models/staking_reward_usd_value.rb +257 -0
  30. data/lib/coinbase/client/models/transaction.rb +17 -7
  31. data/lib/coinbase/client/models/transaction_type.rb +2 -1
  32. data/lib/coinbase/client/models/transfer.rb +101 -8
  33. data/lib/coinbase/client/models/validator.rb +23 -2
  34. data/lib/coinbase/client/models/validator_status.rb +52 -0
  35. data/lib/coinbase/client/models/wallet.rb +13 -16
  36. data/lib/coinbase/client/models/webhook_event_type.rb +2 -1
  37. data/lib/coinbase/client.rb +12 -3
  38. data/lib/coinbase/constants.rb +0 -10
  39. data/lib/coinbase/contract_event.rb +104 -0
  40. data/lib/coinbase/correlation.rb +30 -0
  41. data/lib/coinbase/destination.rb +11 -9
  42. data/lib/coinbase/errors.rb +14 -0
  43. data/lib/coinbase/historical_balance.rb +53 -0
  44. data/lib/coinbase/middleware.rb +2 -0
  45. data/lib/coinbase/network.rb +103 -20
  46. data/lib/coinbase/server_signer.rb +14 -3
  47. data/lib/coinbase/smart_contract.rb +106 -0
  48. data/lib/coinbase/sponsored_send.rb +110 -0
  49. data/lib/coinbase/staking_balance.rb +92 -0
  50. data/lib/coinbase/staking_operation.rb +134 -36
  51. data/lib/coinbase/staking_reward.rb +18 -0
  52. data/lib/coinbase/trade.rb +10 -9
  53. data/lib/coinbase/transaction.rb +13 -3
  54. data/lib/coinbase/transfer.rb +65 -36
  55. data/lib/coinbase/validator.rb +18 -10
  56. data/lib/coinbase/version.rb +5 -0
  57. data/lib/coinbase/wallet/data.rb +31 -0
  58. data/lib/coinbase/wallet.rb +143 -182
  59. data/lib/coinbase/webhook.rb +181 -0
  60. data/lib/coinbase.rb +64 -21
  61. metadata +51 -5
  62. data/lib/coinbase/user.rb +0 -65
data/lib/coinbase.rb CHANGED
@@ -5,10 +5,13 @@ require_relative 'coinbase/address/wallet_address'
5
5
  require_relative 'coinbase/address/external_address'
6
6
  require_relative 'coinbase/asset'
7
7
  require_relative 'coinbase/authenticator'
8
+ require_relative 'coinbase/correlation'
8
9
  require_relative 'coinbase/balance'
9
10
  require_relative 'coinbase/balance_map'
11
+ require_relative 'coinbase/historical_balance'
10
12
  require_relative 'coinbase/client'
11
13
  require_relative 'coinbase/constants'
14
+ require_relative 'coinbase/contract_event'
12
15
  require_relative 'coinbase/destination'
13
16
  require_relative 'coinbase/errors'
14
17
  require_relative 'coinbase/faucet_transaction'
@@ -18,12 +21,16 @@ require_relative 'coinbase/pagination'
18
21
  require_relative 'coinbase/trade'
19
22
  require_relative 'coinbase/transfer'
20
23
  require_relative 'coinbase/transaction'
21
- require_relative 'coinbase/user'
22
24
  require_relative 'coinbase/wallet'
23
25
  require_relative 'coinbase/server_signer'
26
+ require_relative 'coinbase/smart_contract'
27
+ require_relative 'coinbase/sponsored_send'
28
+ require_relative 'coinbase/staking_balance'
24
29
  require_relative 'coinbase/staking_operation'
25
30
  require_relative 'coinbase/staking_reward'
26
31
  require_relative 'coinbase/validator'
32
+ require_relative 'coinbase/version'
33
+ require_relative 'coinbase/webhook'
27
34
  require 'json'
28
35
 
29
36
  # The Coinbase SDK.
@@ -70,6 +77,17 @@ module Coinbase
70
77
  @debug_api = false
71
78
  @use_server_signer = false
72
79
  @max_network_tries = 3
80
+ @default_network = Coinbase::Network::BASE_SEPOLIA
81
+ end
82
+
83
+ attr_reader :default_network
84
+
85
+ def default_network=(network)
86
+ unless network.is_a?(Coinbase::Network)
87
+ raise InvalidConfiguration, 'Default network must use a network constant, e.g. Coinbase::Network::BASE_MAINNET'
88
+ end
89
+
90
+ @default_network = network
73
91
  end
74
92
 
75
93
  # Sets configuration values based on the provided CDP API Key JSON file.
@@ -94,12 +112,6 @@ module Coinbase
94
112
  end
95
113
  end
96
114
 
97
- # Returns the default user.
98
- # @return [Coinbase::User] the default user
99
- def self.default_user
100
- @default_user ||= load_default_user
101
- end
102
-
103
115
  # Converts a string to a symbol, replacing hyphens with underscores.
104
116
  # @param string [String] the string to convert
105
117
  # @return [Symbol] the converted symbol
@@ -107,19 +119,14 @@ module Coinbase
107
119
  value.to_s.gsub('-', '_').to_sym
108
120
  end
109
121
 
110
- # Converts a network symbol to a string, replacing underscores with hyphens.
111
- # @param network_sym [Symbol] the network symbol to convert
112
- # @return [String] the converted string
113
- def self.normalize_network(network_sym)
114
- network_sym.to_s.gsub(/_/, '-')
115
- end
122
+ # Converts a Network object or network symbol with the string representation of the network ID,
123
+ # replacing underscores with hyphens.
124
+ # @param network_sym [Coinbase::Network, Symbol] The network or network symbol to convert
125
+ # @return [String] The string representation of the network ID
126
+ def self.normalize_network(network)
127
+ network_sym = network.is_a?(Coinbase::Network) ? network.id : network
116
128
 
117
- # Loads the default user.
118
- # @return [Coinbase::User] the default user
119
- def self.load_default_user
120
- users_api = Coinbase::Client::UsersApi.new(configuration.api_client)
121
- user_model = users_api.get_current_user
122
- Coinbase::User.new(user_model)
129
+ network_sym.to_s.gsub('_', '-')
123
130
  end
124
131
 
125
132
  # Wraps a call to the Platform API to ensure that the error is caught and
@@ -128,8 +135,17 @@ module Coinbase
128
135
  yield
129
136
  rescue Coinbase::Client::ApiError => e
130
137
  raise Coinbase::APIError.from_error(e), cause: nil
131
- rescue StandardError => e
132
- raise e
138
+ end
139
+
140
+ # Returns a pretty-printed object string that contains the object's class name and
141
+ # the details of the object, filtering out nil values.
142
+ # @param klass [Class] the class of the object
143
+ # @param details [Hash] the details of the object
144
+ # @return [String] the pretty-printed object string
145
+ def self.pretty_print_object(klass, **details)
146
+ filtered_details = details.filter { |_, v| !v.nil? }.map { |k, v| "#{k}: '#{v}'" }
147
+
148
+ "#{klass}{#{filtered_details.join(', ')}}"
133
149
  end
134
150
 
135
151
  # Returns whether to use a server signer to manage private keys.
@@ -138,9 +154,36 @@ module Coinbase
138
154
  Coinbase.configuration.use_server_signer
139
155
  end
140
156
 
157
+ # Returns the default network.
158
+ # @return [Coinbase::Network] the default network
159
+ def self.default_network
160
+ Coinbase.configuration.default_network
161
+ end
162
+
141
163
  # Returns whether the SDK is configured.
142
164
  # @return [bool] whether the SDK is configured
143
165
  def self.configured?
144
166
  !Coinbase.configuration.api_key_name.nil? && !Coinbase.configuration.api_key_private_key.nil?
145
167
  end
146
168
  end
169
+
170
+ # Initialize the Network constants.
171
+ Coinbase::Network.const_set(
172
+ 'ALL',
173
+ Coinbase::Client::NetworkIdentifier.all_vars.each_with_object([]) do |id, list|
174
+ next if id == Coinbase::Client::NetworkIdentifier::UNKNOWN_DEFAULT_OPEN_API
175
+
176
+ network = Coinbase::Network.new(id)
177
+
178
+ Coinbase::Network.const_set(id.upcase.gsub('-', '_'), network)
179
+
180
+ list << network
181
+ end
182
+ )
183
+
184
+ Coinbase::Network.const_set(
185
+ 'NETWORK_MAP',
186
+ Coinbase::Network::ALL.each_with_object({}) do |network, map|
187
+ map[network.id] = network
188
+ end
189
+ )
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: coinbase-sdk
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.14
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yuga Cohler
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-08-05 00:00:00.000000000 Z
11
+ date: 2024-08-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bigdecimal
@@ -136,6 +136,20 @@ dependencies:
136
136
  - - ">="
137
137
  - !ruby/object:Gem::Version
138
138
  version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: factory_bot
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
139
153
  - !ruby/object:Gem::Dependency
140
154
  name: pry
141
155
  requirement: !ruby/object:Gem::Requirement
@@ -192,6 +206,20 @@ dependencies:
192
206
  - - '='
193
207
  - !ruby/object:Gem::Version
194
208
  version: 1.63.1
209
+ - !ruby/object:Gem::Dependency
210
+ name: rubocop-rspec
211
+ requirement: !ruby/object:Gem::Requirement
212
+ requirements:
213
+ - - ">="
214
+ - !ruby/object:Gem::Version
215
+ version: '0'
216
+ type: :development
217
+ prerelease: false
218
+ version_requirements: !ruby/object:Gem::Requirement
219
+ requirements:
220
+ - - ">="
221
+ - !ruby/object:Gem::Version
222
+ version: '0'
195
223
  - !ruby/object:Gem::Dependency
196
224
  name: simplecov
197
225
  requirement: !ruby/object:Gem::Requirement
@@ -253,12 +281,14 @@ files:
253
281
  - lib/coinbase/client/api/assets_api.rb
254
282
  - lib/coinbase/client/api/contract_events_api.rb
255
283
  - lib/coinbase/client/api/external_addresses_api.rb
284
+ - lib/coinbase/client/api/networks_api.rb
256
285
  - lib/coinbase/client/api/server_signers_api.rb
257
286
  - lib/coinbase/client/api/stake_api.rb
258
287
  - lib/coinbase/client/api/trades_api.rb
259
288
  - lib/coinbase/client/api/transfers_api.rb
260
289
  - lib/coinbase/client/api/users_api.rb
261
290
  - lib/coinbase/client/api/validators_api.rb
291
+ - lib/coinbase/client/api/wallet_stake_api.rb
262
292
  - lib/coinbase/client/api/wallets_api.rb
263
293
  - lib/coinbase/client/api/webhooks_api.rb
264
294
  - lib/coinbase/client/api_client.rb
@@ -266,6 +296,7 @@ files:
266
296
  - lib/coinbase/client/configuration.rb
267
297
  - lib/coinbase/client/models/address.rb
268
298
  - lib/coinbase/client/models/address_balance_list.rb
299
+ - lib/coinbase/client/models/address_historical_balance_list.rb
269
300
  - lib/coinbase/client/models/address_list.rb
270
301
  - lib/coinbase/client/models/asset.rb
271
302
  - lib/coinbase/client/models/balance.rb
@@ -287,11 +318,14 @@ files:
287
318
  - lib/coinbase/client/models/ethereum_validator_metadata.rb
288
319
  - lib/coinbase/client/models/faucet_transaction.rb
289
320
  - lib/coinbase/client/models/feature.rb
321
+ - lib/coinbase/client/models/feature_set.rb
322
+ - lib/coinbase/client/models/fetch_historical_staking_balances200_response.rb
290
323
  - lib/coinbase/client/models/fetch_staking_rewards200_response.rb
291
324
  - lib/coinbase/client/models/fetch_staking_rewards_request.rb
292
325
  - lib/coinbase/client/models/get_staking_context_request.rb
293
- - lib/coinbase/client/models/native_eth_staking_context.rb
294
- - lib/coinbase/client/models/partial_eth_staking_context.rb
326
+ - lib/coinbase/client/models/historical_balance.rb
327
+ - lib/coinbase/client/models/network.rb
328
+ - lib/coinbase/client/models/network_identifier.rb
295
329
  - lib/coinbase/client/models/seed_creation_event.rb
296
330
  - lib/coinbase/client/models/seed_creation_event_result.rb
297
331
  - lib/coinbase/client/models/server_signer.rb
@@ -302,12 +336,15 @@ files:
302
336
  - lib/coinbase/client/models/signature_creation_event.rb
303
337
  - lib/coinbase/client/models/signature_creation_event_result.rb
304
338
  - lib/coinbase/client/models/signed_voluntary_exit_message_metadata.rb
339
+ - lib/coinbase/client/models/sponsored_send.rb
340
+ - lib/coinbase/client/models/staking_balance.rb
305
341
  - lib/coinbase/client/models/staking_context.rb
306
342
  - lib/coinbase/client/models/staking_context_context.rb
307
343
  - lib/coinbase/client/models/staking_operation.rb
308
344
  - lib/coinbase/client/models/staking_operation_metadata.rb
309
345
  - lib/coinbase/client/models/staking_reward.rb
310
346
  - lib/coinbase/client/models/staking_reward_format.rb
347
+ - lib/coinbase/client/models/staking_reward_usd_value.rb
311
348
  - lib/coinbase/client/models/trade.rb
312
349
  - lib/coinbase/client/models/trade_list.rb
313
350
  - lib/coinbase/client/models/transaction.rb
@@ -319,6 +356,7 @@ files:
319
356
  - lib/coinbase/client/models/validator.rb
320
357
  - lib/coinbase/client/models/validator_details.rb
321
358
  - lib/coinbase/client/models/validator_list.rb
359
+ - lib/coinbase/client/models/validator_status.rb
322
360
  - lib/coinbase/client/models/wallet.rb
323
361
  - lib/coinbase/client/models/wallet_list.rb
324
362
  - lib/coinbase/client/models/webhook.rb
@@ -327,21 +365,29 @@ files:
327
365
  - lib/coinbase/client/models/webhook_list.rb
328
366
  - lib/coinbase/client/version.rb
329
367
  - lib/coinbase/constants.rb
368
+ - lib/coinbase/contract_event.rb
369
+ - lib/coinbase/correlation.rb
330
370
  - lib/coinbase/destination.rb
331
371
  - lib/coinbase/errors.rb
332
372
  - lib/coinbase/faucet_transaction.rb
373
+ - lib/coinbase/historical_balance.rb
333
374
  - lib/coinbase/middleware.rb
334
375
  - lib/coinbase/network.rb
335
376
  - lib/coinbase/pagination.rb
336
377
  - lib/coinbase/server_signer.rb
378
+ - lib/coinbase/smart_contract.rb
379
+ - lib/coinbase/sponsored_send.rb
380
+ - lib/coinbase/staking_balance.rb
337
381
  - lib/coinbase/staking_operation.rb
338
382
  - lib/coinbase/staking_reward.rb
339
383
  - lib/coinbase/trade.rb
340
384
  - lib/coinbase/transaction.rb
341
385
  - lib/coinbase/transfer.rb
342
- - lib/coinbase/user.rb
343
386
  - lib/coinbase/validator.rb
387
+ - lib/coinbase/version.rb
344
388
  - lib/coinbase/wallet.rb
389
+ - lib/coinbase/wallet/data.rb
390
+ - lib/coinbase/webhook.rb
345
391
  homepage: https://github.com/coinbase/coinbase-sdk-ruby
346
392
  licenses:
347
393
  - Apache-2.0
data/lib/coinbase/user.rb DELETED
@@ -1,65 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative 'client'
4
- require_relative 'wallet'
5
-
6
- module Coinbase
7
- # A representation of a User. Users have Wallets, which can hold balances of Assets. Access the default User through
8
- # Coinbase#default_user.
9
- class User
10
- # Returns a new User object. Do not use this method directly. Instead, use Coinbase#default_user.
11
- # @param model [Coinbase::Client::User] the underlying User object
12
- def initialize(model)
13
- @model = model
14
- end
15
-
16
- # Returns the User ID.
17
- # @return [String] the User ID
18
- def id
19
- @model.id
20
- end
21
-
22
- # Creates a new Wallet belonging to the User.
23
- # @param network_id [String] (Optional) the ID of the blockchain network. Defaults to 'base-sepolia'.
24
- # @return [Coinbase::Wallet] the new Wallet
25
- def create_wallet(create_wallet_options = {})
26
- # For ruby 2.7 compatibility we cannot pass in keyword args when the create wallet
27
- # options is empty
28
- return Wallet.create if create_wallet_options.empty?
29
-
30
- Wallet.create(**create_wallet_options)
31
- end
32
-
33
- # Imports a Wallet belonging to the User.
34
- # @param data [Coinbase::Wallet::Data] the Wallet data to import
35
- # @return [Coinbase::Wallet] the imported Wallet
36
- def import_wallet(data)
37
- Wallet.import(data)
38
- end
39
-
40
- # Enumerates the Wallets belonging to the User.
41
- # @return [Enumerator<Coinbase::Wallet>] the Wallets belonging to the User
42
- def wallets
43
- Wallet.list
44
- end
45
-
46
- # Returns the Wallet with the given ID.
47
- # @param wallet_id [String] the ID of the Wallet
48
- # @return [Coinbase::Wallet] the unhydrated Wallet
49
- def wallet(wallet_id)
50
- Wallet.fetch(wallet_id)
51
- end
52
-
53
- # Returns a string representation of the User.
54
- # @return [String] a string representation of the User
55
- def to_s
56
- "Coinbase::User{user_id: '#{id}'}"
57
- end
58
-
59
- # Same as to_s.
60
- # @return [String] a string representation of the User
61
- def inspect
62
- to_s
63
- end
64
- end
65
- end