glueby 0.2.0 → 0.4.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (49) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ruby.yml +35 -0
  3. data/Gemfile +1 -0
  4. data/README.md +224 -16
  5. data/glueby.gemspec +2 -2
  6. data/lib/generators/glueby/contract/block_syncer_generator.rb +26 -0
  7. data/lib/generators/glueby/contract/reissuable_token_generator.rb +26 -0
  8. data/lib/generators/glueby/contract/templates/initializer.rb.erb +4 -2
  9. data/lib/generators/glueby/contract/templates/key_table.rb.erb +4 -3
  10. data/lib/generators/glueby/contract/templates/reissuable_token_table.rb.erb +10 -0
  11. data/lib/generators/glueby/contract/templates/system_information_table.rb.erb +12 -0
  12. data/lib/generators/glueby/contract/templates/timestamp_table.rb.erb +1 -1
  13. data/lib/generators/glueby/contract/templates/utxo_table.rb.erb +3 -2
  14. data/lib/generators/glueby/contract/templates/wallet_table.rb.erb +2 -2
  15. data/lib/glueby.rb +28 -11
  16. data/lib/glueby/active_record.rb +8 -0
  17. data/lib/glueby/active_record/system_information.rb +15 -0
  18. data/lib/glueby/block_syncer.rb +98 -0
  19. data/lib/glueby/configuration.rb +62 -0
  20. data/lib/glueby/contract.rb +2 -2
  21. data/lib/glueby/contract/active_record.rb +1 -0
  22. data/lib/glueby/contract/active_record/reissuable_token.rb +26 -0
  23. data/lib/glueby/contract/fee_estimator.rb +38 -0
  24. data/lib/glueby/contract/payment.rb +10 -6
  25. data/lib/glueby/contract/timestamp.rb +8 -6
  26. data/lib/glueby/contract/timestamp/syncer.rb +13 -0
  27. data/lib/glueby/contract/token.rb +78 -26
  28. data/lib/glueby/contract/tx_builder.rb +23 -20
  29. data/lib/glueby/fee_provider.rb +73 -0
  30. data/lib/glueby/fee_provider/tasks.rb +141 -0
  31. data/lib/glueby/generator/migrate_generator.rb +1 -1
  32. data/lib/glueby/internal/wallet.rb +56 -13
  33. data/lib/glueby/internal/wallet/abstract_wallet_adapter.rb +25 -6
  34. data/lib/glueby/internal/wallet/active_record/utxo.rb +1 -0
  35. data/lib/glueby/internal/wallet/active_record/wallet.rb +15 -5
  36. data/lib/glueby/internal/wallet/active_record_wallet_adapter.rb +25 -8
  37. data/lib/glueby/internal/wallet/active_record_wallet_adapter/syncer.rb +14 -0
  38. data/lib/glueby/internal/wallet/errors.rb +3 -0
  39. data/lib/glueby/internal/wallet/tapyrus_core_wallet_adapter.rb +42 -14
  40. data/lib/glueby/railtie.rb +14 -0
  41. data/lib/glueby/version.rb +1 -1
  42. data/lib/glueby/wallet.rb +3 -2
  43. data/lib/tasks/glueby/block_syncer.rake +29 -0
  44. data/lib/tasks/glueby/contract/timestamp.rake +4 -26
  45. data/lib/tasks/glueby/fee_provider.rake +18 -0
  46. metadata +26 -11
  47. data/.travis.yml +0 -7
  48. data/lib/glueby/contract/fee_provider.rb +0 -21
  49. data/lib/tasks/glueby/contract/wallet_adapter.rake +0 -42
@@ -0,0 +1,14 @@
1
+ module Glueby
2
+ class Railtie < ::Rails::Railtie
3
+ initializer "glueby.register_syncers" do
4
+ BlockSyncer.register_syncer(Contract::Timestamp::Syncer)
5
+ end
6
+
7
+ rake_tasks do
8
+ load "tasks/glueby/contract.rake"
9
+ load "tasks/glueby/contract/timestamp.rake"
10
+ load "tasks/glueby/block_syncer.rake"
11
+ load "tasks/glueby/fee_provider.rake"
12
+ end
13
+ end
14
+ end
@@ -1,3 +1,3 @@
1
1
  module Glueby
