6 minutes
GraphTally Guide
Learn about The Graph’s new payment system, GraphTally (previously Timeline Aggregation Protocol). This system provides fast, efficient microtransactions with minimized trust.
Aperçu
GraphTally is a drop-in replacement to the Scalar payment system currently in place. It provides the following key features:
- Gère efficacement les micropaiements.
- Ajoute une couche de consolidations aux transactions et aux coûts onchain.
- Permet aux Indexeurs de contrôler les recettes et les paiements, garantissant ainsi le paiement des requêtes.
- Il permet des passerelles décentralisées, sans confiance, et améliore les performances du service d’indexation pour les expéditeurs multiples.
Spécificités
GraphTally allows a sender to make multiple payments to a receiver, Receipts, which aggregates these payments into a single payment, a Receipt Aggregate Voucher, also known as a RAV. This aggregated payment can then be verified on the blockchain, reducing the number of transactions and simplifying the payment process.
Pour chaque requête, la passerelle vous enverra un reçu signé
qui sera stocké dans votre base de données. Ensuite, ces requêtes seront agrégées par un tap-agent
par le biais d’une demande. Vous recevrez ensuite un RAV. Vous pouvez mettre à jour un RAV en l’envoyant avec des reçus plus récents, ce qui générera un nouveau RAV avec une valeur plus élevée.
À propos des RAV
-
C’est de l’argent qui attend d’être envoyé à la blockchain.
-
Il continuera à envoyer des demandes d’agrégation et veillera à ce que la valeur totale des recettes non agrégées ne dépasse pas le « montant que vous êtes prêt à risquer de perdre ».
-
Chaque RAV ne peut être racheté qu’une seule fois dans les contrats, c’est pourquoi ils sont envoyés après la clôture de l’allocation.
Rachat de RAV
Tant que vous exécutez tap-agent
et indexer-agent
, tout sera exécuté automatiquement. Voici une description détaillée du processus :
-
Un Indexeur clôture l’allocation.
-
Pendant la période
<recently-closed-allocation-buffer>, tap-agent
regroupe tous les reçus (receipts) en attente pour cette allocation particulière et demande leur agrégation dans un RAV, en le marquant comme « dernier » (last). -
indexer-agent
récupère tous les derniers RAVS et envoie des demandes de rachat à la blockchain, qui mettra à jour la valeur deredeem_at
. -
Pendant la période
<finality-time>
,indexer-agent
surveille si la blockchain a des réorganisations qui annulent la transaction.- Si elle a été annulée, la RAV est renvoyée à la blockchain. S’il n’a pas été modifié, il est marqué comme
final
.
- Si elle a été annulée, la RAV est renvoyée à la blockchain. S’il n’a pas été modifié, il est marqué comme
Adresses sur la blockchain
Contrats
Contrat | Mainnet Arbitrum (42161) | Arbitrum Sepolia (421614) |
---|---|---|
TAP Verifier | 0x33f9E93266ce0E108fc85DdE2f71dab555A0F05a | 0xfC24cE7a4428A6B89B52645243662A02BA734ECF |
AllocationIDTracker | 0x5B2F33d7Ca6Ec88f5586f2528f58c20843D9FE7c | 0xAaC28a10d707bbc6e02029f1bfDAEB5084b2aD11 |
Tiers de confiance (Escrow) | 0x8f477709eF277d4A880801D01A140a9CF88bA0d3 | 0x1e4dC4f9F95E102635D8F7ED71c5CdbFa20e2d02 |
Passerelle (Gateway)
Composant | Mainnet Node et Edge (Arbitrum Mainnet) | Testnet Node et Edge (Arbitrum Mainnet) |
---|---|---|
Sender | 0xDDE4cfFd3D9052A9cb618fC05a1Cd02be1f2F467 | 0xC3dDf37906724732FfD748057FEBe23379b0710D |
Signataires | 0xfF4B7A5EfD00Ff2EC3518D4F250A27e4c29A2211 | 0xFb142dE83E261e43a81e9ACEADd1c66A0DB121FE |
Aggregateur | https://tap-aggregator.network.thegraph.com | https://tap-aggregator.testnet.thegraph.com |
Prérequis
In addition to the typical requirements to run an indexer, you’ll need a tap-escrow-subgraph
endpoint to query updates. You can use The Graph Network to query or host yourself on your graph-node
.
- Graph TAP Arbitrum Sepolia Subgraph (for The Graph testnet)
- Graph TAP Arbitrum One Subgraph (for The Graph mainnet)
Note: indexer-agent
does not currently handle the indexing of this Subgraph like it does for the network Subgraph deployment. As a result, you have to index it manually.
Guide De Migration
Versions du logiciel
La version requise du logiciel peut être trouvée ici.
Étapes
-
Agent d’indexeur
- Suivez le même processus.
- Give the new argument
--tap-subgraph-endpoint
to activate the new GraphTally codepaths and enable redeeming of RAVs.
-
Indexer Service
- Remplacez complètement votre configuration actuelle par le nouveau service d’Indexeur rs. Il est recommandé d’utiliser l’image du conteneur.
- Comme dans la version précédente, vous pouvez facilement faire monter Indexer Service en charge (scaling horizontal) car il reste sans état (stateless).
-
TAP Agent
- Exécutez une seule instance de Agent TAP à tout moment. Il est recommandé d’utiliser l’image de conteneur.
-
Configuration de l’Indexer Service et du TAP Agent
La configuration se fait via un fichier TOML partagé entre
indexer-service
ettap-agent
, passé en paramètre par--config /path/to/config.toml
.Consultez la configuration complète et les valeurs par défaut
Pour une configuration minimale, utilisez le modèle suivant :
1# You will have to change *all* the values below to match your setup.2#3# Some of the config below are global graph network values, which you can find here:4# <https://github.com/graphprotocol/indexer/tree/main/docs/networks>5#6# Pro tip: if you need to load some values from the environment into this config, you7# can overwrite with environment variables. For example, the following can be replaced8# by [PREFIX]_DATABASE_POSTGRESURL, where PREFIX can be `INDEXER_SERVICE` or `TAP_AGENT`:9#10# [database]11# postgres_url = "postgresql://indexer:${POSTGRES_PASSWORD}@postgres:5432/indexer_components_0"1213[indexer]14indexer_address = "0x1111111111111111111111111111111111111111"15operator_mnemonic = "celery smart tip orange scare van steel radio dragon joy alarm crane"1617[database]18# The URL of the Postgres database used for the indexer components. The same database19# that is used by the `indexer-agent`. It is expected that `indexer-agent` will create20# the necessary tables.21postgres_url = "postgres://postgres@postgres:5432/postgres"2223[graph_node]24# URL to your graph-node's query endpoint25query_url = "<http://graph-node:8000>"26# URL to your graph-node's status endpoint27status_url = "<http://graph-node:8000/graphql>"2829[subgraphs.network]30# Query URL for the Graph Network Subgraph.31query_url = "<http://example.com/network-subgraph>"32# Optional, deployment to look for in the local `graph-node`, if locally indexed.33# Locally indexing the Subgraph is recommended.34# NOTE: Use `query_url` or `deployment_id` only35deployment_id = "Qmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"3637[subgraphs.escrow]38# Query URL for the Escrow Subgraph.39query_url = "<http://example.com/network-subgraph>"40# Optional, deployment to look for in the local `graph-node`, if locally indexed.41# Locally indexing the Subgraph is recommended.42# NOTE: Use `query_url` or `deployment_id` only43deployment_id = "Qmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"4445[blockchain]46# The chain ID of the network that the graph network is running on47chain_id = 133748# Contract address of TAP's receipt aggregate voucher (RAV) verifier.49receipts_verifier_address = "0x2222222222222222222222222222222222222222"5051########################################52# Specific configurations to tap-agent #53########################################54[tap]55# This is the amount of fees you are willing to risk at any given time. For ex.56# if the sender stops supplying RAVs for long enough and the fees exceed this57# amount, the indexer-service will stop accepting queries from the sender58# until the fees are aggregated.59# NOTE: Use strings for decimal values to prevent rounding errors60# e.g:61# max_amount_willing_to_lose_grt = "0.1"62max_amount_willing_to_lose_grt = 206364[tap.sender_aggregator_endpoints]65# Key-Value of all senders and their aggregator endpoints66# This one below is for the E&N testnet gateway for example.670xDDE4cfFd3D9052A9cb618fC05a1Cd02be1f2F467 = "https://tap-aggregator.network.thegraph.com"
Notez :
- Les valeurs de
tap.sender_aggregator_endpoints
peuvent être trouvées dans la section passerelle. - Les valeurs de
blockchain.receipts_verifier_address
doivent être utilisées conformément à la Section des adresses Blockchain en utilisant le chain id approprié.
Niveau de journalisation
- Vous pouvez définir le niveau de journalisation en utilisant la variable d’environnement
RUST_LOG
. - Il est recommandé de le mettre à
RUST_LOG=indexer_tap_agent=debug,info
.
Monitoring
Métriques
Tous les composants exposent le port 7300 qui peut être interrogé par prometheus.
Tableau de bord Grafana
Vous pouvez télécharger le Tableau de bord Grafana et l’importer.
Launchpad
Actuellement, il existe une version WIP de indexer-rs
et de tap-agent
qui peut être trouvée ici