5 минуты
GraphTally Guide
Learn about The Graph’s new payment system, GraphTally (previously Timeline Aggregation Protocol). This system provides fast, efficient microtransactions with minimized trust.
Обзор
GraphTally is a drop-in replacement to the Scalar payment system currently in place. It provides the following key features:
- Эффективно обрабатывает микроплатежи.
- Добавляет уровень консолидации к транзакциям и затратам ончейна.
- Позволяет Индексаторам управлять поступлениями и платежами, гарантируя оплату запросов.
- Обеспечивает децентрализованные, не требующие доверия шлюзы и повышает производительность
indexer-serviceдля нескольких отправителей.
Специфические особенности
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.
Для каждого запроса шлюз отправит вам signed receipt, который будет сохранен в Вашей базе данных. Затем эти запросы будут агрегированы tap-agent через запрос. После этого Вы получите RAV. Вы можете обновить RAV, отправив ему новые квитанции, что приведет к генерации нового RAV с увеличенным значением.
Подробнее о RAV
-
Это денежные средства, которые ждут отправки в блокчейн.
-
Он будет продолжать отправлять запросы на агрегирование и гарантировать, что общая стоимость неагрегированных поступлений не превысит
amount willing to lose(сумму, которую мы готовы потерять). -
Каждый RAV можно выкупить один раз в контрактах, поэтому они отправляются после закрытия аллокации.
Выкуп RAV
При запуске tap-agent и indexer-agent все будет выполняться автоматически. Ниже приводится подробное описание процесса:
-
Индексатор закрывает аллокацию.
-
<recently-closed-allocation-buffer> period, tap-agentпринимает все ожидающие поступления для этой конкретной аллокации и запрашивает агрегацию в RAV, помечая её какlast. -
indexer-agentберет все последние RAVS и отправляет запросы на выкуп в блокчейн, который обновит значениеredeem_at. -
В течение периода
<finality-time>indexer-agentотслеживает, происходят ли в блокчейне какие-либо реорганизации, которые отменяют транзакцию.- Если он был отменён, RAV повторно отправляется в блокчейн. Если он не был отменён, он помечается как
final.
- Если он был отменён, RAV повторно отправляется в блокчейн. Если он не был отменён, он помечается как
Адреса блокчейна
Контракты
| Контракт | Arbitrum Mainnet (42161) | Arbitrum Sepolia (421614) |
|---|---|---|
| TAP-верификатор | 0x33f9E93266ce0E108fc85DdE2f71dab555A0F05a | 0xfC24cE7a4428A6B89B52645243662A02BA734ECF |
| AllocationIDTracker | 0x5B2F33d7Ca6Ec88f5586f2528f58c20843D9FE7c | 0xAaC28a10d707bbc6e02029f1bfDAEB5084b2aD11 |
| Escrow | 0x8f477709eF277d4A880801D01A140a9CF88bA0d3 | 0x1e4dC4f9F95E102635D8F7ED71c5CdbFa20e2d02 |
Шлюз
| Компонент | Edge и Node Mainnet (Arbitrum Mainnet) | Edge и Node Testnet (Arbitrum Sepolia) |
|---|---|---|
| Отправитель | 0xDDE4cfFd3D9052A9cb618fC05a1Cd02be1f2F467 | 0xC3dDf37906724732FfD748057FEBe23379b0710D |
| Подписанты | 0xfF4B7A5EfD00Ff2EC3518D4F250A27e4c29A2211 | 0xFb142dE83E261e43a81e9ACEADd1c66A0DB121FE |
| Агрегатор | https://tap-aggregator.network.thegraph.com | https://tap-aggregator.testnet.thegraph.com |
Предварительные требования
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.
Руководство по миграции
Версии программного обеспечения
Требуемую версию программного обеспечения можно найти [здесь] (https://github.com/graphprotocol/indexer/blob/main/docs/networks/arbitum-one.md#latest-releases).
Шаги
-
Indexer Agent
- Следуйте [этому же процессу] (https://github.com/graphprotocol/indexer/pkgs/container/indexer-agent#graph-protocol-indexer-compents).
- Give the new argument
--tap-subgraph-endpointto activate the new GraphTally codepaths and enable redeeming of RAVs.
-
Indexer Service
- Полностью замените текущую конфигурацию на новую службу Индексатора rs. Рекомендуется использовать образ контейнера.
- Как и в старой версии, Вы можете легко расположить Indexer Service горизонтально. Он по-прежнему не закреплен.
-
TAP Agent
- Всегда запускайте один единственный экземпляр TAP Agent. Рекомендуется использовать образ контейнера.
-
Настройка Indexer Service и TAP Agent
Конфигурация представляет собой файл TOML, совместно используемый
indexer-serviceиtap-agent, снабженный аргументом--config /path/to/config.toml.Ознакомьтесь с полной конфигурацией и значениями по умолчанию
Для минимальной конфигурации используйте следующий шаблон:
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"Примечания:
- Значения для
tap.sender_aggregator_endpointsможно найти в разделе шлюза. - Значения для
blockchain.receipts_verifier_addressдолжны использоваться в соответствии с разделом Адреса блокчейна с использованием соответствующего идентификатора чейна.
Уровень лога
- Вы можете установить уровень лога, используя переменную среды RUST_LOG.
- Рекомендуется установить для него значение
RUST_LOG=indexer_tap_agent=debug,info.
Мониторинг
Метрики
Все компоненты предоставляют порт 7300 для запроса Prometheus.
Графический интерфейс Grafana
Вы можете скачать Графический интерфейс Grafana и импортировать.
Панель запуска
В настоящее время существует WIP-версия indexer-rs и tap-agent, которую можно найти здесь