cosgrove 0.0.4.0 → 0.0.4.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,18 +1,25 @@
1
1
  module Cosgrove
2
2
  module Market
3
3
  include Support
4
+ include Utils
4
5
  include ActionView::Helpers::NumberHelper
5
6
 
6
- def base_per_mvest(chain = :steem)
7
+ def base_per_mvest(chain = :hive)
7
8
  api(chain).get_dynamic_global_properties do |properties|
8
- total_vesting_fund_steem = properties.total_vesting_fund_steem.to_f
9
- total_vesting_shares_mvest = properties.total_vesting_shares.to_f / 1e6
9
+ case chain
10
+ when :steem
11
+ total_vesting_fund_base = properties.total_vesting_fund_steem.to_f
12
+ total_vesting_shares_mvest = properties.total_vesting_shares.to_f / 1e6
13
+ when :hive
14
+ total_vesting_fund_base = properties.total_vesting_fund_hive.to_f
15
+ total_vesting_shares_mvest = properties.total_vesting_shares.to_f / 1e6
16
+ end
10
17
 
11
- total_vesting_fund_steem / total_vesting_shares_mvest
18
+ total_vesting_fund_base / total_vesting_shares_mvest
12
19
  end
13
20
  end
14
21
 
15
- def price_feed(chain = :steem)
22
+ def price_feed(chain = :hive)
16
23
  api(chain).get_feed_history do |feed_history|
17
24
  current_median_history = feed_history.current_median_history
18
25
  base = current_median_history.base
@@ -42,29 +49,17 @@ module Cosgrove
42
49
 
43
50
  def market_data
44
51
  pol_btc_steem = JSON[open("https://poloniex.com/public?command=returnOrderBook&currencyPair=BTC_STEEM&depth=10").read]
45
- pol_btc_sbd = JSON[open("https://poloniex.com/public?command=returnOrderBook&currencyPair=BTC_SBD&depth=10").read]
46
52
  pol_usdt_btc = JSON[open("https://poloniex.com/public?command=returnOrderBook&currencyPair=USDT_BTC&depth=10").read]
47
53
 
48
54
  pol_btc_steem = pol_btc_steem['asks'].first.first.to_f
49
- pol_btc_sbd = pol_btc_sbd['asks'].first.first.to_f
50
55
  pol_usdt_btc = pol_usdt_btc['asks'].first.first.to_f
51
56
 
52
- pol_usdt_sbd = pol_usdt_btc * pol_btc_sbd
53
57
  pol_usdt_steem = pol_usdt_btc * pol_btc_steem
54
- # pol_sbd_steem = pol_usdt_sbd * ( pol_usdt_btc * pol_btc_steem )
55
58
 
56
- btx_btc_golos = JSON[open("https://bittrex.com/api/v1.1/public/getmarketsummary?market=btc-golos").read]
57
- btx_btc_gbg = JSON[open("https://bittrex.com/api/v1.1/public/getmarketsummary?market=btc-gbg").read]
58
59
  btx_usdt_btc = JSON[open("https://bittrex.com/api/v1.1/public/getmarketsummary?market=usdt-btc").read]
59
60
 
60
- btx_btc_golos = btx_btc_golos['result'].first['Ask'].to_f
61
- btx_btc_gbg = btx_btc_gbg['result'].first['Ask'].to_f
62
61
  btx_usdt_btc = btx_usdt_btc['result'].first['Ask'].to_f
63
62
 
64
- btx_usdt_gbg = btx_usdt_btc * btx_btc_gbg
65
- btx_usdt_golos = btx_usdt_btc * btx_btc_golos
66
- # btx_gbg_golos = btx_usdt_gbg * ( btx_usdt_btc * btx_btc_golos )
67
-
68
63
  btx_btc_steem = JSON[open("https://bittrex.com/api/v1.1/public/getmarketsummary?market=btc-steem").read]
69
64
  btx_btc_sbd = JSON[open("https://bittrex.com/api/v1.1/public/getmarketsummary?market=btc-sbd").read]
70
65
 
@@ -73,22 +68,63 @@ module Cosgrove
73
68
 
74
69
  btx_usdt_sbd = btx_usdt_btc * btx_btc_sbd
75
70
  btx_usdt_steem = btx_usdt_btc * btx_btc_steem
76
- # btx_sbd = btx_usdt_sbd * ( btx_usdt_btc * btx_btc_steem )
77
71
 
78
- [pol_usdt_steem, pol_usdt_sbd, btx_usdt_golos, btx_usdt_gbg, btx_usdt_steem, btx_usdt_sbd]
72
+ [pol_usdt_steem, btx_usdt_steem, btx_usdt_sbd]
73
+ end
74
+
75
+ def btx_market_data
76
+ btx_usdt_btc = JSON[open("https://bittrex.com/api/v1.1/public/getmarketsummary?market=usdt-btc").read]
77
+
78
+ btx_usdt_btc = btx_usdt_btc['result'].first['Last'].to_f
79
+
80
+ btx_btc_steem = JSON[open("https://bittrex.com/api/v1.1/public/getmarketsummary?market=btc-steem").read]
81
+ btx_btc_sbd = JSON[open("https://bittrex.com/api/v1.1/public/getmarketsummary?market=btc-sbd").read]
82
+
83
+ btx_btc_steem = btx_btc_steem['result'].first['Last'].to_f
84
+ btx_btc_sbd = btx_btc_sbd['result'].first['Last'].to_f
85
+
86
+ btx_usdt_sbd = btx_usdt_btc * btx_btc_sbd
87
+ btx_usdt_steem = btx_usdt_btc * btx_btc_steem
88
+
89
+ btx_btc_hive = JSON[open("https://bittrex.com/api/v1.1/public/getmarketsummary?market=btc-hive").read]
90
+ btx_usdt_hive = JSON[open("https://bittrex.com/api/v1.1/public/getmarketsummary?market=usdt-hive").read]
91
+ btx_btc_hbd = JSON[open("https://bittrex.com/api/v1.1/public/getmarketsummary?market=btc-hbd").read]
92
+
93
+ btx_btc_hive = btx_btc_hive['result'].first['Last'].to_f
94
+ btx_usdt_hive = btx_usdt_hive['result'].first['Last'].to_f
95
+ btx_btc_hbd = btx_btc_hbd['result'].first['Last'].to_f
96
+
97
+ btx_usdt_hbd = btx_usdt_btc * btx_btc_hbd
98
+
99
+ {
100
+ usdt_steem: btx_usdt_steem,
101
+ usdt_sbd: btx_usdt_sbd,
102
+ btc_steem: btx_btc_steem,
103
+ btc_sbd: btx_btc_sbd,
104
+ usdt_hive: btx_usdt_hive,
105
+ usdt_hbd: btx_usdt_hbd,
106
+ btc_hive: btx_btc_hive,
107
+ btc_hbd: btx_btc_hbd
108
+ }
79
109
  end
