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.
- checksums.yaml +7 -0
- data/LICENSE +21 -0
- data/README.md +9 -0
- data/ext/Rakefile +7 -0
- data/ext/csigma.c +5 -0
- data/lib/sigma/address.rb +73 -0
- data/lib/sigma/block_header.rb +197 -0
- data/lib/sigma/box_selection.rb +105 -0
- data/lib/sigma/byte_array.rb +96 -0
- data/lib/sigma/constant.rb +117 -0
- data/lib/sigma/context_extension.rb +47 -0
- data/lib/sigma/contract.rb +70 -0
- data/lib/sigma/data_input.rb +100 -0
- data/lib/sigma/enums.rb +35 -0
- data/lib/sigma/ergo_box.rb +556 -0
- data/lib/sigma/ergo_box_candidate_builder.rb +123 -0
- data/lib/sigma/ergo_state_context.rb +41 -0
- data/lib/sigma/ergo_tree.rb +111 -0
- data/lib/sigma/input.rb +249 -0
- data/lib/sigma/merkle_proof.rb +79 -0
- data/lib/sigma/nipopow.rb +155 -0
- data/lib/sigma/pre_header.rb +38 -0
- data/lib/sigma/reduced_transaction.rb +88 -0
- data/lib/sigma/secret_key.rb +119 -0
- data/lib/sigma/structs.rb +31 -0
- data/lib/sigma/token.rb +225 -0
- data/lib/sigma/transaction.rb +365 -0
- data/lib/sigma/tx_builder.rb +116 -0
- data/lib/sigma/util.rb +27 -0
- data/lib/sigma/wallet.rb +97 -0
- data/lib/sigma.rb +32 -0
- data/sigma.gemspec +20 -0
- data/tests/all.rb +44 -0
- data/tests/sigma/address_test.rb +45 -0
- data/tests/sigma/block_header_test.rb +35 -0
- data/tests/sigma/box_selection_test.rb +78 -0
- data/tests/sigma/constant_test.rb +57 -0
- data/tests/sigma/context_extension_test.rb +16 -0
- data/tests/sigma/contract_test.rb +39 -0
- data/tests/sigma/data_input_test.rb +38 -0
- data/tests/sigma/ergo_box_candidate_builder_test.rb +76 -0
- data/tests/sigma/ergo_box_test.rb +219 -0
- data/tests/sigma/ergo_state_context_test.rb +26 -0
- data/tests/sigma/ergo_tree_test.rb +66 -0
- data/tests/sigma/input_test.rb +41 -0
- data/tests/sigma/merkle_proof_test.rb +34 -0
- data/tests/sigma/nipopow_test.rb +100 -0
- data/tests/sigma/secret_key_test.rb +31 -0
- data/tests/sigma/token_test.rb +87 -0
- data/tests/sigma/transaction_test.rb +438 -0
- data/tests/sigma_test.rb +18 -0
- data/tests/test_seeds.rb +35 -0
- data/tests/test_utils.rb +11 -0
- 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
|
data/lib/sigma/enums.rb
ADDED
@@ -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
|