This document is the technical specification for the Graph Horizon protocol, it describes the main functionality of each contract and provides some implementation guidelines. Worth noting that this document describes the end state for the protocol, intermediate stages like the transition period during the Horizon upgrade are not considered here.

The following is a list of all protocol contracts by category:

Graph Horizon: staking protocol

The staking protocol is the core of Graph Horizon. It provides the staking layer for data services to use as economic security and the primitives to build upon. The staking protocol is implemented by a single contract, HorizonStaking, which should have no external dependencies other than the GraphToken contract.

HorizonStaking contract

Graph Horizon: payments protocol

<aside> ⚠️ A note on terminology. Receiver is the generic term for an entity receiving a payment through the payments protocol. If the payment is originated via a data service this will be the service provider.

</aside>

The payments protocol consists of two main contracts and an arbitrary amount of collector contracts:

IPaymentCollector interface

PaymentsEscrow contract

GraphPayments contract

Payment collectors: Graph Tally Collector

Collectors can be permissionlessly developed and used with the payments protocol, GraphTallyCollector is the first one that will be available in Graph Horizon. It’s designed to be used with the Graph Tally protocol, formerly known as “Timeline Aggregation Protocol v2 (TAP)”.

GraphTallyCollector contract