charli3_dendrite 1.4.11.dev0__tar.gz → 1.4.12.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.11.dev0 → charli3_dendrite-1.4.12.dev0}/PKG-INFO +1 -1
- {charli3_dendrite-1.4.11.dev0 → charli3_dendrite-1.4.12.dev0}/pyproject.toml +2 -2
- {charli3_dendrite-1.4.11.dev0 → charli3_dendrite-1.4.12.dev0}/src/charli3_dendrite/dexs/amm/splash.py +69 -0
- {charli3_dendrite-1.4.11.dev0 → charli3_dendrite-1.4.12.dev0}/LICENSE +0 -0
- {charli3_dendrite-1.4.11.dev0 → charli3_dendrite-1.4.12.dev0}/README.md +0 -0
- {charli3_dendrite-1.4.11.dev0 → charli3_dendrite-1.4.12.dev0}/src/charli3_dendrite/__init__.py +0 -0
- {charli3_dendrite-1.4.11.dev0 → charli3_dendrite-1.4.12.dev0}/src/charli3_dendrite/backend/__init__.py +0 -0
- {charli3_dendrite-1.4.11.dev0 → charli3_dendrite-1.4.12.dev0}/src/charli3_dendrite/backend/backend_base.py +0 -0
- {charli3_dendrite-1.4.11.dev0 → charli3_dendrite-1.4.12.dev0}/src/charli3_dendrite/backend/blockfrost/__init__.py +0 -0
- {charli3_dendrite-1.4.11.dev0 → charli3_dendrite-1.4.12.dev0}/src/charli3_dendrite/backend/blockfrost/models.py +0 -0
- {charli3_dendrite-1.4.11.dev0 → charli3_dendrite-1.4.12.dev0}/src/charli3_dendrite/backend/dbsync/__init__.py +0 -0
- {charli3_dendrite-1.4.11.dev0 → charli3_dendrite-1.4.12.dev0}/src/charli3_dendrite/backend/dbsync/models.py +0 -0
- {charli3_dendrite-1.4.11.dev0 → charli3_dendrite-1.4.12.dev0}/src/charli3_dendrite/backend/ogmios_kupo/__init__.py +0 -0
- {charli3_dendrite-1.4.11.dev0 → charli3_dendrite-1.4.12.dev0}/src/charli3_dendrite/backend/ogmios_kupo/models.py +0 -0
- {charli3_dendrite-1.4.11.dev0 → charli3_dendrite-1.4.12.dev0}/src/charli3_dendrite/backend/utils.py +0 -0
- {charli3_dendrite-1.4.11.dev0 → charli3_dendrite-1.4.12.dev0}/src/charli3_dendrite/dataclasses/__init__.py +0 -0
- {charli3_dendrite-1.4.11.dev0 → charli3_dendrite-1.4.12.dev0}/src/charli3_dendrite/dataclasses/datums.py +0 -0
- {charli3_dendrite-1.4.11.dev0 → charli3_dendrite-1.4.12.dev0}/src/charli3_dendrite/dataclasses/models.py +0 -0
- {charli3_dendrite-1.4.11.dev0 → charli3_dendrite-1.4.12.dev0}/src/charli3_dendrite/dexs/__init__.py +0 -0
- {charli3_dendrite-1.4.11.dev0 → charli3_dendrite-1.4.12.dev0}/src/charli3_dendrite/dexs/amm/__init__.py +0 -0
- {charli3_dendrite-1.4.11.dev0 → charli3_dendrite-1.4.12.dev0}/src/charli3_dendrite/dexs/amm/amm_base.py +0 -0
- {charli3_dendrite-1.4.11.dev0 → charli3_dendrite-1.4.12.dev0}/src/charli3_dendrite/dexs/amm/amm_types.py +0 -0
- {charli3_dendrite-1.4.11.dev0 → charli3_dendrite-1.4.12.dev0}/src/charli3_dendrite/dexs/amm/cswap.py +0 -0
- {charli3_dendrite-1.4.11.dev0 → charli3_dendrite-1.4.12.dev0}/src/charli3_dendrite/dexs/amm/dano.py +0 -0
- {charli3_dendrite-1.4.11.dev0 → charli3_dendrite-1.4.12.dev0}/src/charli3_dendrite/dexs/amm/minswap.py +0 -0
- {charli3_dendrite-1.4.11.dev0 → charli3_dendrite-1.4.12.dev0}/src/charli3_dendrite/dexs/amm/muesli.py +0 -0
- {charli3_dendrite-1.4.11.dev0 → charli3_dendrite-1.4.12.dev0}/src/charli3_dendrite/dexs/amm/spectrum.py +0 -0
- {charli3_dendrite-1.4.11.dev0 → charli3_dendrite-1.4.12.dev0}/src/charli3_dendrite/dexs/amm/sundae.py +0 -0
- {charli3_dendrite-1.4.11.dev0 → charli3_dendrite-1.4.12.dev0}/src/charli3_dendrite/dexs/amm/vyfi.py +0 -0
- {charli3_dendrite-1.4.11.dev0 → charli3_dendrite-1.4.12.dev0}/src/charli3_dendrite/dexs/amm/wingriders.py +0 -0
- {charli3_dendrite-1.4.11.dev0 → charli3_dendrite-1.4.12.dev0}/src/charli3_dendrite/dexs/core/__init__.py +0 -0
- {charli3_dendrite-1.4.11.dev0 → charli3_dendrite-1.4.12.dev0}/src/charli3_dendrite/dexs/core/base.py +0 -0
- {charli3_dendrite-1.4.11.dev0 → charli3_dendrite-1.4.12.dev0}/src/charli3_dendrite/dexs/core/errors.py +0 -0
- {charli3_dendrite-1.4.11.dev0 → charli3_dendrite-1.4.12.dev0}/src/charli3_dendrite/dexs/ob/__init__.py +0 -0
- {charli3_dendrite-1.4.11.dev0 → charli3_dendrite-1.4.12.dev0}/src/charli3_dendrite/dexs/ob/axo.py +0 -0
- {charli3_dendrite-1.4.11.dev0 → charli3_dendrite-1.4.12.dev0}/src/charli3_dendrite/dexs/ob/cardanoswaps.py +0 -0
- {charli3_dendrite-1.4.11.dev0 → charli3_dendrite-1.4.12.dev0}/src/charli3_dendrite/dexs/ob/chadswap.py +0 -0
- {charli3_dendrite-1.4.11.dev0 → charli3_dendrite-1.4.12.dev0}/src/charli3_dendrite/dexs/ob/djed.py +0 -0
- {charli3_dendrite-1.4.11.dev0 → charli3_dendrite-1.4.12.dev0}/src/charli3_dendrite/dexs/ob/geniusyield.py +0 -0
- {charli3_dendrite-1.4.11.dev0 → charli3_dendrite-1.4.12.dev0}/src/charli3_dendrite/dexs/ob/ob_base.py +0 -0
- {charli3_dendrite-1.4.11.dev0 → charli3_dendrite-1.4.12.dev0}/src/charli3_dendrite/dexs/ob/saturnswap.py +0 -0
- {charli3_dendrite-1.4.11.dev0 → charli3_dendrite-1.4.12.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.12-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.4.
|
|
53
|
+
current_version = "1.4.12-dev0"
|
|
54
54
|
parse = """(?x)
|
|
55
55
|
(?P<major>\\d+)\\.
|
|
56
56
|
(?P<minor>\\d+)\\.
|
|
@@ -2,10 +2,13 @@
|
|
|
2
2
|
|
|
3
3
|
from dataclasses import dataclass
|
|
4
4
|
from dataclasses import field
|
|
5
|
+
from dataclasses import replace
|
|
6
|
+
from hashlib import blake2b
|
|
5
7
|
from typing import Any
|
|
6
8
|
from typing import List
|
|
7
9
|
from typing import Union
|
|
8
10
|
|
|
11
|
+
import cbor2 # type: ignore[import-not-found]
|
|
9
12
|
from pycardano import Address
|
|
10
13
|
from pycardano import DeserializeException
|
|
11
14
|
from pycardano import PlutusData
|
|
@@ -61,6 +64,21 @@ class Rationale(PlutusData):
|
|
|
61
64
|
denominator: int
|
|
62
65
|
|
|
63
66
|
|
|
67
|
+
def _canonical_plutus_cbor(data: PlutusData) -> bytes:
|
|
68
|
+
"""Serialise Plutus data to canonical, definite-length CBOR.
|
|
69
|
+
|
|
70
|
+
pycardano encodes Plutus constructors with indefinite-length arrays. The
|
|
71
|
+
Splash order contract recomputes the order beacon over the canonical
|
|
72
|
+
(definite-length) encoding of the datum, so any hash that must agree with the
|
|
73
|
+
on-chain validator has to be taken over this form rather than pycardano's
|
|
74
|
+
default encoding.
|
|
75
|
+
"""
|
|
76
|
+
raw = data.to_cbor()
|
|
77
|
+
if isinstance(raw, str):
|
|
78
|
+
raw = bytes.fromhex(raw)
|
|
79
|
+
return cbor2.dumps(cbor2.loads(raw), canonical=True)
|
|
80
|
+
|
|
81
|
+
|
|
64
82
|
@dataclass
|
|
65
83
|
class SplashOrderDatum(OrderDatum):
|
|
66
84
|
"""Order Datum."""
|
|
@@ -99,6 +117,57 @@ class SplashOrderDatum(OrderDatum):
|
|
|
99
117
|
"""This method should return the type of the order."""
|
|
100
118
|
return OrderType.swap
|
|
101
119
|
|
|
120
|
+
def compute_beacon(
|
|
121
|
+
self,
|
|
122
|
+
seed_tx_hash: bytes | str,
|
|
123
|
+
seed_index: int,
|
|
124
|
+
order_index: int = 0,
|
|
125
|
+
) -> bytes:
|
|
126
|
+
"""Derive the 28-byte beacon that binds this order to its funding input.
|
|
127
|
+
|
|
128
|
+
The beacon commits to the seed UTxO that funds the order
|
|
129
|
+
(``seed_tx_hash`` at ``seed_index``), the order's position among the
|
|
130
|
+
orders created in the same transaction (``order_index``), and the rest of
|
|
131
|
+
the datum. The on-chain contract reproduces it as::
|
|
132
|
+
|
|
133
|
+
blake2b_224(
|
|
134
|
+
seed_tx_hash
|
|
135
|
+
+ seed_index.to_bytes(8, "big")
|
|
136
|
+
+ order_index.to_bytes(8, "big")
|
|
137
|
+
+ blake2b_224(canonical_cbor(datum with beacon = 28 zero bytes))
|
|
138
|
+
)
|
|
139
|
+
|
|
140
|
+
The inner digest is taken with the ``beacon`` field zeroed and over the
|
|
141
|
+
canonical CBOR encoding, matching the validator.
|
|
142
|
+
"""
|
|
143
|
+
if isinstance(seed_tx_hash, str):
|
|
144
|
+
seed_tx_hash = bytes.fromhex(seed_tx_hash)
|
|
145
|
+
|
|
146
|
+
placeholder = replace(self, beacon=bytes(28))
|
|
147
|
+
inner = blake2b(
|
|
148
|
+
_canonical_plutus_cbor(placeholder),
|
|
149
|
+
digest_size=28,
|
|
150
|
+
).digest()
|
|
151
|
+
preimage = (
|
|
152
|
+
seed_tx_hash
|
|
153
|
+
+ seed_index.to_bytes(8, "big")
|
|
154
|
+
+ order_index.to_bytes(8, "big")
|
|
155
|
+
+ inner
|
|
156
|
+
)
|
|
157
|
+
return blake2b(preimage, digest_size=28).digest()
|
|
158
|
+
|
|
159
|
+
def with_beacon(
|
|
160
|
+
self,
|
|
161
|
+
seed_tx_hash: bytes | str,
|
|
162
|
+
seed_index: int,
|
|
163
|
+
order_index: int = 0,
|
|
164
|
+
) -> "SplashOrderDatum":
|
|
165
|
+
"""Return a copy of this datum with the ``beacon`` field set correctly."""
|
|
166
|
+
return replace(
|
|
167
|
+
self,
|
|
168
|
+
beacon=self.compute_beacon(seed_tx_hash, seed_index, order_index),
|
|
169
|
+
)
|
|
170
|
+
|
|
102
171
|
|
|
103
172
|
@dataclass
|
|
104
173
|
class SplashSSPPoolDatum(PoolDatum):
|
|
File without changes
|
|
File without changes
|
{charli3_dendrite-1.4.11.dev0 → charli3_dendrite-1.4.12.dev0}/src/charli3_dendrite/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{charli3_dendrite-1.4.11.dev0 → charli3_dendrite-1.4.12.dev0}/src/charli3_dendrite/backend/utils.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{charli3_dendrite-1.4.11.dev0 → charli3_dendrite-1.4.12.dev0}/src/charli3_dendrite/dexs/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{charli3_dendrite-1.4.11.dev0 → charli3_dendrite-1.4.12.dev0}/src/charli3_dendrite/dexs/amm/cswap.py
RENAMED
|
File without changes
|
{charli3_dendrite-1.4.11.dev0 → charli3_dendrite-1.4.12.dev0}/src/charli3_dendrite/dexs/amm/dano.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{charli3_dendrite-1.4.11.dev0 → charli3_dendrite-1.4.12.dev0}/src/charli3_dendrite/dexs/amm/vyfi.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{charli3_dendrite-1.4.11.dev0 → charli3_dendrite-1.4.12.dev0}/src/charli3_dendrite/dexs/core/base.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{charli3_dendrite-1.4.11.dev0 → charli3_dendrite-1.4.12.dev0}/src/charli3_dendrite/dexs/ob/axo.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{charli3_dendrite-1.4.11.dev0 → charli3_dendrite-1.4.12.dev0}/src/charli3_dendrite/dexs/ob/djed.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{charli3_dendrite-1.4.11.dev0 → charli3_dendrite-1.4.12.dev0}/src/charli3_dendrite/utility.py
RENAMED
|
File without changes
|