sigma_rb 0.1.3

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.
Files changed (54) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +21 -0
  3. data/README.md +9 -0
  4. data/ext/Rakefile +7 -0
  5. data/ext/csigma.c +5 -0
  6. data/lib/sigma/address.rb +73 -0
  7. data/lib/sigma/block_header.rb +197 -0
  8. data/lib/sigma/box_selection.rb +105 -0
  9. data/lib/sigma/byte_array.rb +96 -0
  10. data/lib/sigma/constant.rb +117 -0
  11. data/lib/sigma/context_extension.rb +47 -0
  12. data/lib/sigma/contract.rb +70 -0
  13. data/lib/sigma/data_input.rb +100 -0
  14. data/lib/sigma/enums.rb +35 -0
  15. data/lib/sigma/ergo_box.rb +556 -0
  16. data/lib/sigma/ergo_box_candidate_builder.rb +123 -0
  17. data/lib/sigma/ergo_state_context.rb +41 -0
  18. data/lib/sigma/ergo_tree.rb +111 -0
  19. data/lib/sigma/input.rb +249 -0
  20. data/lib/sigma/merkle_proof.rb +79 -0
  21. data/lib/sigma/nipopow.rb +155 -0
  22. data/lib/sigma/pre_header.rb +38 -0
  23. data/lib/sigma/reduced_transaction.rb +88 -0
  24. data/lib/sigma/secret_key.rb +119 -0
  25. data/lib/sigma/structs.rb +31 -0
  26. data/lib/sigma/token.rb +225 -0
  27. data/lib/sigma/transaction.rb +365 -0
  28. data/lib/sigma/tx_builder.rb +116 -0
  29. data/lib/sigma/util.rb +27 -0
  30. data/lib/sigma/wallet.rb +97 -0
  31. data/lib/sigma.rb +32 -0
  32. data/sigma.gemspec +20 -0
  33. data/tests/all.rb +44 -0
  34. data/tests/sigma/address_test.rb +45 -0
  35. data/tests/sigma/block_header_test.rb +35 -0
  36. data/tests/sigma/box_selection_test.rb +78 -0
  37. data/tests/sigma/constant_test.rb +57 -0
  38. data/tests/sigma/context_extension_test.rb +16 -0
  39. data/tests/sigma/contract_test.rb +39 -0
  40. data/tests/sigma/data_input_test.rb +38 -0
  41. data/tests/sigma/ergo_box_candidate_builder_test.rb +76 -0
  42. data/tests/sigma/ergo_box_test.rb +219 -0
  43. data/tests/sigma/ergo_state_context_test.rb +26 -0
  44. data/tests/sigma/ergo_tree_test.rb +66 -0
  45. data/tests/sigma/input_test.rb +41 -0
  46. data/tests/sigma/merkle_proof_test.rb +34 -0
  47. data/tests/sigma/nipopow_test.rb +100 -0
  48. data/tests/sigma/secret_key_test.rb +31 -0
  49. data/tests/sigma/token_test.rb +87 -0
  50. data/tests/sigma/transaction_test.rb +438 -0
  51. data/tests/sigma_test.rb +18 -0
  52. data/tests/test_seeds.rb +35 -0
  53. data/tests/test_utils.rb +11 -0
  54. metadata +174 -0
