sigma_rb 0.1.3 → 0.1.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -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
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)