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
+ # Secret key for the prover
6
7
  class SecretKey
7
8
  extend FFI::Library
8
9
  ffi_lib FFI::Compiler::Loader.find('csigma')
@@ -15,12 +16,17 @@ module Sigma
15
16
 
16
17
  attr_accessor :pointer
17
18
 
19
+ # Generate random key
20
+ # @return [SecretKey]
18
21
  def self.create
19
22
  pointer = FFI::MemoryPointer.new(:pointer)
20
23
  ergo_lib_secret_key_generate_random(pointer)
21
24
  init(pointer)
22
25
  end
23
26
 
27
+ # Parse dlog secret key from bytes (SEC-1-encoded scalar)
28
+ # @param bytes [Array<uint8>] Array of 8-bit integers (0-255)
29
+ # @return [SecretKey]
24
30
  def self.from_bytes(bytes)
25
31
  pointer = FFI::MemoryPointer.new(:pointer)
26
32
  b_ptr = FFI::MemoryPointer.new(:uint8, bytes.size)
@@ -30,16 +36,24 @@ module Sigma
30
36
  init(pointer)
31
37
  end
32
38
 
39
+ # Takes ownership of an existing SecretKey Pointer.
40
+ # @note A user of sigma_rb generally does not need to call this function
41
+ # @param pointer [FFI::MemoryPointer]
42
+ # @return [SecretKey]
33
43
  def self.with_raw_pointer(pointer)
34
44
  init(pointer)
35
45
  end
36
46
 
47
+ # Get address (encoded public image)
48
+ # @return [Address]
37
49
  def get_address
38
50
  pointer = FFI::MemoryPointer.new(:pointer)
39
51
  ergo_lib_secret_key_get_address(self.pointer, pointer)
40
52
  Sigma::Address.with_raw_pointer(pointer)
41
53
  end
42
-
54
+
55
+ # Encode to bytes
56
+ # @return [Array<uint8>] Array of 8-bit integers (0-255)
43
57
  def to_bytes
44
58
  bytes_len = 32
45
59
  b_ptr = FFI::MemoryPointer.new(:uint8, bytes_len)
@@ -61,6 +75,7 @@ module Sigma
61
75
  end
62
76
  end
63
77
 
78
+ # An ordered collection of SecretKey
64
79
  class SecretKeys
65
80
  extend FFI::Library
66
81
  ffi_lib FFI::Compiler::Loader.find('csigma')
@@ -73,10 +88,16 @@ module Sigma
73
88
 
74
89
  attr_accessor :pointer
75
90
 
91
+ # Takes ownership of an existing SecretKeys Pointer.
92
+ # @note A user of sigma_rb generally does not need to call this function
93
+ # @param pointer [FFI::MemoryPointer]
94
+ # @return [SecretKeys]
76
95
  def self.with_raw_pointer(unread_pointer)
77
96
  init(unread_pointer)
78
97
  end
79
98
 
99
+ # Create an empty collection
100
+ # @return [SecretKeys]
80
101
  def self.create
81
102
  pointer = FFI::MemoryPointer.new(:pointer)
82
103
  ergo_lib_secret_keys_new(pointer)
@@ -84,14 +105,21 @@ module Sigma
84
105
  init(pointer)
85
106
  end
86
107
 
108
+ # Get length of collection
109
+ # @return [Integer]
87
110
  def len
88
111
  ergo_lib_secret_keys_len(self.pointer)
89
112
  end
90
113
 
114
+ # Add to collection
115
+ # @param secret_key [SecretKey]
91
116
  def add(secret_key)
92
117
  ergo_lib_secret_keys_add(secret_key.pointer, self.pointer)
93
118
  end
94
119
 
120
+ # Get item at specified index or return nil if no item exists
121
+ # @param index [Integer]
122
+ # @return [SecretKey, nil]
95
123
  def get(index)
96
124
  pointer = FFI::MemoryPointer.new(:pointer)
97
125
  res = ergo_lib_secret_keys_get(self.pointer, index, pointer)
data/lib/sigma/structs.rb CHANGED
@@ -4,26 +4,36 @@ module Sigma
4
4
  extend FFI::Library
5
5
  typedef :pointer, :error_pointer
6
6
 
7
+ # Internal FFI Struct
8
+ # @see https://github.com/ffi/ffi/wiki/Examples#-structs FFI Struct Documentation
7
9
  class ReturnOption < FFI::Struct
