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
data/lib/sequence/key.rb
CHANGED
@@ -7,30 +7,37 @@ module Sequence
|
|
7
7
|
# Keys are used to sign transactions.
|
8
8
|
class Key < ResponseObject
|
9
9
|
# @!attribute [r] id
|
10
|
-
#
|
10
|
+
# Unique identifier of the key, based on the public key material itself.
|
11
11
|
# @return [String]
|
12
12
|
attrib :id
|
13
13
|
|
14
14
|
# @!attribute [r] alias
|
15
|
-
#
|
15
|
+
# Unique, user-specified identifier of the key.
|
16
16
|
# @return [String]
|
17
17
|
attrib :alias
|
18
18
|
|
19
19
|
class ClientModule < Sequence::ClientModule
|
20
|
-
|
21
20
|
# Creates a key.
|
22
|
-
# @param [Hash] opts
|
23
|
-
#
|
21
|
+
# @param [Hash] opts
|
22
|
+
# Options hash
|
23
|
+
# @option opts [String] alias
|
24
|
+
# Unique, user-specified identifier of the key.
|
24
25
|
# @return [Key]
|
25
26
|
def create(opts = {})
|
27
|
+
validate_inclusion_of!(opts, :alias)
|
26
28
|
Key.new(client.session.request('create-key', opts))
|
27
29
|
end
|
28
30
|
|
29
31
|
# Executes a query, returning an enumerable over individual keys.
|
30
|
-
# @param [Hash] opts
|
31
|
-
#
|
32
|
+
# @param [Hash] opts
|
33
|
+
# Options hash
|
34
|
+
# @option opts [Array<String>] aliases
|
35
|
+
# A list of aliases of keys to retrieve.
|
36
|
+
# @option opts [Integer>] page_size
|
37
|
+
# The number of items to return in the result set.
|
32
38
|
# @return [Query]
|
33
39
|
def query(opts = {})
|
40
|
+
validate_inclusion_of!(opts, :aliases, :page_size, :after)
|
34
41
|
Query.new(client, opts)
|
35
42
|
end
|
36
43
|
end
|
data/lib/sequence/page.rb
CHANGED
data/lib/sequence/query.rb
CHANGED
@@ -4,6 +4,7 @@ module Sequence
|
|
4
4
|
class Query
|
5
5
|
include ::Enumerable
|
6
6
|
|
7
|
+
# @private
|
7
8
|
# @return [Client]
|
8
9
|
attr_reader :client
|
9
10
|
|
@@ -29,23 +30,25 @@ module Sequence
|
|
29
30
|
end
|
30
31
|
end
|
31
32
|
|
32
|
-
|
33
|
-
PageQuery.new(client, query, method(:fetch), method(:translate))
|
34
|
-
end
|
35
|
-
|
36
|
-
# @abstract
|
33
|
+
# @private
|
37
34
|
def fetch(query)
|
38
35
|
raise NotImplementedError
|
39
36
|
end
|
40
37
|
|
41
38
|
# Overwrite to translate API response data to a different Ruby object.
|
42
|
-
# @
|
39
|
+
# @private
|
43
40
|
def translate(response_object)
|
44
41
|
raise NotImplementedError
|
45
42
|
end
|
46
43
|
|
47
44
|
alias_method :all, :to_a
|
48
45
|
|
46
|
+
# @private
|
47
|
+
def pages
|
48
|
+
PageQuery.new(client, query, method(:fetch), method(:translate))
|
49
|
+
end
|
50
|
+
|
51
|
+
# @private
|
49
52
|
class PageQuery
|
50
53
|
include ::Enumerable
|
51
54
|
|
File without changes
|
data/lib/sequence/session.rb
CHANGED
@@ -5,6 +5,7 @@ require_relative './errors'
|
|
5
5
|
require_relative './version'
|
6
6
|
|
7
7
|
module Sequence
|
8
|
+
# @private
|
8
9
|
class Session
|
9
10
|
def initialize(opts)
|
10
11
|
@opts = opts
|
@@ -41,33 +42,24 @@ module Sequence
|
|
41
42
|
end
|
42
43
|
|
43
44
|
def request(path, body = {})
|
44
|
-
request_full_resp(path, body)[:parsed_body]
|
45
|
+
request_full_resp(nil, path, body)[:parsed_body]
|
45
46
|
end
|
46
47
|
|
47
|
-
def request_full_resp(path, body={})
|
48
|
-
refresh!
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
parsed_body = JSON.parse(response.body)
|
61
|
-
rescue JSON::JSONError
|
62
|
-
raise JSONError.new(req_id, response)
|
48
|
+
def request_full_resp(id, path, body = {})
|
49
|
+
refresh!(id)
|
50
|
+
id ||= SecureRandom.hex(10)
|
51
|
+
@ledger_api.post(id, ledger_url(path), body) do |response|
|
52
|
+
# require that the response contains the Chain-Request-ID
|
53
|
+
# http header. Since the Sequence API will always set this
|
54
|
+
# header, its absence indicates that the request stopped at
|
55
|
+
# some intermediary like a proxy on the local network or
|
56
|
+
# a Sequence load balancer. This error will be retried by
|
57
|
+
# HttpWrapper.post.
|
58
|
+
req_id = response['Chain-Request-ID']
|
59
|
+
unless req_id.is_a?(String) && req_id.size > 0
|
60
|
+
raise InvalidRequestIDError.new(response)
|
63
61
|
end
|
64
62
|
end
|
65
|
-
if status / 100 != 2
|
66
|
-
klass = status == 401 ? UnauthorizedError : APIError
|
67
|
-
raise klass.new(parsed_body, response)
|
68
|
-
end
|
69
|
-
|
70
|
-
{parsed_body: parsed_body, response: response}
|
71
63
|
end
|
72
64
|
|
73
65
|
private
|
@@ -77,14 +69,13 @@ module Sequence
|
|
77
69
|
"/#{@team_name}/#{@ledger}/#{path}"
|
78
70
|
end
|
79
71
|
|
80
|
-
def refresh!
|
72
|
+
def refresh!(id)
|
81
73
|
return if @refresh_at > Time.now.to_i
|
82
74
|
|
83
75
|
result = if @refresh_method
|
84
76
|
@refresh_method.call(@macaroon)
|
85
77
|
else
|
86
|
-
|
87
|
-
JSON.parse(r.body)
|
78
|
+
@session_api.post(id, '/sessions/validate', macaroon: @macaroon)[:parsed_body]
|
88
79
|
end
|
89
80
|
|
90
81
|
@team_name = result['team_name']
|
data/lib/sequence/stats.rb
CHANGED
@@ -4,8 +4,8 @@ require_relative './query'
|
|
4
4
|
|
5
5
|
module Sequence
|
6
6
|
# An object describing summary information about a ledger.
|
7
|
+
# @private
|
7
8
|
class Stats < ResponseObject
|
8
|
-
|
9
9
|
# @!attribute [r] asset_count
|
10
10
|
# The number of assets in the ledger.
|
11
11
|
# @return [Integer]
|
@@ -28,6 +28,5 @@ module Sequence
|
|
28
28
|
Stats.new(client.session.request('stats'))
|
29
29
|
end
|
30
30
|
end
|
31
|
-
|
32
31
|
end
|
33
32
|
end
|
data/lib/sequence/transaction.rb
CHANGED
@@ -3,47 +3,50 @@ require 'securerandom'
|
|
3
3
|
require_relative './client_module'
|
4
4
|
require_relative './query'
|
5
5
|
require_relative './response_object'
|
6
|
+
require_relative './validations'
|
6
7
|
|
7
8
|
module Sequence
|
8
9
|
# A transaction is an atomic update to the state of the ledger. Transactions
|
9
10
|
# can issue new asset units, transfer of asset units from one account to
|
10
11
|
# another, and/or the retire asset units from an account.
|
11
12
|
class Transaction < ResponseObject
|
12
|
-
|
13
13
|
# @!attribute [r] id
|
14
|
-
#
|
14
|
+
# A unique ID.
|
15
15
|
# @return [String]
|
16
16
|
attrib :id
|
17
17
|
|
18
18
|
# @!attribute [r] timestamp
|
19
|
-
#
|
19
|
+
# Time of transaction.
|
20
20
|
# @return [Time]
|
21
21
|
attrib :timestamp, rfc3339_time: true
|
22
22
|
|
23
23
|
# @!attribute [r] sequence_number
|
24
|
-
#
|
24
|
+
# Sequence number of the transaction.
|
25
25
|
# @return [Integer]
|
26
26
|
attrib :sequence_number
|
27
27
|
|
28
28
|
# @!attribute [r] reference_data
|
29
|
-
#
|
29
|
+
# User-specified key-value data embedded into the transaction.
|
30
30
|
# @return [Hash]
|
31
31
|
attrib :reference_data
|
32
32
|
|
33
33
|
# @!attribute [r] actions
|
34
|
-
#
|
34
|
+
# List of actions taken by the transaction.
|
35
35
|
# @return [Array<Action>]
|
36
36
|
attrib(:actions) { |raw| raw.map { |v| Action.new(v) } }
|
37
37
|
|
38
38
|
# @!attribute [r] contracts
|
39
|
-
#
|
39
|
+
# List of contracts created by the transaction.
|
40
40
|
# @return [Array<Contract>]
|
41
41
|
attrib(:contracts) { |raw| raw.map { |v| Contract.new(v) } }
|
42
42
|
|
43
43
|
class ClientModule < Sequence::ClientModule
|
44
44
|
# Builds, signs, and submits a transaction.
|
45
|
-
# @param [Builder] builder
|
46
|
-
#
|
45
|
+
# @param [Builder] builder
|
46
|
+
# Builder object with actions defined. If provided, overrides block
|
47
|
+
# parameter.
|
48
|
+
# @yield Block defining transaction actions. A {Builder} object is passed
|
49
|
+
# as the only parameter.
|
47
50
|
# @return Transaction
|
48
51
|
def transact(builder = nil, &block)
|
49
52
|
if builder.nil?
|
@@ -55,18 +58,25 @@ module Sequence
|
|
55
58
|
'/sign-transaction',
|
56
59
|
transaction: tpl,
|
57
60
|
)
|
58
|
-
Transaction.new(
|
59
|
-
'submit-transaction',
|
60
|
-
|
61
|
-
))
|
61
|
+
Transaction.new(
|
62
|
+
client.session.request('submit-transaction', transaction: tpl),
|
63
|
+
)
|
62
64
|
end
|
63
65
|
|
64
66
|
# Executes a query, returning an enumerable over individual transactions.
|
65
67
|
# @param [Hash] opts Options hash
|
66
|
-
# @option opts [String] filter
|
67
|
-
#
|
68
|
-
# @option opts [Integer]
|
69
|
-
#
|
68
|
+
# @option opts [String] filter
|
69
|
+
# A filter expression.
|
70
|
+
# @option opts [Array<String|Integer>] filter_params
|
71
|
+
# A list of values that will be interpolated into the filter expression.
|
72
|
+
# @option opts [Integer] start_time
|
73
|
+
# A Unix timestamp in milliseconds of the earliest transaction timestamp
|
74
|
+
# to include in the query results.
|
75
|
+
# @option opts [Integer] end_time
|
76
|
+
# A Unix timestamp in milliseconds of the most recent transaction
|
77
|
+
# timestamp to include in the query results.
|
78
|
+
# @option opts [Integer>] page_size
|
79
|
+
# The number of items to return in the result set.
|
70
80
|
# @return [Query]
|
71
81
|
def query(opts = {})
|
72
82
|
Query.new(client, opts)
|
@@ -86,72 +96,80 @@ module Sequence
|
|
86
96
|
# An action taken by a transaction.
|
87
97
|
class Action < ResponseObject
|
88
98
|
# @!attribute [r] type
|
89
|
-
#
|
99
|
+
# The type of the action. Possible values are "issue", "transfer" and
|
100
|
+
# "retire".
|
90
101
|
# @return [String]
|
91
102
|
attrib :type
|
92
103
|
|
93
104
|
# @!attribute [r] asset_id
|
94
|
-
#
|
105
|
+
# The id of the action's asset.
|
95
106
|
# @return [String]
|
96
107
|
attrib :asset_id
|
97
108
|
|
98
109
|
# @!attribute [r] asset_alias
|
99
|
-
#
|
110
|
+
# The alias of the action's asset.
|
100
111
|
# @return [String]
|
101
112
|
attrib :asset_alias
|
102
113
|
|
103
114
|
# @!attribute [r] asset_tags
|
104
|
-
#
|
115
|
+
# The tags of the action's asset.
|
105
116
|
# @return [Hash]
|
106
117
|
attrib :asset_tags
|
107
118
|
|
108
119
|
# @!attribute [r] amount
|
109
|
-
#
|
120
|
+
# The number of asset units issues, transferred, or retired.
|
110
121
|
# @return [Integer]
|
111
122
|
attrib :amount
|
112
123
|
|
113
124
|
# @!attribute [r] source_account_id
|
114
|
-
#
|
125
|
+
# The ID of the account serving as the source of asset units. Null for
|
126
|
+
# issuances.
|
115
127
|
# @return [String]
|
116
128
|
attrib :source_account_id
|
117
129
|
|
118
130
|
# @!attribute [r] source_account_alias
|
119
|
-
#
|
131
|
+
# The alias of the account serving as the source of asset units. Null
|
132
|
+
# for issuances.
|
120
133
|
# @return [String]
|
121
134
|
attrib :source_account_alias
|
122
135
|
|
123
136
|
# @!attribute [r] source_account_tags
|
124
|
-
#
|
137
|
+
# The tags of the account serving as the source of asset units. Null for
|
138
|
+
# issuances.
|
125
139
|
# @return [String]
|
126
140
|
attrib :source_account_tags
|
127
141
|
|
128
142
|
# @!attribute [r] destination_account_id
|
129
|
-
#
|
143
|
+
# The ID of the account receiving the asset units. Null for retirements.
|
130
144
|
# @return [String]
|
131
145
|
attrib :destination_account_id
|
132
146
|
|
133
147
|
# @!attribute [r] destination_account_alias
|
134
|
-
#
|
148
|
+
# The alias of the account receiving the asset units. Null for
|
149
|
+
# retirements.
|
135
150
|
# @return [String]
|
136
151
|
attrib :destination_account_alias
|
137
152
|
|
138
153
|
# @!attribute [r] destination_account_tags
|
139
|
-
#
|
154
|
+
# The tags of the account receiving the asset units. Null for
|
155
|
+
# retirements.
|
140
156
|
# @return [String]
|
141
157
|
attrib :destination_account_tags
|
142
158
|
|
143
159
|
# @!attribute [r] reference_data
|
144
|
-
#
|
160
|
+
# User-specified, key-value data embedded into the action.
|
145
161
|
# @return [Hash]
|
146
162
|
attrib :reference_data
|
147
163
|
end
|
148
164
|
|
149
165
|
# A configuration object for creating and submitting transactions.
|
150
166
|
class Builder
|
167
|
+
include Sequence::Validations
|
168
|
+
|
151
169
|
attr_accessor :reference_data
|
152
170
|
|
153
171
|
def initialize(&block)
|
154
|
-
|
172
|
+
yield(self) if block
|
155
173
|
end
|
156
174
|
|
157
175
|
def actions
|
@@ -170,78 +188,165 @@ module Sequence
|
|
170
188
|
end
|
171
189
|
|
172
190
|
# Adds an action to a transaction builder.
|
173
|
-
# @param [Hash]
|
191
|
+
# @param [Hash] opts
|
192
|
+
# Action parameters.
|
174
193
|
# @return [Builder]
|
175
|
-
def add_action(
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
actions <<
|
194
|
+
def add_action(opts = {})
|
195
|
+
if opts[:amount].nil?
|
196
|
+
raise ArgumentError, ':amount must be provided'
|
197
|
+
end
|
198
|
+
actions << opts
|
180
199
|
self
|
181
200
|
end
|
182
201
|
|
183
202
|
# Issues new units of an asset to a destination account.
|
184
203
|
#
|
185
|
-
# @param [Hash]
|
186
|
-
#
|
187
|
-
#
|
188
|
-
#
|
189
|
-
#
|
190
|
-
#
|
191
|
-
#
|
192
|
-
#
|
193
|
-
#
|
194
|
-
#
|
195
|
-
# @option
|
204
|
+
# @param [Hash] opts
|
205
|
+
# Options hash
|
206
|
+
# @option opts [Integer] :amount
|
207
|
+
# Amount of the asset to be issued.
|
208
|
+
# @option opts [String] :asset_id
|
209
|
+
# ID of the asset to be issued. You must specify either an ID or an
|
210
|
+
# alias.
|
211
|
+
# @option opts [String] :asset_alias
|
212
|
+
# Asset alias of the asset to be issued. You must specify either an ID
|
213
|
+
# or an alias.
|
214
|
+
# @option opts [String] :destination_account_id
|
215
|
+
# ID of the account receiving the asset units. You must specify a
|
216
|
+
# destination account ID or alias.
|
217
|
+
# @option opts [String] :destination_account_alias
|
218
|
+
# Alias of the account receiving the asset units. You must specify a
|
219
|
+
# destination account ID or alias.
|
220
|
+
# @option opts [Hash] :reference_data
|
221
|
+
# Reference data for the action.
|
196
222
|
# @return [Builder]
|
197
|
-
def issue(
|
198
|
-
|
223
|
+
def issue(opts = {})
|
224
|
+
validate_inclusion_of!(
|
225
|
+
opts,
|
226
|
+
:amount,
|
227
|
+
:asset_id,
|
228
|
+
:asset_alias,
|
229
|
+
:destination_account_id,
|
230
|
+
:destination_account_alias,
|
231
|
+
:reference_data,
|
232
|
+
)
|
233
|
+
validate_either!(opts, :asset_id, :asset_alias)
|
234
|
+
validate_either!(
|
235
|
+
opts,
|
236
|
+
:destination_account_id,
|
237
|
+
:destination_account_alias,
|
238
|
+
)
|
239
|
+
add_action(opts.merge(type: :issue))
|
199
240
|
end
|
200
241
|
|
201
|
-
# Moves units of an asset from a source (an account or contract) to a
|
242
|
+
# Moves units of an asset from a source (an account or contract) to a
|
243
|
+
# destination account.
|
202
244
|
#
|
203
|
-
# @param [Hash]
|
204
|
-
#
|
205
|
-
#
|
206
|
-
#
|
207
|
-
#
|
208
|
-
#
|
209
|
-
#
|
210
|
-
# @option
|
211
|
-
#
|
212
|
-
#
|
213
|
-
#
|
214
|
-
#
|
215
|
-
#
|
216
|
-
#
|
217
|
-
#
|
218
|
-
#
|
219
|
-
# @option
|
220
|
-
#
|
245
|
+
# @param [Hash] opts
|
246
|
+
# Options hash
|
247
|
+
# @option opts [Integer] :amount
|
248
|
+
# Amount of the asset to be transferred.
|
249
|
+
# @option opts [String] :asset_id
|
250
|
+
# ID of the asset to be transferred. You must specify either an ID or an
|
251
|
+
# alias.
|
252
|
+
# @option opts [String] :asset_alias
|
253
|
+
# Asset alias of the asset to be transferred. You must specify either an
|
254
|
+
# ID or an alias.
|
255
|
+
# @option opts [String] :source_account_id
|
256
|
+
# ID of the account serving as the source of asset units. You must
|
257
|
+
# specify a source account ID, account alias, or contract ID.
|
258
|
+
# @option opts [String] :source_account_alias
|
259
|
+
# Alias of the account serving as the source of asset units You must
|
260
|
+
# specify a source account ID, account alias, or contract ID.
|
261
|
+
# @option opts [String] :source_contract_id
|
262
|
+
# ID of the contract serving as the source of asset units. You must
|
263
|
+
# specify a source account ID, account alias, or contract ID.
|
264
|
+
# @option opts [String] :destination_account_id
|
265
|
+
# ID of the account receiving the asset units. You must specify a
|
266
|
+
# destination account ID or alias.
|
267
|
+
# @option opts [String] :destination_account_alias
|
268
|
+
# Alias of the account receiving the asset units. You must specify a
|
269
|
+
# destination account ID or alias.
|
270
|
+
# @option opts [Hash] :reference_data
|
271
|
+
# reference data for the action.
|
272
|
+
# @option opts [Hash] :change_reference_data
|
273
|
+
# reference data for the change contract.
|
221
274
|
# @return [Builder]
|
222
|
-
def transfer(
|
223
|
-
|
275
|
+
def transfer(opts = {})
|
276
|
+
validate_inclusion_of!(
|
277
|
+
opts,
|
278
|
+
:amount,
|
279
|
+
:asset_id,
|
280
|
+
:asset_alias,
|
281
|
+
:source_account_id,
|
282
|
+
:source_account_alias,
|
283
|
+
:source_contract_id,
|
284
|
+
:destination_account_id,
|
285
|
+
:destination_account_alias,
|
286
|
+
:reference_data,
|
287
|
+
:change_reference_data,
|
288
|
+
)
|
289
|
+
validate_either!(opts, :asset_id, :asset_alias)
|
290
|
+
validate_either!(
|
291
|
+
opts,
|
292
|
+
:source_account_id,
|
293
|
+
:source_account_alias,
|
294
|
+
:source_contract_id,
|
295
|
+
)
|
296
|
+
validate_either!(
|
297
|
+
opts,
|
298
|
+
:destination_account_id,
|
299
|
+
:destination_account_alias,
|
300
|
+
)
|
301
|
+
add_action(opts.merge(type: :transfer))
|
224
302
|
end
|
225
303
|
|
226
|
-
# Takes units of an asset from a source (an account or contract) and
|
304
|
+
# Takes units of an asset from a source (an account or contract) and
|
305
|
+
# retires them.
|
227
306
|
#
|
228
|
-
# @param [Hash]
|
229
|
-
# @option
|
230
|
-
#
|
231
|
-
# @option
|
232
|
-
#
|
233
|
-
#
|
234
|
-
#
|
235
|
-
#
|
236
|
-
#
|
237
|
-
# @option
|
238
|
-
#
|
239
|
-
#
|
240
|
-
# @option
|
241
|
-
#
|
307
|
+
# @param [Hash] opts Options hash
|
308
|
+
# @option opts [Integer] :amount
|
309
|
+
# Amount of the asset to be retired.
|
310
|
+
# @option opts [String] :asset_id
|
311
|
+
# ID of the asset to be retired. You must specify either an ID or an
|
312
|
+
# alias.
|
313
|
+
# @option opts [String] :asset_alias
|
314
|
+
# Asset alias of the asset to be retired. You must specify either an ID
|
315
|
+
# or an alias.
|
316
|
+
# @option opts [String] :source_account_id
|
317
|
+
# ID of the account serving as the source of asset units. You must
|
318
|
+
# specify a source account ID, account alias, or contract ID.
|
319
|
+
# @option opts [String] :source_account_alias
|
320
|
+
# Alias of the account serving as the source of asset units You must
|
321
|
+
# specify a source account ID, account alias, or contract ID.
|
322
|
+
# @option opts [String] :source_contract_id
|
323
|
+
# ID of the contract serving as the source of asset units. You must
|
324
|
+
# specify a source account ID, account alias, or contract ID.
|
325
|
+
# @option opts [Hash] :reference_data
|
326
|
+
# Reference data for the action.
|
327
|
+
# @option opts [Hash] :change_reference_data
|
328
|
+
# Reference data for the change contract.
|
242
329
|
# @return [Builder]
|
243
|
-
def retire(
|
244
|
-
|
330
|
+
def retire(opts = {})
|
331
|
+
validate_inclusion_of!(
|
332
|
+
opts,
|
333
|
+
:amount,
|
334
|
+
:asset_id,
|
335
|
+
:asset_alias,
|
336
|
+
:source_account_id,
|
337
|
+
:source_account_alias,
|
338
|
+
:source_contract_id,
|
339
|
+
:reference_data,
|
340
|
+
:change_reference_data,
|
341
|
+
)
|
342
|
+
validate_either!(opts, :asset_id, :asset_alias)
|
343
|
+
validate_either!(
|
344
|
+
opts,
|
345
|
+
:source_account_id,
|
346
|
+
:source_account_alias,
|
347
|
+
:source_contract_id,
|
348
|
+
)
|
349
|
+
add_action(opts.merge(type: :retire))
|
245
350
|
end
|
246
351
|
end
|
247
352
|
end
|