glueby 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/generators/glueby/contract/block_syncer_generator.rb +26 -0
- data/lib/generators/glueby/contract/templates/system_information_table.rb.erb +12 -0
- data/lib/glueby.rb +2 -0
- data/lib/glueby/active_record.rb +8 -0
- data/lib/glueby/active_record/system_information.rb +15 -0
- data/lib/glueby/contract/payment.rb +7 -3
- data/lib/glueby/contract/token.rb +8 -4
- data/lib/glueby/contract/tx_builder.rb +2 -2
- data/lib/glueby/version.rb +1 -1
- data/lib/tasks/glueby/contract/block_syncer.rake +36 -0
- metadata +7 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d0b977d0a922975117e46c6777bf07fb13ad89d03bee8d9785ddec04e311f9c4
|
4
|
+
data.tar.gz: 5b0472f6ca379fcffd7dac8adcb8fe508237ae8fcf184c1372ba721c4104f13f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1e2e21b82fe9fcb5ac8433d8f5952718624d7900b09f2ecf789163c3037a26a6b1939dbeb03dcccbf0051e890947f1612fc933c75d8093a3e74d26756ea43642
|
7
|
+
data.tar.gz: 8c6d28c5432a9e8a7d56072bf6398453da18d69ef564225987649ce6bf91e751ff40b42dba9c23d652a3a2b755539b919ad0c98ae83da6607c35b3a78b7f0fd1
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Glueby
|
2
|
+
module Contract
|
3
|
+
class BlockSyncerGenerator < Rails::Generators::Base
|
4
|
+
include ::Rails::Generators::Migration
|
5
|
+
include Glueby::Generator::MigrateGenerator
|
6
|
+
extend Glueby::Generator::MigrateGenerator::ClassMethod
|
7
|
+
|
8
|
+
source_root File.expand_path('templates', __dir__)
|
9
|
+
|
10
|
+
def create_migration_file
|
11
|
+
migration_dir = File.expand_path("db/migrate")
|
12
|
+
|
13
|
+
if self.class.migration_exists?(migration_dir, "create_system_information")
|
14
|
+
::Kernel.warn "Migration already exists: create_system_information"
|
15
|
+
else
|
16
|
+
migration_template(
|
17
|
+
"system_information_table.rb.erb",
|
18
|
+
"db/migrate/create_system_information.rb",
|
19
|
+
migration_version: migration_version,
|
20
|
+
table_options: table_options,
|
21
|
+
)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
class CreateSystemInformation < ActiveRecord::Migration<%= migration_version %>
|
2
|
+
def change
|
3
|
+
create_table :system_informations<%= table_options %> do |t|
|
4
|
+
t.string :info_key
|
5
|
+
t.string :info_value
|
6
|
+
t.timestamps
|
7
|
+
end
|
8
|
+
add_index :system_informations, [:info_key], unique: true
|
9
|
+
|
10
|
+
Glueby::AR::SystemInformation.create(info_key: "synced_block_number", info_value: "0")
|
11
|
+
end
|
12
|
+
end
|
data/lib/glueby.rb
CHANGED
@@ -6,6 +6,7 @@ module Glueby
|
|
6
6
|
autoload :Generator, 'glueby/generator'
|
7
7
|
autoload :Wallet, 'glueby/wallet'
|
8
8
|
autoload :Internal, 'glueby/internal'
|
9
|
+
autoload :AR, 'glueby/active_record'
|
9
10
|
|
10
11
|
begin
|
11
12
|
class Railtie < ::Rails::Railtie
|
@@ -13,6 +14,7 @@ module Glueby
|
|
13
14
|
load "tasks/glueby/contract.rake"
|
14
15
|
load "tasks/glueby/contract/timestamp.rake"
|
15
16
|
load "tasks/glueby/contract/wallet_adapter.rake"
|
17
|
+
load "tasks/glueby/contract/block_syncer.rake"
|
16
18
|
end
|
17
19
|
end
|
18
20
|
rescue
|
@@ -11,6 +11,10 @@ module Glueby
|
|
11
11
|
# or
|
12
12
|
# Glueby::Wallet.create
|
13
13
|
#
|
14
|
+
# Use `Glueby::Internal::Wallet#receive_address` to generate the address of a receiver
|
15
|
+
# receiver.internal_wallet.receive_address
|
16
|
+
# => '1CY6TSSARn8rAFD9chCghX5B7j4PKR8S1a'
|
17
|
+
#
|
14
18
|
# Balance of sender and receiver before send
|
15
19
|
# sender.balances[""]
|
16
20
|
# => 100_000(tapyrus)
|
@@ -18,7 +22,7 @@ module Glueby
|
|
18
22
|
# => 0(tapyrus)
|
19
23
|
#
|
20
24
|
# Send
|
21
|
-
# Payment.transfer(sender: sender,
|
25
|
+
# Payment.transfer(sender: sender, receiver_address: '1CY6TSSARn8rAFD9chCghX5B7j4PKR8S1a', amount: 10_000)
|
22
26
|
# sender.balances[""]
|
23
27
|
# => 90_000
|
24
28
|
# receiver.balances[""]
|
@@ -28,7 +32,7 @@ module Glueby
|
|
28
32
|
extend Glueby::Contract::TxBuilder
|
29
33
|
|
30
34
|
class << self
|
31
|
-
def transfer(sender:,
|
35
|
+
def transfer(sender:, receiver_address:, amount:, fee_provider: FixedFeeProvider.new)
|
32
36
|
raise Glueby::Contract::Errors::InvalidAmount unless amount.positive?
|
33
37
|
|
34
38
|
tx = Tapyrus::Tx.new
|
@@ -37,7 +41,7 @@ module Glueby
|
|
37
41
|
sum, outputs = sender.internal_wallet.collect_uncolored_outputs(dummy_fee + amount)
|
38
42
|
fill_input(tx, outputs)
|
39
43
|
|
40
|
-
receiver_script = Tapyrus::Script.parse_from_addr(
|
44
|
+
receiver_script = Tapyrus::Script.parse_from_addr(receiver_address)
|
41
45
|
tx.outputs << Tapyrus::TxOut.new(value: amount, script_pubkey: receiver_script)
|
42
46
|
|
43
47
|
fee = fee_provider.fee(tx)
|
@@ -13,13 +13,17 @@ module Glueby
|
|
13
13
|
# alice = Glueby::Wallet.create
|
14
14
|
# bob = Glueby::Wallet.create
|
15
15
|
#
|
16
|
+
# Use `Glueby::Internal::Wallet#receive_address` to generate the address of bob
|
17
|
+
# bob.internal_wallet.receive_address
|
18
|
+
# => '1CY6TSSARn8rAFD9chCghX5B7j4PKR8S1a'
|
19
|
+
#
|
16
20
|
# Issue
|
17
21
|
# token = Token.issue!(issuer: alice, amount: 100)
|
18
22
|
# token.amount(wallet: alice)
|
19
23
|
# => 100
|
20
24
|
#
|
21
25
|
# Send
|
22
|
-
# token.transfer!(sender: alice,
|
26
|
+
# token.transfer!(sender: alice, receiver_address: '1CY6TSSARn8rAFD9chCghX5B7j4PKR8S1a', amount: 1)
|
23
27
|
# token.amount(wallet: alice)
|
24
28
|
# => 99
|
25
29
|
# token.amount(wallet: bob)
|
@@ -122,16 +126,16 @@ module Glueby
|
|
122
126
|
# Send the token to other wallet
|
123
127
|
#
|
124
128
|
# @param sender [Glueby::Wallet] wallet to send this token
|
125
|
-
# @param
|
129
|
+
# @param receiver_address [String] address to receive this token
|
126
130
|
# @param amount [Integer]
|
127
131
|
# @return [Token] receiver token
|
128
132
|
# @raise [InsufficientFunds] if wallet does not have enough TPC to send transaction.
|
129
133
|
# @raise [InsufficientTokens] if wallet does not have enough token to send.
|
130
134
|
# @raise [InvalidAmount] if amount is not positive integer.
|
131
|
-
def transfer!(sender:,
|
135
|
+
def transfer!(sender:, receiver_address:, amount: 1)
|
132
136
|
raise Glueby::Contract::Errors::InvalidAmount unless amount.positive?
|
133
137
|
|
134
|
-
tx = create_transfer_tx(color_id: color_id, sender: sender,
|
138
|
+
tx = create_transfer_tx(color_id: color_id, sender: sender, receiver_address: receiver_address, amount: amount)
|
135
139
|
sender.internal_wallet.broadcast(tx)
|
136
140
|
end
|
137
141
|
|
@@ -100,14 +100,14 @@ module Glueby
|
|
100
100
|
issuer.internal_wallet.sign_tx(tx, prev_txs)
|
101
101
|
end
|
102
102
|
|
103
|
-
def create_transfer_tx(color_id:, sender:,
|
103
|
+
def create_transfer_tx(color_id:, sender:, receiver_address:, amount:, fee_provider: FixedFeeProvider.new)
|
104
104
|
tx = Tapyrus::Tx.new
|
105
105
|
|
106
106
|
utxos = sender.internal_wallet.list_unspent
|
107
107
|
sum_token, outputs = collect_colored_outputs(utxos, color_id, amount)
|
108
108
|
fill_input(tx, outputs)
|
109
109
|
|
110
|
-
receiver_script = Tapyrus::Script.parse_from_addr(
|
110
|
+
receiver_script = Tapyrus::Script.parse_from_addr(receiver_address)
|
111
111
|
receiver_colored_script = receiver_script.add_color(color_id)
|
112
112
|
tx.outputs << Tapyrus::TxOut.new(value: amount, script_pubkey: receiver_colored_script)
|
113
113
|
|
data/lib/glueby/version.rb
CHANGED
@@ -0,0 +1,36 @@
|
|
1
|
+
module Glueby
|
2
|
+
module Contract
|
3
|
+
module Task
|
4
|
+
module BlockSyncer
|
5
|
+
|
6
|
+
def sync_block
|
7
|
+
latest_block_num = Glueby::Internal::RPC.client.getblockcount
|
8
|
+
synced_block = Glueby::AR::SystemInformation.synced_block_height
|
9
|
+
(synced_block.int_value + 1..latest_block_num).each do |i|
|
10
|
+
::ActiveRecord::Base.transaction do
|
11
|
+
block_hash = Glueby::Internal::RPC.client.getblockhash(i)
|
12
|
+
import_block(block_hash)
|
13
|
+
synced_block.update(info_value: i.to_s)
|
14
|
+
puts "success in synchronization (block height=#{i.to_s})"
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
namespace :glueby do
|
25
|
+
namespace :contract do
|
26
|
+
namespace :block_syncer do
|
27
|
+
include Glueby::Contract::Task::BlockSyncer
|
28
|
+
|
29
|
+
desc 'sync block into database'
|
30
|
+
task :start, [] => [:environment] do |_, _|
|
31
|
+
Glueby::Contract::Task::BlockSyncer.sync_block
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
35
|
+
end
|
36
|
+
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.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- azuchi
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-03-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: tapyrus
|
@@ -72,15 +72,19 @@ 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
|
76
77
|
- lib/generators/glueby/contract/templates/initializer.rb.erb
|
77
78
|
- lib/generators/glueby/contract/templates/key_table.rb.erb
|
79
|
+
- lib/generators/glueby/contract/templates/system_information_table.rb.erb
|
78
80
|
- lib/generators/glueby/contract/templates/timestamp_table.rb.erb
|
79
81
|
- lib/generators/glueby/contract/templates/utxo_table.rb.erb
|
80
82
|
- lib/generators/glueby/contract/templates/wallet_table.rb.erb
|
81
83
|
- lib/generators/glueby/contract/timestamp_generator.rb
|
82
84
|
- lib/generators/glueby/contract/wallet_adapter_generator.rb
|
83
85
|
- lib/glueby.rb
|
86
|
+
- lib/glueby/active_record.rb
|
87
|
+
- lib/glueby/active_record/system_information.rb
|
84
88
|
- lib/glueby/contract.rb
|
85
89
|
- lib/glueby/contract/active_record.rb
|
86
90
|
- lib/glueby/contract/active_record/timestamp.rb
|
@@ -106,6 +110,7 @@ files:
|
|
106
110
|
- lib/glueby/version.rb
|
107
111
|
- lib/glueby/wallet.rb
|
108
112
|
- lib/tasks/glueby/contract.rake
|
113
|
+
- lib/tasks/glueby/contract/block_syncer.rake
|
109
114
|
- lib/tasks/glueby/contract/timestamp.rake
|
110
115
|
- lib/tasks/glueby/contract/wallet_adapter.rake
|
111
116
|
homepage: https://github.com/chaintope/glueby
|