duewall 0.1.0__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.
- duewall-0.1.0/LICENSE +21 -0
- duewall-0.1.0/PKG-INFO +104 -0
- duewall-0.1.0/README.md +85 -0
- duewall-0.1.0/duewall/__init__.py +7 -0
- duewall-0.1.0/duewall/client.py +96 -0
- duewall-0.1.0/duewall.egg-info/PKG-INFO +104 -0
- duewall-0.1.0/duewall.egg-info/SOURCES.txt +9 -0
- duewall-0.1.0/duewall.egg-info/dependency_links.txt +1 -0
- duewall-0.1.0/duewall.egg-info/top_level.txt +1 -0
- duewall-0.1.0/pyproject.toml +25 -0
- duewall-0.1.0/setup.cfg +4 -0
duewall-0.1.0/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 DueWall Labs
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
duewall-0.1.0/PKG-INFO
ADDED
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: duewall
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Read-only client for the DueWall maturity calendar of tokenized credit (RWA) — events, liquidity terms, NAV series, Bitcoin-anchored integrity
|
|
5
|
+
Author: DueWall Labs
|
|
6
|
+
License: MIT
|
|
7
|
+
Project-URL: Homepage, https://duewall.com
|
|
8
|
+
Project-URL: Source, https://github.com/OneLight1688/duewall-adapters
|
|
9
|
+
Keywords: rwa,tokenized-credit,private-credit,maturity-calendar,defi,fintech,ai-agents
|
|
10
|
+
Classifier: Intended Audience :: Developers
|
|
11
|
+
Classifier: Intended Audience :: Financial and Insurance Industry
|
|
12
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
13
|
+
Classifier: Programming Language :: Python :: 3
|
|
14
|
+
Classifier: Topic :: Office/Business :: Financial
|
|
15
|
+
Requires-Python: >=3.8
|
|
16
|
+
Description-Content-Type: text/markdown
|
|
17
|
+
License-File: LICENSE
|
|
18
|
+
Dynamic: license-file
|
|
19
|
+
|
|
20
|
+
# duewall
|
|
21
|
+
|
|
22
|
+
Read-only Python client for the [DueWall](https://duewall.com) maturity calendar
|
|
23
|
+
of tokenized credit — *"the liability time-axis for tokenized credit."*
|
|
24
|
+
|
|
25
|
+
On-chain data is a rear-view mirror: Maple's public API lists 266 loans, **all
|
|
26
|
+
matured, zero forward maturities visible on-chain**. The forward-looking layer
|
|
27
|
+
lives in documents — loan agreements and fund factsheets. DueWall reads them,
|
|
28
|
+
with per-field source links, human verification and a coverage-grade system,
|
|
29
|
+
and serves the result as a free public API.
|
|
30
|
+
|
|
31
|
+
## Install
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
pip install duewall
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## Usage
|
|
38
|
+
|
|
39
|
+
Zero dependencies (stdlib only).
|
|
40
|
+
|
|
41
|
+
```python
|
|
42
|
+
from duewall import DueWall
|
|
43
|
+
|
|
44
|
+
dw = DueWall()
|
|
45
|
+
|
|
46
|
+
dw.meta() # record counts, license, schema links
|
|
47
|
+
dw.events() # all events: maturities, redemption
|
|
48
|
+
# windows, NAV reports — each with a
|
|
49
|
+
# coverage grade (A/B/M) + source_url
|
|
50
|
+
dw.forward() # future-dated obligations (the layer
|
|
51
|
+
# on-chain lacks)
|
|
52
|
+
dw.forward(days=90) # next 90 days only
|
|
53
|
+
dw.terms() # human-verified liquidity terms per fund
|
|
54
|
+
dw.pools() # pool NAV + TVL/APY snapshot
|
|
55
|
+
dw.maturity_wall() # monthly on-chain maturity distribution
|
|
56
|
+
dw.price_history() # daily on-chain NAV/price series
|
|
57
|
+
dw.by_grade("A") # human-verified records only
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
## Example — what matures next?
|
|
61
|
+
|
|
62
|
+
```python
|
|
63
|
+
from duewall import DueWall
|
|
64
|
+
|
|
65
|
+
dw = DueWall()
|
|
66
|
+
for e in sorted(dw.forward(days=180), key=lambda x: x["date"] or ""):
|
|
67
|
+
print(e["date"], e["token"], e["event_type"],
|
|
68
|
+
f"${e['amount_usd']:,.0f}" if e.get("amount_usd") else "",
|
|
69
|
+
e["source_url"])
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
## Coverage grades (A / B / M)
|
|
73
|
+
|
|
74
|
+
Every record carries a `grade` describing **data completeness — never credit
|
|
75
|
+
quality**:
|
|
76
|
+
|
|
77
|
+
| Grade | Meaning |
|
|
78
|
+
|-------|---------|
|
|
79
|
+
| **A** | Terms human-verified against issuer factsheets & published |
|
|
80
|
+
| **B** | Events covered by machine adapters with source links; terms pending |
|
|
81
|
+
| **M** | Below the TVL bar for a dedicated adapter; monitored |
|
|
82
|
+
|
|
83
|
+
Rules: an event never exceeds the grade of its entity; unmatched rows default
|
|
84
|
+
to B; new issuers enter at B and move to A only after a factsheet pass in
|
|
85
|
+
human verification. Full policy: [duewall.com/coverage/](https://duewall.com/coverage/).
|
|
86
|
+
|
|
87
|
+
## Integrity — Bitcoin-anchored
|
|
88
|
+
|
|
89
|
+
Every daily snapshot is hash-chained (each day binds the previous anchor) and
|
|
90
|
+
timestamped via [OpenTimestamps](https://opentimestamps.org): receipts at
|
|
91
|
+
[duewall.com/anchor/](https://duewall.com/anchor/), verifiable with
|
|
92
|
+
`ots verify` — anyone can prove the data existed at its stated date, unaltered.
|
|
93
|
+
|
|
94
|
+
## License & citation
|
|
95
|
+
|
|
96
|
+
- Data: **CC-BY 4.0** — cite *"DueWall Labs (duewall.com)"* and link back.
|
|
97
|
+
- Code: MIT.
|
|
98
|
+
- Schema: [duewall-adapters/docs/SCHEMA.md](https://github.com/OneLight1688/duewall-adapters/blob/main/docs/SCHEMA.md)
|
|
99
|
+
|
|
100
|
+
## Links
|
|
101
|
+
|
|
102
|
+
- Live site: https://duewall.com
|
|
103
|
+
- API docs: https://duewall.com/api/
|
|
104
|
+
- Open-source adapters & snapshots: https://github.com/OneLight1688/duewall-adapters
|
duewall-0.1.0/README.md
ADDED
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
# duewall
|
|
2
|
+
|
|
3
|
+
Read-only Python client for the [DueWall](https://duewall.com) maturity calendar
|
|
4
|
+
of tokenized credit — *"the liability time-axis for tokenized credit."*
|
|
5
|
+
|
|
6
|
+
On-chain data is a rear-view mirror: Maple's public API lists 266 loans, **all
|
|
7
|
+
matured, zero forward maturities visible on-chain**. The forward-looking layer
|
|
8
|
+
lives in documents — loan agreements and fund factsheets. DueWall reads them,
|
|
9
|
+
with per-field source links, human verification and a coverage-grade system,
|
|
10
|
+
and serves the result as a free public API.
|
|
11
|
+
|
|
12
|
+
## Install
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
pip install duewall
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
## Usage
|
|
19
|
+
|
|
20
|
+
Zero dependencies (stdlib only).
|
|
21
|
+
|
|
22
|
+
```python
|
|
23
|
+
from duewall import DueWall
|
|
24
|
+
|
|
25
|
+
dw = DueWall()
|
|
26
|
+
|
|
27
|
+
dw.meta() # record counts, license, schema links
|
|
28
|
+
dw.events() # all events: maturities, redemption
|
|
29
|
+
# windows, NAV reports — each with a
|
|
30
|
+
# coverage grade (A/B/M) + source_url
|
|
31
|
+
dw.forward() # future-dated obligations (the layer
|
|
32
|
+
# on-chain lacks)
|
|
33
|
+
dw.forward(days=90) # next 90 days only
|
|
34
|
+
dw.terms() # human-verified liquidity terms per fund
|
|
35
|
+
dw.pools() # pool NAV + TVL/APY snapshot
|
|
36
|
+
dw.maturity_wall() # monthly on-chain maturity distribution
|
|
37
|
+
dw.price_history() # daily on-chain NAV/price series
|
|
38
|
+
dw.by_grade("A") # human-verified records only
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## Example — what matures next?
|
|
42
|
+
|
|
43
|
+
```python
|
|
44
|
+
from duewall import DueWall
|
|
45
|
+
|
|
46
|
+
dw = DueWall()
|
|
47
|
+
for e in sorted(dw.forward(days=180), key=lambda x: x["date"] or ""):
|
|
48
|
+
print(e["date"], e["token"], e["event_type"],
|
|
49
|
+
f"${e['amount_usd']:,.0f}" if e.get("amount_usd") else "",
|
|
50
|
+
e["source_url"])
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## Coverage grades (A / B / M)
|
|
54
|
+
|
|
55
|
+
Every record carries a `grade` describing **data completeness — never credit
|
|
56
|
+
quality**:
|
|
57
|
+
|
|
58
|
+
| Grade | Meaning |
|
|
59
|
+
|-------|---------|
|
|
60
|
+
| **A** | Terms human-verified against issuer factsheets & published |
|
|
61
|
+
| **B** | Events covered by machine adapters with source links; terms pending |
|
|
62
|
+
| **M** | Below the TVL bar for a dedicated adapter; monitored |
|
|
63
|
+
|
|
64
|
+
Rules: an event never exceeds the grade of its entity; unmatched rows default
|
|
65
|
+
to B; new issuers enter at B and move to A only after a factsheet pass in
|
|
66
|
+
human verification. Full policy: [duewall.com/coverage/](https://duewall.com/coverage/).
|
|
67
|
+
|
|
68
|
+
## Integrity — Bitcoin-anchored
|
|
69
|
+
|
|
70
|
+
Every daily snapshot is hash-chained (each day binds the previous anchor) and
|
|
71
|
+
timestamped via [OpenTimestamps](https://opentimestamps.org): receipts at
|
|
72
|
+
[duewall.com/anchor/](https://duewall.com/anchor/), verifiable with
|
|
73
|
+
`ots verify` — anyone can prove the data existed at its stated date, unaltered.
|
|
74
|
+
|
|
75
|
+
## License & citation
|
|
76
|
+
|
|
77
|
+
- Data: **CC-BY 4.0** — cite *"DueWall Labs (duewall.com)"* and link back.
|
|
78
|
+
- Code: MIT.
|
|
79
|
+
- Schema: [duewall-adapters/docs/SCHEMA.md](https://github.com/OneLight1688/duewall-adapters/blob/main/docs/SCHEMA.md)
|
|
80
|
+
|
|
81
|
+
## Links
|
|
82
|
+
|
|
83
|
+
- Live site: https://duewall.com
|
|
84
|
+
- API docs: https://duewall.com/api/
|
|
85
|
+
- Open-source adapters & snapshots: https://github.com/OneLight1688/duewall-adapters
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
"""duewall: read-only client for the DueWall maturity calendar of tokenized credit
|
|
3
|
+
(RWA private credit) — the liability time-axis that on-chain data does not show."""
|
|
4
|
+
from .client import DueWall
|
|
5
|
+
|
|
6
|
+
__version__ = "0.1.0"
|
|
7
|
+
__all__ = ["DueWall"]
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
"""stdlib-only client — zero dependencies, zero cost, read-only.
|
|
3
|
+
|
|
4
|
+
All data comes from public, CORS-enabled endpoints of https://duewall.com/api/v1/:
|
|
5
|
+
meta.json version, counts, license (CC-BY-4.0), schema link
|
|
6
|
+
events.json structured events (maturities, redemption windows, NAV reports)
|
|
7
|
+
— every record carries a coverage grade (A/B/M), status
|
|
8
|
+
(draft=machine-extracted, verified=human-checked) and a
|
|
9
|
+
per-field source_url
|
|
10
|
+
terms.json human-verified liquidity terms per fund (min investment,
|
|
11
|
+
settlement, lockups, fees, domicile, AUM)
|
|
12
|
+
pools.json pool NAV + TVL/APY snapshot (Centrifuge + DefiLlama RWA)
|
|
13
|
+
maturity_wall.json monthly on-chain maturity distribution
|
|
14
|
+
price_history.json daily on-chain NAV/price series per pool token
|
|
15
|
+
|
|
16
|
+
Coverage grades describe DATA COMPLETENESS, never credit quality:
|
|
17
|
+
A = terms human-verified against issuer factsheets and published
|
|
18
|
+
B = events covered by machine adapters with source links; terms pending
|
|
19
|
+
M = below the TVL bar for a dedicated adapter; monitored
|
|
20
|
+
|
|
21
|
+
Every daily snapshot is hash-chained and anchored to Bitcoin via OpenTimestamps —
|
|
22
|
+
publicly verifiable, zero cost. Data license: CC-BY 4.0 (cite "DueWall Labs
|
|
23
|
+
(duewall.com)"). Code: MIT.
|
|
24
|
+
"""
|
|
25
|
+
import json
|
|
26
|
+
from datetime import date, timedelta
|
|
27
|
+
from urllib.parse import urlencode
|
|
28
|
+
from urllib.request import Request, urlopen
|
|
29
|
+
|
|
30
|
+
DEFAULT_BASE = "https://duewall.com"
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
class DueWall:
|
|
34
|
+
def __init__(self, base: str = DEFAULT_BASE, timeout: int = 15,
|
|
35
|
+
user_agent: str = "duewall/0.1"):
|
|
36
|
+
self.base = base.rstrip("/")
|
|
37
|
+
self.timeout = timeout
|
|
38
|
+
self.headers = {"User-Agent": user_agent, "Accept": "application/json"}
|
|
39
|
+
|
|
40
|
+
def _get(self, path: str):
|
|
41
|
+
url = self.base + path
|
|
42
|
+
req = Request(url, headers=self.headers)
|
|
43
|
+
with urlopen(req, timeout=self.timeout) as r:
|
|
44
|
+
return json.loads(r.read().decode("utf-8"))
|
|
45
|
+
|
|
46
|
+
# ---- data layer -----------------------------------------------------------
|
|
47
|
+
def meta(self) -> dict:
|
|
48
|
+
"""API version, record counts, license, schema + coverage-policy links."""
|
|
49
|
+
return self._get("/api/v1/meta.json")
|
|
50
|
+
|
|
51
|
+
def events(self) -> list:
|
|
52
|
+
"""All structured events: maturities, redemption windows, NAV reports.
|
|
53
|
+
Fields: token, issuer, event_type, date, amount_usd, seniority,
|
|
54
|
+
source_type, source_url, verified_by, status, last_updated, grade (A/B/M)."""
|
|
55
|
+
return self._get("/api/v1/events.json")
|
|
56
|
+
|
|
57
|
+
def terms(self) -> list:
|
|
58
|
+
"""Human-verified liquidity terms per fund: structure, liquidity (daily/
|
|
59
|
+
weekly/...), settlement, min_investment, mgmt_fee_bps, domicile, AUM.
|
|
60
|
+
Each record carries its coverage grade and source_url."""
|
|
61
|
+
return self._get("/api/v1/terms.json")
|
|
62
|
+
|
|
63
|
+
def pools(self) -> dict:
|
|
64
|
+
"""Pool NAV + TVL/APY snapshot (Centrifuge pool tokens + DefiLlama RWA)."""
|
|
65
|
+
return self._get("/api/v1/pools.json")
|
|
66
|
+
|
|
67
|
+
def maturity_wall(self) -> dict:
|
|
68
|
+
"""Monthly on-chain maturity distribution (incl. the zero-future-maturities
|
|
69
|
+
finding that motivated DueWall)."""
|
|
70
|
+
return self._get("/api/v1/maturity_wall.json")
|
|
71
|
+
|
|
72
|
+
def price_history(self) -> list:
|
|
73
|
+
"""Daily on-chain NAV/price series per pool token (one point per UTC day).
|
|
74
|
+
NAV-type oracle value — not a market traded price."""
|
|
75
|
+
return self._get("/api/v1/price_history.json")
|
|
76
|
+
|
|
77
|
+
# ---- convenience filters (pure client-side) --------------------------------
|
|
78
|
+
def forward(self, from_date: str = None, days: int = None) -> list:
|
|
79
|
+
"""Future-dated obligations — the forward-looking layer on-chain lacks.
|
|
80
|
+
from_date: ISO 'YYYY-MM-DD' (default: today, UTC). days: horizon in days."""
|
|
81
|
+
start = from_date or date.today().isoformat()
|
|
82
|
+
end = None
|
|
83
|
+
if days is not None:
|
|
84
|
+
end = (date.today() + timedelta(days=days)).isoformat()
|
|
85
|
+
out = []
|
|
86
|
+
for e in self.events():
|
|
87
|
+
d = e.get("date") or ""
|
|
88
|
+
if d >= start and (end is None or d <= end):
|
|
89
|
+
out.append(e)
|
|
90
|
+
return out
|
|
91
|
+
|
|
92
|
+
def by_grade(self, *grades) -> list:
|
|
93
|
+
"""Filter events by coverage grade, e.g. by_grade("A") for human-verified
|
|
94
|
+
records only. Grades describe data completeness, never credit quality."""
|
|
95
|
+
want = set(grades)
|
|
96
|
+
return [e for e in self.events() if e.get("grade") in want]
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: duewall
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Read-only client for the DueWall maturity calendar of tokenized credit (RWA) — events, liquidity terms, NAV series, Bitcoin-anchored integrity
|
|
5
|
+
Author: DueWall Labs
|
|
6
|
+
License: MIT
|
|
7
|
+
Project-URL: Homepage, https://duewall.com
|
|
8
|
+
Project-URL: Source, https://github.com/OneLight1688/duewall-adapters
|
|
9
|
+
Keywords: rwa,tokenized-credit,private-credit,maturity-calendar,defi,fintech,ai-agents
|
|
10
|
+
Classifier: Intended Audience :: Developers
|
|
11
|
+
Classifier: Intended Audience :: Financial and Insurance Industry
|
|
12
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
13
|
+
Classifier: Programming Language :: Python :: 3
|
|
14
|
+
Classifier: Topic :: Office/Business :: Financial
|
|
15
|
+
Requires-Python: >=3.8
|
|
16
|
+
Description-Content-Type: text/markdown
|
|
17
|
+
License-File: LICENSE
|
|
18
|
+
Dynamic: license-file
|
|
19
|
+
|
|
20
|
+
# duewall
|
|
21
|
+
|
|
22
|
+
Read-only Python client for the [DueWall](https://duewall.com) maturity calendar
|
|
23
|
+
of tokenized credit — *"the liability time-axis for tokenized credit."*
|
|
24
|
+
|
|
25
|
+
On-chain data is a rear-view mirror: Maple's public API lists 266 loans, **all
|
|
26
|
+
matured, zero forward maturities visible on-chain**. The forward-looking layer
|
|
27
|
+
lives in documents — loan agreements and fund factsheets. DueWall reads them,
|
|
28
|
+
with per-field source links, human verification and a coverage-grade system,
|
|
29
|
+
and serves the result as a free public API.
|
|
30
|
+
|
|
31
|
+
## Install
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
pip install duewall
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## Usage
|
|
38
|
+
|
|
39
|
+
Zero dependencies (stdlib only).
|
|
40
|
+
|
|
41
|
+
```python
|
|
42
|
+
from duewall import DueWall
|
|
43
|
+
|
|
44
|
+
dw = DueWall()
|
|
45
|
+
|
|
46
|
+
dw.meta() # record counts, license, schema links
|
|
47
|
+
dw.events() # all events: maturities, redemption
|
|
48
|
+
# windows, NAV reports — each with a
|
|
49
|
+
# coverage grade (A/B/M) + source_url
|
|
50
|
+
dw.forward() # future-dated obligations (the layer
|
|
51
|
+
# on-chain lacks)
|
|
52
|
+
dw.forward(days=90) # next 90 days only
|
|
53
|
+
dw.terms() # human-verified liquidity terms per fund
|
|
54
|
+
dw.pools() # pool NAV + TVL/APY snapshot
|
|
55
|
+
dw.maturity_wall() # monthly on-chain maturity distribution
|
|
56
|
+
dw.price_history() # daily on-chain NAV/price series
|
|
57
|
+
dw.by_grade("A") # human-verified records only
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
## Example — what matures next?
|
|
61
|
+
|
|
62
|
+
```python
|
|
63
|
+
from duewall import DueWall
|
|
64
|
+
|
|
65
|
+
dw = DueWall()
|
|
66
|
+
for e in sorted(dw.forward(days=180), key=lambda x: x["date"] or ""):
|
|
67
|
+
print(e["date"], e["token"], e["event_type"],
|
|
68
|
+
f"${e['amount_usd']:,.0f}" if e.get("amount_usd") else "",
|
|
69
|
+
e["source_url"])
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
## Coverage grades (A / B / M)
|
|
73
|
+
|
|
74
|
+
Every record carries a `grade` describing **data completeness — never credit
|
|
75
|
+
quality**:
|
|
76
|
+
|
|
77
|
+
| Grade | Meaning |
|
|
78
|
+
|-------|---------|
|
|
79
|
+
| **A** | Terms human-verified against issuer factsheets & published |
|
|
80
|
+
| **B** | Events covered by machine adapters with source links; terms pending |
|
|
81
|
+
| **M** | Below the TVL bar for a dedicated adapter; monitored |
|
|
82
|
+
|
|
83
|
+
Rules: an event never exceeds the grade of its entity; unmatched rows default
|
|
84
|
+
to B; new issuers enter at B and move to A only after a factsheet pass in
|
|
85
|
+
human verification. Full policy: [duewall.com/coverage/](https://duewall.com/coverage/).
|
|
86
|
+
|
|
87
|
+
## Integrity — Bitcoin-anchored
|
|
88
|
+
|
|
89
|
+
Every daily snapshot is hash-chained (each day binds the previous anchor) and
|
|
90
|
+
timestamped via [OpenTimestamps](https://opentimestamps.org): receipts at
|
|
91
|
+
[duewall.com/anchor/](https://duewall.com/anchor/), verifiable with
|
|
92
|
+
`ots verify` — anyone can prove the data existed at its stated date, unaltered.
|
|
93
|
+
|
|
94
|
+
## License & citation
|
|
95
|
+
|
|
96
|
+
- Data: **CC-BY 4.0** — cite *"DueWall Labs (duewall.com)"* and link back.
|
|
97
|
+
- Code: MIT.
|
|
98
|
+
- Schema: [duewall-adapters/docs/SCHEMA.md](https://github.com/OneLight1688/duewall-adapters/blob/main/docs/SCHEMA.md)
|
|
99
|
+
|
|
100
|
+
## Links
|
|
101
|
+
|
|
102
|
+
- Live site: https://duewall.com
|
|
103
|
+
- API docs: https://duewall.com/api/
|
|
104
|
+
- Open-source adapters & snapshots: https://github.com/OneLight1688/duewall-adapters
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
duewall
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["setuptools>=68"]
|
|
3
|
+
build-backend = "setuptools.build_meta"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "duewall"
|
|
7
|
+
version = "0.1.0"
|
|
8
|
+
description = "Read-only client for the DueWall maturity calendar of tokenized credit (RWA) — events, liquidity terms, NAV series, Bitcoin-anchored integrity"
|
|
9
|
+
readme = "README.md"
|
|
10
|
+
requires-python = ">=3.8"
|
|
11
|
+
license = { text = "MIT" }
|
|
12
|
+
authors = [{ name = "DueWall Labs" }]
|
|
13
|
+
keywords = ["rwa", "tokenized-credit", "private-credit", "maturity-calendar", "defi", "fintech", "ai-agents"]
|
|
14
|
+
classifiers = [
|
|
15
|
+
"Intended Audience :: Developers",
|
|
16
|
+
"Intended Audience :: Financial and Insurance Industry",
|
|
17
|
+
"License :: OSI Approved :: MIT License",
|
|
18
|
+
"Programming Language :: Python :: 3",
|
|
19
|
+
"Topic :: Office/Business :: Financial",
|
|
20
|
+
]
|
|
21
|
+
dependencies = []
|
|
22
|
+
|
|
23
|
+
[project.urls]
|
|
24
|
+
Homepage = "https://duewall.com"
|
|
25
|
+
Source = "https://github.com/OneLight1688/duewall-adapters"
|
duewall-0.1.0/setup.cfg
ADDED