sigma_rb 0.1.3 → 0.2.0

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.
@@ -3,6 +3,7 @@ require_relative './util.rb'
3
3
  require 'ffi-compiler/loader'
4
4
 
5
5
  module Sigma
6
+ # Defines the contract (script) that will be guarding box contents
6
7
  class Contract
7
8
  extend FFI::Library
8
9
  ffi_lib FFI::Compiler::Loader.find('csigma')
@@ -16,10 +17,17 @@ module Sigma
16
17
 
17
18
  attr_accessor :pointer
18
19
 
20
+ # Takes ownership of an existing Contract Pointer.
21
+ # @note A user of sigma_rb generally does not need to call this function
22
+ # @param pointer [FFI::MemoryPointer]
23
+ # @return [Contract]
19
24
  def self.with_raw_pointer(contract_pointer)
20
25
  init(contract_pointer)
21
26
  end
22
27
 
28
+ # Create a new contract from an ErgoTree
29
+ # @param ergo_tree [ErgoTree]
30
+ # @return [Contract]
23
31
  def self.from_ergo_tree(ergo_tree)
24
32
  pointer = FFI::MemoryPointer.new(:pointer)
25
33
  ergo_lib_contract_new(ergo_tree.pointer, pointer)
@@ -27,14 +35,20 @@ module Sigma
27
35
  init(pointer)
28
36
  end
29
37
 
30
- def self.compile_from_string(str)
38
+ # Compiles a contract from ErgoScript source code
39
+ # @param source [String]
40
+ # @return [Contract]
41
+ def self.compile_from_string(source)
31
42
  pointer = FFI::MemoryPointer.new(:pointer)
32
- error = ergo_lib_contract_compile(str, pointer)
43
+ error = ergo_lib_contract_compile(source, pointer)
33
44
  Util.check_error!(error)
34
45
 
35
46
  init(pointer)
36
47
  end
37
48
 
49
+ # Create new contract that allow spending of the guarded box by a given recipient (Address)
50
+ # @param address [Address]
51
+ # @return [Contract]
38
52
  def self.pay_to_address(address)
39
53
  pointer = FFI::MemoryPointer.new(:pointer)
40
54
  error = ergo_lib_contract_pay_to_address(address.pointer, pointer)
@@ -43,12 +57,17 @@ module Sigma
43
57
  init(pointer)
44
58
  end
45
59
 
60
+ # Get the ErgoTree of the contract
61
+ # @return [ErgoTree]
46
62
  def get_ergo_tree
47
63
  pointer = FFI::MemoryPointer.new(:pointer)
48
64
  ergo_lib_contract_ergo_tree(self.pointer, pointer)
49
65
  Sigma::ErgoTree.with_raw_pointer(pointer)
50
66
  end
51
67
 
68
+ # Equality check for two Contracts
69
+ # @param contract_two [Contract]
70
+ # @return [bool]
52
71
  def ==(contract_two)
53
72
  ergo_lib_contract_eq(self.pointer, contract_two.pointer)
54
73
  end
@@ -3,6 +3,7 @@ require_relative './util.rb'
3
3
  require 'ffi-compiler/loader'
4
4
 
5
5
  module Sigma
6
+ # Inputs, that are used to enrich script context, but won't be spent by the transaction
6
7
  class DataInput
7
8
  extend FFI::Library
8
9
  ffi_lib FFI::Compiler::Loader.find('csigma')
@@ -12,16 +13,25 @@ module Sigma
12
13
  attach_function :ergo_lib_data_input_delete, [:pointer], :void
13
14
  attr_accessor :pointer
14
15
 
16
+ # Parse BoxId and create DataInput
17
+ # @param box_id [BoxId]
18
+ # @return [DataInput]
15
19
  def self.with_box_id(box_id)
16
20
  pointer = FFI::MemoryPointer.new(:pointer)
17
21
  ergo_lib_data_input_new(box_id.pointer, pointer)
18
22
  init(pointer)
19
23
  end
20
24
 
