Compare commits
4 Commits
0dc42bc601
...
d02666fe31
Author | SHA1 | Date | |
---|---|---|---|
d02666fe31 | |||
98ed37d913 | |||
63dc9ac352 | |||
fc15e07470 |
|
@ -3,7 +3,7 @@ on:
|
|||
push:
|
||||
tags:
|
||||
- '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:
|
||||
Package:
|
||||
|
|
|
@ -2,7 +2,7 @@ name: Run Python tests (through Pytest)
|
|||
|
||||
on:
|
||||
push:
|
||||
paths-ignore: ["README.md", ".gitignore", "LICENSE", "ruff.toml"]
|
||||
paths-ignore: ['README.md', '.gitignore', 'LICENSE', 'CONVENTIONS.md', 'ruff.toml']
|
||||
|
||||
jobs:
|
||||
Test:
|
||||
|
|
|
@ -2,7 +2,7 @@ name: Verify Python project can be installed, loaded and have version checked
|
|||
|
||||
on:
|
||||
push:
|
||||
paths-ignore: ["README.md", ".gitignore", "LICENSE", "ruff.toml"]
|
||||
paths-ignore: ['README.md', '.gitignore', 'LICENSE', 'CONVENTIONS.md', 'ruff.toml']
|
||||
|
||||
jobs:
|
||||
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
|
||||
|
||||
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
|
||||
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
|
||||
|
||||
|
@ -41,21 +44,11 @@ print(token_state['balances'][my_address])
|
|||
> 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
|
||||
|
||||
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
|
||||
pip install -r requirements.txt
|
||||
|
@ -66,12 +59,34 @@ Full list of requirements:
|
|||
- [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
|
||||
|
||||
```
|
||||
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
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
|
|
|
@ -1,8 +1,11 @@
|
|||
"""# 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
|
||||
|
||||
|
@ -32,18 +35,6 @@ print(token_state['name'])
|
|||
print(token_state['balances'][my_address])
|
||||
> 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__']
|
||||
|
|
|
@ -1 +1 @@
|
|||
__version__ = '0.1.28'
|
||||
__version__ = '0.1.29'
|
||||
|
|
|
@ -237,6 +237,9 @@ class MapTypeSpec(TypeSpec):
|
|||
type_key: TypeSpec
|
||||
type_value: TypeSpec
|
||||
|
||||
|
||||
|
||||
|
||||
@enforce_typing.enforce_types
|
||||
@dataclasses.dataclass(frozen=True, slots=True)
|
||||
class AvlTreeTypeSpec(MapTypeSpec):
|
||||
|
@ -252,8 +255,18 @@ class AvlTreeTypeSpec(MapTypeSpec):
|
|||
'''
|
||||
type_key = TypeSpec.read_from(reader)
|
||||
type_value = TypeSpec.read_from(reader)
|
||||
type_spec = AvlTreeTypeSpec(type_key, type_value)
|
||||
return type_spec
|
||||
return AvlTreeTypeSpec(type_key, type_value)
|
||||
|
||||
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
|
||||
@dataclasses.dataclass(frozen=True, slots=True)
|
||||
|
@ -695,11 +708,13 @@ class ContractAbi:
|
|||
return self.named_types_by_id[type_name].read_element_from(
|
||||
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):
|
||||
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)
|
||||
|
||||
def get_fn_abi_from_shortname(self, shortname: int) -> FnAbi:
|
||||
|
@ -707,7 +722,7 @@ class ContractAbi:
|
|||
if derp.shortname == shortname:
|
||||
return derp
|
||||
|
||||
def read_invocation(self, reader: BinaryReader) -> ParsedInvocation:
|
||||
def read_invocation(self, reader: BinaryReader | bytes) -> ParsedInvocation:
|
||||
if not isinstance(reader, BinaryReader):
|
||||
reader = BinaryReader(reader)
|
||||
shortname = reader.readLeb128()
|
||||
|
@ -730,7 +745,7 @@ class FileAbi:
|
|||
contract: ContractAbi
|
||||
|
||||
@staticmethod
|
||||
def read_from(reader: BinaryReader):
|
||||
def read_from(reader: BinaryReader | bytes):
|
||||
'''
|
||||
Deserialize 'FileAbi' from 'BinaryReader'.
|
||||
'''
|
||||
|
|
21
setup.py
21
setup.py
|
@ -13,9 +13,12 @@ PACKAGE_NAME = 'pbcabi'
|
|||
PACKAGE_DESCRIPTION = """
|
||||
# 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
|
||||
|
||||
|
@ -45,22 +48,10 @@ print(token_state['name'])
|
|||
print(token_state['balances'][my_address])
|
||||
> 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()
|
||||
|
||||
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:
|
||||
|
|
Loading…
Reference in New Issue
Block a user