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-endpoint
to 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
, которую можно найти здесь