25
+ # Takes ownership of an existing DataInput Pointer.
26
+ # @note A user of sigma_rb generally does not need to call this function
27
+ # @param pointer [FFI::MemoryPointer]
28
+ # @return [DataInput]
21
29
  def self.with_raw_pointer(pointer)
22
30
  init(pointer)
23
31
  end
24
32
 
33
+ # Get BoxId
34
+ # @return [BoxId]
25
35
  def get_box_id
26
36
  pointer = FFI::MemoryPointer.new(:pointer)
27
37
  ergo_lib_data_input_new(self.pointer, pointer)
@@ -43,6 +53,7 @@ module Sigma
43
53
 
44
54
  end
45
55
 
56
+ # An ordered collection of DataInput
46
57
  class DataInputs
47
58
  extend FFI::Library
48
59
  ffi_lib FFI::Compiler::Loader.find('csigma')
@@ -54,10 +65,16 @@ module Sigma
54
65
  attach_function :ergo_lib_data_inputs_get, [:pointer, :uint8, :pointer], ReturnOption.by_value
55
66
  attr_accessor :pointer
56
67
 
68
+ # Takes ownership of an existing DataInputs Pointer.
69
+ # @note A user of sigma_rb generally does not need to call this function
70
+ # @param pointer [FFI::MemoryPointer]
71
+ # @return [DataInputs]
57
72
  def self.with_raw_pointer(unread_pointer)
58
73
  init(unread_pointer)
59
74
  end
60
75
 
76
+ # Create an empty collection
77
+ # @return [DataInputs]
61
78
  def self.create
62
79
  pointer = FFI::MemoryPointer.new(:pointer)
63
80
  ergo_lib_data_inputs_new(pointer)
@@ -65,14 +82,21 @@ module Sigma
65
82
  init(pointer)
66
83
  end
67
84
 
85
+ # Get length of DataInputs
86
+ # @return [Integer]
68
87
  def len
69
88
  ergo_lib_data_inputs_len(self.pointer)
70
89
  end
71
90
 
91
+ # Add a DataInput
92
+ # @param data_input [DataInput]
72
93
  def add(data_input)
73
94
  ergo_lib_data_inputs_add(data_input.pointer, self.pointer)
74
95
  end
75
96
 
97
+ # Get item at specified index or return nil if no item exists
98
+ # @params index [Integer]
99
+ # @return [DataInput, nil]
76
100
  def get(index)
77
101
  pointer = FFI::MemoryPointer.new(:pointer)
78
102
  res = ergo_lib_data_inputs_get(self.pointer, index, pointer)
data/lib/sigma/enums.rb CHANGED
@@ -4,6 +4,8 @@ module Sigma
4
4
  extend FFI::Library
5
5
  typedef :pointer, :error_pointer
6
6
 
7
+ # Address type prefix
8
+ # @see https://github.com/ffi/ffi/wiki/Enums FFI Enum Documentation
7
9
  ADDRESS_TYPE_PREFIX_ENUM = enum :address_type_prefix,
8
10
  [
9
11
  :p2pk, 1,
@@ -11,12 +13,16 @@ module Sigma
11
13
  :pay2s
12
14
  ]
13
15
 
16
+ # Network prefix
17
+ # @see https://github.com/ffi/ffi/wiki/Enums FFI Enum Documentation
14
18
  NETWORK_PREFIX_ENUM = enum :network_prefix,
15
19
  [
16
20
  :mainnet, 0,
17
21
  :testnet, 16,
18
22
  ]
19
23
 
24
+ # Register id
25
+ # @see https://github.com/ffi/ffi/wiki/Enums FFI Enum Documentation
20
26
  REGISTER_ID_ENUM = enum :non_mandatory_register_id,
21
27
  [
22
28
  :r4, 4,
@@ -27,6 +33,8 @@ module Sigma
27
33
  :r9
28
34
  ]
29
35
 
36
+ # Represents which side the node is on in the merkle tree
37
+ # @see https://github.com/ffi/ffi/wiki/Enums FFI Enum Documentation
30
38
  NODE_SIDE_ENUM = enum :node_side,
