charli3_dendrite 1.4.6.dev0__tar.gz → 1.4.7.dev0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {charli3_dendrite-1.4.6.dev0 → charli3_dendrite-1.4.7.dev0}/PKG-INFO +1 -1
- {charli3_dendrite-1.4.6.dev0 → charli3_dendrite-1.4.7.dev0}/pyproject.toml +2 -2
- {charli3_dendrite-1.4.6.dev0 → charli3_dendrite-1.4.7.dev0}/src/charli3_dendrite/__init__.py +1 -0
- {charli3_dendrite-1.4.6.dev0 → charli3_dendrite-1.4.7.dev0}/src/charli3_dendrite/backend/backend_base.py +18 -0
- {charli3_dendrite-1.4.6.dev0 → charli3_dendrite-1.4.7.dev0}/src/charli3_dendrite/backend/dbsync/__init__.py +37 -3
- charli3_dendrite-1.4.7.dev0/src/charli3_dendrite/dexs/amm/dano.py +1087 -0
- {charli3_dendrite-1.4.6.dev0 → charli3_dendrite-1.4.7.dev0}/src/charli3_dendrite/dexs/ob/saturnswap.py +100 -18
- {charli3_dendrite-1.4.6.dev0 → charli3_dendrite-1.4.7.dev0}/LICENSE +0 -0
- {charli3_dendrite-1.4.6.dev0 → charli3_dendrite-1.4.7.dev0}/README.md +0 -0
- {charli3_dendrite-1.4.6.dev0 → charli3_dendrite-1.4.7.dev0}/src/charli3_dendrite/backend/__init__.py +0 -0
- {charli3_dendrite-1.4.6.dev0 → charli3_dendrite-1.4.7.dev0}/src/charli3_dendrite/backend/blockfrost/__init__.py +0 -0
- {charli3_dendrite-1.4.6.dev0 → charli3_dendrite-1.4.7.dev0}/src/charli3_dendrite/backend/blockfrost/models.py +0 -0
- {charli3_dendrite-1.4.6.dev0 → charli3_dendrite-1.4.7.dev0}/src/charli3_dendrite/backend/dbsync/models.py +0 -0
- {charli3_dendrite-1.4.6.dev0 → charli3_dendrite-1.4.7.dev0}/src/charli3_dendrite/backend/ogmios_kupo/__init__.py +0 -0
- {charli3_dendrite-1.4.6.dev0 → charli3_dendrite-1.4.7.dev0}/src/charli3_dendrite/backend/ogmios_kupo/models.py +0 -0
- {charli3_dendrite-1.4.6.dev0 → charli3_dendrite-1.4.7.dev0}/src/charli3_dendrite/backend/utils.py +0 -0
- {charli3_dendrite-1.4.6.dev0 → charli3_dendrite-1.4.7.dev0}/src/charli3_dendrite/dataclasses/__init__.py +0 -0
- {charli3_dendrite-1.4.6.dev0 → charli3_dendrite-1.4.7.dev0}/src/charli3_dendrite/dataclasses/datums.py +0 -0
- {charli3_dendrite-1.4.6.dev0 → charli3_dendrite-1.4.7.dev0}/src/charli3_dendrite/dataclasses/models.py +0 -0
- {charli3_dendrite-1.4.6.dev0 → charli3_dendrite-1.4.7.dev0}/src/charli3_dendrite/dexs/__init__.py +0 -0
- {charli3_dendrite-1.4.6.dev0 → charli3_dendrite-1.4.7.dev0}/src/charli3_dendrite/dexs/amm/__init__.py +0 -0
- {charli3_dendrite-1.4.6.dev0 → charli3_dendrite-1.4.7.dev0}/src/charli3_dendrite/dexs/amm/amm_base.py +0 -0
- {charli3_dendrite-1.4.6.dev0 → charli3_dendrite-1.4.7.dev0}/src/charli3_dendrite/dexs/amm/amm_types.py +0 -0
- {charli3_dendrite-1.4.6.dev0 → charli3_dendrite-1.4.7.dev0}/src/charli3_dendrite/dexs/amm/cswap.py +0 -0
- {charli3_dendrite-1.4.6.dev0 → charli3_dendrite-1.4.7.dev0}/src/charli3_dendrite/dexs/amm/minswap.py +0 -0
- {charli3_dendrite-1.4.6.dev0 → charli3_dendrite-1.4.7.dev0}/src/charli3_dendrite/dexs/amm/muesli.py +0 -0
- {charli3_dendrite-1.4.6.dev0 → charli3_dendrite-1.4.7.dev0}/src/charli3_dendrite/dexs/amm/spectrum.py +0 -0
- {charli3_dendrite-1.4.6.dev0 → charli3_dendrite-1.4.7.dev0}/src/charli3_dendrite/dexs/amm/splash.py +0 -0
- {charli3_dendrite-1.4.6.dev0 → charli3_dendrite-1.4.7.dev0}/src/charli3_dendrite/dexs/amm/sundae.py +0 -0
- {charli3_dendrite-1.4.6.dev0 → charli3_dendrite-1.4.7.dev0}/src/charli3_dendrite/dexs/amm/vyfi.py +0 -0
- {charli3_dendrite-1.4.6.dev0 → charli3_dendrite-1.4.7.dev0}/src/charli3_dendrite/dexs/amm/wingriders.py +0 -0
- {charli3_dendrite-1.4.6.dev0 → charli3_dendrite-1.4.7.dev0}/src/charli3_dendrite/dexs/core/__init__.py +0 -0
- {charli3_dendrite-1.4.6.dev0 → charli3_dendrite-1.4.7.dev0}/src/charli3_dendrite/dexs/core/base.py +0 -0
- {charli3_dendrite-1.4.6.dev0 → charli3_dendrite-1.4.7.dev0}/src/charli3_dendrite/dexs/core/errors.py +0 -0
- {charli3_dendrite-1.4.6.dev0 → charli3_dendrite-1.4.7.dev0}/src/charli3_dendrite/dexs/ob/__init__.py +0 -0
- {charli3_dendrite-1.4.6.dev0 → charli3_dendrite-1.4.7.dev0}/src/charli3_dendrite/dexs/ob/axo.py +0 -0
- {charli3_dendrite-1.4.6.dev0 → charli3_dendrite-1.4.7.dev0}/src/charli3_dendrite/dexs/ob/chadswap.py +0 -0
- {charli3_dendrite-1.4.6.dev0 → charli3_dendrite-1.4.7.dev0}/src/charli3_dendrite/dexs/ob/djed.py +0 -0
- {charli3_dendrite-1.4.6.dev0 → charli3_dendrite-1.4.7.dev0}/src/charli3_dendrite/dexs/ob/geniusyield.py +0 -0
- {charli3_dendrite-1.4.6.dev0 → charli3_dendrite-1.4.7.dev0}/src/charli3_dendrite/dexs/ob/ob_base.py +0 -0
- {charli3_dendrite-1.4.6.dev0 → charli3_dendrite-1.4.7.dev0}/src/charli3_dendrite/utility.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[tool.poetry]
|
|
2
2
|
name = "charli3_dendrite"
|
|
3
|
-
version = "1.4.
|
|
3
|
+
version = "1.4.7-dev0"
|
|
4
4
|
description = ""
|
|
5
5
|
authors = ["Elder Millenial <eldermillenial@protonmail.com>"]
|
|
6
6
|
readme = "README.md"
|
|
@@ -49,7 +49,7 @@ module = ["pycardano", "pycardano.*", "dotenv", "nox"]
|
|
|
49
49
|
ignore_missing_imports = true
|
|
50
50
|
|
|
51
51
|
[tool.bumpversion]
|
|
52
|
-
current_version = "1.4.
|
|
52
|
+
current_version = "1.4.7-dev0"
|
|
53
53
|
parse = """(?x)
|
|
54
54
|
(?P<major>\\d+)\\.
|
|
55
55
|
(?P<minor>\\d+)\\.
|
{charli3_dendrite-1.4.6.dev0 → charli3_dendrite-1.4.7.dev0}/src/charli3_dendrite/__init__.py
RENAMED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
# noqa
|
|
2
2
|
from charli3_dendrite.dexs.amm.cswap import CSwapCPPState
|
|
3
|
+
from charli3_dendrite.dexs.amm.dano import DanoCLMMState
|
|
3
4
|
from charli3_dendrite.dexs.amm.minswap import MinswapCPPState
|
|
4
5
|
from charli3_dendrite.dexs.amm.minswap import MinswapDJEDiUSDStableState
|
|
5
6
|
from charli3_dendrite.dexs.amm.minswap import MinswapDJEDUSDCStableState
|
|
@@ -99,6 +99,24 @@ class AbstractBackend(ABC):
|
|
|
99
99
|
"""
|
|
100
100
|
pass
|
|
101
101
|
|
|
102
|
+
def get_stake_rewards(self, address: Address) -> int:
|
|
103
|
+
"""Withdrawable staking-reward balance (lovelace) for a reward address.
|
|
104
|
+
|
|
105
|
+
Direct-spend DEXs whose pools stake their ADA (e.g. Dano) must withdraw
|
|
106
|
+
the pool's accrued rewards as part of a swap; the withdrawal amount must
|
|
107
|
+
equal the account's current withdrawable balance. Not every backend can
|
|
108
|
+
answer this — those raise ``NotImplementedError``.
|
|
109
|
+
|
|
110
|
+
Args:
|
|
111
|
+
address (Address): A stake/reward address (delegation part only).
|
|
112
|
+
|
|
113
|
+
Returns:
|
|
114
|
+
int: Withdrawable reward balance in lovelace (0 if none).
|
|
115
|
+
"""
|
|
116
|
+
raise NotImplementedError(
|
|
117
|
+
f"{type(self).__name__} does not implement get_stake_rewards",
|
|
118
|
+
)
|
|
119
|
+
|
|
102
120
|
@abstractmethod
|
|
103
121
|
def get_historical_order_utxos(
|
|
104
122
|
self,
|
|
@@ -5,6 +5,7 @@ import logging
|
|
|
5
5
|
import os
|
|
6
6
|
from datetime import datetime
|
|
7
7
|
from threading import Lock
|
|
8
|
+
from typing import Any
|
|
8
9
|
|
|
9
10
|
import psycopg_pool # type: ignore
|
|
10
11
|
from dotenv import load_dotenv # type: ignore
|
|
@@ -296,7 +297,7 @@ OFFSET %(offset)s"""
|
|
|
296
297
|
tx_hash: str,
|
|
297
298
|
addresses: list[str],
|
|
298
299
|
assets: list[str] | None = None,
|
|
299
|
-
) -> tuple[str, dict[str,
|
|
300
|
+
) -> tuple[str, dict[str, Any]]:
|
|
300
301
|
"""Get transactions by policy or address."""
|
|
301
302
|
# Use the pool selector to format the output
|
|
302
303
|
datum_selector = PoolSelector.select()
|
|
@@ -399,7 +400,7 @@ AND ma.policy = ANY(%(policies)b) AND ma.name = ANY(%(names)b)"""
|
|
|
399
400
|
def _get_pool_utxos_in_block(self, block_no: int) -> tuple[str, dict]:
|
|
400
401
|
# Use this for gathering all assets for multiple addresses
|
|
401
402
|
datum_selector = (
|
|
402
|
-
PoolSelector.select()
|
|
403
|
+
PoolSelector.select() # noqa: S608
|
|
403
404
|
+ """
|
|
404
405
|
FROM (
|
|
405
406
|
SELECT txo.*, address.address, address.payment_cred
|
|
@@ -469,6 +470,39 @@ LIMIT 1"""
|
|
|
469
470
|
|
|
470
471
|
return UTxOSelector.parse(r[0])
|
|
471
472
|
|
|
473
|
+
def _get_stake_rewards(self, address: Address) -> tuple[str, dict]:
|
|
474
|
+
# Withdrawable balance = spendable rewards (member/leader + treasury/
|
|
475
|
+
# reserves "rest") minus everything already withdrawn. spendable_epoch
|
|
476
|
+
# gates rewards by the ~2-epoch maturation delay.
|
|
477
|
+
query = """
|
|
478
|
+
SELECT (
|
|
479
|
+
COALESCE((SELECT SUM(r.amount) FROM reward r
|
|
480
|
+
JOIN stake_address sa ON sa.id = r.addr_id
|
|
481
|
+
WHERE sa.hash_raw = %(raw)b
|
|
482
|
+
AND r.spendable_epoch <= (SELECT MAX(epoch_no) FROM block)), 0)
|
|
483
|
+
+ COALESCE((SELECT SUM(rr.amount) FROM reward_rest rr
|
|
484
|
+
JOIN stake_address sa ON sa.id = rr.addr_id
|
|
485
|
+
WHERE sa.hash_raw = %(raw)b
|
|
486
|
+
AND rr.spendable_epoch <= (SELECT MAX(epoch_no) FROM block)), 0)
|
|
487
|
+
- COALESCE((SELECT SUM(w.amount) FROM withdrawal w
|
|
488
|
+
JOIN stake_address sa ON sa.id = w.addr_id
|
|
489
|
+
WHERE sa.hash_raw = %(raw)b), 0)
|
|
490
|
+
) AS balance
|
|
491
|
+
"""
|
|
492
|
+
return query, {"raw": bytes(address)}
|
|
493
|
+
|
|
494
|
+
def get_stake_rewards(self, address: Address) -> int:
|
|
495
|
+
"""Withdrawable staking-reward balance (lovelace) for a reward address."""
|
|
496
|
+
query, values = self._get_stake_rewards(address)
|
|
497
|
+
r = self.db_query(query, values)
|
|
498
|
+
return int((r[0]["balance"] if r else 0) or 0)
|
|
499
|
+
|
|
500
|
+
async def get_stake_rewards_async(self, address: Address) -> int:
|
|
501
|
+
"""Withdrawable staking-reward balance (lovelace) for a reward address."""
|
|
502
|
+
query, values = self._get_stake_rewards(address)
|
|
503
|
+
r = await self.db_query_async(query, values)
|
|
504
|
+
return int((r[0]["balance"] if r else 0) or 0)
|
|
505
|
+
|
|
472
506
|
def _get_datum_from_address(
|
|
473
507
|
self,
|
|
474
508
|
address: Address,
|
|
@@ -631,7 +665,7 @@ OFFSET %(offset)s"""
|
|
|
631
665
|
|
|
632
666
|
import pprint
|
|
633
667
|
|
|
634
|
-
pprint.pprint(r, indent=4)
|
|
668
|
+
pprint.pprint(r, indent=4) # noqa: T203
|
|
635
669
|
|
|
636
670
|
return OrderSelector.parse(r)
|
|
637
671
|
|