<aside> đź’ˇ Update 5/5/21 - This proposal mentions a quadratic shaped bonding curve, but currently the protocol uses a curve of the form y=mx (reserve ratio of 1/2).

</aside>

Background

The Graph uses Curation signaling as a way of indicating to an Indexer what subgraphs might be valuable to index. Signaling involves depositing GRT into an automated market maker called a bonding curve, which mints subgraph-specific "signal" tokens at a price determined by the shape of the curve.

In order for signaling to be meaningful, Indexers must have a reasonable expectation that Curators won't shift their signal to a new subgraph at a moment's notice—after all, indexing a subgraph is an expensive and time-consuming activity.

To give Indexers confidence that this will not be the case, there is a withdrawal tax on the bonding curve such that if a Curator were to repeatedly signal on different subgraphs, without earning or buying more in the meantime, they would see their holdings of GRT approach zero.

An important implication of this rule is that signaling in the core protocol must happen on subgraph versions, which are immutable, rather than on a subgraph name. However, while the core protocol has no concept of signaling on names, it is possible to implement this in the Graph Name Service, which is a registry that sits above the core protocol.

The reason for implementing signaling on subgraph names is that it offers a more intuitive alternative to users of The Graph who may wish to simply signal on a name and know that they will always be signaling on the latest version.

Basic Design

The basic design is to leverage a concept called nested bonding curves. The idea is that once a user deposits their GRT into the bonding curve of the latest version of a subgraph, they re-deposit the version-specific signal tokens (vSignal) they receive into a second bonding curve which mints name-specific signal tokens (nSignal).

We can roughly think of this like function composition.

$$ \psi_{name} = g(f(x)) $$

Where:

$$ \begin{aligned}\psi_{name}&\text{ is the name-specific signal received} \\ f(x) &\text{ is the version-specific bonding curve} \\ g(x) &\text{ is the name-specific bonding curve}\end{aligned} $$

For f(x) we've previously discussed a bonding curve of the form:

$$ f(x)=ax^2 $$

For the second bonding curve we recommend a "flat", constant-price, curve of the form:

$$ g(x)=c, \text{ where c is a constant.} $$

This is because the composition of f(x) and g(x) will already be quadratic from f(x)'s contribution and it's unnecessary to make the curve even steeper.

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/f7fb235a-285f-4d7b-9777-4b113f93ba14/Subgraph_Name_Signaling.png