@@ -0,0 +1,70 @@
1
+ require 'ffi'
2
+ require_relative './util.rb'
3
+ require 'ffi-compiler/loader'
4
+
5
+ module Sigma
6
+ class Contract
7
+ extend FFI::Library
8
+ ffi_lib FFI::Compiler::Loader.find('csigma')
9
+ typedef :pointer, :error_pointer
10
+ attach_function :ergo_lib_contract_delete, [:pointer], :void
11
+ attach_function :ergo_lib_contract_eq, [:pointer, :pointer], :bool
12
+ attach_function :ergo_lib_contract_new, [:pointer, :pointer], :void
13
+ attach_function :ergo_lib_contract_compile, [:pointer, :pointer], :error_pointer
14
+ attach_function :ergo_lib_contract_pay_to_address, [:pointer, :pointer], :error_pointer
15
+ attach_function :ergo_lib_contract_ergo_tree, [:pointer, :pointer], :void
16
+
17
+ attr_accessor :pointer
18
+
19
+ def self.with_raw_pointer(contract_pointer)
20
+ init(contract_pointer)
21
+ end
22
+
23
+ def self.from_ergo_tree(ergo_tree)
24
+ pointer = FFI::MemoryPointer.new(:pointer)
25
+ ergo_lib_contract_new(ergo_tree.pointer, pointer)
26
+
27
+ init(pointer)
28
+ end
29
+
30
+ def self.compile_from_string(str)
31
+ pointer = FFI::MemoryPointer.new(:pointer)
32
+ error = ergo_lib_contract_compile(str, pointer)
33
+ Util.check_error!(error)
34
+
35
+ init(pointer)
36
+ end
37
+
38
+ def self.pay_to_address(address)
39
+ pointer = FFI::MemoryPointer.new(:pointer)
40
+ error = ergo_lib_contract_pay_to_address(address.pointer, pointer)
41
+ Util.check_error!(error)
42
+
43
+ init(pointer)
44
+ end
45
+
46
+ def get_ergo_tree
47
+ pointer = FFI::MemoryPointer.new(:pointer)
48
+ ergo_lib_contract_ergo_tree(self.pointer, pointer)
49
+ Sigma::ErgoTree.with_raw_pointer(pointer)
50
+ end
51
+
52
+ def ==(contract_two)
53
+ ergo_lib_contract_eq(self.pointer, contract_two.pointer)
54
+ end
55
+
56
+ private
57
+
58
+ def self.init(unread_pointer)
59
+ obj = self.new
60
+ obj_ptr = unread_pointer.get_pointer(0)
61
+
62
+ obj.pointer = FFI::AutoPointer.new(
63
+ obj_ptr,
64
+ method(:ergo_lib_contract_delete)
65
+ )
66
+ obj
67
+ end
68
+ end
69
+ end
70
+
@@ -0,0 +1,100 @@
1
+ require 'ffi'
2
+ require_relative './util.rb'
3
+ require 'ffi-compiler/loader'
4
+
5
+ module Sigma
6
+ class DataInput
7
+ extend FFI::Library
8
+ ffi_lib FFI::Compiler::Loader.find('csigma')
9
+ typedef :pointer, :error_pointer
10
+ attach_function :ergo_lib_data_input_new, [:pointer, :pointer], :void
11
+ attach_function :ergo_lib_data_input_box_id, [:pointer, :pointer], :void
12
+ attach_function :ergo_lib_data_input_delete, [:pointer], :void
13
+ attr_accessor :pointer
14
+
15
+ def self.with_box_id(box_id)
16
+ pointer = FFI::MemoryPointer.new(:pointer)
17
+ ergo_lib_data_input_new(box_id.pointer, pointer)
18
+ init(pointer)
19
+ end
20
+
21
+ def self.with_raw_pointer(pointer)
22
+ init(pointer)
23
+ end
24
+
25
+ def get_box_id
26
+ pointer = FFI::MemoryPointer.new(:pointer)
27
+ ergo_lib_data_input_new(self.pointer, pointer)
28
+ Sigma::BoxId.with_raw_pointer(pointer)
29
+ end
30
+
31
+ private
32
+
33
+ def self.init(unread_pointer)
34
+ obj = self.new
35
+ obj_ptr = unread_pointer.get_pointer(0)
36
+
37
+ obj.pointer = FFI::AutoPointer.new(
38
+ obj_ptr,
39
+ method(:ergo_lib_data_input_delete)
40
+ )
41
+ obj
42
+ end
43
+
44
+ end
45
+
46
+ class DataInputs
47
+ extend FFI::Library
48
+ ffi_lib FFI::Compiler::Loader.find('csigma')
49
+ typedef :pointer, :error_pointer
50
+ attach_function :ergo_lib_data_inputs_new, [:pointer], :void
51
+ attach_function :ergo_lib_data_inputs_delete, [:pointer], :void
52
+ attach_function :ergo_lib_data_inputs_add, [:pointer, :pointer], :void
53
+ attach_function :ergo_lib_data_inputs_len, [:pointer], :uint8
54
+ attach_function :ergo_lib_data_inputs_get, [:pointer, :uint8, :pointer], ReturnOption.by_value
55
+ attr_accessor :pointer
56
+
57
+ def self.with_raw_pointer(unread_pointer)
58
+ init(unread_pointer)
59
+ end
60
+
61
+ def self.create
62
+ pointer = FFI::MemoryPointer.new(:pointer)
63
+ ergo_lib_data_inputs_new(pointer)
64
+
65
+ init(pointer)
66
+ end
67
+
68
+ def len
69
+ ergo_lib_data_inputs_len(self.pointer)
70
+ end
71
+
72
+ def add(data_input)
73
+ ergo_lib_data_inputs_add(data_input.pointer, self.pointer)
74
+ end
75
+
76
+ def get(index)
77
+ pointer = FFI::MemoryPointer.new(:pointer)
78
+ res = ergo_lib_data_inputs_get(self.pointer, index, pointer)
79
+ Util.check_error!(res[:error])
80
+ if res[:is_some]
81
+ Sigma::DataInput.with_raw_pointer(pointer)
82
+ else
83
+ nil
84
+ end
85
+ end
86
+
87
+ private
88
+
89
+ def self.init(unread_pointer)
90
+ obj = self.new
91
+ obj_ptr = unread_pointer.get_pointer(0)
92
+
93
+ obj.pointer = FFI::AutoPointer.new(
94
+ obj_ptr,
95
+ method(:ergo_lib_data_inputs_delete)
96
+ )
97
+ obj
98
+ end
99
+ end
100
+ end
@@ -0,0 +1,35 @@
1
+ require 'ffi'
2
+
3
+ module Sigma
4
+ extend FFI::Library
5
+ typedef :pointer, :error_pointer
6
+
7
+ ADDRESS_TYPE_PREFIX_ENUM = enum :address_type_prefix,
8
+ [
9
+ :p2pk, 1,
10
+ :pay2sh,
11
+ :pay2s
12
+ ]
13
+
14
+ NETWORK_PREFIX_ENUM = enum :network_prefix,
15
+ [
16
+ :mainnet, 0,
17
+ :testnet, 16,
18
+ ]
19
+
20
+ REGISTER_ID_ENUM = enum :non_mandatory_register_id,
21
+ [
22
+ :r4, 4,
23
+ :r5,
24
+ :r6,
25
+ :r7,
26
+ :r8,
27
+ :r9
28
+ ]
29
+
30
+ NODE_SIDE_ENUM = enum :node_side,
31
+ [
32
+ :left, 0,
33
+ :right
34
+ ]
35
+ end