Developers
DevelopersGuides
  • Introducing Bond
    • Introduction
    • Why we build Bond?
    • Roles In Bond Ecosystem
    • Decentralised Relations/Social Graph
    • Architecture
    • Bond Reward Model
      • Leech Principle
      • Barrel Principle
  • Main Concepts
    • Bond Profile
      • Identity
      • Relationships
      • Content
      • Creator Economy
    • Connection
      • Connection NFTs
    • Bond Social Graph
    • Centralities
      • In/Out Degree Centrality
      • Betweenness Centrality
      • Closeness Centrality
      • PageRank Centrality
    • Reward Models
    • Reward Contracts
    • Off-chain Oracles
    • Gasless Mode
    • Cross Chain Messaging and Pay Gas with Bond Token
  • Bond API
    • Introduction
    • API Urls
    • Getting started with GraphQL
    • Authentication
      • Login
      • Refresh JWT
    • Profile
      • Create Profile
      • SetProfileMetadata
    • Connect
      • Connect a profile
      • Disconnect
  • Smart Contracts
    • BondHub
    • MerkelDistributor
    • TokenDeployer
    • SingleStakePoolDeployer
    • LzTokenDeployer
    • LzSingleStakePoolDeployer
  • Bond SDK
    • Bond JS SDK
      • Authenticate
      • Create Profile
      • Connect
  • Bond Nodes
    • Hardware Requirements
    • Set up and Deploy
    • Node Config (TOML)
    • Secrets Config (TOML)
    • Role-Based Access Control (RBAC)
  • References
    • Deployed Contracts
    • Github
Powered by GitBook
On this page
  • Why choose the Bond Incentive Model?
  • User Goals/Story:
  • Introduction to Bond Reward Model
  • Staking Reward Calculation
  • Social Value Computation
  1. Introducing Bond

Bond Reward Model

Why choose the Bond Incentive Model?

The Bond incentive model stands out with its versatility and customisability, offering unique support for a variety of project needs. It allows projects to choose and further refine the incentive model based on specific requirements. Here's how it provides multifaceted advantages:

Diverse Incentive Schemes: Through various incentive models, Bond ensures projects can find a scheme suited to their unique needs, whether they're focused on user acquisition, retention, or community building.

Dynamic Customisation: Bond recognises there's no one-size-fits-all standard, hence its incentive model allows for ongoing adjustments. As the project evolves, there's flexibility to continuously optimise and tweak incentive rules and parameters, ensuring alignment with strategic goals.

Bridging the Wealth Gap: In scenarios where there's a disparity in stakes, like referral networks, the Bond incentive model can balance these inequalities. Users with lower stakes can bridge the gap through harder work, like inviting more individuals, thus creating a fair incentive structure.

User Goals/Story:

As an actively participating user, I aspire for my involvement and contribution to receive fair rewards. I hope that everyone has an equal opportunity to earn rewards, not just a privileged few. To achieve this, I want a transparent and fair rewards mechanism, ensuring my efforts and time are valued. Additionally, I wish to receive and use my rewards promptly and securely, without facing complicated procedures or security threats.

As a project, I aim to motivate a larger user base to engage and interact, establishing an active and valuable community. To realise this objective, I require a reliable, user-friendly reward system that promptly offers incentives to users. Moreover, I hope to receive real-time feedback and suggestions from the market to constantly enhance our project and services.

Note: It's crucial to recognise that the actively participating user and the minority holding a majority of tokens might be the same individual. The key lies in ensuring, with vast user participation and interaction, the rewards system remains just and transparent, whilst also safeguarding user data and privacy.

Introduction to Bond Reward Model

Staking Reward Calculation

Token_Stake_Reward=h(Staked_Amount, Duration)\text{Token\_Stake\_Reward}=h(\text{Staked\_Amount, Duration})Token_Stake_Reward=h(Staked_Amount, Duration)

where hhh is a function that calculates the reward based on the StakedAmountStaked_AmountStakedA​mount​ (i.e., the quantity of tokens staked) and DurationDurationDuration​ (i.e., the length of time staked).

Social Value Computation

In the Bond project, social value (SVSVSV) is an important indicator that measures a user's influence and activity in the social network. The calculation of social value mainly refers to some centrality indicators in network science, including:

Out Degree Centrality (OD): This is an indicator to measure the activity of nodes. The out-degree centrality of a node refers to the number of new users invited by the node. In Bond's social network, out-degree centrality can reflect the user's activity.