2
- VERSION = "0.2.0"
2
+ VERSION = "0.4.2"
3
3
  end
data/lib/glueby/wallet.rb CHANGED
@@ -13,6 +13,7 @@ module Glueby
13
13
  new(Glueby::Internal::Wallet.load(wallet_id))
14
14
  end
15
15
 
16
+ # @deprecated - Use Glueby.configure instead
16
17
  def configure(config)
17
18
  case config[:adapter]
18
19
  when 'core'
@@ -32,8 +33,8 @@ module Glueby
32
33
  end
33
34
 
34
35
  # @return [HashMap] hash of balances which key is color_id or empty string, and value is amount
35
- def balances
36
- utxos = @internal_wallet.list_unspent
36
+ def balances(only_finalized = true)
37
+ utxos = @internal_wallet.list_unspent(only_finalized)
37
38
  utxos.inject({}) do |balances, output|
38
39
  key = output[:color_id] || ''
39
40
  balances[key] ||= 0
@@ -0,0 +1,29 @@
1
+ namespace :glueby do
2
+ namespace :contract do
3
+ namespace :block_syncer do
4
+ desc '[Deprecated use glueby:block_syncer:start instead] sync block into database'
5
+ task :start, [] => [:environment] do |_, _|
6
+ puts '[Deprecated] glueby:contract:block_syncer:start is deprecated. Use \'glueby:block_syncer:start\''
7
+ Rake::Task['glueby:block_syncer:start'].execute
8
+ end
9
+ end
10
+ end
11
+ end
12
+
13
+
14
+ namespace :glueby do
15
+ namespace :block_syncer do
16
+ desc 'sync block into database'
17
+ task :start, [] => [:environment] do |_, _|
18
+ latest_block_num = Glueby::Internal::RPC.client.getblockcount
19
+ synced_block = Glueby::AR::SystemInformation.synced_block_height
20
+ (synced_block.int_value + 1..latest_block_num).each do |height|
21
+ ::ActiveRecord::Base.transaction do
22
+ Glueby::BlockSyncer.new(height).run
23
+ synced_block.update(info_value: height.to_s)
24
+ end
25
+ puts "success in synchronization (block height=#{height})"
26
+ end
27
+ end
28
+ end
29
+ end
@@ -12,10 +12,10 @@ module Glueby
12
12
  begin
13
13
  ::ActiveRecord::Base.transaction do
14
14
  wallet = Glueby::Wallet.load(t.wallet_id)
15
- tx = create_tx(wallet, t.prefix, t.content_hash, Glueby::Contract::FixedFeeProvider.new)
16
- t.update(txid: tx.txid, status: :unconfirmed)
17
-
18
- wallet.internal_wallet.broadcast(tx)
15
+ tx = create_tx(wallet, t.prefix, t.content_hash, Glueby::Contract::FixedFeeEstimator.new)
16
+ wallet.internal_wallet.broadcast(tx) do |tx|
17
+ t.update(txid: tx.txid, status: :unconfirmed)
18
+ end
19
19
  puts "broadcasted (id=#{t.id}, txid=#{tx.txid})"
20
20
  end
21
21
  rescue => e
@@ -23,23 +23,6 @@ module Glueby
23
23
  end
24
24
  end
25
25
  end
26
-
27
- def confirm
28
- timestamps = Glueby::Contract::AR::Timestamp.where(status: :unconfirmed)
29
- timestamps.each do |t|
30
- begin
31
- ::ActiveRecord::Base.transaction do
32
- tx = get_transaction(t)
33
- if tx['confirmations'] && tx['confirmations'] > 0
34
- t.update(status: :confirmed)
35
- puts "confirmed (id=#{t.id}, txid=#{tx['txid']})"
36
- end
37
- end
38
- rescue => e
39
- puts "failed to confirm (id=#{t.id}, reason=#{e.message})"
40
- end
41
- end
42
- end
43
26
  end
44
27
  end
45
28
  end
@@ -52,11 +35,6 @@ namespace :glueby do
52
35
  task :create, [] => [:environment] do |_, _|
53
36
  Glueby::Contract::Task::Timestamp.create
54
37
  end
55
-
56
- desc 'confirm glueby timestamp tx'
57
- task :confirm, [] => [:environment] do |_, _|
58
- Glueby::Contract::Task::Timestamp.confirm
59
- end
60
38
  end