80
110
 
81
- def mvests(chain = :steem, account_names = [])
82
- pol_usdt_steem, _pol_usdt_sbd, btx_usdt_golos, _btx_usdt_gbg, btx_usdt_steem, btx_usdt_sbd = market_data
111
+ def mvests(chain = :hive, account_names = [])
112
+ chain = chain.to_s.downcase.to_sym
113
+ _btx_market_data = btx_market_data
114
+ btx_usdt_steem, btx_usdt_sbd = _btx_market_data[:usdt_steem], _btx_market_data[:usdt_sbd]
115
+ btx_usdt_hive, btx_usdt_hbd = _btx_market_data[:usdt_hive], _btx_market_data[:usdt_hbd]
83
116
  base_per_mvest, base_per_debt = price_feed(chain)
84
117
 
85
118
  if account_names.none?
86
- btx_base_per_dept_as_usdt = base_per_mvest * btx_usdt_steem
119
+ btx_base_per_dept_as_usdt = case chain
120
+ when :steem then base_per_mvest * btx_usdt_steem
121
+ when :hive then base_per_mvest * btx_usdt_hive
122
+ end
87
123
  btx_base_per_dept_as_usdt = number_to_currency(btx_base_per_dept_as_usdt, precision: 3)
88
124
 
89
125
  base_per_mvest = number_with_precision(base_per_mvest, precision: 3, delimiter: ',', separator: '.')
90
126
 
91
- base_per_debt = if chain == :steem
127
+ base_per_debt = if chain == :steem || chain == :hive
92
128
  number_to_currency(base_per_debt, precision: 3)
93
129
  else
94
130
  _btc_gld, usdt_gld_per_milli = gold_price
@@ -103,6 +139,7 @@ module Cosgrove
103
139
  when :steem then "`1 MV = 1M VESTS = #{base_per_mvest} STEEM = #{base_per_debt} = #{btx_base_per_dept_as_usdt} on Bittrex`"
104
140
  when :golos then "`1 MG = 1M GESTS = #{base_per_mvest} GOLOS = #{base_per_debt} GBG = #{base_per_debt_as_usdt}`"
105
141
  when :test then "`1 MT = 1M TESTS = #{base_per_mvest} TEST = #{base_per_debt}`"
142
+ when :hive then "`1 MV = 1M VESTS = #{base_per_mvest} HIVE = #{base_per_debt} = #{btx_base_per_dept_as_usdt} on Bittrex`"
106
143
  end
107
144
  end
108
145
 
@@ -132,7 +169,102 @@ module Cosgrove
132
169
  end
133
170
 
134
171
  account_names = account_names.map(&:downcase).uniq
