Skip to main content

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.

Parsing logs / traces / transactions

The forta-agent returns slightly different objects compared to a direct query on a RPC endpoint.

The parsing functions convert these objects into plain dictionaries, with only HEX string data. Instead of a mix of bytes, HexBytes, str, int with irregular formats.

</code></pre>
<h3>Logging execution events</h3>
<h3>Improving performances</h3>
<h3>Load balancing</h3>
<h3>Profiling</h3>
<p>The bots have to follow the pace of the blockchain, so they need to process transactions relatively quickly.</p>
<p>You can leverage the profiling tools to find the performance bottlenecks in your bots:</p>
<pre lang="python"><code>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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

forta_toolkit-0.1.22.tar.gz (8.5 kB view details)

Uploaded Source

Built Distribution

forta_toolkit-0.1.22-py3-none-any.whl (10.3 kB view details)

Uploaded Python 3

File details

Details for the file forta_toolkit-0.1.22.tar.gz.

File metadata

  • Download URL: forta_toolkit-0.1.22.tar.gz
  • Upload date:
  • Size: 8.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.6.1 CPython/3.11.5 Linux/6.6.1-arch1-1

File hashes

Hashes for forta_toolkit-0.1.22.tar.gz
Algorithm Hash digest
SHA256 7a93ca6dd373893924084ef33889374e187112264ded626d1a15993f9ddbf802
MD5 bdd591fba43ecfc7334a3a9b7ef24062
BLAKE2b-256 d623b5524a128a4136b9a3ac11412f1218c3de27ad01a18877720ede654281c0

See more details on using hashes here.

File details

Details for the file forta_toolkit-0.1.22-py3-none-any.whl.

File metadata

  • Download URL: forta_toolkit-0.1.22-py3-none-any.whl
  • Upload date:
  • Size: 10.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.6.1 CPython/3.11.5 Linux/6.6.1-arch1-1

File hashes

Hashes for forta_toolkit-0.1.22-py3-none-any.whl
Algorithm Hash digest
SHA256 0a3062d9a96470899cb80284880ac65ef4a86650aef158b1acd399e6f0844ecf
MD5 e778240f18ef755f31a4bfd030efa198
BLAKE2b-256 b10a7b80fda3027fc8ba83e1163c70a8656d3f92324e0ff575668dc641ae88ee

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page