Betweenness Centrality(BC): This is an indicator to measure the importance of nodes in the network. A node with high betweenness centrality means that it is on the shortest path between many nodes in the network, which means that the node has a great influence on information flow. In Bond's social network, betweenness centrality can reflect the user's activity in inviting new users, that is, the user's influence.

Closeness Centrality (CC): This is an indicator to measure the central location of nodes in the network. A node with high closeness centrality means that it is relatively close to other nodes in the network, that is, the node can influence other nodes more quickly. In Bond's social network, closeness centrality can reflect the user's position in the social network, that is, the user's influence range.

When calculating social value, these three indicators are weighted and merged according to their importance to obtain a comprehensive social value of a user. SV can be represented as a weighted sum of the three centrality algorithms. The specific formula could be:

SV(u)=w1×OD(u)+w2×BC(u)+w3×CC(u)\begin{aligned}SV(u)=w_1\times OD(u)+w_2\times BC(u)+w_3\times CC(u)\end{aligned}SV(u)=w1​×OD(u)+w2​×BC(u)+w3​×CC(u)​

where SV(u)SV(u)SV(u)​ denotes the social value of user uuu​, and OD(u)OD(u)OD(u)​, BC(u)BC(u)BC(u)​, and CC(u)CC(u)CC(u)​ represent the out-degree centrality, betweenness centrality, and closeness centrality of user u​, respectively. w1w1w1​, w2w2w2​, and w3w3w3​ are the corresponding weights, satisfying w1+w2+w3=1​w1+w2+w3=1​w1+w2+w3=1​.

Unweighted Social Network

Next, I'll detail the algorithms for these three centralities:

Out-Degree Centrality

In directed networks, a node's out-degree centrality is the number of edges emanating from that node. For undirected networks, it's simply the number of edges connected to that node.

OD(u)=number of edges going out of node un−1OD(u)=\frac{\text{number of edges going out of node }u}{n-1}OD(u)=n−1number of edges going out of node u​

where nnn​ is the total number of nodes in the network.

Betweenness Centrality

Betweenness centrality measures the number of times a node lies on the shortest path between other node pairs. The formula is:

BC(u)=∑s≠u≠tσst(u)σstBC(u)=\sum_{s\neq u\neq t}\frac{\sigma_{st}(u)}{\sigma_{st}}BC(u)=s=u=t∑​σst​σst​(u)​

where σst\sigma_{st}σst​​ is the total number of shortest paths from node s to node ttt, and σst(u)\sigma_{st}(u)σst​(u)​ is those paths that pass through node u​u​u​.

Closeness Centrality

Closeness centrality measures the inverse of the average shortest distance from a node to all other nodes in the network. The formula is:

CC(u)=n−1∑v≠ud(u,v)CC(u)=\frac{n-1}{\sum_{v\neq u}d(u,v)}CC(u)=∑v=u​d(u,v)n−1​

where d(u,v)d(u,v)d(u,v)​ is the shortest distance between nodes uuu​ and vvv​.

These three centralities provide insights into the various roles and importance of nodes in the network. Choosing appropriate weights is crucial and depends on your project objectives and specific use-case.

Weighted Social Network

In directed graphs, the weight of each edge is determined by the number of tokens staked by the invitee and the duration of their staking.

Suppose there's a directed edge from node uuu​ to node vvv​, indicating that user u​u​u​ invited user vvv​. If user v​ staked token svs_vsv​​ quantity of tokens in the social network and the staking duration was duration vvv​, then the weight of the edge (u,v)(u,v)(u,v)​ is:

weightu,v=tokensv×durationvweight_{u,v}=tokens_v\times duration_vweightu,v​=tokensv​×durationv​

Next, we will use these weights to adjust the centrality metrics. Let's delve into the details and introduce the weights.

Difference in Out-Degree Centrality

For each node uuu​, Out-Degree Centrality describes either the number of edges connected to uuu​ (unweighted) or the total weight of these edges (weighted).

  • Unweighted:

ODunweighted(u)=∣N(u)∣\begin{aligned}OD_{unweighted}(u)=|N(u)|\end{aligned}ODunweighted​(u)=∣N(u)∣​

where N(u)N(u)N(u)​ is the set of target nodes connected by edges originating from node u​,and ∣N(u)∣|N(u)|∣N(u)∣​ represents the size of the set.

  • Weighted:

ODweighted(u)=∑v∈N(u)tokensv×durationvOD_{weighted}(u)=\sum_{v\in N(u)}tokens_v\times duration_v \\ODweighted​(u)=v∈N(u)∑​tokensv​×durationv​

