charli3_dendrite 1.5.13.dev1__tar.gz → 1.5.14.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.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/PKG-INFO +1 -1
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/pyproject.toml +2 -2
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/lending/fluidtokens/constants.py +7 -21
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/lending/fluidtokens/datums.py +44 -20
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/lending/fluidtokens/state.py +8 -1
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/lending/fluidtokens/transactions/datum_synth.py +3 -16
- charli3_dendrite-1.5.14.dev0/src/charli3_dendrite/lending/fluidtokens_v4/__init__.py +1 -0
- charli3_dendrite-1.5.14.dev0/src/charli3_dendrite/lending/fluidtokens_v4/constants.py +149 -0
- charli3_dendrite-1.5.14.dev0/src/charli3_dendrite/lending/fluidtokens_v4/datums.py +250 -0
- charli3_dendrite-1.5.14.dev0/src/charli3_dendrite/lending/fluidtokens_v4/indexing.py +191 -0
- charli3_dendrite-1.5.14.dev0/src/charli3_dendrite/lending/fluidtokens_v4/loader.py +163 -0
- charli3_dendrite-1.5.14.dev0/src/charli3_dendrite/lending/fluidtokens_v4/state.py +586 -0
- charli3_dendrite-1.5.14.dev0/src/charli3_dendrite/lending/plutus.py +71 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/lending/units.py +15 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/LICENSE +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/README.md +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/__init__.py +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/backend/__init__.py +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/backend/backend_base.py +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/backend/blockfrost/__init__.py +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/backend/blockfrost/models.py +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/backend/dbsync/__init__.py +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/backend/dbsync/models.py +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/backend/ogmios_kupo/__init__.py +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/backend/ogmios_kupo/models.py +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/backend/utils.py +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/dataclasses/__init__.py +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/dataclasses/datums.py +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/dataclasses/models.py +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/dexs/__init__.py +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/dexs/amm/__init__.py +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/dexs/amm/amm_base.py +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/dexs/amm/amm_types.py +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/dexs/amm/cswap.py +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/dexs/amm/dano.py +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/dexs/amm/minswap.py +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/dexs/amm/muesli.py +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/dexs/amm/multi_asset.py +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/dexs/amm/spectrum.py +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/dexs/amm/splash.py +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/dexs/amm/sundae.py +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/dexs/amm/sundae_v4.py +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/dexs/amm/sundae_v4_deployments.json +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/dexs/amm/vyfi.py +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/dexs/amm/wingriders.py +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/dexs/core/__init__.py +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/dexs/core/base.py +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/dexs/core/errors.py +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/dexs/ob/__init__.py +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/dexs/ob/axo.py +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/dexs/ob/cardanoswaps.py +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/dexs/ob/chadswap.py +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/dexs/ob/djed.py +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/dexs/ob/geniusyield.py +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/dexs/ob/ob_base.py +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/dexs/ob/saturnswap.py +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/lending/__init__.py +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/lending/base.py +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/lending/danogo/__init__.py +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/lending/danogo/constants.py +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/lending/danogo/datums.py +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/lending/danogo/loader.py +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/lending/danogo/market.py +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/lending/danogo/math.py +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/lending/danogo/oracles/__init__.py +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/lending/danogo/oracles/aggregator.py +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/lending/danogo/oracles/aggregator_datums.py +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/lending/danogo/oracles/deployments.py +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/lending/danogo/oracles/forward.py +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/lending/danogo/oracles/leaves.py +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/lending/danogo/oracles/locator.py +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/lending/danogo/oracles/lp_pricing.py +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/lending/danogo/oracles/recipes.json +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/lending/danogo/oracles/redeemer.py +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/lending/danogo/oracles/reproduce.py +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/lending/danogo/oracles/structured_datums.py +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/lending/danogo/state.py +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/lending/danogo/transactions/__init__.py +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/lending/danogo/transactions/_common.py +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/lending/danogo/transactions/build.py +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/lending/danogo/transactions/builder.py +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/lending/danogo/transactions/context.py +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/lending/danogo/transactions/create_loan.py +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/lending/danogo/transactions/datum_synth.py +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/lending/danogo/transactions/increase_loan.py +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/lending/danogo/transactions/loan_ids.py +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/lending/danogo/transactions/modify_collateral.py +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/lending/danogo/transactions/oracle_redeemer.py +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/lending/danogo/transactions/oracle_synth.py +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/lending/danogo/transactions/redeemers.py +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/lending/danogo/transactions/repay.py +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/lending/danogo/transactions/topup_withdraw.py +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/lending/danogo/transactions/verify.py +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/lending/fluidtokens/__init__.py +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/lending/fluidtokens/loader.py +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/lending/fluidtokens/market.py +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/lending/fluidtokens/math.py +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/lending/fluidtokens/oracles/__init__.py +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/lending/fluidtokens/oracles/feeds.py +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/lending/fluidtokens/oracles/fluid_api.py +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/lending/fluidtokens/oracles/witness.py +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/lending/fluidtokens/transactions/__init__.py +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/lending/fluidtokens/transactions/_common.py +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/lending/fluidtokens/transactions/borrow.py +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/lending/fluidtokens/transactions/builder.py +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/lending/fluidtokens/transactions/change_collateral.py +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/lending/fluidtokens/transactions/context.py +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/lending/fluidtokens/transactions/lend.py +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/lending/fluidtokens/transactions/pool.py +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/lending/fluidtokens/transactions/recast.py +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/lending/fluidtokens/transactions/redeemers.py +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/lending/fluidtokens/transactions/repay.py +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/lending/fluidtokens/transactions/request.py +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/lending/fluidtokens/transactions/resolve.py +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/lending/math.py +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/lending/oracles/__init__.py +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/lending/oracles/charli3.py +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/lending/oracles/dex_pooled.py +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/lending/oracles/fluid.py +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/lending/oracles/models.py +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/lending/oracles/orcfax.py +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/lending/oracles/qtoken.py +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/lending/registry.py +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/lending/transactions/__init__.py +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/lending/transactions/base.py +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/lending/transactions/infra.py +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/lending/transactions/snapshot.py +0 -0
- {charli3_dendrite-1.5.13.dev1 → charli3_dendrite-1.5.14.dev0}/src/charli3_dendrite/utility.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[tool.poetry]
|
|
2
2
|
name = "charli3_dendrite"
|
|
3
|
-
version = "1.5.
|
|
3
|
+
version = "1.5.14-dev0"
|
|
4
4
|
description = ""
|
|
5
5
|
authors = ["Elder Millenial <eldermillenial@protonmail.com>"]
|
|
6
6
|
readme = "README.md"
|
|
@@ -50,7 +50,7 @@ module = ["pycardano", "pycardano.*", "dotenv", "nox", "uplc", "uplc.*"]
|
|
|
50
50
|
ignore_missing_imports = true
|
|
51
51
|
|
|
52
52
|
[tool.bumpversion]
|
|
53
|
-
current_version = "1.5.
|
|
53
|
+
current_version = "1.5.14-dev0"
|
|
54
54
|
parse = """(?x)
|
|
55
55
|
(?P<major>\\d+)\\.
|
|
56
56
|
(?P<minor>\\d+)\\.
|
|
@@ -14,9 +14,8 @@ from typing import TYPE_CHECKING
|
|
|
14
14
|
from typing import TypedDict
|
|
15
15
|
|
|
16
16
|
import cbor2 # type: ignore[import-not-found]
|
|
17
|
-
|
|
18
|
-
from
|
|
19
|
-
from pycardano import ScriptHash
|
|
17
|
+
|
|
18
|
+
from charli3_dendrite.lending.units import script_payment_address
|
|
20
19
|
|
|
21
20
|
if TYPE_CHECKING:
|
|
22
21
|
from charli3_dendrite.backend.backend_base import AbstractBackend
|
|
@@ -156,19 +155,6 @@ class FluidConfig:
|
|
|
156
155
|
)
|
|
157
156
|
|
|
158
157
|
|
|
159
|
-
def _payment_address(script_hash_hex: str) -> str:
|
|
160
|
-
"""A mainnet payment-credential (enterprise) address for a spend script hash.
|
|
161
|
-
|
|
162
|
-
Entity UTxOs sit at base addresses whose stake part is not carried by the config
|
|
163
|
-
datum, but the backend discovers them by payment credential only, so a
|
|
164
|
-
payment-credential address is the stable, redeploy-proof identity to match on.
|
|
165
|
-
"""
|
|
166
|
-
return Address(
|
|
167
|
-
payment_part=ScriptHash(bytes.fromhex(script_hash_hex)),
|
|
168
|
-
network=Network.MAINNET,
|
|
169
|
-
).encode()
|
|
170
|
-
|
|
171
|
-
|
|
172
158
|
def resolve_config(backend: AbstractBackend) -> FluidConfig:
|
|
173
159
|
"""Read the live config NFT datum into a :class:`FluidConfig`.
|
|
174
160
|
|
|
@@ -183,7 +169,7 @@ def resolve_config(backend: AbstractBackend) -> FluidConfig:
|
|
|
183
169
|
)
|
|
184
170
|
|
|
185
171
|
utxo = resolve_config_utxo(backend)
|
|
186
|
-
return FluidConfig.parse(utxo.datum)
|
|
172
|
+
return FluidConfig.parse(utxo.datum or "")
|
|
187
173
|
except (TypeError, ValueError, IndexError, KeyError, AttributeError):
|
|
188
174
|
return FluidConfig.defaults()
|
|
189
175
|
|
|
@@ -194,13 +180,13 @@ def resolve_addresses(backend: AbstractBackend) -> FluidScriptAddresses:
|
|
|
194
180
|
Re-reads the config datum through `backend` so pool / loan / request discovery
|
|
195
181
|
self-heals across a protocol redeploy (new spend scripts / policies); falls back to
|
|
196
182
|
the static mainnet constants when the datum cannot be read. Addresses are
|
|
197
|
-
payment-credential identities (see :func:`
|
|
183
|
+
payment-credential identities (see :func:`script_payment_address`).
|
|
198
184
|
"""
|
|
199
185
|
config = resolve_config(backend)
|
|
200
186
|
return FluidScriptAddresses(
|
|
201
|
-
pool=
|
|
202
|
-
loan=
|
|
203
|
-
request=
|
|
187
|
+
pool=script_payment_address(config.pool_spend_skh),
|
|
188
|
+
loan=script_payment_address(config.loan_spend_skh),
|
|
189
|
+
request=script_payment_address(config.request_spend_skh),
|
|
204
190
|
pool_policy=config.pool_policy,
|
|
205
191
|
loan_policy=config.loan_policy,
|
|
206
192
|
request_policy=config.request_policy,
|
|
@@ -1,19 +1,38 @@
|
|
|
1
|
-
"""pycardano mirrors of the deployed FluidTokens V3 datums (mainnet).
|
|
1
|
+
"""pycardano mirrors of the deployed FluidTokens V3 datums (mainnet).
|
|
2
|
+
|
|
3
|
+
Every class decodes strictly: a constructor with more or fewer fields than the class
|
|
4
|
+
raises ``DeserializeException`` instead of decoding a different layout silently.
|
|
5
|
+
"""
|
|
2
6
|
from __future__ import annotations
|
|
3
7
|
|
|
4
8
|
from dataclasses import dataclass
|
|
5
9
|
from typing import List
|
|
6
10
|
from typing import TypeAlias
|
|
11
|
+
from typing import Union
|
|
7
12
|
|
|
8
13
|
from pycardano import Datum
|
|
9
14
|
from pycardano import IndefiniteList
|
|
10
|
-
from pycardano import PlutusData
|
|
11
15
|
|
|
16
|
+
from charli3_dendrite.lending.plutus import StrictPlutusData
|
|
12
17
|
from charli3_dendrite.lending.units import asset_unit
|
|
13
18
|
|
|
19
|
+
# A loan datum's ``origin_id`` is one of these tags followed by the originating pool's
|
|
20
|
+
# or request's NFT asset name.
|
|
21
|
+
ORIGIN_POOL_TAG = b"POOL"
|
|
22
|
+
ORIGIN_REQUEST_TAG = b"REQUEST"
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
@dataclass
|
|
26
|
+
class TxOutRef(StrictPlutusData):
|
|
27
|
+
"""A transaction output reference == Constr0([tx_id_bytes, index])."""
|
|
28
|
+
|
|
29
|
+
CONSTR_ID = 0
|
|
30
|
+
tx_id: bytes
|
|
31
|
+
index: int
|
|
32
|
+
|
|
14
33
|
|
|
15
34
|
@dataclass
|
|
16
|
-
class Asset(
|
|
35
|
+
class Asset(StrictPlutusData):
|
|
17
36
|
"""(policy_id, asset_name) as a `Constr`; ADA is (b"", b"")."""
|
|
18
37
|
|
|
19
38
|
CONSTR_ID = 0
|
|
@@ -26,7 +45,7 @@ class Asset(PlutusData):
|
|
|
26
45
|
|
|
27
46
|
|
|
28
47
|
@dataclass
|
|
29
|
-
class CollateralAsset(
|
|
48
|
+
class CollateralAsset(StrictPlutusData):
|
|
30
49
|
"""A collateral type: policy, optional asset name, and its oracle token."""
|
|
31
50
|
|
|
32
51
|
CONSTR_ID = 0
|
|
@@ -36,21 +55,21 @@ class CollateralAsset(PlutusData):
|
|
|
36
55
|
|
|
37
56
|
|
|
38
57
|
@dataclass
|
|
39
|
-
class NoLiquidationFullCollateralClaim(
|
|
58
|
+
class NoLiquidationFullCollateralClaim(StrictPlutusData):
|
|
40
59
|
"""LiquidationMode variant: on default the lender claims all collateral."""
|
|
41
60
|
|
|
42
61
|
CONSTR_ID = 0
|
|
43
62
|
|
|
44
63
|
|
|
45
64
|
@dataclass
|
|
46
|
-
class NoLiquidationDutchAuctionClaim(
|
|
65
|
+
class NoLiquidationDutchAuctionClaim(StrictPlutusData):
|
|
47
66
|
"""LiquidationMode variant: on default the collateral is dutch-auctioned."""
|
|
48
67
|
|
|
49
68
|
CONSTR_ID = 1
|
|
50
69
|
|
|
51
70
|
|
|
52
71
|
@dataclass
|
|
53
|
-
class Liquidation(
|
|
72
|
+
class Liquidation(StrictPlutusData):
|
|
54
73
|
"""LiquidationMode variant: liquidate against a loan-to-value threshold.
|
|
55
74
|
|
|
56
75
|
Three fields, matching the deployed datum and `ft-cardano-loans-v3` lib
|
|
@@ -67,7 +86,7 @@ class Liquidation(PlutusData):
|
|
|
67
86
|
|
|
68
87
|
|
|
69
88
|
@dataclass
|
|
70
|
-
class InterestOnRemainingPrincipal(
|
|
89
|
+
class InterestOnRemainingPrincipal(StrictPlutusData):
|
|
71
90
|
"""RepaymentMode variant: interest accrues on the remaining principal."""
|
|
72
91
|
|
|
73
92
|
CONSTR_ID = 0
|
|
@@ -75,14 +94,14 @@ class InterestOnRemainingPrincipal(PlutusData):
|
|
|
75
94
|
|
|
76
95
|
|
|
77
96
|
@dataclass
|
|
78
|
-
class PrincipalAndInterestOnInstallments(
|
|
97
|
+
class PrincipalAndInterestOnInstallments(StrictPlutusData):
|
|
79
98
|
"""RepaymentMode variant: principal and interest split across installments."""
|
|
80
99
|
|
|
81
100
|
CONSTR_ID = 1
|
|
82
101
|
|
|
83
102
|
|
|
84
103
|
@dataclass
|
|
85
|
-
class PerpetualLoan(
|
|
104
|
+
class PerpetualLoan(StrictPlutusData):
|
|
86
105
|
"""RepaymentMode variant: perpetual loan with a linear APY increase."""
|
|
87
106
|
|
|
88
107
|
CONSTR_ID = 2
|
|
@@ -90,13 +109,18 @@ class PerpetualLoan(PlutusData):
|
|
|
90
109
|
max_possible_recasts: int
|
|
91
110
|
|
|
92
111
|
|
|
93
|
-
#
|
|
94
|
-
|
|
112
|
+
# LiquidationMode is typed so a constructor with another layout (such as the V4
|
|
113
|
+
# four-field Liquidation) fails to decode. RepaymentMode stays an untyped Datum.
|
|
114
|
+
LiquidationMode: TypeAlias = Union[
|
|
115
|
+
NoLiquidationFullCollateralClaim,
|
|
116
|
+
NoLiquidationDutchAuctionClaim,
|
|
117
|
+
Liquidation,
|
|
118
|
+
]
|
|
95
119
|
RepaymentMode: TypeAlias = Datum
|
|
96
120
|
|
|
97
121
|
|
|
98
122
|
@dataclass
|
|
99
|
-
class CommonData(
|
|
123
|
+
class CommonData(StrictPlutusData):
|
|
100
124
|
"""Loan terms shared by pool, request, and loan datums."""
|
|
101
125
|
|
|
102
126
|
CONSTR_ID = 0
|
|
@@ -114,7 +138,7 @@ class CommonData(PlutusData):
|
|
|
114
138
|
|
|
115
139
|
|
|
116
140
|
@dataclass
|
|
117
|
-
class AuthCardanoSignature(
|
|
141
|
+
class AuthCardanoSignature(StrictPlutusData):
|
|
118
142
|
"""AuthorizationMethod variant: authorize by a verification-key hash."""
|
|
119
143
|
|
|
120
144
|
CONSTR_ID = 0
|
|
@@ -122,7 +146,7 @@ class AuthCardanoSignature(PlutusData):
|
|
|
122
146
|
|
|
123
147
|
|
|
124
148
|
@dataclass
|
|
125
|
-
class AuthCardanoSpendScript(
|
|
149
|
+
class AuthCardanoSpendScript(StrictPlutusData):
|
|
126
150
|
"""AuthorizationMethod variant: authorize by a spending script hash."""
|
|
127
151
|
|
|
128
152
|
CONSTR_ID = 1
|
|
@@ -130,7 +154,7 @@ class AuthCardanoSpendScript(PlutusData):
|
|
|
130
154
|
|
|
131
155
|
|
|
132
156
|
@dataclass
|
|
133
|
-
class AuthCardanoWithdrawScript(
|
|
157
|
+
class AuthCardanoWithdrawScript(StrictPlutusData):
|
|
134
158
|
"""AuthorizationMethod variant: authorize by a withdrawal script hash."""
|
|
135
159
|
|
|
136
160
|
CONSTR_ID = 2
|
|
@@ -138,7 +162,7 @@ class AuthCardanoWithdrawScript(PlutusData):
|
|
|
138
162
|
|
|
139
163
|
|
|
140
164
|
@dataclass
|
|
141
|
-
class AuthCardanoMintScript(
|
|
165
|
+
class AuthCardanoMintScript(StrictPlutusData):
|
|
142
166
|
"""AuthorizationMethod variant: authorize by a minting script hash."""
|
|
143
167
|
|
|
144
168
|
CONSTR_ID = 3
|
|
@@ -146,7 +170,7 @@ class AuthCardanoMintScript(PlutusData):
|
|
|
146
170
|
|
|
147
171
|
|
|
148
172
|
@dataclass
|
|
149
|
-
class PoolDatum(
|
|
173
|
+
class PoolDatum(StrictPlutusData):
|
|
150
174
|
"""Deployed PoolDatum — Constr0, 10 fields.
|
|
151
175
|
|
|
152
176
|
``collateral_options``, ``min_collateral``, and ``min_collateral_divider`` follow
|
|
@@ -190,7 +214,7 @@ class PoolDatum(PlutusData):
|
|
|
190
214
|
|
|
191
215
|
|
|
192
216
|
@dataclass
|
|
193
|
-
class LoanDatum(
|
|
217
|
+
class LoanDatum(StrictPlutusData):
|
|
194
218
|
"""Deployed LoanDatum — Constr0, 17 fields."""
|
|
195
219
|
|
|
196
220
|
CONSTR_ID = 0
|
|
@@ -214,7 +238,7 @@ class LoanDatum(PlutusData):
|
|
|
214
238
|
|
|
215
239
|
|
|
216
240
|
@dataclass
|
|
217
|
-
class RequestDatum(
|
|
241
|
+
class RequestDatum(StrictPlutusData):
|
|
218
242
|
"""Deployed RequestDatum — Constr0, 12 fields."""
|
|
219
243
|
|
|
220
244
|
CONSTR_ID = 0
|
|
@@ -336,11 +336,18 @@ class FluidRequestState(DendriteBaseModel):
|
|
|
336
336
|
|
|
337
337
|
_request_datum_parsed: RequestDatum | None = PrivateAttr(default=None)
|
|
338
338
|
|
|
339
|
+
@classmethod
|
|
340
|
+
def request_datum_class(cls) -> type[RequestDatum]:
|
|
341
|
+
"""Request datum type."""
|
|
342
|
+
return RequestDatum
|
|
343
|
+
|
|
339
344
|
@property
|
|
340
345
|
def request_datum(self) -> RequestDatum:
|
|
341
346
|
"""Parsed request datum (lazily decoded from CBOR)."""
|
|
342
347
|
if self._request_datum_parsed is None:
|
|
343
|
-
self._request_datum_parsed =
|
|
348
|
+
self._request_datum_parsed = self.request_datum_class().from_cbor(
|
|
349
|
+
self.datum_cbor,
|
|
350
|
+
)
|
|
344
351
|
return self._request_datum_parsed
|
|
345
352
|
|
|
346
353
|
@property
|
|
@@ -14,32 +14,19 @@ from dataclasses import dataclass
|
|
|
14
14
|
from pycardano import Datum
|
|
15
15
|
from pycardano import PlutusData
|
|
16
16
|
|
|
17
|
+
from charli3_dendrite.lending.fluidtokens.datums import ORIGIN_POOL_TAG
|
|
18
|
+
from charli3_dendrite.lending.fluidtokens.datums import ORIGIN_REQUEST_TAG
|
|
17
19
|
from charli3_dendrite.lending.fluidtokens.datums import CollateralAsset
|
|
18
20
|
from charli3_dendrite.lending.fluidtokens.datums import CommonData
|
|
19
21
|
from charli3_dendrite.lending.fluidtokens.datums import LoanDatum
|
|
20
22
|
from charli3_dendrite.lending.fluidtokens.datums import PoolDatum
|
|
21
23
|
from charli3_dendrite.lending.fluidtokens.datums import RequestDatum
|
|
22
|
-
|
|
23
|
-
# Origin-id tag a pool-origin loan datum carries: the loan's ``origin_id`` is this tag
|
|
24
|
-
# followed by the originating pool's NFT asset name (`b"POOL" + pool_id`).
|
|
25
|
-
ORIGIN_POOL_TAG = b"POOL"
|
|
26
|
-
|
|
27
|
-
# Origin-id tag a request-origin loan datum carries: ``b"REQUEST" + request_id``.
|
|
28
|
-
ORIGIN_REQUEST_TAG = b"REQUEST"
|
|
24
|
+
from charli3_dendrite.lending.fluidtokens.datums import TxOutRef
|
|
29
25
|
|
|
30
26
|
# The receipt's tag bytestring identifying an installment repayment.
|
|
31
27
|
INSTALLMENT_REPAYMENT_TAG = b"installment_repayment"
|
|
32
28
|
|
|
33
29
|
|
|
34
|
-
@dataclass
|
|
35
|
-
class TxOutRef(PlutusData):
|
|
36
|
-
"""A transaction output reference == Constr0([tx_id_bytes, index])."""
|
|
37
|
-
|
|
38
|
-
CONSTR_ID = 0
|
|
39
|
-
tx_id: bytes
|
|
40
|
-
index: int
|
|
41
|
-
|
|
42
|
-
|
|
43
30
|
@dataclass
|
|
44
31
|
class RepaymentInfo(PlutusData):
|
|
45
32
|
"""The loan terms recorded on the receipt == Constr0([...]).
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"""FluidTokens V4 lending protocol integration (read side and indexing)."""
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
"""FluidTokens V4 mainnet coordinates.
|
|
2
|
+
|
|
3
|
+
The protocol is parameterized by a config NFT whose UTxO carries a
|
|
4
|
+
:class:`~charli3_dendrite.lending.fluidtokens_v4.datums.ConfigDatum` with every
|
|
5
|
+
policy id and script hash. The constants below are the live mainnet values:
|
|
6
|
+
:func:`default_config` assembles them into that datum as an offline fallback, and
|
|
7
|
+
:func:`resolve_config` re-reads the live datum through the backend so discovery
|
|
8
|
+
follows a config update.
|
|
9
|
+
|
|
10
|
+
The lender-manager spend script is not listed in the config datum: pools opt into it
|
|
11
|
+
by pointing ``lender_bond_address`` at it, and it ships as a constant here. Its own
|
|
12
|
+
action scripts are listed in the lender-manager config datum, held with a separate
|
|
13
|
+
config NFT.
|
|
14
|
+
"""
|
|
15
|
+
|
|
16
|
+
from __future__ import annotations
|
|
17
|
+
|
|
18
|
+
from typing import TYPE_CHECKING
|
|
19
|
+
|
|
20
|
+
import cbor2 # type: ignore[import-not-found]
|
|
21
|
+
from pycardano import IndefiniteList
|
|
22
|
+
from pycardano import RawPlutusData
|
|
23
|
+
from pycardano.exception import DeserializeException
|
|
24
|
+
|
|
25
|
+
from charli3_dendrite.lending.fluidtokens_v4.datums import ConfigDatum
|
|
26
|
+
|
|
27
|
+
if TYPE_CHECKING:
|
|
28
|
+
from charli3_dendrite.backend.backend_base import AbstractBackend
|
|
29
|
+
|
|
30
|
+
CONFIG_NFT_POLICY = "235b32040fe1177c03b1d34febc470440c6eaaa2228a9c1b0e375200"
|
|
31
|
+
CONFIG_NFT_NAME = "706172616d6574657273" # "parameters"
|
|
32
|
+
LENDER_MANAGER_CONFIG_NFT_POLICY = (
|
|
33
|
+
"fb6ae2027358b4a0b62710eb95102d87fa13f66ecf55d8943699c492"
|
|
34
|
+
)
|
|
35
|
+
LENDER_MANAGER_CONFIG_NFT_NAME = "706172616d6574657273" # "parameters"
|
|
36
|
+
|
|
37
|
+
# Config datum values, in datum field order.
|
|
38
|
+
SMART_TOKENS_SPEND_SKH = "fca77bcce1e5e73c97a0bfa8c90f7cd2faff6fd6ed5b6fec1c04eefa"
|
|
39
|
+
ADMIN_SCRIPT_HASH = "d5940dc2ad9e3f43544fb02a28240f215602603a7519588532b72c53"
|
|
40
|
+
POOL_POLICY = "20f765d25da3a36644371f7619d97bdccf034f3067921921d9dce0f7"
|
|
41
|
+
REQUEST_POLICY = "9b2e325cc15d14fa23101741e6cc17e8ba977a1563738439968356d2"
|
|
42
|
+
BORROWER_BOND_POLICY = "eadc69a5d2d1357acc9b9d49ec5390fcdf6e080c7a40139917223dcb"
|
|
43
|
+
LENDER_BOND_POLICY = "bcd713bb7858d4b08738bed90ee7068d8f9b38d02e0cae0b45ac7a9b"
|
|
44
|
+
LOAN_POLICY = "20256f557cec14f61cc662468f7812a1e6531e628af257a5fc5dd0c5"
|
|
45
|
+
REPAYMENT_POLICY = "addd060da203f54e8ffc8a5d363094bc5e63d85734fe9d2869614d79"
|
|
46
|
+
POOL_SPEND_SKH = "ecd0c0fc554beb43ade65d45dd471ede4d9cfc9b22bb70de8e113458"
|
|
47
|
+
REQUEST_SPEND_SKH = "390d27f97868840864922fb0b5657ae4982b5be8bf03bf9cec81125e"
|
|
48
|
+
LOAN_SPEND_SKH = "b5763e3c9cb7f1a2167f74f76cb635d24d138a4cc5cf9d87659c662d"
|
|
49
|
+
LOAN_CLAIM_ACTION_SKH = "63b26ff93c96ae391e0f838de5d62053ec562ea82371c3aaab444902"
|
|
50
|
+
LOAN_REPAY_ACTION_SKH = "41ac9c9f0bd2acc2db8af9882b772daee90fcf1ad877f0451bd7af28"
|
|
51
|
+
LOAN_CHANGE_COLLATERAL_ACTION_SKH = (
|
|
52
|
+
"7aa6795463a8dcb3534246a6c3d6b1f29a72f920ae1dad6d0bacd43d"
|
|
53
|
+
)
|
|
54
|
+
LOAN_RECAST_ACTION_SKH = "c0af09a3656074f444e1daec043896c235d18aba0567aba7afb55fe8"
|
|
55
|
+
ASSET_MANAGER_SPEND_SKH = "b256da41be022ba1a28fe92b32eeea00109310e3f0aea1cb7791d98f"
|
|
56
|
+
POOL_CANCEL_ACTION_SKH = "f7ed285d6a9b9772666c7f379ac3e70d777b9d651026385fd26c3e4d"
|
|
57
|
+
POOL_BORROW_ACTION_SKH = "d86664db37ebf149386d3b26cc9b2e9c73bc11319052a6b4927c0a8f"
|
|
58
|
+
POOL_SELL_LENDER_POSITION_ACTION_SKH = (
|
|
59
|
+
"fc16ccaa435f24833da06681fdc8a71ae460c41517e87d12baf644fa"
|
|
60
|
+
)
|
|
61
|
+
POOL_COMPOUND_ACTION_SKH = "fef12ea655d7d562bd419cad05723e201b1f292e6b6be5a874f073ba"
|
|
62
|
+
POOL_EDIT_ACTION_SKH = "1ec1853344febb4f5de40fceca2316deb68baa3300161afed4ed6ae0"
|
|
63
|
+
POOL_MANAGER_SPEND_SKH = "dfb1d21e529af28d82004eee5689e3304bb896c35ce8fe65c85612b0"
|
|
64
|
+
POOL_MANAGER_POLICY = "1e0bf58a4ef7f8f7579b58e290ea9f9283239bb4f7932fe8f29df03a"
|
|
65
|
+
LOCKED_BORROWER_MANAGER_SPEND_SKH = (
|
|
66
|
+
"072eee302404c8d869bbc61a2c45502d371d96ec7d6aae7b179bfaa3"
|
|
67
|
+
)
|
|
68
|
+
|
|
69
|
+
# Not carried by the config datum (see the module docstring).
|
|
70
|
+
LENDER_MANAGER_SPEND_SKH = "6743f4b69446b4e066cfb89daa3d01ef041b6d2646968993be4cec09"
|
|
71
|
+
|
|
72
|
+
# Plutus ``Credential``: ``ScriptCredential`` is constructor alternative 1 (tag 122).
|
|
73
|
+
_SCRIPT_CREDENTIAL_TAG = 122
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
def default_config() -> ConfigDatum:
|
|
77
|
+
"""The mainnet config datum rebuilt from this module's constants.
|
|
78
|
+
|
|
79
|
+
The Dutch auction is disabled on mainnet: its script hashes are empty and its
|
|
80
|
+
parameters are zero.
|
|
81
|
+
"""
|
|
82
|
+
return ConfigDatum(
|
|
83
|
+
smart_tokens_spend_script_hash=bytes.fromhex(SMART_TOKENS_SPEND_SKH),
|
|
84
|
+
admin_credential=RawPlutusData(
|
|
85
|
+
cbor2.CBORTag(
|
|
86
|
+
_SCRIPT_CREDENTIAL_TAG,
|
|
87
|
+
IndefiniteList([bytes.fromhex(ADMIN_SCRIPT_HASH)]),
|
|
88
|
+
),
|
|
89
|
+
),
|
|
90
|
+
pool_policy_id=bytes.fromhex(POOL_POLICY),
|
|
91
|
+
request_policy_id=bytes.fromhex(REQUEST_POLICY),
|
|
92
|
+
borrower_bond_policy_id=bytes.fromhex(BORROWER_BOND_POLICY),
|
|
93
|
+
lender_bond_policy_id=bytes.fromhex(LENDER_BOND_POLICY),
|
|
94
|
+
loan_policy_id=bytes.fromhex(LOAN_POLICY),
|
|
95
|
+
repayment_policy_id=bytes.fromhex(REPAYMENT_POLICY),
|
|
96
|
+
pool_spend_script_hash=bytes.fromhex(POOL_SPEND_SKH),
|
|
97
|
+
request_spend_script_hash=bytes.fromhex(REQUEST_SPEND_SKH),
|
|
98
|
+
loan_spend_script_hash=bytes.fromhex(LOAN_SPEND_SKH),
|
|
99
|
+
loan_claim_action_script_hash=bytes.fromhex(LOAN_CLAIM_ACTION_SKH),
|
|
100
|
+
loan_repay_action_script_hash=bytes.fromhex(LOAN_REPAY_ACTION_SKH),
|
|
101
|
+
loan_change_collateral_action_script_hash=bytes.fromhex(
|
|
102
|
+
LOAN_CHANGE_COLLATERAL_ACTION_SKH,
|
|
103
|
+
),
|
|
104
|
+
loan_recast_action_script_hash=bytes.fromhex(LOAN_RECAST_ACTION_SKH),
|
|
105
|
+
asset_manager_spend_script_hash=bytes.fromhex(ASSET_MANAGER_SPEND_SKH),
|
|
106
|
+
dutch_auction_spend_script_hash=b"",
|
|
107
|
+
dutch_auction_withdraw_script_hash=b"",
|
|
108
|
+
dutch_auction_starting_increase_per_mille=0,
|
|
109
|
+
dutch_auction_lowering_amount=0,
|
|
110
|
+
dutch_auction_lowering_frequency=0,
|
|
111
|
+
dutch_auction_min_price_to_cancel=0,
|
|
112
|
+
pool_cancel_action_script_hash=bytes.fromhex(POOL_CANCEL_ACTION_SKH),
|
|
113
|
+
pool_borrow_action_script_hash=bytes.fromhex(POOL_BORROW_ACTION_SKH),
|
|
114
|
+
pool_sell_lender_position_action_script_hash=bytes.fromhex(
|
|
115
|
+
POOL_SELL_LENDER_POSITION_ACTION_SKH,
|
|
116
|
+
),
|
|
117
|
+
pool_compound_action_script_hash=bytes.fromhex(POOL_COMPOUND_ACTION_SKH),
|
|
118
|
+
pool_edit_action_script_hash=bytes.fromhex(POOL_EDIT_ACTION_SKH),
|
|
119
|
+
pool_manager_spend_script_hash=bytes.fromhex(POOL_MANAGER_SPEND_SKH),
|
|
120
|
+
pool_manager_policy_id=bytes.fromhex(POOL_MANAGER_POLICY),
|
|
121
|
+
locked_borrower_manager_spend_script_hash=bytes.fromhex(
|
|
122
|
+
LOCKED_BORROWER_MANAGER_SPEND_SKH,
|
|
123
|
+
),
|
|
124
|
+
)
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
def resolve_config(backend: AbstractBackend) -> ConfigDatum:
|
|
128
|
+
"""Read the live config datum held with the config NFT.
|
|
129
|
+
|
|
130
|
+
Falls back to :func:`default_config` when the datum cannot be read or decoded (a
|
|
131
|
+
backend without dbsync queries, a missing config UTxO or datum, or a datum whose
|
|
132
|
+
layout no longer matches :class:`ConfigDatum`), so discovery keeps working offline.
|
|
133
|
+
Database errors propagate.
|
|
134
|
+
"""
|
|
135
|
+
# Imported lazily: the V3 resolver pulls in the V3 transaction context.
|
|
136
|
+
from charli3_dendrite.lending.fluidtokens.transactions.resolve import (
|
|
137
|
+
resolve_utxo_by_asset,
|
|
138
|
+
)
|
|
139
|
+
|
|
140
|
+
try:
|
|
141
|
+
utxo = resolve_utxo_by_asset(backend, CONFIG_NFT_POLICY, CONFIG_NFT_NAME)
|
|
142
|
+
except (TypeError, ValueError):
|
|
143
|
+
return default_config()
|
|
144
|
+
if not utxo.datum:
|
|
145
|
+
return default_config()
|
|
146
|
+
try:
|
|
147
|
+
return ConfigDatum.from_cbor(utxo.datum)
|
|
148
|
+
except (DeserializeException, ValueError, cbor2.CBORDecodeError):
|
|
149
|
+
return default_config()
|