8
10
  layout :is_some, :bool,
9
11
  :error, :error_pointer
10
12
  end
11
13
 
14
+ # Internal FFI Struct
15
+ # @see https://github.com/ffi/ffi/wiki/Examples#-structs FFI Struct Documentation
12
16
  class ReturnNumUsize < FFI::Struct
13
17
  layout :value, :uint,
14
18
  :error, :error_pointer
15
19
  end
16
20
 
21
+ # Internal FFI Struct
22
+ # @see https://github.com/ffi/ffi/wiki/Examples#-structs FFI Struct Documentation
17
23
  class ReturnNumI32 < FFI::Struct
18
24
  layout :value, :int32,
19
25
  :error, :error_pointer
20
26
  end
21
27
 
28
+ # Internal FFI Struct
29
+ # @see https://github.com/ffi/ffi/wiki/Examples#-structs FFI Struct Documentation
22
30
  class ReturnNumI64 < FFI::Struct
23
31
  layout :value, :int64,
24
32
  :error, :error_pointer
25
33
  end
26
34
 
35
+ # Internal FFI Struct
36
+ # @see https://github.com/ffi/ffi/wiki/Examples#-structs FFI Struct Documentation
27
37
  class ReturnBool < FFI::Struct
28
38
  layout :value, :bool,
29
39
  :error, :error_pointer
data/lib/sigma/token.rb CHANGED
@@ -13,10 +13,17 @@ module Sigma
13
13
  attach_function :ergo_lib_token_amount_eq, [:pointer, :pointer], :bool
14
14
  attr_accessor :pointer
15
15
 
16
+ # Takes ownership of an existing TokenAmount Pointer.
17
+ # @note A user of sigma_rb generally does not need to call this function
18
+ # @param pointer [FFI::MemoryPointer]
19
+ # @return [TokenAmount]
16
20
  def self.with_raw_pointer(unread_pointer)
17
21
  init(unread_pointer)
18
22
  end
19
23
 
24
+ # Create instance from 64-bit Integer with bounds check
25
+ # @param int [Integer]
26
+ # @return [TokenAmount]
20
27
  def self.with_i64(int)
21
28
  ptr = FFI::MemoryPointer.new(:pointer)
22
29
  error = ergo_lib_token_amount_from_i64(int, ptr)
@@ -25,10 +32,15 @@ module Sigma
25
32
  init(ptr)
26
33
  end
27
34
 
35
+ # Get value as 64-bit integer
36
+ # @return [Integer]
28
37
  def to_i
29
38
  ergo_lib_token_amount_as_i64(self.pointer)
30
39
  end
31
40
 
41
+ # Equality check
42
+ # @param token_amount_two [TokenAmount]
43
+ # @return [bool]
32
44
  def ==(token_amount_two)
33
45
  ergo_lib_token_amount_eq(self.pointer, token_amount_two.pointer)
34
46
  end
@@ -47,6 +59,7 @@ module Sigma
47
59
  end
48
60
  end
49
61
 
62
+ # Token id (32-byte digest)
50
63
  class TokenId
51
64
  extend FFI::Library
52
65
  ffi_lib FFI::Compiler::Loader.find('csigma')
@@ -58,10 +71,17 @@ module Sigma
58
71
  attach_function :ergo_lib_token_id_to_str, [:pointer, :pointer], :void
59
72
  attr_accessor :pointer
60
73
 
74
+ # Takes ownership of an existing TokenId Pointer.
75
+ # @note A user of sigma_rb generally does not need to call this function
76
+ # @param pointer [FFI::MemoryPointer]
77
+ # @return [TokenId]
61
78
  def self.with_raw_pointer(tid_pointer)
62
79
  init(tid_pointer)
63
80
  end
64
81
 
82
+ # Create token id from ergo box id (32 byte digest)
83
+ # @param box_id [BoxId]
84
+ # @return [TokenId]
65
85
  def self.with_box_id(box_id)
66
86
  tid_ptr = FFI::MemoryPointer.new(:pointer)
67
87
  ergo_lib_token_id_from_box_id(box_id.pointer, tid_ptr)
@@ -69,6 +89,9 @@ module Sigma
69
89
  init(tid_ptr)
70
90
  end
71
91
 
92
+ # Parse token id (32 byte digest) from base16-encoded string
93
+ # @param str [String]
94
+ # @return [TokenId]
72
95
  def self.from_base16_encoded_string(str)
