Protocol Rewards

Learn more about how SatLayer enables protocols to pay rewards for the shared cryptoeconomic security

SatLayer is a coordination layer which enables individuals to restake their Bitcoin and secure a set of Bitcoin Validated Services (BVSs). The functions required to secure the BVSs are carried out by operators, who receive staked Bitcoin assets and use that capital to validate BVSs on behalf of restakers.

To ensure a robust amount of Bitcoin assets for security and proper operator functioning, BVSs must reward good behavior in the form of payments made to restakers and operators. This page describes how these payments function.

BVS Payments Workflow

1

Calculate rewards to restakers/operators off-chain

BVSs calculate and disperse rewards to restakers and operators at their discretion. These rewards must be formatted as a distribution.json file, adhering to the following schema. An example JSON file is shown below:

{
    "token": "[REWARD TOKEN ADDRESS]",
    "earners": [
        {
            "earner": "[EARNER ADDRESS]",
            "reward": "[REWARD AMOUNT]"
        },
        ...
    ],
}
2

Submit distribution via GitHub

Once the rewards are computed, the service submits the distribution.json file as a Pull Request (PR) to a public GitHub repository managed by SatLayer (TBD).

3

Generate Merkle tree over the rewards

The BVS then computes a Merkle tree of the rewards owed using the data from the distribution.json file they originally generated (details of the Merkle tree format and a generation script will be released in Phase II). If the BVS submits the rewards distribution file to GitHub in step 2, the merkle tree will be computed automatically via GitHub actions on behalf of the BVS.

4

Distributing rewards

The service then calls the distributeRewards function in the bvs-rewards contract with the merkleRoot and the totalAmount to distribute.

The service must ensure it holds a sufficient balance of tokens to complete the transfer from the its account to the bvs-rewards contract.

Restaker and Operator Rewards Claiming

Operators can receive their rewards from services rendered from the bvs-rewards contract. They can do so by calling the claimRewards function on the bvs-rewards contract. When calling this function, they must provide the following information:

  • Merkle root

  • Merkle proof

  • Claimant address

  • Total amount of rewards

  • Merkle index

This information can be computed by calling the SatLayer CLI (not yet released) using the Merkle tree and claimant address of the restaker/operator.

Last updated

Was this helpful?