where weight uuu, vvv​ is the edge weight from node u​u​u​ to node vvv​.

So we have:

ΔOD(u)=w1×(∑v∈N(u)tokensv×durationv−∣N(u)∣)\begin{aligned} \Delta OD(u)=w_1\times\left(\sum_{v\in N(u)}tokens_v\times duration_v-|N(u)|\right) \end{aligned}ΔOD(u)=w1​×​v∈N(u)∑​tokensv​×durationv​−∣N(u)∣​​

Difference in Betweenness Centrality

For simplification here, we'll use the notation σσσ​ to represent all shortest paths, and σuv(w)\sigma_{uv}(w)σuv​(w) for all shortest paths passing through node w​w​w​.

  • Unweighted: BCunweighted(u)BC_{unweighted}(u)BCunweighted​(u)​ is the number of times node u​ appears on the unweighted shortest paths between all pairs of nodes.

  • Weighted: BCweighted(u)BC_{weighted}(u)BCweighted​(u)​is the number of times node u​ appears on the weighted shortest paths between all pairs of nodes, where each edge's weight is determined by the number of staked tokens and the duration of staking by the invitee.

So we have:

ΔBC(u)=w2×(∑s≠u≠tσst(u)σst)weighted−(∑s≠u≠tσst(u)σst)unweighted\Delta BC(u)=w_2\times\left(\sum_{s\neq u\neq t}\frac{\sigma_{st}(u)}{\sigma_{st}}\right)_{weighted}-\left(\sum_{s\neq u\neq t}\frac{\sigma_{st}(u)}{\sigma_{st}}\right)_{unweighted}ΔBC(u)=w2​×​s=u=t∑​σst​σst​(u)​​weighted​−​s=u=t∑​σst​σst​(u)​​unweighted​
ΔBC(u)=w2×(∑s≠u,t≠uσst(tokens,duration)σst(u;tokens,duration)−σstσst(u))\Delta BC(u)=w_2\times\left(\frac{\sum_{s\neq u,t\neq u}\sigma_{st}(tokens,duration)}{\sigma_{st}(u;tokens,duration)}-\frac{\sigma_{st}}{\sigma_{st}(u)}\right)ΔBC(u)=w2​×(σst​(u;tokens,duration)∑s=u,t=u​σst​(tokens,duration)​−σst​(u)σst​​)

Difference in Closeness Centrality

  • Unweighted: CCunweighted(u)​CC_{unweighted}(u)​CCunweighted​(u)​ is the reciprocal of the average shortest distance from node uuu to all other nodes.

  • Weighted: CCweighted(u)​CC_{weighted}(u)​CCweighted​(u)​ is calculated based on the shortest path distances with edge weights, where a larger edge weight corresponds to a "smaller" distance.

Let's define the "distance" of each edge as the reciprocal of the edge weight:

distanceu,v=1tokensv×durationvdistance_{u,v}=\frac1{tokens_v\times duration_v}distanceu,v​=tokensv​×durationv​1​
ΔCC(u)=w3×(1∑v≠udweight(u,v)−1∑v≠udunweight(u,v))\Delta CC(u)=w_3\times\left(\frac1{\sum_{v\neq u}d_{weight}(u,v)}-\frac1{\sum_{v\neq u}d_{unweight}(u,v)}\right)ΔCC(u)=w3​×(∑v=u​dweight​(u,v)1​−∑v=u​dunweight​(u,v)1​)

Where dweight(u,v)​d_{weight}(u,v)​dweight​(u,v)​ and dweight(u,v)d_{weight}(u,v)dweight​(u,v)​ represent the shortest "distance" from node u​ to node v​ with and without considering weights respectively.

In conclusion, when factored into the original formula, we obtain:

