# Lighter
Python client for Lighter (v1). The sdk is tested against Python versions 3.9, 3.10 and 3.11.
## Installation
```bash
pip install lighter-v1-python
```
## Getting Started
The `Client` object has four main modules;
- `Api`: allows interaction with the lighter api
- `AsyncApi`: allows for async interaction with the lighter api
- `Blockchain`: allows interaction with lighter contracts
- `AsyncBlockchain`: allows async interaction with lighter contracts
`Client` can be created with private key or not depending on whether you are going to use the api or interact with the contracts. For more complete examples, see the [examples](./examples/) directory.
### API
Following parameters are required to use `Api` module:
- `api_auth`: You should get the key from our servers.
- `web3_provider_url`: You need a node to interact with the contract. We suggest alchemy which provides 300M free compute units monthly, You can register and get your keys [here](https://www.alchemy.com/)
```python
from lighter.lighter_client import Client
import os
from lighter.modules.blockchain import OrderSide
from lighter.constants import ORDERBOOK_WETH_USDC
api_auth = os.environ.get("API_AUTH")
# You don't need to provide private key if you only want to use the api module.
client = Client(api_auth=api_auth, web3_provider_url="ALCHEMY_URL")
# Let's get available blockchains and their details from the api module.
blockchains = client.api.get_blockchains().data
```
### Blockchain
Following parameters are required to use `Blockchain` module:
- `api_auth`: You should get the key from our servers.
- `private_key`: You need to provide your wallet private key to sign your transactions.
- `web3_provider_url`: You need a node to interact with the contract. We suggest alchemy which provides 300M free compute units monthly, You can register and get your keys [here](https://www.alchemy.com/)
Blockchain module enables you to do multiple operations in one transaction. The number of operations is limited to 4 million gas. So the limits are roughly;
- 25 order creations in one transaction
- 100 order cancellations in one transaction
- 25 order updates in one transaction
```python
from lighter.lighter_client import Client
import os
from lighter.modules.blockchain import OrderSide
from lighter.constants import ORDERBOOK_WETH_USDC
private_key = os.environ.get("SOURCE_PRIVATE_KEY")
api_auth = os.environ.get("API_AUTH")
client = Client(
private_key=private_key, api_auth=api_auth, web3_provider_url="ALCHEMY_URL"
)
x = client.blockchain # initialize the blockchain module before using it
# You need to give allowance for the trading tokens
client.blockchain.set_token_max_allowance(
spender=client.blockchain.router_contract.address, token="WETH"
)
client.blockchain.set_token_max_allowance(
spender=client.blockchain.router_contract.address, token="USDC"
)
# Let's create a batch of limit orders
sizes = ["0.001", "0.001", "0.001"]
prices = ["1050", "1200", "1000"]
sides = [OrderSide.BUY, OrderSide.SELL, OrderSide.BUY]
tx_hash = client.blockchain.create_limit_order_batch("WETH_USDC", sizes, prices, sides)
# if you want to wait for the transaction to be mined and get order id and other details,
# you can use the following method.
# alternatively you can wait the data from websocket
result = client.blockchain.get_create_order_transaction_result(tx_hash, "WETH_USDC")
```
### Async Examples
```python
from lighter.lighter_client import Client
import os
from lighter.modules.blockchain import OrderSide
from lighter.constants import ORDERBOOK_WETH_USDC
private_key = os.environ.get("SOURCE_PRIVATE_KEY")
api_auth = os.environ.get("API_AUTH")
client = Client(
private_key=private_key, api_auth=api_auth, web3_provider_url="ALCHEMY_URL"
)
async def main():
client.async_blockchain # to initialize the module
sizes = ["0.0001"]
prices = ["1000"]
sides = [OrderSide.SELL]
# Test async api
print(await client.async_api.get_blockchains())
print(await client.async_api.get_orderbook("WETH_USDC"))
print(
client.api.get_candles(
orderbook_symbol="WETH_USDC",
resolution=60,
timestamp_start=int(time.time()) - 60 * 60 * 60 * 24,
timestamp_end=int(time.time()),
)
)
tx_hash = await client.async_blockchain.create_limit_order_batch(
"WETH_USDC", sizes, prices, sides
)
# tx_hash = await client.async_blockchain.cancel_limit_order_batch(
# "WETH_USDC", [24989]
# )
# tx_hash = await client.async_blockchain.update_limit_order_batch(
# "WETH_USDC", [24991], ["0.0001"], ["100"], [OrderSide.BUY]
# )
# tx_hash = await client.async_blockchain.create_market_order(
# "WETH_USDC", "0.0001", "100", OrderSide.SELL
# )
result = await client.async_blockchain.get_create_order_transaction_result(
tx_hash, "WETH_USDC"
)
# result = await client.async_blockchain.get_limit_order_canceled_transaction_result(
# tx_hash, "WETH_USDC"
# )
# result = await client.async_blockchain.get_update_limit_order_transaction_result(
# tx_hash, "WETH_USDC"
# )
print(result)
# close the aiohtpp session
await client.async_api.close_connection()
if __name__ == "__main__":
import asyncio
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
```
Raw data
{
"_id": null,
"home_page": "https://github.com/elliottech/lighter-v1-python",
"name": "lighter-v1-python",
"maintainer": "",
"docs_url": null,
"requires_python": "",
"maintainer_email": "",
"keywords": "lighter exchange rest api defi ethereum optimism l2 eth",
"author": "Elliot",
"author_email": "ahmet@elliot.ai",
"download_url": "https://files.pythonhosted.org/packages/6a/27/06d201865aed192b63e1fb29ca644647804580c86b10fa6d5a6fc1f7a667/lighter-v1-python-1.0.7.tar.gz",
"platform": null,
"description": "# Lighter\n\nPython client for Lighter (v1). The sdk is tested against Python versions 3.9, 3.10 and 3.11.\n\n## Installation\n\n```bash\npip install lighter-v1-python\n```\n\n## Getting Started\n\nThe `Client` object has four main modules;\n\n- `Api`: allows interaction with the lighter api\n- `AsyncApi`: allows for async interaction with the lighter api\n- `Blockchain`: allows interaction with lighter contracts\n- `AsyncBlockchain`: allows async interaction with lighter contracts\n\n`Client` can be created with private key or not depending on whether you are going to use the api or interact with the contracts. For more complete examples, see the [examples](./examples/) directory.\n\n### API\n\nFollowing parameters are required to use `Api` module:\n\n- `api_auth`: You should get the key from our servers.\n- `web3_provider_url`: You need a node to interact with the contract. We suggest alchemy which provides 300M free compute units monthly, You can register and get your keys [here](https://www.alchemy.com/)\n\n```python\nfrom lighter.lighter_client import Client\nimport os\nfrom lighter.modules.blockchain import OrderSide\nfrom lighter.constants import ORDERBOOK_WETH_USDC\n\napi_auth = os.environ.get(\"API_AUTH\")\n\n# You don't need to provide private key if you only want to use the api module.\n\nclient = Client(api_auth=api_auth, web3_provider_url=\"ALCHEMY_URL\")\n\n# Let's get available blockchains and their details from the api module.\nblockchains = client.api.get_blockchains().data\n```\n\n### Blockchain\n\nFollowing parameters are required to use `Blockchain` module:\n\n- `api_auth`: You should get the key from our servers.\n- `private_key`: You need to provide your wallet private key to sign your transactions.\n- `web3_provider_url`: You need a node to interact with the contract. We suggest alchemy which provides 300M free compute units monthly, You can register and get your keys [here](https://www.alchemy.com/)\n\nBlockchain module enables you to do multiple operations in one transaction. The number of operations is limited to 4 million gas. So the limits are roughly;\n\n- 25 order creations in one transaction\n- 100 order cancellations in one transaction\n- 25 order updates in one transaction\n\n```python\nfrom lighter.lighter_client import Client\nimport os\nfrom lighter.modules.blockchain import OrderSide\nfrom lighter.constants import ORDERBOOK_WETH_USDC\n\n\nprivate_key = os.environ.get(\"SOURCE_PRIVATE_KEY\")\napi_auth = os.environ.get(\"API_AUTH\")\n\n\nclient = Client(\n private_key=private_key, api_auth=api_auth, web3_provider_url=\"ALCHEMY_URL\"\n)\n\n\nx = client.blockchain # initialize the blockchain module before using it\n\n\n# You need to give allowance for the trading tokens\nclient.blockchain.set_token_max_allowance(\n spender=client.blockchain.router_contract.address, token=\"WETH\"\n)\n\nclient.blockchain.set_token_max_allowance(\n spender=client.blockchain.router_contract.address, token=\"USDC\"\n)\n\n\n# Let's create a batch of limit orders\nsizes = [\"0.001\", \"0.001\", \"0.001\"]\nprices = [\"1050\", \"1200\", \"1000\"]\nsides = [OrderSide.BUY, OrderSide.SELL, OrderSide.BUY]\n\n\ntx_hash = client.blockchain.create_limit_order_batch(\"WETH_USDC\", sizes, prices, sides)\n\n# if you want to wait for the transaction to be mined and get order id and other details,\n# you can use the following method.\n# alternatively you can wait the data from websocket\nresult = client.blockchain.get_create_order_transaction_result(tx_hash, \"WETH_USDC\")\n```\n\n### Async Examples\n\n```python\nfrom lighter.lighter_client import Client\nimport os\nfrom lighter.modules.blockchain import OrderSide\nfrom lighter.constants import ORDERBOOK_WETH_USDC\n\n\nprivate_key = os.environ.get(\"SOURCE_PRIVATE_KEY\")\napi_auth = os.environ.get(\"API_AUTH\")\n\n\nclient = Client(\n private_key=private_key, api_auth=api_auth, web3_provider_url=\"ALCHEMY_URL\"\n)\n\n\nasync def main():\n client.async_blockchain # to initialize the module\n sizes = [\"0.0001\"]\n prices = [\"1000\"]\n sides = [OrderSide.SELL]\n\n # Test async api\n print(await client.async_api.get_blockchains())\n print(await client.async_api.get_orderbook(\"WETH_USDC\"))\n\n print(\n client.api.get_candles(\n orderbook_symbol=\"WETH_USDC\",\n resolution=60,\n timestamp_start=int(time.time()) - 60 * 60 * 60 * 24,\n timestamp_end=int(time.time()),\n )\n )\n\n tx_hash = await client.async_blockchain.create_limit_order_batch(\n \"WETH_USDC\", sizes, prices, sides\n )\n # tx_hash = await client.async_blockchain.cancel_limit_order_batch(\n # \"WETH_USDC\", [24989]\n # )\n # tx_hash = await client.async_blockchain.update_limit_order_batch(\n # \"WETH_USDC\", [24991], [\"0.0001\"], [\"100\"], [OrderSide.BUY]\n # )\n # tx_hash = await client.async_blockchain.create_market_order(\n # \"WETH_USDC\", \"0.0001\", \"100\", OrderSide.SELL\n # )\n\n result = await client.async_blockchain.get_create_order_transaction_result(\n tx_hash, \"WETH_USDC\"\n )\n # result = await client.async_blockchain.get_limit_order_canceled_transaction_result(\n # tx_hash, \"WETH_USDC\"\n # )\n # result = await client.async_blockchain.get_update_limit_order_transaction_result(\n # tx_hash, \"WETH_USDC\"\n # )\n print(result)\n\n # close the aiohtpp session\n await client.async_api.close_connection()\n\n\nif __name__ == \"__main__\":\n import asyncio\n\n loop = asyncio.get_event_loop()\n loop.run_until_complete(main())\n```\n",
"bugtrack_url": null,
"license": "Apache 2.0",
"summary": "lighter Python rest api and blockchain interactions for Limit Orders",
"version": "1.0.7",
"project_urls": {
"Homepage": "https://github.com/elliottech/lighter-v1-python"
},
"split_keywords": [
"lighter",
"exchange",
"rest",
"api",
"defi",
"ethereum",
"optimism",
"l2",
"eth"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "06e173193a56a52d22ae4ce9507582e3ab2eeccbfda7eae2a2a4bbce7e71258a",
"md5": "1426c9adcb8007547328d9ed3187422b",
"sha256": "c37be19b363f57b035772fc6425d7fd6bba8ebdc5a7b5373e155cef8d9699d85"
},
"downloads": -1,
"filename": "lighter_v1_python-1.0.7-py3-none-any.whl",
"has_sig": false,
"md5_digest": "1426c9adcb8007547328d9ed3187422b",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": null,
"size": 22032,
"upload_time": "2023-09-12T14:33:06",
"upload_time_iso_8601": "2023-09-12T14:33:06.499842Z",
"url": "https://files.pythonhosted.org/packages/06/e1/73193a56a52d22ae4ce9507582e3ab2eeccbfda7eae2a2a4bbce7e71258a/lighter_v1_python-1.0.7-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "6a2706d201865aed192b63e1fb29ca644647804580c86b10fa6d5a6fc1f7a667",
"md5": "2c082adfdd9d8360842fd47adbd2ed40",
"sha256": "e265dfa93ee2087991bdfe206fd85910c51c54057050d970942dc37884a54882"
},
"downloads": -1,
"filename": "lighter-v1-python-1.0.7.tar.gz",
"has_sig": false,
"md5_digest": "2c082adfdd9d8360842fd47adbd2ed40",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 21170,
"upload_time": "2023-09-12T14:33:09",
"upload_time_iso_8601": "2023-09-12T14:33:09.911193Z",
"url": "https://files.pythonhosted.org/packages/6a/27/06d201865aed192b63e1fb29ca644647804580c86b10fa6d5a6fc1f7a667/lighter-v1-python-1.0.7.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2023-09-12 14:33:09",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "elliottech",
"github_project": "lighter-v1-python",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"circle": true,
"requirements": [],
"tox": true,
"lcname": "lighter-v1-python"
}