Buyer Rewards

Incentivizing buyers and balancing rewards between producers and buyers in the Nosh network


We have discussed how to give token rewards to producers in the Nosh economy, but we could equally consider giving rewards to buyers. This is especially important if we want to encourage more transactions.

We can adopt pretty similar mechanisms as before. A buyer, vv also builds up a graph, with edge weights w(u,v)w(u,v) as they complete transactions with producers. Out of this graph, each buyer can be assigned a graph value GvG_v, that can also be composed of of quantities such as the sum of their weights uw(u,v)\sum_u w(u,v), or things like their eigenvector centrality.

Need for a separate graph: As we have discussed previously, producers are able to cash out their graph values for an amount of tokens given by the valuation MtM_t. In doing so, they change the value of their weights in the graph. If the same graph is being used to compute the buyer's graph value GvG_v, then the buyer's graph value would be affected any time a producer cashes out. So it may be necessary to keep information of two different graphs, one for producers and one for buyers, which have weights updated when producers cash out, and when buyers cash out, respectively.

We can denote the two separate graphs by assigning different weights on the provider graph and the buyer graph. We label the different weights as wU(u,v)w^U(u,v) and wV(u,v)w^V(u,v), respectively.

We can also assign a Valuation function, Nt(Gv)N_t(G_v), that determines how many tokens the buyer is able to mint given their graph value, as well as what fraction of rewards the buyer will receive.

We update our formula for circulating supply to,

St=T+uUMt(Gu)+vVNt(Gv).S_t=T+\sum_{u \in U}M_t(G_u)+\sum_{v\in V}N_t(G_v).

Cashing out and reabsorbing tokens work in the same way, where the buyer can change the value of their weights by removing or adding tokens.

Buyer vs producer valuation

If both producers and buyers will be receiving rewards, an important network parameter is then to decide how rewards will be distributed between producers and buyers. We can parameterize this via the valuation functions as,

Mt=aLt,Nt=(1a)Lt,M_t=aL_t,\,\,\,\,\,\,N_t=(1-a)L_t,

where we can think of LtL_t as the "total" token valuation, and a(0,1)a\in(0,1) parametrizes how much of the rewards we give to producers vs buyers.

The idea is that aa should be chosen to maximize some sort of network objective function.

Network objective function

There are several metrics we want to maximize, for example: total number of transactions, total fees collected, connectivity of the entire network.

We'd like to have a large network with many producers and buyers, but where these are high quality producers and buyers as well. For instance, we want a large number of producers U\vert U\vert, but also for each of these to collect a large amount of fees, and also to be well connected. For accounting amount of fees, we can define an average edge weight

W^U1UuU,vVwU(u,v).\hat W^U\equiv \frac{1}{\vert U\vert}\sum_{u\in U,v\in V}w^U(u,v).

To account for connectivity of the entire network, we can calculate the average eigenvector centrality of all producers,

A good possible objective function is then a combination of all these,

LU=x^UUW^U=x^UuU,vVwU(u,v)\mathcal{L}^U=\hat{x}^U*\vert U\vert *\hat{W}^U=\hat{x}^U*\sum_{u\in U,v\in V}w^U(u,v)

A similar objective can be computed for the buyer side,

LV=x^VVW^V=x^VuU,vVwV(u,v)\mathcal{L}^V=\hat{x}^V*\vert V\vert *\hat{W}^V=\hat{x}^V*\sum_{u\in U,v\in V}w^V(u,v)

The idea is that the parameter aa can influence the objective functions LU\mathcal{L}^U and LV\mathcal{L}^V. This parameter can be set initially through some simulations, but ideally it is up to governance to update this based on goals and network conditions. Governance must be aware of whether conditions are such that it is a "buyer's market" or a "producer's market", and can adjust the parameter aa accordingly to maximize goals.

Notes on avoiding fake transactions

We previously found the constraint,

GuGu1+Gu2,G_u\ge G_{u_1}+G_{u_2},

To avoid fake transactions where a provider splits into two fake providers to attempt to gain more rewards.

If we also introduce rewards for buyers, we can assume the original provider will split into two fake providers and a set of fake buyers, VuV^u. The inequality then becomes,

aLt(Gu)aLt(Gu1)+aLt(Gu2)+vVu(1a)Lt(Gv).aL_t(G_u)\ge aL_t(G_{u_1})+aL_t(G_{u_2})+\sum_{v\in V^u} (1-a)L_t(G_v).

The levers here to prevent fake transactions are then the same parameter, α\alpha as before (assuming users have the same graph value function, but they could also have different ones with different value of α\alpha). Also the parameter aa can be used here to minimize the effect of adding fake buyers.

Optional additional buyer incentives

We may want to give the option to individual providers to actively incentivize their buyers. We can do this buy allowing them to transfer some of their graph value to their users.

If the provider has edges with a set of buyers VuV^u, wU(u,v)w^U(u,v) with vVuv\in V^u, we need a mechanism that reduces the edge weights on the provider graph, and increases the edge weights on the buyer graph.

The transformation can take the form,

wU(u,v)bwU(u,v),wV(u,v)ba1awv(u,v),w^U(u,v)\to b w^U(u,v),\,\,\,\,\,\,w^V(u,v)\to b\frac{a}{1-a}w^v(u,v),

for all vVuv\in V^u. This transformation transfers the graph value from the provider graph, to the buyer graph, while adjusting for the fact that the two graphs have different token valuations.