61
39
  end
62
40
  end
@@ -0,0 +1,18 @@
1
+ namespace :glueby do
2
+ namespace :fee_provider do
3
+ desc 'Manage the UTXO pool in Glueby::FeeProvider. Creates outputs for paying fee if the outputs is less than configured pool size by :utxo_pool_size'
4
+ task :manage_utxo_pool, [] => [:environment] do |_, _|
5
+ Glueby::FeeProvider::Tasks.new.manage_utxo_pool
6
+ end
7
+
8
+ desc 'Show the status of the UTXO pool in Glueby::FeeProvider'
9
+ task :status, [] => [:environment] do |_, _|
10
+ Glueby::FeeProvider::Tasks.new.status
11
+ end
12
+
13
+ desc 'Show the address of the Glueby::FeeProvider'
14
+ task :address, [] => [:environment] do |_, _|
15
+ Glueby::FeeProvider::Tasks.new.address
16
+ end
17
+ end
18
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: glueby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.4.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - azuchi
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-02-02 00:00:00.000000000 Z
11
+ date: 2021-08-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: tapyrus
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 0.2.6
19
+ version: 0.2.9
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: 0.2.6
26
+ version: 0.2.9
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: activerecord
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -31,7 +31,7 @@ dependencies:
31
31
  - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: '0'
34
- type: :development
34
+ type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
@@ -59,11 +59,11 @@ executables: []
59
59
  extensions: []
60
60
  extra_rdoc_files: []
61
61
  files:
62
+ - ".github/workflows/ruby.yml"
62
63
  - ".gitignore"
63
64
  - ".rspec"
64
65
  - ".ruby-gemset"
65
66
  - ".ruby-version"
66
- - ".travis.yml"
67
67
  - CODE_OF_CONDUCT.md
68
68
  - Gemfile
69
69
  - LICENSE.txt
@@ -72,24 +72,36 @@ files:
72
72
  - bin/console
73
73
  - bin/setup
74
74
  - glueby.gemspec
75
+ - lib/generators/glueby/contract/block_syncer_generator.rb
75
76
  - lib/generators/glueby/contract/initializer_generator.rb
77
+ - lib/generators/glueby/contract/reissuable_token_generator.rb
76
78
  - lib/generators/glueby/contract/templates/initializer.rb.erb
77
79
  - lib/generators/glueby/contract/templates/key_table.rb.erb
80
+ - lib/generators/glueby/contract/templates/reissuable_token_table.rb.erb
81
+ - lib/generators/glueby/contract/templates/system_information_table.rb.erb
78
82
  - lib/generators/glueby/contract/templates/timestamp_table.rb.erb
79
83
  - lib/generators/glueby/contract/templates/utxo_table.rb.erb
80
84
  - lib/generators/glueby/contract/templates/wallet_table.rb.erb
81
85
  - lib/generators/glueby/contract/timestamp_generator.rb
82
86
  - lib/generators/glueby/contract/wallet_adapter_generator.rb
83
87
  - lib/glueby.rb
88
+ - lib/glueby/active_record.rb
89
+ - lib/glueby/active_record/system_information.rb
90
+ - lib/glueby/block_syncer.rb
91
+ - lib/glueby/configuration.rb
84
92
  - lib/glueby/contract.rb
85
93
  - lib/glueby/contract/active_record.rb
94
+ - lib/glueby/contract/active_record/reissuable_token.rb
86
95
  - lib/glueby/contract/active_record/timestamp.rb
87
96
  - lib/glueby/contract/errors.rb
88
- - lib/glueby/contract/fee_provider.rb
97
+ - lib/glueby/contract/fee_estimator.rb
89
98
  - lib/glueby/contract/payment.rb
90
99
  - lib/glueby/contract/timestamp.rb
100
+ - lib/glueby/contract/timestamp/syncer.rb
91
101
  - lib/glueby/contract/token.rb
92
102
  - lib/glueby/contract/tx_builder.rb
103
+ - lib/glueby/fee_provider.rb
104
+ - lib/glueby/fee_provider/tasks.rb
93
105
  - lib/glueby/generator.rb
94
106
  - lib/glueby/generator/migrate_generator.rb
95
107
  - lib/glueby/internal.rb
