# py-immutablex
 `0xF610975E70674b7b6429da6266a1a5d8C1C99238`
A Python library for interacting with the [Immutable X](https://www.immutable.com/) API. This library provides tools to derive Stark keys from Ethereum keys, register users, perform transfers, and more—aiming to eventually cover all Immutable X API resources.
[](https://badge.fury.io/py/py-immutablex) [](https://opensource.org/licenses/MIT) 
## Features
- Derive Stark keys from Ethereum private keys for Immutable X.
- Register users on Immutable X with Ethereum and Stark signatures.
- Perform transfers (e.g., ETH) using the Immutable X API.
- (In progress) Full coverage of Immutable X API endpoints: assets, orders, trades, balances, and more.
## Installation
Install via pip:
```bash
pip install py-immutablex
```
## Quickstart
Here’s how to initialize the client and perform a transfer:
```python
from py_immutablex import IMXClient
# Initialize with your Ethereum private key
client = IMXClient('0xYourEthereumPrivateKeyHere')
# Transfer 1 ETH (in wei) to another address
transfer_id = client.transfer(
transfer_to='0xRecipientAddress',
token='ETH',
amount='1000000000000000000' # 1 ETH in wei
)
print(f'Transfer ID: {transfer_id}')
```
## Prerequisites
- Python 3.7+
- An Ethereum private key (keep it secure!)
- Dependencies (installed automatically via pip):
- requests
- bip32
- eth-account
- starkware-crypto-signature
## Development Status
This library is under active development. Current focus:
- Robust key derivation and user registration.
- Transfer functionality.
Planned features:
- Full Immutable X API support (assets, orders, trades, etc.).
- Comprehensive error handling and logging.
- Unit tests and CI/CD.
Check the [Issues](https://github.com/luizrrodrigues/py-immutablex/issues) tab for progress or to request features!
## Contributing
Contributions are welcome! Fork the repo, create a branch, and submit a pull request. See CONTRIBUTING.md for details.
1. Fork the repo.
2. Install dependencies: pip install -r requirements.txt
3. Run tests (WIP): pytest
4. Submit a PR!
## License
This project is licensed under the MIT License - see the LICENSE file for details.
## Acknowledgments
- Built with inspiration from the Immutable X developer community.
-----
Questions? Bugs? Open an issue or reach out: [@luizrrodrigues](https://github.com/luizrrodrigues).
Raw data
{
"_id": null,
"home_page": "https://github.com/luizrrodrigues/py-immutablex",
"name": "py-immutablex",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.7",
"maintainer_email": null,
"keywords": "immutablex blockchain starknet ethereum python",
"author": "Luiz Ricardo Rodrigues",
"author_email": "trinix@luizrrodrigues.com.br",
"download_url": "https://files.pythonhosted.org/packages/74/f9/6d784c043fedf3f56f5ac9afc96e885fefb0a61044ab2b33bbe7e647f011/py_immutablex-0.1.0.tar.gz",
"platform": null,
"description": "# py-immutablex\n\n `0xF610975E70674b7b6429da6266a1a5d8C1C99238`\n\nA Python library for interacting with the [Immutable X](https://www.immutable.com/) API. This library provides tools to derive Stark keys from Ethereum keys, register users, perform transfers, and more\u2014aiming to eventually cover all Immutable X API resources.\n\n[](https://badge.fury.io/py/py-immutablex) [](https://opensource.org/licenses/MIT) \n\n## Features\n- Derive Stark keys from Ethereum private keys for Immutable X.\n- Register users on Immutable X with Ethereum and Stark signatures.\n- Perform transfers (e.g., ETH) using the Immutable X API.\n- (In progress) Full coverage of Immutable X API endpoints: assets, orders, trades, balances, and more.\n\n## Installation\n\nInstall via pip:\n\n```bash\npip install py-immutablex\n```\n\n## Quickstart\n\nHere\u2019s how to initialize the client and perform a transfer:\n\n```python\nfrom py_immutablex import IMXClient\n\n# Initialize with your Ethereum private key\nclient = IMXClient('0xYourEthereumPrivateKeyHere')\n\n# Transfer 1 ETH (in wei) to another address\ntransfer_id = client.transfer(\n transfer_to='0xRecipientAddress',\n token='ETH',\n amount='1000000000000000000' # 1 ETH in wei\n)\nprint(f'Transfer ID: {transfer_id}')\n```\n\n## Prerequisites\n\n- Python 3.7+\n- An Ethereum private key (keep it secure!)\n- Dependencies (installed automatically via pip):\n - requests\n - bip32\n - eth-account\n - starkware-crypto-signature\n\n## Development Status\n\nThis library is under active development. Current focus:\n- Robust key derivation and user registration.\n- Transfer functionality.\n\nPlanned features:\n- Full Immutable X API support (assets, orders, trades, etc.).\n- Comprehensive error handling and logging.\n- Unit tests and CI/CD.\n\nCheck the [Issues](https://github.com/luizrrodrigues/py-immutablex/issues) tab for progress or to request features!\n\n## Contributing\n\nContributions are welcome! Fork the repo, create a branch, and submit a pull request. See CONTRIBUTING.md for details.\n1. Fork the repo.\n2. Install dependencies: pip install -r requirements.txt\n3. Run tests (WIP): pytest\n4. Submit a PR!\n\n## License\n\nThis project is licensed under the MIT License - see the LICENSE file for details.\n\n## Acknowledgments\n- Built with inspiration from the Immutable X developer community.\n\n-----\n\nQuestions? Bugs? Open an issue or reach out: [@luizrrodrigues](https://github.com/luizrrodrigues).\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "A Python library for interacting with the Immutable X API",
"version": "0.1.0",
"project_urls": {
"Homepage": "https://github.com/luizrrodrigues/py-immutablex"
},
"split_keywords": [
"immutablex",
"blockchain",
"starknet",
"ethereum",
"python"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "0a56ff04502f0b712ed7046ab873eae9502c87cc9a4467f1e619285773f4c8d9",
"md5": "66b4a2fa45edd5ca919b443c400f2bb9",
"sha256": "512c33a6296bb72ad6dde3c4feb0ace176b46e2383fbf411080c71626b419693"
},
"downloads": -1,
"filename": "py_immutablex-0.1.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "66b4a2fa45edd5ca919b443c400f2bb9",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.7",
"size": 9636,
"upload_time": "2025-02-24T22:53:52",
"upload_time_iso_8601": "2025-02-24T22:53:52.746186Z",
"url": "https://files.pythonhosted.org/packages/0a/56/ff04502f0b712ed7046ab873eae9502c87cc9a4467f1e619285773f4c8d9/py_immutablex-0.1.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "74f96d784c043fedf3f56f5ac9afc96e885fefb0a61044ab2b33bbe7e647f011",
"md5": "c17c54e317e4f95b20c15cd4ee86260f",
"sha256": "f4fc49370866d1d0e640184708483f5f9561142810bc62b7ad18c581bc0f3a0f"
},
"downloads": -1,
"filename": "py_immutablex-0.1.0.tar.gz",
"has_sig": false,
"md5_digest": "c17c54e317e4f95b20c15cd4ee86260f",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.7",
"size": 11211,
"upload_time": "2025-02-24T22:53:54",
"upload_time_iso_8601": "2025-02-24T22:53:54.790766Z",
"url": "https://files.pythonhosted.org/packages/74/f9/6d784c043fedf3f56f5ac9afc96e885fefb0a61044ab2b33bbe7e647f011/py_immutablex-0.1.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-02-24 22:53:54",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "luizrrodrigues",
"github_project": "py-immutablex",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"requirements": [
{
"name": "aiohappyeyeballs",
"specs": [
[
"==",
"2.4.0"
]
]
},
{
"name": "aiohttp",
"specs": [
[
"==",
"3.10.5"
]
]
},
{
"name": "aiosignal",
"specs": [
[
"==",
"1.3.1"
]
]
},
{
"name": "annotated-types",
"specs": [
[
"==",
"0.7.0"
]
]
},
{
"name": "asgiref",
"specs": [
[
"==",
"3.8.1"
]
]
},
{
"name": "asn1crypto",
"specs": [
[
"==",
"1.5.1"
]
]
},
{
"name": "astroid",
"specs": [
[
"==",
"3.2.4"
]
]
},
{
"name": "async-timeout",
"specs": [
[
"==",
"4.0.3"
]
]
},
{
"name": "attrs",
"specs": [
[
"==",
"24.2.0"
]
]
},
{
"name": "base58",
"specs": [
[
"==",
"2.1.1"
]
]
},
{
"name": "bip32",
"specs": [
[
"==",
"4.0"
]
]
},
{
"name": "bitarray",
"specs": [
[
"==",
"2.9.2"
]
]
},
{
"name": "cachetools",
"specs": [
[
"==",
"5.5.0"
]
]
},
{
"name": "cairo-lang",
"specs": [
[
"==",
"0.13.3"
]
]
},
{
"name": "calmjs.parse",
"specs": [
[
"==",
"1.3.1"
]
]
},
{
"name": "cbor2",
"specs": [
[
"==",
"5.6.5"
]
]
},
{
"name": "certifi",
"specs": [
[
"==",
"2024.7.4"
]
]
},
{
"name": "cffi",
"specs": [
[
"==",
"1.17.1"
]
]
},
{
"name": "charset-normalizer",
"specs": [
[
"==",
"3.3.2"
]
]
},
{
"name": "ckzg",
"specs": [
[
"==",
"1.0.2"
]
]
},
{
"name": "coincurve",
"specs": [
[
"==",
"20.0.0"
]
]
},
{
"name": "crcmod",
"specs": [
[
"==",
"1.7"
]
]
},
{
"name": "crypto_cpp_py",
"specs": [
[
"==",
"1.4.5"
]
]
},
{
"name": "cryptography",
"specs": [
[
"==",
"44.0.1"
]
]
},
{
"name": "cytoolz",
"specs": [
[
"==",
"0.12.3"
]
]
},
{
"name": "dill",
"specs": [
[
"==",
"0.3.8"
]
]
},
{
"name": "dj-database-url",
"specs": [
[
"==",
"2.2.0"
]
]
},
{
"name": "Django",
"specs": [
[
"==",
"5.1"
]
]
},
{
"name": "django-appconf",
"specs": [
[
"==",
"1.0.6"
]
]
},
{
"name": "django-compressor",
"specs": [
[
"==",
"4.5.1"
]
]
},
{
"name": "django-environ",
"specs": [
[
"==",
"0.11.2"
]
]
},
{
"name": "django-heroku",
"specs": [
[
"==",
"0.3.1"
]
]
},
{
"name": "ecdsa",
"specs": [
[
"==",
"0.18.0"
]
]
},
{
"name": "ed25519-blake2b",
"specs": [
[
"==",
"1.4.1"
]
]
},
{
"name": "eth-account",
"specs": [
[
"==",
"0.11.3"
]
]
},
{
"name": "eth-hash",
"specs": [
[
"==",
"0.7.0"
]
]
},
{
"name": "eth-keyfile",
"specs": [
[
"==",
"0.8.1"
]
]
},
{
"name": "eth-keys",
"specs": [
[
"==",
"0.5.1"
]
]
},
{
"name": "eth-rlp",
"specs": [
[
"==",
"1.0.1"
]
]
},
{
"name": "eth-typing",
"specs": [
[
"==",
"4.4.0"
]
]
},
{
"name": "eth-utils",
"specs": [
[
"==",
"4.1.1"
]
]
},
{
"name": "eth_abi",
"specs": [
[
"==",
"5.1.0"
]
]
},
{
"name": "exceptiongroup",
"specs": [
[
"==",
"1.2.2"
]
]
},
{
"name": "execnet",
"specs": [
[
"==",
"2.1.1"
]
]
},
{
"name": "fastecdsa",
"specs": [
[
"==",
"2.3.2"
]
]
},
{
"name": "frozendict",
"specs": [
[
"==",
"2.4.6"
]
]
},
{
"name": "frozenlist",
"specs": [
[
"==",
"1.4.1"
]
]
},
{
"name": "gprof2dot",
"specs": [
[
"==",
"2024.6.6"
]
]
},
{
"name": "gunicorn",
"specs": [
[
"==",
"23.0.0"
]
]
},
{
"name": "hdwallet",
"specs": [
[
"==",
"3.3.0"
]
]
},
{
"name": "hexbytes",
"specs": [
[
"==",
"0.3.1"
]
]
},
{
"name": "idna",
"specs": [
[
"==",
"3.7"
]
]
},
{
"name": "iniconfig",
"specs": [
[
"==",
"2.0.0"
]
]
},
{
"name": "isort",
"specs": [
[
"==",
"5.13.2"
]
]
},
{
"name": "jsonschema",
"specs": [
[
"==",
"4.23.0"
]
]
},
{
"name": "jsonschema-specifications",
"specs": [
[
"==",
"2023.12.1"
]
]
},
{
"name": "lark",
"specs": [
[
"==",
"1.2.2"
]
]
},
{
"name": "lru-dict",
"specs": [
[
"==",
"1.2.0"
]
]
},
{
"name": "marshmallow",
"specs": [
[
"==",
"3.23.0"
]
]
},
{
"name": "marshmallow-enum",
"specs": [
[
"==",
"1.5.1"
]
]
},
{
"name": "marshmallow-oneofschema",
"specs": [
[
"==",
"3.1.1"
]
]
},
{
"name": "marshmallow_dataclass",
"specs": [
[
"==",
"8.6.1"
]
]
},
{
"name": "mccabe",
"specs": [
[
"==",
"0.7.0"
]
]
},
{
"name": "mpmath",
"specs": [
[
"==",
"1.3.0"
]
]
},
{
"name": "multidict",
"specs": [
[
"==",
"6.0.5"
]
]
},
{
"name": "mypy-extensions",
"specs": [
[
"==",
"1.0.0"
]
]
},
{
"name": "numpy",
"specs": [
[
"==",
"2.1.2"
]
]
},
{
"name": "packaging",
"specs": [
[
"==",
"24.1"
]
]
},
{
"name": "parsimonious",
"specs": [
[
"==",
"0.10.0"
]
]
},
{
"name": "pipdeptree",
"specs": [
[
"==",
"2.23.4"
]
]
},
{
"name": "platformdirs",
"specs": [
[
"==",
"4.2.2"
]
]
},
{
"name": "pluggy",
"specs": [
[
"==",
"1.5.0"
]
]
},
{
"name": "ply",
"specs": [
[
"==",
"3.11"
]
]
},
{
"name": "poseidon_py",
"specs": [
[
"==",
"0.1.5"
]
]
},
{
"name": "prometheus_client",
"specs": [
[
"==",
"0.21.0"
]
]
},
{
"name": "protobuf",
"specs": [
[
"==",
"5.27.3"
]
]
},
{
"name": "psycopg2",
"specs": [
[
"==",
"2.9.9"
]
]
},
{
"name": "py-immutablex",
"specs": []
},
{
"name": "pycparser",
"specs": [
[
"==",
"2.22"
]
]
},
{
"name": "pycryptodome",
"specs": [
[
"==",
"3.20.0"
]
]
},
{
"name": "pydantic",
"specs": [
[
"==",
"2.8.2"
]
]
},
{
"name": "pydantic_core",
"specs": [
[
"==",
"2.20.1"
]
]
},
{
"name": "pylint",
"specs": [
[
"==",
"3.2.6"
]
]
},
{
"name": "pylint-django",
"specs": [
[
"==",
"2.5.5"
]
]
},
{
"name": "pylint-plugin-utils",
"specs": [
[
"==",
"0.8.2"
]
]
},
{
"name": "PyNaCl",
"specs": [
[
"==",
"1.5.0"
]
]
},
{
"name": "pytest",
"specs": [
[
"==",
"8.3.3"
]
]
},
{
"name": "pytest-asyncio",
"specs": [
[
"==",
"0.24.0"
]
]
},
{
"name": "pytest-profiling",
"specs": [
[
"==",
"1.7.0"
]
]
},
{
"name": "pytest-xdist",
"specs": [
[
"==",
"3.6.1"
]
]
},
{
"name": "python-dotenv",
"specs": [
[
"==",
"1.0.1"
]
]
},
{
"name": "pyunormalize",
"specs": [
[
"==",
"15.1.0"
]
]
},
{
"name": "PyYAML",
"specs": [
[
"==",
"6.0.2"
]
]
},
{
"name": "rcssmin",
"specs": [
[
"==",
"1.1.2"
]
]
},
{
"name": "referencing",
"specs": [
[
"==",
"0.35.1"
]
]
},
{
"name": "regex",
"specs": [
[
"==",
"2024.7.24"
]
]
},
{
"name": "requests",
"specs": [
[
"==",
"2.32.3"
]
]
},
{
"name": "requests-mock",
"specs": [
[
"==",
"1.12.1"
]
]
},
{
"name": "rjsmin",
"specs": [
[
"==",
"1.2.2"
]
]
},
{
"name": "rlp",
"specs": [
[
"==",
"4.0.1"
]
]
},
{
"name": "rpds-py",
"specs": [
[
"==",
"0.20.0"
]
]
},
{
"name": "six",
"specs": [
[
"==",
"1.16.0"
]
]
},
{
"name": "sqlparse",
"specs": [
[
"==",
"0.5.1"
]
]
},
{
"name": "starknet-py",
"specs": [
[
"==",
"0.25.0"
]
]
},
{
"name": "sympy",
"specs": [
[
"==",
"1.12.1"
]
]
},
{
"name": "tomli",
"specs": [
[
"==",
"2.0.1"
]
]
},
{
"name": "tomlkit",
"specs": [
[
"==",
"0.13.2"
]
]
},
{
"name": "toolz",
"specs": [
[
"==",
"0.12.1"
]
]
},
{
"name": "typeguard",
"specs": [
[
"==",
"2.13.3"
]
]
},
{
"name": "typing-inspect",
"specs": [
[
"==",
"0.9.0"
]
]
},
{
"name": "typing_extensions",
"specs": [
[
"==",
"4.12.2"
]
]
},
{
"name": "urllib3",
"specs": [
[
"==",
"2.2.2"
]
]
},
{
"name": "web3",
"specs": [
[
"==",
"6.20.2"
]
]
},
{
"name": "websockets",
"specs": [
[
"==",
"13.0"
]
]
},
{
"name": "whitenoise",
"specs": [
[
"==",
"6.7.0"
]
]
},
{
"name": "yarl",
"specs": [
[
"==",
"1.9.4"
]
]
}
],
"lcname": "py-immutablex"
}