dao-treasury 0.0.41__cp310-cp310-win32.whl → 0.0.70__cp310-cp310-win32.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.
Files changed (42) hide show
  1. dao_treasury/.grafana/provisioning/dashboards/breakdowns/Expenses.json +551 -0
  2. dao_treasury/.grafana/provisioning/dashboards/breakdowns/Revenue.json +551 -0
  3. dao_treasury/.grafana/provisioning/dashboards/dashboards.yaml +7 -57
  4. dao_treasury/.grafana/provisioning/dashboards/streams/LlamaPay.json +11 -16
  5. dao_treasury/.grafana/provisioning/dashboards/summary/Monthly.json +151 -22
  6. dao_treasury/.grafana/provisioning/dashboards/transactions/Treasury Transactions.json +38 -61
  7. dao_treasury/.grafana/provisioning/dashboards/treasury/Cashflow (Including Unsorted).json +122 -149
  8. dao_treasury/.grafana/provisioning/dashboards/treasury/Cashflow.json +87 -100
  9. dao_treasury/.grafana/provisioning/dashboards/treasury/Current Treasury Assets.json +981 -0
  10. dao_treasury/.grafana/provisioning/dashboards/treasury/Historical Treasury Balances.json +2989 -0
  11. dao_treasury/.grafana/provisioning/dashboards/treasury/Operating Cashflow.json +64 -78
  12. dao_treasury/_docker.cp310-win32.pyd +0 -0
  13. dao_treasury/_docker.py +24 -20
  14. dao_treasury/_nicknames.cp310-win32.pyd +0 -0
  15. dao_treasury/_wallet.cp310-win32.pyd +0 -0
  16. dao_treasury/constants.cp310-win32.pyd +0 -0
  17. dao_treasury/constants.py +5 -0
  18. dao_treasury/db.py +49 -3
  19. dao_treasury/docker-compose.yaml +1 -1
  20. dao_treasury/main.py +39 -1
  21. dao_treasury/sorting/__init__.cp310-win32.pyd +0 -0
  22. dao_treasury/sorting/_matchers.cp310-win32.pyd +0 -0
  23. dao_treasury/sorting/_rules.cp310-win32.pyd +0 -0
  24. dao_treasury/sorting/factory.cp310-win32.pyd +0 -0
  25. dao_treasury/sorting/rule.cp310-win32.pyd +0 -0
  26. dao_treasury/sorting/rule.py +8 -10
  27. dao_treasury/sorting/rules/__init__.cp310-win32.pyd +0 -0
  28. dao_treasury/sorting/rules/ignore/__init__.cp310-win32.pyd +0 -0
  29. dao_treasury/sorting/rules/ignore/llamapay.cp310-win32.pyd +0 -0
  30. dao_treasury/streams/__init__.cp310-win32.pyd +0 -0
  31. dao_treasury/streams/llamapay.cp310-win32.pyd +0 -0
  32. dao_treasury/treasury.py +4 -2
  33. dao_treasury/types.cp310-win32.pyd +0 -0
  34. {dao_treasury-0.0.41.dist-info → dao_treasury-0.0.70.dist-info}/METADATA +18 -3
  35. dao_treasury-0.0.70.dist-info/RECORD +54 -0
  36. dao_treasury-0.0.70.dist-info/top_level.txt +2 -0
  37. dao_treasury__mypyc.cp310-win32.pyd +0 -0
  38. bf2b4fe1f86ad2ea158b__mypyc.cp310-win32.pyd +0 -0
  39. dao_treasury/.grafana/provisioning/dashboards/treasury/Treasury.json +0 -2018
  40. dao_treasury-0.0.41.dist-info/RECORD +0 -51
  41. dao_treasury-0.0.41.dist-info/top_level.txt +0 -2
  42. {dao_treasury-0.0.41.dist-info → dao_treasury-0.0.70.dist-info}/WHEEL +0 -0