73
96
  tid_ptr = FFI::MemoryPointer.new(:pointer)
74
97
  error = ergo_lib_token_id_from_str(str, tid_ptr)
@@ -77,6 +100,8 @@ module Sigma
77
100
  init(tid_ptr)
78
101
  end
79
102
 
103
+ # Get base16 encoded string
104
+ # @return [String]
80
105
  def to_base16_encoded_string
81
106
  s_ptr = FFI::MemoryPointer.new(:pointer, 1)
82
107
  ergo_lib_token_id_to_str(self.pointer, s_ptr)
@@ -86,6 +111,9 @@ module Sigma
86
111
  str
87
112
  end
88
113
 
114
+ # Equality check
115
+ # @param token_id_two [TokenId]
116
+ # @return [bool]
89
117
  def ==(token_id_two)
90
118
  ergo_lib_token_id_eq(self.pointer, token_id_two.pointer)
91
119
  end
@@ -104,6 +132,7 @@ module Sigma
104
132
  end
105
133
  end
106
134
 
135
+ # Token represented with token id paired with its amount
107
136
  class Token
108
137
  extend FFI::Library
109
138
  ffi_lib FFI::Compiler::Loader.find('csigma')
@@ -116,6 +145,10 @@ module Sigma
116
145
  attach_function :ergo_lib_token_eq, [:pointer, :pointer], :bool
117
146
  attr_accessor :pointer
118
147
 
148
+ # Create a token with given id and amount
149
+ # @param token_id: [TokenId]
150
+ # @param token_amount: [TokenAmount]
151
+ # @return [Token]
119
152
  def self.create(token_id:, token_amount:)
120
153
  pointer = FFI::MemoryPointer.new(:pointer)
121
154
  ergo_lib_token_new(token_id.pointer, token_amount.pointer, pointer)
@@ -123,22 +156,33 @@ module Sigma
123
156
  init(pointer)
124
157
  end
125
158
 
159
+ # Takes ownership of an existing Token Pointer.
160
+ # @note A user of sigma_rb generally does not need to call this function
161
+ # @param pointer [FFI::MemoryPointer]
162
+ # @return [Token]
126
163
  def self.with_raw_pointer(pointer)
127
164
  init(pointer)
128
165
  end
129
166
 
167
+ # Get id
168
+ # @return [TokenId]
130
169
  def get_id
131
170
  pointer = FFI::MemoryPointer.new(:pointer)
132
171
  ergo_lib_token_get_id(self.pointer, pointer)
133
172
  Sigma::TokenId.with_raw_pointer(pointer)
134
173
  end
135
174
 
175
+ # Get amount
176
+ # @return [TokenAmount]
136
177
  def get_amount
137
178
  pointer = FFI::MemoryPointer.new(:pointer)
138
179
  ergo_lib_token_get_amount(self.pointer, pointer)
139
180
  Sigma::TokenAmount.with_raw_pointer(pointer)
140
181
  end
141
182
 
183
+ # JSON representation according to EIP-12
184
+ # @return [String]
185
+ # @see https://github.com/ergoplatform/eips/pull/23 EIP-12
142
186
  def to_json_eip12
143
187
  s_ptr = FFI::MemoryPointer.new(:pointer, 1)
144
188
  error = ergo_lib_token_to_json_eip12(self.pointer, s_ptr)
@@ -149,6 +193,9 @@ module Sigma
149
193
  str
150
194
  end
151
195
 
196
+ # Equality check
197
+ # @param token_two [Token]
198
+ # @return [bool]
152
199
  def ==(token_two)
153
200
  ergo_lib_token_eq(self.pointer, token_two.pointer)
154
201
  end
@@ -167,6 +214,7 @@ module Sigma
167
214
  end
168
215
  end
169
216
 
217
+ # An ordered collection of Token
170
218
  class Tokens
171
219
  extend FFI::Library
172
220
  ffi_lib FFI::Compiler::Loader.find('csigma')
@@ -178,20 +226,31 @@ module Sigma
178
226
  attach_function :ergo_lib_tokens_add, [:pointer, :pointer], :error_pointer
179
227
  attr_accessor :pointer
180
228
 
229
+ # Create an empty collection
230
+ # @return [Tokens]
181
231
  def self.create
182
232
  pointer = FFI::MemoryPointer.new(:pointer)
183
233
  ergo_lib_tokens_new(pointer)
