sequence-sdk 1.0.3 → 1.0.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.
- checksums.yaml +4 -4
- data/README.md +11 -7
- data/lib/sequence.rb +0 -0
- data/lib/sequence/account.rb +54 -22
- data/lib/sequence/action.rb +158 -0
- data/lib/sequence/asset.rb +52 -22
- data/lib/sequence/balance.rb +20 -9
- data/lib/sequence/client.rb +19 -9
- data/lib/sequence/client_module.rb +4 -2
- data/lib/sequence/contract.rb +30 -15
- data/lib/sequence/dev_utils.rb +1 -1
- data/lib/sequence/errors.rb +13 -13
- data/lib/sequence/http_wrapper.rb +57 -23
- data/lib/sequence/key.rb +14 -7
- data/lib/sequence/page.rb +1 -0
- data/lib/sequence/query.rb +9 -6
- data/lib/sequence/response_object.rb +0 -0
- data/lib/sequence/session.rb +17 -26
- data/lib/sequence/stats.rb +1 -2
- data/lib/sequence/transaction.rb +192 -87
- data/lib/sequence/validations.rb +30 -0
- data/lib/sequence/version.rb +1 -1
- metadata +7 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: da13e33f0caa12bd428d4a97a545e42603369f68
|
4
|
+
data.tar.gz: b660490b8b64779fa01eb22ddfbb94a609946955
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 184219f173c60a722b8f8356801f24897c17dc420c114fbf7609285135ae7dbc211bbc1a23fa185d5a97bb97436e401fdd74751f2eca88eff1e910e14117bab2
|
7
|
+
data.tar.gz: c7309542abbea40fbbd42a29072a1751b61693f06dd133ea4778ff85638fcc62b177916ded02a84b46c936d0b4c7d197a5ed151dc1ddb2da16dec3372d6599ab
|
data/README.md
CHANGED
@@ -4,14 +4,17 @@
|
|
4
4
|
|
5
5
|
### Get the gem
|
6
6
|
|
7
|
-
The Ruby SDK is available
|
7
|
+
The Ruby SDK is available
|
8
|
+
[via Rubygems](https://rubygems.org/gems/sequence-sdk).
|
8
9
|
|
9
|
-
Ruby 2.
|
10
|
+
Ruby >= 2.2 is required. We recommend upgrading to Ruby >= 2.3. See
|
11
|
+
[Ruby Maintenance Branches](https://www.ruby-lang.org/en/downloads/branches/)
|
12
|
+
for the language's schedule for security and bug fixes.
|
10
13
|
|
11
|
-
|
14
|
+
Add the following to your `Gemfile`:
|
12
15
|
|
13
16
|
```
|
14
|
-
gem 'sequence-sdk'
|
17
|
+
gem 'sequence-sdk'
|
15
18
|
```
|
16
19
|
|
17
20
|
### In your code
|
@@ -20,11 +23,12 @@ gem 'sequence-sdk', '~> 1.0.0'
|
|
20
23
|
require 'sequence'
|
21
24
|
|
22
25
|
ledger = Sequence::Client.new(
|
23
|
-
|
24
|
-
|
26
|
+
ledger: 'ledger',
|
27
|
+
credential: '...'
|
25
28
|
)
|
26
29
|
```
|
27
30
|
|
28
31
|
### Documentation
|
29
32
|
|
30
|
-
Comprehensive instructions and examples are available in the
|
33
|
+
Comprehensive instructions and examples are available in the
|
34
|
+
[developer documentation](https://dashboard.seq.com/docs).
|
data/lib/sequence.rb
CHANGED
File without changes
|
data/lib/sequence/account.rb
CHANGED
@@ -6,29 +6,30 @@ require_relative './response_object'
|
|
6
6
|
module Sequence
|
7
7
|
# A container for asset balances on a ledger.
|
8
8
|
class Account < ResponseObject
|
9
|
-
|
10
9
|
# @!attribute [r] id
|
11
|
-
#
|
10
|
+
# Unique, auto-generated identifier.
|
12
11
|
# @return [String]
|
13
12
|
attrib :id
|
14
13
|
|
15
14
|
# @!attribute [r] alias
|
16
|
-
#
|
15
|
+
# Unique, user-specified identifier.
|
17
16
|
# @return [String]
|
18
17
|
attrib :alias
|
19
18
|
|
20
19
|
# @!attribute [r] keys
|
21
|
-
#
|
20
|
+
# The set of keys used for signing transactions that spend from the
|
21
|
+
# account.
|
22
22
|
# @return [Array<Key>]
|
23
23
|
attrib(:keys) { |raw| raw.map { |k| Key.new(k) } }
|
24
24
|
|
25
25
|
# @!attribute [r] quorum
|
26
|
-
#
|
26
|
+
# The number of keys required to sign transactions that spend from the
|
27
|
+
# account.
|
27
28
|
# @return [Integer]
|
28
29
|
attrib :quorum
|
29
30
|
|
30
31
|
# @!attribute [r] tags
|
31
|
-
#
|
32
|
+
# User-specified key-value data describing the account.
|
32
33
|
# @return [Hash]
|
33
34
|
attrib :tags
|
34
35
|
|
@@ -39,33 +40,65 @@ module Sequence
|
|
39
40
|
|
40
41
|
class ClientModule < Sequence::ClientModule
|
41
42
|
# Creates a new account in the ledger.
|
42
|
-
# @param [Hash] opts
|
43
|
-
#
|
44
|
-
# @option opts [
|
45
|
-
#
|
46
|
-
# @option opts [Hash]
|
43
|
+
# @param [Hash] opts
|
44
|
+
# Options hash
|
45
|
+
# @option opts [String] alias
|
46
|
+
# Unique, user-specified identifier.
|
47
|
+
# @option opts [Array<Hash>, Array<Sequence::Key>] keys
|
48
|
+
# The keys used for signing transactions that spend from the account. A
|
49
|
+
# key can be either a key object, or a hash containing either an `id` or
|
50
|
+
# `alias` field.
|
51
|
+
# @option opts [Integer] quorum
|
52
|
+
# The number of keys required to sign transactions that spend from the
|
53
|
+
# account. Defaults to the number of keys provided.
|
54
|
+
# @option opts [Hash] tags
|
55
|
+
# User-specified key-value data describing the account.
|
47
56
|
# @return [Account]
|
48
|
-
def create(opts)
|
49
|
-
opts
|
57
|
+
def create(opts = {})
|
58
|
+
validate_inclusion_of!(opts, :alias, :keys, :quorum, :tags)
|
59
|
+
validate_required!(opts, :keys)
|
50
60
|
Account.new(client.session.request('create-account', opts))
|
51
61
|
end
|
52
62
|
|
53
63
|
# Updates an account's tags.
|
54
|
-
# @param [Hash] opts
|
55
|
-
#
|
56
|
-
# @option opts [String]
|
57
|
-
#
|
64
|
+
# @param [Hash] opts
|
65
|
+
# Options hash
|
66
|
+
# @option opts [String] id
|
67
|
+
# The ID of the account. Either an ID or alias should be provided, but
|
68
|
+
# not both.
|
69
|
+
# @option opts [String] alias
|
70
|
+
# The alias of the account. Either an ID or alias should be provided,
|
71
|
+
# but not both.
|
72
|
+
# @option opts [Hash] tags
|
73
|
+
# A new set of tags, which will replace the existing tags.
|
58
74
|
# @return [void]
|
59
|
-
def update_tags(opts)
|
75
|
+
def update_tags(opts = {})
|
76
|
+
validate_inclusion_of!(opts, :id, :alias, :tags)
|
77
|
+
if (opts[:id].nil? || opts[:id].empty?) &&
|
78
|
+
(opts[:alias].nil? || opts[:alias].empty?)
|
79
|
+
raise ArgumentError, ':id or :alias (but not both) must be provided'
|
80
|
+
end
|
60
81
|
client.session.request('update-account-tags', opts)
|
61
82
|
end
|
62
83
|
|
63
84
|
# Executes a query, returning an enumerable over individual accounts.
|
64
|
-
# @param [Hash] opts
|
65
|
-
#
|
66
|
-
# @option opts [
|
85
|
+
# @param [Hash] opts
|
86
|
+
# Options hash
|
87
|
+
# @option opts [String] filter
|
88
|
+
# A filter expression.
|
89
|
+
# @option opts [Array<String|Integer>] filter_params
|
90
|
+
# A list of values that will be interpolated into the filter expression.
|
91
|
+
# @option opts [Integer>] page_size
|
92
|
+
# The number of items to return in the result set.
|
67
93
|
# @return [Query]
|
68
94
|
def query(opts = {})
|
95
|
+
validate_inclusion_of!(
|
96
|
+
opts,
|
97
|
+
:filter,
|
98
|
+
:filter_params,
|
99
|
+
:page_size,
|
100
|
+
:after,
|
101
|
+
)
|
69
102
|
Query.new(client, opts)
|
70
103
|
end
|
71
104
|
end
|
@@ -79,6 +112,5 @@ module Sequence
|
|
79
112
|
Account.new(raw)
|
80
113
|
end
|
81
114
|
end
|
82
|
-
|
83
115
|
end
|
84
116
|
end
|
@@ -0,0 +1,158 @@
|
|
1
|
+
require_relative './client_module'
|
2
|
+
require_relative './response_object'
|
3
|
+
require_relative './query'
|
4
|
+
|
5
|
+
module Sequence
|
6
|
+
# Each transaction contains one or more actions. Action queries are designed
|
7
|
+
# to provide insights into those actions. There are two types of queries you
|
8
|
+
# can run against them; one is "list", one is "sum". List query simply returns
|
9
|
+
# a list of Action objects that match the filter; Sum query sums over the
|
10
|
+
# amount fields based on the filter and the group_by param and return
|
11
|
+
# ActionSum objects. Different from other regular API objects, the amount
|
12
|
+
# field in ActionSum represents the summation of the amount fields of those
|
13
|
+
# matching actions, and all other fields represent the parameters by which to
|
14
|
+
# group actions.
|
15
|
+
class Action < ResponseObject
|
16
|
+
# @!attribute [r] amount
|
17
|
+
# Summation of action amounts.
|
18
|
+
# @return [Integer]
|
19
|
+
attrib :amount
|
20
|
+
|
21
|
+
# @!attribute [r] type
|
22
|
+
# The type of the action. Currently, there are three options: "issue",
|
23
|
+
# "transfer", "retire".
|
24
|
+
# @return [String]
|
25
|
+
attrib :type
|
26
|
+
|
27
|
+
# @!attribute [r] id
|
28
|
+
# A unique ID.
|
29
|
+
# @return [String]
|
30
|
+
attrib :id
|
31
|
+
|
32
|
+
# @!attribute [r] transaction_id
|
33
|
+
# The ID of the transaction in which the action appears.
|
34
|
+
# @return [String]
|
35
|
+
attrib :transaction_id
|
36
|
+
|
37
|
+
# @!attribute [r] timestamp
|
38
|
+
# Time of the action.
|
39
|
+
# @return [Time]
|
40
|
+
attrib :timestamp, rfc3339_time: true
|
41
|
+
|
42
|
+
# @!attribute [r] asset_id
|
43
|
+
# The ID of the asset held by the action.
|
44
|
+
# @return [String]
|
45
|
+
attrib :asset_id
|
46
|
+
|
47
|
+
# @!attribute [r] asset_alias
|
48
|
+
# The alias of the asset held by the action.
|
49
|
+
# @return [String]
|
50
|
+
attrib :asset_alias
|
51
|
+
|
52
|
+
# @!attribute [r] asset_tags
|
53
|
+
# The tags of the asset held by the action.
|
54
|
+
# @return [Hash]
|
55
|
+
attrib :asset_tags
|
56
|
+
|
57
|
+
# @!attribute [r] source_account_id
|
58
|
+
# The ID of the source account executing the action.
|
59
|
+
# @return [String]
|
60
|
+
attrib :source_account_id
|
61
|
+
|
62
|
+
# @!attribute [r] source_account_alias
|
63
|
+
# The alias of the source account executing the action.
|
64
|
+
# @return [String]
|
65
|
+
attrib :source_account_alias
|
66
|
+
|
67
|
+
# @!attribute [r] source_account_tags
|
68
|
+
# The tags of the source account executing the action.
|
69
|
+
# @return [Hash]
|
70
|
+
attrib :source_account_tags
|
71
|
+
|
72
|
+
# @!attribute [r] destination_account_id
|
73
|
+
# The ID of the destination account affected by the action.
|
74
|
+
# @return [String]
|
75
|
+
attrib :destination_account_id
|
76
|
+
|
77
|
+
# @!attribute [r] destination_account_alias
|
78
|
+
# The alias of the destination account affected by the action.
|
79
|
+
# @return [String]
|
80
|
+
attrib :destination_account_alias
|
81
|
+
|
82
|
+
# @!attribute [r] destination_account_tags
|
83
|
+
# The tags of the destination account affected by the action.
|
84
|
+
# @return [Hash]
|
85
|
+
attrib :destination_account_tags
|
86
|
+
|
87
|
+
# @!attribute [r] reference_data
|
88
|
+
# User-specified key-value data embedded in the action.
|
89
|
+
# @return [Hash]
|
90
|
+
attrib :reference_data
|
91
|
+
|
92
|
+
class ClientModule < Sequence::ClientModule
|
93
|
+
# Executes a query, returning an enumerable over individual actions.
|
94
|
+
# @param [Hash] opts
|
95
|
+
# Options hash
|
96
|
+
# @option opts [String] filter
|
97
|
+
# A filter expression.
|
98
|
+
# @option opts [Array<String|Integer>] filter_params
|
99
|
+
# A list of values that will be interpolated into the filter expression.
|
100
|
+
# @option opts [Integer>] page_size
|
101
|
+
# The number of items to return in the result set.
|
102
|
+
# @return [Query]
|
103
|
+
def list(opts = {})
|
104
|
+
validate_inclusion_of!(
|
105
|
+
opts,
|
106
|
+
:filter,
|
107
|
+
:filter_params,
|
108
|
+
:page_size,
|
109
|
+
:after,
|
110
|
+
)
|
111
|
+
ListQuery.new(client, opts)
|
112
|
+
end
|
113
|
+
|
114
|
+
# Executes a query, returning an enumerable over individual actionsums.
|
115
|
+
# @param [Hash] opts
|
116
|
+
# Options hash
|
117
|
+
# @option opts [String] filter
|
118
|
+
# A filter expression.
|
119
|
+
# @option opts [Array<String|Integer>] filter_params
|
120
|
+
# A list of values that will be interpolated into the filter expression.
|
121
|
+
# @option opts [Array<String>] group_by
|
122
|
+
# A list of fields along which action values will be summed.
|
123
|
+
# @option opts [Integer>] page_size
|
124
|
+
# The number of items to return in the result set.
|
125
|
+
# @return [Query]
|
126
|
+
def sum(opts = {})
|
127
|
+
validate_inclusion_of!(
|
128
|
+
opts,
|
129
|
+
:filter,
|
130
|
+
:filter_params,
|
131
|
+
:group_by,
|
132
|
+
:page_size,
|
133
|
+
)
|
134
|
+
SumQuery.new(client, opts)
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
138
|
+
class ListQuery < Sequence::Query
|
139
|
+
def fetch(query)
|
140
|
+
client.session.request('list-actions', query)
|
141
|
+
end
|
142
|
+
|
143
|
+
def translate(raw)
|
144
|
+
Action.new(raw)
|
145
|
+
end
|
146
|
+
end
|
147
|
+
|
148
|
+
class SumQuery < Sequence::Query
|
149
|
+
def fetch(query)
|
150
|
+
client.session.request('sum-actions', query)
|
151
|
+
end
|
152
|
+
|
153
|
+
def translate(raw)
|
154
|
+
Action.new(raw)
|
155
|
+
end
|
156
|
+
end
|
157
|
+
end
|
158
|
+
end
|
data/lib/sequence/asset.rb
CHANGED
@@ -8,29 +8,28 @@ require_relative './response_object'
|
|
8
8
|
module Sequence
|
9
9
|
# A type or class of value that can be tracked on a ledger.
|
10
10
|
class Asset < ResponseObject
|
11
|
-
|
12
11
|
# @!attribute [r] id
|
13
|
-
#
|
12
|
+
# Unique, auto-generated identifier.
|
14
13
|
# @return [String]
|
15
14
|
attrib :id
|
16
15
|
|
17
16
|
# @!attribute [r] alias
|
18
|
-
#
|
17
|
+
# Unique, user-specified identifier.
|
19
18
|
# @return [String]
|
20
19
|
attrib :alias
|
21
20
|
|
22
21
|
# @!attribute [r] keys
|
23
|
-
#
|
22
|
+
# The set of keys used to sign transactions that issue the asset.
|
24
23
|
# @return [Array<Key>]
|
25
24
|
attrib(:keys) { |raw| raw.map { |k| Key.new(k) } }
|
26
25
|
|
27
26
|
# @!attribute [r] quorum
|
28
|
-
#
|
27
|
+
# The number of keys required to sign transactions that issue the asset.
|
29
28
|
# @return [Integer]
|
30
29
|
attrib :quorum
|
31
30
|
|
32
31
|
# @!attribute [r] tags
|
33
|
-
#
|
32
|
+
# User-specified key-value data describing the asset.
|
34
33
|
# @return [Hash]
|
35
34
|
attrib :tags
|
36
35
|
|
@@ -41,33 +40,65 @@ module Sequence
|
|
41
40
|
|
42
41
|
class ClientModule < Sequence::ClientModule
|
43
42
|
# Creates a new asset in the ledger.
|
44
|
-
# @param [Hash] opts
|
45
|
-
#
|
46
|
-
# @option opts [
|
47
|
-
#
|
48
|
-
# @option opts [Hash]
|
43
|
+
# @param [Hash] opts
|
44
|
+
# Options hash
|
45
|
+
# @option opts [String] alias
|
46
|
+
# Unique, user-specified identifier.
|
47
|
+
# @option opts [Array<Hash>, Array<Sequence::Key>] keys
|
48
|
+
# The set of keys used for signing transactions that issue the asset. A
|
49
|
+
# key can be either a key object, or a hash containing either an `id` or
|
50
|
+
# `alias` field.
|
51
|
+
# @option opts [Integer] quorum
|
52
|
+
# The number of keys required to sign transactions that issue the asset.
|
53
|
+
# Defaults to the number of keys provided.
|
54
|
+
# @option opts [Hash] tags
|
55
|
+
# User-specified key-value data describing the asset.
|
49
56
|
# @return [Asset]
|
50
|
-
def create(opts)
|
51
|
-
opts
|
57
|
+
def create(opts = {})
|
58
|
+
validate_inclusion_of!(opts, :alias, :keys, :quorum, :tags)
|
59
|
+
validate_required!(opts, :keys)
|
52
60
|
Asset.new(client.session.request('create-asset', opts))
|
53
61
|
end
|
54
62
|
|
55
63
|
# Updates an asset's tags.
|
56
|
-
# @param [Hash] opts
|
57
|
-
#
|
58
|
-
# @option opts [String]
|
59
|
-
#
|
64
|
+
# @param [Hash] opts
|
65
|
+
# Options hash
|
66
|
+
# @option opts [String] id
|
67
|
+
# The ID of the asset. Either an ID or alias should be provided, but not
|
68
|
+
# both.
|
69
|
+
# @option opts [String] alias
|
70
|
+
# The alias of the asset. Either an ID or alias should be provided, but
|
71
|
+
# not both.
|
72
|
+
# @option opts [Hash] tags
|
73
|
+
# A new set of tags, which will replace the existing tags.
|
60
74
|
# @return [void]
|
61
|
-
def update_tags(opts)
|
75
|
+
def update_tags(opts = {})
|
76
|
+
validate_inclusion_of!(opts, :id, :alias, :tags)
|
77
|
+
if (opts[:id].nil? || opts[:id].empty?) &&
|
78
|
+
(opts[:alias].nil? || opts[:alias].empty?)
|
79
|
+
raise ArgumentError, ':id or :alias (but not both) must be provided'
|
80
|
+
end
|
62
81
|
client.session.request('update-asset-tags', opts)
|
63
82
|
end
|
64
83
|
|
65
84
|
# Executes a query, returning an enumerable over individual assets.
|
66
|
-
# @param [Hash] opts
|
67
|
-
#
|
68
|
-
# @option opts [
|
85
|
+
# @param [Hash] opts
|
86
|
+
# Options hash
|
87
|
+
# @option opts [String] filter
|
88
|
+
# A filter expression.
|
89
|
+
# @option opts [Array<String|Integer>] filter_params
|
90
|
+
# A list of values that will be interpolated into the filter expression.
|
91
|
+
# @option opts [Integer>] page_size
|
92
|
+
# The number of items to return in the result set.
|
69
93
|
# @return [Query]
|
70
94
|
def query(opts = {})
|
95
|
+
validate_inclusion_of!(
|
96
|
+
opts,
|
97
|
+
:filter,
|
98
|
+
:filter_params,
|
99
|
+
:page_size,
|
100
|
+
:after,
|
101
|
+
)
|
71
102
|
Query.new(client, opts)
|
72
103
|
end
|
73
104
|
end
|
@@ -81,6 +112,5 @@ module Sequence
|
|
81
112
|
Asset.new(raw)
|
82
113
|
end
|
83
114
|
end
|
84
|
-
|
85
115
|
end
|
86
116
|
end
|