Tools to help with the common problems of Forta bot development
Project description
Forta Toolkit
Various tools to help with the common problems of Forta bot development.
Table of Contents
Installation
# globally
pip install forta_toolkit
# in a local environment
poetry add forta_toolkit
Usage
Bot setup
The Forta often require initialization steps to adapt to a given chain or use external tools.
Alert statistics
This is an alternative to querying the Zetta API for alert statistics. It saves a local history of the alerts in memory and use it to calculate the rates. The main motivation is to improve performance by avoiding web requests.
To use it, just wrap handle_block
/ handle_transaction
/ handle_alert
as follows:
import forta_toolkit
@forta_toolkit.alerts.alert_history(size=10000)
def handle_block(log: BlockEvent) -> list:
pass
@forta_toolkit.alerts.alert_history(size=10000)
def handle_transaction(log: TransactionEvent) -> list:
pass
@forta_toolkit.alerts.alert_history(size=10000)
def handle_alert(log: AlertEvent) -> list:
pass
The decorator will automatically add the anomaly_score
in the metadata of the Finding
objects.
It will use the field alert_id
from the Finding
objects to identify them.
make sure the history size is big enough to contain occurences of the bot alerts!
For example, if your bot triggers ALERT-1
every 2k transactions and ALERT-2
every 10k on average:
@alert_history(size=100000)
would gather enough alerts to have a relevant estimation of the rate of both alerts.
Logging execution events
Improving performances
Load balancing
Profiling
The bots have to follow the pace of the blockchain, so they need to process transactions relatively quickly.
You can leverage the profiling tools to find the performance bottlenecks in your bots:
from forta_toolkit.profiling import test_performances, display_performances
test_performances(func=handle_transaction, data=some_tx_log)
display_performances(logpath='./test_performances')
Otherwise, you can monitor the performances directly when processing mainnet transactions.
Just decorate the handle_block
/ handle_transaction
/ handle_alert
as follows:
@forta_toolkit.alerts.profile
def handle_transaction(tx: TransactionEvent) -> list:
pass
Then you can parse the profile logs manually with pstats
or:
display_performances(logpath='some/path/to/the/logs/handle_transaction')
Development
Contributions welcome!
Changelog
See CHANGELOG.
Todo
See TODO.
Credits
The RPC request queue was inspired by the TS module forta-helpers
by Artem Kovalchuk.
License
Licensed under the aGPL v3.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file forta_toolkit-0.1.18.tar.gz
.
File metadata
- Download URL: forta_toolkit-0.1.18.tar.gz
- Upload date:
- Size: 7.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.6.1 CPython/3.11.5 Linux/6.5.9-arch2-1
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | f019842e92d592eb6bc1f62665b3272f2051f8bb84caa774b77799dd3458de2e |
|
MD5 | 6593f38c268250c0f0f855a41d3d9bc1 |
|
BLAKE2b-256 | 57ebf5ebd8c829a825e80ae03c790b4d5dcc26a4c6715fc5ae44e8fbcfc1a6e6 |
File details
Details for the file forta_toolkit-0.1.18-py3-none-any.whl
.
File metadata
- Download URL: forta_toolkit-0.1.18-py3-none-any.whl
- Upload date:
- Size: 9.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.6.1 CPython/3.11.5 Linux/6.5.9-arch2-1
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 10f0fc1172e3c07f72af2e4451d30f7e931ec3ae87a679945d98a2e4a50b0a06 |
|
MD5 | 754d59c9201aa826401412d503d61517 |
|
BLAKE2b-256 | 8aed0fe49e178431f5c4a37bb6b237b10a187f30d94f64828615e73cce6fe989 |