From f93cbdd5f8e3597f008216fb8f53c1a37d324a2c Mon Sep 17 00:00:00 2001 From: Aishwarya MANORE Date: Fri, 6 Mar 2026 16:02:24 +0100 Subject: [PATCH 1/5] tpluspy: Add endpoint to set interest rates for assets --- tplus/client/clearingengine/admin.py | 12 ++++++++++++ tplus/model/interest_rates.py | 8 ++++++++ 2 files changed, 20 insertions(+) create mode 100644 tplus/model/interest_rates.py diff --git a/tplus/client/clearingengine/admin.py b/tplus/client/clearingengine/admin.py index fadf755..b150784 100644 --- a/tplus/client/clearingengine/admin.py +++ b/tplus/client/clearingengine/admin.py @@ -8,6 +8,7 @@ from tplus.client.clearingengine.base import BaseClearingEngineClient from tplus.model.asset_identifier import AssetIdentifier +from tplus.model.interest_rates import InterestRates from tplus.model.types import UserPublicKey from tplus.utils.user import User @@ -227,3 +228,14 @@ async def set_trader_as_mm( "signature": sig, }, ) + + async def set_interest_rates( + self, + rates: [InterestRates] + ): + await self._post( + "admin/interest/inject", + json_data={ + "rates": [r.model_dump(mode="json") for r in rates] + } + ) \ No newline at end of file diff --git a/tplus/model/interest_rates.py b/tplus/model/interest_rates.py new file mode 100644 index 0000000..522b30f --- /dev/null +++ b/tplus/model/interest_rates.py @@ -0,0 +1,8 @@ +from pydantic import BaseModel + + +class InterestRates(BaseModel): + asset_identifier: str + funding_rate: int + utilisation_rate: int + quote_utilisation_rate: int \ No newline at end of file From ed9f1f8c56fca5fa200f561224f088acad77b7d3 Mon Sep 17 00:00:00 2001 From: Aishwarya MANORE Date: Tue, 10 Mar 2026 11:07:37 +0100 Subject: [PATCH 2/5] tpluspy: Debug to correct rounding error and add missing request_id to the request body. --- tplus/client/clearingengine/admin.py | 1 + tplus/model/user_inventory.py | 7 ++++--- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/tplus/client/clearingengine/admin.py b/tplus/client/clearingengine/admin.py index b150784..2e3824b 100644 --- a/tplus/client/clearingengine/admin.py +++ b/tplus/client/clearingengine/admin.py @@ -236,6 +236,7 @@ async def set_interest_rates( await self._post( "admin/interest/inject", json_data={ + "request_id": 1, "rates": [r.model_dump(mode="json") for r in rates] } ) \ No newline at end of file diff --git a/tplus/model/user_inventory.py b/tplus/model/user_inventory.py index 3c7306e..e931f09 100644 --- a/tplus/model/user_inventory.py +++ b/tplus/model/user_inventory.py @@ -1,4 +1,5 @@ from typing import Literal +from decimal import Decimal from pydantic import BaseModel @@ -6,14 +7,14 @@ class Spot(BaseModel): """Represents a single spot account with multiple assets""" - spot_account_balance: dict[str, int] + spot_account_balance: dict[str, Decimal] class Balance(BaseModel): """Represents either credits or liabilities for given asset""" - credits: int - liabilities: int + credits: Decimal + liabilities: Decimal class MarginPosition(BaseModel): From 2ed5530bba8e6ffcb7c1c86716a6bd2461b712c2 Mon Sep 17 00:00:00 2001 From: Aishwarya MANORE Date: Tue, 10 Mar 2026 15:42:14 +0100 Subject: [PATCH 3/5] tpluspy: Ruff check --- tplus/client/clearingengine/admin.py | 2 +- tplus/model/interest_rates.py | 2 +- tplus/model/user_inventory.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/tplus/client/clearingengine/admin.py b/tplus/client/clearingengine/admin.py index 2e3824b..0adec2d 100644 --- a/tplus/client/clearingengine/admin.py +++ b/tplus/client/clearingengine/admin.py @@ -239,4 +239,4 @@ async def set_interest_rates( "request_id": 1, "rates": [r.model_dump(mode="json") for r in rates] } - ) \ No newline at end of file + ) diff --git a/tplus/model/interest_rates.py b/tplus/model/interest_rates.py index 522b30f..b9d5629 100644 --- a/tplus/model/interest_rates.py +++ b/tplus/model/interest_rates.py @@ -5,4 +5,4 @@ class InterestRates(BaseModel): asset_identifier: str funding_rate: int utilisation_rate: int - quote_utilisation_rate: int \ No newline at end of file + quote_utilisation_rate: int diff --git a/tplus/model/user_inventory.py b/tplus/model/user_inventory.py index e931f09..294a445 100644 --- a/tplus/model/user_inventory.py +++ b/tplus/model/user_inventory.py @@ -1,5 +1,5 @@ -from typing import Literal from decimal import Decimal +from typing import Literal from pydantic import BaseModel From d2d44f511f01f0c37e3c17237e5cd2c22f0232b2 Mon Sep 17 00:00:00 2001 From: Aishwarya MANORE Date: Tue, 10 Mar 2026 15:44:35 +0100 Subject: [PATCH 4/5] tpluspy: Ruff format --- tplus/client/clearingengine/admin.py | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/tplus/client/clearingengine/admin.py b/tplus/client/clearingengine/admin.py index 0adec2d..10826c2 100644 --- a/tplus/client/clearingengine/admin.py +++ b/tplus/client/clearingengine/admin.py @@ -229,14 +229,8 @@ async def set_trader_as_mm( }, ) - async def set_interest_rates( - self, - rates: [InterestRates] - ): + async def set_interest_rates(self, rates: [InterestRates]): await self._post( "admin/interest/inject", - json_data={ - "request_id": 1, - "rates": [r.model_dump(mode="json") for r in rates] - } + json_data={"request_id": 1, "rates": [r.model_dump(mode="json") for r in rates]}, ) From 37976ee237708ab05689d568e0990d3f17615626 Mon Sep 17 00:00:00 2001 From: Aishwarya MANORE Date: Tue, 10 Mar 2026 15:47:42 +0100 Subject: [PATCH 5/5] tpluspy: Fix mypy --- tplus/client/clearingengine/admin.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tplus/client/clearingengine/admin.py b/tplus/client/clearingengine/admin.py index 10826c2..f1224d5 100644 --- a/tplus/client/clearingengine/admin.py +++ b/tplus/client/clearingengine/admin.py @@ -229,7 +229,7 @@ async def set_trader_as_mm( }, ) - async def set_interest_rates(self, rates: [InterestRates]): + async def set_interest_rates(self, rates: list[InterestRates]): await self._post( "admin/interest/inject", json_data={"request_id": 1, "rates": [r.model_dump(mode="json") for r in rates]},