31
39
  [
32
40
  :left, 0,
@@ -4,6 +4,7 @@ require 'ffi-compiler/loader'
4
4
  require 'json'
5
5
 
6
6
  module Sigma
7
+ # BoxId (32-byte digest)
7
8
  class BoxId
8
9
  extend FFI::Library
9
10
  ffi_lib FFI::Compiler::Loader.find('csigma')
@@ -16,10 +17,17 @@ module Sigma
16
17
 
17
18
  attr_accessor :pointer
18
19
 
20
+ # Takes ownership of an existing BoxId Pointer.
21
+ # @note A user of sigma_rb generally does not need to call this function
22
+ # @param pointer [FFI::MemoryPointer]
23
+ # @return [BoxId]
19
24
  def self.with_raw_pointer(bid_ptr)
20
25
  init(bid_ptr)
21
26
  end
22
27
 
28
+ # Parse box id (32 byte digest) from base16-encoded string
29
+ # @param str [String]
30
+ # @return [BoxId]
23
31
  def self.with_string(str)
24
32
  bid_ptr = FFI::MemoryPointer.new(:pointer)
25
33
  error = ergo_lib_box_id_from_str(str, bid_ptr)
@@ -28,12 +36,16 @@ module Sigma
28
36
  init(bid_ptr)
29
37
  end
30
38
 
39
+ # Returns byte array (32-bytes) representation
40
+ # @return [Array<uint8, 32>]
31
41
  def to_bytes
32
42
  b_ptr = FFI::MemoryPointer.new(:uint8, 32)
33
43
  ergo_lib_box_id_to_bytes(self.pointer, b_ptr)
34
44
  b_ptr.get_array_of_uint8(0, 32)
35
45
  end
36
46
 
47
+ # Returns base16 encoded string representation
48
+ # @return [String]
37
49
  def to_s
38
50
  s_ptr = FFI::MemoryPointer.new(:pointer, 1)
39
51
  ergo_lib_box_id_to_str(self.pointer, s_ptr)
@@ -43,6 +55,9 @@ module Sigma
43
55
  str
44
56
  end
45
57
 
58
+ # Equality check of two BoxId
59
+ # @param box_id_two [BoxId]
60
+ # @return [bool]
46
61
  def ==(box_id_two)
47
62
  ergo_lib_box_id_eq(self.pointer, box_id_two.pointer)
48
63
  end
@@ -61,6 +76,7 @@ module Sigma
61
76
  end
62
77
  end
63
78
 
79
+ # Box value in nanoERGs with bound checks
64
80
  class BoxValue
65
81
  extend FFI::Library
66
82
  ffi_lib FFI::Compiler::Loader.find('csigma')
@@ -75,21 +91,28 @@ module Sigma
75
91
 
76
92
  attr_accessor :pointer
77
93
 
94
+ # Takes ownership of an existing BoxValue Pointer.
95
+ # @note A user of sigma_rb generally does not need to call this function
96
+ # @param pointer [FFI::MemoryPointer]
97
+ # @return [BoxValue]
78
98
  def self.with_raw_pointer(bv_pointer)
79
99
  init(bv_pointer)
80
100
  end
81
101
 
102
+ # Number of units inside one ERGO (i.e. one ERG using nano ERG representation)
82
103
  def self.units_per_ergo
83
104
  ergo_lib_box_value_units_per_ergo
84
105
  end
85
106
 
107
+ # Recommended (safe) minimal box value to use in case box size estimation is unavailable.
108
+ # Allows box size upto 2777 bytes with current min box value per byte of 360 nanoERGs
86
109
  def self.safe_user_min
87
110
  bv_ptr = FFI::MemoryPointer.new(:pointer)
88
111
  ergo_lib_box_value_safe_user_min(bv_ptr)
89
112
 
90
113
  init(bv_ptr)
91
114
  end
92
-
115
+ # Create a new box value which is the sum of the arguments, throwing error if value is out of bounds.
93
116
  def self.sum_of(bv_one, bv_two)
94
117
  bv_ptr = FFI::MemoryPointer.new(:pointer)
95
118
  error = ergo_lib_box_value_sum_of(bv_one.pointer, bv_two.pointer, bv_ptr)
@@ -98,6 +121,9 @@ module Sigma
98
121
  init(bv_ptr)
99
122
  end
100
123
 
124
+ # Create BoxValue from 64-bit integer
125
+ # @param int [Integer]
126
+ # @return [BoxValue]
101
127
  def self.from_i64(int)
102
128
  bv_ptr = FFI::MemoryPointer.new(:pointer)
103
129
  error = ergo_lib_box_value_from_i64(int, bv_ptr)
@@ -106,10 +132,15 @@ module Sigma
106
132
  init(bv_ptr)
107
133
  end
108
134
 
135
+ # Get value as 64-bit integer
136
+ # @return [Integer]
109
137
  def to_i64
110
138
  ergo_lib_box_value_as_i64(self.pointer)
111
139
  end
112
140
 
141
+ # Equality check for two BoxValues
142
+ # @param box_value_two [BoxValue]
143
+ # @return [bool]
113
144
  def ==(box_value_two)
114
145
  ergo_lib_box_value_eq(self.pointer, box_value_two.pointer)
115
146
  end
@@ -128,6 +159,8 @@ module Sigma
128
159
  end
129
160
  end
130
161
 
162
+ # Contains the same fields as ``ErgoBox``, except for transaction id and index, that will be
163
+ # calculated after full transaction formation. Use ``ErgoBoxCandidateBuilder`` to create an instance
131
164
  class ErgoBoxCandidate
132
165
  extend FFI::Library
133
166
  ffi_lib FFI::Compiler::Loader.find('csigma')
@@ -142,10 +175,18 @@ module Sigma
142
175
 
143
176
  attr_accessor :pointer
144
177
 
178
+ # Takes ownership of an existing ErgoBoxCandidate Pointer.
179
+ # @note A user of sigma_rb generally does not need to call this function
180
+ # @param pointer [FFI::MemoryPointer]
181
+ # @return [ErgoBoxCandidate]
145
182
  def self.with_raw_pointer(pointer)
146
183
  init(pointer)
147
184
  end
148
185
 
186
+ # Returns value (ErgoTree constant) stored in the register or `nil` if the register is empty
187
+ # @param register_id [Integer]
188
+ # @return [Constant, nil]
189
+ # @see REGISTER_ID_ENUM
149
190
  def get_register_value(register_id)
150
191
  constant_ptr = FFI::MemoryPointer.new(:pointer)
151
192
  res = ergo_lib_ergo_box_candidate_register_value(self.pointer, register_id, constant_ptr)
@@ -157,28 +198,39 @@ module Sigma
157
198
  end
158
199
  end
159
200
 
201
+ # Get box creation height
202
+ # @return [Integer]
160
203
  def get_creation_height
161
204
  ergo_lib_ergo_box_candidate_creation_height(self.pointer)
162
205
  end
163
206
 
207
+ # Get tokens for box
208
+ # @return [Tokens]
164
209
  def get_tokens
165
210
  pointer = FFI::MemoryPointer.new(:pointer)
166
211
  ergo_lib_ergo_box_candidate_tokens(self.pointer, pointer)
167
212
  Sigma::Tokens.with_raw_pointer(pointer)
168
213
  end
169
214
 
215
+ # Get ErgoTree for box
216
+ # @return [ErgoTree]
170
217
  def get_ergo_tree
171
218
  pointer = FFI::MemoryPointer.new(:pointer)
172
219
  ergo_lib_ergo_box_candidate_ergo_tree(self.pointer, pointer)
173
220
  Sigma::ErgoTree.with_raw_pointer(pointer)
174
221
  end
175
222
 
223
+ # Get box value
224
+ # @return [BoxValue]
176
225
  def get_box_value
177
226
  pointer = FFI::MemoryPointer.new(:pointer)
178
227
  ergo_lib_ergo_box_candidate_box_value(self.pointer, pointer)
179
228
  Sigma::BoxValue.with_raw_pointer(pointer)
180
229
  end
181
230
 
231
+ # Equality check
232
+ # @param ebc_two [ErgoBoxCandidate]
233
+ # @return [bool]
182
234
  def ==(ebc_two)
183
235
  ergo_lib_ergo_box_candidate_eq(self.pointer, ebc_two.pointer)
184
236
  end
@@ -197,6 +249,7 @@ module Sigma
197
249
  end
198
250
  end
199
251
 
252
+ # An ordered collection of ErgoBoxCandidate
200
253
  class ErgoBoxCandidates
201
254
  extend FFI::Library
202
255
  ffi_lib FFI::Compiler::Loader.find('csigma')
@@ -209,6 +262,8 @@ module Sigma
209
262
 
210
263
  attr_accessor :pointer
211
264
 
265
+ # Create an empty collection
266
+ # @return [ErgoBoxCandidates]
212
267
  def self.create
213
268
  pointer = FFI::MemoryPointer.new(:pointer)
214
269
  ergo_lib_ergo_box_candidates_new(pointer)
@@ -216,18 +271,29 @@ module Sigma
216
271
  init(pointer)
217
272
  end
218
273
 
274
+ # Takes ownership of an existing ErgoBoxCandidates Pointer.
275
+ # @note A user of sigma_rb generally does not need to call this function
276
+ # @param pointer [FFI::MemoryPointer]
277
+ # @return [ErgoBoxCandidates]
219
278
  def self.with_raw_pointer(pointer)
220
279
  init(pointer)
221
280
  end
222
281
 
282
+ # Get length of collection
283
+ # @return [Integer]
223
284
  def len
224
285
  ergo_lib_ergo_box_candidates_len(self.pointer)
225
286
  end
226
287
 
288
+ # Add to collection
289
+ # @param ergo_box_candidate [ErgoBoxCandidate]
227
290
  def add(ergo_box_candidate)
228
291
  ergo_lib_ergo_box_candidates_add(ergo_box_candidate.pointer, self.pointer)
229
292
  end
230
293
 
294
+ # Get item at specified index or return nil if no item exists
295
+ # @param index [Integer]
296
+ # @return [ErgoBoxCandidate, nil]
231
297
  def get(index)
232
298
  pointer = FFI::MemoryPointer.new(:pointer)
233
299
  res = ergo_lib_ergo_box_candidates_get(self.pointer, index, pointer)
@@ -253,6 +319,26 @@ module Sigma
253
319
  end
254
320
  end
255
321
 
322
+ # Box (aka coin, or an unspent output) is a basic concept of a UTXO-based cryptocurrency.
323
+ # In Bitcoin, such an object is associated with some monetary value (arbitrary,
324
+ # but with predefined precision, so we use integer arithmetic to work with the value),
325
+ # and also a guarding script (aka proposition) to protect the box from unauthorized opening.
326
+ #
327
+ # In other way, a box is a state element locked by some proposition (ErgoTree).
328
+ #
329
+ # In Ergo, box is just a collection of registers, some with mandatory types and semantics,
330
+ # others could be used by applications in any way.
331
+ # We add additional fields in addition to amount and proposition~(which stored in the registers R0 and R1).
332
+ # Namely, register R2 contains additional tokens (a sequence of pairs (token identifier, value)).
333
+ # Register R3 contains height when block got included into the blockchain and also transaction
334
+ # identifier and box index in the transaction outputs.
335
+ # Registers R4-R9 are free for arbitrary usage.
336
+ #
337
+ # A transaction is unsealing a box. As a box can not be open twice, any further valid transaction
338
+ # can not be linked to the same box.
339
+ # Ergo box, that is taking part in some transaction on the chain Differs with ``ErgoBoxCandidate``
340
+ # by added transaction id and an index in the input of that transaction
341
+
256
342
  class ErgoBox
257
343
  extend FFI::Library
258
344
  ffi_lib FFI::Compiler::Loader.find('csigma')
@@ -273,6 +359,17 @@ module Sigma
273
359
 
274
360
  attr_accessor :pointer
275
361
 
362
+ # Safe maximum number of tokens in the box
363
+ # Calculated from the max box size (4kb) limit and the size of the token (32 bytes)
364
+ MAX_TOKENS_COUNT = 100
365
+
366
+ # Create a new box
367
+ # @param box_value: [BoxValue] amount of money associated with box
368
+ # @param creation_height: [Integer] height when a transaction containing the box is created
369
+ # @param contract: [Contract] guarding contract which should be evaluted to true in order to open(spend) this box
370
+ # @param tx_id: [TxId] transaction id in which this box was "created" (participated in outputs)
371
+ # @param index: [Integer] index (in outputs) in the transaction
372
+ # @return [ErgoBox]
276
373
  def self.create(box_value:,
277
374
  creation_height:,
278
375
  contract:,
@@ -289,10 +386,18 @@ module Sigma
289
386
  init(eb_pointer)
290
387
  end
291
388
 
389
+ # Takes ownership of an existing ErgoBox Pointer.
390
+ # @note A user of sigma_rb generally does not need to call this function
391
+ # @param pointer [FFI::MemoryPointer]
392
+ # @return [ErgoBox]
292
393
  def self.with_raw_pointer(unread_pointer)
293
394
  init(unread_pointer)
294
395
  end
295
396
 
397
+ # Parse and create from json.
398
+ # Supports Ergo Node/Explorer API and box values and token amount encoded as strings
399
+ # @param json_str [String]
400
+ # @return [ErgoBox]
296
401
  def self.with_json(json_str)
297
402
  pointer = FFI::MemoryPointer.new(:pointer)
298
403
  error = ergo_lib_ergo_box_from_json(json_str, pointer)
@@ -300,22 +405,32 @@ module Sigma
300
405
  init(pointer)
301
406
  end
302
407
 
408
+ # Get box id
409
+ # @return [BoxId]
303
410
  def get_box_id
304
411
  box_id_ptr = FFI::MemoryPointer.new(:pointer)
305
412
  ergo_lib_ergo_box_id(self.pointer, box_id_ptr)
306
413
  Sigma::BoxId.with_raw_pointer(box_id_ptr)
307
414
  end
308
415
 
416
+ # Get box value
417
+ # @return [BoxValue]
309
418
  def get_box_value
310
419
  box_value_ptr = FFI::MemoryPointer.new(:pointer)
311
420
  ergo_lib_ergo_box_value(self.pointer, box_value_ptr)
312
421
  Sigma::BoxValue.with_raw_pointer(box_value_ptr)
313
422
  end
314
423
 
424
+ # Get box creation height
425
+ # @return [Integer]
315
426
  def get_creation_height
316
427
  ergo_lib_ergo_box_creation_height(self.pointer)
317
428
  end
318
429
 
430
+ # Returns value (ErgoTree constant) stored in the register or `nil` if the register is empty
431
+ # @param register_id [Integer]
432
+ # @return [Constant, nil]
433
+ # @see REGISTER_ID_ENUM
319
434
  def get_register_value(register_id)
320
435
  constant_ptr = FFI::MemoryPointer.new(:pointer)
321
436
  res = ergo_lib_ergo_box_register_value(self.pointer, register_id, constant_ptr)
@@ -327,18 +442,24 @@ module Sigma
327
442
  end
328
443
  end
329
444
 
445
+ # Get tokens for box
446
+ # @return [Tokens]
330
447
  def get_tokens
331
448
  tokens_ptr = FFI::MemoryPointer.new(:pointer)
332
449
  ergo_lib_ergo_box_tokens(self.pointer, tokens_ptr)
333
450
  Sigma::Tokens.with_raw_pointer(tokens_ptr)
334
451
  end
335
452
 
453
+ # Get ergo tree for box
454
+ # @return [ErgoTree]
336
455
  def get_ergo_tree
337
456
  ergo_tree_ptr = FFI::MemoryPointer.new(:pointer)
338
457
  ergo_lib_ergo_box_ergo_tree(self.pointer, ergo_tree_ptr)
339
458
  Sigma::ErgoTree.with_raw_pointer(ergo_tree_ptr)
340
459
  end
341
460
 
461
+ # JSON representation as text (compatible with Ergo Node/Explorer API, numbers are encoded as numbers)
462
+ # @return [String]
342
463
  def to_json
343
464
  s_ptr = FFI::MemoryPointer.new(:pointer, 1)
344
465
  error = ergo_lib_ergo_box_to_json(self.pointer, s_ptr)
@@ -349,6 +470,9 @@ module Sigma
349
470
  str
350
471
  end
351
472
 
473
+ # JSON representation according to EIP-12
474
+ # @see <https://github.com/ergoplatform/eips/pull/23> PR with EIP-12
475
+ # @return [String]
352
476
  def to_json_eip12
353
477
  s_ptr = FFI::MemoryPointer.new(:pointer, 1)
354
478
  error = ergo_lib_ergo_box_to_json_eip12(self.pointer, s_ptr)
@@ -359,6 +483,9 @@ module Sigma
359
483
  str
360
484
  end
361
485
 
486
+ # Equality check
487
+ # @param ergo_box_two [ErgoBox]
488
+ # @return [bool]
362
489
  def ==(ergo_box_two)
363
490
  ergo_lib_ergo_box_eq(self.pointer, ergo_box_two.pointer)
364
491
  end
@@ -377,6 +504,7 @@ module Sigma
377
504
  end
378
505
  end
379
506
 
507
+ # An ordered collection of ErgoBox
380
508
  class ErgoBoxes
381
509
  extend FFI::Library
382
510
  ffi_lib FFI::Compiler::Loader.find('csigma')
@@ -389,10 +517,16 @@ module Sigma
389
517
 
390
518
  attr_accessor :pointer
391
519
 
520
+ # Takes ownership of an existing ErgoBoxes Pointer.
521
+ # @note A user of sigma_rb generally does not need to call this function
522
+ # @param pointer [FFI::MemoryPointer]
523
+ # @return [ErgoBoxes]
392
524
  def self.with_raw_pointer(unread_pointer)
393
525
  init(unread_pointer)
394
526
  end
395
527
 
528
+ # Create an empty collection
529
+ # @return [ErgoBoxes]
396
530
  def self.create
397
531
  pointer = FFI::MemoryPointer.new(:pointer)
398
532
  ergo_lib_ergo_boxes_new(pointer)
@@ -400,7 +534,9 @@ module Sigma
400
534
  init(pointer)
401
535
  end
402
536
 
403
- # Parameter is an ARRAY of JSON Strings
537
+ # Create collection from ErgoBox Array JSON (Node API)
538
+ # @param array_of_json_elements [Array<String>]
539
+ # @note Parameter is an ARRAY of JSON Strings
404
540
  def self.from_json(array_of_json_elements)
405
541
  boxes = array_of_json_elements.map do |json|
406
542
  Sigma::ErgoBox.with_json(json)
@@ -412,14 +548,21 @@ module Sigma
412
548
  container
413
549
  end
414
550
 
551
+ # Get length of collection
552
+ # @return [Integer]
415
553
  def len
416
554
  ergo_lib_ergo_boxes_len(self.pointer)
417
555
  end
418
556
 
557
+ # Add to collection
558
+ # @param ergo_box [ErgoBox]
419
559
  def add(ergo_box)
420
560
  ergo_lib_ergo_boxes_add(ergo_box.pointer, self.pointer)
421
561
  end
422
562
 
563
+ # Get item at specified index or return nil if no item exists
564
+ # @param index [Integer]
565
+ # @return [ErgoBox, nil]
423
566
  def get(index)
424
567
  pointer = FFI::MemoryPointer.new(:pointer)
425
568
  res = ergo_lib_ergo_boxes_get(self.pointer, index, pointer)
@@ -445,6 +588,7 @@ module Sigma
445
588
  end
446
589
  end
447
590
 
591
+ # Pair of (value, tokens) for a box
448
592
  class ErgoBoxAssetsData
449
593
  extend FFI::Library
450
594
  ffi_lib FFI::Compiler::Loader.find('csigma')
@@ -457,28 +601,43 @@ module Sigma
457
601
 
458
602
  attr_accessor :pointer
459
603
 
604
+ # Create new instance
605
+ # @param box_value: [BoxValue]
606
+ # @param tokens: [Tokens]
607
+ # @return [ErgoBoxAssetsData]
460
608
  def self.create(box_value:, tokens:)
461
609
  pointer = FFI::MemoryPointer.new(:pointer)
462
610
  ergo_lib_ergo_box_assets_data_new(box_value.pointer, tokens.pointer, pointer)
463
611
  init(pointer)
464
612
  end
465
613
 
614
+ # Takes ownership of an existing ErgoBoxAssetsData Pointer.
615
+ # @note A user of sigma_rb generally does not need to call this function
616
+ # @param pointer [FFI::MemoryPointer]
617
+ # @return [ErgoBoxAssetsData]
466
618
  def self.with_raw_pointer(pointer)
467
619
  init(pointer)
468
620
  end
469
621
 
622
+ # get box value
623
+ # @return [BoxValue]
470
624
  def get_box_value
471
625
  pointer = FFI::MemoryPointer.new(:pointer)
472
626
  ergo_lib_ergo_box_assets_data_value(self.pointer, pointer)
473
627
  Sigma::BoxValue.with_raw_pointer(pointer)
474
628
  end
475
629
 
630
+ # get box tokens
631
+ # @return [Tokens]
476
632
  def get_box_tokens
477
633
  pointer = FFI::MemoryPointer.new(:pointer)
478
634
  ergo_lib_ergo_box_assets_data_tokens(self.pointer, pointer)
479
635
  Sigma::Tokens.with_raw_pointer(pointer)
480
636
  end
481
637
 
638
+ # Equality check
639
+ # @param eb_asset_data_two [ErgoBoxAssetsData]
640
+ # @return [bool]
482
641
  def ==(eb_asset_data_two)
483
642
  ergo_lib_ergo_box_assets_data_eq(self.pointer, eb_asset_data_two.pointer)
484
643
  end
@@ -497,6 +656,7 @@ module Sigma
497
656
  end
498
657
  end
499
658
 
659
+ # An ordered collection of ErgoBoxAssetsData
500
660
  class ErgoBoxAssetsDataList
501
661
  extend FFI::Library
502
662
  ffi_lib FFI::Compiler::Loader.find('csigma')
@@ -509,10 +669,16 @@ module Sigma
509
669
 
510
670
  attr_accessor :pointer
511
671
 
672
+ # Takes ownership of an existing ErgoBoxAssetsDataList Pointer.
673
+ # @note A user of sigma_rb generally does not need to call this function
674
+ # @param pointer [FFI::MemoryPointer]
675
+ # @return [ErgoBoxAssetsDataList]
512
676
  def self.with_raw_pointer(unread_pointer)
513
677
  init(unread_pointer)
514
678
  end
515
679
 
680
+ # Create an empty collection
681
+ # @return [ErgoBoxAssetsDataList]
516
682
  def self.create
517
683
  pointer = FFI::MemoryPointer.new(:pointer)
518
684
  ergo_lib_ergo_box_assets_data_list_new(pointer)
@@ -520,14 +686,21 @@ module Sigma
520
686
  init(pointer)
521
687
  end
522
688
 
689
+ # Get length of collection
690
+ # @return [Integer]
523
691
  def len
524
692
  ergo_lib_ergo_box_assets_data_list_len(self.pointer)
525
693
  end
526
694
 
695
+ # Add to collection
696
+ # @param ergo_box_assets_data [ErgoBoxAssetsData]
527
697
  def add(ergo_box_assets_data)
528
698
  ergo_lib_ergo_box_assets_data_list_add(ergo_box_assets_data.pointer, self.pointer)
529
699
  end
530
700
 
701
+ # Get item at specified index or return nil if no item exists
702
+ # @param index [Integer]
703
+ # @return [ErgoBoxAssetsData, nil]
531
704
  def get(index)
532
705
  pointer = FFI::MemoryPointer.new(:pointer)
533
706
  res = ergo_lib_ergo_box_assets_data_list_get(self.pointer, index, pointer)