184
234
  init(pointer)
185
235
  end
186
236
 
237
+ # Takes ownership of an existing Tokens Pointer.
238
+ # @note A user of sigma_rb generally does not need to call this function
239
+ # @param pointer [FFI::MemoryPointer]
240
+ # @return [Tokens]
187
241
  def self.with_raw_pointer(tokens_ptr)
188
242
  init(tokens_ptr)
189
243
  end
190
244
 
245
+ # Get length of collection
246
+ # @return [Integer]
191
247
  def len
192
248
  ergo_lib_tokens_len(self.pointer)
193
249
  end
194
250
 
251
+ # Get item at specified index or return nil if no item exists
252
+ # @param index [Integer]
253
+ # @return [Tokens, nil]
195
254
  def get(index)
196
255
  token_pointer = FFI::MemoryPointer.new(:pointer)
197
256
  res = ergo_lib_tokens_get(self.pointer, index, token_pointer)
@@ -203,6 +262,8 @@ module Sigma
203
262
  end
204
263
  end
205
264
 
265
+ # Add to collection. Max capacity of ErgoBox::MAX_TOKENS_COUNT tokens. Will throw error if adding more.
266
+ # @param token [Token]
206
267
  def add(token)
207
268
  error = ergo_lib_tokens_add(token.pointer, self.pointer)
208
269
  Util.check_error!(error)
@@ -222,4 +283,3 @@ module Sigma
222
283
  end
223
284
  end
224
285
  end
225
-
@@ -3,6 +3,15 @@ require_relative './util.rb'
3
3
  require 'ffi-compiler/loader'
4
4
 
5
5
  module Sigma
6
+
7
+ # ErgoTransaction is an atomic state transition operation. It destroys Boxes from the state
8
+ # and creates new ones. If transaction is spending boxes protected by some non-trivial scripts,
9
+ # its inputs should also contain proof of spending correctness - context extension (user-defined
10
+ # key-value map) and data inputs (links to existing boxes in the state) that may be used during
11
+ # script reduction to crypto, signatures that satisfies the remaining cryptographic protection
12
+ # of the script.
13
+ # Transactions are not encrypted, so it is possible to browse and view every transaction ever
14
+ # collected into a block.
6
15
  class Transaction
7
16
  extend FFI::Library
8
17
  ffi_lib FFI::Compiler::Loader.find('csigma')
@@ -19,6 +28,11 @@ module Sigma
19
28
  attach_function :ergo_lib_tx_to_json_eip12, [:pointer, :pointer], :error_pointer
20
29
  attr_accessor :pointer
21
30
 
31
+ # Create ``Transaction`` from ``UnsignedTransaction`` and an array of proofs in the same order
32
+ # as `UnsignedTransaction.inputs` with empty proof indicated with empty byte array
33
+ # @param unsigned_tx: [UnsignedTransaction]
34
+ # @param proofs: [ByteArrays]
35
+ # @return [Transaction]
22
36
  def self.create_from_unsigned_tx(unsigned_tx:, proofs:)
23
37
  pointer = FFI::MemoryPointer.new(:pointer)
24
38
  error = ergo_lib_tx_from_unsigned_tx(unsigned_tx.pointer, proofs.pointer, pointer)
@@ -26,6 +40,9 @@ module Sigma
26
40
  init(pointer)
27
41
  end
28
42
 
43
+ # Parse from JSON. Supports Ergo Node/Explorer API and box values and token amount encoded as strings
44
+ # @param json [String]
45
+ # @return [Transaction]
29
46
  def self.create_from_json(json)
30
47
  pointer = FFI::MemoryPointer.new(:pointer)
31
48
  error = ergo_lib_tx_from_json(json, pointer)
@@ -33,40 +50,56 @@ module Sigma
33
50
  init(pointer)
34
51
  end
35
52
 
53
+ # Takes ownership of an existing Transaction Pointer.
54
+ # @note A user of sigma_rb generally does not need to call this function
55
+ # @param pointer [FFI::MemoryPointer]
56
+ # @return [Transaction]
36
57
  def self.with_raw_pointer(pointer)
37
58
  init(pointer)
38
59
  end
39
60
 
61
+ # Get transaction id
62
+ # @return [TxId]
40
63
  def get_tx_id
41
64
  pointer = FFI::MemoryPointer.new(:pointer)
42
65
  ergo_lib_tx_id(self.pointer, pointer)
