peerplays-ruby 1.0.0.pre.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 35a78c6fb3c7f210ce43680547d1ab2174183762428a948164be64e9c6f69ddb
4
+ data.tar.gz: 40afb1e1d97f39a3e6094c4c45534df8b91108d7e611138a1c78d396dd0ee634
5
+ SHA512:
6
+ metadata.gz: 2554955eeb96fd7833b79e4c77f7d83eac3390f8f9faf37cdaf98ea24dfca402eb0b2d98e6fe551f4703bb3d1146bcd06ade5866f95eca3d921ee19266e414ee
7
+ data.tar.gz: 44d6e613313a299099951c2144ac597d23d5fbc0da997adb95d6218db10cde6db7df6f998f50b3434688a3094e7f1a14b9769e16f666e160e6866fa87b6a6c6d
@@ -0,0 +1,19 @@
1
+ *.gem
2
+ /coverage/
3
+ /pkg/
4
+ /tmp/
5
+
6
+ ## Documentation cache and generated files:
7
+ /.yardoc/
8
+ /_yardoc/
9
+ /doc/
10
+ /rdoc/
11
+
12
+ ## Environment normalization:
13
+ /.bundle/
14
+
15
+ # unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
16
+ .rvmrc
17
+
18
+ # gource output
19
+ output.mp4
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
@@ -0,0 +1,84 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ peerplays-ruby (1.0.0.pre.1)
5
+ base58 (~> 0.2, >= 0.2.3)
6
+ bindata (~> 2.4, >= 2.4.4)
7
+ bitcoin-ruby (~> 0.0, >= 0.0.18)
8
+ faye-websocket (~> 0.10, >= 0.10.9)
9
+ ffi (~> 1.13, >= 1.9.23)
10
+ hashie (~> 4.1, >= 3.5.7)
11
+ json (~> 2.3, >= 2.1.0)
12
+ logging (~> 2.2, >= 2.2.0)
13
+
14
+ GEM
15
+ remote: https://rubygems.org/
16
+ specs:
17
+ awesome_print (1.8.0)
18
+ base58 (0.2.3)
19
+ bindata (2.4.7)
20
+ bitcoin-ruby (0.0.20)
21
+ eventmachine
22
+ ffi
23
+ scrypt
24
+ coderay (1.1.3)
25
+ docile (1.3.2)
26
+ eventmachine (1.2.7)
27
+ faye-websocket (0.10.9)
28
+ eventmachine (>= 0.12.0)
29
+ websocket-driver (>= 0.5.1)
30
+ ffi (1.13.1)
31
+ ffi-compiler (1.0.1)
32
+ ffi (>= 1.0.0)
33
+ rake
34
+ hashie (4.1.0)
35
+ io-console (0.5.6)
36
+ irb (1.2.4)
37
+ reline (>= 0.0.1)
38
+ json (2.3.0)
39
+ little-plugger (1.1.4)
40
+ logging (2.2.2)
41
+ little-plugger (~> 1.1)
42
+ multi_json (~> 1.10)
43
+ method_source (1.0.0)
44
+ minitest (5.14.1)
45
+ minitest-line (0.6.5)
46
+ minitest (~> 5.0)
47
+ minitest-proveit (1.0.0)
48
+ minitest (> 5, < 7)
49
+ multi_json (1.14.1)
50
+ pry (0.13.1)
51
+ coderay (~> 1.1)
52
+ method_source (~> 1.0)
53
+ rake (13.0.1)
54
+ reline (0.1.4)
55
+ io-console (~> 0.5)
56
+ scrypt (3.0.7)
57
+ ffi-compiler (>= 1.0, < 2.0)
58
+ simplecov (0.18.5)
59
+ docile (~> 1.1)
60
+ simplecov-html (~> 0.11)
61
+ simplecov-html (0.12.2)
62
+ websocket-driver (0.7.2)
63
+ websocket-extensions (>= 0.1.0)
64
+ websocket-extensions (0.1.5)
65
+ yard (0.9.25)
66
+
67
+ PLATFORMS
68
+ ruby
69
+
70
+ DEPENDENCIES
71
+ awesome_print (~> 1.8, >= 1.8.0)
72
+ bundler (~> 2.1, >= 1.16.1)
73
+ irb (~> 1.2, >= 1.2.3)
74
+ minitest (~> 5.14, >= 5.10.3)
75
+ minitest-line (~> 0.6, >= 0.6.4)
76
+ minitest-proveit (~> 1.0, >= 1.0.0)
77
+ peerplays-ruby!
78
+ pry (~> 0.13, >= 0.11.3)
79
+ rake (~> 13.0, >= 12.3.0)
80
+ simplecov (~> 0.18, >= 0.15.1)
81
+ yard (~> 0.9, >= 0.9.12)
82
+
83
+ BUNDLED WITH
84
+ 2.1.4
@@ -0,0 +1,23 @@
1
+ Copyright (c) 2015-2016 Cryptonomex Inc. <contact@cryptonomex.com>
2
+ Copyright (c) 2015-2017 contributors <CONTRIBUTORS.txt>
3
+ Copyright (c) 2017 - 2018 Peerplays Blockchain Standards Association, and contributors.
4
+
5
+ The MIT License
6
+
7
+ Permission is hereby granted, free of charge, to any person obtaining a copy
8
+ of this software and associated documentation files (the "Software"), to deal
9
+ in the Software without restriction, including without limitation the rights
10
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11
+ copies of the Software, and to permit persons to whom the Software is
12
+ furnished to do so, subject to the following conditions:
13
+
14
+ The above copyright notice and this permission notice shall be included in
15
+ all copies or substantial portions of the Software.
16
+
17
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
23
+ THE SOFTWARE.
@@ -0,0 +1,81 @@
1
+ # `peerplays-ruby`
2
+
3
+ Peerplays-ruby the Ruby API for Peerplays blockchain.
4
+
5
+ ## Getting Started
6
+
7
+ The peerplays-ruby gem is compatible with Ruby 2.4 or later.
8
+
9
+ ### Install the gem for your project
10
+
11
+ *(Assuming that [Ruby is installed](https://www.ruby-lang.org/en/downloads/) on your computer, as well as [RubyGems](http://rubygems.org/pages/download))*
12
+
13
+ To install the gem on your computer, run in shell:
14
+
15
+ ```bash
16
+ gem install peerplays-ruby
17
+ ```
18
+
19
+ ... then add in your code:
20
+
21
+ ```ruby
22
+ require 'peerplays'
23
+ ```
24
+
25
+ To add the gem as a dependency to your project with [Bundler](http://bundler.io/), you can add this line in your Gemfile:
26
+
27
+ ```ruby
28
+ gem 'peerplays-ruby', require: 'peerplays'
29
+ ```
30
+
31
+ ### Get Accounts
32
+
33
+ ```ruby
34
+ require 'peerplays'
35
+
36
+ api = Peerplays::DatabaseApi.new
37
+
38
+ api.get_accounts(['init1']) do |result|
39
+ result.each do |account|
40
+ puts account
41
+ end
42
+ end
43
+ ```
44
+
45
+ ### Set API Node
46
+
47
+ To set an alternative node, pass it as an argument, e.g.:
48
+
49
+ ```ruby
50
+ api = Peerplays::DatabaseApi.new(url: 'wss://ppyws.roelandp.nl/ws')
51
+ ```
52
+
53
+ ### Reference
54
+
55
+ For lists of available methods provided by this gem:
56
+
57
+ * https://www.peerplays.tech/api/peerplays-core-api
58
+ * https://www.peerplays.tech/api/peerplays-wallet-api
59
+
60
+ ### Tests
61
+
62
+ * Clone the client repository into a directory of your choice:
63
+ * `git clone git@gitlab.com:PBSA/PeerplaysIO/tools-libs/ruby-peerplays.git`
64
+ * Navigate into the new folder
65
+ * `cd ruby-peerplays`
66
+ * All tests can be invoked as follows:
67
+ * `bundle exec rake test`
68
+ * To run `testnet` tests (which does actual broadcasts)
69
+ * `TEST_NODE=ws://api.ppy-beatrice.blckchnd.com bundle exec rake`
70
+
71
+ ## Contributions
72
+
73
+ Patches are welcome! Contributors are listed in the `peerplays-ruby.gemspec` file. Please run the tests (`rake test`) before opening a pull request and make sure that you are passing all of them. If you would like to contribute, but don't know what to work on, check the issues list.
74
+
75
+ ## Issues
76
+
77
+ When you find issues, please report them!
78
+
79
+ ## License
80
+
81
+ MIT
@@ -0,0 +1,26 @@
1
+ require 'bundler/gem_tasks'
2
+ require 'rake/testtask'
3
+ require 'yard'
4
+ require 'peerplays'
5
+
6
+ Rake::TestTask.new(:test) do |t|
7
+ t.libs << 'test'
8
+ t.libs << 'lib'
9
+ t.test_files = FileList['test/**/*_test.rb']
10
+ t.ruby_opts << if ENV['HELL_ENABLED']
11
+ '-W2'
12
+ else
13
+ '-W1'
14
+ end
15
+ end
16
+
17
+ YARD::Rake::YardocTask.new do |t|
18
+ t.files = ['lib/**/*.rb']
19
+ end
20
+
21
+ task default: :test
22
+
23
+ desc 'Ruby console with peerplays already required.'
24
+ task :console do
25
+ exec 'irb -r peerplays -r awesome_print -I ./lib'
26
+ end
@@ -0,0 +1,23 @@
1
+ # encoding: UTF-8
2
+ require 'json' unless defined?(JSON)
3
+ require 'net/https'
4
+
5
+ require 'hashie'
6
+ require 'peerplays/version'
7
+ require 'peerplays/chain_config'
8
+ require 'peerplays/base_error'
9
+ require 'peerplays/api'
10
+ require 'peerplays/history_api'
11
+ require 'peerplays/asset_api'
12
+ require 'peerplays/block_api'
13
+ require 'peerplays/crypto_api'
14
+ require 'peerplays/database_api'
15
+ require 'peerplays/network_broadcast_api'
16
+ require 'peerplays/network_node_api'
17
+ require 'peerplays/orders_api'
18
+ require 'peerplays/wallet_api'
19
+
20
+ module Peerplays
21
+ end
22
+
23
+ Hashie.logger = Logger.new(ENV['HASHIE_LOGGER'])
@@ -0,0 +1,115 @@
1
+ require 'faye/websocket'
2
+ require 'eventmachine'
3
+
4
+ module Peerplays
5
+ # See: {https://www.peerplays.tech/api/peerplays-core-api Core API}
6
+ class Api
7
+ attr_reader :methods
8
+
9
+ INITIAL_LATCH = 0.01
10
+ MAX_LATCH = 3.0
11
+
12
+ def initialize(options = {})
13
+ @url = options[:url] || ChainConfig::NETWORKS_PEERPLAYS_DEFAULT_NODE
14
+ @rpc_id = 0
15
+ @latch = INITIAL_LATCH
16
+ @socket = nil
17
+ @messages = nil
18
+ @thread_running = false
19
+ @api_id = api_id if !!@api_name && !!options[:check_enabled]
20
+ @api_id ||= options[:api_id] || @api_name
21
+ end
22
+
23
+ def api_id
24
+ @api_id = socket_send(1, @api_name, [])
25
+ end
26
+
27
+ def socket_send(*args)
28
+ id = rpc_id
29
+ send_options = {id: id, method: :call, params: args}
30
+
31
+ socket.send(send_options.to_json)
32
+ latch_reset
33
+ latch until !!(message = messages.delete(id))
34
+
35
+ if !!message['error']
36
+ BaseError.build_error(message['error'], send_options)
37
+ end
38
+
39
+ message['result']
40
+ end
41
+
42
+ def socket
43
+ start_thread unless !!@thread_running
44
+
45
+ @socket
46
+ end
47
+
48
+ def messages
49
+ start_thread unless !!@thread_running
50
+
51
+ @messages
52
+ end
53
+ private
54
+ # @private
55
+ def start_thread
56
+ Thread.new do
57
+ EM.run {
58
+ @socket ||= Faye::WebSocket::Client.new(@url)
59
+
60
+ @socket.on :open do |event|
61
+ @socket.send({id: rpc_id, method: 'call', params: [1, 'login', ['','']]}.to_json)
62
+ @thread_running = true
63
+ end
64
+
65
+ @socket.on :message do |event|
66
+ @messages ||= {}
67
+
68
+ JSON[event.data].tap do |object|
69
+ @messages[object['id']] = Hashie::Mash.new(object.select{|k| !%w(id jsonrpc).include? k})
70
+ end
71
+ end
72
+
73
+ @socket.on :close do |event|
74
+ @thread_running = false
75
+ @socket = nil
76
+ end
77
+ }
78
+ end
79
+
80
+ latch_reset
81
+ latch until !!@socket && !!@messages && @thread_running
82
+ end
83
+
84
+ # @private
85
+ def respond_to_missing?(m, include_private = false)
86
+ @methods.nil? ? false : @methods.include?(m.to_sym)
87
+ end
88
+
89
+ # @private
90
+ def method_missing(m, *args, &block)
91
+ super unless respond_to_missing?(m)
92
+
93
+ return socket_send(@api_id, m, args) unless block_given?
94
+
95
+ yield socket_send(@api_id, m, args)
96
+ end
97
+
98
+ # @private
99
+ def latch_reset
100
+ @latch = INITIAL_LATCH
101
+ end
102
+
103
+ # @private
104
+ def latch
105
+ raise RequestTimeoutUpstreamResponseError if @latch > MAX_LATCH * 2
106
+
107
+ sleep [@latch *= 2, MAX_LATCH].min
108
+ end
109
+
110
+ # @private
111
+ def rpc_id
112
+ @rpc_id = @rpc_id + 1
113
+ end
114
+ end
115
+ end
@@ -0,0 +1,17 @@
1
+ module Peerplays
2
+ # See: {https://www.peerplays.tech/api/peerplays-core-api/asset-api Asset API}
3
+ class AssetApi < Peerplays::Api
4
+ ASSET_API_NAMESPACE = 'asset'.freeze
5
+ ASSET_API_METHODS = %i(
6
+ get_asset_holders
7
+ get_all_asset_holders
8
+ ).freeze
9
+
10
+ def initialize(options = {})
11
+ @api_name = ASSET_API_NAMESPACE
12
+ @methods = ASSET_API_METHODS
13
+
14
+ super
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,49 @@
1
+ module Peerplays
2
+ class BaseError < StandardError
3
+ def initialize(error = nil, cause = nil)
4
+ @error = error
5
+ @cause = cause
6
+ end
7
+
8
+ def to_s
9
+ detail = {}
10
+ detail[:error] = @error if !!@error
11
+ detail[:cause] = @cause if !!@cause
12
+
13
+ JSON[detail] rescue detail.to_s
14
+ end
15
+
16
+ def self.build_error(error, context)
17
+ if error.message =~ /too few arguments passed to method/
18
+ raise ArgumentError, "#{error.message}: #{context}:", build_backtrace(error)
19
+ elsif error.message =~ /Invalid cast/
20
+ raise ArgumentError, "#{error.message}: #{context}:", build_backtrace(error)
21
+ elsif error.message =~ /doesn't match expected value/
22
+ raise ArgumentError, "#{error.message}: #{context}:", build_backtrace(error)
23
+ elsif error.message =~ /name_or_id.size\(\) > 0/
24
+ raise ArgumentError, "#{error.message}: #{context}:", build_backtrace(error)
25
+ elsif error.message =~ /account: no such account/
26
+ raise ArgumentError, "#{error.message}: #{context}:", build_backtrace(error)
27
+ elsif error.message =~ /A transaction must have at least one operation/
28
+ raise EmptyTransactionError, "#{error.message}: #{context}:", build_backtrace(error)
29
+ elsif error.message =~ /attempting to push a block that is too old/
30
+ raise BlockTooOldError, "#{error.message}: #{context}:", build_backtrace(error)
31
+ else
32
+ raise UnknownError, "#{error.message}: #{context}:", build_backtrace(error)
33
+ end
34
+ end
35
+ private
36
+ def self.build_backtrace(error)
37
+ backtrace = Thread.current.backtrace.reject{ |line| line =~ /base_error/ }
38
+ JSON.pretty_generate(error) + "\n" + backtrace.join("\n")
39
+ end
40
+ end
41
+
42
+ class ArgumentError < BaseError; end
43
+ class RemoteNodeError < BaseError; end
44
+ class UpstreamResponseError < RemoteNodeError; end
45
+ class RequestTimeoutUpstreamResponseError < UpstreamResponseError; end
46
+ class EmptyTransactionError < ArgumentError; end
47
+ class BlockTooOldError < BaseError; end
48
+ class UnknownError < BaseError; end
49
+ end
@@ -0,0 +1,16 @@
1
+ module Peerplays
2
+ # See: {https://www.peerplays.tech/api/peerplays-core-api/block-api Block API}
3
+ class BlockApi < Peerplays::Api
4
+ BLOCK_API_NAMESPACE = 'block'.freeze
5
+ BLOCK_API_METHODS = %i(
6
+ get_blocks
7
+ ).freeze
8
+
9
+ def initialize(options = {})
10
+ @api_name = BLOCK_API_NAMESPACE
11
+ @methods = BLOCK_API_METHODS
12
+
13
+ super
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,18 @@
1
+ module Peerplays
2
+ module ChainConfig
3
+ EXPIRE_IN_SECS = 600
4
+ EXPIRE_IN_SECS_PROPOSAL = 24 * 60 * 60
5
+
6
+ NETWORKS_PEERPLAYS_CHAIN_ID = '6b6b5f0ce7a36d323768e534f3edb41c6d6332a541a95725b98e28d140850134'
7
+ NETWORKS_PEERPLAYS_ADDRESS_PREFIX = 'PPY'
8
+ NETWORKS_PEERPLAYS_CORE_ASSET = 'PPY'
9
+ NETWORKS_PEERPLAYS_DEFAULT_NODE = 'wss://api.ppy.blckchnd.com'
10
+
11
+ NETWORKS_TEST_CHAIN_ID = 'b3f7fe1e5ad0d2deca40a626a4404524f78e65c3a48137551c33ea4e7c365672'
12
+ NETWORKS_TEST_ADDRESS_PREFIX = 'TEST'
13
+ NETWORKS_TEST_CORE_ASSET = 'TEST'
14
+ NETWORKS_TEST_DEFAULT_NODE = 'ws://api.ppy-beatrice.blckchnd.com'
15
+
16
+ NETWORK_CHAIN_IDS = [NETWORKS_PEERPLAYS_CHAIN_ID, NETWORKS_TEST_CHAIN_ID]
17
+ end
18
+ end
@@ -0,0 +1,22 @@
1
+ module Peerplays
2
+ # See: {https://www.peerplays.tech/api/peerplays-core-api/crypto-api Crypto API}
3
+ class CryptoApi < Peerplays::Api
4
+ CRYPTO_API_NAMESPACE = 'crypto'.freeze
5
+ CRYPTO_API_METHODS = %i(
6
+ blind
7
+ blind_sum
8
+ range_get_info
9
+ range_proof_sign
10
+ verify_sum
11
+ verify_range
12
+ verify_range_proof_rewind
13
+ ).freeze
14
+
15
+ def initialize(options = {})
16
+ @api_name = CRYPTO_API_NAMESPACE
17
+ @methods = CRYPTO_API_METHODS
18
+
19
+ super
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,74 @@
1
+ module Peerplays
2
+ # See: {https://www.peerplays.tech/api/peerplays-core-api/database-api Database API}
3
+ class DatabaseApi < Peerplays::Api
4
+ DATABASE_API_NAMESPACE = 'database'
5
+ DATABASE_API_METHODS = %i(
6
+ get_objects
7
+ set_subscribe_callback
8
+ set_pending_transaction_callback
9
+ set_block_applied_callback
10
+ cancel_all_subscriptions
11
+ get_block_header
12
+ get_block
13
+ get_transaction
14
+ get_recent_transaction_by_id
15
+ get_chain_properties
16
+ get_global_properties
17
+ get_config
18
+ get_chain_id
19
+ get_dynamic_global_properties
20
+ get_key_references
21
+ get_accounts
22
+ get_full_accounts
23
+ get_account_by_name
24
+ get_account_references
25
+ lookup_account_names
26
+ lookup_accounts
27
+ get_account_count
28
+ get_account_balances
29
+ get_named_account_balances
30
+ get_balance_objects
31
+ get_vested_balances
32
+ get_vesting_balances
33
+ get_assets
34
+ list_assets
35
+ lookup_asset_symbols
36
+ get_order_book
37
+ get_limit_orders
38
+ get_call_orders
39
+ get_settle_orders
40
+ get_margin_positions
41
+ subscribe_to_market
42
+ unsubscribe_from_market
43
+ get_ticker
44
+ get_24_volume
45
+ get_trade_history
46
+ get_witnesses
47
+ get_witness_by_account
48
+ lookup_witness_accounts
49
+ get_witness_count
50
+ get_committee_members
51
+ get_committee_member_by_account
52
+ lookup_committee_member_accounts
53
+ get_workers_by_account
54
+ lookup_vote_ids
55
+ get_transaction_hex
56
+ get_required_signatures
57
+ get_potential_signatures
58
+ get_potential_address_signatures
59
+ verify_authority
60
+ verify_account_authority
61
+ validate_transaction
62
+ get_required_fees
63
+ get_proposed_transactions
64
+ get_blinded_balances
65
+ ).freeze
66
+
67
+ def initialize(options = {})
68
+ @api_name = DATABASE_API_NAMESPACE
69
+ @methods = DATABASE_API_METHODS
70
+
71
+ super
72
+ end
73
+ end
74
+ end
@@ -0,0 +1,21 @@
1
+ module Peerplays
2
+ # See: {https://www.peerplays.tech/api/peerplays-core-api/account-history-api History API}
3
+ class HistoryApi < Peerplays::Api
4
+ HISTORY_API_NAMESPACE = 'history'.freeze
5
+ HISTORY_API_METHODS = %i(
6
+ get_account_history
7
+ get_account_history_operations
8
+ get_relative_account_history
9
+ get_fill_order_history
10
+ get_market_history
11
+ get_market_history_buckets
12
+ ).freeze
13
+
14
+ def initialize(options = {})
15
+ @api_name = HISTORY_API_NAMESPACE
16
+ @methods = HISTORY_API_METHODS
17
+
18
+ super
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,18 @@
1
+ module Peerplays
2
+ # See: {https://www.peerplays.tech/api/peerplays-core-api/network-broadcast-api Network Broadcast API}
3
+ class NetworkBroadcastApi < Peerplays::Api
4
+ NETWORK_BROADCAST_API_NAMESPACE = 'network_broadcast'.freeze
5
+ NETWORK_BROADCAST_API_METHODS = %i(
6
+ broadcast_transaction
7
+ broadcast_transaction_with_callback
8
+ broadcast_block
9
+ ).freeze
10
+
11
+ def initialize(options = {})
12
+ @api_name = NETWORK_BROADCAST_API_NAMESPACE
13
+ @methods = NETWORK_BROADCAST_API_METHODS
14
+
15
+ super
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,21 @@
1
+ module Peerplays
2
+ # See: {https://www.peerplays.tech/api/peerplays-core-api/network-nodes-api Network Node API}
3
+ class NetworkNodeApi < Peerplays::Api
4
+ NETWORK_NODE_API_NAMESPACE = 'network_node'.freeze
5
+ NETWORK_NODE_API_METHODS = %i(
6
+ get_info
7
+ get_connected_peers
8
+ get_potential_peers
9
+ get_advanced_node_parameters
10
+ add_node
11
+ set_advanced_node_parameters
12
+ ).freeze
13
+
14
+ def initialize(options = {})
15
+ @api_name = NETWORK_NODE_API_NAMESPACE
16
+ @methods = NETWORK_NODE_API_METHODS
17
+
18
+ super
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,16 @@
1
+ module Peerplays
2
+ # See: {https://www.peerplays.tech/api/peerplays-core-api/orders-api Orders API}
3
+ class OrdersApi < Peerplays::Api
4
+ ORDERS_API_NAMESPACE = 'orders'.freeze
5
+ ORDERS_API_METHODS = %i(
6
+ get_grouped_limit_orders
7
+ ).freeze
8
+
9
+ def initialize(options = {})
10
+ @api_name = ORDERS_API_NAMESPACE
11
+ @methods = ORDERS_API_METHODS
12
+
13
+ super
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,4 @@
1
+ module Peerplays
2
+ VERSION = '1.0.0-1'
3
+ AGENT_ID = "peerplays-ruby/#{VERSION}"
4
+ end
@@ -0,0 +1,118 @@
1
+ module Peerplays
2
+ # See: {https://www.peerplays.tech/api/peerplays-wallet-api Wallet API}
3
+ class WalletApi < Peerplays::Api
4
+ WALLET_API_NAMESPACE = 'wallet'.freeze
5
+ WALLET_API_METHODS = %i(
6
+ list_my_accounts
7
+ list_accounts
8
+ list_account_balances
9
+ register_account
10
+ upgrade_account
11
+ create_account_with_brain_key
12
+ transfer
13
+ transfer2
14
+ whitelist_account
15
+ get_vesting_balances
16
+ withdraw_vesting
17
+ get_account
18
+ get_account_id
19
+ get_account_history
20
+ approve_proposal
21
+ list_my_accounts
22
+ list_accounts
23
+ list_account_balances
24
+ register_account
25
+ upgrade_account
26
+ create_account_with_brain_key
27
+ transfer
28
+ transfer2
29
+ whitelist_account
30
+ get_vesting_balances
31
+ withdraw_vesting
32
+ get_account
33
+ get_account_id
34
+ get_account_history
35
+ approve_proposal
36
+ get_block
37
+ get_account_count
38
+ get_global_properties
39
+ get_dynamic_global_properties
40
+ get_object
41
+ help
42
+ gethelp
43
+ info
44
+ about
45
+ network_get_connected_peers
46
+ create_committee_member
47
+ get_witness
48
+ get_committee_member
49
+ list_witnesses
50
+ list_committee_members
51
+ create_witness
52
+ update_witness
53
+ create_worker
54
+ update_worker_votes
55
+ vote_for_committee_member
56
+ vote_for_witness
57
+ set_voting_proxy
58
+ set_desired_witness_and_committee_member_count
59
+ propose_parameter_change
60
+ propose_fee_change
61
+ set_key_label
62
+ get_key_label
63
+ get_public_key
64
+ get_blind_accounts
65
+ get_my_blind_accounts
66
+ get_blind_balances
67
+ create_blind_account
68
+ transfer_to_blind
69
+ transfer_from_blind
70
+ blind_transfer
71
+ blind_history
72
+ receive_blind_transfer
73
+ sell_asset
74
+ borrow_asset
75
+ cancel_order
76
+ settle_asset
77
+ get_market_history
78
+ get_limit_orders
79
+ get_call_orders
80
+ get_settle_orders
81
+ begin_builder_transaction
82
+ add_operation_to_builder_transaction
83
+ replace_operation_in_builder_transaction
84
+ set_fees_on_builder_transaction
85
+ preview_builder_transaction
86
+ sign_builder_transaction
87
+ propose_builder_transaction
88
+ propose_builder_transaction2
89
+ remove_builder_transaction
90
+ serialize_transaction
91
+ sign_transaction
92
+ get_prototype_operation
93
+ is_new
94
+ is_locked
95
+ lock
96
+ unlock
97
+ set_password
98
+ dump_private_keys
99
+ import_key
100
+ import_accounts
101
+ import_account_keys
102
+ import_balance
103
+ suggest_brain_key
104
+ get_transaction_id
105
+ get_private_key
106
+ load_wallet_file
107
+ normalize_brain_key
108
+ save_wallet_file
109
+ ).freeze
110
+
111
+ def initialize(options = {})
112
+ @api_name = WALLET_API_NAMESPACE
113
+ @methods = WALLET_API_METHODS
114
+
115
+ super
116
+ end
117
+ end
118
+ end
@@ -0,0 +1,39 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'peerplays/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = 'peerplays-ruby'
8
+ spec.version = Peerplays::VERSION
9
+ spec.authors = ['Anthony Martin']
10
+ spec.email = ['peerplays-ruby@martin-studio.com']
11
+
12
+ spec.summary = %q{Peerplays Ruby Client}
13
+ spec.description = %q{Client for accessing the Peerplays blockchain.}
14
+ spec.homepage = 'https://gitlab.com/PBSA/PeerplaysIO/tools-libs/ruby-peerplays'
15
+ spec.license = 'MIT'
16
+
17
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test)/}) }
18
+ spec.require_paths = ['lib']
19
+
20
+ spec.add_development_dependency 'bundler', '~> 2.1', '>= 1.16.1'
21
+ spec.add_development_dependency 'rake', '~> 13.0', '>= 12.3.0'
22
+ spec.add_development_dependency 'minitest', '~> 5.14', '>= 5.10.3'
23
+ spec.add_development_dependency 'minitest-line', '~> 0.6', '>= 0.6.4'
24
+ spec.add_development_dependency 'minitest-proveit', '~> 1.0', '>= 1.0.0'
25
+ spec.add_development_dependency 'simplecov', '~> 0.18', '>= 0.15.1'
26
+ spec.add_development_dependency 'yard', '~> 0.9', '>= 0.9.12'
27
+ spec.add_development_dependency 'pry', '~> 0.13', '>= 0.11.3'
28
+ spec.add_development_dependency 'awesome_print', '~> 1.8', '>= 1.8.0'
29
+ spec.add_development_dependency 'irb', '~> 1.2', '>= 1.2.3'
30
+
31
+ spec.add_dependency 'faye-websocket', '~> 0.10', '>= 0.10.9'
32
+ spec.add_dependency 'json', '~> 2.3', '>= 2.1.0'
33
+ spec.add_dependency 'logging', '~> 2.2', '>= 2.2.0'
34
+ spec.add_dependency 'hashie', '~> 4.1', '>= 3.5.7'
35
+ spec.add_dependency 'bitcoin-ruby', '~> 0.0', '>= 0.0.18'
36
+ spec.add_dependency 'ffi', '~> 1.13', '>= 1.9.23'
37
+ spec.add_dependency 'bindata', '~> 2.4', '>= 2.4.4'
38
+ spec.add_dependency 'base58', '~> 0.2', '>= 0.2.3'
39
+ end
metadata ADDED
@@ -0,0 +1,425 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: peerplays-ruby
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0.pre.1
5
+ platform: ruby
6
+ authors:
7
+ - Anthony Martin
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2020-06-10 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 1.16.1
20
+ - - "~>"
21
+ - !ruby/object:Gem::Version
22
+ version: '2.1'
23
+ type: :development
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ version: 1.16.1
30
+ - - "~>"
31
+ - !ruby/object:Gem::Version
32
+ version: '2.1'
33
+ - !ruby/object:Gem::Dependency
34
+ name: rake
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: 12.3.0
40
+ - - "~>"
41
+ - !ruby/object:Gem::Version
42
+ version: '13.0'
43
+ type: :development
44
+ prerelease: false
45
+ version_requirements: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - ">="
48
+ - !ruby/object:Gem::Version
49
+ version: 12.3.0
50
+ - - "~>"
51
+ - !ruby/object:Gem::Version
52
+ version: '13.0'
53
+ - !ruby/object:Gem::Dependency
54
+ name: minitest
55
+ requirement: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - ">="
58
+ - !ruby/object:Gem::Version
59
+ version: 5.10.3
60
+ - - "~>"
61
+ - !ruby/object:Gem::Version
62
+ version: '5.14'
63
+ type: :development
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ version: 5.10.3
70
+ - - "~>"
71
+ - !ruby/object:Gem::Version
72
+ version: '5.14'
73
+ - !ruby/object:Gem::Dependency
74
+ name: minitest-line
75
+ requirement: !ruby/object:Gem::Requirement
76
+ requirements:
77
+ - - "~>"
78
+ - !ruby/object:Gem::Version
79
+ version: '0.6'
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: 0.6.4
83
+ type: :development
84
+ prerelease: false
85
+ version_requirements: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '0.6'
90
+ - - ">="
91
+ - !ruby/object:Gem::Version
92
+ version: 0.6.4
93
+ - !ruby/object:Gem::Dependency
94
+ name: minitest-proveit
95
+ requirement: !ruby/object:Gem::Requirement
96
+ requirements:
97
+ - - ">="
98
+ - !ruby/object:Gem::Version
99
+ version: 1.0.0
100
+ - - "~>"
101
+ - !ruby/object:Gem::Version
102
+ version: '1.0'
103
+ type: :development
104
+ prerelease: false
105
+ version_requirements: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - ">="
108
+ - !ruby/object:Gem::Version
109
+ version: 1.0.0
110
+ - - "~>"
111
+ - !ruby/object:Gem::Version
112
+ version: '1.0'
113
+ - !ruby/object:Gem::Dependency
114
+ name: simplecov
115
+ requirement: !ruby/object:Gem::Requirement
116
+ requirements:
117
+ - - ">="
118
+ - !ruby/object:Gem::Version
119
+ version: 0.15.1
120
+ - - "~>"
121
+ - !ruby/object:Gem::Version
122
+ version: '0.18'
123
+ type: :development
124
+ prerelease: false
125
+ version_requirements: !ruby/object:Gem::Requirement
126
+ requirements:
127
+ - - ">="
128
+ - !ruby/object:Gem::Version
129
+ version: 0.15.1
130
+ - - "~>"
131
+ - !ruby/object:Gem::Version
132
+ version: '0.18'
133
+ - !ruby/object:Gem::Dependency
134
+ name: yard
135
+ requirement: !ruby/object:Gem::Requirement
136
+ requirements:
137
+ - - "~>"
138
+ - !ruby/object:Gem::Version
139
+ version: '0.9'
140
+ - - ">="
141
+ - !ruby/object:Gem::Version
142
+ version: 0.9.12
143
+ type: :development
144
+ prerelease: false
145
+ version_requirements: !ruby/object:Gem::Requirement
146
+ requirements:
147
+ - - "~>"
148
+ - !ruby/object:Gem::Version
149
+ version: '0.9'
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: 0.9.12
153
+ - !ruby/object:Gem::Dependency
154
+ name: pry
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ version: 0.11.3
160
+ - - "~>"
161
+ - !ruby/object:Gem::Version
162
+ version: '0.13'
163
+ type: :development
164
+ prerelease: false
165
+ version_requirements: !ruby/object:Gem::Requirement
166
+ requirements:
167
+ - - ">="
168
+ - !ruby/object:Gem::Version
169
+ version: 0.11.3
170
+ - - "~>"
171
+ - !ruby/object:Gem::Version
172
+ version: '0.13'
173
+ - !ruby/object:Gem::Dependency
174
+ name: awesome_print
175
+ requirement: !ruby/object:Gem::Requirement
176
+ requirements:
177
+ - - ">="
178
+ - !ruby/object:Gem::Version
179
+ version: 1.8.0
180
+ - - "~>"
181
+ - !ruby/object:Gem::Version
182
+ version: '1.8'
183
+ type: :development
184
+ prerelease: false
185
+ version_requirements: !ruby/object:Gem::Requirement
186
+ requirements:
187
+ - - ">="
188
+ - !ruby/object:Gem::Version
189
+ version: 1.8.0
190
+ - - "~>"
191
+ - !ruby/object:Gem::Version
192
+ version: '1.8'
193
+ - !ruby/object:Gem::Dependency
194
+ name: irb
195
+ requirement: !ruby/object:Gem::Requirement
196
+ requirements:
197
+ - - "~>"
198
+ - !ruby/object:Gem::Version
199
+ version: '1.2'
200
+ - - ">="
201
+ - !ruby/object:Gem::Version
202
+ version: 1.2.3
203
+ type: :development
204
+ prerelease: false
205
+ version_requirements: !ruby/object:Gem::Requirement
206
+ requirements:
207
+ - - "~>"
208
+ - !ruby/object:Gem::Version
209
+ version: '1.2'
210
+ - - ">="
211
+ - !ruby/object:Gem::Version
212
+ version: 1.2.3
213
+ - !ruby/object:Gem::Dependency
214
+ name: faye-websocket
215
+ requirement: !ruby/object:Gem::Requirement
216
+ requirements:
217
+ - - "~>"
218
+ - !ruby/object:Gem::Version
219
+ version: '0.10'
220
+ - - ">="
221
+ - !ruby/object:Gem::Version
222
+ version: 0.10.9
223
+ type: :runtime
224
+ prerelease: false
225
+ version_requirements: !ruby/object:Gem::Requirement
226
+ requirements:
227
+ - - "~>"
228
+ - !ruby/object:Gem::Version
229
+ version: '0.10'
230
+ - - ">="
231
+ - !ruby/object:Gem::Version
232
+ version: 0.10.9
233
+ - !ruby/object:Gem::Dependency
234
+ name: json
235
+ requirement: !ruby/object:Gem::Requirement
236
+ requirements:
237
+ - - ">="
238
+ - !ruby/object:Gem::Version
239
+ version: 2.1.0
240
+ - - "~>"
241
+ - !ruby/object:Gem::Version
242
+ version: '2.3'
243
+ type: :runtime
244
+ prerelease: false
245
+ version_requirements: !ruby/object:Gem::Requirement
246
+ requirements:
247
+ - - ">="
248
+ - !ruby/object:Gem::Version
249
+ version: 2.1.0
250
+ - - "~>"
251
+ - !ruby/object:Gem::Version
252
+ version: '2.3'
253
+ - !ruby/object:Gem::Dependency
254
+ name: logging
255
+ requirement: !ruby/object:Gem::Requirement
256
+ requirements:
257
+ - - ">="
258
+ - !ruby/object:Gem::Version
259
+ version: 2.2.0
260
+ - - "~>"
261
+ - !ruby/object:Gem::Version
262
+ version: '2.2'
263
+ type: :runtime
264
+ prerelease: false
265
+ version_requirements: !ruby/object:Gem::Requirement
266
+ requirements:
267
+ - - ">="
268
+ - !ruby/object:Gem::Version
269
+ version: 2.2.0
270
+ - - "~>"
271
+ - !ruby/object:Gem::Version
272
+ version: '2.2'
273
+ - !ruby/object:Gem::Dependency
274
+ name: hashie
275
+ requirement: !ruby/object:Gem::Requirement
276
+ requirements:
277
+ - - ">="
278
+ - !ruby/object:Gem::Version
279
+ version: 3.5.7
280
+ - - "~>"
281
+ - !ruby/object:Gem::Version
282
+ version: '4.1'
283
+ type: :runtime
284
+ prerelease: false
285
+ version_requirements: !ruby/object:Gem::Requirement
286
+ requirements:
287
+ - - ">="
288
+ - !ruby/object:Gem::Version
289
+ version: 3.5.7
290
+ - - "~>"
291
+ - !ruby/object:Gem::Version
292
+ version: '4.1'
293
+ - !ruby/object:Gem::Dependency
294
+ name: bitcoin-ruby
295
+ requirement: !ruby/object:Gem::Requirement
296
+ requirements:
297
+ - - "~>"
298
+ - !ruby/object:Gem::Version
299
+ version: '0.0'
300
+ - - ">="
301
+ - !ruby/object:Gem::Version
302
+ version: 0.0.18
303
+ type: :runtime
304
+ prerelease: false
305
+ version_requirements: !ruby/object:Gem::Requirement
306
+ requirements:
307
+ - - "~>"
308
+ - !ruby/object:Gem::Version
309
+ version: '0.0'
310
+ - - ">="
311
+ - !ruby/object:Gem::Version
312
+ version: 0.0.18
313
+ - !ruby/object:Gem::Dependency
314
+ name: ffi
315
+ requirement: !ruby/object:Gem::Requirement
316
+ requirements:
317
+ - - ">="
318
+ - !ruby/object:Gem::Version
319
+ version: 1.9.23
320
+ - - "~>"
321
+ - !ruby/object:Gem::Version
322
+ version: '1.13'
323
+ type: :runtime
324
+ prerelease: false
325
+ version_requirements: !ruby/object:Gem::Requirement
326
+ requirements:
327
+ - - ">="
328
+ - !ruby/object:Gem::Version
329
+ version: 1.9.23
330
+ - - "~>"
331
+ - !ruby/object:Gem::Version
332
+ version: '1.13'
333
+ - !ruby/object:Gem::Dependency
334
+ name: bindata
335
+ requirement: !ruby/object:Gem::Requirement
336
+ requirements:
337
+ - - "~>"
338
+ - !ruby/object:Gem::Version
339
+ version: '2.4'
340
+ - - ">="
341
+ - !ruby/object:Gem::Version
342
+ version: 2.4.4
343
+ type: :runtime
344
+ prerelease: false
345
+ version_requirements: !ruby/object:Gem::Requirement
346
+ requirements:
347
+ - - "~>"
348
+ - !ruby/object:Gem::Version
349
+ version: '2.4'
350
+ - - ">="
351
+ - !ruby/object:Gem::Version
352
+ version: 2.4.4
353
+ - !ruby/object:Gem::Dependency
354
+ name: base58
355
+ requirement: !ruby/object:Gem::Requirement
356
+ requirements:
357
+ - - "~>"
358
+ - !ruby/object:Gem::Version
359
+ version: '0.2'
360
+ - - ">="
361
+ - !ruby/object:Gem::Version
362
+ version: 0.2.3
363
+ type: :runtime
364
+ prerelease: false
365
+ version_requirements: !ruby/object:Gem::Requirement
366
+ requirements:
367
+ - - "~>"
368
+ - !ruby/object:Gem::Version
369
+ version: '0.2'
370
+ - - ">="
371
+ - !ruby/object:Gem::Version
372
+ version: 0.2.3
373
+ description: Client for accessing the Peerplays blockchain.
374
+ email:
375
+ - peerplays-ruby@martin-studio.com
376
+ executables: []
377
+ extensions: []
378
+ extra_rdoc_files: []
379
+ files:
380
+ - ".gitignore"
381
+ - Gemfile
382
+ - Gemfile.lock
383
+ - LICENSE.txt
384
+ - README.md
385
+ - Rakefile
386
+ - lib/peerplays.rb
387
+ - lib/peerplays/api.rb
388
+ - lib/peerplays/asset_api.rb
389
+ - lib/peerplays/base_error.rb
390
+ - lib/peerplays/block_api.rb
391
+ - lib/peerplays/chain_config.rb
392
+ - lib/peerplays/crypto_api.rb
393
+ - lib/peerplays/database_api.rb
394
+ - lib/peerplays/history_api.rb
395
+ - lib/peerplays/network_broadcast_api.rb
396
+ - lib/peerplays/network_node_api.rb
397
+ - lib/peerplays/orders_api.rb
398
+ - lib/peerplays/version.rb
399
+ - lib/peerplays/wallet_api.rb
400
+ - peerplays-ruby.gemspec
401
+ homepage: https://gitlab.com/PBSA/PeerplaysIO/tools-libs/ruby-peerplays
402
+ licenses:
403
+ - MIT
404
+ metadata: {}
405
+ post_install_message:
406
+ rdoc_options: []
407
+ require_paths:
408
+ - lib
409
+ required_ruby_version: !ruby/object:Gem::Requirement
410
+ requirements:
411
+ - - ">="
412
+ - !ruby/object:Gem::Version
413
+ version: '0'
414
+ required_rubygems_version: !ruby/object:Gem::Requirement
415
+ requirements:
416
+ - - ">"
417
+ - !ruby/object:Gem::Version
418
+ version: 1.3.1
419
+ requirements: []
420
+ rubyforge_project:
421
+ rubygems_version: 2.7.10
422
+ signing_key:
423
+ specification_version: 4
424
+ summary: Peerplays Ruby Client
425
+ test_files: []