txcatcher 0.1.99 → 0.1.100
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/VERSION +1 -1
- data/lib/txcatcher/models/transaction.rb +2 -2
- data/lib/txcatcher/server.rb +21 -4
- data/txcatcher.gemspec +2 -2
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1086c9abb33b98018483d2188efe2318d2c5e326a73eec1bf91056c48dce84e2
|
4
|
+
data.tar.gz: 8f39e9d6aad3ed2717c36fa4e276b3aba59ee5b3248d8d1396007fd5606615ae
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d282ba132fa8a3a08a4a4a11840e46a2609eea837595a4c47432697cdbb5d105fdba690acff8c5b2c442bb357cbf1618bed68916b02fecb6f37157f6e23f5ef9
|
7
|
+
data.tar.gz: 35fd9704e8f5ec349a3fe1e5f3c4acc8c900fdb0c3d99590ed5c9640a24acdd0672c5bf78bdedfd3d7f724ead52ab0b225f8f0c4df95fa03e403493ba0107515
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.100
|
@@ -44,7 +44,7 @@ module TxCatcher
|
|
44
44
|
|
45
45
|
# Queries rpc node to check whether the transaction has been included in any of the blocks,
|
46
46
|
# but only if current block_height is nil.
|
47
|
-
def update_block_height!(limit=100,
|
47
|
+
def update_block_height!(limit=100,dont_save=false)
|
48
48
|
|
49
49
|
# This calculates the approximate number of blocks to check.
|
50
50
|
# So, for example, if transaction is less than 10 minutes old,
|
@@ -65,7 +65,7 @@ module TxCatcher
|
|
65
65
|
LOGGER.report "--- checking block #{TxCatcher.current_block_height - i} for tx #{self.txid}"
|
66
66
|
if block["tx"] && block["tx"].include?(self.txid)
|
67
67
|
LOGGER.report "tx #{self.txid} block height updated to #{block["height"]}"
|
68
|
-
self.update(block_height: block["height"]) if !
|
68
|
+
self.update(block_height: block["height"]) if !dont_save
|
69
69
|
return block["height"].to_i
|
70
70
|
end
|
71
71
|
end
|
data/lib/txcatcher/server.rb
CHANGED
@@ -11,6 +11,7 @@ module TxCatcher
|
|
11
11
|
rescue BitcoinRPC::JSONRPCError => e
|
12
12
|
return [400, {}, { error: e.data }.to_json]
|
13
13
|
rescue Exception => e
|
14
|
+
p e.backtrace
|
14
15
|
return [500, {}, { error: e.to_s }.to_json]
|
15
16
|
end
|
16
17
|
end
|
@@ -66,25 +67,41 @@ module TxCatcher
|
|
66
67
|
model = Address.where(address: addr).eager(deposits: :transactions).first
|
67
68
|
return [200, {}, "{}"] unless model
|
68
69
|
|
69
|
-
|
70
|
+
confirmed_txs_to_update = []
|
71
|
+
unconfirmed_txs_to_update = []
|
72
|
+
newly_confirmed_txs_to_update = []
|
73
|
+
|
70
74
|
transactions = model.deposits.map { |d| d.transaction }
|
71
75
|
utxos = transactions.map do |t|
|
72
76
|
outs = t.tx_hash["vout"].select { |out| out["scriptPubKey"]["addresses"] == [addr] }
|
73
|
-
txs_to_update << t if outs.length > 0
|
74
77
|
outs.map! do |out|
|
75
78
|
out["confirmations"] = t.confirmations || 0
|
76
79
|
out["txid"] = t.txid
|
80
|
+
confirmed_txs_to_update << t if out["confirmations"] > 0
|
81
|
+
unconfirmed_txs_to_update << t if out["confirmations"] == 0
|
77
82
|
out
|
78
83
|
end
|
79
84
|
outs
|
80
85
|
end.flatten
|
81
86
|
|
87
|
+
unconfirmed_txs_to_update = unconfirmed_txs_to_update.map do |t|
|
88
|
+
tx_block_height = t.update_block_height!(100,:dont_save)
|
89
|
+
if tx_block_height && tx_block_height > 0
|
90
|
+
newly_confirmed_txs_to_update << t
|
91
|
+
nil
|
92
|
+
else
|
93
|
+
t
|
94
|
+
end
|
95
|
+
end.compact
|
96
|
+
|
82
97
|
# Update all txs after we map them. We don't use regular Transaction#update
|
83
98
|
# in the #map loop above, because this will quickly get out of hand and result
|
84
99
|
# in a gateway timeout, if there are a lot of transactions to be updated. Instead,
|
85
100
|
# we collect all txs in an array and then update them in bulk here.
|
86
|
-
|
87
|
-
|
101
|
+
no_block_height_change_txs_ids = (confirmed_txs_to_update + unconfirmed_txs_to_update).map(&:id)
|
102
|
+
block_height_change_txs_ids = newly_confirmed_txs_to_update.map(&:id)
|
103
|
+
TxCatcher.db_connection[:transactions].where(id: no_block_height_change_txs_ids).update(protected: true)
|
104
|
+
TxCatcher.db_connection[:transactions].where(id: block_height_change_txs_ids).update(protected: true, block_height: TxCatcher.current_block_height)
|
88
105
|
|
89
106
|
[200, {}, utxos.to_json]
|
90
107
|
end
|
data/txcatcher.gemspec
CHANGED
@@ -2,11 +2,11 @@
|
|
2
2
|
# DO NOT EDIT THIS FILE DIRECTLY
|
3
3
|
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
|
-
# stub: txcatcher 0.1.
|
5
|
+
# stub: txcatcher 0.1.100 ruby lib
|
6
6
|
|
7
7
|
Gem::Specification.new do |s|
|
8
8
|
s.name = "txcatcher".freeze
|
9
|
-
s.version = "0.1.
|
9
|
+
s.version = "0.1.100"
|
10
10
|
|
11
11
|
s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
|
12
12
|
s.require_paths = ["lib".freeze]
|