43
66
  Sigma::TxId.with_raw_pointer(pointer)
44
67
  end
45
68
 
69
+ # Get inputs
70
+ # @return [Inputs]
46
71
  def get_inputs
47
72
  pointer = FFI::MemoryPointer.new(:pointer)
48
73
  ergo_lib_tx_inputs(self.pointer, pointer)
49
74
  Sigma::Inputs.with_raw_pointer(pointer)
50
75
  end
51
76
 
77
+ # Get data inputs
78
+ # @return [DataInputs]
52
79
  def get_data_inputs
53
80
  pointer = FFI::MemoryPointer.new(:pointer)
54
81
  ergo_lib_tx_data_inputs(self.pointer, pointer)
55
82
  Sigma::DataInputs.with_raw_pointer(pointer)
56
83
  end
57
84
 
85
+ # Get output candidates
86
+ # @return [ErgoBoxCandidates]
58
87
  def get_output_candidates
59
88
  pointer = FFI::MemoryPointer.new(:pointer)
60
89
  ergo_lib_tx_output_candidates(self.pointer, pointer)
61
90
  Sigma::ErgoBoxCandidates.with_raw_pointer(pointer)
62
91
  end
63
92
 
93
+ # Get outputs
94
+ # @return [ErgoBoxes]
64
95
  def get_outputs
65
96
  pointer = FFI::MemoryPointer.new(:pointer)
66
97
  ergo_lib_tx_outputs(self.pointer, pointer)
67
98
  Sigma::ErgoBoxes.with_raw_pointer(pointer)
68
99
  end
69
100
 
101
+ # JSON representation as text (compatible with Ergo Node/Explorer API, numbers are encoded as numbers)
102
+ # @return [String]
70
103
  def to_json
71
104
  s_ptr = FFI::MemoryPointer.new(:pointer, 1)
72
105
  error = ergo_lib_tx_to_json(self.pointer, s_ptr)
@@ -77,6 +110,8 @@ module Sigma
77
110
  str
78
111
  end
79
112
 
113
+ # JSON representation according to EIP-12
114
+ # @see https://github.com/ergoplatform/eips/pull/23 EIP-12
80
115
  def to_json_eip12
81
116
  s_ptr = FFI::MemoryPointer.new(:pointer, 1)
82
117
  error = ergo_lib_tx_to_json_eip12(self.pointer, s_ptr)
@@ -101,6 +136,8 @@ module Sigma
101
136
  end
102
137
  end
103
138
 
139
+ # A family of hints which are about a correspondence between a public image of a secret image and prover's commitment
140
+ # to randomness ("a" in a sigma protocol).
104
141
  class CommitmentHint
105
142
  extend FFI::Library
106
143
  ffi_lib FFI::Compiler::Loader.find('csigma')
@@ -108,6 +145,10 @@ module Sigma
108
145
  attach_function :ergo_lib_commitment_hint_delete, [:pointer], :void
109
146
  attr_accessor :pointer
110
147
 
148
+ # Takes ownership of an existing CommitmentHint Pointer.
149
+ # @note A user of sigma_rb generally does not need to call this function
150
+ # @param pointer [FFI::MemoryPointer]
151
+ # @return [CommitmentHint]
111
152
  def self.with_raw_pointer(pointer)
112
153
  init(pointer)
113
154
  end
@@ -126,6 +167,7 @@ module Sigma
126
167
  end
127
168
  end
128
169
 
170
+ # Collection of hints to be used by prover
129
171
  class HintsBag
130
172
  extend FFI::Library
131
173
  ffi_lib FFI::Compiler::Loader.find('csigma')
@@ -137,24 +179,37 @@ module Sigma
137
179
  attach_function :ergo_lib_hints_bag_get, [:pointer, :uint, :pointer], ReturnOption.by_value
138
180
  attr_accessor :pointer
139
181
 
182
+ # Create an empty collection
183
+ # @return [HintsBag]
140
184
  def self.create
141
185
  pointer = FFI::MemoryPointer.new(:pointer)
142
186
  ergo_lib_hints_bag_empty(pointer)
143
187
  init(pointer)
144
188
  end
145
189
 
190
+ # Takes ownership of an existing HintsBag Pointer.
191
+ # @note A user of sigma_rb generally does not need to call this function
192
+ # @param pointer [FFI::MemoryPointer]
193
+ # @return [HintsBag]
146
194
  def self.with_raw_pointer(pointer)
