Compare commits
4 Commits
0dc42bc601
...
d02666fe31
Author | SHA1 | Date | |
---|---|---|---|
d02666fe31 | |||
98ed37d913 | |||
63dc9ac352 | |||
fc15e07470 |
|
@ -3,7 +3,7 @@ on:
|
||||||
push:
|
push:
|
||||||
tags:
|
tags:
|
||||||
- 'v[0-9]+.[0-9]+.[0-9]+'
|
- 'v[0-9]+.[0-9]+.[0-9]+'
|
||||||
paths-ignore: ["README.md", ".gitignore", "LICENSE", "ruff.toml"]
|
paths-ignore: ['README.md', '.gitignore', 'LICENSE', 'CONVENTIONS.md', 'ruff.toml']
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
Package:
|
Package:
|
||||||
|
|
|
@ -2,7 +2,7 @@ name: Run Python tests (through Pytest)
|
||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
paths-ignore: ["README.md", ".gitignore", "LICENSE", "ruff.toml"]
|
paths-ignore: ['README.md', '.gitignore', 'LICENSE', 'CONVENTIONS.md', 'ruff.toml']
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
Test:
|
Test:
|
||||||
|
|
|
@ -2,7 +2,7 @@ name: Verify Python project can be installed, loaded and have version checked
|
||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
paths-ignore: ["README.md", ".gitignore", "LICENSE", "ruff.toml"]
|
paths-ignore: ['README.md', '.gitignore', 'LICENSE', 'CONVENTIONS.md', 'ruff.toml']
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
Test:
|
Test:
|
||||||
|
|
17
CONVENTIONS.md
Normal file
17
CONVENTIONS.md
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
When contributing code to this project, you MUST follow these principles:
|
||||||
|
|
||||||
|
- Code should be easy to read and understand.
|
||||||
|
- Keep the code as simple as possible. Avoid unnecessary complexity.
|
||||||
|
- Use meaningful names for variables, functions, etc. Names should reveal intent.
|
||||||
|
- Functions should be small and do one thing well. They should not exceed a few lines.
|
||||||
|
- Function names should describe the action being performed.
|
||||||
|
- Only use comments when necessary, as they can become outdated. Instead, strive to make the code self-explanatory.
|
||||||
|
- When comments are used, they should add useful information that is not readily apparent from the code itself.
|
||||||
|
- Properly handle errors and exceptions to ensure the software's robustness.
|
||||||
|
- Use exceptions rather than error codes for handling errors.
|
||||||
|
- Consider security implications of the code. Implement security best practices to protect against vulnerabilities and attacks.
|
||||||
|
- Documentation should document semantics, not syntax.
|
||||||
|
- Prefer importing modules, not individual items from modules.
|
||||||
|
- Do not use f-strings in logging statements.
|
||||||
|
- Loop variables and walrus-expression-variables should be deleted when
|
||||||
|
unneeded to keep scope clean, and to avoid accidental use.
|
2
LICENSE
2
LICENSE
|
@ -1,6 +1,6 @@
|
||||||
MIT License
|
MIT License
|
||||||
|
|
||||||
Copyright (c) 2023-2024 Jon Michael Aanes
|
Copyright (c) 2023-2025 Jon Michael Aanes
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
|
47
README.md
47
README.md
|
@ -8,9 +8,12 @@
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
Utility library for parsing and processing the Partisia Blockchain ABI Format.
|
Unofficial utility library for parsing and processing the Partisia Blockchain ABI Format.
|
||||||
|
|
||||||
The format is specified here: [Partisia Blockchain's ABI format](https://partisiablockchain.gitlab.io/documentation/smart-contracts/smart-contract-binary-formats.html)..
|
The format is specified here: [Partisia Blockchain's ABI format](https://partisiablockchain.gitlab.io/documentation/smart-contracts/smart-contract-binary-formats.html).
|
||||||
|
|
||||||
|
This library is not officially associated with Partisia Blockchain nor Partisia
|
||||||
|
Group ApS.
|
||||||
|
|
||||||
## Example usage
|
## Example usage
|
||||||
|
|
||||||
|
@ -41,21 +44,11 @@ print(token_state['balances'][my_address])
|
||||||
> 213112
|
> 213112
|
||||||
```
|
```
|
||||||
|
|
||||||
## Legalese
|
|
||||||
|
|
||||||
This project is licensed under MIT Licence, see `LICENSE` for full text.
|
|
||||||
|
|
||||||
This project is not associated with, nor supported by any of:
|
|
||||||
|
|
||||||
- Partisia Applications A/S
|
|
||||||
- Partisia Infrastructure A/S
|
|
||||||
- Partisia Blockchain Foundation
|
|
||||||
|
|
||||||
Use at own risk.
|
|
||||||
|
|
||||||
## Dependencies
|
## Dependencies
|
||||||
|
|
||||||
All requirements can be installed easily using:
|
This project requires [Python](https://www.python.org/) 3.8 or newer.
|
||||||
|
|
||||||
|
All required libraries can be installed easily using:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
pip install -r requirements.txt
|
pip install -r requirements.txt
|
||||||
|
@ -66,12 +59,34 @@ Full list of requirements:
|
||||||
- [frozendict](https://pypi.org/project/frozendict/)
|
- [frozendict](https://pypi.org/project/frozendict/)
|
||||||
|
|
||||||
|
|
||||||
|
## Contributing
|
||||||
|
|
||||||
|
Feel free to submit pull requests. Please follow the [Code Conventions](CONVENTIONS.md) when doing so.
|
||||||
|
|
||||||
|
|
||||||
|
### Testing
|
||||||
|
|
||||||
|
Testing requires the [pytest](https://docs.pytest.org/en/stable/) library.
|
||||||
|
|
||||||
|
Run tests with the following command:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
pytest test
|
||||||
|
```
|
||||||
|
|
||||||
|
Test coverage can be run using the [`pytest-cov`](https://pypi.org/project/pytest-cov/) extension:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
pytest --cov=pbcabi test
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
||||||
```
|
```
|
||||||
MIT License
|
MIT License
|
||||||
|
|
||||||
Copyright (c) 2023-2024 Jon Michael Aanes
|
Copyright (c) 2023-2025 Jon Michael Aanes
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
|
|
@ -1,8 +1,11 @@
|
||||||
"""# Partisia Blockchain ABI client.
|
"""# Partisia Blockchain ABI client.
|
||||||
|
|
||||||
Utility library for parsing and processing the Partisia Blockchain ABI Format.
|
Unofficial utility library for parsing and processing the Partisia Blockchain ABI Format.
|
||||||
|
|
||||||
The format is specified here: [Partisia Blockchain's ABI format](https://partisiablockchain.gitlab.io/documentation/smart-contracts/smart-contract-binary-formats.html)..
|
The format is specified here: [Partisia Blockchain's ABI format](https://partisiablockchain.gitlab.io/documentation/smart-contracts/smart-contract-binary-formats.html).
|
||||||
|
|
||||||
|
This library is not officially associated with Partisia Blockchain nor Partisia
|
||||||
|
Group ApS.
|
||||||
|
|
||||||
## Example usage
|
## Example usage
|
||||||
|
|
||||||
|
@ -32,18 +35,6 @@ print(token_state['name'])
|
||||||
print(token_state['balances'][my_address])
|
print(token_state['balances'][my_address])
|
||||||
> 213112
|
> 213112
|
||||||
```
|
```
|
||||||
|
|
||||||
## Legalese
|
|
||||||
|
|
||||||
This project is licensed under MIT Licence, see `LICENSE` for full text.
|
|
||||||
|
|
||||||
This project is not associated with, nor supported by any of:
|
|
||||||
|
|
||||||
- Partisia Applications A/S
|
|
||||||
- Partisia Infrastructure A/S
|
|
||||||
- Partisia Blockchain Foundation
|
|
||||||
|
|
||||||
Use at own risk.
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
__all__ = ['model', 'binaryreader', '__version__']
|
__all__ = ['model', 'binaryreader', '__version__']
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
__version__ = '0.1.28'
|
__version__ = '0.1.29'
|
||||||
|
|
|
@ -237,6 +237,9 @@ class MapTypeSpec(TypeSpec):
|
||||||
type_key: TypeSpec
|
type_key: TypeSpec
|
||||||
type_value: TypeSpec
|
type_value: TypeSpec
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@enforce_typing.enforce_types
|
@enforce_typing.enforce_types
|
||||||
@dataclasses.dataclass(frozen=True, slots=True)
|
@dataclasses.dataclass(frozen=True, slots=True)
|
||||||
class AvlTreeTypeSpec(MapTypeSpec):
|
class AvlTreeTypeSpec(MapTypeSpec):
|
||||||
|
@ -252,8 +255,18 @@ class AvlTreeTypeSpec(MapTypeSpec):
|
||||||
'''
|
'''
|
||||||
type_key = TypeSpec.read_from(reader)
|
type_key = TypeSpec.read_from(reader)
|
||||||
type_value = TypeSpec.read_from(reader)
|
type_value = TypeSpec.read_from(reader)
|
||||||
type_spec = AvlTreeTypeSpec(type_key, type_value)
|
return AvlTreeTypeSpec(type_key, type_value)
|
||||||
return type_spec
|
|
||||||
|
def read_element_from(self, reader: BinaryReader, type_env,
|
||||||
|
mode: SerializeMode) -> 'AvlTreeId':
|
||||||
|
avl_tree_id = SIZE_SIMPLE_TYPE_SPEC.read_element_from(reader, type_env, mode)
|
||||||
|
return AvlTreeId(avl_tree_id, self)
|
||||||
|
|
||||||
|
@enforce_typing.enforce_types
|
||||||
|
@dataclasses.dataclass(frozen=True, slots=True)
|
||||||
|
class AvlTreeId:
|
||||||
|
avl_tree_id: int
|
||||||
|
type_spec: AvlTreeTypeSpec
|
||||||
|
|
||||||
@enforce_typing.enforce_types
|
@enforce_typing.enforce_types
|
||||||
@dataclasses.dataclass(frozen=True, slots=True)
|
@dataclasses.dataclass(frozen=True, slots=True)
|
||||||
|
@ -695,11 +708,13 @@ class ContractAbi:
|
||||||
return self.named_types_by_id[type_name].read_element_from(
|
return self.named_types_by_id[type_name].read_element_from(
|
||||||
rpc, self.named_types_by_idx, SerializeMode.RPC)
|
rpc, self.named_types_by_idx, SerializeMode.RPC)
|
||||||
|
|
||||||
def read_state(self, reader: BinaryReader):
|
def read_state(self, reader: BinaryReader | bytes, explicit_type: TypeSpec | None = None):
|
||||||
if not isinstance(reader, BinaryReader):
|
if not isinstance(reader, BinaryReader):
|
||||||
reader = BinaryReader(reader)
|
reader = BinaryReader(reader)
|
||||||
|
|
||||||
return self.state_type.read_element_from(reader, self.named_types_by_idx,
|
explicit_type = explicit_type or self.state_type
|
||||||
|
|
||||||
|
return explicit_type.read_element_from(reader, self.named_types_by_idx,
|
||||||
SerializeMode.STATE)
|
SerializeMode.STATE)
|
||||||
|
|
||||||
def get_fn_abi_from_shortname(self, shortname: int) -> FnAbi:
|
def get_fn_abi_from_shortname(self, shortname: int) -> FnAbi:
|
||||||
|
@ -707,7 +722,7 @@ class ContractAbi:
|
||||||
if derp.shortname == shortname:
|
if derp.shortname == shortname:
|
||||||
return derp
|
return derp
|
||||||
|
|
||||||
def read_invocation(self, reader: BinaryReader) -> ParsedInvocation:
|
def read_invocation(self, reader: BinaryReader | bytes) -> ParsedInvocation:
|
||||||
if not isinstance(reader, BinaryReader):
|
if not isinstance(reader, BinaryReader):
|
||||||
reader = BinaryReader(reader)
|
reader = BinaryReader(reader)
|
||||||
shortname = reader.readLeb128()
|
shortname = reader.readLeb128()
|
||||||
|
@ -730,7 +745,7 @@ class FileAbi:
|
||||||
contract: ContractAbi
|
contract: ContractAbi
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def read_from(reader: BinaryReader):
|
def read_from(reader: BinaryReader | bytes):
|
||||||
'''
|
'''
|
||||||
Deserialize 'FileAbi' from 'BinaryReader'.
|
Deserialize 'FileAbi' from 'BinaryReader'.
|
||||||
'''
|
'''
|
||||||
|
|
21
setup.py
21
setup.py
|
@ -13,9 +13,12 @@ PACKAGE_NAME = 'pbcabi'
|
||||||
PACKAGE_DESCRIPTION = """
|
PACKAGE_DESCRIPTION = """
|
||||||
# Partisia Blockchain ABI client.
|
# Partisia Blockchain ABI client.
|
||||||
|
|
||||||
Utility library for parsing and processing the Partisia Blockchain ABI Format.
|
Unofficial utility library for parsing and processing the Partisia Blockchain ABI Format.
|
||||||
|
|
||||||
The format is specified here: [Partisia Blockchain's ABI format](https://partisiablockchain.gitlab.io/documentation/smart-contracts/smart-contract-binary-formats.html)..
|
The format is specified here: [Partisia Blockchain's ABI format](https://partisiablockchain.gitlab.io/documentation/smart-contracts/smart-contract-binary-formats.html).
|
||||||
|
|
||||||
|
This library is not officially associated with Partisia Blockchain nor Partisia
|
||||||
|
Group ApS.
|
||||||
|
|
||||||
## Example usage
|
## Example usage
|
||||||
|
|
||||||
|
@ -45,22 +48,10 @@ print(token_state['name'])
|
||||||
print(token_state['balances'][my_address])
|
print(token_state['balances'][my_address])
|
||||||
> 213112
|
> 213112
|
||||||
```
|
```
|
||||||
|
|
||||||
## Legalese
|
|
||||||
|
|
||||||
This project is licensed under MIT Licence, see `LICENSE` for full text.
|
|
||||||
|
|
||||||
This project is not associated with, nor supported by any of:
|
|
||||||
|
|
||||||
- Partisia Applications A/S
|
|
||||||
- Partisia Infrastructure A/S
|
|
||||||
- Partisia Blockchain Foundation
|
|
||||||
|
|
||||||
Use at own risk.
|
|
||||||
""".strip()
|
""".strip()
|
||||||
|
|
||||||
PACKAGE_DESCRIPTION_SHORT = """
|
PACKAGE_DESCRIPTION_SHORT = """
|
||||||
Utility library for parsing and processing the Partisia Blockchain ABI Format.""".strip()
|
Unofficial utility library for parsing and processing the Partisia Blockchain ABI Format.""".strip()
|
||||||
|
|
||||||
|
|
||||||
def parse_version_file(text: str) -> str:
|
def parse_version_file(text: str) -> str:
|
||||||
|
|
Loading…
Reference in New Issue
Block a user