brawny 0.1.13__py3-none-any.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.
- brawny/__init__.py +106 -0
- brawny/_context.py +232 -0
- brawny/_rpc/__init__.py +38 -0
- brawny/_rpc/broadcast.py +172 -0
- brawny/_rpc/clients.py +98 -0
- brawny/_rpc/context.py +49 -0
- brawny/_rpc/errors.py +252 -0
- brawny/_rpc/gas.py +158 -0
- brawny/_rpc/manager.py +982 -0
- brawny/_rpc/selector.py +156 -0
- brawny/accounts.py +534 -0
- brawny/alerts/__init__.py +132 -0
- brawny/alerts/abi_resolver.py +530 -0
- brawny/alerts/base.py +152 -0
- brawny/alerts/context.py +271 -0
- brawny/alerts/contracts.py +635 -0
- brawny/alerts/encoded_call.py +201 -0
- brawny/alerts/errors.py +267 -0
- brawny/alerts/events.py +680 -0
- brawny/alerts/function_caller.py +364 -0
- brawny/alerts/health.py +185 -0
- brawny/alerts/routing.py +118 -0
- brawny/alerts/send.py +364 -0
- brawny/api.py +660 -0
- brawny/chain.py +93 -0
- brawny/cli/__init__.py +16 -0
- brawny/cli/app.py +17 -0
- brawny/cli/bootstrap.py +37 -0
- brawny/cli/commands/__init__.py +41 -0
- brawny/cli/commands/abi.py +93 -0
- brawny/cli/commands/accounts.py +632 -0
- brawny/cli/commands/console.py +495 -0
- brawny/cli/commands/contract.py +139 -0
- brawny/cli/commands/health.py +112 -0
- brawny/cli/commands/init_project.py +86 -0
- brawny/cli/commands/intents.py +130 -0
- brawny/cli/commands/job_dev.py +254 -0
- brawny/cli/commands/jobs.py +308 -0
- brawny/cli/commands/logs.py +87 -0
- brawny/cli/commands/maintenance.py +182 -0
- brawny/cli/commands/migrate.py +51 -0
- brawny/cli/commands/networks.py +253 -0
- brawny/cli/commands/run.py +249 -0
- brawny/cli/commands/script.py +209 -0
- brawny/cli/commands/signer.py +248 -0
- brawny/cli/helpers.py +265 -0
- brawny/cli_templates.py +1445 -0
- brawny/config/__init__.py +74 -0
- brawny/config/models.py +404 -0
- brawny/config/parser.py +633 -0
- brawny/config/routing.py +55 -0
- brawny/config/validation.py +246 -0
- brawny/daemon/__init__.py +14 -0
- brawny/daemon/context.py +69 -0
- brawny/daemon/core.py +702 -0
- brawny/daemon/loops.py +327 -0
- brawny/db/__init__.py +78 -0
- brawny/db/base.py +986 -0
- brawny/db/base_new.py +165 -0
- brawny/db/circuit_breaker.py +97 -0
- brawny/db/global_cache.py +298 -0
- brawny/db/mappers.py +182 -0
- brawny/db/migrate.py +349 -0
- brawny/db/migrations/001_init.sql +186 -0
- brawny/db/migrations/002_add_included_block.sql +7 -0
- brawny/db/migrations/003_add_broadcast_at.sql +10 -0
- brawny/db/migrations/004_broadcast_binding.sql +20 -0
- brawny/db/migrations/005_add_retry_after.sql +9 -0
- brawny/db/migrations/006_add_retry_count_column.sql +11 -0
- brawny/db/migrations/007_add_gap_tracking.sql +18 -0
- brawny/db/migrations/008_add_transactions.sql +72 -0
- brawny/db/migrations/009_add_intent_metadata.sql +5 -0
- brawny/db/migrations/010_add_nonce_gap_index.sql +9 -0
- brawny/db/migrations/011_add_job_logs.sql +24 -0
- brawny/db/migrations/012_add_claimed_by.sql +5 -0
- brawny/db/ops/__init__.py +29 -0
- brawny/db/ops/attempts.py +108 -0
- brawny/db/ops/blocks.py +83 -0
- brawny/db/ops/cache.py +93 -0
- brawny/db/ops/intents.py +296 -0
- brawny/db/ops/jobs.py +110 -0
- brawny/db/ops/logs.py +97 -0
- brawny/db/ops/nonces.py +322 -0
- brawny/db/postgres.py +2535 -0
- brawny/db/postgres_new.py +196 -0
- brawny/db/queries.py +584 -0
- brawny/db/sqlite.py +2733 -0
- brawny/db/sqlite_new.py +191 -0
- brawny/history.py +126 -0
- brawny/interfaces.py +136 -0
- brawny/invariants.py +155 -0
- brawny/jobs/__init__.py +26 -0
- brawny/jobs/base.py +287 -0
- brawny/jobs/discovery.py +233 -0
- brawny/jobs/job_validation.py +111 -0
- brawny/jobs/kv.py +125 -0
- brawny/jobs/registry.py +283 -0
- brawny/keystore.py +484 -0
- brawny/lifecycle.py +551 -0
- brawny/logging.py +290 -0
- brawny/metrics.py +594 -0
- brawny/model/__init__.py +53 -0
- brawny/model/contexts.py +319 -0
- brawny/model/enums.py +70 -0
- brawny/model/errors.py +194 -0
- brawny/model/events.py +93 -0
- brawny/model/startup.py +20 -0
- brawny/model/types.py +483 -0
- brawny/networks/__init__.py +96 -0
- brawny/networks/config.py +269 -0
- brawny/networks/manager.py +423 -0
- brawny/obs/__init__.py +67 -0
- brawny/obs/emit.py +158 -0
- brawny/obs/health.py +175 -0
- brawny/obs/heartbeat.py +133 -0
- brawny/reconciliation.py +108 -0
- brawny/scheduler/__init__.py +19 -0
- brawny/scheduler/poller.py +472 -0
- brawny/scheduler/reorg.py +632 -0
- brawny/scheduler/runner.py +708 -0
- brawny/scheduler/shutdown.py +371 -0
- brawny/script_tx.py +297 -0
- brawny/scripting.py +251 -0
- brawny/startup.py +76 -0
- brawny/telegram.py +393 -0
- brawny/testing.py +108 -0
- brawny/tx/__init__.py +41 -0
- brawny/tx/executor.py +1071 -0
- brawny/tx/fees.py +50 -0
- brawny/tx/intent.py +423 -0
- brawny/tx/monitor.py +628 -0
- brawny/tx/nonce.py +498 -0
- brawny/tx/replacement.py +456 -0
- brawny/tx/utils.py +26 -0
- brawny/utils.py +205 -0
- brawny/validation.py +69 -0
- brawny-0.1.13.dist-info/METADATA +156 -0
- brawny-0.1.13.dist-info/RECORD +141 -0
- brawny-0.1.13.dist-info/WHEEL +5 -0
- brawny-0.1.13.dist-info/entry_points.txt +2 -0
- brawny-0.1.13.dist-info/top_level.txt +1 -0
brawny/validation.py
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
"""Startup validation — static checks only.
|
|
2
|
+
|
|
3
|
+
This module provides validation functions for job routing configuration.
|
|
4
|
+
These are run at startup to catch misconfigurations early.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from __future__ import annotations
|
|
8
|
+
|
|
9
|
+
from typing import TYPE_CHECKING
|
|
10
|
+
|
|
11
|
+
from brawny.config.routing import resolve_job_groups
|
|
12
|
+
|
|
13
|
+
if TYPE_CHECKING:
|
|
14
|
+
from brawny.config import Config
|
|
15
|
+
from brawny.jobs.base import Job
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def validate_job_routing(
|
|
19
|
+
config: "Config",
|
|
20
|
+
job_classes: dict[str, "Job"],
|
|
21
|
+
) -> list[str]:
|
|
22
|
+
"""Validate job routing configuration. Returns list of errors.
|
|
23
|
+
|
|
24
|
+
Checks:
|
|
25
|
+
- Validate read_group/broadcast_group exist in rpc_groups
|
|
26
|
+
|
|
27
|
+
Note: Signer validation is handled separately by validate_job() in registry.py
|
|
28
|
+
which checks against the actual keystore (not config.signers).
|
|
29
|
+
|
|
30
|
+
Does NOT:
|
|
31
|
+
- Make RPC calls (no probes)
|
|
32
|
+
- Validate runtime behavior
|
|
33
|
+
|
|
34
|
+
Args:
|
|
35
|
+
config: Application configuration
|
|
36
|
+
job_classes: Dict of job_id -> Job instance
|
|
37
|
+
|
|
38
|
+
Returns:
|
|
39
|
+
List of error messages (empty if valid)
|
|
40
|
+
"""
|
|
41
|
+
errors: list[str] = []
|
|
42
|
+
|
|
43
|
+
for job_id, job_cls in job_classes.items():
|
|
44
|
+
try:
|
|
45
|
+
resolve_job_groups(config, job_cls)
|
|
46
|
+
except ValueError as exc:
|
|
47
|
+
errors.append(f"Job '{job_id}': {exc}")
|
|
48
|
+
|
|
49
|
+
return errors
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
def validate_startup(config: "Config", job_classes: dict[str, "Job"]) -> None:
|
|
53
|
+
"""Validate at startup. Raises on error.
|
|
54
|
+
|
|
55
|
+
This function should be called during application startup after
|
|
56
|
+
config and jobs are loaded.
|
|
57
|
+
|
|
58
|
+
Args:
|
|
59
|
+
config: Application configuration
|
|
60
|
+
job_classes: Dict of job_id -> Job instance
|
|
61
|
+
|
|
62
|
+
Raises:
|
|
63
|
+
ValueError: If validation fails with list of errors
|
|
64
|
+
"""
|
|
65
|
+
errors = validate_job_routing(config, job_classes)
|
|
66
|
+
if errors:
|
|
67
|
+
raise ValueError(
|
|
68
|
+
"Startup validation failed:\n" + "\n".join(f" - {e}" for e in errors)
|
|
69
|
+
)
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: brawny
|
|
3
|
+
Version: 0.1.13
|
|
4
|
+
Summary: Block-driven Ethereum job/transaction execution framework
|
|
5
|
+
Author-email: yearn <dev@yearn.fi>
|
|
6
|
+
License: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/yearn/brawny
|
|
8
|
+
Project-URL: Documentation, https://github.com/yearn/brawny#readme
|
|
9
|
+
Project-URL: Repository, https://github.com/yearn/brawny.git
|
|
10
|
+
Project-URL: Issues, https://github.com/yearn/brawny/issues
|
|
11
|
+
Keywords: ethereum,web3,blockchain,jobs,transactions
|
|
12
|
+
Classifier: Development Status :: 3 - Alpha
|
|
13
|
+
Classifier: Intended Audience :: Developers
|
|
14
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
15
|
+
Classifier: Operating System :: OS Independent
|
|
16
|
+
Classifier: Programming Language :: Python :: 3
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
20
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
21
|
+
Requires-Python: >=3.10
|
|
22
|
+
Description-Content-Type: text/markdown
|
|
23
|
+
Requires-Dist: web3<8.0,>=7.0
|
|
24
|
+
Requires-Dist: click<9.0,>=8.1
|
|
25
|
+
Requires-Dist: pyyaml<7.0,>=6.0
|
|
26
|
+
Requires-Dist: python-dotenv<2.0,>=1.0
|
|
27
|
+
Requires-Dist: structlog<25.0,>=24.1
|
|
28
|
+
Requires-Dist: httpx<1.0,>=0.26
|
|
29
|
+
Requires-Dist: psycopg[binary]<4.0,>=3.1
|
|
30
|
+
Requires-Dist: psycopg-pool<4.0,>=3.2
|
|
31
|
+
Requires-Dist: rich<14.0,>=13.0
|
|
32
|
+
Requires-Dist: prometheus-client<1.0,>=0.20
|
|
33
|
+
Requires-Dist: prompt_toolkit<4.0,>=3.0
|
|
34
|
+
Requires-Dist: pygments<3.0,>=2.17
|
|
35
|
+
Provides-Extra: dev
|
|
36
|
+
Requires-Dist: pytest<9.0,>=8.0; extra == "dev"
|
|
37
|
+
Requires-Dist: pytest-asyncio<1.0,>=0.23; extra == "dev"
|
|
38
|
+
Requires-Dist: pytest-cov<5.0,>=4.1; extra == "dev"
|
|
39
|
+
Requires-Dist: mypy<2.0,>=1.8; extra == "dev"
|
|
40
|
+
Requires-Dist: ruff<1.0,>=0.2; extra == "dev"
|
|
41
|
+
Requires-Dist: black<25.0,>=24.1; extra == "dev"
|
|
42
|
+
Requires-Dist: pre-commit<4.0,>=3.6; extra == "dev"
|
|
43
|
+
Provides-Extra: test
|
|
44
|
+
Requires-Dist: pytest<9.0,>=8.0; extra == "test"
|
|
45
|
+
Requires-Dist: pytest-asyncio<1.0,>=0.23; extra == "test"
|
|
46
|
+
Requires-Dist: pytest-cov<5.0,>=4.1; extra == "test"
|
|
47
|
+
|
|
48
|
+
# brawny
|
|
49
|
+
|
|
50
|
+
Block-driven Ethereum job and transaction execution framework, inspired by [eth-brownie](https://github.com/eth-brownie/brownie).
|
|
51
|
+
|
|
52
|
+
**Brownie-style ergonomics**: brawny mirrors Brownie's developer experience with familiar patterns—`accounts`, `Contract()`, `chain`, `history`, and an interactive console. If you've used Brownie, you'll feel right at home.
|
|
53
|
+
|
|
54
|
+
## Installation (Local Development)
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
# Clone and install the framework
|
|
58
|
+
git clone https://github.com/yearn/brawny.git
|
|
59
|
+
cd brawny
|
|
60
|
+
pip install -e .
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
## Quick Start
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
# Create a new keeper project
|
|
67
|
+
mkdir my-keeper && cd my-keeper
|
|
68
|
+
brawny init
|
|
69
|
+
|
|
70
|
+
# Install your project (brawny is already installed from above)
|
|
71
|
+
pip install -e .
|
|
72
|
+
|
|
73
|
+
# Configure
|
|
74
|
+
cp .env.example .env
|
|
75
|
+
# Edit .env: set RPC_URL and BRAWNY_KEYSTORE_PASSWORD_WORKER
|
|
76
|
+
|
|
77
|
+
# Import a signer key (will prompt for password)
|
|
78
|
+
brawny accounts import --name worker --private-key 0xYOUR_PRIVATE_KEY
|
|
79
|
+
|
|
80
|
+
# Run
|
|
81
|
+
brawny start
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
See `docs/quickstart.md` for a longer walkthrough.
|
|
85
|
+
|
|
86
|
+
## Project Structure
|
|
87
|
+
|
|
88
|
+
After `brawny init`, your project looks like:
|
|
89
|
+
|
|
90
|
+
```
|
|
91
|
+
my-keeper/
|
|
92
|
+
├── my_keeper/ # Your Python package
|
|
93
|
+
│ └── __init__.py
|
|
94
|
+
├── jobs/
|
|
95
|
+
│ ├── __init__.py
|
|
96
|
+
│ └── _examples.py # Reference implementations (not registered)
|
|
97
|
+
├── interfaces/ # Place ABI JSON files here
|
|
98
|
+
├── monitoring/ # Prometheus + Grafana stack
|
|
99
|
+
│ ├── docker-compose.yml
|
|
100
|
+
│ └── grafana/...
|
|
101
|
+
├── pyproject.toml
|
|
102
|
+
├── config.yaml
|
|
103
|
+
├── .env.example
|
|
104
|
+
├── .gitignore
|
|
105
|
+
└── AGENTS.md # AI agent guide for writing jobs
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
The `AGENTS.md` file contains a comprehensive guide for AI agents to generate correct, idiomatic jobs.
|
|
109
|
+
|
|
110
|
+
## Minimal Job Example
|
|
111
|
+
|
|
112
|
+
Create `jobs/harvester.py`:
|
|
113
|
+
|
|
114
|
+
```python
|
|
115
|
+
from brawny import Job, job, Contract, trigger, intent, block
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
@job(signer="worker")
|
|
119
|
+
class HarvestJob(Job):
|
|
120
|
+
name = "Harvest Example"
|
|
121
|
+
check_interval_blocks = 50
|
|
122
|
+
vault_address = "0xYourVault"
|
|
123
|
+
|
|
124
|
+
def check(self):
|
|
125
|
+
vault = Contract(self.vault_address)
|
|
126
|
+
pending = vault.pendingRewards()
|
|
127
|
+
if pending > 1_000_000_000_000_000_000:
|
|
128
|
+
return trigger(
|
|
129
|
+
reason="Harvest pending rewards",
|
|
130
|
+
data={"pending": pending},
|
|
131
|
+
idempotency_parts=[block.number // 50],
|
|
132
|
+
)
|
|
133
|
+
return None
|
|
134
|
+
|
|
135
|
+
def build_intent(self, trig):
|
|
136
|
+
vault = Contract(self.vault_address)
|
|
137
|
+
return intent(
|
|
138
|
+
signer_address=self._signer_name,
|
|
139
|
+
to_address=self.vault_address,
|
|
140
|
+
data=vault.harvest.encode_input(),
|
|
141
|
+
min_confirmations=2,
|
|
142
|
+
)
|
|
143
|
+
|
|
144
|
+
def alert_triggered(self, ctx):
|
|
145
|
+
return f"Harvest triggered: {ctx.trigger.data['pending'] / 1e18:.4f}"
|
|
146
|
+
|
|
147
|
+
def alert_confirmed(self, ctx):
|
|
148
|
+
return f"Harvest confirmed: {ctx.tx.hash}"
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
## Docs
|
|
152
|
+
|
|
153
|
+
- `docs/quickstart.md`
|
|
154
|
+
- `docs/cli.md`
|
|
155
|
+
- `docs/job-lifecycle.md`
|
|
156
|
+
- `docs/alerts.md`
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
brawny/__init__.py,sha256=S3rU6-n_H1NQdNAghB4zSTgvAEuT4ln2eNii87Hm1Js,2344
|
|
2
|
+
brawny/_context.py,sha256=jDdUBpMxApxsGCwYouJN7lHYiX6ukPWyYakLQZ4xhD4,6614
|
|
3
|
+
brawny/accounts.py,sha256=IbAeHiTQ64a-f56sckAOAOkGPZ3tT3R9sQlsal94aNs,16206
|
|
4
|
+
brawny/api.py,sha256=4gxTRgak5lDIiVtJrWo-dOUyF0XmEaHnnFbhkO_lJJs,19217
|
|
5
|
+
brawny/chain.py,sha256=EzPViqzXspHHr6S1NHrlYLDN9Q-A4tPNry9ZMMqUva4,2213
|
|
6
|
+
brawny/cli_templates.py,sha256=6ZyvarLsNWJJIcm_YqYix85lpxRPxx_2lcubTdxa5JQ,37239
|
|
7
|
+
brawny/history.py,sha256=8ODRudA-iiPF12s9mRR78doOIcnlCwaNQhEc901x6Do,3192
|
|
8
|
+
brawny/interfaces.py,sha256=eJXjRh1HxeESaroItT-YCxsYlUceLw0ZmenZhR-H_LI,4393
|
|
9
|
+
brawny/invariants.py,sha256=_oj2KPfqf1dLajJN5yW-jzviC9SDX7PhHMbxKWPfhdc,5234
|
|
10
|
+
brawny/keystore.py,sha256=O0PPtXYmW48xd0040xRU2tN1fdCYTgiyOgQYv34tZeA,16764
|
|
11
|
+
brawny/lifecycle.py,sha256=zP4fOyiGPGhWQtnLnGqmS1sjW0K0Sis6m5Fr0xLg13k,20191
|
|
12
|
+
brawny/logging.py,sha256=FuXf8CJUxODVPdzWrK8oHTLBgIWtmhfTjsD_PJEfHJw,8937
|
|
13
|
+
brawny/metrics.py,sha256=w3s1objzFf-biPiw5-_KqR9Wpu4zSiEPMRUoWLw_mqQ,22450
|
|
14
|
+
brawny/reconciliation.py,sha256=_WFVf8fEKnkJVhTjThb0oTHXDM7njOOsLuTR5bU0Bik,3466
|
|
15
|
+
brawny/script_tx.py,sha256=fIsso5u30it94-XWYmi22aTImGzeQt97Ekjm3Ac3cas,9506
|
|
16
|
+
brawny/scripting.py,sha256=n-2i4oUUVajz1Q2ilU0SKNx3vE9X2kCr_7VuAiGVBAU,7867
|
|
17
|
+
brawny/startup.py,sha256=ChHzLR3dNv_4vxXG-uyp-XxgPCpbjRKkcIENyLhq_wg,2386
|
|
18
|
+
brawny/telegram.py,sha256=7TbzuL8UMQ2I572tAD_ktq4vhzqHaWLlj3-VMjwmT5w,11189
|
|
19
|
+
brawny/testing.py,sha256=tw33Fm9cljB1QJGvyAhzIPipbmVraLtvop24TA_GgHU,3448
|
|
20
|
+
brawny/utils.py,sha256=KGnBWklkg5J-vZEWm4WhHE1I-tHATAqK8r8I5N1-n-I,5167
|
|
21
|
+
brawny/validation.py,sha256=f63DcrEABO1qdCL_9RVk7QbOhstpFFgxtAP7lU5VNfQ,1893
|
|
22
|
+
brawny/_rpc/__init__.py,sha256=Tb-LjDx_n2Lglwnx2ZebcBnHKySiAnQZmLmfGi_0Uys,935
|
|
23
|
+
brawny/_rpc/broadcast.py,sha256=5RAYy1xm42k5oZiX8A7DR5M6yJnLZuQZM0UJyktiXcI,5477
|
|
24
|
+
brawny/_rpc/clients.py,sha256=fSKajPXXzQ2gZ6XnJikOpsFUJRm7xmx9YgNAXON_Dvg,3308
|
|
25
|
+
brawny/_rpc/context.py,sha256=7MtOkAuFhGxvFVqTPWXC6Jfmr4Ld8UGjO8S4OW0Gzx0,1222
|
|
26
|
+
brawny/_rpc/errors.py,sha256=FriHwPAnrBc9d5FMtgHxcvmbp0NOjNBxctE9t07LjgU,7550
|
|
27
|
+
brawny/_rpc/gas.py,sha256=f6MT51vJHH1UJQZndON_ksZ_IJM5vnm4EZPwnCyidNM,5453
|
|
28
|
+
brawny/_rpc/manager.py,sha256=cMG6CD-KlQTw-JkjNSnhstLrecxp489n4Rcgiw1r3BM,37464
|
|
29
|
+
brawny/_rpc/selector.py,sha256=UChAnDsmbB49z8TnrP1-z44FL0j-CYSbX1VMMVDfQ3M,5415
|
|
30
|
+
brawny/alerts/__init__.py,sha256=MykNI98oMx2RWH2t-2PLXo-rc3Hozqmno21BAQOOY-A,3314
|
|
31
|
+
brawny/alerts/abi_resolver.py,sha256=pF2Npsfq0Z0Uye1_Y6_61ze2IQ7DKLUJa1ZtAvO4m9M,17831
|
|
32
|
+
brawny/alerts/base.py,sha256=sKqh1rM55zj_SXEiSVAU7Cztc6oABghpmAVWzpnUhm4,4153
|
|
33
|
+
brawny/alerts/context.py,sha256=Qv2QhsUE2CwPjzmOqNLJp2vyaGzxZ9CoXE2dgP372Dg,8871
|
|
34
|
+
brawny/alerts/contracts.py,sha256=Hw321LIwBEJ4minH3RCiw3_k4RkCQKSeiyvm2KN210o,21714
|
|
35
|
+
brawny/alerts/encoded_call.py,sha256=DzKYop5U9ciNI-S8e3CAA-yLYVeQ2UlwogZ_LN5-oHQ,6755
|
|
36
|
+
brawny/alerts/errors.py,sha256=p4eXELXTAAorzGfKQ4ebgLoW3eRrOHAp-W6cIqklHQU,8379
|
|
37
|
+
brawny/alerts/events.py,sha256=T-HIim1c0t1ScYuMSb1YZ-HZglMJuh7jrlZvPfMR7OI,22830
|
|
38
|
+
brawny/alerts/function_caller.py,sha256=M_QNg0hMs_XuuT66CphXB2DQxtv0MPr_HUpNmBJBTHw,13459
|
|
39
|
+
brawny/alerts/health.py,sha256=KolaclVvBdGol9jN9-Qeu76vCan3peUqjeM9iKT1krs,6324
|
|
40
|
+
brawny/alerts/routing.py,sha256=r8UMxRihfVxVmr6PRwWgU-NCi8_xjAIdWakfyUL-ssA,3239
|
|
41
|
+
brawny/alerts/send.py,sha256=LLeimlqZ5lG98yNrPkDiVPWLq0RK5KYsX62SgNBWAgM,11838
|
|
42
|
+
brawny/cli/__init__.py,sha256=A96bKB68ldVoDafAhRf0_Jd4z6R4KaEenXs8131M5Ac,229
|
|
43
|
+
brawny/cli/app.py,sha256=xx7uyBjmKkFtqtdNIQJYgLhMTzgMIdRTBFZ-S2lnJP8,374
|
|
44
|
+
brawny/cli/bootstrap.py,sha256=cqqbw2_UFIOlPKtcphWWXyD-FqTMttTulXoZ4RHa7tk,1060
|
|
45
|
+
brawny/cli/helpers.py,sha256=10yoo1TyXUudcpRqxpuMzjZjKfufx0E3GMNIGACEI4Q,8729
|
|
46
|
+
brawny/cli/commands/__init__.py,sha256=ywymaH-keFP2ux9OCjVjvasfGh7C27huzy17MEcA_Jw,1830
|
|
47
|
+
brawny/cli/commands/abi.py,sha256=epaQIMcoLo952blPfFq-cPlZ6OFPW8-xjYBR2cq3qNM,2767
|
|
48
|
+
brawny/cli/commands/accounts.py,sha256=1OreYRUNhSnVIWoQp_NTeUA_1l7ZDpul0fCKueteEZg,19213
|
|
49
|
+
brawny/cli/commands/console.py,sha256=N_S2ghLLW6ken4l7-8UjPhvcsrjyPX6HckygkRuyu3g,17257
|
|
50
|
+
brawny/cli/commands/contract.py,sha256=bWzFsHnbFGmdAVj8ebdrRWr0AcR0n7eys_Psd5EH6I8,4327
|
|
51
|
+
brawny/cli/commands/health.py,sha256=fmunPEjWFXyOEML8cC8yNipMOvJprWLmtkOcYeP8BRI,3660
|
|
52
|
+
brawny/cli/commands/init_project.py,sha256=B6Cy9w2Z86kB8Gs9dAC6zCb9q_5FYBGSrmHmqUr63-c,2586
|
|
53
|
+
brawny/cli/commands/intents.py,sha256=4W96VmofUxjwUaV51T9vvT7BvquLl2g4z2NUdTGtET4,4717
|
|
54
|
+
brawny/cli/commands/job_dev.py,sha256=uYKnrJ2VzJVaTzxaDR3q6JcobucuawnkbEBVWVae1lU,8499
|
|
55
|
+
brawny/cli/commands/jobs.py,sha256=x_F5BZeEDL5sPd6crtcjONGT0AzdS1Z4eqwTsaoKcIE,10096
|
|
56
|
+
brawny/cli/commands/logs.py,sha256=aqyPthS-CBlM4n6GGufrefU0WZYI3EFmXZKcETgAx7s,2684
|
|
57
|
+
brawny/cli/commands/maintenance.py,sha256=224TNrqxKrAiMpgxIKhcQafJEaQu0U10EUyNw2qAPJY,6381
|
|
58
|
+
brawny/cli/commands/migrate.py,sha256=Xlc8wlG8kOJwz91wV-By-hX2rieBTtQDkwMRwrS15os,1649
|
|
59
|
+
brawny/cli/commands/networks.py,sha256=e3nkiTLgbDCHOiBMo6Y5WIwOetOpP3hnbUSRze3mHOc,8499
|
|
60
|
+
brawny/cli/commands/run.py,sha256=EUNv-ZL3QU_UwpLYGuC9PAPHxLqbYnLKVxu9byy8kBM,8599
|
|
61
|
+
brawny/cli/commands/script.py,sha256=ZHC2XKXCtUstMqvUiAdBWYOjIsqME4WL17AMDOClslg,6475
|
|
62
|
+
brawny/cli/commands/signer.py,sha256=5KJ0i2N10Zb0OFSBC-NGXf7nBBkBFt1m6fKKY1NiXzY,8716
|
|
63
|
+
brawny/config/__init__.py,sha256=Ty8HQ9t2b3OihV7xuakXTcF41tiqsQSo3di_SBoqqho,1722
|
|
64
|
+
brawny/config/models.py,sha256=aOdk1XYRCofgUoIUM8ORLxm4o_CBpWE6-rc9satA8KY,12833
|
|
65
|
+
brawny/config/parser.py,sha256=L2v_CurgUw7UUTyzfz6mqvO8LPtHn2e-1Q4Tj4YiHHw,23917
|
|
66
|
+
brawny/config/routing.py,sha256=AyeMsuzkqzEbW1XZMCAyK3ufTC4fyV4wcMLZHwt8L_w,1720
|
|
67
|
+
brawny/config/validation.py,sha256=WUkW18UKIP__VTIZM5bb_tFne6NRBp32ng6V9E5zRbE,7996
|
|
68
|
+
brawny/daemon/__init__.py,sha256=c3IDbNv7aaXej69nh4fOYdNjX2U144tVfU2CtSd2icQ,331
|
|
69
|
+
brawny/daemon/context.py,sha256=TEZYXfoeM6wFoX9I7uLgdc-6HZWBrNO-fyZVvCqqsxs,1832
|
|
70
|
+
brawny/daemon/core.py,sha256=62lxjUv3qgr81QkMo95Drl9_B8OoNfRFkXAwAx-PY5M,24679
|
|
71
|
+
brawny/daemon/loops.py,sha256=Mv1AUly_FOsbOHtrlxKi8QV4J1DqFXPfd6AKch_2SJk,11788
|
|
72
|
+
brawny/db/__init__.py,sha256=JqDFTFhAdW3g4NqsYpSmgAZqbfhtOzpCAD5PVP9RwnA,2479
|
|
73
|
+
brawny/db/base.py,sha256=I0KjhiM_avviYBzTM4WBEDcMwwDlloQbA-92UC7hSps,29218
|
|
74
|
+
brawny/db/base_new.py,sha256=NPjSCNvGw0BhOmAo5Dl0t1oZzMUMCXxCzeTL2xhXUHU,3976
|
|
75
|
+
brawny/db/circuit_breaker.py,sha256=pRyCz6P-2C9tFHlR-xomk7dmiMVgyYFBznHSog4H0QY,2984
|
|
76
|
+
brawny/db/global_cache.py,sha256=fvE23C0mo7Hj6kqYMIxegjd0pTh5IIX7Y0hivUA0Bwo,9339
|
|
77
|
+
brawny/db/mappers.py,sha256=lpB-tP-WExJqPe3kFja-xDw_lBj74ngzq9NVhG2xfIM,6139
|
|
78
|
+
brawny/db/migrate.py,sha256=BPFbo7GN9Ez8XjenQuFoUVbHG9OoqWq0A4e28tbv_N8,10092
|
|
79
|
+
brawny/db/postgres.py,sha256=v8hkP-GN6dkQzM_ZGzsfld0OJFE4GKJXYleZQVl2tJU,89969
|
|
80
|
+
brawny/db/postgres_new.py,sha256=sl-ozPPiEjsi0_O0Y8cMZrK3pQr4_f8UL7BoJSCwNP8,6712
|
|
81
|
+
brawny/db/queries.py,sha256=YXHdHPCIvbhSiJ_nWeCK9ll8W1ebWucu9V1ZleYhDgU,18472
|
|
82
|
+
brawny/db/sqlite.py,sha256=mNeevi1qWA1RtpsJYpG3pFXX51--6fdYwu60894N_v0,97570
|
|
83
|
+
brawny/db/sqlite_new.py,sha256=n9gS5mQNG5u7E3bA7JqF8ixBBN_LqpNuhcvn6bkaOcA,6434
|
|
84
|
+
brawny/db/migrations/001_init.sql,sha256=ej1svcWEIeeAprV3bIv9ACcKcYAj_stJwJalKRxU504,8291
|
|
85
|
+
brawny/db/migrations/002_add_included_block.sql,sha256=e8w0PABNspPiTY--SunB2K1uBTgPYiB01UuJ-L8Wg-k,204
|
|
86
|
+
brawny/db/migrations/003_add_broadcast_at.sql,sha256=DYqlvuw7Kvphps49UAl-Blau0j80Oh8XKEBjBCShEpk,267
|
|
87
|
+
brawny/db/migrations/004_broadcast_binding.sql,sha256=I6T_AI_aKgkmFcKYPaJua7sU4ZC1A967ykBeHhiFX1Q,884
|
|
88
|
+
brawny/db/migrations/005_add_retry_after.sql,sha256=3dCDnjyRa3y_om_IiJLZGNEzt2JcdA8hRJqIaAXtP2c,273
|
|
89
|
+
brawny/db/migrations/006_add_retry_count_column.sql,sha256=6weoQrcTyiQsbFe1BPvSDyr2f9nq1M_dMhuJbJsmBXw,489
|
|
90
|
+
brawny/db/migrations/007_add_gap_tracking.sql,sha256=SUNXm6j7PtiQa1Tw-Bk_mz0R6BeRxddlMGT08XpKlCs,671
|
|
91
|
+
brawny/db/migrations/008_add_transactions.sql,sha256=yLuuODC3PGR4kueWzmRvQ1bVL8UGn4c1IdzwtChztPE,3023
|
|
92
|
+
brawny/db/migrations/009_add_intent_metadata.sql,sha256=gP61XLMhlqRs0gGHlWim6AjsQeKJz6sRCBAX5INfObU,217
|
|
93
|
+
brawny/db/migrations/010_add_nonce_gap_index.sql,sha256=pRlt3OavdVizK7-9bvaJvTAUqhoBU6WM8y3Xb3Q-yr0,434
|
|
94
|
+
brawny/db/migrations/011_add_job_logs.sql,sha256=REwWRMM2VsuF2GfLcDcyZL-ujhetX-uonmkx6Ccirzk,771
|
|
95
|
+
brawny/db/migrations/012_add_claimed_by.sql,sha256=9Sr-iDrFoWIi5gtg6JjBJ1kJIVytwNjifEWoS0qBDbQ,209
|
|
96
|
+
brawny/db/ops/__init__.py,sha256=dF_bDv6TrYqBX-iM-3EO6zA71r-OybgstAITiCwTZI0,830
|
|
97
|
+
brawny/db/ops/attempts.py,sha256=O9_tsaZ5eDchkbvE07k9cwSgM7_XWae5gERZpERb5QU,3458
|
|
98
|
+
brawny/db/ops/blocks.py,sha256=CUyLi6zk18YXxzBKu_fLXXfeNmywshoXDDphWRvxZDU,2725
|
|
99
|
+
brawny/db/ops/cache.py,sha256=rGN1T8fl3c8mgLNB_EeyKd7zF3uMRbphk3f6Ii1rRkg,2710
|
|
100
|
+
brawny/db/ops/intents.py,sha256=-lyNsKxBNKA42JyRjzFZW18OwPnOa4g3BOx1Pm7q0Vo,9907
|
|
101
|
+
brawny/db/ops/jobs.py,sha256=_DZVENuiqpEpVnuEFTjSFsll8cD57DPxlKFvDpWPI6g,3276
|
|
102
|
+
brawny/db/ops/logs.py,sha256=49Z2G3fArHMK18lh-46uWvwkkoW5MOFXl59alcwdFko,2590
|
|
103
|
+
brawny/db/ops/nonces.py,sha256=ZUjIBoc3pwPLoBiVHNqLsi2qCfIESNO0QTTuC6qzPHU,10122
|
|
104
|
+
brawny/jobs/__init__.py,sha256=tko3VoRTh2YbzOJws0wuYGWQQEgnCQNGqIVldEYU2Po,694
|
|
105
|
+
brawny/jobs/base.py,sha256=0S6_Zlv0cdm08s2wiVYkVrVZKe3j_j_Qx3J5u-R63Bw,9537
|
|
106
|
+
brawny/jobs/discovery.py,sha256=JcjUwj9hDyCn7R_PjUMDxs6k5otdLx_y9gcbV_KUowU,7027
|
|
107
|
+
brawny/jobs/job_validation.py,sha256=PcHwGVhZGQ_bz6q7rTiJM0HVCP5rPXUVkMxjuFhoQrw,3031
|
|
108
|
+
brawny/jobs/kv.py,sha256=jjVgikiqib6NPxOu_pKbtdZ5aFWegVFa9e2Zovo54S4,3527
|
|
109
|
+
brawny/jobs/registry.py,sha256=WlYW4FApqeFje6cTkN9sOFMwOeXomhRRHXkIVCKCpfE,9396
|
|
110
|
+
brawny/model/__init__.py,sha256=8U2gUE20TB6vbFA3M06dsVN0pHVgSIHAYRZoUNVdViw,934
|
|
111
|
+
brawny/model/contexts.py,sha256=2omWbqo69G_J3QRAmMriF2kbEemOjuh6cABa8LgaBRg,10006
|
|
112
|
+
brawny/model/enums.py,sha256=p6xkqY1I7MsBczdMy5eqlxb4RPDYTn77yE9lef5Thh8,1535
|
|
113
|
+
brawny/model/errors.py,sha256=YdPjJ7Fj3-rx4XHteURUT8Pv0pdHhKnwMK1Ub6VLK5E,4522
|
|
114
|
+
brawny/model/events.py,sha256=Hq7zXXXDnhscy_uE4Dq6LYdp7hnFHpyaSWx3XUT6K-I,2496
|
|
115
|
+
brawny/model/startup.py,sha256=PeO5l-q6QPrmW8ibl0X_5hTOu922s9Vs5TKH_QiQRJI,487
|
|
116
|
+
brawny/model/types.py,sha256=NK523jfl4vnIwF5eViKJSxytKgxdZb892mQ6UPknL1Q,14819
|
|
117
|
+
brawny/networks/__init__.py,sha256=vSp4SKrp8W4pKPQ3xgBRBUaSZQ5cKTOOuIs4wy_VRvo,2767
|
|
118
|
+
brawny/networks/config.py,sha256=svx0wabynIUsq1ok2CMOFy6yVqNKW2HeY_uILjH_tWE,9562
|
|
119
|
+
brawny/networks/manager.py,sha256=22Vc8_Ld3EsHySBvJfCxTw8KtzKOYjyIUiQy07PMhLk,15308
|
|
120
|
+
brawny/obs/__init__.py,sha256=LZEUGcvTj5GphlX8r2QZChmjKzyA6Ejps-fPrzfnkNU,1486
|
|
121
|
+
brawny/obs/emit.py,sha256=8splCumkhX3zBYGmKp1DR6v42FDC4IDJ-SCPbRLLLys,4802
|
|
122
|
+
brawny/obs/health.py,sha256=j8SngL9gcjLxQpKZgYe5ILsWAb7zseQm4XLVlTFUqGM,5242
|
|
123
|
+
brawny/obs/heartbeat.py,sha256=QneRoISZ59g1tK6ulb7EpXxhhakzdmkSxKsr53LjSww,3826
|
|
124
|
+
brawny/scheduler/__init__.py,sha256=ecMObpBINPeqhGxR_GT1jhalQwkPS2ct-hphibxAVXk,547
|
|
125
|
+
brawny/scheduler/poller.py,sha256=yavj7QGvckgY2LOVzQgUgAb5Krqu6f4xM-h96yKNsVU,16823
|
|
126
|
+
brawny/scheduler/reorg.py,sha256=j0icKia2eAozbhMAVblTD_zNneEzzM4k8BmO_AlXGv4,23630
|
|
127
|
+
brawny/scheduler/runner.py,sha256=L1bw4yGwF-xmDkAkEjTYgEKyKgkZkVpHVURZv-pOUU4,26599
|
|
128
|
+
brawny/scheduler/shutdown.py,sha256=T3qfNffFTYNr-A4Gsh_gbOC8D9395dl1YCb1TGpcXy4,11444
|
|
129
|
+
brawny/tx/__init__.py,sha256=EAutSKQ5_SHfhmqylgHwqmPHqkJuPFFq0TmF3xCYEgs,1026
|
|
130
|
+
brawny/tx/executor.py,sha256=pB_pbM5tKB5QjKUVhl6BASFfrXwbMAk9hOeIFDimxDw,39527
|
|
131
|
+
brawny/tx/fees.py,sha256=x8LofoFtchD3YsjSLebxzl0M1kMDvHi8usfcOCDZ4Jw,1755
|
|
132
|
+
brawny/tx/intent.py,sha256=M2wIwtioHvSoggoL2lkhK1zD2bij6SDlGrJqqOERF-U,12093
|
|
133
|
+
brawny/tx/monitor.py,sha256=bJT4bj0yKblJikF-_PqqwsPZD8JxGU9D8ySq1al9boY,21508
|
|
134
|
+
brawny/tx/nonce.py,sha256=_opCcRBrScCVRh2q7wjKm_5wBtVIVJQ5pOrkD2Jslxk,16907
|
|
135
|
+
brawny/tx/replacement.py,sha256=IcxkhqIYt4S1TxEzZkxM0M_VbHLp6JRxP_X7nLJHTbM,15344
|
|
136
|
+
brawny/tx/utils.py,sha256=CKoxuqtyFkqgKuTgRCDbV3DwQUlTluPI-dFYSVWml0Q,592
|
|
137
|
+
brawny-0.1.13.dist-info/METADATA,sha256=hR_hxF6F62H29Yb-t-G3uAmwlyqvgvOEMk6gL9J0qbY,4931
|
|
138
|
+
brawny-0.1.13.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
139
|
+
brawny-0.1.13.dist-info/entry_points.txt,sha256=hIidVhlON00WJDOrxya-bycfP6Hsml9B2qGlrhZtzbw,43
|
|
140
|
+
brawny-0.1.13.dist-info/top_level.txt,sha256=CjjN4HE-2fk8M8ULl1YgEZz6Ar5LpiYLLC4eLl_HW4Y,7
|
|
141
|
+
brawny-0.1.13.dist-info/RECORD,,
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
brawny
|