peatio1.9 0.4.4

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.
@@ -0,0 +1,30 @@
1
+ module Peatio::MQ
2
+ class Client
3
+ class << self
4
+ attr_accessor :channel, :connection
5
+
6
+ def new
7
+ @options = {
8
+ host: ENV["RABBITMQ_HOST"] || "0.0.0.0",
9
+ port: ENV["RABBITMQ_PORT"] || "5672",
10
+ username: ENV["RABBITMQ_USER"],
11
+ password: ENV["RABBITMQ_PASSWORD"],
12
+ }
13
+ end
14
+
15
+ def connect!
16
+ @connection = Bunny.new(@options)
17
+ @connection.start
18
+ end
19
+
20
+ def create_channel!
21
+ @channel = @connection.create_channel
22
+ end
23
+
24
+ def disconnect
25
+ @connection.close
26
+ yield if block_given?
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,128 @@
1
+ require "socket"
2
+
3
+ module Peatio::MQ::Events
4
+ def self.subscribe!
5
+ ranger = RangerEvents.new
6
+ ranger.subscribe
7
+ end
8
+
9
+ def self.publish(type, id, event, payload)
10
+ @@client ||= begin
11
+ ranger = RangerEvents.new
12
+ ranger.connect!
13
+ ranger
14
+ end
15
+
16
+ @@client.publish(type, id, event, payload) do
17
+ yield if block_given?
18
+ end
19
+ end
20
+
21
+ class Client
22
+ attr_accessor :streams, :authorized, :user
23
+
24
+ @@all = []
25
+
26
+ def self.all
27
+ @@all
28
+ end
29
+
30
+ def self.user(user)
31
+ @@all.each do |handler|
32
+ if handler.user == user
33
+ yield handler
34
+ end
35
+ end
36
+ end
37
+
38
+ def initialize(socket, streams)
39
+ @socket = socket
40
+ @streams = streams
41
+
42
+ @user = ""
43
+ @authorized = false
44
+
45
+ @@all << self
46
+ end
47
+
48
+ def send_payload(message)
49
+ @socket.send message.to_json
50
+ end
51
+ end
52
+
53
+ class RangerEvents
54
+ attr_accessor :exchange_name
55
+
56
+ def initialize
57
+ @exchange_name = "peatio.events.ranger"
58
+ end
59
+
60
+ def connect!
61
+ if Peatio::MQ::Client.channel.nil?
62
+ Peatio::MQ::Client.new
63
+ Peatio::MQ::Client.connect!
64
+ Peatio::MQ::Client.create_channel!
65
+ end
66
+ @exchange = Peatio::MQ::Client.channel.topic(@exchange_name)
67
+ end
68
+
69
+ def publish(type, id, event, payload)
70
+ routing_key = [type, id, event].join(".")
71
+ serialized_data = JSON.dump(payload)
72
+
73
+ @exchange.publish(serialized_data, routing_key: routing_key)
74
+
75
+ Peatio::Logger::debug { "published event to #{routing_key} " }
76
+
77
+ yield if block_given?
78
+ end
79
+
80
+ def subscribe
81
+ exchange = Peatio::MQ::Client.channel.topic(@exchange_name)
82
+
83
+ suffix = "#{Socket.gethostname.split(/-/).last}#{Random.rand(10_000)}"
84
+
85
+ queue_name = "#{@topic_name}.ranger.#{suffix}"
86
+
87
+ Peatio::MQ::Client.channel
88
+ .queue(queue_name, durable: false, auto_delete: true)
89
+ .bind(exchange, routing_key: "#").subscribe do |delivery_info, metadata, payload|
90
+
91
+ # type@id@event
92
+ # type can be public|private
93
+ # id can be user id or market
94
+ # event can be anything like order_completed or just trade
95
+
96
+ routing_key = delivery_info.routing_key
97
+ if routing_key.count(".") != 2
98
+ Peatio::Logger::error do
99
+ "got invalid routing key from amqp: #{routing_key}"
100
+ end
101
+
102
+ next
103
+ end
104
+
105
+ type, id, event = routing_key.split(".")
106
+ payload_decoded = JSON.parse payload
107
+
108
+ if type == "private"
109
+ Client.user(id) do |client|
110
+ if client.streams.include?(event)
111
+ client.send_payload [event, payload_decoded]
112
+ end
113
+ end
114
+
115
+ next
116
+ end
117
+
118
+ stream = [id, event].join(".")
119
+
120
+ Client.all.each do |handler|
121
+ if handler.streams.include?(id) or handler.streams.include?(stream)
122
+ handler.send_payload [stream, payload_decoded]
123
+ end
124
+ end
125
+ end
126
+ end
127
+ end
128
+ end
@@ -0,0 +1,106 @@
1
+ module Peatio::Ranger
2
+ class Connection
3
+ def initialize(authenticator, socket, logger)
4
+ @authenticator = authenticator
5
+ @socket = socket
6
+ @logger = logger
7
+ @streams = []
8
+ end
9
+
10
+ def send(method, data)
11
+ payload = JSON.dump(method => data)
12
+ @logger.debug { payload }
13
+ @socket.send payload
14
+ end
15
+
16
+ def handle(msg)
17
+ authorized = false
18
+ begin
19
+ data = JSON.parse(msg)
20
+
21
+ token = data["jwt"]
22
+
23
+ payload = @authenticator.authenticate!(token)
24
+
25
+ authorized = true
26
+ rescue JSON::ParserError
27
+ rescue => error
28
+ @logger.error error.message
29
+ end
30
+
31
+ if !authorized
32
+ send :error, message: "Authentication failed."
33
+ return
34
+ end
35
+
36
+ @client.user = payload[:uid]
37
+ @client.authorized = true
38
+
39
+ @logger.info "ranger: user #{@client.user} authenticated #{@streams}"
40
+
41
+ send :success, message: "Authenticated."
42
+ end
43
+
44
+ def handshake(handshake)
45
+ query = URI::decode_www_form(handshake.query_string)
46
+
47
+ @streams = query.map do |item|
48
+ if item.first == "stream"
49
+ item.last
50
+ end
51
+ end
52
+
53
+ @logger.info "ranger: WebSocket connection openned, streams: #{@streams}"
54
+
55
+ @client = Peatio::MQ::Events::Client.new(
56
+ @socket, @streams,
57
+ )
58
+
59
+ @socket.instance_variable_set(:@connection_handler, @client)
60
+ end
61
+ end
62
+
63
+ def self.run!(jwt_public_key)
64
+ host = ENV["RANGER_HOST"] || "0.0.0.0"
65
+ port = ENV["RANGER_PORT"] || "8081"
66
+
67
+ authenticator = Peatio::Auth::JWTAuthenticator.new(jwt_public_key)
68
+
69
+ logger = Peatio::Logger.logger
70
+ logger.info "Starting the server on port #{port}"
71
+
72
+ EM.run do
73
+ Peatio::MQ::Client.new
74
+ Peatio::MQ::Client.connect!
75
+ Peatio::MQ::Client.create_channel!
76
+
77
+ Peatio::MQ::Events.subscribe!
78
+
79
+ EM::WebSocket.start(
80
+ host: host,
81
+ port: port,
82
+ secure: false,
83
+ ) do |socket|
84
+ connection = Connection.new(authenticator, socket, logger)
85
+
86
+ socket.onopen do |handshake|
87
+ connection.handshake(handshake)
88
+ end
89
+
90
+ socket.onmessage do |msg|
91
+ connection.handle(msg)
92
+ end
93
+
94
+ socket.onclose do
95
+ logger.info "ranger: WebSocket connection closed"
96
+ end
97
+
98
+ socket.onerror do |e|
99
+ logger.error "ranger: WebSocket Error: #{e.message}"
100
+ end
101
+ end
102
+
103
+ yield if block_given?
104
+ end
105
+ end
106
+ end
@@ -0,0 +1,26 @@
1
+ require 'fileutils'
2
+
3
+ module Peatio::Security
4
+ class KeyGenerator
5
+
6
+ attr_reader :public, :private
7
+
8
+ def initialize
9
+ OpenSSL::PKey::RSA.generate(2048).tap do |pkey|
10
+ @public = pkey.public_key.to_pem
11
+ @private = pkey.to_pem
12
+ end
13
+ end
14
+
15
+ def save(folder)
16
+ FileUtils.mkdir_p(folder) unless File.exists?(folder)
17
+
18
+ write(File.join(folder, 'rsa-key'), @private)
19
+ write(File.join(folder, 'rsa-key.pub'), @public)
20
+ end
21
+
22
+ def write(filename, text)
23
+ File.open(filename, 'w') { |file| file.write(text) }
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,19 @@
1
+ module Peatio::Sql
2
+ class Client
3
+ attr_accessor :client, :config
4
+
5
+ def initialize
6
+ @config = {
7
+ host: ENV["DATABASE_HOST"] || "localhost",
8
+ username: ENV["DATABASE_USER"] || "root",
9
+ password: ENV["DATABASE_PASS"] || "",
10
+ port: ENV["DATABASE_PORT"] || "3306",
11
+ database: ENV["DATABASE_NAME"] || "peatio_development",
12
+ }
13
+ end
14
+
15
+ def connect
16
+ @client = Mysql2::Client.new(config)
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,72 @@
1
+ module Peatio::Sql
2
+ class Schema
3
+ attr_accessor :client
4
+
5
+ def initialize(sql_client)
6
+ @client = sql_client
7
+ end
8
+
9
+ def create_database(name)
10
+ client.query("CREATE DATABASE IF NOT EXISTS `#{ name }`;")
11
+ end
12
+
13
+ def create_tables(options = {})
14
+ statements = []
15
+ statements << "DROP TABLE IF EXISTS `operations`;" if options[:drop_if_exists]
16
+ statements << <<-EOF
17
+ CREATE TABLE IF NOT EXISTS `operations` (
18
+ id INT UNSIGNED NOT NULL AUTO_INCREMENT,
19
+ code TINYINT UNSIGNED NOT NULL,
20
+ account_id INT UNSIGNED NOT NULL,
21
+ reference INT UNSIGNED NOT NULL,
22
+ debit DECIMAL(32, 16) NOT NULL,
23
+ credit DECIMAL(32, 16) NOT NULL,
24
+ created_at DATETIME NOT NULL,
25
+ updated_at DATETIME NOT NULL,
26
+ PRIMARY KEY (id),
27
+ INDEX `balance_key` (account_id, debit, credit)
28
+ ) ENGINE = InnoDB;
29
+ EOF
30
+
31
+ statements << "DROP TABLE IF EXISTS `orders`;" if options[:drop_if_exists]
32
+ statements << <<EOF
33
+ CREATE TABLE IF NOT EXISTS`orders` (
34
+ `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
35
+ `uid` INT(11) UNSIGNED NOT NULL,
36
+ `bid` VARCHAR(5) NOT NULL,
37
+ `ask` VARCHAR(5) NOT NULL,
38
+ `market` VARCHAR(10) NOT NULL,
39
+ `price` DECIMAL(32,16) DEFAULT NULL,
40
+ `volume` DECIMAL(32,16) NOT NULL,
41
+ `fee` DECIMAL(32,16) NOT NULL DEFAULT '0.0000000000000000',
42
+ `type` TINYINT UNSIGNED NOT NULL,
43
+ `state` TINYINT UNSIGNED NOT NULL,
44
+ `created_at` DATETIME NOT NULL,
45
+ `updated_at` DATETIME NOT NULL,
46
+ PRIMARY KEY (`id`)
47
+ ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
48
+ EOF
49
+
50
+ statements << "DROP TABLE IF EXISTS `trades`;" if options[:drop_if_exists]
51
+ statements << <<EOF
52
+ CREATE TABLE IF NOT EXISTS `trades` (
53
+ `id` int(11) NOT NULL AUTO_INCREMENT,
54
+ `market` varchar(10) NOT NULL,
55
+ `volume` decimal(32,16) NOT NULL,
56
+ `price` decimal(32,16) NOT NULL,
57
+ `ask_id` int(11) NOT NULL,
58
+ `bid_id` int(11) NOT NULL,
59
+ `ask_uid` int(11) NOT NULL,
60
+ `bid_uid` int(11) NOT NULL,
61
+ `created_at` datetime NOT NULL,
62
+ `updated_at` datetime NOT NULL,
63
+ PRIMARY KEY (`id`)
64
+ ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
65
+ EOF
66
+ statements.each do |statement|
67
+ puts statement
68
+ client.query(statement)
69
+ end
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,3 @@
1
+ module Peatio
2
+ VERSION = "0.4.4"
3
+ end
@@ -0,0 +1,44 @@
1
+
2
+ lib = File.expand_path("../lib", __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require "peatio/version"
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "peatio1.9"
8
+ spec.version = Peatio::VERSION
9
+ spec.authors = ["topdev"]
10
+ spec.email = ["riguang102@gmail.com"]
11
+
12
+ spec.summary = %q{Peatio is a gem for running critical core services}
13
+ spec.description = %q{Peatio gem contains microservices and command line tools}
14
+ spec.homepage = "https://github.com/top1st/peatio-core-1.9"
15
+
16
+ # Specify which files should be added to the gem when it is released.
17
+ # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
18
+ spec.files = Dir.chdir(File.expand_path("..", __FILE__)) do
19
+ `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
20
+ end
21
+ spec.bindir = "bin"
22
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
23
+ spec.require_paths = ["lib"]
24
+
25
+ spec.add_dependency "clamp"
26
+ spec.add_dependency "amqp"
27
+ spec.add_dependency "eventmachine"
28
+ spec.add_dependency "em-websocket"
29
+ spec.add_dependency "mysql2"
30
+ spec.add_dependency "jwt"
31
+ spec.add_dependency "bunny"
32
+
33
+ spec.add_development_dependency "bundler", "~> 1.16"
34
+ spec.add_development_dependency "rake", "~> 13.0"
35
+ spec.add_development_dependency "rspec", "~> 3.0"
36
+ spec.add_development_dependency "bump"
37
+ spec.add_development_dependency "em-spec"
38
+ spec.add_development_dependency "em-websocket-client"
39
+ spec.add_development_dependency "bunny-mock"
40
+ spec.add_development_dependency "simplecov"
41
+ spec.add_development_dependency "simplecov-json"
42
+ spec.add_development_dependency "rspec_junit_formatter"
43
+ spec.add_development_dependency "rubocop-github"
44
+ end
metadata ADDED
@@ -0,0 +1,331 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: peatio1.9
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.4.4
5
+ platform: ruby
6
+ authors:
7
+ - topdev
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2020-08-04 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: clamp
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: amqp
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: eventmachine
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: em-websocket
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: mysql2
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: jwt
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: bunny
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: bundler
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: '1.16'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: '1.16'
125
+ - !ruby/object:Gem::Dependency
126
+ name: rake
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: '13.0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: '13.0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: rspec
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - "~>"
144
+ - !ruby/object:Gem::Version
145
+ version: '3.0'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - "~>"
151
+ - !ruby/object:Gem::Version
152
+ version: '3.0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: bump
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - ">="
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
167
+ - !ruby/object:Gem::Dependency
168
+ name: em-spec
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - ">="
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
174
+ type: :development
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - ">="
179
+ - !ruby/object:Gem::Version
180
+ version: '0'
181
+ - !ruby/object:Gem::Dependency
182
+ name: em-websocket-client
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - ">="
186
+ - !ruby/object:Gem::Version
187
+ version: '0'
188
+ type: :development
189
+ prerelease: false
190
+ version_requirements: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - ">="
193
+ - !ruby/object:Gem::Version
194
+ version: '0'
195
+ - !ruby/object:Gem::Dependency
196
+ name: bunny-mock
197
+ requirement: !ruby/object:Gem::Requirement
198
+ requirements:
199
+ - - ">="
200
+ - !ruby/object:Gem::Version
201
+ version: '0'
202
+ type: :development
203
+ prerelease: false
204
+ version_requirements: !ruby/object:Gem::Requirement
205
+ requirements:
206
+ - - ">="
207
+ - !ruby/object:Gem::Version
208
+ version: '0'
209
+ - !ruby/object:Gem::Dependency
210
+ name: simplecov
211
+ requirement: !ruby/object:Gem::Requirement
212
+ requirements:
213
+ - - ">="
214
+ - !ruby/object:Gem::Version
215
+ version: '0'
216
+ type: :development
217
+ prerelease: false
218
+ version_requirements: !ruby/object:Gem::Requirement
219
+ requirements:
220
+ - - ">="
221
+ - !ruby/object:Gem::Version
222
+ version: '0'
223
+ - !ruby/object:Gem::Dependency
224
+ name: simplecov-json
225
+ requirement: !ruby/object:Gem::Requirement
226
+ requirements:
227
+ - - ">="
228
+ - !ruby/object:Gem::Version
229
+ version: '0'
230
+ type: :development
231
+ prerelease: false
232
+ version_requirements: !ruby/object:Gem::Requirement
233
+ requirements:
234
+ - - ">="
235
+ - !ruby/object:Gem::Version
236
+ version: '0'
237
+ - !ruby/object:Gem::Dependency
238
+ name: rspec_junit_formatter
239
+ requirement: !ruby/object:Gem::Requirement
240
+ requirements:
241
+ - - ">="
242
+ - !ruby/object:Gem::Version
243
+ version: '0'
244
+ type: :development
245
+ prerelease: false
246
+ version_requirements: !ruby/object:Gem::Requirement
247
+ requirements:
248
+ - - ">="
249
+ - !ruby/object:Gem::Version
250
+ version: '0'
251
+ - !ruby/object:Gem::Dependency
252
+ name: rubocop-github
253
+ requirement: !ruby/object:Gem::Requirement
254
+ requirements:
255
+ - - ">="
256
+ - !ruby/object:Gem::Version
257
+ version: '0'
258
+ type: :development
259
+ prerelease: false
260
+ version_requirements: !ruby/object:Gem::Requirement
261
+ requirements:
262
+ - - ">="
263
+ - !ruby/object:Gem::Version
264
+ version: '0'
265
+ description: Peatio gem contains microservices and command line tools
266
+ email:
267
+ - riguang102@gmail.com
268
+ executables:
269
+ - console
270
+ - peatio
271
+ - setup
272
+ extensions: []
273
+ extra_rdoc_files: []
274
+ files:
275
+ - ".gitignore"
276
+ - ".rspec"
277
+ - ".rubocop.yml"
278
+ - ".simplecov"
279
+ - ".travis.yml"
280
+ - Gemfile
281
+ - Gemfile.lock
282
+ - README.md
283
+ - Rakefile
284
+ - bin/console
285
+ - bin/peatio
286
+ - bin/setup
287
+ - lib/peatio.rb
288
+ - lib/peatio/auth/error.rb
289
+ - lib/peatio/auth/jwt_authenticator.rb
290
+ - lib/peatio/command/amqp.rb
291
+ - lib/peatio/command/base.rb
292
+ - lib/peatio/command/db.rb
293
+ - lib/peatio/command/inject.rb
294
+ - lib/peatio/command/root.rb
295
+ - lib/peatio/command/security.rb
296
+ - lib/peatio/command/service.rb
297
+ - lib/peatio/error.rb
298
+ - lib/peatio/executor.rb
299
+ - lib/peatio/injectors/peatio_events.rb
300
+ - lib/peatio/logger.rb
301
+ - lib/peatio/mq/client.rb
302
+ - lib/peatio/mq/events.rb
303
+ - lib/peatio/ranger.rb
304
+ - lib/peatio/security/key_generator.rb
305
+ - lib/peatio/sql/client.rb
306
+ - lib/peatio/sql/schema.rb
307
+ - lib/peatio/version.rb
308
+ - peatio1.9.gemspec
309
+ homepage: https://github.com/top1st/peatio-core-1.9
310
+ licenses: []
311
+ metadata: {}
312
+ post_install_message:
313
+ rdoc_options: []
314
+ require_paths:
315
+ - lib
316
+ required_ruby_version: !ruby/object:Gem::Requirement
317
+ requirements:
318
+ - - ">="
319
+ - !ruby/object:Gem::Version
320
+ version: '0'
321
+ required_rubygems_version: !ruby/object:Gem::Requirement
322
+ requirements:
323
+ - - ">="
324
+ - !ruby/object:Gem::Version
325
+ version: '0'
326
+ requirements: []
327
+ rubygems_version: 3.0.3
328
+ signing_key:
329
+ specification_version: 4
330
+ summary: Peatio is a gem for running critical core services
331
+ test_files: []