bittrex-enterprise 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: e2e5017cf52aae7b40cdfd73476a59ed0fbfee048946c5bf66556570c3927d6a
4
+ data.tar.gz: e608bcab6dc763b91395e9a4109c391a0ac616dab7af48b8eb028f55fcf6b3a8
5
+ SHA512:
6
+ metadata.gz: 10f6f44bbcdac296519b2306232ae954892af23c7399b1876ca63b14bddb5babc4e86659e5909ada494b4408d2056ac769fceb87698e8277f7a12af9216aa745
7
+ data.tar.gz: 3c9194e3f28433f3f1ad9674ef6c11c5ff4e969e34c20bb08cc9ba307abdd63891c546e00da0b97f16de8e5cbdd2ede8919cd95104548f44655b1e7e1531cefc
data/.gitignore ADDED
@@ -0,0 +1,12 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /_yardoc/
4
+ /coverage/
5
+ /doc/
6
+ /pkg/
7
+ /spec/reports/
8
+ /tmp/
9
+
10
+ # rspec failure tracking
11
+ .rspec_status
12
+ bittrex-enterprise-*.gem
data/.rspec ADDED
@@ -0,0 +1,3 @@
1
+ --format documentation
2
+ --color
3
+ --require spec_helper
data/Gemfile ADDED
@@ -0,0 +1,6 @@
1
+ source 'https://rubygems.org'
2
+
3
+ git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }
4
+
5
+ # Specify your gem's dependencies in bittrex-enterprise.gemspec
6
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,67 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ bittrex-enterprise (0.1.0)
5
+ addressable (~> 2.6)
6
+ httparty (~> 0.17)
7
+ json (~> 2.2)
8
+ openssl (~> 2.1)
9
+
10
+ GEM
11
+ remote: https://rubygems.org/
12
+ specs:
13
+ addressable (2.6.0)
14
+ public_suffix (>= 2.0.2, < 4.0)
15
+ ansi (1.5.0)
16
+ diff-lcs (1.3)
17
+ docile (1.3.2)
18
+ httparty (0.17.0)
19
+ mime-types (~> 3.0)
20
+ multi_xml (>= 0.5.2)
21
+ json (2.2.0)
22
+ mime-types (3.2.2)
23
+ mime-types-data (~> 3.2015)
24
+ mime-types-data (3.2019.0331)
25
+ multi_xml (0.6.0)
26
+ openssl (2.1.2)
27
+ public_suffix (3.1.0)
28
+ rake (10.5.0)
29
+ rspec (3.8.0)
30
+ rspec-core (~> 3.8.0)
31
+ rspec-expectations (~> 3.8.0)
32
+ rspec-mocks (~> 3.8.0)
33
+ rspec-core (3.8.1)
34
+ rspec-support (~> 3.8.0)
35
+ rspec-expectations (3.8.4)
36
+ diff-lcs (>= 1.2.0, < 2.0)
37
+ rspec-support (~> 3.8.0)
38
+ rspec-mocks (3.8.1)
39
+ diff-lcs (>= 1.2.0, < 2.0)
40
+ rspec-support (~> 3.8.0)
41
+ rspec-support (3.8.2)
42
+ simplecov (0.16.1)
43
+ docile (~> 1.1)
44
+ json (>= 1.8, < 3)
45
+ simplecov-html (~> 0.10.0)
46
+ simplecov-console (0.5.0)
47
+ ansi
48
+ simplecov
49
+ terminal-table
50
+ simplecov-html (0.10.2)
51
+ terminal-table (1.8.0)
52
+ unicode-display_width (~> 1.1, >= 1.1.1)
53
+ unicode-display_width (1.6.0)
54
+
55
+ PLATFORMS
56
+ ruby
57
+
58
+ DEPENDENCIES
59
+ bittrex-enterprise!
60
+ bundler (~> 1.16)
61
+ rake (~> 10.0)
62
+ rspec (~> 3.0)
63
+ simplecov (~> 0.16.0)
64
+ simplecov-console (~> 0.5.0)
65
+
66
+ BUNDLED WITH
67
+ 1.16.6
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2019 Vertbase
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,118 @@
1
+ # BittrexEnterprise
2
+
3
+ A simple Ruby gem for the Bittrex.com v3 API protocol.
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ ```ruby
10
+ gem 'bittrex-enterprise'
11
+ ```
12
+
13
+ And then execute:
14
+
15
+ $ bundle
16
+
17
+ Or install it yourself as:
18
+
19
+ $ gem install bittrex-enterprise
20
+
21
+ ## Usage
22
+
23
+ ### Load the gem
24
+ ```
25
+ require 'bittrex-enterprise'
26
+ ```
27
+
28
+ ### Setup your Bittrex API key
29
+
30
+ ```
31
+ BittrexEnterprise.setup do |config|
32
+ config.key = 'BITTREX_KEY'
33
+ config.secret = 'BITTREX_SECRET'
34
+ end
35
+ ```
36
+
37
+ ### Use the gem
38
+
39
+ This gem methods are named after the official Bittrex v3 Beta API Documentation: https://bittrex.github.io/api/v3
40
+
41
+ ```
42
+ # NO AUTH REQUIRED
43
+
44
+ ## Currencies
45
+
46
+ BittrexEnterprise::Currencies.list
47
+ BittrexEnterprise::Currencies.info
48
+
49
+ ## Markets
50
+
51
+ BittrexEnterprise::Markets.list
52
+ BittrexEnterprise::Markets.summaries
53
+ BittrexEnterprise::Markets.info
54
+ BittrexEnterprise::Markets.summary
55
+ BittrexEnterprise::Markets.order_book
56
+ BittrexEnterprise::Markets.trades
57
+ BittrexEnterprise::Markets.ticker
58
+ BittrexEnterprise::Markets.candles
59
+
60
+ ## Ping
61
+
62
+ BittrexEnterprise::Ping.send
63
+
64
+ # AUTH REQUIRED
65
+
66
+ ## Account
67
+
68
+ BittrexEnterprise::Account.retrieve
69
+
70
+ ## Addresses
71
+
72
+ BittrexEnterprise::Addresses.list
73
+ BittrexEnterprise::Addresses.create
74
+ BittrexEnterprise::Addresses.status
75
+
76
+ ## Balances
77
+
78
+ BittrexEnterprise::Balances.list
79
+ BittrexEnterprise::Balances.info
80
+
81
+ ## Deposits
82
+
83
+ BittrexEnterprise::Deposits.open
84
+ BittrexEnterprise::Deposits.closed
85
+ BittrexEnterprise::Deposits.by_tx_id
86
+ BittrexEnterprise::Deposits.retrieve
87
+
88
+ ## Orders
89
+
90
+ BittrexEnterprise::Orders.open
91
+ BittrexEnterprise::Orders.closed
92
+ BittrexEnterprise::Orders.retrieve
93
+ BittrexEnterprise::Orders.cancel
94
+ BittrexEnterprise::Orders.create
95
+
96
+ ## SubAccounts
97
+
98
+ BittrexEnterprise::SubAccounts.list
99
+ BittrexEnterprise::SubAccounts.create
100
+ BittrexEnterprise::SubAccounts.retrieve
101
+
102
+ ## Transfers
103
+
104
+ BittrexEnterprise::Transfers.sent
105
+ BittrexEnterprise::Transfers.received
106
+ BittrexEnterprise::Transfers.retrieve
107
+ BittrexEnterprise::Transfers.create
108
+
109
+ ## Withdrawals
110
+
111
+ BittrexEnterprise::Withdrawals.open
112
+ BittrexEnterprise::Withdrawals.closed
113
+ BittrexEnterprise::Withdrawals.by_tx_id
114
+ BittrexEnterprise::Withdrawals.retrieve
115
+ BittrexEnterprise::Withdrawals.cancel
116
+ BittrexEnterprise::Withdrawals.create
117
+
118
+ ```
data/bin/console ADDED
@@ -0,0 +1,19 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'bundler/setup'
4
+ require 'bittrex_enterprise'
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ # (If you use this, don't forget to add pry to your Gemfile!)
10
+ # require "pry"
11
+ # Pry.start
12
+
13
+ # BittrexEnterprise.setup do |config|
14
+ # config.key = ENV['BITTREX_KEY']
15
+ # config.secret = ENV['BITTREX_SECRET']
16
+ # end
17
+
18
+ require 'irb'
19
+ IRB.start(__FILE__)
data/bin/setup ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
@@ -0,0 +1,34 @@
1
+
2
+ lib = File.expand_path('lib', __dir__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'bittrex-enterprise/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = 'bittrex-enterprise'
8
+ spec.version = BittrexEnterprise::VERSION
9
+ spec.licenses = ['MIT']
10
+ spec.authors = ['Vertbase']
11
+ spec.email = ['dev@vertbase.com']
12
+
13
+ spec.summary = 'Ruby implementation of the Bittrex v3 API'
14
+ spec.description = 'Ruby implementation of the Bittrex v3 API'
15
+ spec.homepage = 'https://github.com/vertbase/bittrex-enterprise'
16
+
17
+ spec.files = `git ls-files -z`.split("\x0").reject do |f|
18
+ f.match(%r{^(test|spec|features)/})
19
+ end
20
+ spec.bindir = 'exe'
21
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
22
+ spec.require_paths = ['lib']
23
+
24
+ spec.add_dependency 'addressable', '~> 2.6'
25
+ spec.add_dependency 'json', '~> 2.2'
26
+ spec.add_dependency 'openssl', '~> 2.1'
27
+ spec.add_dependency 'httparty', '~> 0.17'
28
+
29
+ spec.add_development_dependency 'bundler', '~> 1.16'
30
+ spec.add_development_dependency 'rake', '~> 10.0'
31
+ spec.add_development_dependency 'rspec', '~> 3.0'
32
+ spec.add_development_dependency 'simplecov', '~> 0.16.0'
33
+ spec.add_development_dependency 'simplecov-console', '~> 0.5.0'
34
+ end
@@ -0,0 +1,19 @@
1
+ module BittrexEnterprise
2
+ class Account
3
+ include ApiHelpers
4
+
5
+ # ==============================================================================================
6
+ # AUTH REQUIRED ================================================================================
7
+ # ==============================================================================================
8
+
9
+ # ----------------------------------------- RETRIEVE -----------------------------------------
10
+ # Retrieve information for the account associated with the request. For now, it only echoes
11
+ # the subaccount if one was specified in the header, which can be used to verify that one is
12
+ # operating on the intended account. More fields will be added later.
13
+ # --------------------------------------------------------------------------------------------
14
+ def self.retrieve
15
+ get_signed 'account'
16
+ end
17
+
18
+ end
19
+ end
@@ -0,0 +1,41 @@
1
+ module BittrexEnterprise
2
+ class Addresses
3
+ include ApiHelpers
4
+
5
+ # ==============================================================================================
6
+ # AUTH REQUIRED ================================================================================
7
+ # ==============================================================================================
8
+
9
+ # -------------------------------------- LIST ------------------------------------------------
10
+ # List deposit addresses that have been requested or provisioned.
11
+ # --------------------------------------------------------------------------------------------
12
+ def self.list
13
+ get_signed 'addresses'
14
+ end
15
+
16
+
17
+ # -------------------------------------- CREATE ----------------------------------------------
18
+ # Request provisioning of a deposit address for a currency for which no address has been
19
+ # requested or provisioned.
20
+ #
21
+ # ------ PARAMS ------
22
+ # currency_symbol - string - required - the currency ID to provision a new address for
23
+ # --------------------------------------------------------------------------------------------
24
+ def self.create(currency_symbol)
25
+ post_signed 'addresses', currencySymbol: currency_symbol
26
+ end
27
+
28
+
29
+ # -------------------------------------- STATUS ----------------------------------------------
30
+ # Retrieve the status of the deposit address for a particular currency for which one has
31
+ # been requested or provisioned.
32
+ # ------ PARAMS ------
33
+ # currency_symbol - string - required - symbol of the currency to retrieve the deposit
34
+ # address for
35
+ # --------------------------------------------------------------------------------------------
36
+ def self.status(currency_symbol)
37
+ get_signed 'addresses/{currencySymbol}', currencySymbol: currency_symbol
38
+ end
39
+
40
+ end
41
+ end
@@ -0,0 +1,122 @@
1
+ module ApiHelpers
2
+ def self.included(base)
3
+ base.extend(ClassMethods)
4
+ end
5
+
6
+ module ClassMethods
7
+ def base_uri
8
+ 'https://api.bittrex.com/v3/'
9
+ end
10
+
11
+ def get(api_group, params = {})
12
+ params.compact!
13
+ api_group, params = setup_params(api_group, params)
14
+
15
+ begin
16
+ response = HTTParty.get(base_uri + api_group, query: params)
17
+ res_hash response
18
+ rescue => e
19
+ res_hash e.response
20
+ end
21
+ end
22
+
23
+ def get_signed(api_group, params = {})
24
+ params.compact!
25
+ api_group, params = setup_params(api_group, params)
26
+
27
+ url = base_uri + api_group
28
+
29
+ headers = setup_headers(url)
30
+
31
+ begin
32
+ response = HTTParty.get(url, {query: params, headers: headers})
33
+ res_hash response
34
+ rescue => e
35
+ res_hash e.response
36
+ end
37
+ end
38
+
39
+ def post_signed(api_group, params = {})
40
+ params.compact!
41
+ api_group, params = setup_params(api_group, params)
42
+
43
+ url = base_uri + api_group
44
+
45
+ headers = setup_headers(url)
46
+
47
+ begin
48
+ response = HTTParty.post(url, {body: params, headers: headers})
49
+ res_hash response
50
+ rescue => e
51
+ res_hash e.response
52
+ end
53
+ end
54
+
55
+ def delete_signed(api_group)
56
+ params.compact!
57
+ api_group, params = setup_params(api_group, params)
58
+
59
+ url = base_uri + api_group
60
+
61
+ headers = setup_headers(url)
62
+
63
+ begin
64
+ response = HTTParty.delete(url, {body: params, headers: headers})
65
+ res_hash response
66
+ rescue => e
67
+ res_hash e.response
68
+ end
69
+ end
70
+
71
+ def setup_params(api_group, params)
72
+ matchArr = api_group.match(/{(\D*)}/)&.captures
73
+ if matchArr
74
+ matchArr.each do |m|
75
+ api_group.gsub!("{#{m}}", params.delete(m.to_sym))
76
+ end
77
+ end
78
+ [api_group, params]
79
+ end
80
+
81
+ def setup_headers(uri, content='')
82
+ api_key = BittrexEnterprise.configuration.key
83
+ api_timestamp = DateTime.now.strftime('%Q')
84
+ api_content_hash = create_content_sign(content)
85
+ puts "CONTENT HASH: #{api_content_hash.inspect}"
86
+ api_subaccount_id = '' # TODO: make this work with Subaccounts
87
+ pre_sign = [api_timestamp, uri, 'GET', api_content_hash, api_subaccount_id].join('')
88
+ puts "PRE_SIGN: #{pre_sign.inspect}"
89
+ api_signature = create_sign_hmac(pre_sign)
90
+ puts "SIGNED SIG: #{api_signature.inspect}"
91
+
92
+ headers = {
93
+ "Content-Type": 'application/json',
94
+ "Api-Key": api_key,
95
+ "Api-Timestamp": api_timestamp,
96
+ "Api-Content-Hash": api_content_hash,
97
+ "Api-Signature": api_signature
98
+ }
99
+
100
+ # headers['Api-Subaccount-Id'] = api_subaccount_id if api_subaccount_id
101
+
102
+ headers
103
+ end
104
+
105
+ def create_sign_hmac(pre_sign)
106
+ OpenSSL::HMAC.hexdigest('sha512', BittrexEnterprise.configuration.secret, pre_sign) #.to_s
107
+ end
108
+
109
+ def create_content_sign(content)
110
+ Digest::SHA512.hexdigest(content.to_s)
111
+ end
112
+
113
+ def res_hash(res)
114
+ data = JSON.parse(res.body)
115
+ data.extend DeepSymbolizable
116
+ #### IF YOU WANT THE RAW RESPONSE IN ADDITION TO THE DATA USE THIS
117
+ #### { data: data.deep_symbolize, res: res }
118
+ #### INSTEAD OF THE FOLLOWING LINE
119
+ { data: data.deep_symbolize }
120
+ end
121
+ end
122
+ end
@@ -0,0 +1,31 @@
1
+ module BittrexEnterprise
2
+ class Balances
3
+ include ApiHelpers
4
+
5
+ # ==============================================================================================
6
+ # AUTH REQUIRED ================================================================================
7
+ # ==============================================================================================
8
+
9
+ # ---------------------------------------- LIST ----------------------------------------------
10
+ # List account balances across available currencies. Returns a Balance entry for each
11
+ # currency for which there is either a balance or an address.
12
+ # --------------------------------------------------------------------------------------------
13
+ def self.list
14
+ get_signed 'balances'
15
+ end
16
+
17
+
18
+ # --------------------------------------- INFO -----------------------------------------------
19
+ # Retrieve account balance for a specific currency. Request will always succeed when the
20
+ # currency exists, regardless of whether there is a balance or address.
21
+ #
22
+ # ------ PARAMS ------
23
+ # currency_symbol: string - required - unique symbol of the currency to retrieve the
24
+ # account balance for
25
+ # --------------------------------------------------------------------------------------------
26
+ def self.info(currency_symbol)
27
+ get_signed 'currencies/{currencySymbol}', currencySymbol: currency_symbol
28
+ end
29
+
30
+ end
31
+ end
@@ -0,0 +1,28 @@
1
+ module BittrexEnterprise
2
+ class Currencies
3
+ include ApiHelpers
4
+
5
+ # ==============================================================================================
6
+ # PUBLIC METHODS - NO AUTH REQUIRED ============================================================
7
+ # ==============================================================================================
8
+
9
+ # ------------------------------------- LIST -------------------------------------------------
10
+ # List currencies
11
+ # --------------------------------------------------------------------------------------------
12
+ def self.list
13
+ get 'currencies'
14
+ end
15
+
16
+
17
+ # ------------------------------------ INFO --------------------------------------------------
18
+ # Retrieve info on a specified currency.
19
+ #
20
+ # ------ PARAMS ------
21
+ # symbol: string - required - symbol of the currency to retrieve
22
+ # --------------------------------------------------------------------------------------------
23
+ def self.info(symbol)
24
+ get 'currencies/{symbol}', symbol: symbol
25
+ end
26
+
27
+ end
28
+ end
@@ -0,0 +1,78 @@
1
+ module BittrexEnterprise
2
+ class Deposits
3
+ include ApiHelpers
4
+
5
+ # ==============================================================================================
6
+ # AUTH REQUIRED ================================================================================
7
+ # ==============================================================================================
8
+
9
+ # ------------------------------------------ OPEN --------------------------------------------
10
+ # List open deposits. Results are sorted in inverse order of UpdatedAt, and are limited to
11
+ # the first 1000.
12
+ #
13
+ # ------ PARAMS ------ PARAMS MUST BE PASSED AS KEY VALUE PAIRS
14
+ # status - string enum [PENDING] - optional - filter by an open deposit status
15
+ # currencySymbol - string - optional - filter by currency
16
+ # --------------------------------------------------------------------------------------------
17
+ def self.open(params={})
18
+ get_signed 'deposits/open', params
19
+ end
20
+
21
+
22
+ # ----------------------------------------- CLOSED -------------------------------------------
23
+ # List closed deposits. StartDate and EndDate filters apply to the CompletedAt field.
24
+ # Pagination and the sort order of the results are in inverse order of the CompletedAt field.
25
+ #
26
+ # ------ PARAMS ------ PARAMS MUST BE PASSED AS KEY VALUE PAIRS
27
+ # status - string enum [COMPLETED, ORPHANED, INVALIDATED] - optional - filter by deposit status
28
+ #
29
+ # currencySymbol - string - optional - filter by currency
30
+ #
31
+ # nextPageToken - string - The unique identifier of the item that the resulting query result
32
+ # should start after, in the sort order of the given endpoint. Used for traversing
33
+ # a paginated set in the forward direction. (May only be specified if PreviousPageToken
34
+ # is not specified.)
35
+ #
36
+ # previousPageToken - string - The unique identifier of the item that the resulting query
37
+ # result should end before, in the sort order of the given endpoint. Used for traversing
38
+ # a paginated set in the reverse direction. (May only be specified if NextPageToken is
39
+ # not specified.)
40
+ #
41
+ # pageSize - integer - maximum number of items to retrieve -- default 100, minimum 1, maximum 200
42
+ #
43
+ # startDate - string(date-time) - Filters out results before this timestamp. In ISO 8601 format
44
+ # (e.g., "2019-01-02T16:23:45Z"). Precision beyond one second is not supported. Use
45
+ # pagination parameters for more precise filtering.
46
+ #
47
+ # endDate - string(date-time) - Filters out result after this timestamp. Uses the same format
48
+ # as StartDate. Either, both, or neither of StartDate and EndDate can be set. The only
49
+ # constraint on the pair is that, if both are set, then EndDate cannot be before StartDate.
50
+ # --------------------------------------------------------------------------------------------
51
+ def self.closed(params={})
52
+ get_signed 'deposits/closed', params
53
+ end
54
+
55
+
56
+ # ---------------------------------- BY TRANSACTION ID ---------------------------------------
57
+ # Retrieves all deposits for this account with the given TxId
58
+ #
59
+ # ------ PARAMS ------
60
+ # tx_id - string - required - the transaction id to lookup
61
+ # --------------------------------------------------------------------------------------------
62
+ def self.by_tx_id(tx_id)
63
+ get_signed 'deposits/ByTxId/{tdId}', txId: tx_id
64
+ end
65
+
66
+
67
+ # --------------------------------------- RETRIEVE -------------------------------------------
68
+ # Retrieve information for a specific deposit.
69
+ #
70
+ # ------ PARAMS ------
71
+ # deposit_id - string - required - (guid-formatted string) - ID of the deposit to retrieve
72
+ # --------------------------------------------------------------------------------------------
73
+ def self.retrieve(deposit_id)
74
+ get_signed 'deposits/{depositId}', depositId: deposit_id
75
+ end
76
+
77
+ end
78
+ end