peerplays-ruby 1.0.0.pre.1

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,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: []