@@ -101,13 +113,16 @@ files:
101
113
  - lib/glueby/internal/wallet/active_record/utxo.rb
102
114
  - lib/glueby/internal/wallet/active_record/wallet.rb
103
115
  - lib/glueby/internal/wallet/active_record_wallet_adapter.rb
116
+ - lib/glueby/internal/wallet/active_record_wallet_adapter/syncer.rb
104
117
  - lib/glueby/internal/wallet/errors.rb
105
118
  - lib/glueby/internal/wallet/tapyrus_core_wallet_adapter.rb
119
+ - lib/glueby/railtie.rb
106
120
  - lib/glueby/version.rb
107
121
  - lib/glueby/wallet.rb
122
+ - lib/tasks/glueby/block_syncer.rake
108
123
  - lib/tasks/glueby/contract.rake
109
124
  - lib/tasks/glueby/contract/timestamp.rake
110
- - lib/tasks/glueby/contract/wallet_adapter.rake
125
+ - lib/tasks/glueby/fee_provider.rake
111
126
  homepage: https://github.com/chaintope/glueby
112
127
  licenses:
113
128
  - MIT
@@ -115,7 +130,7 @@ metadata:
115
130
  homepage_uri: https://github.com/chaintope/glueby
116
131
  source_code_uri: https://github.com/chaintope/glueby
117
132
  changelog_uri: https://github.com/chaintope/glueby
118
- post_install_message:
133
+ post_install_message:
119
134
  rdoc_options: []
120
135
  require_paths:
121
136
  - lib
@@ -131,7 +146,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
131
146
  version: '0'
132
147
  requirements: []
133
148
  rubygems_version: 3.2.3
134
- signing_key:
149
+ signing_key:
135
150
  specification_version: 4
136
151
  summary: A Ruby library of smart contracts that can be used on Tapyrus.
137
152
  test_files: []
data/.travis.yml DELETED
@@ -1,7 +0,0 @@
1
- ---
2
- language: ruby
3
- cache: bundler
4
- rvm:
5
- - 2.6.6
6
- - 2.7.2
7
- - 3.0.0
@@ -1,21 +0,0 @@
1
- module Glueby
2
- module Contract
3
- module FeeProvider
4
- # @return fee by tapyrus(not TPC).
5
- def fee(_tx); end
6
- end
7
-
8
- class FixedFeeProvider
9
- include FeeProvider
10
-
11
- def initialize(fixed_fee: 10_000)
12
- @fixed_fee = fixed_fee
13
- end
14
-
15
- # @return fee by tapyrus(not TPC).
16
- def fee(_tx)
17
- @fixed_fee
18
- end
19
- end
20
- end
21
- end
@@ -1,42 +0,0 @@
1
- module Glueby
2
- module Contract
3
- module Task
4
- module WalletAdapter
5
- def import_block(block_hash)
6
- block = Glueby::Internal::RPC.client.getblock(block_hash, 0)
7
- block = Tapyrus::Block.parse_from_payload(block.htb)
8
- block.transactions.each { |tx| import_tx(tx.txid) }
9
- end
10
-
11
- def import_tx(txid)
12
- tx = Glueby::Internal::RPC.client.getrawtransaction(txid)
13
- tx = Tapyrus::Tx.parse_from_payload(tx.htb)
14
- Glueby::Internal::Wallet::AR::Utxo.destroy_for_inputs(tx)
15
- Glueby::Internal::Wallet::AR::Utxo.create_or_update_for_outputs(tx)
16
- end
17
- end
18
- end
19
- end
20
- end
21
-
22
- namespace :glueby do
23
- namespace :contract do
24
- namespace :wallet_adapter do
25
- include Glueby::Contract::Task::WalletAdapter
26
-
27
- desc 'import block into database'
28
- task :import_block, [:block_hash] => [:environment] do |_, args|
29
- block_hash = args[:block_hash]
30
-
31
- ::ActiveRecord::Base.transaction { import_block(block_hash) }
32
- end
33
-
34
- desc 'import transaction into database'
35
- task :import_tx, [:txid] => [:environment] do |_, args|
36
- txid = args[:txid]
37
-
38
- ::ActiveRecord::Base.transaction { import_tx(txid) }
39
- end
40
- end
41
- end
42
- end