onchain 2.15 → 2.16

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8949428218f046ebf96acd6fdca7766d1b743227
4
- data.tar.gz: 1e56ce7dd1c9688695f79daf7be21f94c97fb43f
3
+ metadata.gz: 2b79c9529ca07f30c5431215ef6228a144de406c
4
+ data.tar.gz: 06d5126dd81d2e85af5ad616d2eb37f1287bf972
5
5
  SHA512:
6
- metadata.gz: ba9384350fc5ff725174df0c2ec68cdbef199926fc8f80497836070fe6ada6b8101f64822897deb42f08c643009818b752161af8626270134633fe7481e74e16
7
- data.tar.gz: ea40f89f415f8fe70316abad9a7a6697d290fa12af9ea4bd3a1b2c30141ee1c64b4d1891c8c111f60e4786d71580a0462a246798adfa41bd9a3c1f514caa0dda
6
+ metadata.gz: 9c8c38eb6c3c853f9ebe46c2ad4ff4fc8742089cd40c60db4bf1f71c3d9e0a8bdf34fcd5bd2aa1727f255aadb7fc4abe69cb70d2179cb23647830fccdfcc0195
7
+ data.tar.gz: c5d43867556cb8f630bff338d1333be0dcddb1fcb6199cd79e7d5f454d7115b8a5fc5aafb6e4eb4747c3d84de655c7bd4e99c150cf756bd03c535a8c7db3f062
@@ -0,0 +1,126 @@
1
+ class OnChain::BlockChain
2
+ class << self
3
+
4
+ def get_insight_url(network)
5
+ if network == :bitcoin
6
+ return "https://insight.bitpay.com/api/"
7
+ elsif network == :zcash_testnet
8
+ return "https://explorer.testnet.z.cash/api/"
9
+ end
10
+ return "https://test-insight.bitpay.com/api/"
11
+ end
12
+
13
+ def insight_address_history(address, network = :bitcoin)
14
+
15
+ base_url = get_insight_url(network) + "addr/" + address
16
+ json = fetch_response(base_url, true)
17
+
18
+ return parse_insight_address_tx(address, json, network)
19
+
20
+ end
21
+
22
+ def parse_insight_address_tx(address, json, network)
23
+
24
+ hist = []
25
+ if json.key?('transactions')
26
+ txs = json['transactions']
27
+ txs.each do |tx|
28
+ row = {}
29
+ row[:hash] = tx[tx]
30
+
31
+ # OK, go and get the actual transaction
32
+ base_url = get_insight_url(network) + "tx/" + tx
33
+ tx_json = fetch_response(base_url, true)
34
+
35
+ row[:time] = tx_json["time"]
36
+ row[:addr] = {}
37
+ row[:outs] = {}
38
+
39
+ inputs = tx_json['vin']
40
+ val = 0
41
+ recv = "Y"
42
+ inputs.each do |input|
43
+ row[:addr][input["addr"]] = input["addr"]
44
+ if input["addr"] == address
45
+ recv = "N"
46
+ end
47
+ end
48
+
49
+ tx_json["vout"].each do |out|
50
+ out_addr = out["scriptPubKey"]["addresses"][0]
51
+ row[:outs][out_addr] = out_addr
52
+ if recv == "Y" and out_addr == address
53
+ val = val + out["value"].to_f
54
+ elsif recv == "N" and out_addr != address
55
+ val = val + out["value"].to_f
56
+ end
57
+ end
58
+ row[:total] = val
59
+ row[:recv] = recv
60
+ hist << row
61
+ end
62
+ return hist
63
+ else
64
+ 'Error'
65
+ end
66
+ return hist
67
+ end
68
+
69
+ def insight_send_tx(tx_hex, network = :bitcoin)
70
+
71
+ uri = URI.parse(get_url(network) + "tx/push")
72
+ http = Net::HTTP.new(uri.host, uri.port)
73
+
74
+ request = Net::HTTP::Post.new(uri.request_uri)
75
+ request.body = '{"rawtx":"' + tx_hex + '"}'
76
+ response = http.request(request)
77
+
78
+ res = JSON.parse(response.body)
79
+
80
+ mess = 'Unknown'
81
+ stat = 'Unknown'
82
+ tx_hash = res["txid"]
83
+
84
+ ret = "{\"status\":\"#{stat}\",\"data\":\"#{tx_hash}\",\"code\":200,\"message\":\"#{mess}\"}"
85
+ return JSON.parse(ret)
86
+ end
87
+
88
+ def insight_get_balance(address, network = :bitcoin)
89
+
90
+ if cache_read(address + network.to_s) == nil
91
+
92
+ base_url = get_insight_url(network) + "addr/#{address}/balance"
93
+ bal_string = fetch_response(base_url, false)
94
+ bal = bal_string.to_i / 100000000.0
95
+ cache_write(address + network.to_s, bal, BALANCE_CACHE_FOR)
96
+ end
97
+
98
+ return cache_read(address + network.to_s)
99
+ end
100
+
101
+ def insight_get_unspent_outs(address, network = :bitcoin)
102
+
103
+ base_url = get_insight_url(network) + "addr/#{address}/utxo"
104
+ json = fetch_response(base_url, true)
105
+
106
+ unspent = []
107
+
108
+ json.each do |data|
109
+ line = []
110
+ line << data['txid']
111
+ line << data['vout']
112
+ line << data['scriptPubKey']
113
+ line << (data['amount'].to_f * 100000000).to_i
114
+ unspent << line
115
+ end
116
+
117
+ return unspent
118
+ end
119
+
120
+ def insight_get_transaction(txhash, network = :bitcoin)
121
+ base = get_insight_url(network) + "rawtx/" + txhash
122
+ return fetch_response(URI::encode(base))['rawtx']
123
+ end
124
+
125
+ end
126
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: onchain
3
3
  version: !ruby/object:Gem::Version
4
- version: '2.15'
4
+ version: '2.16'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Number 6
@@ -92,6 +92,7 @@ files:
92
92
  - lib/onchain/payments.rb
93
93
  - lib/onchain/providers/blockchaininfo_api.rb
94
94
  - lib/onchain/providers/blockr_api.rb
95
+ - lib/onchain/providers/insight_api.rb
95
96
  - lib/onchain/sweeper.rb
96
97
  - lib/onchain/transaction.rb
97
98
  homepage: https://github.com/onchain/onchain-gem