147
195
  init(pointer)
148
196
  end
149
197
 
198
+ # Add to collection
199
+ # @param commitment_hint [CommitmentHint]
150
200
  def add_commitment_hint(commitment_hint)
151
201
  ergo_lib_hints_bag_add_commitment(self.pointer, commitment_hint.pointer)
152
202
  end
153
203
 
204
+ # Get length of collection
205
+ # @return [Integer]
154
206
  def len
155
207
  ergo_lib_hints_bag_add_commitment_len(self.pointer)
156
208
  end
157
209
 
210
+ # Get item at specified index or return nil if no item exists
211
+ # @param index [Integer]
212
+ # @return [CommitmentHint, nil]
158
213
  def get_commitment_hint(index)
159
214
  pointer = FFI::MemoryPointer.new(:pointer)
160
215
  res = ergo_lib_hints_bag_get(self.pointer, index, pointer)
@@ -191,16 +246,30 @@ module Sigma
191
246
  attach_function :ergo_lib_transaction_extract_hints, [:pointer, :pointer, :pointer, :pointer, :pointer, :pointer, :pointer], :error_pointer
192
247
  attr_accessor :pointer
193
248
 
249
+ # Create empty collection
250
+ # @return [TransactionHintsBag]
194
251
  def self.create
195
252
  pointer = FFI::MemoryPointer.new(:pointer)
196
253
  ergo_lib_transaction_hints_bag_empty(pointer)
197
254
  init(pointer)
198
255
  end
199
256
 
257
+ # Takes ownership of an existing TransactionHintsBag Pointer.
258
+ # @note A user of sigma_rb generally does not need to call this function
259
+ # @param pointer [FFI::MemoryPointer]
260
+ # @return [TransactionHintsBag]
200
261
  def self.with_raw_pointer(pointer)
201
262
  init(pointer)
202
263
  end
203
264
 
265
+ # Extract hints from signed transaction
266
+ # @param transaction: [Transaction]
267
+ # @param state_context: [ErgoStateContext]
268
+ # @param boxes_to_spend: [ErgoBoxes]
269
+ # @param data_boxes: [ErgoBoxes]
270
+ # @param real_propositions: [Propositions]
271
+ # @param simulated_propositions: [Propositions]
272
+ # @return [TransactionHintsBag]
204
273
  def self.extract_hints_from_signed_transaction(transaction:, state_context:, boxes_to_spend:, data_boxes:, real_propositions:, simulated_propositions:)
205
274
  pointer = FFI::MemoryPointer.new(:pointer)
206
275
  error = ergo_lib_transaction_extract_hints(transaction.pointer, state_context.pointer, boxes_to_spend.pointer, data_boxes.pointer, real_propositions.pointer, simulated_propositions.pointer, pointer)
@@ -208,10 +277,16 @@ module Sigma
208
277
  init(pointer)
209
278
  end
210
279
 
280
+ # Add hints for input
281
+ # @param index: [Integer]
282
+ # @param hints_bag: [HintsBag]
211
283
  def add_hints_for_input(index:, hints_bag:)
212
284
  ergo_lib_transaction_hints_bag_add_hints_for_input(self.pointer, index, hints_bag.pointer)
213
285
  end
214
286
 
287
+ # Get hints corresponding to index
288
+ # @param index [Integer]
289
+ # @return [HintsBag]
215
290
  def all_hints_for_input(index)
216
291
  pointer = FFI::MemoryPointer.new(:pointer)
217
292
  ergo_lib_transaction_hints_bag_all_hints_for_input(self.pointer, index, pointer)
@@ -232,6 +307,7 @@ module Sigma
232
307
  end
233
308
  end
234
309
 
310
+ # Unsigned (inputs without proofs) transaction
235
311
  class UnsignedTransaction
236
312
  extend FFI::Library
237
313
  ffi_lib FFI::Compiler::Loader.find('csigma')
@@ -246,6 +322,9 @@ module Sigma
246
322
  attach_function :ergo_lib_unsigned_tx_to_json_eip12, [:pointer, :pointer], :error_pointer
247
323
  attr_accessor :pointer
248
324
 
325
+ # Parse from JSON. Supports Ergo Node/Explorer API and box values and token amount encoded as strings
326
+ # @param json [String]
327
+ # @return [UnsignedTransaction]
249
328
  def self.with_json(json)
250
329
  pointer = FFI::MemoryPointer.new(:pointer)
