Skip to content

Commit c2f6a02

Browse files
committed
Add forging/encoding for smart rollup state hash
1 parent 3e3c27e commit c2f6a02

File tree

4 files changed

+70
-59
lines changed

4 files changed

+70
-59
lines changed

CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
# Changelog
22

3+
## Unreleased
4+
5+
### Added
6+
7+
* Forging/encoding for Smart Rollup State hash
8+
39
## [3.11.0](https://github.com/baking-bad/pytezos/compare/3.10.3...3.11.0) (2024-02-05)
410

511
### Added

Makefile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,8 @@ install: ## Install project dependencies
3131
poetry install \
3232
`if [ "${DEV}" = "0" ]; then echo "--no-dev"; fi`
3333

34-
lint: ## Lint with all tools
35-
make isort black ruff mypy
34+
## Lint with all tools
35+
lint: isort black ruff mypy
3636

3737
test: ## Run test suite
3838
# FIXME: https://github.com/pytest-dev/pytest-xdist/issues/385#issuecomment-1177147322

src/pytezos/crypto/encoding.py

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,7 @@
22

33
import base58
44

5-
6-
def tb(l):
7-
return b''.join(map(lambda x: x.to_bytes(1, 'big'), l))
8-
5+
tb = bytes
96

107
base58_encodings = [
118
# Encoded | Decoded |
@@ -22,8 +19,9 @@ def tb(l):
2219
(b"tz4", 36, tb([6, 161, 16]), 20, "BLS-MinPk"),
2320
(b"KT1", 36, tb([2, 90, 121]), 20, "originated address"),
2421
(b"txr1", 37, tb([1, 128, 120, 31]), 20, "tx_rollup_l2_address"),
25-
(b"sr1", 36, tb([6, 124, 117]), 20, "address prefix for originated smart rollup"),
26-
(b"src1", 54, tb([17, 165, 134, 138]), 32, "address prefix for smart rollup commitment"),
22+
(b"sr1", 36, tb([6, 124, 117]), 20, "originated smart rollup address"),
23+
(b"src1", 54, tb([17, 165, 134, 138]), 32, "smart rollup commitment hash"),
24+
(b"srs1", 54, tb([17, 165, 235, 240]), 32, "smart rollup state hash"),
2725
(b"id", 30, tb([153, 103]), 16, "cryptobox public key hash"),
2826
(b'expr', 54, tb([13, 44, 64, 27]), 32, u'script expression'),
2927
(b"edsk", 54, tb([13, 15, 58, 7]), 32, "ed25519 seed"),
Lines changed: 58 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
from unittest import TestCase
2-
1+
import pytest
32
from parameterized import parameterized # type: ignore
43

54
from pytezos.crypto.encoding import base58_decode
@@ -11,58 +10,63 @@
1110
from pytezos.crypto.encoding import scrub_input
1211

1312

14-
class TestEncoding(TestCase):
15-
@parameterized.expand(
13+
class TestEncoding:
14+
@pytest.mark.parametrize(
15+
('base58', 'prefix'),
1616
[
17-
(b'NetXdQprcVkpaWU', b'Net'),
18-
(b'BKjWN8ALguCJ3oAjzMjZCNcFfUf1p9BfVAwYiVHs1QW3yMB9RNb', b'B'),
19-
(b'oop1fbAVi2ZwEt3vpu4uKpYGbbxumyMBSWwWf9qbByeM4JYAu92', b'o'),
20-
(b'LLoabcny4pVg1k6x3AktnNhwe1KSVBZh5Di45JeZPhUCmCu5Xj6ND', b'LLo'),
21-
(b'PtCJ7pwoxe8JasnHY8YonnLYjcVHmhiARPJvqcC6VfHT5s8k8sY', b'P'),
22-
(b'CoUeRwFZbV7NaAYRTz6n4ZLUkwiWcm7oKYdKCGcsEYHgVxSQxa4h', b'Co'),
23-
(b'tz1eKkWU5hGtfLUiqNpucHrXymm83z3DG9Sq', b'tz1'),
24-
(b'tz28YZoayJjVz2bRgGeVjxE8NonMiJ3r2Wdu', b'tz2'),
25-
(b'tz3agP9LGe2cXmKQyYn6T68BHKjjktDbbSWX', b'tz3'),
26-
(b'txr1YNMEtkj5Vkqsbdmt7xaxBTMRZjzS96UAi', b'txr1'),
27-
(b'edpku976gpuAD2bXyx1XGraeKuCo1gUZ3LAJcHM12W1ecxZwoiu22R', b'edpk'),
28-
(b'sppk7aMNM3xh14haqEyaxNjSt7hXanCDyoWtRcxF8wbtya859ak6yZT', b'sppk'),
29-
(b'p2pk679D18uQNkdjpRxuBXL5CqcDKTKzsiXVtc9oCUT6xb82zQmgUks', b'p2pk'),
30-
(b'edsk3nM41ygNfSxVU4w1uAW3G9EnTQEB5rjojeZedLTGmiGRcierVv', b'edsk'),
31-
(b'spsk1zkqrmst1yg2c4xi3crWcZPqgdc9KtPtb9SAZWYHAdiQzdHy7j', b'spsk'),
32-
(b'p2sk3PM77YMR99AvD3fSSxeLChMdiQ6kkEzqoPuSwQqhPsh29irGLC', b'p2sk'),
33-
(b'edesk1zxaPJkhNGSzgZDDSphvPzSNrnbmqes8xzUrw1wdFxdRT7ePiQz8D2Q18fMjn6fC9ZRS2rUbg8d8snxxznE', b'edesk'),
34-
(b'spesk21cruoqtYmxfq5fpkXiZZRLRw4vh7VFJauGCAgHxZf3q6Q5LTv9m9dnMxyVjna6RzWQL45q4ppGLh97xZpV', b'spesk'),
35-
(b'p2esk1rqdHRPz4xQh8uP8JaWSVnGFTKxkh2utdjK5CPDTXAzzh5sXnnobLkGrXEZzGhCKFDSjv8Ggrjt7PnobRzs', b'p2esk'),
36-
(
37-
b'edsigtzLBGCyadERX1QsYHKpwnxSxEYQeGLnJGsSkHEsyY8vB5GcNdnvzUZDdFevJK7YZQ2ujwVjvQZn62ahCEcy74AwtbA8HuN',
38-
b'edsig',
39-
),
17+
('NetXdQprcVkpaWU', 'Net'),
18+
('BKjWN8ALguCJ3oAjzMjZCNcFfUf1p9BfVAwYiVHs1QW3yMB9RNb', 'B'),
19+
('oop1fbAVi2ZwEt3vpu4uKpYGbbxumyMBSWwWf9qbByeM4JYAu92', 'o'),
20+
('LLoabcny4pVg1k6x3AktnNhwe1KSVBZh5Di45JeZPhUCmCu5Xj6ND', 'LLo'),
21+
('PtCJ7pwoxe8JasnHY8YonnLYjcVHmhiARPJvqcC6VfHT5s8k8sY', 'P'),
22+
('CoUeRwFZbV7NaAYRTz6n4ZLUkwiWcm7oKYdKCGcsEYHgVxSQxa4h', 'Co'),
23+
('tz1eKkWU5hGtfLUiqNpucHrXymm83z3DG9Sq', 'tz1'),
24+
('tz28YZoayJjVz2bRgGeVjxE8NonMiJ3r2Wdu', 'tz2'),
25+
('tz3agP9LGe2cXmKQyYn6T68BHKjjktDbbSWX', 'tz3'),
26+
('txr1YNMEtkj5Vkqsbdmt7xaxBTMRZjzS96UAi', 'txr1'),
27+
('edpku976gpuAD2bXyx1XGraeKuCo1gUZ3LAJcHM12W1ecxZwoiu22R', 'edpk'),
28+
('sppk7aMNM3xh14haqEyaxNjSt7hXanCDyoWtRcxF8wbtya859ak6yZT', 'sppk'),
29+
('p2pk679D18uQNkdjpRxuBXL5CqcDKTKzsiXVtc9oCUT6xb82zQmgUks', 'p2pk'),
30+
('edsk3nM41ygNfSxVU4w1uAW3G9EnTQEB5rjojeZedLTGmiGRcierVv', 'edsk'),
31+
('spsk1zkqrmst1yg2c4xi3crWcZPqgdc9KtPtb9SAZWYHAdiQzdHy7j', 'spsk'),
32+
('p2sk3PM77YMR99AvD3fSSxeLChMdiQ6kkEzqoPuSwQqhPsh29irGLC', 'p2sk'),
33+
('edesk1zxaPJkhNGSzgZDDSphvPzSNrnbmqes8xzUrw1wdFxdRT7ePiQz8D2Q18fMjn6fC9ZRS2rUbg8d8snxxznE', 'edesk'),
34+
('spesk21cruoqtYmxfq5fpkXiZZRLRw4vh7VFJauGCAgHxZf3q6Q5LTv9m9dnMxyVjna6RzWQL45q4ppGLh97xZpV', 'spesk'),
35+
('p2esk1rqdHRPz4xQh8uP8JaWSVnGFTKxkh2utdjK5CPDTXAzzh5sXnnobLkGrXEZzGhCKFDSjv8Ggrjt7PnobRzs', 'p2esk'),
4036
(
41-
b'spsig1RriZtYADyRhyNoQMa6AiPuJJ7AUDcrxWZfgqexzgANqMv4nXs6qsXDoXcoChBgmCcn2t7Y3EkJaVRuAmNh2cDDxWTdmsz',
42-
b'spsig',
37+
'edsigtzLBGCyadERX1QsYHKpwnxSxEYQeGLnJGsSkHEsyY8vB5GcNdnvzUZDdFevJK7YZQ2ujwVjvQZn62ahCEcy74AwtbA8HuN',
38+
'edsig',
4339
),
4440
(
45-
b'sigUdRdXYCXW14xqT8mFTMkX4wSmDMBmcW1Vuz1vanGWqYTmuBodueUHGPUsbxgn73AroNwpEBHwPdhXUswzmvCzquiqtcHC',
46-
b'sig',
41+
'spsig1RriZtYADyRhyNoQMa6AiPuJJ7AUDcrxWZfgqexzgANqMv4nXs6qsXDoXcoChBgmCcn2t7Y3EkJaVRuAmNh2cDDxWTdmsz',
42+
'spsig',
4743
),
48-
]
44+
('sigUdRdXYCXW14xqT8mFTMkX4wSmDMBmcW1Vuz1vanGWqYTmuBodueUHGPUsbxgn73AroNwpEBHwPdhXUswzmvCzquiqtcHC', 'sig'),
45+
('sr1JZsZT5u27MUQXeTh1aHqZBo8NvyxRKnyv', 'sr1'),
46+
('src13FVgJq88nGcd3xmjtPr4j3wq9VJGkGZ3LaVKZ3PUT8dKbByviq', 'src1'),
47+
('srs1257rrkFCsjuDS5enYG37uSas1J25daCaMQ2y5gPwwtoy8FqvDP', 'srs1'),
48+
],
4949
)
50-
def test_b58_decode_encode(self, string, prefix):
51-
data = base58_decode(string)
52-
result = base58_encode(data, prefix)
53-
self.assertEqual(string, result)
50+
def test_b58_decode_encode(self, base58: str, prefix: str):
51+
expected: bytes = base58.encode()
52+
decoded: bytes = base58_decode(expected)
53+
print(decoded.hex())
54+
re_encoded = base58_encode(decoded, prefix.encode())
55+
assert re_encoded == expected
5456

55-
@parameterized.expand(
57+
@pytest.mark.parametrize(
58+
('input_data', 'expected'),
5659
[
5760
('test', b'test'),
5861
(b'test', b'test'),
5962
('0x74657374', b'test'),
60-
]
63+
],
6164
)
6265
def test_scrub_input(self, input_data, expected):
63-
self.assertEqual(expected, scrub_input(input_data))
66+
assert scrub_input(input_data) == expected
6467

65-
@parameterized.expand(
68+
@pytest.mark.parametrize(
69+
('value', 'expected'),
6670
[
6771
('tz1eKkWU5hGtfLUiqNpucHrXymm83z3DG9Sq', True),
6872
('tz28YZoayJjVz2bRgGeVjxE8NonMiJ3r2Wdu', True),
@@ -71,12 +75,13 @@ def test_scrub_input(self, input_data, expected):
7175
('KT1ExvG3EjTrvDcAU7EqLNb77agPa5u6KvnY', False),
7276
('qwerty', False),
7377
('tz1eKkWU5hGtfLUiq', False),
74-
]
78+
],
7579
)
7680
def test_is_pkh(self, value, expected):
77-
self.assertEqual(expected, is_pkh(value))
81+
assert is_pkh(value) == expected
7882

79-
@parameterized.expand(
83+
@pytest.mark.parametrize(
84+
('value', 'expected'),
8085
[
8186
('tz1eKkWU5hGtfLUiqNpucHrXymm83z3DG9Sq', False),
8287
('tz28YZoayJjVz2bRgGeVjxE8NonMiJ3r2Wdu', False),
@@ -85,12 +90,13 @@ def test_is_pkh(self, value, expected):
8590
('KT1ExvG3EjTrvDcAU7EqLNb77agPa5u6KvnY', False),
8691
('qwerty', False),
8792
('tz1eKkWU5hGtfLUiq', False),
88-
]
93+
],
8994
)
9095
def test_is_l2_pkh(self, value, expected):
91-
self.assertEqual(expected, is_l2_pkh(value))
96+
assert is_l2_pkh(value) == expected
9297

93-
@parameterized.expand(
98+
@pytest.mark.parametrize(
99+
('value', 'expected'),
94100
[
95101
(
96102
'edsigtzLBGCyadERX1QsYHKpwnxSxEYQeGLnJGsSkHEsyY8vB5GcNdnvzUZDdFevJK7YZQ2ujwVjvQZn62ahCEcy74AwtbA8HuN',
@@ -103,16 +109,17 @@ def test_is_l2_pkh(self, value, expected):
103109
('sigUdRdXYCXW14xqT8mFTMkX4wSmDMBmcW1Vuz1vanGWqYTmuBodueUHGPUsbxgn73AroNwpEBHwPdhXUswzmvCzquiqtcHC', True),
104110
('qwerty', False),
105111
('sigUdRdXYCXW14xqT8mFTMkX4wSmDMBmcW1Vuz1vanGWqYT', False),
106-
]
112+
],
107113
)
108114
def test_is_sig(self, value, expected):
109-
self.assertEqual(expected, is_sig(value))
115+
assert is_sig(value) == expected
110116

111-
@parameterized.expand(
117+
@pytest.mark.parametrize(
118+
('value', 'expected'),
112119
[
113120
('BLrbVv8rUfkpDZZ6efByhgjyDgPUFeKAfTMq8mWPmjXb9c5m8LJ', True),
114121
('qwerty', False),
115-
]
122+
],
116123
)
117124
def test_is_bh(self, value, expected):
118-
self.assertEqual(expected, is_bh(value))
125+
assert is_bh(value) == expected

0 commit comments

Comments
 (0)