txcatcher 0.1.99 → 0.1.100
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/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]
|