peatio-goldcoin 2.6.1 → 2.6.2
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/Gemfile.lock +1 -1
- data/lib/peatio/goldcoin/blockchain.rb +59 -21
- data/lib/peatio/goldcoin/client.rb +26 -11
- data/lib/peatio/goldcoin/version.rb +1 -1
- data/lib/peatio/goldcoin/wallet.rb +31 -13
- 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: 41051340cc25563221456f9ce0f24177b1618d99588555d6efd453cceff5730d
|
|
4
|
+
data.tar.gz: 1c4ee8560e044564be986f552ad040d086fa17269d3525fccbbed62e6a8a4829
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: c0c9d80b9cf1e21cfc6d47e587f5ae1b06651af93e3c63e369e931011c37240d6d474651d2166380eeefb77e234de6fb87782bf07afce6d6e69780c92af57fed
|
|
7
|
+
data.tar.gz: 5a5897f96ebfe092ea59285867553e3ebd44e1ef1a6d10e054d41e7571600dd87a9605e6891e51aa5748ea33d534026ebd436f73dcecd268e609a936e5d657c0
|
data/Gemfile.lock
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
1
|
|
|
3
2
|
module Peatio
|
|
4
3
|
module Goldcoin
|
|
5
4
|
# TODO: Processing of unconfirmed transactions from mempool isn't supported now.
|
|
6
5
|
class Blockchain < Peatio::Blockchain::Abstract
|
|
6
|
+
|
|
7
7
|
DEFAULT_FEATURES = {case_sensitive: true, cash_addr_format: false}.freeze
|
|
8
8
|
|
|
9
|
-
def initialize(custom_features={})
|
|
9
|
+
def initialize(custom_features = {})
|
|
10
10
|
@features = DEFAULT_FEATURES.merge(custom_features).slice(*SUPPORTED_FEATURES)
|
|
11
11
|
@settings = {}
|
|
12
12
|
end
|
|
13
13
|
|
|
14
|
-
def configure(settings={})
|
|
14
|
+
def configure(settings = {})
|
|
15
15
|
# Clean client state during configure.
|
|
16
16
|
@client = nil
|
|
17
17
|
@settings.merge!(settings.slice(*SUPPORTED_SETTINGS))
|
|
@@ -20,15 +20,51 @@ module Peatio
|
|
|
20
20
|
def fetch_block!(block_number)
|
|
21
21
|
block_hash = client.json_rpc(:getblockhash, [block_number])
|
|
22
22
|
|
|
23
|
-
|
|
24
|
-
|
|
23
|
+
client.json_rpc(:getblock, [block_hash])
|
|
24
|
+
.fetch('tx').each_with_object([]) do |tx, txs_array|
|
|
25
25
|
txs = build_transaction(tx).map do |ntx|
|
|
26
26
|
Peatio::Transaction.new(ntx.merge(block_number: block_number))
|
|
27
27
|
end
|
|
28
28
|
txs_array.append(*txs)
|
|
29
|
-
end
|
|
29
|
+
end.yield_self { |txs_array| Peatio::Block.new(block_number, txs_array) }
|
|
30
|
+
rescue Client::Error => e
|
|
31
|
+
raise Peatio::Blockchain::ClientError, e
|
|
32
|
+
end
|
|
30
33
|
|
|
31
|
-
|
|
34
|
+
def latest_block_number
|
|
35
|
+
client.json_rpc(:getblockcount)
|
|
36
|
+
rescue Client::Error => e
|
|
37
|
+
raise Peatio::Blockchain::ClientError, e
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
module Peatio
|
|
41
|
+
module Goldcoin
|
|
42
|
+
# TODO: Processing of unconfirmed transactions from mempool isn't supported now.
|
|
43
|
+
class Blockchain < Peatio::Blockchain::Abstract
|
|
44
|
+
|
|
45
|
+
DEFAULT_FEATURES = {case_sensitive: true, cash_addr_format: false}.freeze
|
|
46
|
+
|
|
47
|
+
def initialize(custom_features = {})
|
|
48
|
+
@features = DEFAULT_FEATURES.merge(custom_features).slice(*SUPPORTED_FEATURES)
|
|
49
|
+
@settings = {}
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def configure(settings = {})
|
|
53
|
+
# Clean client state during configure.
|
|
54
|
+
@client = nil
|
|
55
|
+
@settings.merge!(settings.slice(*SUPPORTED_SETTINGS))
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def fetch_block!(block_number)
|
|
59
|
+
block_hash = client.json_rpc(:getblockhash, [block_number])
|
|
60
|
+
|
|
61
|
+
client.json_rpc(:getblock, [block_hash])
|
|
62
|
+
.fetch('tx').each_with_object([]) do |tx, txs_array|
|
|
63
|
+
txs = build_transaction(tx).map do |ntx|
|
|
64
|
+
Peatio::Transaction.new(ntx.merge(block_number: block_number))
|
|
65
|
+
end
|
|
66
|
+
txs_array.append(*txs)
|
|
67
|
+
end.yield_self { |txs_array| Peatio::Block.new(block_number, txs_array) }
|
|
32
68
|
rescue Client::Error => e
|
|
33
69
|
raise Peatio::Blockchain::ClientError, e
|
|
34
70
|
end
|
|
@@ -41,10 +77,12 @@ module Peatio
|
|
|
41
77
|
|
|
42
78
|
def load_balance_of_address!(address, _currency_id)
|
|
43
79
|
address_with_balance = client.json_rpc(:listaddressgroupings)
|
|
44
|
-
|
|
45
|
-
|
|
80
|
+
.flatten(1)
|
|
81
|
+
.find { |addr| addr[0] == address }
|
|
46
82
|
|
|
47
|
-
|
|
83
|
+
if address_with_balance.blank?
|
|
84
|
+
raise Peatio::Blockchain::UnavailableAddressBalanceError, address
|
|
85
|
+
end
|
|
48
86
|
|
|
49
87
|
address_with_balance[1].to_d
|
|
50
88
|
rescue Client::Error => e
|
|
@@ -53,18 +91,18 @@ module Peatio
|
|
|
53
91
|
|
|
54
92
|
private
|
|
55
93
|
|
|
56
|
-
def filter_vout(tx_hash)
|
|
57
|
-
tx_hash.fetch("vout").select do |entry|
|
|
58
|
-
entry.fetch("value").to_d.positive? && entry["scriptPubKey"].has_key?("addresses")
|
|
59
|
-
end
|
|
60
|
-
end
|
|
61
|
-
|
|
62
94
|
def build_transaction(tx_hash)
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
95
|
+
tx_hash.fetch('vout')
|
|
96
|
+
.select do |entry|
|
|
97
|
+
entry.fetch('value').to_d > 0 &&
|
|
98
|
+
entry['scriptPubKey'].has_key?('addresses')
|
|
99
|
+
end
|
|
100
|
+
.each_with_object([]) do |entry, formatted_txs|
|
|
101
|
+
no_currency_tx =
|
|
102
|
+
{ hash: tx_hash['txid'], txout: entry['n'],
|
|
103
|
+
to_address: entry['scriptPubKey']['addresses'][0],
|
|
104
|
+
amount: entry.fetch('value').to_d,
|
|
105
|
+
status: 'success' }
|
|
68
106
|
|
|
69
107
|
# Build transaction for each currency belonging to blockchain.
|
|
70
108
|
settings_fetch(:currencies).pluck(:id).each do |currency_id|
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require
|
|
4
|
-
require
|
|
5
|
-
require
|
|
3
|
+
require 'memoist'
|
|
4
|
+
require 'faraday'
|
|
5
|
+
require 'better-faraday'
|
|
6
6
|
|
|
7
7
|
module Peatio
|
|
8
8
|
module Goldcoin
|
|
@@ -27,23 +27,38 @@ module Peatio
|
|
|
27
27
|
@json_rpc_endpoint = URI.parse(endpoint)
|
|
28
28
|
end
|
|
29
29
|
|
|
30
|
-
def json_rpc(method, params=[])
|
|
31
|
-
response = post
|
|
32
|
-
|
|
30
|
+
def json_rpc(method, params = [])
|
|
31
|
+
response = connection.post \
|
|
32
|
+
'/',
|
|
33
|
+
{ jsonrpc: '1.0', method: method, params: params }.to_json,
|
|
34
|
+
{ 'Accept' => 'application/json',
|
|
35
|
+
'Content-Type' => 'application/json' }
|
|
33
36
|
response.assert_2xx!
|
|
34
37
|
response = JSON.parse(response.body)
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
raise ResponseError.new(e["code"], e["message"]) if e
|
|
38
|
+
response['error'].tap do |e|
|
|
39
|
+
raise ResponseError.new(e['code'], e['message']) if e
|
|
38
40
|
end
|
|
39
|
-
|
|
40
|
-
response.fetch("result")
|
|
41
|
+
response.fetch('result')
|
|
41
42
|
rescue Faraday::Error => e
|
|
42
43
|
raise ConnectionError, e
|
|
43
44
|
end
|
|
44
45
|
|
|
45
46
|
private
|
|
46
47
|
|
|
48
|
+
def connection
|
|
49
|
+
@connection ||= Faraday.new(@json_rpc_endpoint) do |f|
|
|
50
|
+
f.adapter :net_http_persistent, pool_size: 5
|
|
51
|
+
end.tap do |connection|
|
|
52
|
+
unless @json_rpc_endpoint.user.blank?
|
|
53
|
+
connection.basic_auth(@json_rpc_endpoint.user,
|
|
54
|
+
@json_rpc_endpoint.password)
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
|
|
47
62
|
def post(method, params)
|
|
48
63
|
connection.post("/", {jsonrpc: "1.0", method: method, params: params}.to_json,
|
|
49
64
|
"Accept" => "application/json", "Content-Type" => "application/json")
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
1
|
module Peatio
|
|
4
2
|
module Goldcoin
|
|
5
3
|
class Wallet < Peatio::Wallet::Abstract
|
|
4
|
+
|
|
6
5
|
DEFAULT_FEATURES = { skip_deposit_collection: false }.freeze
|
|
7
6
|
|
|
8
7
|
def initialize(custom_features = {})
|
|
@@ -10,35 +9,35 @@ module Peatio
|
|
|
10
9
|
@settings = {}
|
|
11
10
|
end
|
|
12
11
|
|
|
13
|
-
def configure(settings={})
|
|
12
|
+
def configure(settings = {})
|
|
14
13
|
# Clean client state during configure.
|
|
15
14
|
@client = nil
|
|
16
15
|
|
|
17
16
|
@settings.merge!(settings.slice(*SUPPORTED_SETTINGS))
|
|
18
17
|
|
|
19
|
-
@wallet = @settings.fetch(:wallet)
|
|
18
|
+
@wallet = @settings.fetch(:wallet) do
|
|
20
19
|
raise Peatio::Wallet::MissingSettingError, :wallet
|
|
21
|
-
|
|
20
|
+
end.slice(:uri, :address)
|
|
22
21
|
|
|
23
|
-
@currency = @settings.fetch(:currency)
|
|
22
|
+
@currency = @settings.fetch(:currency) do
|
|
24
23
|
raise Peatio::Wallet::MissingSettingError, :currency
|
|
25
|
-
|
|
24
|
+
end.slice(:id, :base_factor, :options)
|
|
26
25
|
end
|
|
27
26
|
|
|
28
|
-
def create_address!(_options={})
|
|
29
|
-
{address: client.json_rpc(:getnewaddress)}
|
|
27
|
+
def create_address!(_options = {})
|
|
28
|
+
{ address: client.json_rpc(:getnewaddress) }
|
|
30
29
|
rescue Goldcoin::Client::Error => e
|
|
31
30
|
raise Peatio::Wallet::ClientError, e
|
|
32
31
|
end
|
|
33
32
|
|
|
34
|
-
def create_transaction!(transaction, options={})
|
|
33
|
+
def create_transaction!(transaction, options = {})
|
|
35
34
|
txid = client.json_rpc(:sendtoaddress,
|
|
36
35
|
[
|
|
37
36
|
transaction.to_address,
|
|
38
37
|
transaction.amount,
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
options[:subtract_fee].to_s ==
|
|
38
|
+
'',
|
|
39
|
+
'',
|
|
40
|
+
options[:subtract_fee].to_s == 'true' # subtract fee from transaction amount.
|
|
42
41
|
])
|
|
43
42
|
transaction.hash = txid
|
|
44
43
|
transaction
|
|
@@ -46,6 +45,25 @@ module Peatio
|
|
|
46
45
|
raise Peatio::Wallet::ClientError, e
|
|
47
46
|
end
|
|
48
47
|
|
|
48
|
+
def load_balance!
|
|
49
|
+
client.json_rpc(:getbalance).to_d
|
|
50
|
+
|
|
51
|
+
rescue Goldcoin::Client::Error => e
|
|
52
|
+
raise Peatio::Wallet::ClientError, e
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
private
|
|
56
|
+
|
|
57
|
+
def client
|
|
58
|
+
uri = @wallet.fetch(:uri) { raise Peatio::Wallet::MissingSettingError, :uri }
|
|
59
|
+
@client ||= Client.new(uri)
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
end
|
|
66
|
+
|
|
49
67
|
def load_balance!
|
|
50
68
|
client.json_rpc(:getbalance).to_d
|
|
51
69
|
rescue Goldcoin::Client::Error => e
|