ΔSV(u)=w1×(∑v∈N(u)tokensv×durationv−∣N(u)∣)+w2×(∑s≠u≠tσst(u;tokens,duration)σst(tokens,duration)−σst(u)σst)+w3×(1∑v≠u1tokensv×durationv−1∑v≠udunweight(u,v))\begin{aligned} &\Delta SV(u)=w_1\times\left(\sum_{v\in N(u)}tokens_v\times duration_v-|N(u)|\right)+w_2\times \\ &\begin{aligned}&\left(\sum_{s\neq u\neq t}\frac{\sigma_{st}(u;tokens,duration)}{\sigma_{st}(tokens,duration)}-\frac{\sigma_{st}(u)}{\sigma_{st}}\right)+w_3\times\\&\left(\frac1{\sum_{v\neq u}\frac1{tokens_v\times duration_v}}-\frac1{\sum_{v\neq u}d_{unweight}(u,v)}\right)\end{aligned} \end{aligned}​ΔSV(u)=w1​×​v∈N(u)∑​tokensv​×durationv​−∣N(u)∣​+w2​×​​s=u=t∑​σst​(tokens,duration)σst​(u;tokens,duration)​−σst​σst​(u)​​+w3​×(∑v=u​tokensv​×durationv​1​1​−∑v=u​dunweight​(u,v)1​)​​

Note: This formula, in practice, would require relevant graph theory algorithms for concrete implementation.

Example

Specifically, we use a scale-free network model and the Monte Carlo algorithm to simulate a dataset, and then select representative data to compare the impact of considering weights on social value:

In order to further compare the impact of staked tokens and invites on SV under the condition of considering the weight, we can

  • Normalise the two values, so that they both fall within the [0, 1] range. We can use the Min-Max Scaling method to achieve this.

  • Plot the social values (SV) of the two to visualise the effect of inviting new users and the amount staked by users on the social value.

First step, we calculate the normalised social value:

SV normalised (x)=SV (x)−min⁡(SV (x))max⁡(SV (x))−min⁡(SV (x))SV normalised (y)=SV (y)−min⁡(SV (y))max⁡(SV (y))−min⁡(SV (y))\begin{gathered} \text{SV normalised (x)} =\frac{\mathrm{SV~(x)-\min(SV~(x))}}{\max(\mathrm{SV~(x)})-\min(\mathrm{SV~(x)})} \\ \text{SV normalised (y)} =\frac{\mathrm{SV~(y)}-\min(\mathrm{SV~(y)})}{\max(\mathrm{SV~(y)})-\min(\mathrm{SV~(y)})} \end{gathered}SV normalised (x)=max(SV (x))−min(SV (x))SV (x)−min(SV (x))​SV normalised (y)=max(SV (y))−min(SV (y))SV (y)−min(SV (y))​​

Then let's consider the impact of staked tokens without weight calculations. In this case, obviously, the value of SV has nothing to do with staked tokens, so it has no effect.

So we have:

Additionally, we have a hypothetical case:

In a reward calculation with a period of 5 weeks:

User1 invites 20 new users, each user stakes 10 tokens;

User2 invites 10 new users, each user stakes 500 tokens;

After we calculate the social value rewards with the algorithm using user contributions as weights and the method without weights, it can be clearly seen: when the project party chooses to use the algorithm using user contributions as weights to calculate user rewards, the user2 with higher total contribution in the network gets more rewards, while the rewards of user1 decrease compared to the algorithm without weights.

Of course, adding weight will definitely set a certain threshold for new users, but the algorithm with weight will also create more fairness for the project and avoid attacks such as "Sybil attacks". So we also allow project parties to choose whether to apply this weight, and let project parties balance these problems according to the specific project operation plan.

Fairness Realization

The Bond reward model achieves fairness for all users while ensuring the effectiveness of the incentive mechanism. Affluent users enjoy higher rewards by holding more tokens, ensuring that their investments are returned; while non-affluent users can increase their social value by increasing the number of new users invited, thereby gaining more rewards. This method not only ensures the fair distribution of rewards but also encourages all users to actively participate in the project.

To be specific, for the Social Value part in our reward model, we use an example to explain:

For example, the project party sets w_social to 0.10, which means that users can make up for the gap between affluent and non-affluent users through their own work, i.e., invitation behaviour, and eliminate the "wealth gap", creating a system that "does not only benefit the rich".

If users are not "high stake users", they can get more rewards by inviting more users. However, if users want to get that 10% reward by increasing their social value, the total staking number of tokens multiplied by the staking time of the new users they invite needs to be equal to the total staking number of tokens multiplied by the staking time of the new users invited by "high stake users". This means that if a user does not have many affluent friends, he can invite more people to increase his social value and get that 10% reward.

Therefore, Bond project does not only distribute rewards according to the number of tokens held by users. If a user does not hold a large number of tokens, they can still get more rewards by actively inviting more new users and increasing their social value. This mechanism ensures that even if users are not wealthy, they have the opportunity to get more rewards through their efforts, ensuring the fairness of the project.

PreviousArchitectureNextLeech Principle

Last updated 1 year ago