dao-treasury 0.0.39__cp311-cp311-macosx_11_0_arm64.whl → 0.0.69__cp311-cp311-macosx_11_0_arm64.whl
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.
- dao_treasury/.grafana/provisioning/dashboards/breakdowns/Expenses.json +551 -0
- dao_treasury/.grafana/provisioning/dashboards/breakdowns/Revenue.json +551 -0
- dao_treasury/.grafana/provisioning/dashboards/dashboards.yaml +7 -57
- dao_treasury/.grafana/provisioning/dashboards/streams/LlamaPay.json +11 -16
- dao_treasury/.grafana/provisioning/dashboards/summary/Monthly.json +15 -15
- dao_treasury/.grafana/provisioning/dashboards/transactions/Treasury Transactions.json +38 -61
- dao_treasury/.grafana/provisioning/dashboards/treasury/Cashflow (Including Unsorted).json +122 -149
- dao_treasury/.grafana/provisioning/dashboards/treasury/Cashflow.json +87 -100
- dao_treasury/.grafana/provisioning/dashboards/treasury/Current Treasury Assets.json +1009 -0
- dao_treasury/.grafana/provisioning/dashboards/treasury/Historical Treasury Balances.json +2989 -0
- dao_treasury/.grafana/provisioning/dashboards/treasury/Operating Cashflow.json +64 -78
- dao_treasury/ENVIRONMENT_VARIABLES.py +12 -0
- dao_treasury/__init__.py +14 -0
- dao_treasury/_docker.cpython-311-darwin.so +0 -0
- dao_treasury/_docker.py +38 -21
- dao_treasury/_nicknames.cpython-311-darwin.so +0 -0
- dao_treasury/_nicknames.py +15 -0
- dao_treasury/_wallet.cpython-311-darwin.so +0 -0
- dao_treasury/constants.cpython-311-darwin.so +0 -0
- dao_treasury/constants.py +24 -0
- dao_treasury/db.py +72 -3
- dao_treasury/docker-compose.yaml +1 -1
- dao_treasury/main.py +6 -0
- dao_treasury/sorting/__init__.cpython-311-darwin.so +0 -0
- dao_treasury/sorting/_matchers.cpython-311-darwin.so +0 -0
- dao_treasury/sorting/_rules.cpython-311-darwin.so +0 -0
- dao_treasury/sorting/factory.cpython-311-darwin.so +0 -0
- dao_treasury/sorting/rule.cpython-311-darwin.so +0 -0
- dao_treasury/sorting/rule.py +8 -10
- dao_treasury/sorting/rules/__init__.cpython-311-darwin.so +0 -0
- dao_treasury/sorting/rules/ignore/__init__.cpython-311-darwin.so +0 -0
- dao_treasury/sorting/rules/ignore/__init__.py +0 -1
- dao_treasury/sorting/rules/ignore/llamapay.cpython-311-darwin.so +0 -0
- dao_treasury/streams/__init__.cpython-311-darwin.so +0 -0
- dao_treasury/streams/llamapay.cpython-311-darwin.so +0 -0
- dao_treasury/treasury.py +33 -14
- dao_treasury/types.cpython-311-darwin.so +0 -0
- {dao_treasury-0.0.39.dist-info → dao_treasury-0.0.69.dist-info}/METADATA +4 -3
- dao_treasury-0.0.69.dist-info/RECORD +54 -0
- dao_treasury-0.0.69.dist-info/top_level.txt +2 -0
- dao_treasury__mypyc.cpython-311-darwin.so +0 -0
- 8a0ad9a1a4146730a0f6__mypyc.cpython-311-darwin.so +0 -0
- dao_treasury/.grafana/provisioning/dashboards/treasury/Treasury.json +0 -2018
- dao_treasury/sorting/rules/ignore/shitcoins.cpython-311-darwin.so +0 -0
- dao_treasury/sorting/rules/ignore/shitcoins.py +0 -24
- dao_treasury-0.0.39.dist-info/RECORD +0 -53
- dao_treasury-0.0.39.dist-info/top_level.txt +0 -2
- {dao_treasury-0.0.39.dist-info → dao_treasury-0.0.69.dist-info}/WHEEL +0 -0
dao_treasury/db.py
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
Database models and utilities for DAO treasury reporting.
|
|
4
4
|
|
|
5
5
|
This module defines Pony ORM entities for:
|
|
6
|
+
|
|
6
7
|
- Blockchain networks (:class:`Chain`)
|
|
7
8
|
- On-chain addresses (:class:`Address`)
|
|
8
9
|
- ERC-20 tokens and native coin placeholder (:class:`Token`)
|
|
@@ -17,27 +18,41 @@ and creating SQL views for reporting.
|
|
|
17
18
|
|
|
18
19
|
import typing
|
|
19
20
|
from asyncio import Semaphore
|
|
21
|
+
from collections import OrderedDict
|
|
20
22
|
from decimal import Decimal, InvalidOperation
|
|
21
23
|
from functools import lru_cache
|
|
22
24
|
from logging import getLogger
|
|
23
25
|
from os import path
|
|
24
26
|
from pathlib import Path
|
|
25
|
-
from typing import
|
|
27
|
+
from typing import (
|
|
28
|
+
TYPE_CHECKING,
|
|
29
|
+
Any,
|
|
30
|
+
Coroutine,
|
|
31
|
+
Dict,
|
|
32
|
+
Final,
|
|
33
|
+
Literal,
|
|
34
|
+
Tuple,
|
|
35
|
+
Union,
|
|
36
|
+
final,
|
|
37
|
+
overload,
|
|
38
|
+
)
|
|
26
39
|
from datetime import date, datetime, time, timezone
|
|
27
40
|
|
|
41
|
+
import eth_portfolio
|
|
28
42
|
from a_sync import AsyncThreadPoolExecutor
|
|
29
43
|
from brownie import chain
|
|
30
44
|
from brownie.convert.datatypes import HexString
|
|
31
45
|
from brownie.exceptions import EventLookupError
|
|
32
46
|
from brownie.network.event import EventDict, _EventItem
|
|
33
47
|
from brownie.network.transaction import TransactionReceipt
|
|
34
|
-
from eth_typing import ChecksumAddress, HexAddress, HexStr
|
|
35
48
|
from eth_portfolio.structs import (
|
|
36
49
|
InternalTransfer,
|
|
37
50
|
LedgerEntry,
|
|
38
51
|
TokenTransfer,
|
|
39
52
|
Transaction,
|
|
40
53
|
)
|
|
54
|
+
from eth_retry import auto_retry
|
|
55
|
+
from eth_typing import ChecksumAddress, HexAddress, HexStr
|
|
41
56
|
from pony.orm import (
|
|
42
57
|
Database,
|
|
43
58
|
InterfaceError,
|
|
@@ -61,6 +76,9 @@ from dao_treasury.constants import CHAINID
|
|
|
61
76
|
from dao_treasury.types import TxGroupDbid, TxGroupName
|
|
62
77
|
|
|
63
78
|
|
|
79
|
+
EventItem = _EventItem[_EventItem[OrderedDict[str, Any]]]
|
|
80
|
+
|
|
81
|
+
|
|
64
82
|
SQLITE_DIR = Path(path.expanduser("~")) / ".dao-treasury"
|
|
65
83
|
"""Path to the directory in the user's home where the DAO treasury SQLite database is stored."""
|
|
66
84
|
|
|
@@ -69,6 +87,7 @@ SQLITE_DIR.mkdir(parents=True, exist_ok=True)
|
|
|
69
87
|
|
|
70
88
|
_INSERT_THREAD = AsyncThreadPoolExecutor(1)
|
|
71
89
|
_SORT_THREAD = AsyncThreadPoolExecutor(1)
|
|
90
|
+
_EVENTS_THREADS = AsyncThreadPoolExecutor(16)
|
|
72
91
|
_SORT_SEMAPHORE = Semaphore(50)
|
|
73
92
|
|
|
74
93
|
_UTC = timezone.utc
|
|
@@ -235,6 +254,10 @@ class Address(DbEntity):
|
|
|
235
254
|
def contract(self) -> Contract:
|
|
236
255
|
return Contract(self.address)
|
|
237
256
|
|
|
257
|
+
@property
|
|
258
|
+
def contract_coro(self) -> Coroutine[Any, Any, Contract]:
|
|
259
|
+
return Contract.coroutine(self.address)
|
|
260
|
+
|
|
238
261
|
@staticmethod
|
|
239
262
|
@lru_cache(maxsize=None)
|
|
240
263
|
def get_dbid(address: HexAddress) -> int:
|
|
@@ -405,6 +428,10 @@ class Token(DbEntity):
|
|
|
405
428
|
def contract(self) -> Contract:
|
|
406
429
|
return Contract(self.address.address)
|
|
407
430
|
|
|
431
|
+
@property
|
|
432
|
+
def contract_coro(self) -> Coroutine[Any, Any, Contract]:
|
|
433
|
+
return Contract.coroutine(self.address.address)
|
|
434
|
+
|
|
408
435
|
@property
|
|
409
436
|
def scale(self) -> int:
|
|
410
437
|
"""Base for division according to `decimals`, e.g., `10**decimals`.
|
|
@@ -719,6 +746,10 @@ class TreasuryTx(DbEntity):
|
|
|
719
746
|
"""Human-readable label for the sender address."""
|
|
720
747
|
return self.from_address.nickname or self.from_address.address # type: ignore [union-attr]
|
|
721
748
|
|
|
749
|
+
@property
|
|
750
|
+
def token_address(self) -> ChecksumAddress:
|
|
751
|
+
return self.token.address.address
|
|
752
|
+
|
|
722
753
|
@property
|
|
723
754
|
def symbol(self) -> str:
|
|
724
755
|
"""Ticker symbol for the transferred token."""
|
|
@@ -729,7 +760,23 @@ class TreasuryTx(DbEntity):
|
|
|
729
760
|
"""Decoded event logs for this transaction."""
|
|
730
761
|
return self._transaction.events
|
|
731
762
|
|
|
732
|
-
def
|
|
763
|
+
async def events_async(self) -> EventDict:
|
|
764
|
+
"""Asynchronously fetch decoded event logs for this transaction."""
|
|
765
|
+
tx = self._transaction
|
|
766
|
+
events = tx._events
|
|
767
|
+
if events is None:
|
|
768
|
+
events = await _EVENTS_THREADS.run(getattr, tx, "events")
|
|
769
|
+
return events
|
|
770
|
+
|
|
771
|
+
@overload
|
|
772
|
+
def get_events(
|
|
773
|
+
self, event_name: str, sync: Literal[False]
|
|
774
|
+
) -> Coroutine[Any, Any, EventItem]: ...
|
|
775
|
+
@overload
|
|
776
|
+
def get_events(self, event_name: str, sync: bool = True) -> EventItem: ...
|
|
777
|
+
def get_events(self, event_name: str, sync: bool = True) -> EventItem:
|
|
778
|
+
if not sync:
|
|
779
|
+
return _EVENTS_THREADS.run(self.get_events, event_name)
|
|
733
780
|
try:
|
|
734
781
|
return self.events[event_name]
|
|
735
782
|
except EventLookupError:
|
|
@@ -746,6 +793,7 @@ class TreasuryTx(DbEntity):
|
|
|
746
793
|
return get_transaction(self.hash)
|
|
747
794
|
|
|
748
795
|
@staticmethod
|
|
796
|
+
@auto_retry
|
|
749
797
|
async def insert(entry: LedgerEntry) -> None:
|
|
750
798
|
"""Asynchronously insert and sort a ledger entry.
|
|
751
799
|
|
|
@@ -1383,3 +1431,24 @@ def _validate_integrity_error(
|
|
|
1383
1431
|
)
|
|
1384
1432
|
else None
|
|
1385
1433
|
)
|
|
1434
|
+
|
|
1435
|
+
|
|
1436
|
+
def _drop_shitcoin_txs() -> None:
|
|
1437
|
+
"""
|
|
1438
|
+
Purge any shitcoin txs from the db.
|
|
1439
|
+
|
|
1440
|
+
These should not be frequent, and only occur if a user populated the db before a shitcoin was added to the SHITCOINS mapping.
|
|
1441
|
+
"""
|
|
1442
|
+
shitcoins = eth_portfolio.SHITCOINS[CHAINID]
|
|
1443
|
+
with db_session:
|
|
1444
|
+
shitcoin_txs = select(
|
|
1445
|
+
tx for tx in TreasuryTx if tx.token.address.address in shitcoins
|
|
1446
|
+
)
|
|
1447
|
+
if count := shitcoin_txs.count():
|
|
1448
|
+
logger.info(f"Purging {count} shitcoin txs from the database...")
|
|
1449
|
+
for tx in shitcoin_txs:
|
|
1450
|
+
tx.delete()
|
|
1451
|
+
logger.info("Shitcoin tx purge complete.")
|
|
1452
|
+
|
|
1453
|
+
|
|
1454
|
+
_drop_shitcoin_txs()
|
dao_treasury/docker-compose.yaml
CHANGED
dao_treasury/main.py
CHANGED
|
@@ -97,6 +97,12 @@ parser.add_argument(
|
|
|
97
97
|
help="The time interval between datapoints. default: 1d",
|
|
98
98
|
default="1d",
|
|
99
99
|
)
|
|
100
|
+
parser.add_argument(
|
|
101
|
+
"--concurrency",
|
|
102
|
+
type=int,
|
|
103
|
+
help="The max number of historical blocks to export concurrently. default: 30",
|
|
104
|
+
default=30,
|
|
105
|
+
)
|
|
100
106
|
parser.add_argument(
|
|
101
107
|
"--daemon",
|
|
102
108
|
action="store_true",
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
dao_treasury/sorting/rule.py
CHANGED
|
@@ -130,8 +130,6 @@ class _SortRule:
|
|
|
130
130
|
func: Optional[SortFunction] = None
|
|
131
131
|
"""Custom matching function that takes a `TreasuryTx` and returns a bool or an awaitable that returns a bool."""
|
|
132
132
|
|
|
133
|
-
# __instances__: ClassVar[List[Self]] = []
|
|
134
|
-
|
|
135
133
|
def __post_init__(self) -> None:
|
|
136
134
|
"""Validate inputs, checksum addresses, and register the rule.
|
|
137
135
|
|
|
@@ -235,7 +233,7 @@ class _InboundSortRule(_SortRule):
|
|
|
235
233
|
return (
|
|
236
234
|
tx.to_address is not None
|
|
237
235
|
and TreasuryWallet.check_membership(tx.to_address.address, tx.block)
|
|
238
|
-
and await super().match(tx)
|
|
236
|
+
and await super(_InboundSortRule, self).match(tx)
|
|
239
237
|
)
|
|
240
238
|
|
|
241
239
|
|
|
@@ -250,7 +248,7 @@ class _OutboundSortRule(_SortRule):
|
|
|
250
248
|
async def match(self, tx: "TreasuryTx") -> bool:
|
|
251
249
|
return TreasuryWallet.check_membership(
|
|
252
250
|
tx.from_address.address, tx.block
|
|
253
|
-
) and await super().match(tx)
|
|
251
|
+
) and await super(_OutboundSortRule, self).match(tx)
|
|
254
252
|
|
|
255
253
|
|
|
256
254
|
@mypyc_attr(native_class=False)
|
|
@@ -267,7 +265,7 @@ class RevenueSortRule(_InboundSortRule):
|
|
|
267
265
|
def __post_init__(self) -> None:
|
|
268
266
|
"""Prepends `self.txgroup` with 'Revenue:'."""
|
|
269
267
|
object.__setattr__(self, "txgroup", f"Revenue:{self.txgroup}")
|
|
270
|
-
super().__post_init__()
|
|
268
|
+
super(RevenueSortRule, self).__post_init__()
|
|
271
269
|
|
|
272
270
|
|
|
273
271
|
@mypyc_attr(native_class=False)
|
|
@@ -280,7 +278,7 @@ class CostOfRevenueSortRule(_OutboundSortRule):
|
|
|
280
278
|
def __post_init__(self) -> None:
|
|
281
279
|
"""Prepends `self.txgroup` with 'Cost of Revenue:'."""
|
|
282
280
|
object.__setattr__(self, "txgroup", f"Cost of Revenue:{self.txgroup}")
|
|
283
|
-
super().__post_init__()
|
|
281
|
+
super(CostOfRevenueSortRule, self).__post_init__()
|
|
284
282
|
|
|
285
283
|
|
|
286
284
|
@mypyc_attr(native_class=False)
|
|
@@ -293,7 +291,7 @@ class ExpenseSortRule(_OutboundSortRule):
|
|
|
293
291
|
def __post_init__(self) -> None:
|
|
294
292
|
"""Prepends `self.txgroup` with 'Expenses:'."""
|
|
295
293
|
object.__setattr__(self, "txgroup", f"Expenses:{self.txgroup}")
|
|
296
|
-
super().__post_init__()
|
|
294
|
+
super(ExpenseSortRule, self).__post_init__()
|
|
297
295
|
|
|
298
296
|
|
|
299
297
|
@mypyc_attr(native_class=False)
|
|
@@ -306,7 +304,7 @@ class OtherIncomeSortRule(_InboundSortRule):
|
|
|
306
304
|
def __post_init__(self) -> None:
|
|
307
305
|
"""Prepends `self.txgroup` with 'Other Income:'."""
|
|
308
306
|
object.__setattr__(self, "txgroup", f"Other Income:{self.txgroup}")
|
|
309
|
-
super().__post_init__()
|
|
307
|
+
super(OtherIncomeSortRule, self).__post_init__()
|
|
310
308
|
|
|
311
309
|
|
|
312
310
|
@mypyc_attr(native_class=False)
|
|
@@ -319,7 +317,7 @@ class OtherExpenseSortRule(_OutboundSortRule):
|
|
|
319
317
|
def __post_init__(self) -> None:
|
|
320
318
|
"""Prepends `self.txgroup` with 'Other Expenses:'."""
|
|
321
319
|
object.__setattr__(self, "txgroup", f"Other Expenses:{self.txgroup}")
|
|
322
|
-
super().__post_init__()
|
|
320
|
+
super(OtherExpenseSortRule, self).__post_init__()
|
|
323
321
|
|
|
324
322
|
|
|
325
323
|
@mypyc_attr(native_class=False)
|
|
@@ -332,7 +330,7 @@ class IgnoreSortRule(_SortRule):
|
|
|
332
330
|
def __post_init__(self) -> None:
|
|
333
331
|
"""Prepends `self.txgroup` with 'Ignore:'."""
|
|
334
332
|
object.__setattr__(self, "txgroup", f"Ignore:{self.txgroup}")
|
|
335
|
-
super().__post_init__()
|
|
333
|
+
super(IgnoreSortRule, self).__post_init__()
|
|
336
334
|
|
|
337
335
|
|
|
338
336
|
TRule = TypeVar(
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
dao_treasury/treasury.py
CHANGED
|
@@ -1,3 +1,20 @@
|
|
|
1
|
+
"""Treasury orchestration and analytics interface.
|
|
2
|
+
|
|
3
|
+
This module defines the Treasury class, which aggregates DAO wallets, sets up
|
|
4
|
+
sorting rules, and manages transaction ingestion and streaming analytics.
|
|
5
|
+
It coordinates the end-to-end flow from wallet configuration to database
|
|
6
|
+
population and dashboard analytics.
|
|
7
|
+
|
|
8
|
+
Key Responsibilities:
|
|
9
|
+
- Aggregate and manage DAO-controlled wallets.
|
|
10
|
+
- Ingest and process on-chain transactions.
|
|
11
|
+
- Apply sorting/categorization rules.
|
|
12
|
+
- Integrate with streaming protocols (e.g., LlamaPay).
|
|
13
|
+
- Populate the database for analytics and dashboards.
|
|
14
|
+
|
|
15
|
+
This is the main entry point for orchestrating DAO treasury analytics.
|
|
16
|
+
"""
|
|
17
|
+
|
|
1
18
|
from asyncio import create_task, gather
|
|
2
19
|
from logging import getLogger
|
|
3
20
|
from pathlib import Path
|
|
@@ -59,20 +76,22 @@ class Treasury(a_sync.ASyncGenericBase): # type: ignore [misc]
|
|
|
59
76
|
TypeError: If any item in `wallets` is not a str or TreasuryWallet.
|
|
60
77
|
|
|
61
78
|
Examples:
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
79
|
+
.. code-block:: python
|
|
80
|
+
|
|
81
|
+
# Create a synchronous Treasury
|
|
82
|
+
treasury = Treasury(
|
|
83
|
+
wallets=["0xAbc123...", TreasuryWallet("0xDef456...", start_block=1000)],
|
|
84
|
+
sort_rules=Path("/path/to/rules"),
|
|
85
|
+
start_block=500,
|
|
86
|
+
label="DAO Treasury",
|
|
87
|
+
asynchronous=False
|
|
88
|
+
)
|
|
89
|
+
|
|
90
|
+
# Create an asynchronous Treasury
|
|
91
|
+
treasury_async = Treasury(
|
|
92
|
+
wallets=["0xAbc123..."],
|
|
93
|
+
asynchronous=True
|
|
94
|
+
)
|
|
76
95
|
"""
|
|
77
96
|
global TREASURY
|
|
78
97
|
if TREASURY is not None:
|
|
Binary file
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: dao_treasury
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.69
|
|
4
4
|
Summary: Produce comprehensive financial reports for your on-chain org
|
|
5
5
|
Classifier: Development Status :: 3 - Alpha
|
|
6
6
|
Classifier: Intended Audience :: Developers
|
|
@@ -14,7 +14,7 @@ Classifier: Operating System :: OS Independent
|
|
|
14
14
|
Classifier: Topic :: Software Development :: Libraries
|
|
15
15
|
Requires-Python: >=3.10,<3.13
|
|
16
16
|
Description-Content-Type: text/markdown
|
|
17
|
-
Requires-Dist: eth-portfolio-temp
|
|
17
|
+
Requires-Dist: eth-portfolio-temp==0.2.17
|
|
18
18
|
Dynamic: classifier
|
|
19
19
|
Dynamic: description
|
|
20
20
|
Dynamic: description-content-type
|
|
@@ -41,7 +41,7 @@ DAO Treasury is a comprehensive financial reporting and treasury management solu
|
|
|
41
41
|
- First, you will need to bring your own archive node. This can be one you run yourself, or one from one of the common providers (Tenderly, Alchemy, QuickNode, etc.). Your archive node must have tracing enabled (free-tier Alchemy nodes do not support this option).
|
|
42
42
|
- You must configure a [brownie network](https://eth-brownie.readthedocs.io/en/stable/network-management.html) to use your RPC.
|
|
43
43
|
- You will need an auth token for [Etherscan](https://etherscan.io/)'s API. Follow their [guide](https://docs.etherscan.io/etherscan-v2/getting-an-api-key) to get your key, and set env var `ETHERSCAN_TOKEN` with its value.
|
|
44
|
-
- You'll also need [Docker](https://www.docker.com/get-started/) installed on your system. If on MacOS, you will need to leave Docker Desktop open while
|
|
44
|
+
- You'll also need [Docker](https://www.docker.com/get-started/) installed on your system. If on MacOS, you will need to leave Docker Desktop open while DAO Treasury is running.
|
|
45
45
|
|
|
46
46
|
## Installation
|
|
47
47
|
|
|
@@ -66,6 +66,7 @@ poetry run dao-treasury run --wallet 0x123 --network mainnet --interval 12h
|
|
|
66
66
|
**CLI Options:**
|
|
67
67
|
- `--network`: The id of the brownie network the exporter will connect to (default: mainnet)
|
|
68
68
|
- `--interval`: The time interval between each data snapshot (default: 12h)
|
|
69
|
+
- `--concurrency`: The max number of historical blocks to export concurrently. (default: 30)
|
|
69
70
|
- `--daemon`: Run the export process in the background (default: False) (NOTE: currently unsupported)
|
|
70
71
|
- `--grafana-port`: Set the port for the Grafana dashboard where you can view data (default: 3004)
|
|
71
72
|
- `--renderer-port`: Set the port for the report rendering service (default: 8091)
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
dao_treasury__mypyc.cpython-311-darwin.so,sha256=tgKESU_EqBQPbzqm927sFzEwdOljqDsWKQaO0PwZZdE,1231256
|
|
2
|
+
dao_treasury-0.0.69.dist-info/RECORD,,
|
|
3
|
+
dao_treasury-0.0.69.dist-info/WHEEL,sha256=sunMa2yiYbrNLGeMVDqEA0ayyJbHlex7SCn1TZrEq60,136
|
|
4
|
+
dao_treasury-0.0.69.dist-info/top_level.txt,sha256=CV8aYytuSYplDhLVY4n0GphckdysXCd1lHmbqfsPxNk,33
|
|
5
|
+
dao_treasury-0.0.69.dist-info/METADATA,sha256=nvHMuGdpOK5wplMI1rk4FRymCtKZJP7VPpLe_YTX2j4,7111
|
|
6
|
+
dao_treasury/_nicknames.cpython-311-darwin.so,sha256=wn0Rsr7S7s7g5l4U4Qw9ZhjFvdnK9pQ4jOphdqLHB8A,50656
|
|
7
|
+
dao_treasury/_wallet.py,sha256=epV8LVuwHlOzc9UkA66js7HfEiZBOSAGJMtWbDTzmjU,10462
|
|
8
|
+
dao_treasury/db.py,sha256=WEM89soGJ-qI0KVk2XdmcUDtOGe-IUiw5cKQu7EKsvQ,49280
|
|
9
|
+
dao_treasury/docker-compose.yaml,sha256=SsfbKO8XiKxu0ckhFVRF8YA3dMWOnGhwvpJg_8YDXB0,1309
|
|
10
|
+
dao_treasury/ENVIRONMENT_VARIABLES.py,sha256=LEczR1MSWTY00sLHnFs3j_Jm8WZNJCxjwEzrvjbwl2E,636
|
|
11
|
+
dao_treasury/_wallet.cpython-311-darwin.so,sha256=jMGr-z5z-bDZKkmb1_dblLJof_7J26zbnoqvwVkrQao,50640
|
|
12
|
+
dao_treasury/constants.py,sha256=BGWVeN4KqpxWDGLG-DjPmdXmyVEb2C9KpMig9RaGJws,1444
|
|
13
|
+
dao_treasury/types.cpython-311-darwin.so,sha256=3S_Eks83q_RPR9iuuyxb_7BXHiv0MPnu2Nac5cfDH34,50616
|
|
14
|
+
dao_treasury/__init__.py,sha256=W4syl9-cNhHOdD25ye9U7aBJTLE_R-uP49FXC_6CUOE,1477
|
|
15
|
+
dao_treasury/_nicknames.py,sha256=bvz0b8C31tFQ0pGtpSJW86OwjUF_qMBal4VXVT5UyLo,1017
|
|
16
|
+
dao_treasury/types.py,sha256=dJDx0hYfDDL3slcUzRnCgrzFFsgCzoqg8uaTtLaT4kk,3685
|
|
17
|
+
dao_treasury/_docker.cpython-311-darwin.so,sha256=Nsmh3H1WOwadCayx8xjAUqAL8CKA8WH5bhp8UhYMBws,50640
|
|
18
|
+
dao_treasury/_docker.py,sha256=9_XTuBClqNK6qQjSsVk_fdBWPgfSj8EuDIcE9-whBB4,5924
|
|
19
|
+
dao_treasury/constants.cpython-311-darwin.so,sha256=stenUadN9jDlGVzDO0rMmNtyJI84WjQZTKyNzigtZWk,50656
|
|
20
|
+
dao_treasury/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
21
|
+
dao_treasury/treasury.py,sha256=taTvwTH_Zdu2M61TrUCENcIUjxdQO3vryrZ2iVb6suM,7223
|
|
22
|
+
dao_treasury/main.py,sha256=uMY5XP_GpxO6Qd9VA1YMLzMOd-O4VnxbGJ2Pdqh0Zo0,8205
|
|
23
|
+
dao_treasury/.grafana/provisioning/datasources/datasources.yaml,sha256=mjQs8or651NgD_bZnKBm8vSghzjw_g3enL01YPt0dik,327
|
|
24
|
+
dao_treasury/.grafana/provisioning/dashboards/dashboards.yaml,sha256=7WQaeajNf9hNnPJA9SZgvPot9m7TbzyN21BIbB8MaHM,191
|
|
25
|
+
dao_treasury/.grafana/provisioning/dashboards/breakdowns/Revenue.json,sha256=sPwG6ERjiJVPyivYS2iPCtFDdxUAWpyz4e3NGcT0tcE,18620
|
|
26
|
+
dao_treasury/.grafana/provisioning/dashboards/breakdowns/Expenses.json,sha256=fMBSldgUmZm3dDHb6D7ShQ7R2eCH4CWbhZCRhz21cOw,19413
|
|
27
|
+
dao_treasury/.grafana/provisioning/dashboards/streams/LlamaPay.json,sha256=Ct8FRa0c_FQEBTKaGpC0y2cBhYM_YYU_v0uOUBJAqQU,7504
|
|
28
|
+
dao_treasury/.grafana/provisioning/dashboards/transactions/Treasury Transactions.json,sha256=4R4L3jHegSTewWGRDayGscDZqVv5Laf6K77jK0TYeyY,14700
|
|
29
|
+
dao_treasury/.grafana/provisioning/dashboards/treasury/Cashflow (Including Unsorted).json,sha256=rUzNnSnR33YyJDLwzPL8iPn34CYaYVsL2V4vEZwvQf0,27346
|
|
30
|
+
dao_treasury/.grafana/provisioning/dashboards/treasury/Historical Treasury Balances.json,sha256=jTSvRNQu9QAjL7v2lJWbkDa_p8vnFecTQsbqIPJ2d3o,104559
|
|
31
|
+
dao_treasury/.grafana/provisioning/dashboards/treasury/Current Treasury Assets.json,sha256=mysaX1aoB9pB5OTrp2vlrGLRfAxsDCUOMsnL9rbxOc0,25951
|
|
32
|
+
dao_treasury/.grafana/provisioning/dashboards/treasury/Operating Cashflow.json,sha256=7xRABZ9m1iFXDVeLX-4x6ByyGnE7GQQrSGUPk2pRvww,15471
|
|
33
|
+
dao_treasury/.grafana/provisioning/dashboards/treasury/Cashflow.json,sha256=f7hl5DyxhrebpXqGsq2FJhrNIvpInD9VwoH0N6jqIFY,19637
|
|
34
|
+
dao_treasury/.grafana/provisioning/dashboards/summary/Monthly.json,sha256=Xa0GyAOK_3fDn5u89_6yzzd-SKo_LEotH8t4GnXsUTg,7050
|
|
35
|
+
dao_treasury/streams/llamapay.py,sha256=yn37gwVfqGFF9fOhHuj9_t7KlHGyrdekF2TUmVDyg64,13147
|
|
36
|
+
dao_treasury/streams/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
37
|
+
dao_treasury/streams/__init__.cpython-311-darwin.so,sha256=6DTXfF4MSFV-wAhuJ5PtUuxX9Cp0qlfkwGTaRyDX2bs,50640
|
|
38
|
+
dao_treasury/streams/llamapay.cpython-311-darwin.so,sha256=FQwbRPH5cfQOK03LxIs3mYVpKEHBbKZOUyJp0m7T56A,50656
|
|
39
|
+
dao_treasury/sorting/_rules.py,sha256=vWkqJVA8yCHKRv9sw872Jq6G0zpM-v_J1jCz-Mgleec,8994
|
|
40
|
+
dao_treasury/sorting/factory.cpython-311-darwin.so,sha256=v6azWlfbKwZ1K7Wf6WVb5QxutBavYXbq7s8dYgq0prA,50656
|
|
41
|
+
dao_treasury/sorting/__init__.py,sha256=vKj3NPB7EWbX7_fSUWKXk-NsyPasOkFhJvJVGclBOAE,10371
|
|
42
|
+
dao_treasury/sorting/rule.cpython-311-darwin.so,sha256=RszywPLFR4mFlR2tZldXzl_cbNblXwFxvaJQvOn54o0,50632
|
|
43
|
+
dao_treasury/sorting/_matchers.cpython-311-darwin.so,sha256=6dRGQYncNfw4p8iM6wBhV58HLZQdpH83DXo1A-UkN8A,50656
|
|
44
|
+
dao_treasury/sorting/factory.py,sha256=pFD6luc0bKxOTT1hlAp3ZwJw6R0wN8pjIZrqMZwhsko,10185
|
|
45
|
+
dao_treasury/sorting/rule.py,sha256=WtGGN5mOd6S2Bhk7v5lsBWSSzVGKON7V10ImrUN79Y4,11628
|
|
46
|
+
dao_treasury/sorting/__init__.cpython-311-darwin.so,sha256=PeM_dR4dGzGNf1t2WN2tM6sfIkuck8ew2qwEo-_7fUM,50640
|
|
47
|
+
dao_treasury/sorting/_rules.cpython-311-darwin.so,sha256=AlFokMRSmhC3Fnvk8_4YSF5P3U4hH1NTjuq_AI-Iok0,50640
|
|
48
|
+
dao_treasury/sorting/_matchers.py,sha256=u0GfPYiODr_NtzbfyLxEKDuXmWRiaeuZulDj9FPDOH8,14005
|
|
49
|
+
dao_treasury/sorting/rules/__init__.py,sha256=ofzIsW0P74kuKr6DlScZIF8p7hBh6guRpe1uOq6oLLA,48
|
|
50
|
+
dao_treasury/sorting/rules/__init__.cpython-311-darwin.so,sha256=4-UEcFYqlvKOsI5bTLXtNsNqhUCGf-1mXOEzQ6PsuLc,50640
|
|
51
|
+
dao_treasury/sorting/rules/ignore/llamapay.py,sha256=NgiVt9MRtI-f4mw9U5_gqttdPqDa3vt_z5XWJP_UYWs,763
|
|
52
|
+
dao_treasury/sorting/rules/ignore/__init__.py,sha256=dJ4oKSLe7fal1Ct7XtMCfVJAtvZXcyIomf8HF3gWUhQ,57
|
|
53
|
+
dao_treasury/sorting/rules/ignore/__init__.cpython-311-darwin.so,sha256=4IWkbG2lsUa8O4eLxCCc2-9_1V5MzB3C_sHslOQlpYI,50656
|
|
54
|
+
dao_treasury/sorting/rules/ignore/llamapay.cpython-311-darwin.so,sha256=ltGqmT6Cmb7j3NUgoQkXijQaB8XwQb7xNYcMqMlskK8,50672
|
|
Binary file
|
|
Binary file
|