# Kwenta SDK

## Kwenta Python SDK

Python SDK to interact with Kwenta's smart contracts, subgraphs, and Synthetix perps.

### Installation

Install the SDK using pip:

```bash
  pip install kwenta
```

For more information on usage, see the Usage section and the sample scripts.

### Development

Create a python virtual environment, activate it and install libraries:

```bash
python3 -m venv env
source env/bin/activate
pip install -r requirements.txt
pip install -e ./module
```

This method will install the local version of the module in editable mode. You can make changes to the SDK and test them without reinstalling the module.

### Usage

To configure an instance of the Kwenta SDK, you need to specify some parameters. At minimum you need to specify the `network_id` and `provider_rpc` to read data from the contracts. If you specify a `wallet_address` and `private_key` you can also submit transactions or create transaction data using the SDK.:

```python
from kwenta import Kwenta

kwenta = Kwenta(
    network_id=10,
    provider_rpc=YOUR_RPC,
    wallet_address=YOUR_ADDRESS,
    private_key=YOUR_PRIVATE_KEY
)
```

### VERSIONS

SDK Versions below 1.6.0 will only support Kwenta V1 isolated margin. Please use the current version to utilize Smart Margin functionality.

#### Queries / Subgraphs:

Queries will default to Kwenta's public Hosted Service endpoints for The Graph.

* To fetch perps data specify endpoint `gql_endpoint_perps`: defaults to [Optimism-perps subgraph](https://thegraph.com/hosted-service/subgraph/kwenta/optimism-perps)
* To fetch rates specify endpoint `gql_endpoint_perps`: defaults to [Optimism-perps subgraph](https://thegraph.com/hosted-service/subgraph/kwenta/optimism-perps)

#### Pyth:

* Specify the endpoint of a Pyth price service as `price_service_endpoint` defaults to the public Pyth price service. This should be updated for any production applications to use a private Pyth price service.

#### Telegram:

1. Search telegram for bot named "@botfather"
2. Message the bot with and type "/newbot"
3. Input bot name (This will become channel name)
4. Specify API token as `telegram_token`
5. Specify channel name as `telegram_channel_name`

### Features

`kwenta`:

* Fetch market info
* Fetch position info
* Open positions
* Close positions
* Modify open positions
* Transfer margin
* Execute and cancel orders
* Limit and stop limit orders

`kwenta.queries`:

* Fetch historical trades
* Fetch historical positions

`kwenta.pyth`:

* Fetch price update data from Pyth price feed

### Initialization Parameters

| Parameter                | Type     | Description                                                                            |
| ------------------------ | -------- | -------------------------------------------------------------------------------------- |
| `provider_rpc`           | `string` | **Required.** Endpoint for the provider's RPC.                                         |
| `wallet_address`         | `string` | **Required.** Wallet address for transactions.                                         |
| `sm_address`             | `string` | **Optional.** Address of the smart contract, defaults to None.                         |
| `private_key`            | `string` | **Optional.** Private key for the wallet, defaults to None.                            |
| `network_id`             | `int`    | **Optional.** Network ID to connect to, defaults to None.                              |
| `use_estimate_gas`       | `bool`   | **Optional.** Whether or not to use gas estimation for transactions, defaults to True. |
| `gql_endpoint_perps`     | `string` | **Optional.** GraphQL endpoint for perps, defaults to None.                            |
| `gql_endpoint_rates`     | `string` | **Optional.** GraphQL endpoint for rates, defaults to None.                            |
| `price_service_endpoint` | `string` | **Optional.** Endpoint for the price service, defaults to None.                        |
| `telegram_token`         | `string` | **Optional.** Token for the Telegram bot, defaults to None.                            |
| `telegram_channel_name`  | `string` | **Optional.** Name of the Telegram channel for notifications, defaults to None.        |


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.kwenta.io/developers/kwenta-sdk.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