@@ -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(
dao_treasury/treasury.py CHANGED
@@ -18,11 +18,11 @@ This is the main entry point for orchestrating DAO treasury analytics.
18
18
  from asyncio import create_task, gather
19
19
  from logging import getLogger
20
20
  from pathlib import Path
21
- from typing import Final, Iterable, List, Optional, Union
21
+ from typing import Dict, Final, Iterable, List, Optional, Union
22
22
 
23
23
  import a_sync
24
24
  from a_sync.a_sync.abstract import ASyncABC
25
- from eth_typing import BlockNumber
25
+ from eth_typing import BlockNumber, HexAddress
26
26
  from eth_portfolio.structs import LedgerEntry
27
27
  from eth_portfolio.typing import PortfolioBalances
28
28
  from eth_portfolio_scripts._portfolio import ExportablePortfolio
@@ -52,6 +52,7 @@ class Treasury(a_sync.ASyncGenericBase): # type: ignore [misc]
52
52
  sort_rules: Optional[Path] = None,
53
53
  start_block: int = 0,
54
54
  label: str = "your org's treasury",
55
+ custom_buckets: Optional[Dict[HexAddress, str]] = None,
55
56
  asynchronous: bool = False,
56
57
  ) -> None:
57
58
  """Initialize the Treasury singleton for managing DAO funds.
@@ -124,6 +125,7 @@ class Treasury(a_sync.ASyncGenericBase): # type: ignore [misc]
124
125
  start_block=start_block,
125
126
  label=label,
126
127
  load_prices=True,
128
+ custom_buckets=custom_buckets,
127
129
  asynchronous=asynchronous,
128
130
  )
129
131
  """An eth_portfolio.Portfolio object used for exporting tx and balance history"""
Binary file
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dao_treasury
3
- Version: 0.0.41
3
+ Version: 0.0.70
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<0.1,>=0.0.38.dev0
17
+ Requires-Dist: eth-portfolio-temp==0.3.1
18
18
  Dynamic: classifier
19
19
  Dynamic: description
20
20
  Dynamic: description-content-type
@@ -29,6 +29,7 @@ DAO Treasury is a comprehensive financial reporting and treasury management solu
29
29
  - **Financial Reporting for DAOs:** Extends core portfolio functionalities to generate detailed reports tailored for on-chain organizations.
30
30
  - **Dashboard Provisioning:** Utilizes [Grafana](https://grafana.com/) dashboards—defined in JSON files within the .grafana/provisioning directories—to offer real-time, dynamic visualizations of treasury data.
31
31
  - **Automated Data Export:** Features a treasury export tool that, once configured (with a supported [brownie network](https://eth-brownie.readthedocs.io/en/stable/network-management.html) and [Docker](https://www.docker.com/get-started/)), continuously captures financial snapshots at set intervals.
32
+ - **Custom Buckets for Wallets:** Assign custom categories ("buckets") to specific wallet addresses for more granular reporting using the `--custom-bucket` CLI option.
32
33
  - **Ease of Contribution:** Non-technical users can easily update or create dashboard visuals using Grafana’s intuitive UI. The [Contributing Guidelines](https://github.com/BobTheBuidler/dao-treasury/blob/master/CONTRIBUTING.md) document provides a step-by-step guide to defining new visuals and dashboards and integrating those changes into the repository, ensuring that anyone can contribute to the visual reporting aspect of the project.
33
34
 
34
35
  ## Requirements
@@ -41,7 +42,7 @@ DAO Treasury is a comprehensive financial reporting and treasury management solu
41
42
  - 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
43
  - You must configure a [brownie network](https://eth-brownie.readthedocs.io/en/stable/network-management.html) to use your RPC.
43
44
  - 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 Yearn Treasury is running.
45
+ - 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
46
 
46
47
  ## Installation
47
48
 
@@ -63,14 +64,28 @@ For local development (from source installation), use:
63
64
  poetry run dao-treasury run --wallet 0x123 --network mainnet --interval 12h
64
65
  ```
65
66
 
67
+ **Assigning Custom Buckets to Wallets:**
68
+
69
+ You can assign custom categories ("buckets") to specific wallet addresses for more granular reporting. Use the `--custom-bucket` option one or more times, each with the format `address:bucket_name`:
70
+
71
+ ```bash
72
+ dao-treasury run --wallet 0x123 --network mainnet --custom-bucket "0x123:Operations" --custom-bucket "0x456:Grants" --custom-bucket "0x789:Investments"
73
+ ```
74
+
66
75
  **CLI Options:**
76
+ > Only optional arguments are listed here. Required arguments (such as `--wallet` or `--wallets`) are shown in the usage examples above.
77
+
67
78
  - `--network`: The id of the brownie network the exporter will connect to (default: mainnet)
68
79
  - `--interval`: The time interval between each data snapshot (default: 12h)
80
+ - `--concurrency`: The max number of historical blocks to export concurrently. (default: 30)
69
81
  - `--daemon`: Run the export process in the background (default: False) (NOTE: currently unsupported)
82
+ - `--sort-rules`: Directory containing sort rules definitions for transaction categorization.
83
+ - `--nicknames`: File containing address nicknames for reporting.
70
84
  - `--grafana-port`: Set the port for the Grafana dashboard where you can view data (default: 3004)
71
85
  - `--renderer-port`: Set the port for the report rendering service (default: 8091)
72
86
  - `--victoria-port`: Set the port for the Victoria metrics reporting endpoint (default: 8430)
73
87
  - `--start-renderer`: If set, both the Grafana and renderer containers will be started for dashboard image export. By default, only the grafana container is started.
88
+ - `--custom-bucket`: Assign a custom bucket/category to a wallet address for reporting. Specify as `address:bucket_name`. Can be used multiple times.
74
89
 
75
90
  After running the command, the export script will run continuously until you close your terminal.
76
91
  To view the dashboards, just open your browser and navigate to [http://localhost:3004](http://localhost:3004)!
@@ -0,0 +1,54 @@
1
+ dao_treasury__mypyc.cp310-win32.pyd,sha256=4C-azMTuC8iUJ6EOP9OtfTPHdW_yr108bBUFmi_9R98,394752
2
+ dao_treasury/ENVIRONMENT_VARIABLES.py,sha256=LS_D4ALB3BO-vYKyh1tzRHi10QBE6f654Zy8pmJ_xPY,656
3
+ dao_treasury/__init__.py,sha256=ai8iALE_Zv43O9cH1jkNJ39bzhr60kBDX6L7C4Nj9FA,1539
4
+ dao_treasury/_docker.cp310-win32.pyd,sha256=6K5ZsCE2V6B1leINcOQcm__0NTJRmRfNUQEe0UzeDC8,9216
5
+ dao_treasury/_docker.py,sha256=Rki3eLKOmsNxN3nF-gmbM9UQV49SY7ToEHZboL_HYvA,6118
6
+ dao_treasury/_nicknames.cp310-win32.pyd,sha256=XJPKnwMCnZV7Uw5HoyxltqG_y1FufA8vBHN94eGZ0IM,9216
7
+ dao_treasury/_nicknames.py,sha256=n8c-JZhORYymCMv6jsC96IthAzAhpslyEn-KCk_YiSM,1049
8
+ dao_treasury/_wallet.cp310-win32.pyd,sha256=hyIuUsq5TigPuExkYUQC7-HX6GC5eUM5KdiZRDILcdg,9216
9
+ dao_treasury/_wallet.py,sha256=nHBAKFJstdKuYbvpskGVx2KU80YrZHGHsEh5V3TwIHs,10712
10
+ dao_treasury/constants.cp310-win32.pyd,sha256=JT0bIUBainnd_-Jpz1jCoWDvQ1aevr9Al-rO1ZJiN5s,9216
11
+ dao_treasury/constants.py,sha256=-T0oPw7lC5YeaiplHAtYL-2ss7knvKrJKQ1LCc8kX8g,1483
12
+ dao_treasury/db.py,sha256=4Vc_U3mmrG8hOpsuDcgCQQuwGyL3pyfYH2jjktDXx48,50734
13
+ dao_treasury/docker-compose.yaml,sha256=wNNE9xmkchcV-nJxzrmUkbUA0CW1qgdGQKJ7uw2P8nU,1350
14
+ dao_treasury/main.py,sha256=_Q-Nhn9WJ6alovqxt8Aa2X24-cxPgH4b25ulj0mEygs,9611
15
+ dao_treasury/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
16
+ dao_treasury/treasury.py,sha256=K4XOg-5BHoP5HoRlHNu4afNpYs2-8sjCOOGwdt3M21w,7541
17
+ dao_treasury/types.cp310-win32.pyd,sha256=a5wq7uL9_oMtUQ2otd6U8CqrczuW6blPm0chjH1s-Aw,9216
18
+ dao_treasury/types.py,sha256=KFz4WKPp4t_RBwIT6YGwOcgbzw8tdHIOcXTFsUA0pJA,3818
19
+ dao_treasury/.grafana/provisioning/dashboards/dashboards.yaml,sha256=to_cVfl8X6-5zVskkDxNtTE191TH52XO2peGfHPI5F0,201
20
+ dao_treasury/.grafana/provisioning/dashboards/breakdowns/Expenses.json,sha256=seX4E48q7XTIDYTzwiZzDR_n-vii-MqfT8MJ4mIhpUc,19964
21
+ dao_treasury/.grafana/provisioning/dashboards/breakdowns/Revenue.json,sha256=tdHBpE0gMk3tcVyT2rP4eMNUbTs5c98zjv_hPlMvhmM,19171
22
+ dao_treasury/.grafana/provisioning/dashboards/streams/LlamaPay.json,sha256=rQ3-eFc9vk4AzQfwG5d1NlonyPTlHuBQfr-IdlAI-QE,7724
23
+ dao_treasury/.grafana/provisioning/dashboards/summary/Monthly.json,sha256=6a-1pkN8yK1wk0imR6C0InYalgh2fEeCVjFdZClpmRw,10998
24
+ dao_treasury/.grafana/provisioning/dashboards/transactions/Treasury Transactions.json,sha256=uDwsIgrHJoR5yp7177IpMXExp8o-vMQBMN9bzxzNI18,15064
25
+ dao_treasury/.grafana/provisioning/dashboards/treasury/Cashflow (Including Unsorted).json,sha256=tzg4DcF5mFMvhveq6cfgB9CJWivxvbeN1Bo8L0ngx-I,28154
26
+ dao_treasury/.grafana/provisioning/dashboards/treasury/Cashflow.json,sha256=DpAoMqDRo6xhn-QDT0tCCqk1yO6z5qQBMvOC8oXlViA,20239
27
+ dao_treasury/.grafana/provisioning/dashboards/treasury/Current Treasury Assets.json,sha256=HCzFfESFmLruuKxMKOatkoFcHXgx90dnyuFgHmcocKk,26281
28
+ dao_treasury/.grafana/provisioning/dashboards/treasury/Historical Treasury Balances.json,sha256=K8zqxPFlvde9lhopzvox-CM52rLP0lzZMATi7EcPOJ0,107548
29
+ dao_treasury/.grafana/provisioning/dashboards/treasury/Operating Cashflow.json,sha256=KFmBbIdiiFdgc0qmQDbK_YAIn2b10H_e5K_3hifHWoM,15949
30
+ dao_treasury/.grafana/provisioning/datasources/datasources.yaml,sha256=gLmJsOkEXNzWRDibShfHFySWeuExW-dSB_U0OSfH868,344
31
+ dao_treasury/sorting/__init__.cp310-win32.pyd,sha256=rvdijFRKdAOFOiKkNRNcHp2pJW85ZoBP_cgKRwMCb-k,9216
32
+ dao_treasury/sorting/__init__.py,sha256=_uxM_FE1paM8oDAhDdHSyhDwnrlxCYX_lGn2DOqCaHU,10666
33
+ dao_treasury/sorting/_matchers.cp310-win32.pyd,sha256=9-45uc_UOwq2QRY3q3K2H935nCFhVuzijBhoEdbtcLk,9216
34
+ dao_treasury/sorting/_matchers.py,sha256=ACi6aXZCKW5OTiztsID7CXCGJounj5c6ivhOCg2436M,14392
35
+ dao_treasury/sorting/_rules.cp310-win32.pyd,sha256=i9BaLlavF33YNX2XwV5w_ibkzk6JHQNPeysokH9aZjM,9216
36
+ dao_treasury/sorting/_rules.py,sha256=DxhdUgpS0q0LWeLl9W1Bjn5LZz9z4OLA03vQllPMH9k,9229
37
+ dao_treasury/sorting/factory.cp310-win32.pyd,sha256=yN8WMppiPrxMBkddZuQEgE-pFqqKak77IgjsdpSVPNA,9216
38
+ dao_treasury/sorting/factory.py,sha256=zlJ18xlMTxv8ACV6_MimCVIDsw3K5AZcyvKaNYY7R14,10484
39
+ dao_treasury/sorting/rule.cp310-win32.pyd,sha256=yC7NHHTE2nGK69fFcA84i_AP_2bkDBFUmOrpTZdzIvM,9216
40
+ dao_treasury/sorting/rule.py,sha256=wbL8s0-6dxcCKghUtEDSkLDBnyvggsJ3gt_RawQ6kB4,11972
41
+ dao_treasury/sorting/rules/__init__.cp310-win32.pyd,sha256=fGqpAit9xppQYcjbKQTGW0LIhKCc4GhklJ3lrR-Irpc,9216
42
+ dao_treasury/sorting/rules/__init__.py,sha256=hcLfejOEwD8RaM2RE-38Ej6_WkvL9BVGvIIGY848E6E,49
43
+ dao_treasury/sorting/rules/ignore/__init__.cp310-win32.pyd,sha256=7f-jf8buVZL1vaOVDVk4XkJjVQW0xX5NKLjUdCqGBg0,9216
44
+ dao_treasury/sorting/rules/ignore/__init__.py,sha256=16THKoGdj6qfkkytuCFVG_R1M6KSErMI4AVE1p0ukS4,58
45
+ dao_treasury/sorting/rules/ignore/llamapay.cp310-win32.pyd,sha256=8PHU_ivt2-h6r2-tm9eqjQdSJWSNXVDeQsjOZZZP_PQ,9216
46
+ dao_treasury/sorting/rules/ignore/llamapay.py,sha256=aYyAJRlmv419IeaqkcV5o3ffx0UVfteU0lTl80j0BGo,783
47
+ dao_treasury/streams/__init__.cp310-win32.pyd,sha256=NaDQ4XjlkjKnV_zemyYHrSy7Ww5wlH-6Pp37uywELOM,9216
48
+ dao_treasury/streams/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
49
+ dao_treasury/streams/llamapay.cp310-win32.pyd,sha256=PbtMpLZkYCd4BKNDD1zhkJIcOK6iV_tpESreUkcRnOU,9216
50
+ dao_treasury/streams/llamapay.py,sha256=rO1Mh2ndTziR6pnRkKHnQ22a_Yx9PM_-BG7I4dspEZ8,13535
51
+ dao_treasury-0.0.70.dist-info/METADATA,sha256=zNKm5xmiLAurcHuLj1sct6NXQUprw7GXqsgGgrmq8Gk,8267
52
+ dao_treasury-0.0.70.dist-info/WHEEL,sha256=GWZF0cboiU4MhsG0baPl8rrtCaXFSLW25384gp3vddM,97
53
+ dao_treasury-0.0.70.dist-info/top_level.txt,sha256=CV8aYytuSYplDhLVY4n0GphckdysXCd1lHmbqfsPxNk,33
54
+ dao_treasury-0.0.70.dist-info/RECORD,,
@@ -0,0 +1,2 @@
1
+ dao_treasury
2
+ dao_treasury__mypyc
Binary file
Binary file