251
330
  error = ergo_lib_unsigned_tx_from_json(json, pointer)
@@ -253,34 +332,48 @@ module Sigma
253
332
  init(pointer)
254
333
  end
255
334
 
335
+ # Takes ownership of an existing UnsignedTransaction Pointer.
336
+ # @note A user of sigma_rb generally does not need to call this function
337
+ # @param pointer [FFI::MemoryPointer]
338
+ # @return [UnsignedTransaction]
256
339
  def self.with_raw_pointer(pointer)
257
340
  init(pointer)
258
341
  end
259
342
 
343
+ # Get transaction id
344
+ # @return [TxId]
260
345
  def get_tx_id
261
346
  pointer = FFI::MemoryPointer.new(:pointer)
262
347
  ergo_lib_unsigned_tx_id(self.pointer, pointer)
263
348
  Sigma::TxId.with_raw_pointer(pointer)
264
349
  end
265
350
 
351
+ # Get unsigned inputs
352
+ # @return [UnsignedInputs]
266
353
  def get_unsigned_inputs
267
354
  pointer = FFI::MemoryPointer.new(:pointer)
268
355
  ergo_lib_unsigned_tx_inputs(self.pointer, pointer)
269
356
  Sigma::UnsignedInputs.with_raw_pointer(pointer)
270
357
  end
271
358
 
359
+ # Get data inputs
360
+ # @return [DataInputs]
272
361
  def get_data_inputs
273
362
  pointer = FFI::MemoryPointer.new(:pointer)
274
363
  ergo_lib_unsigned_tx_data_inputs(self.pointer, pointer)
275
364
  Sigma::DataInputs.with_raw_pointer(pointer)
276
365
  end
277
366
 
367
+ # Get output candidates
368
+ # @return [ErgoBoxCandidates]
278
369
  def get_output_candidates
279
370
  pointer = FFI::MemoryPointer.new(:pointer)
280
371
  ergo_lib_unsigned_tx_output_candidates(self.pointer, pointer)
281
372
  Sigma::ErgoBoxCandidates.with_raw_pointer(pointer)
282
373
  end
283
374
 
375
+ # JSON representation as text (compatible with Ergo Node/Explorer API, numbers are encoded as numbers)
376
+ # @return [String]
284
377
  def to_json
285
378
  s_ptr = FFI::MemoryPointer.new(:pointer, 1)
286
379
  error = ergo_lib_unsigned_tx_to_json(self.pointer, s_ptr)
@@ -291,6 +384,8 @@ module Sigma
291
384
  str
292
385
  end
293
386
 
387
+ # JSON representation according to EIP-12
388
+ # @see https://github.com/ergoplatform/eips/pull/23 EIP-12
294
389
  def to_json_eip12
295
390
  s_ptr = FFI::MemoryPointer.new(:pointer, 1)
296
391
  error = ergo_lib_unsigned_tx_to_json_eip12(self.pointer, s_ptr)
@@ -315,6 +410,7 @@ module Sigma
315
410
  end
316
411
  end
317
412
 
413
+ # Transaction Id
318
414
  class TxId
319
415
  extend FFI::Library
320
416
  ffi_lib FFI::Compiler::Loader.find('csigma')
@@ -325,6 +421,9 @@ module Sigma
325
421
 
326
422
  attr_accessor :pointer
327
423
 
424
+ # Create from hex-encoded string
425
+ # @param str [String]
426
+ # @return [TxId]
328
427
  def self.with_string(str)
329
428
  pointer = FFI::MemoryPointer.new(:pointer)
330
429
  error = ergo_lib_tx_id_from_str(str, pointer)
@@ -333,10 +432,16 @@ module Sigma
333
432
  init(pointer)
334
433
  end
335
434
 
435
+ # Takes ownership of an existing TxId Pointer.
436
+ # @note A user of sigma_rb generally does not need to call this function
437
+ # @param pointer [FFI::MemoryPointer]
438
+ # @return [TxId]
336
439
  def self.with_raw_pointer(unread_pointer)
337
440
  init(unread_pointer)
338
441
  end
339
442
 
443
+ # Get the TxId as bytes represented with hex-encoded string
444
+ # @return [String]
340
445
  def to_s
341
446
  s_ptr = FFI::MemoryPointer.new(:pointer, 1)
342
447
  error = ergo_lib_tx_id_to_str(self.pointer, s_ptr)