135
- accounts = SteemApi::Account.where(name: account_names)
172
+ # accounts = SteemApi::Account.where(name: account_names)
173
+ # account = accounts.limit(1).first
174
+
175
+ # if accounts.count == account_names.size
176
+ # vests = accounts.pluck(:vesting_shares).map(&:to_f).sum
177
+ # delegated_vests = accounts.pluck(:delegated_vesting_shares).map(&:to_f).sum
178
+ # received_vests = accounts.pluck(:received_vesting_shares).map(&:to_f).sum
179
+ # elsif !wildcards
180
+ # valid_names = accounts.distinct(:name)
181
+ # unknown_names = account_names - valid_names
182
+ # return unknown_account(unknown_names.first)
183
+ # end
184
+
185
+ # if accounts.count == 1 && vests == 0.0
186
+ # # Falling back to RPC because balance is out of date and we only want
187
+ # # a single account.
188
+ # api(:steem).get_accounts([account.name]) do |accounts|
189
+ # account = accounts.first
190
+ # vests = account.vesting_shares.split(' ').first.to_f
191
+ # delegated_vests = account.delegated_vesting_shares.split(' ').first.to_f
192
+ # received_vests = account.received_vesting_shares.split(' ').first.to_f
193
+ # end
194
+ # end
195
+
196
+ # mvests = vests / 1000000
197
+ # delegated_vests = (received_vests - delegated_vests) / 1000000
198
+ # steem = base_per_mvest * mvests
199
+ # sbd = base_per_debt * mvests
200
+ # btx_sbd = base_per_mvest * mvests * btx_usdt_steem
201
+ #
202
+ # mvests = number_with_precision(mvests, precision: 3, delimiter: ',', separator: '.')
203
+ # delegated_sign = delegated_vests >= 0.0 ? '+' : '-'
204
+ # delegated_vests = number_with_precision(delegated_vests.abs, precision: 3, delimiter: ',', separator: '.')
205
+ # steem = number_with_precision(steem, precision: 3, delimiter: ',', separator: '.')
206
+ # sbd = number_to_currency(sbd, precision: 3)
207
+ # btx_sbd = number_to_currency(btx_sbd, precision: 3)
208
+ #
209
+ # if accounts.size == 1
210
+ # balance = ["#{mvests} MVESTS = #{steem} STEEM = #{sbd} = #{btx_sbd} on Bittrex"]
211
+ # unless delegated_vests == '0.000'
212
+ # balance << "(#{delegated_sign}#{delegated_vests} MVESTS delegated)"
213
+ # end
214
+ #
215
+ # "**#{account.name}:** `#{balance.join(' ')}`"
216
+ # else
217
+ # balance = ["#{mvests} MVESTS = #{steem} STEEM = #{sbd} = #{btx_sbd} on Bittrex"]
218
+ # unless delegated_vests == '0.000'
219
+ # balance << "(#{delegated_sign}#{delegated_vests} MVESTS delegated)"
220
+ # end
221
+ #
222
+ # "**#{pluralize(accounts.count, 'account')}:** `#{balance.join(' ')}`"
223
+ # end
224
+ when :golos
225
+ account = nil
226
+ gests = nil
227
+
228
+ api(:golos).get_accounts(account_names) do |accounts, error|
229
+ account = accounts.first
230
+ gests = account.vesting_shares.split(' ').first.to_f
231
+ end
232
+
233
+ mgests = gests / 1000000
234
+ golos = base_per_mvest * mgests
235
+ gbg = base_per_debt * mgests
236
+ _btc_gld, usdt_gld_per_milli = gold_price
237
+ usd = gbg * usdt_gld_per_milli
238
+
239
+ mgests = number_with_precision(mgests, precision: 3, delimiter: ',', separator: '.')
240
+ golos = number_with_precision(golos, precision: 3, delimiter: ',', separator: '.')
241
+ gbg = number_with_precision(gbg, precision: 3, delimiter: ',', separator: '.')
242
+ usd = number_to_currency(usd, precision: 3)
243
+
244
+ "**#{account.name}:** `#{mgests} MGESTS = #{golos} GOLOS = #{gbg} GBG = #{usd}`"
245
+ when :hive
246
+ vests = 0
247
+ delegated_vests = 0
248
+ received_vests = 0
249
+ account = nil
250
+ wildcards = false
251
+
252
+ account_names.each do |a|
253
+ if a =~ /.*\*$/
254
+ wildcards = true
255
+ lower_bound_name = a.split('*').first
256
+ api(chain).lookup_accounts(a, 1000) do |names, error|
257
+ if names.any?
258
+ account_names -= [a]
259
+ account_names += [lower_bound_name]
260
+ account_names += names.map { |name| name if name =~ /#{lower_bound_name}.*/ }.compact
261
+ end
262
+ end
263
+ end
264
+ end
265
+
266
+ account_names = account_names.map(&:downcase).uniq
267
+ accounts = HiveSQL::Account.where(name: account_names)
136
268
  account = accounts.limit(1).first
137
269
 
138
270
  if accounts.count == account_names.size
@@ -148,7 +280,7 @@ module Cosgrove
148
280
  if accounts.count == 1 && vests == 0.0
149
281
  # Falling back to RPC because balance is out of date and we only want
150
282
  # a single account.
151
- api(:steem).get_accounts([account.name]) do |accounts|
283
+ api(chain).get_accounts([account.name]) do |accounts|
152
284
  account = accounts.first
153
285
  vests = account.vesting_shares.split(' ').first.to_f
154
286
  delegated_vests = account.delegated_vesting_shares.split(' ').first.to_f
@@ -158,59 +290,41 @@ module Cosgrove
158
290
 
159
291
  mvests = vests / 1000000
160
292
  delegated_vests = (received_vests - delegated_vests) / 1000000
161
- steem = base_per_mvest * mvests
162
- sbd = base_per_debt * mvests
163
- btx_sbd = base_per_mvest * mvests * btx_usdt_steem
293
+ hive = base_per_mvest * mvests
294
+ hbd = base_per_debt * mvests
295
+ btx_hbd = base_per_mvest * mvests * btx_usdt_hive
164
296
 
165
297
  mvests = number_with_precision(mvests, precision: 3, delimiter: ',', separator: '.')
166
298
  delegated_sign = delegated_vests >= 0.0 ? '+' : '-'
167
299
  delegated_vests = number_with_precision(delegated_vests.abs, precision: 3, delimiter: ',', separator: '.')
168
- steem = number_with_precision(steem, precision: 3, delimiter: ',', separator: '.')
169
- sbd = number_to_currency(sbd, precision: 3)
170
- btx_sbd = number_to_currency(btx_sbd, precision: 3)
300
+ hive = number_with_precision(hive, precision: 3, delimiter: ',', separator: '.')
301
+ hbd = number_to_currency(hbd, precision: 3)
302
+ btx_hbd = number_to_currency(btx_hbd, precision: 3)
171
303
 
172
304
  if accounts.size == 1
173
- balance = ["#{mvests} MVESTS = #{steem} STEEM = #{sbd} = #{btx_sbd} on Bittrex"]
305
+ balance = ["#{mvests} MVESTS = #{hive} HIVE = #{hbd} = #{btx_hbd} on Bittrex"]
174
306
  unless delegated_vests == '0.000'
175
307
  balance << "(#{delegated_sign}#{delegated_vests} MVESTS delegated)"
176
308
  end
177
309
 
178
310
  "**#{account.name}:** `#{balance.join(' ')}`"
179
311
  else
180
- balance = ["#{mvests} MVESTS = #{steem} STEEM = #{sbd} = #{btx_sbd} on Bittrex"]
312
+ balance = ["#{mvests} MVESTS = #{hive} HIVE = #{hbd} = #{btx_hbd} on Bittrex"]
181
313
  unless delegated_vests == '0.000'
182
314
  balance << "(#{delegated_sign}#{delegated_vests} MVESTS delegated)"
183
315
  end
184
316
 
185
317
  "**#{pluralize(accounts.count, 'account')}:** `#{balance.join(' ')}`"
186
318
  end
187
- when :golos
188
- account = nil
189
- gests = nil
190
-
191
- api(:golos).get_accounts(account_names) do |accounts, error|
192
- account = accounts.first
193
- gests = account.vesting_shares.split(' ').first.to_f
194
- end
195
-
196
- mgests = gests / 1000000
197
- golos = base_per_mvest * mgests
198
- gbg = base_per_debt * mgests
199
- _btc_gld, usdt_gld_per_milli = gold_price
200
- usd = gbg * usdt_gld_per_milli
201
-
202
- mgests = number_with_precision(mgests, precision: 3, delimiter: ',', separator: '.')
203
- golos = number_with_precision(golos, precision: 3, delimiter: ',', separator: '.')
204
- gbg = number_with_precision(gbg, precision: 3, delimiter: ',', separator: '.')
205
- usd = number_to_currency(usd, precision: 3)
206
-
207
- "**#{account.name}:** `#{mgests} MGESTS = #{golos} GOLOS = #{gbg} GBG = #{usd}`"
208
319
  when :test then "Query not supported. No database for Testnet."
209
320
  end
210
321
  end
211
322
 
212
- def rewardpool(chain = :steem)
213
- pol_usdt_steem, _pol_usdt_sbd, btx_usdt_golos, _btx_usdt_gbg, btx_usdt_steem, btx_usdt_sbd = market_data
323
+ def rewardpool(chain = :hive)
324
+ chain = chain.to_s.downcase.to_sym
325
+ _btx_market_data = btx_market_data
326
+ btx_usdt_steem, btx_usdt_sbd = _btx_market_data[:usdt_steem], _btx_market_data[:usdt_sbd]
327
+ btx_usdt_hive, btx_usdt_hbd = _btx_market_data[:usdt_hive], _btx_market_data[:usdt_hbd]
214
328
  base_per_mvest, base_per_debt = price_feed(chain)
215
329
 
216
330
  case chain
@@ -242,30 +356,424 @@ module Cosgrove
242
356
  "Total Reward Fund: `#{total} GOLOS (Worth: #{total_gbg} GBG internally; #{btx_total_usd} on Bittrex)`"
243
357
  when :test
244
358
  "Total Reward Fund: `#{('%.3f' % total)} TEST (Worth: #{('%.3f' % total_usd)} TBD internally)`"
359
+ when :hive
360
+ total = api(chain).get_reward_fund('post') do |reward_fund|
361
+ reward_fund.reward_balance.split(' ').first.to_f
362
+ end
363
+
364
+ total_usd = (total / base_per_mvest) * base_per_debt
365
+ btx_total_usd = total * btx_usdt_hive
366
+
367
+ total = number_with_precision(total, precision: 0, delimiter: ',', separator: '.')
368
+ total_usd = number_to_currency(total_usd, precision: 0)
369
+ btx_total_usd = number_to_currency(btx_total_usd, precision: 0)
370
+
371
+ "Total Reward Fund: `#{total} HIVE (Worth: #{total_usd} internally; #{btx_total_usd} on Bittrex)`"
245
372
  end
246
373
  end
247
374
 
248
- def ticker
249
- pol_usdt_steem, pol_usdt_sbd, btx_usdt_golos, btx_usdt_gbg, btx_usdt_steem, btx_usdt_sbd = market_data
250
-
251
- pol_usdt_steem = number_to_currency(pol_usdt_steem, precision: 4)
252
- pol_usdt_sbd = number_to_currency(pol_usdt_sbd, precision: 4)
253
- btx_usdt_steem = number_to_currency(btx_usdt_steem, precision: 4)
254
- btx_usdt_sbd = number_to_currency(btx_usdt_sbd, precision: 4)
255
- btx_usdt_golos = number_to_currency(btx_usdt_golos, precision: 4)
256
- btx_usdt_gbg = number_to_currency(btx_usdt_gbg, precision: 4)
257
-
258
- ticker = []
259
- ticker << "`Poloniex: USD/STEEM: #{pol_usdt_steem}; USD/SBD: #{pol_usdt_sbd}`"
260
- ticker << "`Bittrex: USD/STEEM: #{btx_usdt_steem}; USD/SBD: #{btx_usdt_sbd}`"
261
- ticker << "`Bittrex: USD/GOLOS: #{btx_usdt_golos}; USD/GBG: #{btx_usdt_gbg}`"
262
- ticker.join("\n")
375
+ def render_ticker(message, event, ticker = {}, chain = :hive)
376
+ chain ||= :hive
377
+ ticker ||= {}
378
+ chain = chain.to_s.downcase.to_sym
379
+ return if ticker.size < 1
380
+
381
+ start_typing event
382
+
383
+ ticker_text = case chain
384
+ when :steem
385
+ "```markdown\n" +
386
+ "| | USD/STEEM | USD/SBD | BTC/STEEM | BTC/SBD |\n" +
387
+ "|-------------------|-------------|-------------|-------------|-------------|\n"
388
+ when :hive
389
+ "```markdown\n" +
390
+ "| | USD/HIVE | USD/HBD | BTC/HIVE | BTC/HBD |\n" +
391
+ "|-------------------|------------|-------------|------------|-------------|\n"
392
+ end
393
+
394
+ ticker_text += ticker.map do |key, value|
395
+ "| #{key} | #{value} |"
396
+ end.join("\n")
397
+
398
+ ticker_text += "\n```\n"
399
+
400
+ if message.nil? && !!event
401
+ message = event.respond ticker_text
402
+ elsif !!message
403
+ message.edit ticker_text
404
+ end
405
+
406
+ message || ticker_text
263
407
  end
264
408
 
265
- def promoted(chain = :steem, period = :today)
266
- return "Query not supported. No database for #{chain.to_s.capitalize}." unless chain == :steem
409
+ def ticker(event = nil, chain = :hive)
410
+ chain = chain.to_s.downcase.to_sym
411
+ message = nil
412
+ threads = []
413
+
414
+ case chain
415
+ when :steem
416
+ key_bittrex = 'bittrex.com '
417
+ key_binance = 'binance.com '
418
+ key_huobi = 'huobi.pro '
419
+ key_upbit = 'upbit.com '
420
+ # key_postpromoter = 'postpromoter.net '
421
+ key_coingecko = 'coingecko.com '
422
+ key_poloniex = 'poloniex.com '
423
+ # key_steem_engine = 'steem-engine.com '
424
+ ticker = {
425
+ key_bittrex => nil,
426
+ key_binance => nil,
427
+ key_huobi => nil,
428
+ key_upbit => nil,
429
+ # key_postpromoter => nil,
430
+ key_coingecko => nil,
431
+ key_poloniex => nil,
432
+ # key_steem_engine => nil
433
+ }
434
+
435
+ threads << Thread.new do
436
+ begin
437
+ _btx_market_data = btx_market_data
438
+ btx_usdt_steem, btx_usdt_sbd = _btx_market_data[:usdt_steem], _btx_market_data[:usdt_sbd]
439
+ btx_btc_steem, btx_btx_sbd = _btx_market_data[:btc_steem], _btx_market_data[:btc_sbd]
440
+
441
+ btx_usdt_steem = number_to_currency(btx_usdt_steem, precision: 4).rjust(11)
442
+ btx_usdt_sbd = number_to_currency(btx_usdt_sbd, precision: 4).rjust(11)
443
+ btx_btc_steem = number_to_currency(btx_btc_steem, precision: 8, unit: '').rjust(11)
444
+ btx_btx_sbd = number_to_currency(btx_btx_sbd, precision: 8, unit: '').rjust(11)
445
+
446
+ ticker[key_bittrex] = "#{btx_usdt_steem} | #{btx_usdt_sbd} | #{btx_btc_steem} | #{btx_btx_sbd}"
447
+ rescue => e
448
+ puts e
449
+ end
450
+ end
451
+
452
+ threads << Thread.new do
453
+ begin
454
+ bin_steem_btc = JSON[open('https://api.binance.com/api/v1/ticker/price?symbol=STEEMBTC').read].fetch('price').to_f
455
+ bin_btc_usdt = JSON[open('https://api.binance.com/api/v1/ticker/price?symbol=BTCUSDT').read].fetch('price').to_f
456
+ bin_usdt_steem = bin_btc_usdt * bin_steem_btc
457
+ bin_usdt_steem = number_to_currency(bin_usdt_steem, precision: 4).rjust(11)
458
+ bin_steem_btc = number_to_currency(bin_steem_btc, precision: 8, unit: '').rjust(11)
459
+
460
+ ticker[key_binance] = "#{bin_usdt_steem} | | #{bin_steem_btc} | "
461
+ rescue => e
462
+ puts e
463
+ end
464
+ end
465
+
466
+ threads << Thread.new do
467
+ begin
468
+ hub_steem_usdt = JSON[open('https://api.huobi.pro/market/detail/merged?symbol=steemusdt').read].fetch('tick').fetch('close').to_f
469
+ hub_steem_btc = JSON[open('https://api.huobi.pro/market/detail/merged?symbol=steembtc').read].fetch('tick').fetch('close').to_f
470
+ hub_steem_usdt = number_to_currency(hub_steem_usdt, precision: 4).rjust(11)
471
+ hub_steem_btc = number_to_currency(hub_steem_btc, precision: 8, unit: '').rjust(11)
472
+
473
+ ticker[key_huobi] = "#{hub_steem_usdt} | | #{hub_steem_btc} | "
474
+ rescue => e
475
+ puts e
476
+ end
477
+ end
478
+
479
+ threads << Thread.new do
480
+ begin
481
+ upb_btc_steem = JSON[open('https://api.upbit.com/v1/trades/ticks?market=BTC-STEEM').read][0].fetch('trade_price').to_f
482
+ upb_btc_sbd = JSON[open('https://api.upbit.com/v1/trades/ticks?market=BTC-SBD').read][0].fetch('trade_price').to_f
483
+ upb_usdt_btc = JSON[open('https://api.upbit.com/v1/trades/ticks?market=USDT-BTC').read][0].fetch('trade_price').to_f
484
+ upb_usdt_steem = upb_usdt_btc * upb_btc_steem
485
+ upb_usdt_sbd = upb_usdt_btc * upb_btc_sbd
486
+ upb_usdt_steem = number_to_currency(upb_usdt_steem, precision: 4).rjust(11)
487
+ upb_usdt_sbd = number_to_currency(upb_usdt_sbd, precision: 4).rjust(11)
488
+ upb_btc_steem = number_to_currency(upb_btc_steem, precision: 8, unit: '').rjust(11)
489
+ upb_btc_sbd = number_to_currency(upb_btc_sbd, precision: 8, unit: '').rjust(11)
490
+
491
+ ticker[key_upbit] = "#{upb_usdt_steem} | #{upb_usdt_sbd} | #{upb_btc_steem} | #{upb_btc_sbd}"
492
+ rescue => e
493
+ puts e
494
+ end
495
+ end
496
+
497
+ # threads << Thread.new do
498
+ # begin
499
+ # post_promoter_feed = JSON[open('https://postpromoter.net/api/prices').read]
500
+ # pp_usd_steem = post_promoter_feed.fetch('steem_price').to_f
501
+ # pp_usd_sbd = post_promoter_feed.fetch('sbd_price').to_f
502
+ # pp_usd_steem = number_to_currency(pp_usd_steem, precision: 4).rjust(11)
503
+ # pp_usd_sbd = number_to_currency(pp_usd_sbd, precision: 4).rjust(11)
504
+ #
505
+ # ticker[key_postpromoter] = "#{pp_usd_steem} | #{pp_usd_sbd} | | "
506
+ # rescue => e
507
+ # puts e
508
+ # end
509
+ # end
510
+
511
+ threads << Thread.new do
512
+ begin
513
+ cg_steem = JSON[open('https://api.coingecko.com/api/v3/coins/steem').read]
514
+ cg_sbd = JSON[open('https://api.coingecko.com/api/v3/coins/steem-dollars').read]
515
+ cg_usd_steem = cg_steem.fetch('market_data').fetch('current_price').fetch('usd').to_f
516
+ cg_btc_steem = cg_steem.fetch('market_data').fetch('current_price').fetch('btc').to_f
517
+ cg_usd_sbd = cg_sbd.fetch('market_data').fetch('current_price').fetch('usd').to_f
518
+ cg_btc_sbd = cg_sbd.fetch('market_data').fetch('current_price').fetch('btc').to_f
519
+ cg_usd_steem = number_to_currency(cg_usd_steem, precision: 4).rjust(11)
520
+ cg_usd_sbd = number_to_currency(cg_usd_sbd, precision: 4).rjust(11)
521
+ cg_btc_steem = number_to_currency(cg_btc_steem, precision: 8, unit: '').rjust(11)
522
+ cg_btc_sbd = number_to_currency(cg_btc_sbd, precision: 8, unit: '').rjust(11)
523
+
524
+ ticker[key_coingecko] = "#{cg_usd_steem} | #{cg_usd_sbd} | #{cg_btc_steem} | #{cg_btc_sbd}"
525
+ rescue => e
526
+ puts e
527
+ end
528
+ end
529
+
530
+ threads << Thread.new do
531
+ begin
532
+ pol_usdt_btc = JSON[open("https://poloniex.com/public?command=returnOrderBook&currencyPair=USDT_BTC&depth=10").read]
533
+ pol_btc_steem = JSON[open("https://poloniex.com/public?command=returnOrderBook&currencyPair=BTC_STEEM&depth=10").read]
534
+ pol_usdt_btc = pol_usdt_btc['asks'].first.first.to_f
535
+ pol_btc_steem = pol_btc_steem['asks'].first.first.to_f
536
+ pol_usdt_steem = pol_usdt_btc * pol_btc_steem
537
+ pol_usdt_steem = number_to_currency(pol_usdt_steem, precision: 4).rjust(11)
538
+ pol_btc_steem = number_to_currency(pol_btc_steem, precision: 8, unit: '').rjust(11)
539
+
540
+ ticker[key_poloniex] = "#{pol_usdt_steem} | | #{pol_btc_steem} | "
541
+ rescue => e
542
+ puts e
543
+ end
544
+ end
545
+
546
+ # threads << Thread.new do
547
+ # begin
548
+ # # btc_history_data = steem_engine_contracts(:find, {
549
+ # # contract: 'market',
550
+ # # table: 'tradesHistory',
551
+ # # query: {
552
+ # # symbol: 'BTCP'
553
+ # # },
554
+ # # limit: 1,
555
+ # # offset: 0,
556
+ # # indexes: [{index: '_id', descending: true}]
557
+ # # })
558
+ #
559
+ # # se_prices = JSON[open('https://postpromoter.net/api/prices').read]
560
+ # # se_usd_steem = se_prices['steem_price']
561
+ # # # se_steem_usd = btc_history_data[0]['price'].to_f * se_usd_steem
562
+ # # # se_btc_steem = se_usd_steem / se_steem_usd
563
+ # # se_usd_steem = number_to_currency(se_usd_steem, precision: 4).rjust(11)
564
+ # # # se_btc_steem = number_to_currency(se_btc_steem, precision: 8, unit: '').rjust(11)
565
+ # #
566
+ # # ticker[key_steem_engine] = "#{se_usd_steem} | | | "
567
+ # rescue => e
568
+ # puts e
569
+ # end
570
+ # end
571
+ when :hive
572
+ key_ionomy = 'ionomy.com '
573
+ key_bittrex = 'bittrex.com '
574
+ key_binance = 'binance.com '
575
+ key_huobi = 'huobi.pro '
576
+ key_probit = 'probit.com '
577
+ key_blocktrades = 'blocktrades.us '
578
+ key_coingecko = 'coingecko.com '
579
+ # key_hive_engine = 'hive-engine.com '
580
+ ticker = {
581
+ key_ionomy => nil,
582
+ key_bittrex => nil,
583
+ key_binance => nil,
584
+ key_huobi => nil,
585
+ key_probit => nil,
586
+ key_blocktrades => nil,
587
+ key_coingecko => nil,
588
+ # key_hive_engine => nil
589
+ }
590
+
591
+ threads << Thread.new do
592
+ begin
593
+ _btx_market_data = btx_market_data
594
+ btx_usdt_hive, btx_usdt_hbd = _btx_market_data[:usdt_hive], _btx_market_data[:usdt_hbd]
595
+ btx_btc_hive, btx_btx_hbd = _btx_market_data[:btc_hive], _btx_market_data[:btc_hbd]
596
+
597
+ btx_usdt_hive = number_to_currency(btx_usdt_hive, precision: 4).rjust(10)
598
+ btx_usdt_hbd = number_to_currency(btx_usdt_hbd, precision: 4).rjust(10)
599
+ btx_btc_hive = number_to_currency(btx_btc_hive, precision: 8, unit: '').rjust(10)
600
+ btx_btx_hbd = number_to_currency(btx_btx_hbd, precision: 8, unit: '').rjust(10)
601
+
602
+ ticker[key_bittrex] = "#{btx_usdt_hive} | #{btx_usdt_hbd} | #{btx_btc_hive} | #{btx_btx_hbd}"
603
+ rescue => e
604
+ puts e
605
+ end
606
+ end
607
+
608
+ threads << Thread.new do
609
+ begin
610
+ bin_hive_usdt = JSON[open('https://api.binance.com/api/v1/ticker/price?symbol=HIVEUSDT').read].fetch('price').to_f
611
+ bin_hive_btc = JSON[open('https://api.binance.com/api/v1/ticker/price?symbol=HIVEBTC').read].fetch('price').to_f
612
+ bin_hive_usdt = number_to_currency(bin_hive_usdt, precision: 4).rjust(10)
613
+ bin_hive_btc = number_to_currency(bin_hive_btc, precision: 8, unit: '').rjust(10)
614
+
615
+ ticker[key_binance] = "#{bin_hive_usdt} | | #{bin_hive_btc} | "
616
+ rescue => e
617
+ puts e
618
+ end
619
+ end
620
+
621
+ threads << Thread.new do
622
+ begin
623
+ hub_hive_usdt = JSON[open('https://api.huobi.pro/market/detail/merged?symbol=hiveusdt').read].fetch('tick').fetch('close').to_f
624
+ hub_hive_btc = JSON[open('https://api.huobi.pro/market/detail/merged?symbol=hivebtc').read].fetch('tick').fetch('close').to_f
625
+ hub_hive_usdt = number_to_currency(hub_hive_usdt, precision: 4).rjust(10)
626
+ hub_hive_btc = number_to_currency(hub_hive_btc, precision: 8, unit: '').rjust(10)
627
+
628
+ ticker[key_huobi] = "#{hub_hive_usdt} | | #{hub_hive_btc} | "
629
+ rescue => e
630
+ puts e
631
+ end
632
+ end
633
+
634
+ threads << Thread.new do
635
+ begin
636
+ ionomy_market = JSON[open('https://ionomy.com/api/v1/public/markets-summaries').read].fetch('data')
637
+ in_btc_hive = ionomy_market.find{|m| m.fetch('market') == 'btc-hive'}.fetch('price').to_f
638
+ in_btc_hive = number_to_currency(in_btc_hive, precision: 8, unit: '').rjust(10)
639
+
640
+ ticker[key_ionomy] = " | | #{in_btc_hive} | "
641
+ rescue => e
642
+ puts e
643
+ end
644
+ end
645
+
646
+ threads << Thread.new do
647
+ begin
648
+ probit_market = JSON[open('https://api.probit.com/api/exchange/v1/ticker?market_ids=HIVE-USDT').read].fetch('data')
649
+ pb_usd_hive = probit_market.find{|m| m.fetch('market_id') == 'HIVE-USDT'}.fetch('last').to_f
650
+ pb_usd_hive = number_to_currency(pb_usd_hive, precision: 4).rjust(10)
651
+
652
+ ticker[key_probit] = "#{pb_usd_hive} | | | "
653
+ rescue => e
654
+ puts e
655
+ end
656
+ end
657
+
658
+ threads << Thread.new do
659
+ begin
660
+ # See: https://cryptofresh.com/a/TRADE.HIVE
661
+ hive_market = JSON[open('https://cryptofresh.com/api/asset/markets?asset=TRADE.HIVE').read]
662
+ # See: https://cryptofresh.com/a/TRADE.HBD
663
+ hbd_market = JSON[open('https://cryptofresh.com/api/asset/markets?asset=TRADE.HIVE').read]
664
+ btr_usd_hive = hive_market.fetch('TRADE.USDT', {}).fetch('price', '')
665
+ btr_usd_hbd = hbd_market.fetch('TRADE.USDT', {}).fetch('price', '')
666
+ btr_btc_hive = hive_market.fetch('TRADE.BTC', {}).fetch('price', '')
667
+ btr_btc_hbd = hbd_market.fetch('TRADE.BTC', {}).fetch('price', '')
668
+
669
+ btr_usd_hive = number_to_currency(btr_usd_hive, precision: 4).rjust(10)
670
+ btr_usd_hbd = number_to_currency(btr_usd_hbd, precision: 4).rjust(10)
671
+ btr_btc_hive = number_to_currency(btr_btc_hive, precision: 8, unit: '').rjust(10)
672
+ btr_btc_hbd = number_to_currency(btr_btc_hbd, precision: 8, unit: '').rjust(10)
673
+
674
+ if btr_usd_hive =~ /[0-9]+/ || btr_usd_hbd =~ /[0-9]+/ || btr_btc_hive =~ /[0-9]+/ || btr_btc_hbd =~ /[0-9]+/
675
+ ticker[key_blocktrades] = "#{btr_usd_hive} | #{btr_usd_hbd} | #{btr_btc_hive} | #{btr_btc_hbd}"
676
+ else
677
+ ticker.delete(key_blocktrades)
678
+ end
679
+ rescue => e
680
+ puts e
681
+ end
682
+ end
683
+
684
+ threads << Thread.new do
685
+ begin
686
+ cg_hive = JSON[open('https://api.coingecko.com/api/v3/coins/hive').read] rescue {}
687
+ cg_hbd = JSON[open('https://api.coingecko.com/api/v3/coins/hive_dollar').read] rescue {}
688
+ cg_usd_hive = cg_hive.fetch('market_data').fetch('current_price').fetch('usd').to_f rescue -1
689
+ cg_btc_hive = cg_hive.fetch('market_data').fetch('current_price').fetch('btc').to_f rescue -1
690
+ cg_usd_hbd = cg_hbd.fetch('market_data').fetch('current_price').fetch('usd').to_f rescue -1
691
+ cg_btc_hbd = cg_hbd.fetch('market_data').fetch('current_price').fetch('btc').to_f rescue -1
692
+
693
+ cg_usd_hive = if cg_usd_hive == -1
694
+ 'N/A'
695
+ else
696
+ number_to_currency(cg_usd_hive, precision: 4)
697
+ end.rjust(10)
698
+
699
+ cg_usd_hbd = if cg_usd_hbd == -1
700
+ 'N/A'
701
+ else
702
+ number_to_currency(cg_usd_hbd, precision: 4)
703
+ end.rjust(10)
704
+
705
+ cg_btc_hive = if cg_btc_hive == -1
706
+ 'N/A'
707
+ else
708
+ number_to_currency(cg_btc_hive, precision: 8, unit: '')
709
+ end.rjust(10)
710
+
711
+ cg_btc_hbd = if cg_btc_hbd == -1
712
+ 'N/A'
713
+ else
714
+ number_to_currency(cg_btc_hbd, precision: 8, unit: '')
715
+ end.rjust(10)
716
+
717
+ ticker[key_coingecko] = "#{cg_usd_hive} | #{cg_usd_hbd} | #{cg_btc_hive} | #{cg_btc_hbd}"
718
+ rescue => e
719
+ puts e
720
+ end
721
+ end
722
+
723
+ # threads << Thread.new do
724
+ # begin
725
+ # hive_history_data = hive_engine_contracts(:find, {
726
+ # contract: 'market',
727
+ # table: 'tradesHistory',
728
+ # query: {
729
+ # symbol: 'SWAP.HIVE'
730
+ # },
731
+ # limit: 1,
732
+ # offset: 0,
733
+ # indexes: [{index: '_id', descending: true}]
734
+ # })
735
+ #
736
+ # # btc_history_data = hive_engine_contracts(:find, {
737
+ # # contract: 'market',
738
+ # # table: 'tradesHistory',
739
+ # # query: {
740
+ # # symbol: 'SWAP.BTC'
741
+ # # },
742
+ # # limit: 1,
743
+ # # offset: 0,
744
+ # # indexes: [{index: '_id', descending: true}]
745
+ # # })
746
+ #
747
+ # cg_prices = JSON[open('https://api.coingecko.com/api/v3/simple/price?ids=HIVE&vs_currencies=USD').read]
748
+ # cg_usd_hive = cg_prices['hive']['usd']
749
+ # he_usd_hive = hive_history_data[0]['price'].to_f * cg_usd_hive
750
+ # # # se_hive_usd = btc_history_data[0]['price'].to_f * se_usd_hive
751
+ # # # se_btc_hive = se_usd_hive / se_hive_usd
752
+ # # se_usd_hive = number_to_currency(se_usd_hive, precision: 4).rjust(10)
753
+ # # # se_btc_hive = number_to_currency(se_btc_hive, precision: 8, unit: '').rjust(10)
754
+ # #
755
+ # ticker[key_steem_engine] = "#{he_usd_hive} | | | "
756
+ # rescue => e
757
+ # puts e
758
+ # end
759
+ # end
760
+ end
761
+
762
+ start_typing event
763
+ threads.each(&:join)
267
764
 
268
- promoted = SteemApi::Tx::Transfer.where(to: 'null', amount_symbol: 'SBD').send(period)
765
+ render_ticker(message, event, ticker, chain)
766
+ end
767
+
768
+ def promoted(chain = :hive, period = :today)
769
+ chain = chain.to_s.downcase.to_sym
770
+
771
+ promoted = case chain
772
+ # when :steem then SteemApi::Tx::Transfer.where(to: 'null', amount_symbol: 'SBD').send(period)
773
+ when :hive then HiveSQL::Tx::Transfer.where(to: 'null', amount_symbol: 'HBD').send(period)
774
+ else
775
+ return "Query not supported. No database for #{chain.to_s.capitalize}."
776
+ end
269
777
  count_promoted = promoted.count
270
778
  sum_promoted = promoted.sum(:amount)
271
779
 
@@ -283,20 +791,33 @@ module Cosgrove
283
791
  "#{pluralize(count_promoted, 'post')} promoted #{period} totalling #{sum_promoted} (#{ratio} the size of reward pool)."
284
792
  end
285
793
 
286
- def supply(chain)
794
+ def supply(chain = :hive)
795
+ chain ||= :hive
796
+ chain = chain.to_s.downcase.to_sym
287
797
  base_per_mvest, base_per_debt = price_feed(chain)
288
798
  properties = api(chain).get_dynamic_global_properties do |_properties, error|
289
799
  _properties
290
800
  end
291
801
 
292
802
  current_supply = properties.current_supply.split(' ').first.to_f
293
- current_debt_supply = properties.current_sbd_supply.split(' ').first.to_f
294
- total_vesting_fund_steem = properties.total_vesting_fund_steem.split(' ').first.to_f
295
803
  virtual_supply = properties.virtual_supply.split(' ').first.to_f
296
804
  debt_steem = virtual_supply - current_supply
297
805
  total_base = (current_supply / base_per_mvest) * base_per_debt
298
806
  ratio = (debt_steem / virtual_supply) * 100
299
807
 
808
+ current_debt_supply, total_vesting_fund_base = case chain
809
+ when :steem
810
+ [
811
+ properties.current_sbd_supply.split(' ').first.to_f,
812
+ properties.total_vesting_fund_steem.split(' ').first.to_f
813
+ ]
814
+ when :hive
815
+ [
816
+ properties.current_hbd_supply.split(' ').first.to_f,
817
+ properties.total_vesting_fund_hive.split(' ').first.to_f
818
+ ]
819
+ end
820
+
300
821
  supply = []
301
822
  case chain
302
823
  when :steem
@@ -304,7 +825,7 @@ module Cosgrove
304
825
  reward_fund.reward_balance.split(' ').first.to_f
305
826
  end
306
827
 
307
- liquid_supply = current_supply - reward_balance - total_vesting_fund_steem
828
+ liquid_supply = current_supply - reward_balance - total_vesting_fund_base
308
829
  ratio_liquid = (liquid_supply / current_supply) * 100
309
830
 
310
831
  current_supply = number_with_precision(current_supply, precision: 0, delimiter: ',', separator: '.')
@@ -321,7 +842,7 @@ module Cosgrove
321
842
  reward_balance = properties.total_reward_fund_steem
322
843
  reward_balance = reward_balance.split(' ').first.to_f
323
844
 
324
- liquid_supply = current_supply - reward_balance - total_vesting_fund_steem
845
+ liquid_supply = current_supply - reward_balance - total_vesting_fund_base
325
846
  ratio_liquid = (liquid_supply / current_supply) * 100
326
847
 
327
848
  current_supply = number_with_precision(current_supply, precision: 0, delimiter: ',', separator: '.')
@@ -338,7 +859,7 @@ module Cosgrove
338
859
  reward_balance = properties.total_reward_fund_steem
339
860
  reward_balance = reward_balance.split(' ').first.to_f
340
861
 
341
- liquid_supply = current_supply - reward_balance - total_vesting_fund_steem
862
+ liquid_supply = current_supply - reward_balance - total_vesting_fund_base
342
863
  ratio_liquid = (liquid_supply / current_supply) * 100
343
864
 
344
865
  current_supply = number_with_precision(current_supply, precision: 0, delimiter: ',', separator: '.')
@@ -351,23 +872,44 @@ module Cosgrove
351
872
  supply << ["#{current_supply} CORE (Worth #{total_base} TBD)"]
352
873
  supply << ["#{current_debt_supply} TBD (#{ratio} of supply)"]
353
874
  supply << ["#{liquid_supply} Liquid CORE (#{ratio_liquid} of supply)"]
875
+ when :hive
876
+ reward_balance = api(chain).get_reward_fund('post') do |reward_fund|
877
+ reward_fund.reward_balance.split(' ').first.to_f
878
+ end
879
+
880
+ liquid_supply = current_supply - reward_balance - total_vesting_fund_base
881
+ ratio_liquid = (liquid_supply / current_supply) * 100
882
+
883
+ current_supply = number_with_precision(current_supply, precision: 0, delimiter: ',', separator: '.')
884
+ ratio = number_to_percentage(ratio, precision: 3)
885
+ total_base = number_to_currency(total_base, precision: 0)
886
+ current_debt_supply = number_to_currency(current_debt_supply, precision: 0)
887
+ liquid_supply = number_with_precision(liquid_supply, precision: 0, delimiter: ',', separator: '.')
888
+ ratio_liquid = number_to_percentage(ratio_liquid, precision: 3)
889
+
890
+ supply << ["#{current_supply} HIVE (Worth #{total_base} HBD)"]
891
+ supply << ["#{current_debt_supply} HBD (#{ratio} of supply)"]
892
+ supply << ["#{liquid_supply} Liquid HIVE (#{ratio_liquid} of supply)"]
354
893
  end
355
894
 
356
895
  "Supply: `" + supply.join('; ') + "`"
357
896
  end
358
897
 
359
898
  def mvests_sum(options = {})
360
- chain = options[:chain] || :steem
899
+ chain = options[:chain] || :hive
900
+ chain = chain.to_s.downcase.to_sym
361
901
  account_names = options[:account_names]
362
902
  case chain
363
- when :steem then SteemApi::Account.where(name: account_names).sum("TRY_PARSE(REPLACE(vesting_shares, ' VESTS', '') AS float)")
903
+ # when :steem then SteemApi::Account.where(name: account_names).sum("TRY_PARSE(REPLACE(vesting_shares, ' VESTS', '') AS float)")
364
904
  when :golos then "Query not supported. No database for Golos."
365
905
  when :test then "Query not supported. No database for Testnet."
906
+ when :hive then HiveSQL::Account.where(name: account_names).sum("TRY_PARSE(REPLACE(vesting_shares, ' VESTS', '') AS float)")
366
907
  end
367
908
  end
368
909
 
369
- def debt_exchange_rate(chain = :steem, limit = 19)
370
- chain = chain.to_sym
910
+ def debt_exchange_rate(chain = :hive, limit = 19)
911
+ chain ||= :hive
912
+ chain = chain.to_s.downcase.to_sym
371
913
  rates = api(chain).get_witnesses_by_vote('', limit) do |witnesses|
372
914
  witnesses.map(&:sbd_exchange_rate)
373
915
  end
@@ -375,6 +917,7 @@ module Cosgrove
375
917
  symbol = case chain
376
918
  when :steem then 'SBD'
377
919
  when :golos then 'GBG'
920
+ when :hive then 'HBD'
378
921
  end
379
922
 
380
923
  ratio = rates.map do |r|
@@ -390,8 +933,9 @@ module Cosgrove
390
933
  "#{price} #{symbol}"
391
934
  end
392
935
 
393
- def apr(chain = :steem, limit = 19)
394
- chain = chain.to_sym
936
+ def apr(chain = :hive, limit = 20)
937
+ chain ||= :hive
938
+ chain = chain.to_s.downcase.to_sym
395
939
  rates = api(chain).get_witnesses_by_vote('', limit) do |witnesses|
396
940
  witnesses.map(&:props).map { |p| p['sbd_interest_rate'] }
397
941
  end
@@ -401,8 +945,9 @@ module Cosgrove
401
945
  number_to_percentage(rate, precision: 3)
402
946
  end
403
947
 
404
- def effective_apr(chain = :steem)
405
- chain = chain.to_sym
948
+ def effective_apr(chain = :hive)
949
+ chain ||= :hive
950
+ chain = chain.to_s.downcase.to_sym
406
951
  rate = api(chain).get_dynamic_global_properties do |properties|
407
952
  properties.sbd_interest_rate
408
953
  end
@@ -411,8 +956,9 @@ module Cosgrove
411
956
  number_to_percentage(rate, precision: 3)
412
957
  end
413
958
 
414
- def effective_price(chain = :steem)
415
- chain = chain.to_sym
959
+ def effective_price(chain = :hive)
960
+ chain ||= :hive
961
+ chain = chain.to_s.downcase.to_sym
416
962
  current_median_history = api(chain).get_feed_history do |feed_history|
417
963
  feed_history.current_median_history
418
964
  end
@@ -423,6 +969,7 @@ module Cosgrove
423
969
  symbol = case chain
424
970
  when :steem then 'SBD'
425
971
  when :golos then 'GBG'
972
+ when :hive then 'HBD'
426
973
  end
427
974
 
428
975
  price = b / q