steem_api 1.1.4 → 1.1.5
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/Gemfile +0 -2
- data/Rakefile +67 -244
- data/lib/steem_api.rb +6 -0
- data/lib/steem_api/models/dynamic_global_properties.rb +0 -11
- data/lib/steem_api/models/transaction.rb +1 -21
- data/lib/steem_api/models/tx/custom/community.rb +1 -1
- data/lib/steem_api/version.rb +1 -1
- data/steem_api.gemspec +0 -1
- metadata +2 -22
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 60041edca796504270f02e4317f7931f96881bf31e46669f3e28b183392caf97
|
4
|
+
data.tar.gz: 50eb29b87407ed3da0d9e3ec8f31ca4eb665e98d8d1842eee4ef11723b8b6aaa
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1492198c88ef64ea3e9f105339729be53e073a41c8b5c8b9d0fd9e4330570120d929795df529aff746ee316f9347d08411a7ee141222f4b433a74d480c7569ce
|
7
|
+
data.tar.gz: a9931f0dc925f795b71136d2585fb33447662d7756f1468e6935a3e1a25d146fe49fb99462d56eb89ef5e1d4da180c0da8f7b89ec8e4a4b52220eb3784de1d91
|
data/Gemfile
CHANGED
data/Rakefile
CHANGED
@@ -2,7 +2,6 @@ require "bundler/gem_tasks"
|
|
2
2
|
require "rake/testtask"
|
3
3
|
require 'steem_api'
|
4
4
|
require 'awesome_print'
|
5
|
-
require 'pry'
|
6
5
|
|
7
6
|
Rake::TestTask.new(:test) do |t|
|
8
7
|
t.libs << 'test'
|
@@ -77,39 +76,6 @@ namespace :created do
|
|
77
76
|
ap customs
|
78
77
|
puts "# Total custom_json_operation: #{customs.values.sum}"
|
79
78
|
end
|
80
|
-
|
81
|
-
desc 'Lists comment_operations count grouped by author and date.'
|
82
|
-
task :comments, [:author, :days_ago, :min_count] do |t, args|
|
83
|
-
now = Time.now.utc
|
84
|
-
author = args[:author]
|
85
|
-
after_timestamp = now - ((args[:days_ago] || '30').to_i * 86400)
|
86
|
-
min_count = (args[:min_count] || 1000).to_i
|
87
|
-
|
88
|
-
comments = SteemApi::Tx::Comment.all
|
89
|
-
|
90
|
-
if !!author || author == '%'
|
91
|
-
unless author == '%'
|
92
|
-
comments = comments.where(author: author)
|
93
|
-
end
|
94
|
-
elsif author =~ /.*%.*/
|
95
|
-
comments = comments.where('author LIKE ?', author)
|
96
|
-
end
|
97
|
-
|
98
|
-
comments = comments.where('timestamp > ?', after_timestamp)
|
99
|
-
comments = comments.group('CAST(timestamp AS DATE)', :author)
|
100
|
-
comments = comments.order('cast_timestamp_as_date ASC')
|
101
|
-
|
102
|
-
comments = comments.count
|
103
|
-
|
104
|
-
comments = comments.map do |k, v|
|
105
|
-
[k, v] if v >= min_count
|
106
|
-
end.compact.to_h
|
107
|
-
|
108
|
-
puts "# Daily creation count by #{author.nil? ? 'all authors' : author} since #{after_timestamp} ..."
|
109
|
-
ap comments
|
110
|
-
puts "# Total authors: #{comments.keys.uniq.size}"
|
111
|
-
puts "# Total comments: #{comments.values.sum}"
|
112
|
-
end
|
113
79
|
end
|
114
80
|
|
115
81
|
desc 'Lists sum of transfers grouped by date, from, and to.'
|
@@ -131,22 +97,6 @@ task :transfers, [:minimum_amount, :symbol, :days_ago] do |t, args|
|
|
131
97
|
ap transfers.sum(:amount)
|
132
98
|
end
|
133
99
|
|
134
|
-
desc 'Lists sum of delegations grouped by year and from.'
|
135
|
-
task :delegations, [:minimum_amount, :days_ago] do |t, args|
|
136
|
-
now = Time.now.utc
|
137
|
-
minimum_amount = (args[:minimum_amount] || '1000000').to_f
|
138
|
-
after_timestamp = now - ((args[:days_ago] || '30').to_i * 86400)
|
139
|
-
|
140
|
-
delegations = SteemApi::Tx::DelegateVestingShare.where('vesting_shares > ?', minimum_amount)
|
141
|
-
delegations = delegations.where('timestamp > ?', after_timestamp)
|
142
|
-
delegations = delegations.group("FORMAT(timestamp, 'yyyy')", :delegator)
|
143
|
-
delegations = delegations.order('format_timestamp_yyyy ASC')
|
144
|
-
|
145
|
-
puts "Daily delegation sum over #{'%.3f' % minimum_amount} since #{after_timestamp} ..."
|
146
|
-
ap delegations.count(:vesting_shares).map{|k, v| [k[1], v] if v > 50}.compact.to_h
|
147
|
-
# ap delegations.sum(:vesting_shares)
|
148
|
-
end
|
149
|
-
|
150
100
|
desc 'Lists sum of powered up grouped by date, from, and to.'
|
151
101
|
task :powerup, [:minimum_amount, :symbol, :days_ago, :not_to_self] do |t, args|
|
152
102
|
now = Time.now.utc
|
@@ -266,55 +216,38 @@ task :app_names, [:app, :days_ago] do |t, args|
|
|
266
216
|
end
|
267
217
|
|
268
218
|
desc 'Do all crosschecks of given account.'
|
269
|
-
task :crosscheck, [:account
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
abort "No account found: #{account_name}" if account.nil?
|
279
|
-
end
|
280
|
-
|
281
|
-
Rake::Task["crosscheck:powerdowns"].invoke(account_name, after_timestamp)
|
282
|
-
Rake::Task["crosscheck:powerups"].invoke(account_name, after_timestamp)
|
283
|
-
Rake::Task["crosscheck:transfers"].invoke(account_name, after_timestamp)
|
284
|
-
Rake::Task["crosscheck:vesting_from"].invoke(account_name, after_timestamp)
|
285
|
-
Rake::Task["crosscheck:vesting_to"].invoke(account_name, after_timestamp)
|
219
|
+
task :crosscheck, [:account] do |t, args|
|
220
|
+
account = args[:account]
|
221
|
+
|
222
|
+
Rake::Task["crosscheck:powerdowns"].invoke(account)
|
223
|
+
Rake::Task["crosscheck:powerups"].invoke(account)
|
224
|
+
Rake::Task["crosscheck:transfers"].invoke(account)
|
225
|
+
Rake::Task["crosscheck:vesting_from"].invoke(account)
|
226
|
+
Rake::Task["crosscheck:vesting_to"].invoke(account)
|
286
227
|
end
|
287
228
|
|
288
229
|
namespace :crosscheck do
|
289
230
|
desc 'List of accounts grouped by transfer count crosschecked by memo of given account.'
|
290
|
-
task :transfers, [:account
|
231
|
+
task :transfers, [:account] do |t, args|
|
291
232
|
exchanges = %w(bittrex poloniex openledger blocktrades deepcrypto8 gopax
|
292
233
|
binanceexchange teambitwala changelly hitbtc-exchange korbit roomofsatoshi
|
293
234
|
shapeshiftio)
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
|
299
|
-
elsif exchanges.include?
|
300
|
-
|
301
|
-
|
302
|
-
|
303
|
-
if after_timestamp.nil? || after_timestamp == ''
|
304
|
-
account = SteemApi::Account.find_by(name: account_name)
|
305
|
-
|
306
|
-
abort "No account found: #{account_name}" if account.nil?
|
307
|
-
|
308
|
-
after_timestamp = account.created
|
235
|
+
account = args[:account]
|
236
|
+
|
237
|
+
if account.nil? || account == ''
|
238
|
+
puts 'Account name required.'
|
239
|
+
exit
|
240
|
+
elsif exchanges.include? account
|
241
|
+
puts 'That procedure is not recommended.'
|
242
|
+
exit
|
309
243
|
end
|
310
244
|
|
311
245
|
all = SteemApi::Tx::Transfer.where(type: 'transfer')
|
312
246
|
transfers = all.where.not(memo: '')
|
313
|
-
transfers = transfers.where('timestamp >= ?', after_timestamp)
|
314
247
|
transfers = transfers.where(to: exchanges)
|
315
248
|
transfers = if account =~ /%/
|
316
249
|
table = SteemApi::Tx::Transfer.arel_table
|
317
|
-
transfers.where(table[:from].matches(
|
250
|
+
transfers.where(table[:from].matches(account))
|
318
251
|
else
|
319
252
|
transfers.where(from: account)
|
320
253
|
end
|
@@ -330,30 +263,23 @@ namespace :crosscheck do
|
|
330
263
|
end
|
331
264
|
|
332
265
|
desc 'List of accounts grouped by vesting transfers from a given account'
|
333
|
-
task :vesting_from, [:account
|
334
|
-
|
335
|
-
after_timestamp = args[:after_timestamp]
|
336
|
-
|
337
|
-
abort 'Account name required.' if account_name.nil? || account_name == ''
|
266
|
+
task :vesting_from, [:account] do |t, args|
|
267
|
+
account = args[:account]
|
338
268
|
|
339
|
-
if
|
340
|
-
|
341
|
-
|
342
|
-
abort "No account found: #{account_name}" if account.nil?
|
343
|
-
|
344
|
-
after_timestamp = account.created
|
269
|
+
if account.nil? || account == ''
|
270
|
+
puts 'Account name required.'
|
271
|
+
exit
|
345
272
|
end
|
346
273
|
|
347
274
|
table = SteemApi::Tx::Transfer.arel_table
|
348
275
|
all = SteemApi::Tx::Transfer.where(type: 'transfer_to_vesting')
|
349
276
|
transfers = all.where(table[:from].not_eq(:to))
|
350
|
-
transfers = transfers.where('timestamp >= ?', after_timestamp)
|
351
277
|
transfers = transfers.where.not(to: '')
|
352
278
|
transfers = if account =~ /%/
|
353
279
|
table = SteemApi::Tx::Transfer.arel_table
|
354
|
-
transfers.where(table[:from].matches(
|
280
|
+
transfers.where(table[:from].matches(account))
|
355
281
|
else
|
356
|
-
transfers.where(from:
|
282
|
+
transfers.where(from: account)
|
357
283
|
end
|
358
284
|
|
359
285
|
if transfers.none?
|
@@ -366,30 +292,23 @@ namespace :crosscheck do
|
|
366
292
|
end
|
367
293
|
|
368
294
|
desc 'List of accounts grouped by vesting transfers to a given account'
|
369
|
-
task :vesting_to, [:account
|
370
|
-
|
371
|
-
after_timestamp = args[:after_timestamp]
|
372
|
-
|
373
|
-
abort 'Account name required.' if account_name.nil? || account_name == ''
|
295
|
+
task :vesting_to, [:account] do |t, args|
|
296
|
+
account = args[:account]
|
374
297
|
|
375
|
-
if
|
376
|
-
|
377
|
-
|
378
|
-
abort "No account found: #{account_name}" if account.nil?
|
379
|
-
|
380
|
-
after_timestamp = account.created
|
298
|
+
if account.nil? || account == ''
|
299
|
+
puts 'Account name required.'
|
300
|
+
exit
|
381
301
|
end
|
382
302
|
|
383
303
|
table = SteemApi::Tx::Transfer.arel_table
|
384
304
|
all = SteemApi::Tx::Transfer.where(type: 'transfer_to_vesting')
|
385
305
|
transfers = all.where(table[:from].not_eq(table[:to]))
|
386
|
-
transfers = transfers.where('timestamp >= ?', after_timestamp)
|
387
306
|
transfers = transfers.where.not(to: '')
|
388
307
|
transfers = if account =~ /%/
|
389
308
|
table = SteemApi::Tx::Transfer.arel_table
|
390
|
-
transfers.where(table[:to].matches(
|
309
|
+
transfers.where(table[:to].matches(account))
|
391
310
|
else
|
392
|
-
transfers.where(to:
|
311
|
+
transfers.where(to: account)
|
393
312
|
end
|
394
313
|
|
395
314
|
if transfers.none?
|
@@ -402,30 +321,22 @@ namespace :crosscheck do
|
|
402
321
|
end
|
403
322
|
|
404
323
|
desc 'List of accounts grouped by powerdown sums crosschecked by given account.'
|
405
|
-
task :powerdowns, [:account
|
406
|
-
|
407
|
-
after_timestamp = args[:after_timestamp]
|
408
|
-
|
409
|
-
abort 'Account name required.' if account_name.nil? || account_name == ''
|
324
|
+
task :powerdowns, [:account] do |t, args|
|
325
|
+
account = args[:account]
|
410
326
|
|
411
|
-
if
|
412
|
-
|
413
|
-
|
414
|
-
abort "No account found: #{account_name}" if account.nil?
|
415
|
-
|
416
|
-
after_timestamp = account.created
|
327
|
+
if account.nil? || account == ''
|
328
|
+
puts 'Account name required.'
|
329
|
+
exit
|
417
330
|
end
|
418
331
|
|
419
332
|
table = SteemApi::Vo::FillVestingWithdraw.arel_table
|
420
333
|
all = SteemApi::Vo::FillVestingWithdraw.where(table[:from_account].not_eq(table[:to_account]))
|
421
334
|
powerdowns = if account =~ /%/
|
422
|
-
all.where(table[:from_account].matches(
|
335
|
+
all.where(table[:from_account].matches(account))
|
423
336
|
else
|
424
|
-
all.where(from_account:
|
337
|
+
all.where(from_account: account)
|
425
338
|
end
|
426
339
|
|
427
|
-
powerdowns = powerdowns.where('timestamp >= ?', after_timestamp)
|
428
|
-
|
429
340
|
if powerdowns.none?
|
430
341
|
puts "No match."
|
431
342
|
else
|
@@ -438,30 +349,22 @@ namespace :crosscheck do
|
|
438
349
|
end
|
439
350
|
|
440
351
|
desc 'List of accounts grouped by powerup sums crosschecked by given account.'
|
441
|
-
task :powerups, [:account
|
442
|
-
|
443
|
-
after_timestamp = args[:after_timestamp]
|
444
|
-
|
445
|
-
abort 'Account name required.' if account_name.nil? || account_name == ''
|
352
|
+
task :powerups, [:account] do |t, args|
|
353
|
+
account = args[:account]
|
446
354
|
|
447
|
-
if
|
448
|
-
|
449
|
-
|
450
|
-
abort "No account found: #{account_name}" if account.nil?
|
451
|
-
|
452
|
-
after_timestamp = account.created
|
355
|
+
if account.nil? || account == ''
|
356
|
+
puts 'Account name required.'
|
357
|
+
exit
|
453
358
|
end
|
454
359
|
|
455
360
|
table = SteemApi::Vo::FillVestingWithdraw.arel_table
|
456
361
|
all = SteemApi::Vo::FillVestingWithdraw.where(table[:from_account].not_eq(table[:to_account]))
|
457
362
|
powerups = if account =~ /%/
|
458
|
-
all.where(table[:to_account].matches(
|
363
|
+
all.where(table[:to_account].matches(account))
|
459
364
|
else
|
460
|
-
all.where(to_account:
|
365
|
+
all.where(to_account: account)
|
461
366
|
end
|
462
367
|
|
463
|
-
powerups = powerups.where('timestamp >= ?', after_timestamp)
|
464
|
-
|
465
368
|
if powerups.none?
|
466
369
|
puts "No match."
|
467
370
|
else
|
@@ -474,23 +377,6 @@ namespace :crosscheck do
|
|
474
377
|
end
|
475
378
|
end
|
476
379
|
|
477
|
-
namespace :count do
|
478
|
-
desc 'Count transactions of type (default comment) grouped by date.'
|
479
|
-
task :transactions, [:type, :days_ago] do |t, args|
|
480
|
-
now = Time.now.utc
|
481
|
-
type = args[:type] || 'comment'
|
482
|
-
after_timestamp = now - ((args[:days_ago] || '7').to_i * 86400)
|
483
|
-
|
484
|
-
trxs = SteemApi::Transaction.where('expiration > ?', after_timestamp)
|
485
|
-
trxs = trxs.where("[Transactions].[type] = ?", type)
|
486
|
-
trxs = trxs.group('CAST([Transactions].[expiration] AS DATE)')
|
487
|
-
trxs = trxs.order('cast_transactions_expiration_as_date ASC')
|
488
|
-
trxs = trxs.count
|
489
|
-
|
490
|
-
ap trxs
|
491
|
-
end
|
492
|
-
end
|
493
|
-
|
494
380
|
namespace :rewards do
|
495
381
|
desc 'Lists author rewards grouped by date.'
|
496
382
|
task :author, [:symbol, :days_ago, :author] do |t, args|
|
@@ -522,11 +408,7 @@ namespace :rewards do
|
|
522
408
|
when 'VESTS' then rewards.sum(:vesting_payout)
|
523
409
|
when 'MVESTS'
|
524
410
|
rewards.sum('vesting_payout / 1000000')
|
525
|
-
|
526
|
-
rewards.sum("vesting_payout / 1000000 * #{SteemApi::DynamicGlobalProperties.steem_per_mvest.to_f}")
|
527
|
-
when 'USD'
|
528
|
-
rewards.sum("vesting_payout / 1000000 * #{SteemApi::DynamicGlobalProperties.usd_per_mvest.to_f}")
|
529
|
-
else; puts "Unknown symbol: #{symbol}. Symbols supported: SBD, STEEM, VESTS, MVESTS, SP, USD"
|
411
|
+
else; puts "Unknown symbol: #{symbol}. Symbols supported: SBD, STEEM, VESTS, MVESTS"
|
530
412
|
end
|
531
413
|
|
532
414
|
ap rewards
|
@@ -535,25 +417,16 @@ namespace :rewards do
|
|
535
417
|
end
|
536
418
|
|
537
419
|
desc 'Lists curation rewards grouped by date.'
|
538
|
-
task :curation, [:symbol, :days_ago
|
420
|
+
task :curation, [:symbol, :days_ago] do |t, args|
|
539
421
|
now = Time.now.utc
|
540
422
|
symbol = (args[:symbol] || 'MVESTS').upcase
|
541
423
|
after_timestamp = now - ((args[:days_ago] || '7').to_i * 86400)
|
542
|
-
|
543
|
-
|
424
|
+
|
544
425
|
rewards = SteemApi::Vo::CurationReward
|
545
426
|
rewards = rewards.where('timestamp > ?', after_timestamp)
|
546
427
|
rewards = rewards.group('CAST(timestamp AS DATE)')
|
547
428
|
rewards = rewards.order('cast_timestamp_as_date ASC')
|
548
429
|
|
549
|
-
if !!curator
|
550
|
-
if curator =~ /%/
|
551
|
-
rewards = rewards.where("curator LIKE ?", curator)
|
552
|
-
else
|
553
|
-
rewards = rewards.where(curator: curator)
|
554
|
-
end
|
555
|
-
end
|
556
|
-
|
557
430
|
puts "Daily curation reward #{symbol} sum grouped by date since #{after_timestamp} ..."
|
558
431
|
|
559
432
|
case symbol
|
@@ -561,12 +434,7 @@ namespace :rewards do
|
|
561
434
|
ap rewards.sum("TRY_PARSE(REPLACE(reward, ' VESTS', '') AS float)")
|
562
435
|
when 'MVESTS'
|
563
436
|
ap rewards.sum("TRY_PARSE(REPLACE(reward, ' VESTS', '') AS float) / 1000000")
|
564
|
-
|
565
|
-
steem_per_mvest = dgpo.total_vesting_fund_steem / (dgpo.total_vesting_shares / 1e6)
|
566
|
-
ap rewards.sum("TRY_PARSE(REPLACE(reward, ' VESTS', '') AS float) / 1000000 * #{SteemApi::DynamicGlobalProperties.steem_per_mvest.to_f}")
|
567
|
-
when 'USD'
|
568
|
-
ap rewards.sum("TRY_PARSE(REPLACE(reward, ' VESTS', '') AS float) / 1000000 * #{SteemApi::DynamicGlobalProperties.usd_per_mvest.to_f}")
|
569
|
-
else; puts "Unknown symbol: #{symbol}. Symbols supported: VESTS, MVESTS, SP, USD"
|
437
|
+
else; puts "Unknown symbol: #{symbol}. Symbols supported: VESTS, MVESTS"
|
570
438
|
end
|
571
439
|
end
|
572
440
|
end
|
@@ -624,77 +492,32 @@ task :claimed, [:account_name, :days_ago, :symbol] do |t, args|
|
|
624
492
|
puts "# Total claimed #{symbol}: #{claims.values.sum}"
|
625
493
|
end
|
626
494
|
|
627
|
-
|
628
|
-
task :balance, [:party_a, :party_b, :symbol, :days_ago] do |t, args|
|
495
|
+
task :balance, [:party_a, :party_b, :symbol] do |t, args|
|
629
496
|
party_a = args[:party_a]
|
630
497
|
party_b = args[:party_b]
|
631
498
|
symbol = args[:symbol].upcase
|
632
|
-
days_ago = args[:days_ago]
|
633
499
|
|
634
|
-
balance_a = SteemApi::Tx::Transfer.where(to: party_a, from: party_b, amount_symbol: symbol)
|
635
|
-
|
636
|
-
balance_a = balance_a.sum(:amount).to_f
|
637
|
-
|
638
|
-
balance_b = SteemApi::Tx::Transfer.where(to: party_b, from: party_a, amount_symbol: symbol)
|
639
|
-
balance_b = balance_b.after(days_ago.to_f.days.ago) if !!days_ago
|
640
|
-
balance_b = balance_b.sum(:amount).to_f
|
500
|
+
balance_a = SteemApi::Tx::Transfer.where(to: party_a, from: party_b, amount_symbol: symbol).sum(:amount).to_f
|
501
|
+
balance_b = SteemApi::Tx::Transfer.where(to: party_b, from: party_a, amount_symbol: symbol).sum(:amount).to_f
|
641
502
|
|
642
503
|
puts "#{party_a}: %.3f #{symbol}, difference: %.3f #{symbol}" % [balance_a, (balance_a - balance_b)]
|
643
504
|
puts "#{party_b}: %.3f #{symbol}, difference: %.3f #{symbol}" % [balance_b, (balance_b - balance_a)]
|
644
505
|
end
|
645
506
|
|
646
|
-
|
647
|
-
|
648
|
-
|
649
|
-
|
650
|
-
|
651
|
-
|
652
|
-
|
653
|
-
|
654
|
-
|
655
|
-
|
656
|
-
|
657
|
-
|
658
|
-
|
659
|
-
|
660
|
-
direction = (args[:direction] || 'in').downcase.to_sym
|
661
|
-
after_timestamp = now - ((args[:days_ago] || '90').to_f * 86400)
|
662
|
-
segment = (args[:segment] || 'daily').downcase.to_sym
|
663
|
-
|
664
|
-
converts = SteemApi::Vo::FillConvertRequest
|
665
|
-
converts = converts.where('timestamp > ?', after_timestamp)
|
666
|
-
converts = converts.where("TRY_PARSE(REPLACE(amount_in, ' SBD', '') AS float) > 0")
|
667
|
-
converts = converts.where("TRY_PARSE(REPLACE(amount_out, ' STEEM', '') AS float) > 0")
|
668
|
-
|
669
|
-
case segment
|
670
|
-
when :daily
|
671
|
-
converts = converts.group('CAST(timestamp AS DATE)')
|
672
|
-
converts = converts.order('cast_timestamp_as_date ASC')
|
673
|
-
when :monthly
|
674
|
-
converts = converts.group("FORMAT(timestamp, 'yyyy-MM')")
|
675
|
-
converts = converts.order('format_timestamp_yyyy_mm ASC')
|
676
|
-
else
|
677
|
-
raise "Unknown segment: #{direction}"
|
678
|
-
end
|
679
|
-
|
680
|
-
|
681
|
-
case direction
|
682
|
-
when :in
|
683
|
-
puts "#{segment.capitalize} conversion requests filled (in) sum grouped by date since #{after_timestamp} ..."
|
684
|
-
ap converts.sum("TRY_PARSE(REPLACE(amount_in, ' SBD', '') AS float)")
|
685
|
-
when :out
|
686
|
-
puts "#{segment.capitalize} conversion requests filled (out) sum grouped by date since #{after_timestamp} ..."
|
687
|
-
ap converts.sum("TRY_PARSE(REPLACE(amount_out, ' STEEM', '') AS float)")
|
688
|
-
when :ratio
|
689
|
-
puts "#{segment.capitalize} conversion requests filled (STEEM ratio) sum grouped by date since #{after_timestamp} ..."
|
690
|
-
ap converts.average("TRY_PARSE(REPLACE(amount_out, ' STEEM', '') AS float) / TRY_PARSE(REPLACE(amount_in, ' SBD', '') AS float)")
|
691
|
-
when :inverted_ratio
|
692
|
-
puts "#{segment.capitalize} conversion requests filled (SBD ratio) sum grouped by date since #{after_timestamp} ..."
|
693
|
-
ap converts.average("TRY_PARSE(REPLACE(amount_in, ' SBD', '') AS float) / TRY_PARSE(REPLACE(amount_out, ' STEEM', '') AS float)")
|
694
|
-
else
|
695
|
-
raise "Unknown direction: #{direction}"
|
696
|
-
end
|
697
|
-
end
|
507
|
+
# Doesn't look like this table exists.
|
508
|
+
# desc 'List conversion SBD conversion request sums grouped by day.'
|
509
|
+
# task :convert, [:days_ago] do |t, args|
|
510
|
+
# now = Time.now.utc
|
511
|
+
# after_timestamp = now - ((args[:days_ago] || '3.5').to_f * 86400)
|
512
|
+
#
|
513
|
+
# converts = SteemApi::Vo::FillConvertRequest
|
514
|
+
# converts = converts.where('timestamp > ?', after_timestamp)
|
515
|
+
# converts = converts.group('CAST(timestamp AS DATE)')
|
516
|
+
# converts = converts.order('cast_timestamp_as_date ASC')
|
517
|
+
#
|
518
|
+
# puts "Daily conversion requests failled sum grouped by date since #{after_timestamp} ..."
|
519
|
+
# ap converts.sum(:amount)
|
520
|
+
# end
|
698
521
|
|
699
522
|
desc 'Build a new version of the steem_api gem.'
|
700
523
|
task :build do
|
data/lib/steem_api.rb
CHANGED
@@ -65,6 +65,12 @@ require "steem_api/models/vo/proposal_pay"
|
|
65
65
|
module SteemApi
|
66
66
|
end
|
67
67
|
|
68
|
+
module SteemSQL
|
69
|
+
# Initial deprecation of SteemApi module in favor of SteemSQL.
|
70
|
+
|
71
|
+
include SteemApi
|
72
|
+
end
|
73
|
+
|
68
74
|
# Monkeypatch to implement: https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/issues/274#issuecomment-167578393
|
69
75
|
# Copied from: https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/blob/d4b6e4134e15d8d73be48ad6d8da1911f7001d9e/lib/active_record/connection_adapters/sqlserver/schema_statements.rb
|
70
76
|
# Switched "sp_helptext" from above (#view_information) to use "sp_columns"
|
@@ -1,19 +1,8 @@
|
|
1
|
-
require 'open-uri'
|
2
|
-
|
3
1
|
module SteemApi
|
4
2
|
class DynamicGlobalProperties < SteemApi::SqlBase
|
5
3
|
|
6
4
|
self.table_name = :DynamicGlobalProperties
|
7
5
|
|
8
|
-
def self.steem_per_mvest
|
9
|
-
dgpo = first
|
10
|
-
dgpo.total_vesting_fund_steem / (dgpo.total_vesting_shares / 1e6)
|
11
|
-
end
|
12
|
-
|
13
|
-
def self.usd_per_mvest
|
14
|
-
prices = JSON[open('https://postpromoter.net/api/prices').read]
|
15
|
-
(SteemApi::DynamicGlobalProperties.steem_per_mvest * prices.fetch('steem_price'))
|
16
|
-
end
|
17
6
|
end
|
18
7
|
end
|
19
8
|
|
@@ -1,5 +1,3 @@
|
|
1
|
-
require 'steem'
|
2
|
-
|
3
1
|
module SteemApi
|
4
2
|
class Transaction < SteemApi::SqlBase
|
5
3
|
|
@@ -15,31 +13,13 @@ module SteemApi
|
|
15
13
|
scope :yesterday, -> { before(1.day.ago).after(2.days.ago) }
|
16
14
|
|
17
15
|
scope :type, lambda { |type| where(type: type) }
|
18
|
-
scope :trx_id, lambda { |trx_id|
|
19
|
-
url = "https://anyx.io/v1/account_history_api/get_transaction?id=#{trx_id}"
|
20
|
-
trx = JSON[open(url).read]
|
21
|
-
expiration = Time.parse(trx.fetch('expiration') + 'Z')
|
22
|
-
block_num = trx.fetch('block_num')
|
23
|
-
transaction_num = trx.fetch('transaction_num') + 1
|
24
|
-
|
25
|
-
where(expiration: expiration, block_num: block_num, transaction_num: transaction_num)
|
26
|
-
}
|
27
|
-
|
28
|
-
def trx_id
|
29
|
-
@block_api ||= Steem::BlockApi.new
|
30
|
-
@trx_id ||= @block_api.get_block(block_num: block_num) do |result|
|
31
|
-
return nil if result.nil? || result.block.nil?
|
32
|
-
|
33
|
-
result.block.transaction_ids[transaction_num - 1]
|
34
|
-
end
|
35
|
-
end
|
36
16
|
|
37
17
|
# So you have a Transaction#tx_id and you want to know what the operation was
|
38
18
|
# that lead to it. Well, that's tricky because all of the ops are in their
|
39
19
|
# own tables. This method will (slowly) try to find the appropriate table.
|
40
20
|
def op
|
41
21
|
retries = 0
|
42
|
-
|
22
|
+
puts type
|
43
23
|
# Here, we map the type to class name, if supported. Most of them can be
|
44
24
|
# mapped automatically, e.g. "vote" => "Vote" but some types share tables
|
45
25
|
# with one another. We also use timestamps to narrow the search
|
@@ -11,7 +11,7 @@ module SteemApi
|
|
11
11
|
scope :nsfw, lambda { |nsfw = true| normalized_json.where("JSON_VALUE(json_metadata, '$[1].is_nsfw') = ?", nsfw) }
|
12
12
|
scope :account, lambda { |account|
|
13
13
|
account = [account].flatten
|
14
|
-
normalized_json.where("
|
14
|
+
normalized_json.where("required_auth IN(?) OR required_posting_auth IN(?) OR JSON_VALUE(json_metadata, '$[1].account') IN(?)", account, account, account)
|
15
15
|
}
|
16
16
|
scope :permlink, lambda { |permlink|
|
17
17
|
normalized_json.where("JSON_VALUE(json_metadata, '$[1].permlink') = ?", permlink)
|
data/lib/steem_api/version.rb
CHANGED
data/steem_api.gemspec
CHANGED
@@ -38,5 +38,4 @@ Gem::Specification.new do |spec|
|
|
38
38
|
spec.add_runtime_dependency "activerecord-sqlserver-adapter", [">= 4", "< 6"]
|
39
39
|
spec.add_runtime_dependency "activesupport", [">= 4", "< 6"]
|
40
40
|
spec.add_runtime_dependency 'awesome_print', '~> 1.7', '>= 1.7.0'
|
41
|
-
spec.add_runtime_dependency 'steem-ruby', '~> 0.9', '>= 0.9.4'
|
42
41
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: steem_api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.
|
4
|
+
version: 1.1.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrew Chaney (netuoso)
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2019-
|
12
|
+
date: 2019-12-07 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
@@ -313,26 +313,6 @@ dependencies:
|
|
313
313
|
- - ">="
|
314
314
|
- !ruby/object:Gem::Version
|
315
315
|
version: 1.7.0
|
316
|
-
- !ruby/object:Gem::Dependency
|
317
|
-
name: steem-ruby
|
318
|
-
requirement: !ruby/object:Gem::Requirement
|
319
|
-
requirements:
|
320
|
-
- - "~>"
|
321
|
-
- !ruby/object:Gem::Version
|
322
|
-
version: '0.9'
|
323
|
-
- - ">="
|
324
|
-
- !ruby/object:Gem::Version
|
325
|
-
version: 0.9.4
|
326
|
-
type: :runtime
|
327
|
-
prerelease: false
|
328
|
-
version_requirements: !ruby/object:Gem::Requirement
|
329
|
-
requirements:
|
330
|
-
- - "~>"
|
331
|
-
- !ruby/object:Gem::Version
|
332
|
-
version: '0.9'
|
333
|
-
- - ">="
|
334
|
-
- !ruby/object:Gem::Version
|
335
|
-
version: 0.9.4
|
336
316
|
description: Rails compatible gem that provides full DB connection and models to SteemSQL.com
|
337
317
|
email:
|
338
318
|
- andrewc@pobox.com
|