sigma_rb 0.1.3
Sign up to get free protection for your applications and to get access to all the features.
- 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,66 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'bundler/setup'
|
3
|
+
require 'test/unit'
|
4
|
+
|
5
|
+
require_relative '../../lib/sigma.rb'
|
6
|
+
require_relative '../test_utils.rb'
|
7
|
+
|
8
|
+
class Sigma::ErgoTree::Test < Test::Unit::TestCase
|
9
|
+
|
10
|
+
def test_encoding
|
11
|
+
base_16 = "100204a00b08cd021dde34603426402615658f1d970cfa7c7bd92ac81a8b16eeebff264d59ce4604ea02d192a39a8cc7a70173007301"
|
12
|
+
tree = Sigma::ErgoTree.from_base16_encoded_string(base_16)
|
13
|
+
assert_equal(base_16, tree.to_base16_encoded_string)
|
14
|
+
assert_nothing_raised do
|
15
|
+
tree.to_bytes
|
16
|
+
end
|
17
|
+
assert_nothing_raised do
|
18
|
+
tree.to_template_bytes
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_constant_length
|
23
|
+
base_16 = "100204a00b08cd021dde34603426402615658f1d970cfa7c7bd92ac81a8b16eeebff264d59ce4604ea02d192a39a8cc7a70173007301"
|
24
|
+
tree = Sigma::ErgoTree.from_base16_encoded_string(base_16)
|
25
|
+
assert_equal(2, tree.constants_length)
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_get_constant
|
29
|
+
base_16 = "100204a00b08cd021dde34603426402615658f1d970cfa7c7bd92ac81a8b16eeebff264d59ce4604ea02d192a39a8cc7a70173007301"
|
30
|
+
tree = Sigma::ErgoTree.from_base16_encoded_string(base_16)
|
31
|
+
assert_not_nil(tree.get_constant(0))
|
32
|
+
assert_not_nil(tree.get_constant(1))
|
33
|
+
assert_equal(nil, tree.get_constant(2))
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_with_constant
|
37
|
+
base_16 = "100204a00b08cd021dde34603426402615658f1d970cfa7c7bd92ac81a8b16eeebff264d59ce4604ea02d192a39a8cc7a70173007301"
|
38
|
+
tree = Sigma::ErgoTree.from_base16_encoded_string(base_16)
|
39
|
+
assert_equal(2, tree.constants_length)
|
40
|
+
constant = Sigma::Constant.with_i32(99)
|
41
|
+
tree.replace_constant(index: 0, constant: constant)
|
42
|
+
assert_equal(99, tree.get_constant(0).to_i32)
|
43
|
+
assert_equal(2, tree.constants_length)
|
44
|
+
end
|
45
|
+
|
46
|
+
def test_with_constant_out_of_bounds
|
47
|
+
base_16 = "100204a00b08cd021dde34603426402615658f1d970cfa7c7bd92ac81a8b16eeebff264d59ce4604ea02d192a39a8cc7a70173007301"
|
48
|
+
tree = Sigma::ErgoTree.from_base16_encoded_string(base_16)
|
49
|
+
assert_equal(2, tree.constants_length)
|
50
|
+
constant = Sigma::Constant.with_i32(99)
|
51
|
+
assert_raise do
|
52
|
+
tree.replace_constant(index: 3, constant: constant)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
def test_with_constant_type_mismatch
|
57
|
+
base_16 = "100204a00b08cd021dde34603426402615658f1d970cfa7c7bd92ac81a8b16eeebff264d59ce4604ea02d192a39a8cc7a70173007301"
|
58
|
+
tree = Sigma::ErgoTree.from_base16_encoded_string(base_16)
|
59
|
+
assert_equal(2, tree.constants_length)
|
60
|
+
constant = Sigma::Constant.with_i64(342423)
|
61
|
+
assert_raise do
|
62
|
+
tree.replace_constant(index: 0, constant: constant)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'bundler/setup'
|
3
|
+
require 'test/unit'
|
4
|
+
require 'json'
|
5
|
+
|
6
|
+
require_relative '../../lib/sigma.rb'
|
7
|
+
require_relative '../test_utils.rb'
|
8
|
+
|
9
|
+
class Sigma::Input::Test < Test::Unit::TestCase
|
10
|
+
# TODO
|
11
|
+
def test_input
|
12
|
+
# get_box_id
|
13
|
+
# get_spending_proof
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_inputs
|
17
|
+
# create
|
18
|
+
# len
|
19
|
+
# get
|
20
|
+
# add
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_prover_result
|
24
|
+
# to_bytes
|
25
|
+
# get_context_extension
|
26
|
+
# to_json
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_unsigned_input
|
30
|
+
# get_box_id
|
31
|
+
# get_context_extension
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_unsigned_inputs
|
35
|
+
# create
|
36
|
+
# len
|
37
|
+
# get
|
38
|
+
# add
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
@@ -0,0 +1,34 @@
|
|
1
|
+
|
2
|
+
require 'rubygems'
|
3
|
+
require 'bundler/setup'
|
4
|
+
require 'test/unit'
|
5
|
+
|
6
|
+
require_relative '../../lib/sigma.rb'
|
7
|
+
require_relative '../test_utils.rb'
|
8
|
+
|
9
|
+
include Sigma
|
10
|
+
|
11
|
+
class Sigma::MerkleProof::Test < Test::Unit::TestCase
|
12
|
+
def test_block_proof
|
13
|
+
json = {
|
14
|
+
leafData: "563b34b96e65788d767a10b0c2ce4a9ef5dcb9f7f7919781624870d56506dc5b",
|
15
|
+
levels: [
|
16
|
+
["274d105b42c2da3e03519865470ccef5072d389b153535ca7192fef4abf3b3ed", 0],
|
17
|
+
["c1887cee0c42318ac04dfa93b8ef6b40c2b53a83b0e111f91a16b0842166e76e", 0],
|
18
|
+
["58be076cd9ef596a739ec551cbb6b467b95044c05a80a66a7f256d4ebafd787f", 0]]
|
19
|
+
}.to_json
|
20
|
+
merkle_proof = MerkleProof.with_json(json)
|
21
|
+
root = "250063ac1cec3bf56f727f644f49b70515616afa6009857a29b1fe298441e69a"
|
22
|
+
assert(merkle_proof.valid(root))
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_miner_proof
|
26
|
+
json = {
|
27
|
+
leafData: "642c15c62553edd8fd9af9a6f754f3c7a6c03faacd0c9b9d5b7d11052c6c6fe8",
|
28
|
+
levels: [["39b79af823a92aa72ced2c6d9e7f7f4687de5b5af7fab0ad205d3e54bda3f3ae",1]]
|
29
|
+
}.to_json
|
30
|
+
merkle_proof = MerkleProof.with_json(json)
|
31
|
+
root = "74c851610658a40f5ae74aa3a4babd5751bd827a6ccc1fe069468ef487cb90a8"
|
32
|
+
assert(merkle_proof.valid(root))
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,100 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'bundler/setup'
|
3
|
+
require 'test/unit'
|
4
|
+
|
5
|
+
require_relative '../../lib/sigma.rb'
|
6
|
+
require_relative '../test_utils.rb'
|
7
|
+
|
8
|
+
include Sigma
|
9
|
+
|
10
|
+
class Sigma::NipopowProof::Test < Test::Unit::TestCase
|
11
|
+
def test_from_json
|
12
|
+
json = {
|
13
|
+
"header": {
|
14
|
+
"version": 1,
|
15
|
+
"id": "fa31f25f95c6ae9752392daa38f45c59e57593a4def26427cbda25747938d0a3",
|
16
|
+
"parentId": "99e19212a3dd1f3951464cbeb42e6bc447b646fe20e362653009be31b8ac756d",
|
17
|
+
"adProofsRoot": "7bd5d1c0df436e1e175df31a0272013ca93f2305a1bddea99d6b607ecf24fcac",
|
18
|
+
"stateRoot": "000000000000000000000000000000000000000000000000000000000000000000",
|
19
|
+
"transactionsRoot": "024562cb92738cbe9f5345b6d78b0272f4823692d2a16a11d80459c6d61f7860",
|
20
|
+
"timestamp": 0,
|
21
|
+
"nBits": 16842752,
|
22
|
+
"height": 8,
|
23
|
+
"extensionHash": "696a076089090b128c4856a17e2e23ed2788d074fe09e9975e2ee799f79e9743",
|
24
|
+
"powSolutions": {
|
25
|
+
"pk": "038b0f29a60fa8d7e1aeafbe512288a6c6bc696547bbf8247db23c95e83014513c",
|
26
|
+
"w": "03a0f176159c0895ee4cc64149ff3fa8a0ccf8cf15b884fb0bfaabc0bae2355b10",
|
27
|
+
"n": "8000000000000000",
|
28
|
+
"d": "21099867708510879837487107380901512552573946537697225889752133246839759121455"
|
29
|
+
},
|
30
|
+
"votes": "000000"
|
31
|
+
},
|
32
|
+
"interlinks": [
|
33
|
+
"e57483be3653936848f646ebd44e8ea7311d3d8fbc07b4c900a1b7edcc0b9a74",
|
34
|
+
"b2525defb4a3ab2f0ffdad6f37ff5a9e330eae2f00ec0c19f1aef234369bd408",
|
35
|
+
"99e19212a3dd1f3951464cbeb42e6bc447b646fe20e362653009be31b8ac756d"
|
36
|
+
],
|
37
|
+
"interlinksProof": {
|
38
|
+
"indices": [
|
39
|
+
{
|
40
|
+
"index": 0,
|
41
|
+
"digest": "e489b3601239d37b066aa53b6640758c9774334dde616d43fb8288e1fdb4f083"
|
42
|
+
},
|
43
|
+
{
|
44
|
+
"index": 1,
|
45
|
+
"digest": "76387dd1010dbfc7e318fb7989fe3013099ca0ed4fc6176471815ab116e3542a"
|
46
|
+
},
|
47
|
+
{
|
48
|
+
"index": 2,
|
49
|
+
"digest": "c61ce82b2b3bfe369daaa51e5df8070364d68e0cb9a3dfa6ebf79e3bfb89d9fa"
|
50
|
+
}
|
51
|
+
],
|
52
|
+
"proofs": [
|
53
|
+
{
|
54
|
+
"digest": "",
|
55
|
+
"side": 1
|
56
|
+
}
|
57
|
+
]
|
58
|
+
}
|
59
|
+
}.to_json
|
60
|
+
|
61
|
+
header_json = {
|
62
|
+
"version": 1,
|
63
|
+
"id": "fa31f25f95c6ae9752392daa38f45c59e57593a4def26427cbda25747938d0a3",
|
64
|
+
"parentId": "99e19212a3dd1f3951464cbeb42e6bc447b646fe20e362653009be31b8ac756d",
|
65
|
+
"adProofsRoot": "7bd5d1c0df436e1e175df31a0272013ca93f2305a1bddea99d6b607ecf24fcac",
|
66
|
+
"stateRoot": "000000000000000000000000000000000000000000000000000000000000000000",
|
67
|
+
"transactionsRoot": "024562cb92738cbe9f5345b6d78b0272f4823692d2a16a11d80459c6d61f7860",
|
68
|
+
"timestamp": 0,
|
69
|
+
"nBits": 16842752,
|
70
|
+
"height": 8,
|
71
|
+
"extensionHash": "696a076089090b128c4856a17e2e23ed2788d074fe09e9975e2ee799f79e9743",
|
72
|
+
"powSolutions": {
|
73
|
+
"pk": "038b0f29a60fa8d7e1aeafbe512288a6c6bc696547bbf8247db23c95e83014513c",
|
74
|
+
"w": "03a0f176159c0895ee4cc64149ff3fa8a0ccf8cf15b884fb0bfaabc0bae2355b10",
|
75
|
+
"n": "8000000000000000",
|
76
|
+
"d": "21099867708510879837487107380901512552573946537697225889752133246839759121455"
|
77
|
+
},
|
78
|
+
"votes": "000000"
|
79
|
+
}.to_json
|
80
|
+
|
81
|
+
popow = PoPowHeader.with_json(json)
|
82
|
+
assert_equal(3, popow.get_interlinks.len)
|
83
|
+
assert_equal(BlockHeader.with_json(header_json), popow.get_header)
|
84
|
+
#assert(popow.check_interlinks_proof)
|
85
|
+
end
|
86
|
+
|
87
|
+
def test_nipopow_proof
|
88
|
+
# TODO
|
89
|
+
# with_json
|
90
|
+
# is_better_than
|
91
|
+
# to_json
|
92
|
+
end
|
93
|
+
|
94
|
+
def test_nipopow_verifier
|
95
|
+
# TODO
|
96
|
+
# create
|
97
|
+
# best_chain
|
98
|
+
# process
|
99
|
+
end
|
100
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'bundler/setup'
|
3
|
+
require 'test/unit'
|
4
|
+
require 'json'
|
5
|
+
|
6
|
+
require_relative '../../lib/sigma.rb'
|
7
|
+
require_relative '../test_utils.rb'
|
8
|
+
|
9
|
+
class Sigma::SecretKey::Test < Test::Unit::TestCase
|
10
|
+
def test_secret_key
|
11
|
+
sk = Sigma::SecretKey.create
|
12
|
+
assert_nothing_raised do
|
13
|
+
address = sk.get_address
|
14
|
+
end
|
15
|
+
bytes = sk.to_bytes
|
16
|
+
sk_2 = Sigma::SecretKey.from_bytes(bytes)
|
17
|
+
assert_equal(bytes, sk_2.to_bytes)
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_secret_keys
|
21
|
+
sk = Sigma::SecretKey.create
|
22
|
+
sks = Sigma::SecretKeys.create
|
23
|
+
assert_equal(0, sks.len)
|
24
|
+
assert_equal(nil, sks.get(0))
|
25
|
+
sks.add(sk)
|
26
|
+
assert_equal(1, sks.len)
|
27
|
+
assert_equal(sk.to_bytes, sks.get(0).to_bytes)
|
28
|
+
assert_equal(nil, sks.get(1))
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
@@ -0,0 +1,87 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'bundler/setup'
|
3
|
+
require 'test/unit'
|
4
|
+
|
5
|
+
require_relative '../../lib/sigma.rb'
|
6
|
+
require_relative '../test_utils.rb'
|
7
|
+
|
8
|
+
class Sigma::Token::Test < Test::Unit::TestCase
|
9
|
+
def test_token_id_from_box_id
|
10
|
+
str = "e56847ed19b3dc6b72828fcfb992fdf7310828cf291221269b7ffc72fd66706e"
|
11
|
+
box_id = Sigma::BoxId.with_string(str)
|
12
|
+
token_id = Sigma::TokenId.with_box_id(box_id)
|
13
|
+
assert_nothing_raised do
|
14
|
+
token_id.to_base16_encoded_string
|
15
|
+
end
|
16
|
+
|
17
|
+
token_id_two = Sigma::TokenId.with_box_id(box_id)
|
18
|
+
assert_equal(token_id, token_id_two)
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_token_id_from_string
|
22
|
+
str = "19475d9a78377ff0f36e9826cec439727bea522f6ffa3bda32e20d2f8b3103ac"
|
23
|
+
token_id = Sigma::TokenId.from_base16_encoded_string(str)
|
24
|
+
assert_equal(str, token_id.to_base16_encoded_string)
|
25
|
+
|
26
|
+
token_id_two = Sigma::TokenId.from_base16_encoded_string(str)
|
27
|
+
assert_equal(token_id, token_id_two)
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_token_amount_from_int
|
31
|
+
amount = 12345678
|
32
|
+
token_amount = Sigma::TokenAmount.with_i64(amount)
|
33
|
+
assert_equal(amount, token_amount.to_i)
|
34
|
+
|
35
|
+
token_amount_two = Sigma::TokenAmount.with_i64(amount)
|
36
|
+
assert_equal(token_amount, token_amount_two)
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_token
|
40
|
+
str = "19475d9a78377ff0f36e9826cec439727bea522f6ffa3bda32e20d2f8b3103ac"
|
41
|
+
token_id = Sigma::TokenId.from_base16_encoded_string(str)
|
42
|
+
amount = 12345678
|
43
|
+
token_amount = Sigma::TokenAmount.with_i64(amount)
|
44
|
+
token = Sigma::Token.create(token_id: token_id, token_amount: token_amount)
|
45
|
+
new_token_id = token.get_id
|
46
|
+
new_token_amount = token.get_amount
|
47
|
+
assert_equal(str, new_token_id.to_base16_encoded_string)
|
48
|
+
assert_equal(token_id, new_token_id)
|
49
|
+
assert_equal(token_amount, new_token_amount)
|
50
|
+
|
51
|
+
token_two = Sigma::Token.create(token_id: token_id, token_amount: token_amount)
|
52
|
+
assert_equal(token, token_two)
|
53
|
+
end
|
54
|
+
|
55
|
+
def test_token_json
|
56
|
+
str = "19475d9a78377ff0f36e9826cec439727bea522f6ffa3bda32e20d2f8b3103ac"
|
57
|
+
token_id = Sigma::TokenId.from_base16_encoded_string(str)
|
58
|
+
amount = 12345678
|
59
|
+
token_amount = Sigma::TokenAmount.with_i64(amount)
|
60
|
+
token = Sigma::Token.create(token_id: token_id, token_amount: token_amount)
|
61
|
+
assert_nothing_raised do
|
62
|
+
token.to_json_eip12
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
def test_tokens
|
67
|
+
tokens = Sigma::Tokens.create
|
68
|
+
assert_equal(0, tokens.len)
|
69
|
+
assert_equal(nil, tokens.get(3))
|
70
|
+
str = "19475d9a78377ff0f36e9826cec439727bea522f6ffa3bda32e20d2f8b3103ac"
|
71
|
+
token_id = Sigma::TokenId.from_base16_encoded_string(str)
|
72
|
+
amount = 12345678
|
73
|
+
token_amount = Sigma::TokenAmount.with_i64(amount)
|
74
|
+
token = Sigma::Token.create(token_id: token_id, token_amount: token_amount)
|
75
|
+
|
76
|
+
255.times do |i|
|
77
|
+
tokens.add(token)
|
78
|
+
end
|
79
|
+
assert_equal(255, tokens.len)
|
80
|
+
assert_equal(tokens.get(254), token)
|
81
|
+
|
82
|
+
# 256 raises error
|
83
|
+
assert_raise do
|
84
|
+
tokens.add(token)
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|