Metadata-Version: 2.1
Name: bip32template
Version: 0.0.1
Summary: Reference implementation of BIP32 templates
Home-page: https://github.com/dgpv/bip32_template_python_implementation
License: UNKNOWN
Keywords: bitcoin bip32
Platform: UNKNOWN
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Classifier: License :: OSI Approved :: MIT License
Requires-Python: >=3.6
Description-Content-Type: text/markdown

# Python implementation of BIP32 path template parser finite state machine

(compatible with [micropython](https://micropython.org/))

This repository contains an implementation of specification of the parser for BIP32 path templates
described in [bip-path-templates.mediawiki](https://github.com/dgpv/bip32_template_parse_tplaplus_spec/blob/master/bip-path-templates.mediawiki)
and specified by TLA+ specification at [https://github.com/dgpv/bip32_template_parse_tplaplus_spec](https://github.com/dgpv/bip32_template_parse_tplaplus_spec)

The implementation is in `bip32template/__init__.py`

The tests is in `tests/`

To run tests on micropython, use `micropython_unittest.py` (you will need micropython-os.path module to run the tests)

to run static type checking, use `run_mypy.sh`

Example usage:

```python
>>> from bip32template import BIP32Template
>>> tpl=BIP32Template.parse('m/0h/[1-9,23]/*')
>>> tpl
BIP32Template([[(2147483648, 2147483648)], [(1, 9), (23, 23)], [(0, 2147483647)]], is_partial=False, hardened_marker="h")
>>> tpl.sections
[[(2147483648, 2147483648)], [(1, 9), (23, 23)], [(0, 2147483647)]]
>>> str(tpl)
'm/0h/[1-9,23]/*'
>>> str(BIP32Template(tpl.sections, hardened_marker="'", is_partial=True))
"0'/[1-9,23]/*"
>>> tpl.to_path() is None
True
>>> tpl.match([0x80000000, 3, 33])
True
>>> tpl.match([0x80000000, 99, 33])
False
>>> BIP32Template.parse('m/0/1/[2-3]', is_format_onlypath=True)
...
bip32template.BIP32TemplateExceptionUnexpectedCharacter: unexpected character at position 7
>>> ptpl = BIP32Template.parse('m/0h/1/2', is_format_onlypath=True)
>>> ptpl
BIP32Template([[(2147483648, 2147483648)], [(1, 1)], [(2, 2)]], is_partial=False, hardened_marker="h")
>>> ptpl.to_path()
[2147483648, 1, 2]
>>> tpl.match(ptpl.to_path())
True
```

## Authors and contributors

This implementation was created by Dmitry Petukhov (https://github.com/dgpv/)

## License

Released under MIT license.


