Metadata-Version: 2.1
Name: bxserum
Version: 0.1.0
Summary: Python SDK for bloXroute's Serum API
Home-page: https://github.com/bloXroute-Labs/serum-client-python
Author: bloXroute Labs
Author-email: support@bloxroute.com
Keywords: serum,solana,blockchain,trader,grpc,stream
Classifier: Programming Language :: Python :: 3
Description-Content-Type: text/markdown
Requires-Dist: aiohttp (==3.8.1)
Requires-Dist: betterproto[compiler] (==1.2.5)
Requires-Dist: grpclib (==0.4.2)
Requires-Dist: aiounittest (==1.4.1)
Requires-Dist: base58 (==2.1.1)
Requires-Dist: solana (==0.23.3)
Requires-Dist: bx-jsonrpc-py (==0.1.0)

# Serum Python Client

Provides a Python SDK for bloXroute's Serum API.

## Installation

```
$ git clone https://github.com/bloXroute-Labs/serum-client-python.git
$ cd serum-client-python
$ pip install -r requirements.txt
```

Installation via `pip` is expected to be supported soon.

## Usage

This library supports HTTP, websockets, and GRPC interfaces. You can use it with
a context manager or handle open/closing yourself.

For any methods involving transaction creation you will need to provide your 
Solana private key. You can provide this via the environment variable 
`PRIVATE_KEY`, or specify it via the provider configuration if you want to load 
it with some other mechanism. See samples for more information. 
As a general note on this: methods named `post_*` (e.g. `post_order`) typically 
do not sign/submit the transaction, only return the raw unsigned transaction. 
This isn't very useful to most users (unless you want to write a signer in a 
different language), and you'll typically want the similarly named `submit_*` 
methods (e.g. `submit_order`). These methods generate, sign, and submit the
transaction all at once.

Context manager:

```python
from bxserum import provider

async with provider.http() as api:
    print(await api.get_orderbook(market="ETHUSDT"))
    
async with provider.ws() as api:
    async for update in api.get_orderbooks_stream(market="ETHUSDT"):
        print(update)
```

Manual:
```python
import bxserum

from bxserum import provider

p = provider.grpc()
api = await bxserum.serum(p)

try:
    await api.get_orderbook(market="ETHUSDT")
finally:
    await p.close()
```

Refer to the `examples/` for more info.

## Development

bloXroute Serum API's interfaces are primarily powered by protobuf, so you will 
need to install it for your system: https://grpc.io/docs/protoc-installation/

Clone project and install dependencies:

```
$ git clone https://github.com/bloXroute-Labs/serum-client-python.git
$ cd serum-client-python
$ pip install -r requirements.txt
```

Run tests:

```
$ make test
```

Regenerate protobuf files:

```
$ make proto
```

Linting:
```
$ make lint
```
