# **Hydra-Python-API**
![Rust](./core/wHyd.jpg)
A Python API for interacting with the Hydra-Ledger blockchain, built using **Rust** and **WASM** through **Maturin**.
## **Project Structure**
```bash
hydra-python-api
├── Cargo.lock
├── Cargo.toml
├── pyproject.toml
├── src
│ ├── api.rs
│ ├── lib.rs
│ ├── types.rs
│ └── main.rs
├── scripts
│ └── index.py
├── core
├── requirements.txt
├── README.md
└── Dockerfile
```
## **Features**
- **Fast and Safe:** Leveraging Rust's low-level control for optimal performance and memory safety to prevent vulnerabilities.
- **Transaction Management:** Easily create and sign transactions on the Hydra-Ledger blockchain.
- **Seamless Integration:** Designed for easy integration into Python-based blockchain projects with minimal setup.
- **Error Handling:** Graceful management of transaction failures with Python exceptions propagated from the Rust layer.
---
## **Building From Source**
### Prerequisites
- **Rust**
- **Maturin**
- **Python 3.8+**
### Steps to Build
1. Enter the project base directory and activate the virtual environment:
```bash
source env/bin/activate
```
2. Install the required Python packages:
```bash
pip install -r requirements.txt
```
3. Build the Python wheel for the Rust code:
```bash
maturin develop
```
---
## **Installation**
Alternatively, install the package directly from `pip`:
```bash
pip install iop-python
```
---
## **Usage**
This API provides a Python wrapper over several Rust functions that interact with the IOP SDK to manage operations on the Hydra-Ledger blockchain.
### **Initializing the SDK**
```python
import iop_python as sdk
iop = sdk.IopPython()
```
### **Examples of Available Methods**
#### **1. `get_hyd_vault`**
Initializes a Hydra vault and returns account information as a JSON string. This information includes an encrypted seed and derived public key
```python
phrase = "blind market ability shoot topple..."
password = "horse-staple-battery"
network = "devnet"
account = 0
hyd_vault = iop.get_hyd_vault(phrase, password, network, account)
```
#### **2. `get_morpheus_vault`**
Initializes a Morpheus vault and returns admin information as a JSON string.
```python
phrase = "blind market ability shoot topple..."
password = "horse-staple-battery"
morpheus_vault = iop.get_morpheus_vault(phrase, password)
```
#### **3. `generate_nonce`**
Generates a random nonce and returns it as a string.
```python
nonce = iop.generate_nonce()
print(nonce)
>>> "uVIc9J4UjKx8tRs6HUEDQElksBCtF9VnHb439boVmB9cw"
```
#### **4. `generate_phrase`**
Generates a random mnemonic phrase and returns it as a string.
```python
phrase = iop.generate_phrase()
print(phrase)
>>> "blind market ability shoot topple..."
```
#### **5. `generate_did_by_morpheus`**
Generates a Decentralized Identifier (DID) using a Morpheus vault.
```python
password = "horse-staple-battery"
idx = 0
morpheus_vault = iop.get_morpheus_vault(phrase, password)
did = iop.generate_did_by_morpheus(morpheus_vault, password, idx)
print(did)
>>> did:morpheus:ezbeWGSY2dqcUBqT8K7R14xr
```
#### **6. `sign_witness_statement`**
Signs a witness statement using a Hydra vault.
```python
network = "devnet"
account = 0
idx = 0
vault = iop.get_hyd_vault(phrase, password, network, account)
statement = {
"name": "Buki Offor",
"street": "Brick City Estate",
"dob": "01/03/1980",
"city": "Abuja",
"country": "Nigeria",
"zipcode": "987554",
}
signed_statement = iop.sign_witness_statement(vault, password, statement, idx)
print(json.loads(signed_statement))
```
#### **7. `generate_transaction`**
Builds a transaction to transfer tokens using a Hydra vault.
```python
receiver = "taQb8gfnetDt6KtRH3n11M3APMzrWiBhhg"
amount = "100"
nonce = 1
account = 0
idx = 0
network = "testnet"
fee = 10000
comment = "sending money"
tx_data = iop.generate_transaction(vault, receiver, amount, nonce, password, account, idx, network, comment, fee)
```
#### **8. `verify_signed_statement`**
Verifies the signature of a signed witness statement.
```python
signed_statement = {
"signature": "00987890098776556667788976676787655",
"claim": {
"subject": "did:morpheus:ezbeWGSY2dqcUBqT8K7R14xr",
"content": {}
}
}
result = iop.verify_signed_statement(signed_statement)
print(result)
>>> True
```
#### **9. `validate_statement_with_did`**
Validates a signed witness statement using a DID document.
#### **10. `sign_did_statement`**
Signs a data payload using a Morpheus vault, returning the signed data and corresponding public key.
---
# **Exceptions**
You can catch exceptions and log helpful messages during debugging.
```python
import iop_python as sdk
iop = sdk.IopPython()
try:
phrase = iop.generate_phrase()
vault = iop.get_hyd_vault(phrase, "password",'mainnet',0)
address = iop.get_wallet_address(vault,9,0,'mainnet')
print(address)
except Exception as err:
if type(err).__name__ == 'PyIopError':
print(err.args[0].message)
else:
print(err)
```
These functions are intended to be used as Python module functions and can be easily integrated into your Hydra-Ledger blockchain projects.
Raw data
{
"_id": null,
"home_page": null,
"name": "iop-python",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.8",
"maintainer_email": "Buki <ebuka2264@yahoo.com>, Odurukwe Stella <odurukwestella5@gmail.com>",
"keywords": "blockchain, hydralegeder, cryptography, bip39, did",
"author": "Ebuka Offor",
"author_email": "ebuka2264@yahoo.com",
"download_url": "https://files.pythonhosted.org/packages/08/82/45b5106eda54b1b32417fd45f40d502ce8bc1b09a435f5e8df0afecf12ed/iop_python-0.2.0.tar.gz",
"platform": null,
"description": "# **Hydra-Python-API** \n![Rust](./core/wHyd.jpg)\n\n\nA Python API for interacting with the Hydra-Ledger blockchain, built using **Rust** and **WASM** through **Maturin**.\n\n## **Project Structure**\n\n```bash\nhydra-python-api\n\u251c\u2500\u2500 Cargo.lock\n\u251c\u2500\u2500 Cargo.toml\n\u251c\u2500\u2500 pyproject.toml\n\u251c\u2500\u2500 src\n\u2502 \u251c\u2500\u2500 api.rs\n\u2502 \u251c\u2500\u2500 lib.rs\n\u2502 \u251c\u2500\u2500 types.rs\n\u2502 \u2514\u2500\u2500 main.rs\n\u251c\u2500\u2500 scripts\n\u2502 \u2514\u2500\u2500 index.py\n\u251c\u2500\u2500 core\n\u251c\u2500\u2500 requirements.txt\n\u251c\u2500\u2500 README.md\n\u2514\u2500\u2500 Dockerfile\n```\n\n## **Features**\n- **Fast and Safe:** Leveraging Rust's low-level control for optimal performance and memory safety to prevent vulnerabilities.\n- **Transaction Management:** Easily create and sign transactions on the Hydra-Ledger blockchain.\n- **Seamless Integration:** Designed for easy integration into Python-based blockchain projects with minimal setup.\n- **Error Handling:** Graceful management of transaction failures with Python exceptions propagated from the Rust layer.\n\n---\n\n## **Building From Source**\n\n### Prerequisites\n- **Rust**\n- **Maturin**\n- **Python 3.8+**\n\n### Steps to Build\n\n1. Enter the project base directory and activate the virtual environment:\n ```bash\n source env/bin/activate\n ```\n2. Install the required Python packages:\n ```bash\n pip install -r requirements.txt\n ```\n3. Build the Python wheel for the Rust code:\n ```bash\n maturin develop\n ```\n\n---\n\n## **Installation**\n\nAlternatively, install the package directly from `pip`:\n\n```bash\npip install iop-python\n```\n\n---\n\n## **Usage**\n\nThis API provides a Python wrapper over several Rust functions that interact with the IOP SDK to manage operations on the Hydra-Ledger blockchain.\n\n### **Initializing the SDK**\n\n```python\nimport iop_python as sdk\niop = sdk.IopPython()\n```\n\n### **Examples of Available Methods**\n\n#### **1. `get_hyd_vault`** \nInitializes a Hydra vault and returns account information as a JSON string. This information includes an encrypted seed and derived public key\n\n```python\nphrase = \"blind market ability shoot topple...\"\npassword = \"horse-staple-battery\"\nnetwork = \"devnet\"\naccount = 0\nhyd_vault = iop.get_hyd_vault(phrase, password, network, account)\n```\n\n#### **2. `get_morpheus_vault`** \nInitializes a Morpheus vault and returns admin information as a JSON string.\n\n```python\nphrase = \"blind market ability shoot topple...\"\npassword = \"horse-staple-battery\"\nmorpheus_vault = iop.get_morpheus_vault(phrase, password)\n```\n\n#### **3. `generate_nonce`** \nGenerates a random nonce and returns it as a string.\n\n```python\nnonce = iop.generate_nonce()\nprint(nonce)\n>>> \"uVIc9J4UjKx8tRs6HUEDQElksBCtF9VnHb439boVmB9cw\"\n```\n\n#### **4. `generate_phrase`** \nGenerates a random mnemonic phrase and returns it as a string.\n\n```python\nphrase = iop.generate_phrase()\nprint(phrase)\n>>> \"blind market ability shoot topple...\"\n```\n\n#### **5. `generate_did_by_morpheus`** \nGenerates a Decentralized Identifier (DID) using a Morpheus vault.\n\n```python\npassword = \"horse-staple-battery\"\nidx = 0\nmorpheus_vault = iop.get_morpheus_vault(phrase, password)\ndid = iop.generate_did_by_morpheus(morpheus_vault, password, idx)\nprint(did)\n>>> did:morpheus:ezbeWGSY2dqcUBqT8K7R14xr\n```\n\n#### **6. `sign_witness_statement`** \nSigns a witness statement using a Hydra vault.\n\n```python\nnetwork = \"devnet\"\naccount = 0\nidx = 0\nvault = iop.get_hyd_vault(phrase, password, network, account)\n\nstatement = {\n \"name\": \"Buki Offor\",\n \"street\": \"Brick City Estate\",\n \"dob\": \"01/03/1980\",\n \"city\": \"Abuja\",\n \"country\": \"Nigeria\",\n \"zipcode\": \"987554\",\n}\n\nsigned_statement = iop.sign_witness_statement(vault, password, statement, idx)\nprint(json.loads(signed_statement))\n```\n\n#### **7. `generate_transaction`** \nBuilds a transaction to transfer tokens using a Hydra vault.\n\n```python\nreceiver = \"taQb8gfnetDt6KtRH3n11M3APMzrWiBhhg\"\namount = \"100\"\nnonce = 1\naccount = 0\nidx = 0\nnetwork = \"testnet\"\nfee = 10000\ncomment = \"sending money\"\n\ntx_data = iop.generate_transaction(vault, receiver, amount, nonce, password, account, idx, network, comment, fee)\n```\n\n#### **8. `verify_signed_statement`** \nVerifies the signature of a signed witness statement.\n\n```python\nsigned_statement = {\n \"signature\": \"00987890098776556667788976676787655\",\n \"claim\": {\n \"subject\": \"did:morpheus:ezbeWGSY2dqcUBqT8K7R14xr\",\n \"content\": {}\n }\n}\nresult = iop.verify_signed_statement(signed_statement)\nprint(result)\n>>> True\n```\n\n#### **9. `validate_statement_with_did`** \nValidates a signed witness statement using a DID document.\n\n#### **10. `sign_did_statement`** \nSigns a data payload using a Morpheus vault, returning the signed data and corresponding public key.\n\n---\n\n# **Exceptions**\nYou can catch exceptions and log helpful messages during debugging.\n```python\nimport iop_python as sdk\niop = sdk.IopPython()\n\ntry:\n phrase = iop.generate_phrase()\n vault = iop.get_hyd_vault(phrase, \"password\",'mainnet',0)\n address = iop.get_wallet_address(vault,9,0,'mainnet')\n print(address)\nexcept Exception as err:\n if type(err).__name__ == 'PyIopError':\n print(err.args[0].message)\n else:\n print(err)\n```\n\n\n\nThese functions are intended to be used as Python module functions and can be easily integrated into your Hydra-Ledger blockchain projects.\n\n",
"bugtrack_url": null,
"license": null,
"summary": null,
"version": "0.2.0",
"project_urls": {
"Homepage": "https://github.com/BukiOffor/hydra-python-api",
"Issues": "https://github.com/BukiOffor/hydra-python-api/issues"
},
"split_keywords": [
"blockchain",
" hydralegeder",
" cryptography",
" bip39",
" did"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "38decef6f14b2d1a6e3688b6f0eb5eb39780efcd069c938dfaaf393e8854cdf6",
"md5": "f12af394a54704d66328177f4e1ac2da",
"sha256": "48cb56f532d28c64d9f58abeb4edf5183e179c9956e7601b05b431ee896bd803"
},
"downloads": -1,
"filename": "iop_python-0.2.0-cp310-cp310-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "f12af394a54704d66328177f4e1ac2da",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.8",
"size": 2067779,
"upload_time": "2024-09-23T00:52:24",
"upload_time_iso_8601": "2024-09-23T00:52:24.536075Z",
"url": "https://files.pythonhosted.org/packages/38/de/cef6f14b2d1a6e3688b6f0eb5eb39780efcd069c938dfaaf393e8854cdf6/iop_python-0.2.0-cp310-cp310-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "088245b5106eda54b1b32417fd45f40d502ce8bc1b09a435f5e8df0afecf12ed",
"md5": "7da064cb2edf7b4e4a9fd6368b71936e",
"sha256": "ce23088fe6a3cdf2de4d568a486c7828cae49bc71a2e1fbc4a36e07c73725659"
},
"downloads": -1,
"filename": "iop_python-0.2.0.tar.gz",
"has_sig": false,
"md5_digest": "7da064cb2edf7b4e4a9fd6368b71936e",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.8",
"size": 22155,
"upload_time": "2024-09-23T00:52:27",
"upload_time_iso_8601": "2024-09-23T00:52:27.880073Z",
"url": "https://files.pythonhosted.org/packages/08/82/45b5106eda54b1b32417fd45f40d502ce8bc1b09a435f5e8df0afecf12ed/iop_python-0.2.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-09-23 00:52:27",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "BukiOffor",
"github_project": "hydra-python-api",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"requirements": [
{
"name": "maturin",
"specs": []
}
],
"lcname": "iop-python"
}